1、job模块细化包分类 新增openapi包,类位置调整

2、百度平台翻译api salt盐值抽出成配置文件
3、编写定时检查第三方API状态是否正常,目前以经实现2个
4、新增定时检查API的定时任务
pull/254/head
xjs 4 years ago
parent 827e8c521f
commit 15690d4d02

@ -0,0 +1,23 @@
package com.xjs.business.api;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.xjs.business.api.factory.RemoteCommonFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
/**
* APIfeign
* @author xiejs
* @since 2022-02-21
*/
@FeignClient(contextId = "remoteCommonFeign",
value = ServiceNameConstants.BUSINESS_OPENAPI_SERVICE,
fallbackFactory = RemoteCommonFactory.class)
public interface RemoteCommonFeign {
@GetMapping("/common/checkApiStatus")
R CheckApiStatusForRPC();
}

@ -0,0 +1,28 @@
package com.xjs.business.api.factory;
import com.ruoyi.common.core.domain.R;
import com.xjs.business.api.RemoteCommonFeign;
import lombok.extern.log4j.Log4j2;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* API
* @author xiejs
* @since 2022-02-21
*/
@Component
@Log4j2
public class RemoteCommonFactory implements FallbackFactory<RemoteCommonFeign> {
@Override
public RemoteCommonFeign create(Throwable cause) {
return new RemoteCommonFeign() {
@Override
public R CheckApiStatusForRPC() {
log.error("API模块通用 降级"+cause.getMessage());
return R.fail("API模块通用 降级");
}
};
}
}

@ -0,0 +1,40 @@
package com.xjs.job.task.openapi;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.common.core.domain.R;
import com.xjs.business.api.RemoteCommonFeign;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
/**
* api
* @author xiejs
* @since 2022-02-21
*/
@Component("CheckApiStatusTask")
@Log4j2
public class CheckApiStatusTask {
@Resource
private RemoteCommonFeign remoteCommonFeign;
public void checkApiStatus() {
log.info("---------------检查api状态定时任务Start-------------------");
LocalDateTime localDateTime1 = DateUtil.date().toLocalDateTime();
R r = remoteCommonFeign.CheckApiStatusForRPC();
log.info("检查api状态定时任务结果:code={},msg={}",r.getCode(),r.getMsg());
LocalDateTime localDateTime2 = DateUtil.date().toLocalDateTime();
long between = ChronoUnit.MILLIS.between(localDateTime1, localDateTime2);
log.info("检查api状态定时任务Job耗费时间:{}ms", between);
log.info("---------------检查api状态定时任务end---------------------");
}
}

@ -1,4 +1,4 @@
package com.xjs.job.task;
package com.xjs.job.task.openapi;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.common.core.domain.R;

@ -1,4 +1,4 @@
package com.xjs.job.task;
package com.xjs.job.task.openapi;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.common.core.domain.R;

@ -1,4 +1,4 @@
package com.xjs.job.task;
package com.xjs.job.task.openapi;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUnit;

@ -1,4 +1,4 @@
package com.xjs.job.task;
package com.xjs.job.task.openapi;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.common.core.domain.R;

@ -24,5 +24,10 @@ public class BaiduProperties {
*/
private String key;
/**
*
*/
private String salt;
}

@ -0,0 +1,34 @@
package com.xjs.common.controller;
import com.ruoyi.common.core.domain.R;
import com.xjs.common.task.CheckApiStatusTask;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* APIcontroller
* @author xiejs
* @since 2022-02-21
*/
@RestController
@RequestMapping("common")
@Api(tags = "业务模块-通用")
@Log4j2
public class ApiCommonController {
@Autowired
private CheckApiStatusTask checkApiStatusTask;
@GetMapping("checkApiStatus")
@ApiOperation("检查api状态")
public R CheckApiStatusForRPC() {
checkApiStatusTask.checkApiStatus();
return R.ok();
}
}

