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 54a1c126..98217680 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 @@ -33,6 +33,8 @@ public class ApiConst { public static final String TIANXING_TOPSEARCHALLNETWORK= "天行-全网热搜榜"; + public static final String TIANXING_TOPSEARCHWECHAT= "天行-微信热搜榜"; + @@ -64,6 +66,8 @@ public class ApiConst { public static final String TIANXING_TOPSEARCHALLNETWORK_URL= "http://api.tianapi.com/networkhot/index"; + public static final String TIANXING_TOPSEARCHALLWECHAT_URL= "http://api.tianapi.com/wxhottopic/index"; + diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/tianxing/TianXingWXRSFeignClient.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/tianxing/TianXingWXRSFeignClient.java new file mode 100644 index 00000000..6a5b82c7 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/tianxing/TianXingWXRSFeignClient.java @@ -0,0 +1,28 @@ +package com.xjs.common.client.api.tianxing; + +import com.alibaba.fastjson.JSONObject; +import com.xjs.common.aop.ApiLog; +import com.xjs.common.client.factory.TianXingQWRSFeignFactory; +import com.xjs.common.client.factory.TianXingWXRSFeignFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import static com.xjs.consts.ApiConst.*; + +/** + * 天行微信热搜feign + * @author xiejs + * @since 2022-01-11 + */ + +@FunctionalInterface +@FeignClient(name = "tianXingWXRS",url = TIANXING_TOPSEARCHALLWECHAT_URL,fallbackFactory = TianXingWXRSFeignFactory.class) +public interface TianXingWXRSFeignClient { + + @GetMapping + @ApiLog(name = TIANXING_TOPSEARCHWECHAT, + url = TIANXING_TOPSEARCHALLWECHAT_URL, + method = "Get") + JSONObject topSearchApi(@RequestParam("key") String key); +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingQWRSFeignFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingQWRSFeignFactory.java index 622f679e..bb3d5a7f 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingQWRSFeignFactory.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingQWRSFeignFactory.java @@ -18,7 +18,7 @@ public class TianXingQWRSFeignFactory implements FallbackFactory { + return key -> { JSONObject jsonObject = new JSONObject(); //构建一个异常json给下层接口处理 jsonObject.put("error", R.FAIL); diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingWXRSFeignFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingWXRSFeignFactory.java new file mode 100644 index 00000000..e7b8bf75 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/TianXingWXRSFeignFactory.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.api.tianxing.TianXingWXRSFeignClient; +import lombok.extern.log4j.Log4j2; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * @author xiejs + * @since 2022-01-11 + */ +@Log4j2 +@Component +public class TianXingWXRSFeignFactory implements FallbackFactory { + @Override + public TianXingWXRSFeignClient create(Throwable cause) { + log.error("api模块天行微信热搜榜服务调用失败:{},执行降级处理", cause.getMessage()); + return key -> { + JSONObject jsonObject = new JSONObject(); + //构建一个异常json给下层接口处理 + jsonObject.put("error", R.FAIL); + return jsonObject; + }; + } +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/controller/ApiTopSearchController.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/controller/ApiTopSearchController.java index a37ed429..a36b9029 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/controller/ApiTopSearchController.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/controller/ApiTopSearchController.java @@ -4,6 +4,7 @@ import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.security.annotation.RequiresLogin; import com.xjs.topsearch.domain.ApiTopsearchAllnetwork; +import com.xjs.topsearch.domain.ApiTopsearchWechat; import com.xjs.topsearch.factory.TopserachFactory; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -31,6 +32,8 @@ public class ApiTopSearchController { @Autowired private TopserachFactory tianXingTopsearchAllnetworkFactory; + @Autowired + private TopserachFactory tianXingTopsearchWechatFactory; @GetMapping @@ -41,7 +44,7 @@ public class ApiTopSearchController { //获取全网热搜 List allnetworkList = tianXingTopsearchAllnetworkFactory.topSearchApi(); //获取微博热搜 - + List wechatList = tianXingTopsearchWechatFactory.topSearchApi(); //获取抖音热搜 //获取微信热搜 @@ -51,6 +54,7 @@ public class ApiTopSearchController { Map listHashMap = new HashMap<>(); listHashMap.put("allnetworkList", allnetworkList); + listHashMap.put("wechatList", wechatList); return AjaxResult.success(listHashMap); } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/domain/ApiTopsearchWechat.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/domain/ApiTopsearchWechat.java new file mode 100644 index 00000000..c616cfdc --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/domain/ApiTopsearchWechat.java @@ -0,0 +1,38 @@ +package com.xjs.topsearch.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 java.io.Serializable; +import java.util.Date; + +/** + * 微信热搜榜实体 + * @author xiejs + * @since 2022-01-11 + */ +@Data +@TableName("api_topsearch_wechat") +public class ApiTopsearchWechat implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 主键 */ + @TableId("id") + private Long id; + + /** 话题 */ + @Excel(name = "话题") + private String word; + + + @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/topsearch/factory/impl/TianXingTopsearchAllnetworkFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/factory/impl/TianXingTopsearchAllnetworkFactory.java index 9596c03f..ec66862e 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/factory/impl/TianXingTopsearchAllnetworkFactory.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/factory/impl/TianXingTopsearchAllnetworkFactory.java @@ -41,9 +41,7 @@ public class TianXingTopsearchAllnetworkFactory implements TopserachFactory topSearchApi() { - String key = tianXingProperties.getKey(); - Map map = MapUtil.builder().put("key", key).map(); - JSONObject jsonObject = tianXingQWRSFeignClient.topSearchApi(key); + JSONObject jsonObject = tianXingQWRSFeignClient.topSearchApi(tianXingProperties.getKey()); if (!jsonObject.containsKey("error")) { if (jsonObject.getInteger("code") == HttpStatus.SUCCESS) { JSONArray newslist = jsonObject.getJSONArray("newslist"); diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/factory/impl/TianXingTopsearchWechatFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/factory/impl/TianXingTopsearchWechatFactory.java new file mode 100644 index 00000000..798dd1a2 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/factory/impl/TianXingTopsearchWechatFactory.java @@ -0,0 +1,68 @@ +package com.xjs.topsearch.factory.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.core.constant.HttpStatus; +import com.xjs.common.client.api.tianxing.TianXingWXRSFeignClient; +import com.xjs.config.TianXingProperties; +import com.xjs.topsearch.domain.ApiTopsearchAllnetwork; +import com.xjs.topsearch.domain.ApiTopsearchWechat; +import com.xjs.topsearch.factory.TopserachFactory; +import com.xjs.topsearch.service.ApiTopsearchWechatService; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 微信热搜api工厂实现 + * + * @author xiejs + * @since 2022-01-11 + */ +@Component +@Log4j2 +public class TianXingTopsearchWechatFactory implements TopserachFactory { + + @Autowired + private TianXingProperties tianXingProperties; + @Autowired + private TianXingWXRSFeignClient tianXingWXRSFeignClient; + @Autowired + private ApiTopsearchWechatService apiTopsearchWechatService; + + + @Override + @Transactional + public List topSearchApi() { + JSONObject jsonObject = tianXingWXRSFeignClient.topSearchApi(tianXingProperties.getKey()); + if (!jsonObject.containsKey("error")) { + if (jsonObject.getInteger("code") == HttpStatus.SUCCESS) { + JSONArray newslist = jsonObject.getJSONArray("newslist"); + List collect = newslist.stream().map(arrayJson -> { + ApiTopsearchWechat apiTopsearchWechat = new ApiTopsearchWechat(); + JSONObject json = (JSONObject) arrayJson; + apiTopsearchWechat.setWord(json.getString("word")); + return apiTopsearchWechat; + }).collect(Collectors.toList()); + log.info("微信热搜批量插入成功了嘛---" + apiTopsearchWechatService.saveBatch(collect)); + return collect; + } else { + log.error("天行微信热搜服务调用成功,但返回异常"); + return new ArrayList<>(); + } + } else { + log.error("天行微信热搜服务调用失败,被降级!!"); + return new ArrayList<>(); + } + } + + + + + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/mapper/ApiTopsearchWechatMapper.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/mapper/ApiTopsearchWechatMapper.java new file mode 100644 index 00000000..52daf31b --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/mapper/ApiTopsearchWechatMapper.java @@ -0,0 +1,11 @@ +package com.xjs.topsearch.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xjs.topsearch.domain.ApiTopsearchWechat; + +/** + * @author xiejs + * @since 2022-01-11 + */ +public interface ApiTopsearchWechatMapper extends BaseMapper { +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/ApiTopsearchWechatService.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/ApiTopsearchWechatService.java new file mode 100644 index 00000000..f9ba9801 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/ApiTopsearchWechatService.java @@ -0,0 +1,11 @@ +package com.xjs.topsearch.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.xjs.topsearch.domain.ApiTopsearchWechat; + +/** + * @author xiejs + * @since 2022-01-11 + */ +public interface ApiTopsearchWechatService extends IService { +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/impl/ApiTopsearchWechatServiceImpl.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/impl/ApiTopsearchWechatServiceImpl.java new file mode 100644 index 00000000..55d9de7e --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/topsearch/service/impl/ApiTopsearchWechatServiceImpl.java @@ -0,0 +1,15 @@ +package com.xjs.topsearch.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xjs.topsearch.domain.ApiTopsearchWechat; +import com.xjs.topsearch.mapper.ApiTopsearchWechatMapper; +import com.xjs.topsearch.service.ApiTopsearchWechatService; +import org.springframework.stereotype.Service; + +/** + * @author xiejs + * @since 2022-01-11 + */ +@Service +public class ApiTopsearchWechatServiceImpl extends ServiceImpl implements ApiTopsearchWechatService { +}