diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/RemoteCommonFeign.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/RemoteCommonFeign.java new file mode 100644 index 00000000..87d013ef --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/RemoteCommonFeign.java @@ -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; + +/** + * API模块通用feign + * @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(); + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/factory/RemoteCommonFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/factory/RemoteCommonFactory.java new file mode 100644 index 00000000..3212aa00 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/factory/RemoteCommonFactory.java @@ -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 { + + @Override + public RemoteCommonFeign create(Throwable cause) { + return new RemoteCommonFeign() { + @Override + public R CheckApiStatusForRPC() { + log.error("API模块通用 降级"+cause.getMessage()); + return R.fail("API模块通用 降级"); + } + }; + } +} diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/CheckApiStatusTask.java b/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/CheckApiStatusTask.java new file mode 100644 index 00000000..a1f4ece8 --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/CheckApiStatusTask.java @@ -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---------------------"); + + + } +} diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/CopyWritingTask.java b/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/CopyWritingTask.java similarity index 97% rename from ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/CopyWritingTask.java rename to ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/CopyWritingTask.java index 0fda68a3..f33e4a8f 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/CopyWritingTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/CopyWritingTask.java @@ -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; diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/TopSearchTask.java b/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/TopSearchTask.java similarity index 97% rename from ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/TopSearchTask.java rename to ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/TopSearchTask.java index 75f3cc73..8a5c7489 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/TopSearchTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/TopSearchTask.java @@ -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; diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/WarningTask.java b/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/WarningTask.java similarity index 98% rename from ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/WarningTask.java rename to ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/WarningTask.java index 73ce21a2..d9d6ed62 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/WarningTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/WarningTask.java @@ -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; diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/WeatherTask.java b/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/WeatherTask.java similarity index 97% rename from ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/WeatherTask.java rename to ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/WeatherTask.java index ae24a59c..7d5fb9d2 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/WeatherTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/openapi/WeatherTask.java @@ -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; diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/properties/BaiduProperties.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/properties/BaiduProperties.java index 2bfea053..7170ae98 100644 --- a/xjs-business/xjs-business-common/src/main/java/com/xjs/properties/BaiduProperties.java +++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/properties/BaiduProperties.java @@ -24,5 +24,10 @@ public class BaiduProperties { */ private String key; + /** + * 盐值 + */ + private String salt; + } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/controller/ApiCommonController.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/controller/ApiCommonController.java new file mode 100644 index 00000000..98dd485f --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/controller/ApiCommonController.java @@ -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; + +/** + * API模块通用controller + * @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(); + } + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/task/CheckApiStatusTask.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/task/CheckApiStatusTask.java new file mode 100644 index 00000000..93045870 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/task/CheckApiStatusTask.java @@ -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状态
+ * 后续实现新API需要在这新增检查项 + */ + public void checkApiStatus() { + this.checkAlapiJoke(); + + this.checkBaiduTranslation(); + + // todo 还剩20多个api检查没写 + + } + + /** + * 检查alapi平台笑话大全API + */ + 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> listR = remoteWarningCRUDFeign.selectApiRecordListForRPC(apiRecord); + if (listR.getCode() == R.SUCCESS) { + List data = listR.getData(); + if (CollUtil.isNotEmpty(data)) { + ApiRecord haveApiRecord = data.get(0); + haveApiRecord.setStatus(ERROR); + //置为空让mp自动填充 + haveApiRecord.setUpdateTime(null); + remoteWarningCRUDFeign.updateApiRecordForRPC(haveApiRecord); + } + } + + } + } + + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/domain/qo/translation/BaiDuTranslationQo.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/domain/qo/translation/BaiDuTranslationQo.java index 83aedcd4..71a7dec3 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/domain/qo/translation/BaiDuTranslationQo.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/domain/qo/translation/BaiDuTranslationQo.java @@ -39,7 +39,7 @@ public class BaiDuTranslationQo { /** * 盐(随机数) */ - private String salt = "xjsisyourfatter"; + private String salt; /** * 签名(appid+query+salt+key的MD5值) diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/factory/impl/BaiDuTranslationFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/factory/impl/BaiDuTranslationFactory.java index c3b210c1..7f8deef0 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/factory/impl/BaiDuTranslationFactory.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/factory/impl/BaiDuTranslationFactory.java @@ -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()); diff --git a/xjs-sql/2022-01/xjs-cloud.sql b/xjs-sql/2022-01/xjs-cloud.sql index 020b46c7..ea8977c1 100644 --- a/xjs-sql/2022-01/xjs-cloud.sql +++ b/xjs-sql/2022-01/xjs-cloud.sql @@ -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');