说明:1、实现网易云热评第三方api接口及降级处理

2、在状态枚举类中加入了文案类型处理
pull/254/head
xjs 4 years ago
parent 8e00b924a9
commit de097be0e9

@ -2,7 +2,7 @@ package com.xjs.common.client;
import com.alibaba.fastjson.JSONObject;
import com.xjs.common.aop.ApiLog;
import com.xjs.common.client.factory.TianXingFeignFactory;
import com.xjs.common.client.factory.TianXingPYQFeignFactory;
import com.xjs.copywriting.domain.RequestBody;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.GetMapping;
* @create 2021-12-27
*/
@FunctionalInterface
@FeignClient(name = "tianXing",url = "http://api.tianapi.com/pyqwenan/index",fallbackFactory = TianXingFeignFactory.class)
public interface TianXingFeignClient {
@FeignClient(name = "tianXingPYQ",url = "http://api.tianapi.com/pyqwenan/index",fallbackFactory = TianXingPYQFeignFactory.class)
public interface TianXingPYQFeignClient {
@GetMapping
@ApiLog(name = "tianXing",

@ -0,0 +1,24 @@
package com.xjs.common.client;
import com.alibaba.fastjson.JSONObject;
import com.xjs.common.aop.ApiLog;
import com.xjs.common.client.factory.TianXingWYYFeignFactory;
import com.xjs.copywriting.domain.RequestBody;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @author xiejs
* @desc api
* @create 2021-12-28
*/
@FunctionalInterface
@FeignClient(name = "tianXingWYY",url = "http://api.tianapi.com/hotreview/index",fallbackFactory = TianXingWYYFeignFactory.class)
public interface TianXingWYYFeignClient {
@GetMapping
@ApiLog(name = "tianXing",
url = "http://api.tianapi.com/hotreview/index",
method = "Get")
JSONObject copyWritingApi(@SpringQueryMap RequestBody requestBody);
}

@ -1,23 +1,22 @@
package com.xjs.common.client.factory;
import com.alibaba.fastjson.JSONObject;
import com.xjs.common.client.TianXingFeignClient;
import com.xjs.common.client.TianXingPYQFeignClient;
import lombok.extern.log4j.Log4j2;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* @author xiejs
* @desc
* @desc
* @create 2021-12-28
*/
@Log4j2
@Component
public class TianXingFeignFactory implements FallbackFactory<TianXingFeignClient> {
public class TianXingPYQFeignFactory implements FallbackFactory<TianXingPYQFeignClient> {
@Override
public TianXingFeignClient create(Throwable cause) {
log.error("英语模块文案服务调用失败:{},执行降级处理", cause.getMessage());
public TianXingPYQFeignClient create(Throwable cause) {
log.error("英语模块网易云热评服务调用失败:{},执行降级处理", cause.getMessage());
return requestBody -> {
JSONObject jsonObject = new JSONObject();
//构建一个异常json给下层接口处理

@ -0,0 +1,27 @@
package com.xjs.common.client.factory;
import com.alibaba.fastjson.JSONObject;
import com.xjs.common.client.TianXingWYYFeignClient;
import lombok.extern.log4j.Log4j2;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* @author xiejs
* @desc
* @create 2021-12-28
*/
@Log4j2
@Component
public class TianXingWYYFeignFactory implements FallbackFactory<TianXingWYYFeignClient> {
@Override
public TianXingWYYFeignClient create(Throwable cause) {
log.error("英语模块朋友圈文案服务调用失败:{},执行降级处理", cause.getMessage());
return requestBody -> {
JSONObject jsonObject = new JSONObject();
//构建一个异常json给下层接口处理
jsonObject.put("error", 500);
return jsonObject;
};
}
}

@ -11,7 +11,9 @@ import com.fasterxml.jackson.annotation.JsonValue;
public enum StatusEnum {
SUCCESS(1,"成功"),
ERROR(2,"失败");
ERROR(2,"失败"),
PYQ(1,"朋友圈文案"),
WYY(2,"网易云热评");
private String desc;
@ -25,6 +27,7 @@ public enum StatusEnum {
this.desc = desc;
}
@Override
public String toString() {
return desc;

@ -32,7 +32,9 @@ import java.util.Optional;
public class CopyWritingController {
@Autowired
private CopyWritingFactory tianXingcopyWritingFactory;
private CopyWritingFactory tianXingPYQCopyWritingFactory;
@Autowired
private CopyWritingFactory tianXingWYYCopyWritingFactory;
@Autowired
private CopyWritingService copyWritingService;
@ -70,7 +72,8 @@ public class CopyWritingController {
private CopyWritingFactory randomApi() {
ArrayList<CopyWritingFactory> factories = new ArrayList<>();
//添加了新接口只需要在这add接口进去
factories.add(tianXingcopyWritingFactory);
factories.add(tianXingPYQCopyWritingFactory);
factories.add(tianXingWYYCopyWritingFactory);
//--------add----------------------------;-
//随机调用集合中的接口
return RandomUtil.randomEle(factories);

@ -5,6 +5,7 @@ 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 com.xjs.common.enums.StatusEnum;
import lombok.Data;
import java.io.Serializable;
@ -35,4 +36,7 @@ public class CopyWriting implements Serializable {
@Excel(name = "创建时间")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@Excel(name = "文案类型")
private StatusEnum type;
}

@ -3,8 +3,9 @@ package com.xjs.copywriting.factory.impl;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xjs.common.client.TianXingFeignClient;
import com.xjs.common.client.TianXingPYQFeignClient;
import com.xjs.common.config.TianXingProperties;
import com.xjs.common.enums.StatusEnum;
import com.xjs.common.exception.ApiException;
import com.xjs.copywriting.domain.CopyWriting;
import com.xjs.copywriting.domain.RequestBody;
@ -17,23 +18,23 @@ import javax.annotation.Resource;
/**
* @author xiejs
* @desc
* @desc
* @create 2021-12-27
*/
@Service
public class TianXingCopyWritingFactory implements CopyWritingFactory {
public class TianXingPYQCopyWritingFactory implements CopyWritingFactory {
@Autowired
private TianXingProperties tianXingProperties;
@Autowired
private TianXingFeignClient tianXingFeignClient;
private TianXingPYQFeignClient tianXingPYQFeignClient;
@Resource
private CopyWritingMapper copyWritingMapper;
@Override
public CopyWriting productCopyWriting(RequestBody requestBody) {
requestBody.setKey(tianXingProperties.getKey());
JSONObject jsonObject = tianXingFeignClient.copyWritingApi(requestBody);
JSONObject jsonObject = tianXingPYQFeignClient.copyWritingApi(requestBody);
//调用服务正常
if(jsonObject.containsKey("code")){
if (HttpStatus.HTTP_OK !=jsonObject.getInteger("code")) {
@ -45,6 +46,7 @@ public class TianXingCopyWritingFactory implements CopyWritingFactory {
CopyWriting copyWriting = new CopyWriting();
copyWriting.setContent(content);
copyWriting.setSource(source);
copyWriting.setType(StatusEnum.PYQ);
copyWritingMapper.insert(copyWriting);
return copyWriting;
}else {

@ -0,0 +1,60 @@
package com.xjs.copywriting.factory.impl;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xjs.common.client.TianXingWYYFeignClient;
import com.xjs.common.config.TianXingProperties;
import com.xjs.common.enums.StatusEnum;
import com.xjs.common.exception.ApiException;
import com.xjs.copywriting.domain.CopyWriting;
import com.xjs.copywriting.domain.RequestBody;
import com.xjs.copywriting.factory.CopyWritingFactory;
import com.xjs.copywriting.mapper.CopyWritingMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @author xiejs
* @desc
* @create 2021-12-28
*/
@Service
public class TianXingWYYCopyWritingFactory implements CopyWritingFactory {
@Autowired
private TianXingProperties tianXingProperties;
@Autowired
private TianXingWYYFeignClient tianXingWYYFeignClient;
@Resource
private CopyWritingMapper copyWritingMapper;
@Override
public CopyWriting productCopyWriting(RequestBody requestBody) {
requestBody.setKey(tianXingProperties.getKey());
JSONObject jsonObject = tianXingWYYFeignClient.copyWritingApi(requestBody);
//调用服务正常
if(jsonObject.containsKey("code")){
if (HttpStatus.HTTP_OK !=jsonObject.getInteger("code")) {
throw new ApiException("天行数据网易云热评接口调用异常");
}
JSONArray newslist = jsonObject.getJSONArray("newslist");
String content = newslist.getJSONObject(0).getString("content");
String source = newslist.getJSONObject(0).getString("source");
CopyWriting copyWriting = new CopyWriting();
copyWriting.setContent(content);
copyWriting.setSource(source);
copyWriting.setType(StatusEnum.WYY);
copyWritingMapper.insert(copyWriting);
return copyWriting;
}else {
//调用服务失败的降级之后的处理
if (jsonObject.containsKey("error")) {
return copyWritingMapper.getOneToNew();
}
return new CopyWriting();
}
}
}

@ -17,7 +17,7 @@ import static org.junit.jupiter.api.Assertions.*;
* @create 2021-12-27
*/
@SpringBootTest(classes = XjsEnglishApp.class)
class TianXingCopyWritingFactoryTestJob {
class TianXingPYQCopyWritingFactoryTestJob {
@Autowired
CopyWritingFactory tianXingCopyWritingFactory;
Loading…
Cancel
Save