双重预防项目-国泰新华二开定制版
换个名字嗨起来
2024-07-25 2bf2a296ee98bf48026e90da5c7a7b5525fb9f67
src/main/java/com/ruoyi/doublePrevention/scheduls/ExecCJReportDateSchedule.java
@@ -10,6 +10,7 @@
import com.ruoyi.doublePrevention.entity.CJReport.CJdto.Data;
import com.ruoyi.doublePrevention.entity.CJReport.CJdto.ErrorMsgDetails;
import com.ruoyi.doublePrevention.entity.CJReport.CJdto.HandlerDO.*;
import com.ruoyi.doublePrevention.entity.PreventReportConfig;
import com.ruoyi.doublePrevention.enums.CJReportEnum;
import com.ruoyi.doublePrevention.enums.SyncEnum;
import com.ruoyi.doublePrevention.repository.param.HandlerCJReportParam;
@@ -28,6 +29,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.io.*;
import java.lang.reflect.Array;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
@@ -56,6 +58,10 @@
    private PreventCJReportDangerInfoService CJDangerInfoService;
    @Autowired
    private PreventCJReportPointService CJPointService;
    @Autowired
    private PreventCJReportOverhaulLogService CJOverhaulLogService;
    @Autowired
    private PreventReportConfigService preventReportConfigService;
    String token = "GT6gGJV7JV";
    String key = "Bv+NeBolwqg2Pbc1yVwrZA==";
@@ -87,8 +93,10 @@
    @Transactional
    @Scheduled(cron = "0 0/1 * * * ?")
    //@Scheduled(cron = "0/30 * * * * ?")
//    @Scheduled(cron = "0 0 23 * * ?")    //每天晚上23点执行一次0 0 22,23 * * ?
//    @Scheduled(cron = "0 0 22,23 * * ?")    //每天晚上22、23点执行一次
    @Scheduled(cron = "0 0/10 * * * ? ")    // 分钟