@ -0,0 +1,166 @@
package com.xjs.common.task;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.R;
import com.xjs.annotation.ApiLog;
import com.xjs.business.warning.RemoteWarningCRUDFeign;
import com.xjs.business.warning.domain.ApiRecord;
import com.xjs.common.client.api.alapi.AlapiJokeAllFeignClient;
import com.xjs.common.client.api.baidu.BaiduFeignClient;
import com.xjs.properties.AlApiProperties;
import com.xjs.properties.BaiduProperties;
import com.xjs.translation.domain.qo.translation.BaiDuTranslationQo;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.util.List;
import static com.xjs.consts.ApiConst.DEMOTE_ERROR;
import static com.xjs.consts.ReqConst.ERROR;
/**
* api
*
* @author xiejs
* @since 2022-02-21
*/
@Component
@Log4j2
public class CheckApiStatusTask {
/**
*
*/
public static final String content = "test";
@Autowired
private RemoteWarningCRUDFeign remoteWarningCRUDFeign;
@Autowired
private AlApiProperties alApiProperties;
@Autowired
private BaiduProperties baiduProperties;
@Resource
private AlapiJokeAllFeignClient alapiJokeAllFeignClient;
@Resource
private BaiduFeignClient baiduFeignClient;
/**
* api <br>
* API
*/
public void checkApiStatus() {
this.checkAlapiJoke();
this.checkBaiduTranslation();
// todo 还剩20多个api检查没写
}
/**
* alapiAPI
*/
private void checkAlapiJoke() {
JSONObject jsonObject = alapiJokeAllFeignClient.alapiJokeAllApi(alApiProperties.getToken());
if (!jsonObject.containsKey(DEMOTE_ERROR)) {
return;
}
String[] info = this.getAnnotationInfo(AlapiJokeAllFeignClient.class);
this.selectAndUpdate(info);
log.error("检查发现alapi平台笑话大全API异常");
}
/**
* API
*/
private void checkBaiduTranslation() {
//构建请求参数
String appId = baiduProperties.getAppId();
String key = baiduProperties.getKey();
BaiDuTranslationQo baiDuTranslationQo = new BaiDuTranslationQo();
baiDuTranslationQo.setAppid(appId);
//生成签名(appid+q+salt+密钥的MD5值)
String append = appId + content + baiduProperties.getSalt() + key;
String sign = SecureUtil.md5(append);
baiDuTranslationQo.setSign(sign);
baiDuTranslationQo.setQ(content);
baiDuTranslationQo.setSalt(baiduProperties.getSalt());
JSONObject jsonObject = baiduFeignClient.translationApi(baiDuTranslationQo);
if (!jsonObject.containsKey(DEMOTE_ERROR)) {
return;
}
String[] info = this.getAnnotationInfo(BaiduFeignClient.class);
this.selectAndUpdate(info);
log.error("检查发现百度平台翻译API异常");
}
/**
*
*
* @param cls
* @return [0]=name [1]=url
*/
private String[] getAnnotationInfo(Class<?> cls) {
Method[] publicMethods = ReflectUtil.getPublicMethods(cls);
if (publicMethods.length > 0) {
for (Method method : publicMethods) {
ApiLog annotation = method.getAnnotation(ApiLog.class);
if (annotation != null) {
String name = annotation.name();
String url = annotation.url();
return new String[]{name, url};
}
}
}
return null;
}
/**
*
*
* @param info [0]=name [1]=url
*/
private void selectAndUpdate(String[] info) {
if (info != null) {
ApiRecord apiRecord = new ApiRecord();
apiRecord.setApiName(info[0]);
apiRecord.setApiUrl(info[1]);
R<List<ApiRecord>> listR = remoteWarningCRUDFeign.selectApiRecordListForRPC(apiRecord);
if (listR.getCode() == R.SUCCESS) {
List<ApiRecord> data = listR.getData();
if (CollUtil.isNotEmpty(data)) {
ApiRecord haveApiRecord = data.get(0);
haveApiRecord.setStatus(ERROR);
//置为空让mp自动填充
haveApiRecord.setUpdateTime(null);
remoteWarningCRUDFeign.updateApiRecordForRPC(haveApiRecord);
}
}
}
}
}

