package com.ruoyi.project.tr.specialCheck.scheduleLogTask; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.utils.BeanCopyUtils; import com.ruoyi.doublePrevention.entity.CJReport.CJdto.CJReportResultData; import com.ruoyi.doublePrevention.entity.CJReport.CJdto.Data; import com.ruoyi.doublePrevention.entity.CJReport.CJdto.ErrorMsgDetails; import com.ruoyi.doublePrevention.enums.CJReportEnum; import com.ruoyi.doublePrevention.enums.SyncEnum; import com.ruoyi.project.tr.specialCheck.domin.BO.HandlerSpecialCheckReportParam; import com.ruoyi.project.tr.specialCheck.domin.DTO.SpecialCheckItemDangerLogReportDTO; import com.ruoyi.project.tr.specialCheck.domin.TbSpecialCheckScoreAndDangerLog; import com.ruoyi.project.tr.specialCheck.mapper.*; import org.apache.commons.lang3.ObjectUtils; import org.bouncycastle.crypto.engines.AESFastEngine; import org.bouncycastle.crypto.modes.GCMBlockCipher; import org.bouncycastle.crypto.params.AEADParameters; import org.bouncycastle.crypto.params.KeyParameter; 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; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @Component public class ItemDangerReportSchedule { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private TbSpecialCheckItemLogMapper itemLogMapper; @Autowired private TbSpecialCheckScoreAndDangerLogMapper scoreAndDangerLogMapper; String token = "GT6gGJV7JV"; String key = "Bv+NeBolwqg2Pbc1yVwrZA=="; String iv = "4QC9V8eAiB7tdlgBkMsTAw=="; public static final int MAC_BIT_SIZE = 128; public static String encrypt(String plainText, byte[] key, byte[] iv) { String sr; try { byte[] plainBytes = plainText.getBytes(StandardCharsets.UTF_8); GCMBlockCipher cipher = new GCMBlockCipher(new AESFastEngine()); AEADParameters parameters = new AEADParameters(new KeyParameter(key), MAC_BIT_SIZE, iv, null); cipher.init(true, parameters); byte[] encryptedBytes = new byte[cipher.getOutputSize(plainBytes.length)]; int retLen = cipher.processBytes(plainBytes, 0, plainBytes.length, encryptedBytes, 0); cipher.doFinal(encryptedBytes, retLen); sr = Base64.getEncoder().encodeToString(encryptedBytes); } catch (Exception ex) { throw new RuntimeException(ex.getMessage()); } return sr; } @Transactional // @Scheduled(cron = "0 0 23 * * ?") //每天晚上23点执行一次0 0 22,23 * * ? @Scheduled(cron = "15 12 12,17,23 * * ?") //每天晚上22、23点执行一次 // @Scheduled(cron = "0 0/1 * * * ? ") // 分钟 // @Scheduled(cron = "0 0/35 * * * ? ") // 分钟 // @Scheduled(cron = "0/5 * * * * ?") public void execReportDateSchedule() throws UnsupportedEncodingException { logger.info("scoreAndDangerLog【####】上报数据开始..."); HttpURLConnection con = null; BufferedReader buffer = null; int responseCode = 200; // SimpleDateFormat dateFormatCheckData= new SimpleDateFormat("yyyy-MM-dd"); // SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd HH:MM:ss"); DateTimeFormatter dateFormatCheckData = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:MM:ss"); Date date = new Date(); //格式化时间,作为token的时间戳 SimpleDateFormat tokenDate= new SimpleDateFormat("yyyyMMddHHmmssSSS"); String formatDate = tokenDate.format(date); logger.info("scoreAndDangerLog【token时间】" + formatDate); /** * 1、检查项与隐患上报 * */ logger.info("scoreAndDangerLog【2】检查项与隐患上报-处理数据..."); // List CJRiskAnaUnits = .listReportUnitDate(); List scoreAndDangerLogs = scoreAndDangerLogMapper.listScoreAndDangerLogReportList(); if (ObjectUtils.isNotEmpty(scoreAndDangerLogs)){ //封装上报数据,时间格式化 List list = new ArrayList<>(); for (TbSpecialCheckScoreAndDangerLog scoreAndDangerLog : scoreAndDangerLogs) { SpecialCheckItemDangerLogReportDTO specialCheckItemDangerLogReportDTO = BeanCopyUtils.copyBean(scoreAndDangerLog, SpecialCheckItemDangerLogReportDTO.class); specialCheckItemDangerLogReportDTO.setCreateDate(dateFormat.format(scoreAndDangerLog.getCreateDate())); specialCheckItemDangerLogReportDTO.setUpdateDate(dateFormat.format(scoreAndDangerLog.getUpdateDate())); specialCheckItemDangerLogReportDTO.setCheckDate(dateFormatCheckData.format(scoreAndDangerLog.getCheckDate())); specialCheckItemDangerLogReportDTO.setDeleted(scoreAndDangerLog.getDeleted().toString()); list.add(specialCheckItemDangerLogReportDTO); } // logger.info("【【原始数据】】" + JSONObject.toJSONString(list)); logger.info("scoreAndDangerLog【【原始数据】】" + JSONObject.toJSONString(list)); String AESReportUnitDate = encrypt(JSONObject.toJSONString(list), key.getBytes(), iv.getBytes()); // logger.info("【【AES加密结果】】"+ AESReportUnitDate);![](C:/Users/Ad![](C:/Users/Admin/Desktop/所有桌面文件存放/9}AM56M10$6WX){0JRK`$6X.jpg)min/Desktop/所有桌面文件存放/9}AM56M10$6WX){0JRK`$6X.jpg) StringBuffer itemDangerResultBuffer = null; //上报数据 try { URL url = new URL("http://120.71.182.198:9999/v1/data/receive/receiveCheckDangerList"); //得到连接对象 con = (HttpURLConnection) url.openConnection(); //设置请求类型 con.setRequestMethod("POST"); //允许写出 con.setDoOutput(true); //允许读入 con.setDoInput(true); //不使用缓存 con.setUseCaches(false); con.setInstanceFollowRedirects(true); //设置请求头 con.setRequestProperty("X-Access-Token",token+formatDate.toString()); //设置Content-Type,此处根据实际情况确定 con.setRequestProperty("Content-Type", "application/json;charset=utf8"); OutputStream os = con.getOutputStream(); Map paraMap = new HashMap(); paraMap.put("data", AESReportUnitDate); /**封装数据*/ logger.info("scoreAndDangerLog【【加密请求体】】" + JSONArray.toJSON(paraMap).toString()); //组装入参,设置请求体 os.write(JSON.toJSONString(paraMap).getBytes()); //本段日志,测试成功后,可注释掉 if (responseCode == HttpURLConnection.HTTP_OK) { //得到响应流 InputStream inputStream = con.getInputStream(); //将响应流转换成字符串 itemDangerResultBuffer = new StringBuffer(); String line; buffer = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); while ((line = buffer.readLine()) != null) { itemDangerResultBuffer.append(line); } // logger.info("result:" + unitResultBuffer.toString()); logger.info("scoreAndDangerLog【result】:" + itemDangerResultBuffer.toString()); } } catch (Exception e) { e.printStackTrace(); } //接收返回值,保存返回值 CJReportResultData CJOverhaulLogResult = JSONObject.parseObject(itemDangerResultBuffer.toString(), CJReportResultData.class); //接收返回值,保存返回值 List errorIdList= new ArrayList<>(); Data data = JSONObject.parseObject(CJOverhaulLogResult.getData(), Data.class); //保存失败结果 if (ObjectUtils.isNotEmpty(data)){ for (ErrorMsgDetails errorMsgDetail : data.getErrorMsgDetails()) { errorIdList.add(errorMsgDetail.getId()); } } LocalDateTime nowDate = LocalDateTime.now(); logger.info("scoreAndDangerLog【检查项与隐患】数据上报结果:" + CJOverhaulLogResult.getCode()); //设置所有数据上报成功 if (CJOverhaulLogResult.getCode().equals(CJReportEnum.SUCCESS.getCode()) || CJOverhaulLogResult.getCode().equals(CJReportEnum.SUCESS_AND_FAIL.getCode())){ for (TbSpecialCheckScoreAndDangerLog itemDangerLo : scoreAndDangerLogs) { HandlerSpecialCheckReportParam handlerCJReportParam = new HandlerSpecialCheckReportParam(); //封装数据 handlerCJReportParam.setId(itemDangerLo.getId()); handlerCJReportParam.setReportStatus(SyncEnum.SYNC_EXEC_SUCCESS.getCode()); handlerCJReportParam.setReportTime(nowDate); scoreAndDangerLogMapper.updateItemDangerReportStatusById(handlerCJReportParam); } } //设置上报失败的数据,上报失败 if (CJOverhaulLogResult.getCode().equals(CJReportEnum.FAIL.getCode()) || CJOverhaulLogResult.getCode().equals(CJReportEnum.SUCESS_AND_FAIL.getCode())){ for (String failId : errorIdList) { //上报失败 HandlerSpecialCheckReportParam handlerCJReportParam = new HandlerSpecialCheckReportParam(); //封装数据 handlerCJReportParam.setId(failId); handlerCJReportParam.setReportStatus(SyncEnum.SYNC_EXEC_FAIL.getCode()); handlerCJReportParam.setReportTime(nowDate); scoreAndDangerLogMapper.updateItemDangerReportStatusById(handlerCJReportParam); } } // logger.info("【1】安全风险分析单元-数据处理完成"); logger.info("scoreAndDangerLog【检查项与隐患】-数据处理完成"); }else { // logger.info("【1】风险分析单元-无数据上报昌吉州"); logger.info("scoreAndDangerLog【检查项与隐患】-无数据上报昌吉州"); } } }