package com.hhwy.qbeqsjy.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.hhwy.qbeqsjy.common.CommonUtil; import com.hhwy.qbeqsjy.common.Constants; import com.hhwy.qbeqsjy.domain.AjaxResult; import com.hhwy.qbeqsjy.dto.CtrlDTO; import com.hhwy.qbeqsjy.service.CtrlService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @Slf4j @RestController @RequestMapping("/api/v1/") public class CtrlController { @Autowired private CtrlService ctrlService; @GetMapping("/test") public AjaxResult test(){ return AjaxResult.success("测试接口"); } /** * 下发布控任务,不支持批量操作,并记录布控任务对应的区域信息 * @param ctrlDTO * @return * * 请求参数: * { * "taskId":"59275350793392128", * "endCtrlTime":"2025-03-20 00:00:00", * "resourceIdList":["aaaa","bbbb","cccc"], * "areaIdList":["dddd","eeee"], * "clueList":[ * { * "clue":"13500000000", * "clueType":"D201005", * }, * { * "clue":"120101000000000000", * "clueType":"D310111", * } * ...... * ] * * } */ @PostMapping("/ctrl") public AjaxResult ctrl(@RequestBody CtrlDTO ctrlDTO){ String taskId = ctrlDTO.getTaskId(); List> clueList = ctrlDTO.getClueList(); List modelIdList = ctrlDTO.getModelIdList(); List areaIdList = ctrlDTO.getAreaIdList(); if(StringUtils.isBlank(taskId) || clueList.size() == 0 || modelIdList.size() == 0){ return AjaxResult.error(Constants.PARAMS_EMPTY_MSG); } String endCtrlTime = ctrlDTO.getEndCtrlTime(); try { List resourceCodeList = new ArrayList<>(); // 将用户域传入的布控模型编号转换为烽火盘古平台数据资源编码 for (String modelId : modelIdList) { resourceCodeList.add(CommonUtil.getConfValueByKeyApp(modelId)); } // 对resourceCodeList集合中的元素去重 List newResourceCodeList = CommonUtil.deduplicateList(resourceCodeList); String modelIdListStr = modelIdList.toString(); if(modelIdListStr.contains("DRYJ") && !modelIdListStr.contains("JJYJ")){ // 任务仅包含单人预警 ctrlService.processDRYJCtrl(taskId, clueList, newResourceCodeList, areaIdList, endCtrlTime); } else if(modelIdListStr.contains("JJYJ") && !modelIdListStr.contains("DRYJ")){ // 任务仅包含聚集预警 ctrlService.processJJYJCtrl(taskId, clueList, newResourceCodeList, areaIdList); } else { // 任务既包含单人预警,又包含聚集预警 // 分别筛选出单人预警和聚集预警各自所对应的布控模型编号,并转换为对应的烽火数据资源编码 List dryjResourceCodeList = new ArrayList<>(); List jjyjResourceCodeList = new ArrayList<>(); for (String modelId : modelIdList) { if(modelId.contains("DRYJ")){ dryjResourceCodeList.add(CommonUtil.getConfValueByKeyApp(modelId)); } else { jjyjResourceCodeList.add(CommonUtil.getConfValueByKeyApp(modelId)); } } ctrlService.processDRYJCtrl(taskId, clueList, CommonUtil.deduplicateList(dryjResourceCodeList), areaIdList, endCtrlTime); ctrlService.processJJYJCtrl(taskId, clueList, CommonUtil.deduplicateList(jjyjResourceCodeList), areaIdList); } return AjaxResult.success(Constants.CTRL_ING_MSG); }catch (Exception e){ log.error("任务布控发生异常", e); } return AjaxResult.error(Constants.SERVER_ERROR_MSG); } /** * 停止布控任务,不支持批量操作 * @param reqBody * @return * * 请求参数: * { * "taskId":"59275350793392128", * "clueList":[ * { * "clue":"13502082832", * "clueType":"D201005" * } * ] * } */ @PostMapping("/stopCtrl") public AjaxResult stopCtrl(@RequestBody JSONObject reqBody){ String taskId = reqBody.getString("taskId"); JSONArray clueList = reqBody.getJSONArray("clueList"); if(StringUtils.isBlank(taskId) || clueList == null || clueList.size() == 0){ return AjaxResult.error(Constants.PARAMS_EMPTY_MSG); } try{ ctrlService.processStopCtrl(taskId, clueList); return AjaxResult.success(Constants.STOP_CTRL_ING_MSG); } catch (Exception e){ log.error("任务停控发生异常", e); } return AjaxResult.error(Constants.SERVER_ERROR_MSG); } /** * 保存用户域提交的布控任务相关信息 * @param reqBody * @return */ @PostMapping("/saveCtrlTaskInfo") public AjaxResult saveCtrlTaskInfo(@RequestBody JSONObject reqBody){ JSONObject taskInfo = reqBody.getJSONObject("taskInfo"); JSONArray modelIdListInfo = reqBody.getJSONArray("modelIdListInfo"); JSONArray clueInfo = reqBody.getJSONArray("clueInfo"); JSONArray modelInfo = reqBody.getJSONArray("modelInfo"); if(taskInfo == null || modelIdListInfo.size() == 0 || clueInfo.size() == 0 || modelInfo.size() == 0){ return AjaxResult.error(Constants.PARAMS_EMPTY_MSG); } try{ JSONArray areaInfo = reqBody.getJSONArray("areaInfo"); return ctrlService.saveCtrlTaskInfo(taskInfo, modelIdListInfo, areaInfo, clueInfo, modelInfo)? AjaxResult.success() : AjaxResult.error(); } catch (Exception e){ log.error("保存用户域任务相关信息发生异常", e); } return AjaxResult.error(Constants.SERVER_ERROR_MSG); } /** * 增量查询布控任务预警结果数据 * @return */ @PostMapping("/getCtrlWarningInfo") public AjaxResult getCtrlWarningInfo(){ try{ return AjaxResult.success(ctrlService.getWarningInfoByInc()); } catch (Exception e){ log.error("增量查询布控任务预警结果数据发生异常", e); } return AjaxResult.error(Constants.SERVER_ERROR_MSG); } }