package com.ruoyi.project.tr.specialCheck.scheduleLogTask; 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; import com.ruoyi.project.tr.specialCheck.domin.TbBaseCheckScore; import com.ruoyi.project.tr.specialCheck.domin.TbBaseCheckTask; import com.ruoyi.project.tr.specialCheck.domin.TbCheckConfig; import com.ruoyi.project.tr.specialCheck.mapper.*; 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.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.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @Component public class SpecialCheckTaskDownload { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private TbBaseCheckCompanyMapper companyTbRepository; @Autowired private TbBaseCheckItemMapper itemTbRepository; @Autowired private TbBaseCheckScoreMapper scoreTbRepository; @Autowired private TbBaseCheckTaskMapper taskTbRepository; @Autowired private TbSpecialCheckTaskLogMapper taskSpecialLogMapper; @Autowired private IRiskListService riskListService; @Autowired private TbCheckConfigMapper configMapper; 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; } 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 // @Scheduled(cron = "0 0 23 * * ?") //每天晚上23点执行一次0 0 22,23 * * ? // @Scheduled(cron = "0 0 22,23 * * ?") //每天晚上22、23点执行一次 // @Scheduled(cron = "0 0/1 * * * ? ") // 分钟 // @Scheduled(cron = "0 0/20 * * * ? ") // 分钟 //@Scheduled(cron = "0/15 * * * * ?") public void execReportDateSchedule() throws UnsupportedEncodingException { logger.info("【####】拉取专项检查数据开始..."); HttpURLConnection con = null; BufferedReader buffer = null; int responseCode = 200; 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("【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("【####】拉取专项任务数据开始..."); TbCheckConfig specialCheckConfig = configMapper.getSpecialCheckConfig(); if (specialCheckConfig.getStatus() == 2){ StringBuffer specialCheckBuffer = null; //上报数据 try { URL url = new URL("http://120.71.182.198:9999/v1/data/receive/getCheckTask"); //得到连接对象 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(); System.out.println("token:"+token+formatDate.toString()); //本段日志,测试成功后,可注释掉 if (responseCode == HttpURLConnection.HTTP_OK) { //得到响应流 InputStream inputStream = con.getInputStream(); //将响应流转换成字符串 specialCheckBuffer = new StringBuffer(); String line; buffer = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); while ((line = buffer.readLine()) != null) { specialCheckBuffer.append(line); } // logger.info("result:" + unitResultBuffer.toString()); System.out.println("result:" + specialCheckBuffer.toString()); } } catch (Exception e) { e.printStackTrace(); } //接收返回值,保存返回值 TbBaseCheckTaskDownloadBO checkTaskDownloadDTO = JSONObject.parseObject(specialCheckBuffer.toString(), TbBaseCheckTaskDownloadBO.class); //接收返回值,保存返回值 List 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); } } } logger.info("【专项检查任务】-读取任务结果:" + checkTaskDownloadDTO.getCode()); System.out.println("【专项检查任务】-读取任务完成"); }else { System.out.println("【专项检查任务】- 不读取任务"); } /** * 2 * */ logger.info("【####】拉取检查项数据开始..."); if (specialCheckConfig.getStatus() == 2){ StringBuffer specialCheckBuffer = null; ItemDownloadRespDTO itemDownloadRespDTO = new ItemDownloadRespDTO(); TbBaseCheckTask baseCheckTask = taskTbRepository.getBaseCheckTaskByStatus(date); Page page = new Page(); page.setCurrent(String.valueOf(1)); page.setSize(String.valueOf(1000)); 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"); //得到连接对象 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", encrypted); /**封装数据*/ // System.out.println("【【加密请求体】】" + JSONArray.toJSON(paraMap).toString()); //组装入参,设置请求体 os.write(JSON.toJSONString(itemDownloadRespDTOJson).getBytes()); //本段日志,测试成功后,可注释掉 if (responseCode == HttpURLConnection.HTTP_OK) { //得到响应流 InputStream inputStream = con.getInputStream(); //将响应流转换成字符串 specialCheckBuffer = new StringBuffer(); String line; buffer = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); while ((line = buffer.readLine()) != null) { specialCheckBuffer.append(line); } // logger.info("result:" + unitResultBuffer.toString()); System.out.println("result:" + specialCheckBuffer.toString()); } } catch (Exception e) { e.printStackTrace(); } //接收返回值,保存返回值 ItemDownloadRespBO itemDownloadRespBO = JSONObject.parseObject(specialCheckBuffer.toString(), ItemDownloadRespBO.class); //接收返回值,保存返回值 String data = itemDownloadRespBO.getData(); if (ObjectUtils.isNotEmpty(data)){ JSONObject jsonObject = JSON.parseObject(data); String data1 = jsonObject.get("data").toString(); List 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.getTaskId()); logger.info("【专项任务检查项】-读取检查项结果:" + itemDownloadRespBO.getCode()); System.out.println("【专项任务检查项】-读取检查项完成"); }else { System.out.println("【专项任务检查项】- 不读取检查项"); } /** * 3 * */ logger.info("【####】拉取评分细则开始..."); if (specialCheckConfig.getStatus() == 2){ StringBuffer specialCheckBuffer = null; ScoreDownloadRespDTO scoreDownloadRespDTO = new ScoreDownloadRespDTO(); TbBaseCheckItem baseItemByStatus = itemTbRepository.getBaseItemByStatus(date); Page page = new Page(); page.setCurrent(String.valueOf(1)); page.setSize(String.valueOf(1000)); scoreDownloadRespDTO.setTaskId(baseItemByStatus.getTaskId()); scoreDownloadRespDTO.setCheckItemId(baseItemByStatus.getId()); scoreDownloadRespDTO.setPage(page); System.out.println("【【加密前请求体】】" +JSON.toJSONString(scoreDownloadRespDTO)); //加密请求数据 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/getCheckScore"); //得到连接对象 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); /**封装数据*/ // System.out.println("【【加密请求体】】" + JSONArray.toJSON(paraMap).toString()); //组装入参,设置请求体 os.write(JSON.toJSONString(scoreDownloadRespDTO).getBytes()); //本段日志,测试成功后,可注释掉 if (responseCode == HttpURLConnection.HTTP_OK) { //得到响应流 InputStream inputStream = con.getInputStream(); //将响应流转换成字符串 specialCheckBuffer = new StringBuffer(); String line; buffer = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); while ((line = buffer.readLine()) != null) { specialCheckBuffer.append(line); } // logger.info("result:" + unitResultBuffer.toString()); System.out.println("result:" + specialCheckBuffer.toString()); } } catch (Exception e) { e.printStackTrace(); } //接收返回值,保存返回值 ScoreDownloadRespBO scoreDownloadRespBO = JSONObject.parseObject(specialCheckBuffer.toString(), ScoreDownloadRespBO.class); String data = scoreDownloadRespBO.getData(); if (ObjectUtils.isNotEmpty(data)){ JSONObject jsonObject = JSON.parseObject(data); String data1 = jsonObject.get("data").toString(); List 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()); System.out.println("【评分细则】-读取完成"); }else { System.out.println("【评分细则】- 不读取"); } } }