parent
cffa71e6de
commit
a7d2e4dff2
@ -0,0 +1,29 @@
|
||||
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.copywriting.domain.RequestBody;
|
||||
import feign.Param;
|
||||
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.*;
|
||||
|
||||
/**
|
||||
* 天行数据全网热搜feign远程调用api
|
||||
* @author xiejs
|
||||
* @since 2022-01-10
|
||||
*/
|
||||
@FunctionalInterface
|
||||
@FeignClient(name = "tianXingQWRS",url = TIANXING_TOPSEARCHALLNETWORK_URL,fallbackFactory = TianXingQWRSFeignFactory.class)
|
||||
public interface TianXingQWRSFeignClient {
|
||||
|
||||
@GetMapping
|
||||
@ApiLog(name = TIANXING_TOPSEARCHALLNETWORK_URL,
|
||||
url = TIANXING_PYQ_URL,
|
||||
method = "Get")
|
||||
JSONObject topSearchApi(@Param("key") String key);
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
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.TianXingQWRSFeignClient;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author xiejs
|
||||
* @since 2022-01-10
|
||||
*/
|
||||
@Component
|
||||
@Log4j2
|
||||
public class TianXingQWRSFeignFactory implements FallbackFactory<TianXingQWRSFeignClient> {
|
||||
|
||||
@Override
|
||||
public TianXingQWRSFeignClient create(Throwable cause) {
|
||||
log.error("api模块天行全网热搜榜服务调用失败:{},执行降级处理", cause.getMessage());
|
||||
return requestBody -> {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
//构建一个异常json给下层接口处理
|
||||
jsonObject.put("error", R.FAIL);
|
||||
return jsonObject;
|
||||
};
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.xjs.topsearch.controller;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author xiejs
|
||||
* @since 2022-01-10
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("topsearch")
|
||||
@Api(tags = "业务模块-热搜管理")
|
||||
@Log4j2
|
||||
public class ApiTopSearchController {
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package com.xjs.topsearch.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.ruoyi.common.core.annotation.Excel;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 全网热搜api实体
|
||||
* @author xiejs
|
||||
* @since 2022-01-10
|
||||
*/
|
||||
@Data
|
||||
@TableName("api_topsearch_allnetwork")
|
||||
public class ApiTopsearchAllnetwork {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键 */
|
||||
private Long id;
|
||||
|
||||
/** 热搜话题 */
|
||||
@Excel(name = "热搜话题")
|
||||
private String title;
|
||||
|
||||
/** 话题简介 */
|
||||
@Excel(name = "话题简介")
|
||||
private String digest;
|
||||
|
||||
/** 热搜榜指数 */
|
||||
@Excel(name = "热搜榜指数")
|
||||
private Long hotnum;
|
||||
|
||||
@Excel(name = "创建时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.xjs.topsearch.factory;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 热搜api工厂 默认使用tianxing接口
|
||||
* @author xiejs
|
||||
* @since 2022-01-10
|
||||
*/
|
||||
public interface TopserachFactory<T> {
|
||||
|
||||
/**
|
||||
* 热搜api工厂方法
|
||||
* @return Object
|
||||
*/
|
||||
List<T> topSearchApi();
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
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.TianXingQWRSFeignClient;
|
||||
import com.xjs.config.TianXingProperties;
|
||||
import com.xjs.exception.ApiException;
|
||||
import com.xjs.topsearch.domain.ApiTopsearchAllnetwork;
|
||||
import com.xjs.topsearch.factory.TopserachFactory;
|
||||
import com.xjs.topsearch.service.ApiTopsearchAllnetworkService;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 天行全网热搜工厂实现
|
||||
*
|
||||
* @author xiejs
|
||||
* @since 2022-01-10
|
||||
*/
|
||||
@Component
|
||||
@Log4j2
|
||||
public class TianXingTopsearchAllnetworkFactory implements TopserachFactory<ApiTopsearchAllnetwork> {
|
||||
|
||||
@Autowired
|
||||
private TianXingProperties tianXingProperties;
|
||||
@Autowired
|
||||
private TianXingQWRSFeignClient tianXingQWRSFeignClient;
|
||||
@Autowired
|
||||
private ApiTopsearchAllnetworkService apiTopsearchAllnetworkService;
|
||||
|
||||
|
||||
@Override
|
||||
public List<ApiTopsearchAllnetwork> topSearchApi() {
|
||||
|
||||
JSONObject jsonObject = tianXingQWRSFeignClient.topSearchApi(tianXingProperties.getKey());
|
||||
if (!jsonObject.containsKey("error")) {
|
||||
if (jsonObject.getInteger("code") == HttpStatus.SUCCESS) {
|
||||
JSONArray newslist = jsonObject.getJSONArray("newslist");
|
||||
List<ApiTopsearchAllnetwork> collect = newslist.stream().map(arrayJson -> {
|
||||
ApiTopsearchAllnetwork apiTopsearchAllnetwork = new ApiTopsearchAllnetwork();
|
||||
JSONObject json = (JSONObject) arrayJson;
|
||||
apiTopsearchAllnetwork.setDigest(json.getString("digest"));
|
||||
apiTopsearchAllnetwork.setHotnum(json.getLong("hotnum"));
|
||||
apiTopsearchAllnetwork.setTitle(json.getString("title"));
|
||||
return apiTopsearchAllnetwork;
|
||||
}).collect(Collectors.toList());
|
||||
log.info("全网热搜批量插入成功了嘛---" + apiTopsearchAllnetworkService.saveBatch(collect));
|
||||
return collect;
|
||||
} else {
|
||||
throw new ApiException("天行全网热搜服务调用成功,但返回异常");
|
||||
}
|
||||
} else {
|
||||
throw new ApiException("天行全网热搜服务调用失败,被降级!!");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package com.xjs.topsearch.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.xjs.topsearch.domain.ApiTopsearchAllnetwork;
|
||||
|
||||
/**
|
||||
* @author xiejs
|
||||
* @since 2022-01-10
|
||||
*/
|
||||
public interface ApiTopsearchAllnetworkMapper extends BaseMapper<ApiTopsearchAllnetwork> {
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.xjs.topsearch.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.xjs.topsearch.domain.ApiTopsearchAllnetwork;
|
||||
|
||||
/**
|
||||
* 全网热搜service
|
||||
* @author xiejs
|
||||
* @since 2022-01-10
|
||||
*/
|
||||
public interface ApiTopsearchAllnetworkService extends IService<ApiTopsearchAllnetwork> {
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.xjs.topsearch.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.xjs.topsearch.domain.ApiTopsearchAllnetwork;
|
||||
import com.xjs.topsearch.mapper.ApiTopsearchAllnetworkMapper;
|
||||
import com.xjs.topsearch.service.ApiTopsearchAllnetworkService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author xiejs
|
||||
* @since 2022-01-10
|
||||
*/
|
||||
@Service
|
||||
public class ApiTopsearchAllnetworkServiceImpl extends ServiceImpl<ApiTopsearchAllnetworkMapper, ApiTopsearchAllnetwork> implements ApiTopsearchAllnetworkService {
|
||||
}
|
Loading…
Reference in new issue