1、预警定时初始化任务分离到job模块

2、巨坑:
@GetMapping("/apistatistics/")
    R<List<ApiRecord>> selectApiRecordListForRPC();
    获取这个返回值一直降级,改成R<JSONArray>就没问题了
pull/254/head
xjs 4 years ago
parent 465b67df50
commit aca0abf08f

@ -1,5 +1,6 @@
package com.xjs.business.warning; package com.xjs.business.warning;
import com.alibaba.fastjson.JSONArray;
import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.xjs.business.warning.domain.ApiRecord; import com.xjs.business.warning.domain.ApiRecord;
@ -24,23 +25,26 @@ import java.util.List;
fallbackFactory = RemoteWarningCRUDFactory.class) fallbackFactory = RemoteWarningCRUDFactory.class)
public interface RemoteWarningCRUDFeign { public interface RemoteWarningCRUDFeign {
@PostMapping("apiwarning") @PostMapping("/apiwarning")
R<ApiRecord> saveApiRecordForRPC(@RequestBody ApiRecord apiRecord); R<ApiRecord> saveApiRecordForRPC(@RequestBody ApiRecord apiRecord);
@PutMapping("apiwarning") @PutMapping("/apiwarning")
R<ApiRecord> updateApiRecordForRPC(@RequestBody ApiRecord apiRecord); R<ApiRecord> updateApiRecordForRPC(@RequestBody ApiRecord apiRecord);
@GetMapping("apiwarning") @GetMapping("/apiwarning")
R<List<ApiRecord>> selectApiRecordListForRPC(@SpringQueryMap ApiRecord apiRecord); R<List<ApiRecord>> selectApiRecordListForRPC(@SpringQueryMap ApiRecord apiRecord);
@PostMapping("apiwarning/saveApiwarningForRPC") @PostMapping("/apiwarning/saveApiwarningForRPC")
R<ApiWarning> saveApiWarningForRPC(@RequestBody ApiWarning apiWarning); R<ApiWarning> saveApiWarningForRPC(@RequestBody ApiWarning apiWarning);
@GetMapping("apiwarning/getApiNameForRPC") @GetMapping("/apiwarning/getApiNameForRPC")
R<List<String>> getApiName(); R<List<String>> getApiName();
@GetMapping("apistatistics") @GetMapping("/apistatistics/")
R<List<ApiRecord>> selectApiRecordListForRPC(); R<List<ApiRecord>> selectApiRecordListForRPC();
@GetMapping("/apiwarning/findRecordListForRPC")
R<JSONArray> findRecordListForRPC();
} }

@ -1,5 +1,6 @@
package com.xjs.business.warning.factory; package com.xjs.business.warning.factory;
import com.alibaba.fastjson.JSONArray;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.xjs.business.warning.RemoteWarningCRUDFeign; import com.xjs.business.warning.RemoteWarningCRUDFeign;
import com.xjs.business.warning.domain.ApiRecord; import com.xjs.business.warning.domain.ApiRecord;
@ -59,6 +60,12 @@ public class RemoteWarningCRUDFactory implements FallbackFactory<RemoteWarningCR
log.error("调用预警服务api统计查询所有api接口失败执行降级处理----"); log.error("调用预警服务api统计查询所有api接口失败执行降级处理----");
return R.fail(); return R.fail();
} }
@Override
public R<JSONArray> findRecordListForRPC() {
log.error("调用预警服务api预警查询所有api接口失败执行降级处理----");
return R.fail();
}
}; };
} }
} }

@ -35,7 +35,7 @@ public class CopyWritingTask {
log.info("文案定时任务结果:code={},msg={},data={}",r.getCode(),r.getMsg(),r.getData()); log.info("文案定时任务结果:code={},msg={},data={}",r.getCode(),r.getMsg(),r.getData());
LocalDateTime localDateTime2 = DateUtil.date().toLocalDateTime(); LocalDateTime localDateTime2 = DateUtil.date().toLocalDateTime();
long between = ChronoUnit.MILLIS.between(localDateTime1, localDateTime2); long between = ChronoUnit.MILLIS.between(localDateTime1, localDateTime2);
log.info("Job耗费时间:{}ms", between); log.info("文案定时任务Job耗费时间:{}ms", between);
log.info("---------------文案定时任务end---------------------"); log.info("---------------文案定时任务end---------------------");
} }
} }

@ -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<JSONArray> listR = remoteWarningCRUDFeign.findRecordListForRPC();
log.info("预警次数初始化定时任务结果:code={},msg={},data={}",listR.getCode(),listR.getMsg(),listR.getData());
JSONArray jsonArray = listR.getData();
List<ApiRecord> recordList = jsonArray.toJavaList(ApiRecord.class);
List<ApiRecord> 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<ApiRecord> handleDate(List<ApiRecord> 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;
}
}

@ -0,0 +1,13 @@
<template>
</template>
<script>
export default {
name: "WeatherStatistics"
}
</script>
<style scoped>
</style>

@ -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 {
}

