说明:1、天行数据每日一句api后端调用获取数据

2、TODO controller接口实现以及前端页面调用实现
pull/254/head
xjs 4 years ago
parent e2c9304441
commit 5d643953ec

@ -29,6 +29,8 @@ public class ApiConst {
public static final String ROLL_A_WORD= "ROLL-每日一句";
public static final String TIANXING_A_WORD= "天行-每日一句";
@ -56,6 +58,8 @@ public class ApiConst {
public static final String ROLL_A_WORD_URL= "https://www.mxnzp.com/api/daily_word/recommend";
public static final String TIANXING_A_WORD_URL= "http://api.tianapi.com/everyday/index";

@ -0,0 +1,17 @@
package com.xjs.aword.controller;
import com.ruoyi.common.core.web.controller.BaseController;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* api
* @author xiejs
* @since 2022-01-08
*/
@RequestMapping("aword")
@RestController
@Api(tags = "业务模块-每日一句")
public class ApiAWordController extends BaseController {
}

@ -0,0 +1,62 @@
package com.xjs.aword.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.annotation.Excel;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* api
* @author xiejs
* @since 2022-01-08
*/
@Data
@TableName("api_a_word")
@Accessors(chain = true)
public class ApiAWord implements Serializable {
private static final long serialVersionUID = 1L;
/** 主键 */
@TableId
private Long id;
/** 数据id */
@Excel(name = "数据id")
private Long dataId;
/** 句子内容 */
@Excel(name = "句子内容")
private String content;
/** 来源 */
@Excel(name = "来源")
private String source;
/** 释义 */
@Excel(name = "释义")
private String note;
/** 音频地址 */
@Excel(name = "音频地址")
private String tts;
/** 分享图片地址 */
@Excel(name = "分享图片地址")
private String imgurl;
/** 该句子产生时间 */
@Excel(name = "该句子产生时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date date;
/** 创建时间 */
@Excel(name = "创建时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
}

@ -0,0 +1,27 @@
package com.xjs.aword.domain;
import lombok.Data;
/**
*
* @author xiejs
* @since 2022-01-08
*/
@Data
public class RequestBody {
/**
* key
*/
private String key;
/**
*
*/
private Integer rand;
/**
*
*/
private String date;
}

@ -0,0 +1,20 @@
package com.xjs.aword.factory;
import com.xjs.aword.domain.ApiAWord;
import com.xjs.aword.domain.RequestBody;
/**
*
* @author xiejs
* @since 2022-01-08
*/
public interface AWordFactory {
/**
*
* @param requestBody
* @return ApiAWord
*/
ApiAWord productApiAWord(RequestBody requestBody);
}

@ -0,0 +1,57 @@
package com.xjs.aword.factory.impl;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xjs.aword.domain.ApiAWord;
import com.xjs.aword.domain.RequestBody;
import com.xjs.aword.factory.AWordFactory;
import com.xjs.aword.mapper.ApiAWordMapper;
import com.xjs.common.client.TianXingMMYJFeignClient;
import com.xjs.config.TianXingProperties;
import com.xjs.exception.ApiException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
*
* @author xiejs
* @since 2022-01-08
*/
@Component
public class TianXingAWordFactory implements AWordFactory {
@Autowired
private TianXingProperties tianXingProperties;
@Autowired
private TianXingMMYJFeignClient tianXingMMYJFeignClient;
@Resource
private ApiAWordMapper apiAWordMapper;
@Override
public ApiAWord productApiAWord(RequestBody requestBody) {
requestBody.setRand(1);
requestBody.setKey(tianXingProperties.getKey());
JSONObject jsonObject = tianXingMMYJFeignClient.aWordApi(requestBody);
if (jsonObject.containsKey("error")) {
throw new ApiException("天行每日一句接口调用异常");
}
if (HttpStatus.HTTP_OK == jsonObject.getInteger("code")) {
JSONArray newslist = jsonObject.getJSONArray("newslist");
JSONObject newslistJSONObject = newslist.getJSONObject(0);
ApiAWord apiAWord = new ApiAWord();
apiAWord.setContent(newslistJSONObject.getString("content"))
.setDataId(newslistJSONObject.getLong("id"))
.setSource(newslistJSONObject.getString("source"))
.setDate(newslistJSONObject.getDate("date"))
.setImgurl(newslistJSONObject.getString("imgurl"))
.setNote(newslistJSONObject.getString("note"))
.setTts(newslistJSONObject.getString("tts"));
apiAWordMapper.insert(apiAWord);
return apiAWord;
}else {
return new ApiAWord();
}
}
}

@ -0,0 +1,13 @@
package com.xjs.aword.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xjs.aword.domain.ApiAWord;
/**
* mapper
* @author xiejs
* @since 2022-01-08
*/
public interface ApiAWordMapper extends BaseMapper<ApiAWord> {
}

@ -0,0 +1,30 @@
package com.xjs.common.client;
import com.alibaba.fastjson.JSONObject;
import com.xjs.aword.domain.RequestBody;
import com.xjs.common.aop.ApiLog;
import com.xjs.common.client.factory.TianXingMMYJFeignFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.GetMapping;
import static com.xjs.consts.ApiConst.TIANXING_A_WORD;
import static com.xjs.consts.ApiConst.TIANXING_A_WORD_URL;
/**
* feignapi
* @author xiejs
* @since 2022-01-08
*/
@FeignClient(name = "tianXingMMYJ", url = TIANXING_A_WORD_URL, fallbackFactory = TianXingMMYJFeignFactory.class)
public interface TianXingMMYJFeignClient {
@GetMapping
@ApiLog(name = TIANXING_A_WORD,
url = TIANXING_A_WORD_URL,
method = "Get")
JSONObject aWordApi(@SpringQueryMap RequestBody requestBody);
}

@ -0,0 +1,27 @@
package com.xjs.common.client.factory;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.R;
import com.xjs.common.client.TianXingMMYJFeignClient;
import lombok.extern.log4j.Log4j2;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* @author xiejs
* @since 2022-01-08
*/
@Component
@Log4j2
public class TianXingMMYJFeignFactory implements FallbackFactory<TianXingMMYJFeignClient> {
@Override
public TianXingMMYJFeignClient create(Throwable cause) {
log.error("api模块天行每日一句服务调用失败:{},执行降级处理", cause.getMessage());
return requestBody -> {
JSONObject jsonObject = new JSONObject();
jsonObject.put("error", R.FAIL);
return jsonObject;
};
}
}
Loading…
Cancel
Save