1、预警定时初始化任务分离到job模块
2、巨坑:
@GetMapping("/apistatistics/")
R<List<ApiRecord>> selectApiRecordListForRPC();
获取这个返回值一直降级,改成R<JSONArray>就没问题了
This commit is contained in:
parent
465b67df50
commit
aca0abf08f
|
|
@ -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<ApiRecord> saveApiRecordForRPC(@RequestBody ApiRecord apiRecord);
|
||||
|
||||
|
||||
@PutMapping("apiwarning")
|
||||
@PutMapping("/apiwarning")
|
||||
R<ApiRecord> updateApiRecordForRPC(@RequestBody ApiRecord apiRecord);
|
||||
|
||||
@GetMapping("apiwarning")
|
||||
@GetMapping("/apiwarning")
|
||||
R<List<ApiRecord>> selectApiRecordListForRPC(@SpringQueryMap ApiRecord apiRecord);
|
||||
|
||||
@PostMapping("apiwarning/saveApiwarningForRPC")
|
||||
@PostMapping("/apiwarning/saveApiwarningForRPC")
|
||||
R<ApiWarning> saveApiWarningForRPC(@RequestBody ApiWarning apiWarning);
|
||||
|
||||
@GetMapping("apiwarning/getApiNameForRPC")
|
||||
@GetMapping("/apiwarning/getApiNameForRPC")
|
||||
R<List<String>> getApiName();
|
||||
|
||||
@GetMapping("apistatistics")
|
||||
@GetMapping("/apistatistics/")
|
||||
R<List<ApiRecord>> selectApiRecordListForRPC();
|
||||
|
||||
@GetMapping("/apiwarning/findRecordListForRPC")
|
||||
R<JSONArray> findRecordListForRPC();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<RemoteWarningCR
|
|||
log.error("调用预警服务api统计查询所有api接口失败,执行降级处理----");
|
||||
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());
|
||||
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---------------------");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
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<ApiRecord> saveApiRecordForRPC(@RequestBody ApiRecord apiRecord) {
|
||||
return apiWarningService.saveApiRecord(apiRecord) ? R.ok() : R.fail();
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程修改
|
||||
*
|
||||
* @param apiRecord api记录
|
||||
* @return ApiRecord
|
||||
*/
|
||||
@PutMapping
|
||||
@ApiOperation("远程修改预警信息")
|
||||
public R<ApiRecord> updateApiRecordForRPC(@RequestBody ApiRecord apiRecord) {
|
||||
return apiWarningService.updateApiRecordByUrl(apiRecord) ? R.ok() : R.fail();
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程查询api记录信息
|
||||
*
|
||||
* @param apiRecord
|
||||
* @return R<List < ApiRecord>>
|
||||
*/
|
||||
@GetMapping
|
||||
@ApiOperation("远程查询预警信息")
|
||||
public R<List<ApiRecord>> selectApiRecordListForRPC(ApiRecord apiRecord) {
|
||||
List<ApiRecord> apiRecords = apiWarningService.selectApiRecordListByUrl(apiRecord);
|
||||
return R.ok(apiRecords);
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程获取所有Api名称
|
||||
* @return api名称
|
||||
*/
|
||||
@GetMapping("getApiNameForRPC")
|
||||
@ApiOperation("远程获取所有Api名称")
|
||||
public R<List<String>> getApiName() {
|
||||
List<String> 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<ApiWarning> 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<ApiWarning>().eq("handle",NO));
|
||||
Set<String> 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<ApiRecord> saveApiRecordForRPC(@RequestBody ApiRecord apiRecord) {
|
||||
return apiWarningService.saveApiRecord(apiRecord) ? R.ok() : R.fail();
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程修改
|
||||
*
|
||||
* @param apiRecord api记录
|
||||
* @return ApiRecord
|
||||
*/
|
||||
@PutMapping
|
||||
@ApiOperation("远程修改预警信息")
|
||||
public R<ApiRecord> updateApiRecordForRPC(@RequestBody ApiRecord apiRecord) {
|
||||
return apiWarningService.updateApiRecordByUrl(apiRecord) ? R.ok() : R.fail();
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程查询api记录信息
|
||||
*
|
||||
* @param apiRecord
|
||||
* @return R<List < ApiRecord>>
|
||||
*/
|
||||
@GetMapping
|
||||
@ApiOperation("远程查询预警信息")
|
||||
public R<List<ApiRecord>> selectApiRecordListForRPC(ApiRecord apiRecord) {
|
||||
List<ApiRecord> apiRecords = apiWarningService.selectApiRecordListByUrl(apiRecord);
|
||||
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名称
|
||||
* @return api名称
|
||||
*/
|
||||
@GetMapping("getApiNameForRPC")
|
||||
@ApiOperation("远程获取所有Api名称")
|
||||
public R<List<String>> getApiName() {
|
||||
List<String> apiNameList = apiWarningService.getApiName();
|
||||
return R.ok(apiNameList);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 远程保存api预警信息并websocket推送
|
||||
*
|
||||
* @param apiWarning 预警实体类
|
||||
* @return R
|
||||
*/
|
||||
@PostMapping("saveApiwarningForRPC")
|
||||
@Transactional
|
||||
@ApiOperation("远程保存api预警信息并websocket推送")
|
||||
public R<ApiWarning> 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<ApiWarning>().eq("handle",NO));
|
||||
Set<String> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-------------------------代码生成------------------------------------
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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<ApiWarningMapper, ApiWarn
|
|||
@Override
|
||||
public List<ApiRecord> selectApiRecordListByUrl(ApiRecord apiRecord) {
|
||||
return apiRecordMapper
|
||||
.selectList(new QueryWrapper<ApiRecord>().eq("api_name", apiRecord.getApiName())
|
||||
.eq("api_name", apiRecord.getApiName()));
|
||||
.selectList(new QueryWrapper<ApiRecord>()
|
||||
.eq(StringUtils.isNotEmpty(apiRecord.getApiName()),"api_name", apiRecord.getApiName())
|
||||
.eq(StringUtils.isNotEmpty(apiRecord.getApiUrl()),"api_url", apiRecord.getApiUrl()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Reference in New Issue