//    @Scheduled(cron = "0/30 * * * * ?")
    public void execReportDateSchedule() throws UnsupportedEncodingException {
        logger.info("【####】上报数据开始...");
@@ -105,10 +113,15 @@
        logger.info("【token时间】" + formatDate);
        //使用风险分析单元数据上报主配置,作为自动上报开关
        PreventReportConfig reportConfig = preventReportConfigService.getReportConfigById(SyncEnum.REPORT_CONFIG_RISK_ANA_UNIT.getCode());
        if (reportConfig.getReportType() == 0){
            return;
        }
        /**
         * 1、处理安全风险分析单元数据
         * */
        logger.info("【1】安全风险分析单元-处理数据...");
        List<PreventCJReportRiskAnaUnit> CJRiskAnaUnits = CJRiskAnaUnitService.listReportUnitDate();
        if (ObjectUtils.isNotEmpty(CJRiskAnaUnits)){
@@ -276,7 +289,7 @@
                os.write(JSON.toJSONString(paraMap).getBytes());
                //得到响应码
                responseCode = con.getResponseCode();
                //本段日志,测试成功后,可注释掉
                //确认响应流不为空
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    //得到响应流
                    InputStream inputStream = con.getInputStream();
@@ -467,8 +480,10 @@
                CJReportCheckTaskFromWorkDTO cjReportCheckTaskFromWorkDTO = BeanCopyUtils.copyBean(cjTaskFromWork, CJReportCheckTaskFromWorkDTO.class);
                cjReportCheckTaskFromWorkDTO.setCreateDate(dateFormat.format(cjTaskFromWork.getCreateDate()));
                cjReportCheckTaskFromWorkDTO.setUpdateDate(dateFormat.format(cjTaskFromWork.getUpdateDate()));
                cjReportCheckTaskFromWorkDTO.setTaskStartTime(dateFormat.format(cjTaskFromWork.getCreateDate()));
                reportCheckTaskFromWorkList.add(cjReportCheckTaskFromWorkDTO);
            }
            System.out.println(Arrays.toString(reportCheckTaskFromWorkList.toArray()));
            //数据上报
            String AESReportTaskFromWork = encrypt(JSONObject.toJSONString(reportCheckTaskFromWorkList), key.getBytes(), iv.getBytes());
            StringBuffer taskFromWorkResultBuffer = null;
@@ -491,7 +506,7 @@
                con.setRequestProperty("X-Access-Token",token+formatDate.toString());
                OutputStream os = con.getOutputStream();
                Map paraMap = new HashMap();
                paraMap.put("data", AESReportTaskFromWork); /**封装数据*/
                paraMap.put("data", AESReportTaskFromWork);
                //组装入参,设置请求体
                os.write(JSON.toJSONString(paraMap).getBytes());
                //得到响应码
@@ -563,14 +578,17 @@
            List<CJReportCheckRecordFromTaskDTO> reportRecordFromTaskList = new ArrayList<>();
            for (PreventCJReportCheckRecordFromTask cjRecordFromTask : CJRecordFromTasks) {
                CJReportCheckRecordFromTaskDTO cjReportCheckRecordFromTaskDTO = BeanCopyUtils.copyBean(cjRecordFromTask, CJReportCheckRecordFromTaskDTO.class);
                cjReportCheckRecordFromTaskDTO.setCreateDate(dateFormat.format(cjRecordFromTask.getCreateDate()));
                cjReportCheckRecordFromTaskDTO.setUpdateDate(dateFormat.format(cjRecordFromTask.getUpdateDate()));
//                cjReportCheckRecordFromTaskDTO.setCreateDate(dateFormat.format(cjRecordFromTask.getCreateDate()));
//                cjReportCheckRecordFromTaskDTO.setUpdateDate(dateFormat.format(cjRecordFromTask.getUpdateDate()));
                cjReportCheckRecordFromTaskDTO.setCheckTime(dateFormat.format(cjRecordFromTask.getCheckTime()));
                cjReportCheckRecordFromTaskDTO.setMobileMe(cjRecordFromTask.getMobileCode());
                cjReportCheckRecordFromTaskDTO.setIsDefend(cjRecordFromTask.getDefend());
                reportRecordFromTaskList.add(cjReportCheckRecordFromTaskDTO);
            }
//            System.out.println(Arrays.toString(reportRecordFromTaskList.toArray()));
            //数据加密
            String AESReportRecordFromTask = encrypt(JSONObject.toJSONString(reportRecordFromTaskList), key.getBytes(), iv.getBytes());
            logger.info("【test】数据加密完成,开始上报数据");
            StringBuffer recordFromTaskResultBuffer = null;
            //上报数据
            try {
@@ -613,9 +631,19 @@
                e.printStackTrace();
            }
            logger.info("【test】接收返回值");
            CJReportResultData CJRecordFromTaskResult = new CJReportResultData();
            try {
                CJRecordFromTaskResult =  JSONObject.parseObject(recordFromTaskResultBuffer.toString(), CJReportResultData.class);
            }catch (Exception e){
                e.printStackTrace();
                logger.info("【test】接收返回值异常");
            }
            //接收返回值,保存返回值
            CJReportResultData CJRecordFromTaskResult = JSONObject.parseObject(recordFromTaskResultBuffer.toString(), CJReportResultData.class);
//            CJReportResultData CJRecordFromTaskResult = JSONObject.parseObject(recordFromTaskResultBuffer.toString(), CJReportResultData.class);
            //接收返回值,保存返回值
            logger.info("【test】保存上报结果");
            List<String> errorIdList= new ArrayList<>();
            Data data = JSONObject.parseObject(CJRecordFromTaskResult.getData(), Data.class);
            //保存失败结果
@@ -759,6 +787,114 @@
           logger.info("【6】隐患信息-无数据上报昌吉州");
       }
    }
        /**
         * 7、检修停用记录信息数据
         * */
        logger.info("【7】检修停用记录-处理数据...");
        List<PreventCJReportOverhaulLog> CJOverhaulLogs = CJOverhaulLogService.listReportOverhaulDate();
        if (ObjectUtils.isNotEmpty(CJOverhaulLogs)){
            //封装上报数据
            List<CJReportOverhaulLogDTO> reportOverhaulLogDTOS = new ArrayList<>();
            for (PreventCJReportOverhaulLog cjOverhaulLog : CJOverhaulLogs) {
                CJReportOverhaulLogDTO cjReportOverhaulLogDTO = BeanCopyUtils.copyBean(cjOverhaulLog, CJReportOverhaulLogDTO.class);
                cjReportOverhaulLogDTO.setCreateDate(dateFormat.format(cjOverhaulLog.getCreateDate()));
                cjReportOverhaulLogDTO.setUpdateDate(dateFormat.format(cjOverhaulLog.getUpdateDate()));
                cjReportOverhaulLogDTO.setStopStartTime(dateFormat.format(cjOverhaulLog.getStopStartTime()));
                if (ObjectUtils.isNotEmpty(cjOverhaulLog.getStopEndTime())){
                    cjReportOverhaulLogDTO.setStopEndTime(dateFormat.format(cjOverhaulLog.getStopEndTime()));
                }else {
                    cjReportOverhaulLogDTO.setStopEndTime(null);
                }
                reportOverhaulLogDTOS.add(cjReportOverhaulLogDTO);
            }
            //数据上报
            logger.info("【原始数据】" + JSONObject.toJSONString(reportOverhaulLogDTOS));
            String AESReportDangerInfo = encrypt(JSONObject.toJSONString(reportOverhaulLogDTOS), key.getBytes(), iv.getBytes());
            StringBuffer dangerInfoResultBuffer = null;
            //上报数据
            try {
                URL url = new URL("http://v1/data/receive/receiveUnitStop");
                //得到连接对象
                con = (HttpURLConnection) url.openConnection();
                //设置请求类型
                con.setRequestMethod("POST");
                //设置Content-Type,此处根据实际情况确定
                con.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
                //允许写出
                con.setDoOutput(true);
                //允许读入
                con.setDoInput(true);
                //不使用缓存
                con.setUseCaches(false);
                //设置请求头
                con.setRequestProperty("X-Access-Token",token + formatDate.toString());
                OutputStream os = con.getOutputStream();
                Map paraMap = new HashMap();
                paraMap.put("data", AESReportDangerInfo);/**封装数据*/
                //组装入参,设置请求体
                os.write(JSON.toJSONString(paraMap).getBytes());
                //得到响应码
                responseCode = con.getResponseCode();
                //本段日志,测试成功后,可注释掉
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    //得到响应流
                    InputStream inputStream = con.getInputStream();
                    //将响应流转换成字符串
                    dangerInfoResultBuffer = new StringBuffer();
                    String line;
                    buffer = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
                    while ((line = buffer.readLine()) != null) {
                        dangerInfoResultBuffer.append(line);
                    }
                    logger.info("result:" + dangerInfoResultBuffer.toString());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            //接收返回值,保存返回值
            CJReportResultData CJOverhaulLogResult = JSONObject.parseObject(dangerInfoResultBuffer.toString(), CJReportResultData.class);
            //接收返回值,保存返回值
            List<String> errorIdList= new ArrayList<>();
            Data data = JSONObject.parseObject(CJOverhaulLogResult.getData(), Data.class);
            //保存失败结果
            if (ObjectUtils.isNotEmpty(data)){
                for (ErrorMsgDetails errorMsgDetail : data.getErrorMsgDetails()) {
                    errorIdList.add(errorMsgDetail.getId());
                }
            }
            logger.info("【】CJOverhaulLog数据上报结果:" + CJOverhaulLogResult.getCode());
            //设置所有数据上报成功
            if (CJOverhaulLogResult.getCode().equals(CJReportEnum.SUCCESS.getCode()) || CJOverhaulLogResult.getCode().equals(CJReportEnum.SUCESS_AND_FAIL.getCode())){
                for (PreventCJReportOverhaulLog cjOverhaulLog : CJOverhaulLogs) {
                    HandlerCJReportParam handlerCJReportParam = new HandlerCJReportParam();
                    //封装数据
                    handlerCJReportParam.setId(cjOverhaulLog.getId());
                    handlerCJReportParam.setReportStatus(SyncEnum.SYNC_EXEC_SUCCESS.getCode());
                    handlerCJReportParam.setReportTime(date);
                    CJOverhaulLogService.updateCJReportStatusById(handlerCJReportParam);
                }
            }
            //设置上报失败的数据,上报失败
            if (CJOverhaulLogResult.getCode().equals(CJReportEnum.FAIL.getCode()) || CJOverhaulLogResult.getCode().equals(CJReportEnum.SUCESS_AND_FAIL.getCode())){
                for (String failId : errorIdList) {
                    //上报失败
                    HandlerCJReportParam handlerCJReportParam = new HandlerCJReportParam();
                    //封装数据
                    handlerCJReportParam.setId(failId);
                    handlerCJReportParam.setReportStatus(SyncEnum.SYNC_EXEC_FAIL.getCode());
                    handlerCJReportParam.setReportTime(date);
                    CJOverhaulLogService.updateCJReportStatusById(handlerCJReportParam);
                }
            }
            logger.info("【7】检修停用记录-数据处理完成");
        }else {
            logger.info("【7】检修停用记录-无数据上报昌吉州");
        }
    }
}