@ -1,5 +1,6 @@
package com.xjs.controller; package com.xjs.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
@ -44,6 +45,71 @@ public class ApiWarningController extends BaseController {
@Autowired @Autowired
private RedisService redisService; private RedisService redisService;
/**
*
* @param id id
* @return R
*/
@PutMapping("handle/{id}")
@RequiresPermissions("warning:warning:handle")
@ApiOperation("处理预警单个预警")
@Log(title = "处理单个预警")
public R<Object> 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<ApiWarning> list = apiWarningService.list(new QueryWrapper<ApiWarning>()
.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<ApiWarning> list = apiWarningService.list(new QueryWrapper<ApiWarning>()
.like(Objects.nonNull(apiWarning.getApiName()),"api_name", apiWarning.getApiName()));
ExcelUtil<ApiWarning> util = new ExcelUtil<ApiWarning>(ApiWarning.class);
util.exportExcel(response, list, "api预警数据");
}
@RequiresPermissions("warning:warning:remove")
@Log(title = "api预警", businessType = BusinessType.DELETE)
@DeleteMapping("all")
@ApiOperation("清空已处理api预警列表")
public R<Object> clearAll() {
Integer integer = apiWarningService.clearAll();
return integer > 0 ? R.ok(integer) : R.fail();
}
@RequiresPermissions("warning:warning:handleAll")
@PutMapping("handleAll")
@ApiOperation("全部标记已读")
@Log(title = "全部标记已读")
public R<Object> AllHaveRead() {
Integer integer = apiWarningService.AllHaveRead();
return integer > 0 ? R.ok(integer) : R.fail();
}
//--------------------内部调用rpc-----------------------------------
/** /**
* apiRecord * apiRecord
* *
@ -81,6 +147,14 @@ public class ApiWarningController extends BaseController {
return R.ok(apiRecords); return R.ok(apiRecords);
} }
@GetMapping("findRecordListForRPC")
@ApiOperation("远程查询预警信息")
public R<JSONArray> findRecordListForRPC() {
List<ApiRecord> apiRecordList = apiWarningService.selectApiRecordList(new ApiRecord());
JSONArray jo= (JSONArray) JSONArray.toJSON(apiRecordList);
return R.ok(jo);
}
/** /**
* Api * Api
* @return api * @return api
@ -92,21 +166,7 @@ public class ApiWarningController extends BaseController {
return R.ok(apiNameList); return R.ok(apiNameList);
} }
/**
*
* @param id id
* @return R
*/
@PutMapping("handle/{id}")
@RequiresPermissions("warning:warning:handle")
@ApiOperation("处理预警单个预警")
@Log(title = "处理单个预警")
public R<Object> handleWarning(@PathVariable("id") Long id) {
ApiWarning apiWarning = new ApiWarning();
apiWarning.setId(id);
apiWarning.setHandle(YES);
return apiWarningService.updateById(apiWarning)?R.ok():R.fail();
}
/** /**
* apiwebsocket * apiwebsocket
@ -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<ApiWarning> list = apiWarningService.list(new QueryWrapper<ApiWarning>()
.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<ApiWarning> list = apiWarningService.list(new QueryWrapper<ApiWarning>()
.like(Objects.nonNull(apiWarning.getApiName()),"api_name", apiWarning.getApiName()));
ExcelUtil<ApiWarning> util = new ExcelUtil<ApiWarning>(ApiWarning.class);
util.exportExcel(response, list, "api预警数据");
}
@RequiresPermissions("warning:warning:remove")
@Log(title = "api预警", businessType = BusinessType.DELETE)
@DeleteMapping("all")
@ApiOperation("清空已处理api预警列表")
public R<Object> clearAll() {
Integer integer = apiWarningService.clearAll();
return integer > 0 ? R.ok(integer) : R.fail();
}
@RequiresPermissions("warning:warning:handleAll")
@PutMapping("handleAll")
@ApiOperation("全部标记已读")
@Log(title = "全部标记已读")
public R<Object> AllHaveRead() {
Integer integer = apiWarningService.AllHaveRead();
return integer > 0 ? R.ok(integer) : R.fail();
}
//-------------------------代码生成------------------------------------ //-------------------------代码生成------------------------------------

@ -2,6 +2,7 @@ package com.xjs.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.StringUtils;
import com.xjs.domain.ApiRecord; import com.xjs.domain.ApiRecord;
import com.xjs.domain.ApiWarning; import com.xjs.domain.ApiWarning;
import com.xjs.exception.BusinessException; import com.xjs.exception.BusinessException;
@ -51,8 +52,9 @@ public class ApiWarningServiceImpl extends ServiceImpl<ApiWarningMapper, ApiWarn
@Override @Override
public List<ApiRecord> selectApiRecordListByUrl(ApiRecord apiRecord) { public List<ApiRecord> selectApiRecordListByUrl(ApiRecord apiRecord) {
return apiRecordMapper return apiRecordMapper
.selectList(new QueryWrapper<ApiRecord>().eq("api_name", apiRecord.getApiName()) .selectList(new QueryWrapper<ApiRecord>()
.eq("api_name", apiRecord.getApiName())); .eq(StringUtils.isNotEmpty(apiRecord.getApiName()),"api_name", apiRecord.getApiName())
.eq(StringUtils.isNotEmpty(apiRecord.getApiUrl()),"api_url", apiRecord.getApiUrl()));
} }
@Override @Override

Loading…
Cancel
Save