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,6 +45,71 @@ public class ApiWarningController extends BaseController { @Autowired private RedisService redisService; + /** + * 处理预警单个预警 + * @param id 预警id + * @return R + */ + @PutMapping("handle/{id}") + @RequiresPermissions("warning:warning:handle") + @ApiOperation("处理预警单个预警") + @Log(title = "处理单个预警") + public R handleWarning(@PathVariable("id") Long id) { + ApiWarning apiWarning = new ApiWarning(); + apiWarning.setId(id); + apiWarning.setHandle(YES); + return apiWarningService.updateById(apiWarning)?R.ok():R.fail(); + } + + /** + * 查询api预警列表 + */ + @RequiresPermissions("warning:warning:list") + @GetMapping("/apiwarnlist") + @ApiOperation("查询api预警列表") + public TableDataInfo list(ApiWarning apiWarning) { + startPage(); + List list = apiWarningService.list(new QueryWrapper() + .orderByDesc("create_time") + .like(Objects.nonNull(apiWarning.getApiName()),"api_name", apiWarning.getApiName())); + return getDataTable(list); + } + + /** + * 导出api预警列表 + */ + @RequiresPermissions("warning:warning:export") + @Log(title = "api预警", businessType = BusinessType.EXPORT) + @PostMapping("/apiwarnexport") + @ApiOperation("导出api预警列表") + public void export(HttpServletResponse response, ApiWarning apiWarning) { + List list = apiWarningService.list(new QueryWrapper() + .like(Objects.nonNull(apiWarning.getApiName()),"api_name", apiWarning.getApiName())); + ExcelUtil util = new ExcelUtil(ApiWarning.class); + util.exportExcel(response, list, "api预警数据"); + } + + @RequiresPermissions("warning:warning:remove") + @Log(title = "api预警", businessType = BusinessType.DELETE) + @DeleteMapping("all") + @ApiOperation("清空已处理api预警列表") + public R clearAll() { + Integer integer = apiWarningService.clearAll(); + return integer > 0 ? R.ok(integer) : R.fail(); + } + + @RequiresPermissions("warning:warning:handleAll") + @PutMapping("handleAll") + @ApiOperation("全部标记已读") + @Log(title = "全部标记已读") + public R AllHaveRead() { + Integer integer = apiWarningService.AllHaveRead(); + return integer > 0 ? R.ok(integer) : R.fail(); + } + + + //--------------------内部调用rpc----------------------------------- + /** * 远程保存 apiRecord * @@ -81,6 +147,14 @@ public class ApiWarningController extends BaseController { 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名称 @@ -92,21 +166,7 @@ public class ApiWarningController extends BaseController { return R.ok(apiNameList); } - /** - * 处理预警单个预警 - * @param id 预警id - * @return R - */ - @PutMapping("handle/{id}") - @RequiresPermissions("warning:warning:handle") - @ApiOperation("处理预警单个预警") - @Log(title = "处理单个预警") - public R handleWarning(@PathVariable("id") Long id) { - ApiWarning apiWarning = new ApiWarning(); - apiWarning.setId(id); - apiWarning.setHandle(YES); - return apiWarningService.updateById(apiWarning)?R.ok():R.fail(); - } + /** * 远程保存api预警信息并websocket推送 @@ -148,51 +208,6 @@ public class ApiWarningController extends BaseController { } - /** - * 查询api预警列表 - */ - @RequiresPermissions("warning:warning:list") - @GetMapping("/apiwarnlist") - @ApiOperation("查询api预警列表") - public TableDataInfo list(ApiWarning apiWarning) { - startPage(); - List list = apiWarningService.list(new QueryWrapper() - .orderByDesc("create_time") - .like(Objects.nonNull(apiWarning.getApiName()),"api_name", apiWarning.getApiName())); - return getDataTable(list); - } - - /** - * 导出api预警列表 - */ - @RequiresPermissions("warning:warning:export") - @Log(title = "api预警", businessType = BusinessType.EXPORT) - @PostMapping("/apiwarnexport") - @ApiOperation("导出api预警列表") - public void export(HttpServletResponse response, ApiWarning apiWarning) { - List list = apiWarningService.list(new QueryWrapper() - .like(Objects.nonNull(apiWarning.getApiName()),"api_name", apiWarning.getApiName())); - ExcelUtil util = new ExcelUtil(ApiWarning.class); - util.exportExcel(response, list, "api预警数据"); - } - - @RequiresPermissions("warning:warning:remove") - @Log(title = "api预警", businessType = BusinessType.DELETE) - @DeleteMapping("all") - @ApiOperation("清空已处理api预警列表") - public R clearAll() { - Integer integer = apiWarningService.clearAll(); - return integer > 0 ? R.ok(integer) : R.fail(); - } - - @RequiresPermissions("warning:warning:handleAll") - @PutMapping("handleAll") - @ApiOperation("全部标记已读") - @Log(title = "全部标记已读") - public R AllHaveRead() { - Integer integer = apiWarningService.AllHaveRead(); - return integer > 0 ? R.ok(integer) : R.fail(); - } //-------------------------代码生成------------------------------------ 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