From 5d643953ecbda282c88c030d6166271948f99f12 Mon Sep 17 00:00:00 2001 From: xjs <1294405880@qq.com> Date: Sat, 8 Jan 2022 17:54:34 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B4=E6=98=8E=EF=BC=9A1=E3=80=81=E5=A4=A9?= =?UTF-8?q?=E8=A1=8C=E6=95=B0=E6=8D=AE=E6=AF=8F=E6=97=A5=E4=B8=80=E5=8F=A5?= =?UTF-8?q?api=E5=90=8E=E7=AB=AF=E8=B0=83=E7=94=A8=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=20=20=20=20=20=202=E3=80=81TODO=20controller?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=9E=E7=8E=B0=E4=BB=A5=E5=8F=8A=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E9=A1=B5=E9=9D=A2=E8=B0=83=E7=94=A8=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/xjs/consts/ApiConst.java | 4 ++ .../aword/controller/ApiAWordController.java | 17 +++++ .../java/com/xjs/aword/domain/ApiAWord.java | 62 +++++++++++++++++++ .../com/xjs/aword/domain/RequestBody.java | 27 ++++++++ .../com/xjs/aword/factory/AWordFactory.java | 20 ++++++ .../factory/impl/TianXingAWordFactory.java | 57 +++++++++++++++++ .../com/xjs/aword/mapper/ApiAWordMapper.java | 13 ++++ .../client/TianXingMMYJFeignClient.java | 30 +++++++++ .../factory/TianXingMMYJFeignFactory.java | 27 ++++++++ 9 files changed, 257 insertions(+) create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/controller/ApiAWordController.java create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/ApiAWord.java create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/RequestBody.java create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/factory/AWordFactory.java create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/factory/impl/TianXingAWordFactory.java create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/mapper/ApiAWordMapper.java create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/TianXingMMYJFeignClient.java create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingMMYJFeignFactory.java diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java index 83eb1a08..73141492 100644 --- a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java +++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java @@ -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"; + diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/controller/ApiAWordController.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/controller/ApiAWordController.java new file mode 100644 index 00000000..2216f2bc --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/controller/ApiAWordController.java @@ -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 { +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/ApiAWord.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/ApiAWord.java new file mode 100644 index 00000000..c18fcfc5 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/ApiAWord.java @@ -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; + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/RequestBody.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/RequestBody.java new file mode 100644 index 00000000..61629068 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/domain/RequestBody.java @@ -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; + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/factory/AWordFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/factory/AWordFactory.java new file mode 100644 index 00000000..f082e0b5 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/factory/AWordFactory.java @@ -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); + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/factory/impl/TianXingAWordFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/factory/impl/TianXingAWordFactory.java new file mode 100644 index 00000000..1e6b7188 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/factory/impl/TianXingAWordFactory.java @@ -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(); + } + } +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/mapper/ApiAWordMapper.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/mapper/ApiAWordMapper.java new file mode 100644 index 00000000..4d8b0904 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/aword/mapper/ApiAWordMapper.java @@ -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 { + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/TianXingMMYJFeignClient.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/TianXingMMYJFeignClient.java new file mode 100644 index 00000000..aa22295d --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/TianXingMMYJFeignClient.java @@ -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; + +/** + * 天行每日一句feign远程api调用 + * @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); + + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingMMYJFeignFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingMMYJFeignFactory.java new file mode 100644 index 00000000..c40b0dda --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingMMYJFeignFactory.java @@ -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 { + + @Override + public TianXingMMYJFeignClient create(Throwable cause) { + log.error("api模块天行每日一句服务调用失败:{},执行降级处理", cause.getMessage()); + return requestBody -> { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("error", R.FAIL); + return jsonObject; + }; + } +}