From 2b9d73629912d3982af1d96da8f9d50b7863cd58 Mon Sep 17 00:00:00 2001 From: heheng <475597332@qq.com> Date: 星期五, 06 六月 2025 10:33:55 +0800 Subject: [PATCH] 优化每年专项数据获取,定时重推数据 --- src/main/java/com/ruoyi/doublePrevention/scheduls/RePushDataSchedule.java | 60 +++++++++++++++ src/main/java/com/ruoyi/project/tr/specialCheck/Test/SpecialCheckTaskDownload.java | 132 +++++++++++++++++++++++++------- src/main/java/com/ruoyi/doublePrevention/repository/PreventCJReportCheckRecordFromTaskRepository.java | 4 + src/main/resources/mybatis/doublePrevention/PreventCJReportCheckRecordFromTaskMapper.xml | 11 ++ 4 files changed, 176 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/ruoyi/doublePrevention/repository/PreventCJReportCheckRecordFromTaskRepository.java b/src/main/java/com/ruoyi/doublePrevention/repository/PreventCJReportCheckRecordFromTaskRepository.java index 380271d..8800121 100644 --- a/src/main/java/com/ruoyi/doublePrevention/repository/PreventCJReportCheckRecordFromTaskRepository.java +++ b/src/main/java/com/ruoyi/doublePrevention/repository/PreventCJReportCheckRecordFromTaskRepository.java @@ -41,4 +41,8 @@ int insertRecordList(@Param(value="list") List<PreventCJReportCheckRecordFromTask> recordFromTaskList); int updateCJReportStatusBatchById(List<PreventCJReportCheckRecordFromTask> cjRecordFromTasks); + + int updateTaskReportStatusForRePushV1(@Param("startTime") String startTime, @Param("endTime") String endTime); + + int updateTaskReportStatusForRePushV2(@Param("startTime") String startTime, @Param("endTime") String endTime); } diff --git a/src/main/java/com/ruoyi/doublePrevention/scheduls/RePushDataSchedule.java b/src/main/java/com/ruoyi/doublePrevention/scheduls/RePushDataSchedule.java new file mode 100644 index 0000000..11514a4 --- /dev/null +++ b/src/main/java/com/ruoyi/doublePrevention/scheduls/RePushDataSchedule.java @@ -0,0 +1,60 @@ +package com.ruoyi.doublePrevention.scheduls; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.doublePrevention.repository.PreventCJReportCheckRecordFromTaskRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.time.DayOfWeek; +import java.time.LocalDate; + +@Component +@Slf4j +public class RePushDataSchedule { + + + + @Autowired + private PreventCJReportCheckRecordFromTaskRepository preventCJReportCheckRecordFromTaskRepository; + + @Transactional + @Scheduled(cron = "0 0 12 * * 4 ") + public void repushDataV1(){ + log.info("周四【双重预防】重新推送数据..."+ DateUtils.dateTimeNow()); + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + + // 计算当前周的周一日期 + LocalDate mondayDate = currentDate.with(DayOfWeek.MONDAY); + log.info("当前周的周一日期:" + mondayDate); + String startTime = mondayDate + " 00:00:00"; + String endTime = DateUtils.getDate() + " 12:00:00"; + + int i = preventCJReportCheckRecordFromTaskRepository.updateTaskReportStatusForRePushV1(startTime, endTime); + + log.info("执行更新了:"+i+"条数据,结束周四【双重预防】重新推送数据..."+ DateUtils.dateTimeNow()); + } + + +//update prevent_cj_report_check_record_from_task set id=concat(substring(id,1,length(id)-4),'ccab'),report_status=1 where check_time>="2024-11-04 00:00:00" ; + @Transactional + @Scheduled(cron = "0 0 16 * * 0 ") + public void repushDataV2(){ + log.info("周日【双重预防】重新推送数据..."+ DateUtils.dateTimeNow()); + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + + // 计算当前周的周一日期 + LocalDate mondayDate = currentDate.with(DayOfWeek.THURSDAY); + log.info("当前周的周四日期:" + mondayDate); + String startTime = mondayDate + " 12:00:00"; + String endTime = DateUtils.getDate() + " 16:00:00"; + + int i = preventCJReportCheckRecordFromTaskRepository.updateTaskReportStatusForRePushV2(startTime, endTime); + log.info("执行更新了:"+i+"条数据,结束周四【双重预防】重新推送数据..."+ DateUtils.dateTimeNow()); + } + +} diff --git a/src/main/java/com/ruoyi/project/tr/specialCheck/Test/SpecialCheckTaskDownload.java b/src/main/java/com/ruoyi/project/tr/specialCheck/Test/SpecialCheckTaskDownload.java index 8ccc6f5..587750a 100644 --- a/src/main/java/com/ruoyi/project/tr/specialCheck/Test/SpecialCheckTaskDownload.java +++ b/src/main/java/com/ruoyi/project/tr/specialCheck/Test/SpecialCheckTaskDownload.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.ruoyi.project.tr.riskList.service.IRiskListService; import com.ruoyi.project.tr.specialCheck.domin.DownloadDTO.*; import com.ruoyi.project.tr.specialCheck.domin.TbBaseCheckItem; @@ -17,6 +18,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -25,6 +27,10 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.chrono.ChronoLocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @@ -75,6 +81,22 @@ } return sr; } + public static String decrypt(String encryptedText, byte[] key, byte[] iv) { + String sr; + try { + byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText); + GCMBlockCipher cipher = new GCMBlockCipher(new AESFastEngine()); + AEADParameters parameters = new AEADParameters(new KeyParameter(key), MAC_BIT_SIZE, iv, null); + cipher.init(false, parameters); + byte[] decryptedBytes = new byte[cipher.getOutputSize(encryptedBytes.length)]; + int retLen = cipher.processBytes(encryptedBytes, 0, encryptedBytes.length, decryptedBytes, 0); + cipher.doFinal(decryptedBytes, retLen); + sr = new String(decryptedBytes, StandardCharsets.UTF_8); + } catch (Exception ex) { + throw new RuntimeException(ex.getMessage()); + } + return sr; + } @Transactional @@ -82,7 +104,7 @@ // @Scheduled(cron = "0 0 22,23 * * ?") //每天晚上22、23点执行一次 // @Scheduled(cron = "0 0/1 * * * ? ") // 分钟 // @Scheduled(cron = "0 0/20 * * * ? ") // 分钟 -// @Scheduled(cron = "0/5 * * * * ?") + //@Scheduled(cron = "0/15 * * * * ?") public void execReportDateSchedule() throws UnsupportedEncodingException { logger.info("【####】拉取专项检查数据开始..."); @@ -100,10 +122,20 @@ logger.info("【token时间】" + formatDate); + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + + // 获取今年的1月1号 + LocalDate startOfYear = LocalDate.of(currentDate.getYear(), 1, 1); + + + //String taskId = "84766708-9b18-4133-8acf-08aba67792c7"; + + String taskId = "a8de03f0-4c3e-43fe-a139-0e4ed34edd35"; /** * 1 * */ - logger.info("【####】拉取专项任务数据开始..."); +// logger.info("【####】拉取专项任务数据开始..."); TbCheckConfig specialCheckConfig = configMapper.getSpecialCheckConfig(); if (specialCheckConfig.getStatus() == 2){ @@ -130,6 +162,8 @@ OutputStream os = con.getOutputStream(); + System.out.println("token:"+token+formatDate.toString()); + //本段日志,测试成功后,可注释掉 if (responseCode == HttpURLConnection.HTTP_OK) { //得到响应流 @@ -152,11 +186,20 @@ //接收返回值,保存返回值 TbBaseCheckTaskDownloadBO checkTaskDownloadDTO = JSONObject.parseObject(specialCheckBuffer.toString(), TbBaseCheckTaskDownloadBO.class); //接收返回值,保存返回值 - CheckTaskData tasks = JSONObject.parseObject(checkTaskDownloadDTO.getData(), CheckTaskData.class); - if (tasks.getCheckTaskLists().size() > 0){ - for (TbBaseCheckTask checkTask : tasks.getCheckTaskLists()) { - checkTask.setStatus(1); - int insert = taskTbRepository.insert(checkTask); + List<TbBaseCheckTask> tbBaseCheckTasks = JSONArray.parseArray(checkTaskDownloadDTO.getData(), TbBaseCheckTask.class); + if (tbBaseCheckTasks.size() > 0){ + for (TbBaseCheckTask tbBaseCheckTask : tbBaseCheckTasks) { + LocalDateTime taskStartTime = tbBaseCheckTask.getTaskStartTime(); + LocalDate localDate = taskStartTime.toLocalDate(); + if (localDate.isAfter(startOfYear)) { + logger.info("当前日期大于今年的1月1号"); + tbBaseCheckTask.setStatus(1); + tbBaseCheckTask.setId(tbBaseCheckTask.getTaskId()); + taskId = tbBaseCheckTask.getTaskId(); + + int insert = taskTbRepository.insert(tbBaseCheckTask); + + } } } @@ -180,10 +223,19 @@ page.setCurrent(String.valueOf(1)); page.setSize(String.valueOf(1000)); - itemDownloadRespDTO.setTaskId(baseCheckTask.getId()); + itemDownloadRespDTO.setTaskId(taskId); itemDownloadRespDTO.setPage(page); + System.out.println("请求参数:" + JSONObject.toJSONString(itemDownloadRespDTO)); + + JSONObject itemDownloadRespDTOJson = new JSONObject(); + itemDownloadRespDTOJson.put("taskId",taskId); + itemDownloadRespDTOJson.put("page",page); + System.out.println("【【原始数据2】】" + JSONObject.toJSONString(itemDownloadRespDTOJson)); + String encrypted = encrypt(JSONObject.toJSONString(itemDownloadRespDTOJson), key.getBytes(), iv.getBytes()); + System.out.println("【【加密数据2】】" + encrypted); //加密请求数据 String AESReportUnitDate = encrypt(JSONObject.toJSONString(itemDownloadRespDTO), key.getBytes(), iv.getBytes()); + System.out.println("【【加密数据2】】" + AESReportUnitDate); //上报数据 try { URL url = new URL("http://120.71.182.198:9999/v1/data/receive/getCheckItem"); @@ -204,11 +256,11 @@ con.setRequestProperty("Content-Type", "application/json;charset=utf8"); OutputStream os = con.getOutputStream(); - Map paraMap = new HashMap(); - paraMap.put("data", AESReportUnitDate); /**封装数据*/ - System.out.println("【【加密请求体】】" + JSONArray.toJSON(paraMap).toString()); +// Map paraMap = new HashMap(); +// paraMap.put("data", encrypted); /**封装数据*/ + // System.out.println("【【加密请求体】】" + JSONArray.toJSON(paraMap).toString()); //组装入参,设置请求体 - os.write(JSON.toJSONString(paraMap).getBytes()); + os.write(JSON.toJSONString(itemDownloadRespDTOJson).getBytes()); //本段日志,测试成功后,可注释掉 if (responseCode == HttpURLConnection.HTTP_OK) { @@ -232,15 +284,22 @@ //接收返回值,保存返回值 ItemDownloadRespBO itemDownloadRespBO = JSONObject.parseObject(specialCheckBuffer.toString(), ItemDownloadRespBO.class); //接收返回值,保存返回值 - CheckItemData itemData = JSONObject.parseObject(itemDownloadRespBO.getData(), CheckItemData.class); - if (itemData.getItemLists().size() > 0){ - for (TbBaseCheckItem item : itemData.getItemLists()) { - item.setStatus(1); - int insert = itemTbRepository.insert(item); - } + String data = itemDownloadRespBO.getData(); + if (ObjectUtils.isNotEmpty(data)){ + JSONObject jsonObject = JSON.parseObject(data); + String data1 = jsonObject.get("data").toString(); + List<TbBaseCheckItem> tbBaseCheckItems = JSONObject.parseArray(data1, TbBaseCheckItem.class); + if (ObjectUtils.isNotEmpty(tbBaseCheckItems)){ + for (TbBaseCheckItem item : tbBaseCheckItems) { + item.setStatus(1); + item.setId(item.getCheckItemId()); + int insert = itemTbRepository.insertBatch(item); + } + + } } - taskTbRepository.updateStatusById(baseCheckTask.getId()); + taskTbRepository.updateStatusById(baseCheckTask.getTaskId()); logger.info("【专项任务检查项】-读取检查项结果:" + itemDownloadRespBO.getCode()); System.out.println("【专项任务检查项】-读取检查项完成"); @@ -265,11 +324,15 @@ scoreDownloadRespDTO.setTaskId(baseItemByStatus.getTaskId()); scoreDownloadRespDTO.setCheckItemId(baseItemByStatus.getId()); scoreDownloadRespDTO.setPage(page); + System.out.println("【【加密前请求体】】" +JSON.toJSONString(scoreDownloadRespDTO)); //加密请求数据 - String AESReportUnitDate = encrypt(JSONObject.toJSONString(scoreDownloadRespDTO), key.getBytes(), iv.getBytes()); + String AESReportUnitDate = encrypt(JSON.toJSONString(scoreDownloadRespDTO), key.getBytes(), iv.getBytes()); + System.out.println("【【加密请求体】】" +AESReportUnitDate); + String decrypt = decrypt(AESReportUnitDate, key.getBytes(), iv.getBytes()); + System.out.println("【【解密请求体】】" +decrypt); //上报数据 try { - URL url = new URL("http://120.71.182.198:9999/v1/data/receive/getCheckItem"); + URL url = new URL("http://120.71.182.198:9999/v1/data/receive/getCheckScore"); //得到连接对象 con = (HttpURLConnection) url.openConnection(); //设置请求类型 @@ -287,11 +350,11 @@ con.setRequestProperty("Content-Type", "application/json;charset=utf8"); OutputStream os = con.getOutputStream(); - Map paraMap = new HashMap(); - paraMap.put("data", AESReportUnitDate); /**封装数据*/ - System.out.println("【【加密请求体】】" + JSONArray.toJSON(paraMap).toString()); +// Map paraMap = new HashMap(); +// paraMap.put("data", AESReportUnitDate); /**封装数据*/ +// System.out.println("【【加密请求体】】" + JSONArray.toJSON(paraMap).toString()); //组装入参,设置请求体 - os.write(JSON.toJSONString(paraMap).getBytes()); + os.write(JSON.toJSONString(scoreDownloadRespDTO).getBytes()); //本段日志,测试成功后,可注释掉 if (responseCode == HttpURLConnection.HTTP_OK) { @@ -314,14 +377,21 @@ //接收返回值,保存返回值 ScoreDownloadRespBO scoreDownloadRespBO = JSONObject.parseObject(specialCheckBuffer.toString(), ScoreDownloadRespBO.class); - //接收返回值,保存返回值 - CheckScoreData scoreData = JSONObject.parseObject(scoreDownloadRespBO.getData(), CheckScoreData.class); - if (scoreData.getScoreLists().size() > 0){ - for (TbBaseCheckScore score : scoreData.getScoreLists()) { - int insert = scoreTbRepository.insert(score); - } + String data = scoreDownloadRespBO.getData(); + if (ObjectUtils.isNotEmpty(data)){ + JSONObject jsonObject = JSON.parseObject(data); + String data1 = jsonObject.get("data").toString(); + List<TbBaseCheckScore> tbBaseCheckScores = JSONObject.parseArray(data1, TbBaseCheckScore.class); + if (ObjectUtils.isNotEmpty(tbBaseCheckScores)){ + for (TbBaseCheckScore item : tbBaseCheckScores) { + item.setId(item.getScoreId()); + int insert = scoreTbRepository.save(item); + } + + } } + itemTbRepository.updateStatusById(baseItemByStatus.getId()); logger.info("【评分细则】-读取结果:" + scoreDownloadRespBO.getCode()); diff --git a/src/main/resources/mybatis/doublePrevention/PreventCJReportCheckRecordFromTaskMapper.xml b/src/main/resources/mybatis/doublePrevention/PreventCJReportCheckRecordFromTaskMapper.xml index 5a1295c..a90133d 100644 --- a/src/main/resources/mybatis/doublePrevention/PreventCJReportCheckRecordFromTaskMapper.xml +++ b/src/main/resources/mybatis/doublePrevention/PreventCJReportCheckRecordFromTaskMapper.xml @@ -91,4 +91,15 @@ where id = #{id} </update> + <update id="updateTaskReportStatusForRePushV1"> + update prevent_cj_report_check_record_from_task set id=concat(substring(id,1,length(id)-4),'ccab'),report_status=1 + where check_time >= #{startTime} and check_time <= #{endTime} + </update> + + <update id="updateTaskReportStatusForRePushV2"> + update prevent_cj_report_check_record_from_task set id=concat(substring(id,1,length(id)-4),'ccab'),report_status=1 + where check_time > #{startTime} and check_time <= #{endTime} + </update> + + </mapper> -- Gitblit v1.9.2