@ -39,7 +39,7 @@ public class BaiDuTranslationQo {
/**
* ()
*/
private String salt = "xjsisyourfatter";
private String salt;
/**
* appid+query+salt+keyMD5

@ -38,7 +38,8 @@ public class BaiDuTranslationFactory implements TranslationFactory {
baiDuTranslationQo.setAppid(appId);
String key = baiduProperties.getKey();
//生成签名(appid+q+salt+密钥的MD5值)
String append = appId + translationQo.getQ() + baiDuTranslationQo.getSalt() + key;
String append = appId + translationQo.getQ() + baiduProperties.getSalt() + key;
baiDuTranslationQo.setSalt(baiduProperties.getSalt());
String sign = SecureUtil.md5(append);
baiDuTranslationQo.setSign(sign);
baiDuTranslationQo.setQ(translationQo.getQ());

@ -548,8 +548,8 @@ CREATE TABLE `sys_job_log` (
INSERT INTO `sys_job_log` VALUES (1, '文案RPC调用任务', 'DEFAULT', 'CopyWritingTask', '文案RPC调用任务 总共耗时3毫秒', '1', 'org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named \'CopyWritingTask\' available\r\n at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:863)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1344)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:309)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:283)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)\r\n at com.ruoyi.common.core.utils.SpringUtils.getBean(SpringUtils.java:38)\r\n at com.ruoyi.job.util.JobInvokeUtil.invokeMethod(JobInvokeUtil.java:32)\r\n at com.ruoyi.job.util.QuartzDisallowConcurrentExecution.doExecute(QuartzDisallowConcurrentExecution.java:20)\r\n at com.ruoyi.job.util.AbstractQuartzJob.execute(AbstractQuartzJob.java:42)\r\n at org.quartz.core.JobRunShell.run(JobRunShell.java:202)\r\n at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)\r\n', '2021-12-27 23:59:57');
INSERT INTO `sys_job_log` VALUES (2, '文案RPC调用任务', 'DEFAULT', 'CopyWritingTask', '文案RPC调用任务 总共耗时4毫秒', '1', 'org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named \'CopyWritingTask\' available\r\n at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:863)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1344)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:309)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:283)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)\r\n at com.ruoyi.common.core.utils.SpringUtils.getBean(SpringUtils.java:38)\r\n at com.ruoyi.job.util.JobInvokeUtil.invokeMethod(JobInvokeUtil.java:32)\r\n at com.ruoyi.job.util.QuartzDisallowConcurrentExecution.doExecute(QuartzDisallowConcurrentExecution.java:20)\r\n at com.ruoyi.job.util.AbstractQuartzJob.execute(AbstractQuartzJob.java:42)\r\n at org.quartz.core.JobRunShell.run(JobRunShell.java:202)\r\n at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)\r\n', '2021-12-28 00:03:05');
INSERT INTO `sys_job_log` VALUES (3, '文案RPC调用任务', 'DEFAULT', 'CopyWritingTask', '文案RPC调用任务 总共耗时1毫秒', '1', 'org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named \'CopyWritingTask\' available\r\n at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:863)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1344)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:309)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:283)\r\n at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)\r\n at com.ruoyi.common.core.utils.SpringUtils.getBean(SpringUtils.java:38)\r\n at com.ruoyi.job.util.JobInvokeUtil.invokeMethod(JobInvokeUtil.java:32)\r\n at com.ruoyi.job.util.QuartzDisallowConcurrentExecution.doExecute(QuartzDisallowConcurrentExecution.java:20)\r\n at com.ruoyi.job.util.AbstractQuartzJob.execute(AbstractQuartzJob.java:42)\r\n at org.quartz.core.JobRunShell.run(JobRunShell.java:202)\r\n at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)\r\n', '2021-12-28 00:03:05');
INSERT INTO `sys_job_log` VALUES (4, '文案RPC调用任务', 'DEFAULT', 'CopyWritingTask', '文案RPC调用任务 总共耗时5毫秒', '1', 'java.lang.NoSuchMethodException: com.xjs.job.task.CopyWritingTask.()\r\n at java.lang.Class.getDeclaredMethod(Class.java:2130)\r\n at com.ruoyi.job.util.JobInvokeUtil.invokeMethod(JobInvokeUtil.java:60)\r\n at com.ruoyi.job.util.JobInvokeUtil.invokeMethod(JobInvokeUtil.java:33)\r\n at com.ruoyi.job.util.QuartzDisallowConcurrentExecution.doExecute(QuartzDisallowConcurrentExecution.java:20)\r\n at com.ruoyi.job.util.AbstractQuartzJob.execute(AbstractQuartzJob.java:42)\r\n at org.quartz.core.JobRunShell.run(JobRunShell.java:202)\r\n at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)\r\n', '2021-12-28 00:04:33');
INSERT INTO `sys_job_log` VALUES (5, '文案RPC调用任务', 'DEFAULT', 'CopyWritingTask', '文案RPC调用任务 总共耗时0毫秒', '1', 'java.lang.NoSuchMethodException: com.xjs.job.task.CopyWritingTask.()\r\n at java.lang.Class.getDeclaredMethod(Class.java:2130)\r\n at com.ruoyi.job.util.JobInvokeUtil.invokeMethod(JobInvokeUtil.java:60)\r\n at com.ruoyi.job.util.JobInvokeUtil.invokeMethod(JobInvokeUtil.java:33)\r\n at com.ruoyi.job.util.QuartzDisallowConcurrentExecution.doExecute(QuartzDisallowConcurrentExecution.java:20)\r\n at com.ruoyi.job.util.AbstractQuartzJob.execute(AbstractQuartzJob.java:42)\r\n at org.quartz.core.JobRunShell.run(JobRunShell.java:202)\r\n at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)\r\n', '2021-12-28 00:04:33');
INSERT INTO `sys_job_log` VALUES (4, '文案RPC调用任务', 'DEFAULT', 'CopyWritingTask', '文案RPC调用任务 总共耗时5毫秒', '1', 'java.lang.NoSuchMethodException: com.xjs.job.task.openapi.CopyWritingTask.()\r\n at java.lang.Class.getDeclaredMethod(Class.java:2130)\r\n at com.ruoyi.job.util.JobInvokeUtil.invokeMethod(JobInvokeUtil.java:60)\r\n at com.ruoyi.job.util.JobInvokeUtil.invokeMethod(JobInvokeUtil.java:33)\r\n at com.ruoyi.job.util.QuartzDisallowConcurrentExecution.doExecute(QuartzDisallowConcurrentExecution.java:20)\r\n at com.ruoyi.job.util.AbstractQuartzJob.execute(AbstractQuartzJob.java:42)\r\n at org.quartz.core.JobRunShell.run(JobRunShell.java:202)\r\n at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)\r\n', '2021-12-28 00:04:33');
INSERT INTO `sys_job_log` VALUES (5, '文案RPC调用任务', 'DEFAULT', 'CopyWritingTask', '文案RPC调用任务 总共耗时0毫秒', '1', 'java.lang.NoSuchMethodException: com.xjs.job.task.openapi.CopyWritingTask.()\r\n at java.lang.Class.getDeclaredMethod(Class.java:2130)\r\n at com.ruoyi.job.util.JobInvokeUtil.invokeMethod(JobInvokeUtil.java:60)\r\n at com.ruoyi.job.util.JobInvokeUtil.invokeMethod(JobInvokeUtil.java:33)\r\n at com.ruoyi.job.util.QuartzDisallowConcurrentExecution.doExecute(QuartzDisallowConcurrentExecution.java:20)\r\n at com.ruoyi.job.util.AbstractQuartzJob.execute(AbstractQuartzJob.java:42)\r\n at org.quartz.core.JobRunShell.run(JobRunShell.java:202)\r\n at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)\r\n', '2021-12-28 00:04:33');
INSERT INTO `sys_job_log` VALUES (6, '文案RPC调用任务', 'DEFAULT', 'CopyWritingTask.execute', '文案RPC调用任务 总共耗时0毫秒', '0', '', '2021-12-28 00:05:38');
INSERT INTO `sys_job_log` VALUES (7, '文案RPC调用任务', 'DEFAULT', 'CopyWritingTask.execute', '文案RPC调用任务 总共耗时0毫秒', '0', '', '2021-12-28 00:05:38');
INSERT INTO `sys_job_log` VALUES (8, '文案RPC调用任务', 'DEFAULT', 'CopyWritingTask.execute', '文案RPC调用任务 总共耗时127毫秒', '0', '', '2021-12-28 00:14:26');

Loading…
Cancel
Save