From aca0abf08f7f7d98bfbb0fb48d135018b3588340 Mon Sep 17 00:00:00 2001 From: xjs <1294405880@qq.com> Date: Tue, 25 Jan 2022 19:50:40 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E9=A2=84=E8=AD=A6=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E4=BB=BB=E5=8A=A1=E5=88=86=E7=A6=BB?= =?UTF-8?q?=E5=88=B0job=E6=A8=A1=E5=9D=97=202=E3=80=81=E5=B7=A8=E5=9D=91?= =?UTF-8?q?=EF=BC=9A=20@GetMapping("/apistatistics/")=20=20=20=20=20R>=20selectApiRecordListForRPC();=20=20=20=20=20?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=BF=99=E4=B8=AA=E8=BF=94=E5=9B=9E=E5=80=BC?= =?UTF-8?q?=E4=B8=80=E7=9B=B4=E9=99=8D=E7=BA=A7=EF=BC=8C=E6=94=B9=E6=88=90?= =?UTF-8?q?R=E5=B0=B1=E6=B2=A1=E9=97=AE=E9=A2=98=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../warning/RemoteWarningCRUDFeign.java | 16 +- .../factory/RemoteWarningCRUDFactory.java | 7 + .../com/xjs/job/task/CopyWritingTask.java | 2 +- .../java/com/xjs/job/task/WarningTask.java | 69 +++++++ .../statistics/weatherstatistics/index.vue | 13 ++ .../WeatherStatisticsController.java | 16 ++ .../xjs/controller/ApiWarningController.java | 191 ++++++++++-------- .../service/impl/ApiWarningServiceImpl.java | 6 +- 8 files changed, 223 insertions(+), 97 deletions(-) create mode 100644 ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/WarningTask.java create mode 100644 ruoyi-ui/src/views/business/statistics/weatherstatistics/index.vue create mode 100644 xjs-business/xjs-business-statistics/src/main/java/com/xjs/controller/WeatherStatisticsController.java diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java index 797f042e..f8c4cca6 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java @@ -1,5 +1,6 @@ package com.xjs.business.warning; +import com.alibaba.fastjson.JSONArray; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.xjs.business.warning.domain.ApiRecord; @@ -24,23 +25,26 @@ import java.util.List; fallbackFactory = RemoteWarningCRUDFactory.class) public interface RemoteWarningCRUDFeign { - @PostMapping("apiwarning") + @PostMapping("/apiwarning") R saveApiRecordForRPC(@RequestBody ApiRecord apiRecord); - @PutMapping("apiwarning") + @PutMapping("/apiwarning") R updateApiRecordForRPC(@RequestBody ApiRecord apiRecord); - @GetMapping("apiwarning") + @GetMapping("/apiwarning") R> selectApiRecordListForRPC(@SpringQueryMap ApiRecord apiRecord); - @PostMapping("apiwarning/saveApiwarningForRPC") + @PostMapping("/apiwarning/saveApiwarningForRPC") R saveApiWarningForRPC(@RequestBody ApiWarning apiWarning); - @GetMapping("apiwarning/getApiNameForRPC") + @GetMapping("/apiwarning/getApiNameForRPC") R> getApiName(); - @GetMapping("apistatistics") + @GetMapping("/apistatistics/") R> selectApiRecordListForRPC(); + @GetMapping("/apiwarning/findRecordListForRPC") + R findRecordListForRPC(); + } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java index b760ecf8..9d5b20d5 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java @@ -1,5 +1,6 @@ package com.xjs.business.warning.factory; +import com.alibaba.fastjson.JSONArray; import com.ruoyi.common.core.domain.R; import com.xjs.business.warning.RemoteWarningCRUDFeign; import com.xjs.business.warning.domain.ApiRecord; @@ -59,6 +60,12 @@ public class RemoteWarningCRUDFactory implements FallbackFactory findRecordListForRPC() { + log.error("调用预警服务api预警查询所有api接口失败,执行降级处理----"); + return R.fail(); + } }; } } 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/CopyWritingTask.java index 38af048e..9f3c83af 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/CopyWritingTask.java @@ -35,7 +35,7 @@ public class CopyWritingTask { log.info("文案定时任务结果:code={},msg={},data={}",r.getCode(),r.getMsg(),r.getData()); LocalDateTime localDateTime2 = DateUtil.date().toLocalDateTime(); long between = ChronoUnit.MILLIS.between(localDateTime1, localDateTime2); - log.info("Job耗费时间:{}ms", between); + log.info("文案定时任务Job耗费时间:{}ms", between); log.info("---------------文案定时任务end---------------------"); } } 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/WarningTask.java new file mode 100644 index 00000000..0a7f71cd --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/xjs/job/task/WarningTask.java @@ -0,0 +1,69 @@ +package com.xjs.job.task; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.ruoyi.common.core.domain.R; +import com.xjs.business.warning.RemoteWarningCRUDFeign; +import com.xjs.business.warning.domain.ApiRecord; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.Date; +import java.util.List; + +/** + * 预警相关定时任务 + * + * @author xiejs + * @since 2022-01-25 + */ +@Component("WarningTask") +@Log4j2 +public class WarningTask { + @Resource + private RemoteWarningCRUDFeign remoteWarningCRUDFeign; + + + /** + * 处理预警api信息的每天调用次数 + */ + public void handleRecordDate() { + LocalDateTime localDateTime1 = DateUtil.date().toLocalDateTime(); + log.info("---------------预警次数初始化定时任务Start-------------------"); + R listR = remoteWarningCRUDFeign.findRecordListForRPC(); + log.info("预警次数初始化定时任务结果:code={},msg={},data={}",listR.getCode(),listR.getMsg(),listR.getData()); + JSONArray jsonArray = listR.getData(); + List recordList = jsonArray.toJavaList(ApiRecord.class); + List handleDate = this.handleDate(recordList); + handleDate.forEach(data -> { + remoteWarningCRUDFeign.updateApiRecordForRPC(data); + }); + LocalDateTime localDateTime2 = DateUtil.date().toLocalDateTime(); + long between = ChronoUnit.MILLIS.between(localDateTime1, localDateTime2); + log.info("文案定时任务Job耗费时间:{}ms", between); + log.info("---------------预警次数初始化定时任务end---------------------"); + } + + + protected List handleDate(List apiRecordList) { + if (CollUtil.isNotEmpty(apiRecordList)) { + apiRecordList.forEach(apiRecord -> { + String dateTime = DateUtil.formatDateTime(apiRecord.getUpdateTime()); + Date date = DateUtil.parseDate(dateTime).toJdkDate(); + //当前时间和最后一次修改时间间隔天数(超过1 就清零) + long compareTime = DateUtil.between(date, new Date(), DateUnit.DAY); + if (compareTime > 0) { + apiRecord.setDayCount(0L); + } + }); + } + return apiRecordList; + } + + +} diff --git a/ruoyi-ui/src/views/business/statistics/weatherstatistics/index.vue b/ruoyi-ui/src/views/business/statistics/weatherstatistics/index.vue new file mode 100644 index 00000000..fe485824 --- /dev/null +++ b/ruoyi-ui/src/views/business/statistics/weatherstatistics/index.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/xjs-business/xjs-business-statistics/src/main/java/com/xjs/controller/WeatherStatisticsController.java b/xjs-business/xjs-business-statistics/src/main/java/com/xjs/controller/WeatherStatisticsController.java new file mode 100644 index 00000000..64ba0830 --- /dev/null +++ b/xjs-business/xjs-business-statistics/src/main/java/com/xjs/controller/WeatherStatisticsController.java @@ -0,0 +1,16 @@ +package com.xjs.controller; + +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 天气统计controller + * @author xiejs + * @since 2022-01-25 + */ +@RestController +@RequestMapping("weatherstatistics") +@Api(tags = "业务模块-天气记录统计") +public class WeatherStatisticsController { +} diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java index f31d60f5..1864d43b 100644 --- a/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java @@ -1,5 +1,6 @@ package com.xjs.controller; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.R; @@ -44,54 +45,6 @@ public class ApiWarningController extends BaseController { @Autowired private RedisService redisService; - /** - * 远程保存 apiRecord - * - * @param apiRecord api记录 - * @return apiRecord - */ - @PostMapping - @ApiOperation("远程保存预警信息") - public R saveApiRecordForRPC(@RequestBody ApiRecord apiRecord) { - return apiWarningService.saveApiRecord(apiRecord) ? R.ok() : R.fail(); - } - - /** - * 远程修改 - * - * @param apiRecord api记录 - * @return ApiRecord - */ - @PutMapping - @ApiOperation("远程修改预警信息") - public R updateApiRecordForRPC(@RequestBody ApiRecord apiRecord) { - return apiWarningService.updateApiRecordByUrl(apiRecord) ? R.ok() : R.fail(); - } - - /** - * 远程查询api记录信息 - * - * @param apiRecord - * @return R> - */ - @GetMapping - @ApiOperation("远程查询预警信息") - public R> selectApiRecordListForRPC(ApiRecord apiRecord) { - List apiRecords = apiWarningService.selectApiRecordListByUrl(apiRecord); - return R.ok(apiRecords); - } - - /** - * 远程获取所有Api名称 - * @return api名称 - */ - @GetMapping("getApiNameForRPC") - @ApiOperation("远程获取所有Api名称") - public R> getApiName() { - List apiNameList = apiWarningService.getApiName(); - return R.ok(apiNameList); - } - /** * 处理预警单个预警 * @param id 预警id @@ -108,46 +61,6 @@ public class ApiWarningController extends BaseController { return apiWarningService.updateById(apiWarning)?R.ok():R.fail(); } - /** - * 远程保存api预警信息并websocket推送 - * - * @param apiWarning 预警实体类 - * @return R - */ - @PostMapping("saveApiwarningForRPC") - @Transactional - @ApiOperation("远程保存api预警信息并websocket推送") - public R saveApiWarningForRPC(@RequestBody ApiWarning apiWarning) { - boolean save = apiWarningService.save(apiWarning); - - this.websocketPush(apiWarning); - - return save ? R.ok() : R.fail(); - } - - /** - * websocket推送 - */ - private void websocketPush(ApiWarning apiWarning) { - long count = apiWarningService.count(new QueryWrapper().eq("handle",NO)); - Set cacheSet = redisService.getCacheSet(WEBSOCKET); - JSONObject jsonData =new JSONObject(); - JSONObject jsonObject = (JSONObject) JSONObject.toJSON(apiWarning); - //把id设置成字符串防止前端精度丢失 - jsonObject.put("id", apiWarning.getId().toString()); - jsonData.put("count", count); - jsonData.put("data", jsonObject.toJSONString()); - jsonData.put("socketType", "apiWarning"); - for (String userId : cacheSet) { - try { - WebSocketServer.sendInfo(jsonData.toString(),userId); - } catch (IOException e) { - logger.error(e.getMessage()); - } - } - } - - /** * 查询api预警列表 */ @@ -195,6 +108,108 @@ public class ApiWarningController extends BaseController { } + //--------------------内部调用rpc----------------------------------- + + /** + * 远程保存 apiRecord + * + * @param apiRecord api记录 + * @return apiRecord + */ + @PostMapping + @ApiOperation("远程保存预警信息") + public R saveApiRecordForRPC(@RequestBody ApiRecord apiRecord) { + return apiWarningService.saveApiRecord(apiRecord) ? R.ok() : R.fail(); + } + + /** + * 远程修改 + * + * @param apiRecord api记录 + * @return ApiRecord + */ + @PutMapping + @ApiOperation("远程修改预警信息") + public R updateApiRecordForRPC(@RequestBody ApiRecord apiRecord) { + return apiWarningService.updateApiRecordByUrl(apiRecord) ? R.ok() : R.fail(); + } + + /** + * 远程查询api记录信息 + * + * @param apiRecord + * @return R> + */ + @GetMapping + @ApiOperation("远程查询预警信息") + public R> selectApiRecordListForRPC(ApiRecord apiRecord) { + List apiRecords = apiWarningService.selectApiRecordListByUrl(apiRecord); + return R.ok(apiRecords); + } + + @GetMapping("findRecordListForRPC") + @ApiOperation("远程查询预警信息") + public R findRecordListForRPC() { + List apiRecordList = apiWarningService.selectApiRecordList(new ApiRecord()); + JSONArray jo= (JSONArray) JSONArray.toJSON(apiRecordList); + return R.ok(jo); + } + + /** + * 远程获取所有Api名称 + * @return api名称 + */ + @GetMapping("getApiNameForRPC") + @ApiOperation("远程获取所有Api名称") + public R> getApiName() { + List apiNameList = apiWarningService.getApiName(); + return R.ok(apiNameList); + } + + + + /** + * 远程保存api预警信息并websocket推送 + * + * @param apiWarning 预警实体类 + * @return R + */ + @PostMapping("saveApiwarningForRPC") + @Transactional + @ApiOperation("远程保存api预警信息并websocket推送") + public R saveApiWarningForRPC(@RequestBody ApiWarning apiWarning) { + boolean save = apiWarningService.save(apiWarning); + + this.websocketPush(apiWarning); + + return save ? R.ok() : R.fail(); + } + + /** + * websocket推送 + */ + private void websocketPush(ApiWarning apiWarning) { + long count = apiWarningService.count(new QueryWrapper().eq("handle",NO)); + Set cacheSet = redisService.getCacheSet(WEBSOCKET); + JSONObject jsonData =new JSONObject(); + JSONObject jsonObject = (JSONObject) JSONObject.toJSON(apiWarning); + //把id设置成字符串防止前端精度丢失 + jsonObject.put("id", apiWarning.getId().toString()); + jsonData.put("count", count); + jsonData.put("data", jsonObject.toJSONString()); + jsonData.put("socketType", "apiWarning"); + for (String userId : cacheSet) { + try { + WebSocketServer.sendInfo(jsonData.toString(),userId); + } catch (IOException e) { + logger.error(e.getMessage()); + } + } + } + + + + //-------------------------代码生成------------------------------------ diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/ApiWarningServiceImpl.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/ApiWarningServiceImpl.java index 3f7a2815..53accc4c 100644 --- a/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/ApiWarningServiceImpl.java +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/service/impl/ApiWarningServiceImpl.java @@ -2,6 +2,7 @@ package com.xjs.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.utils.StringUtils; import com.xjs.domain.ApiRecord; import com.xjs.domain.ApiWarning; import com.xjs.exception.BusinessException; @@ -51,8 +52,9 @@ public class ApiWarningServiceImpl extends ServiceImpl selectApiRecordListByUrl(ApiRecord apiRecord) { return apiRecordMapper - .selectList(new QueryWrapper().eq("api_name", apiRecord.getApiName()) - .eq("api_name", apiRecord.getApiName())); + .selectList(new QueryWrapper() + .eq(StringUtils.isNotEmpty(apiRecord.getApiName()),"api_name", apiRecord.getApiName()) + .eq(StringUtils.isNotEmpty(apiRecord.getApiUrl()),"api_url", apiRecord.getApiUrl())); } @Override