CtrlController.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package com.hhwy.qbeqsjy.controller;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.hhwy.qbeqsjy.common.CommonUtil;
  5. import com.hhwy.qbeqsjy.common.Constants;
  6. import com.hhwy.qbeqsjy.domain.AjaxResult;
  7. import com.hhwy.qbeqsjy.dto.CtrlDTO;
  8. import com.hhwy.qbeqsjy.service.CtrlService;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.jdbc.core.JdbcTemplate;
  13. import org.springframework.web.bind.annotation.*;
  14. import javax.annotation.Resource;
  15. import java.util.*;
  16. @Slf4j
  17. @RestController
  18. @RequestMapping("/api/v1/")
  19. public class CtrlController {
  20. @Autowired
  21. private CtrlService ctrlService;
  22. @GetMapping("/test")
  23. public AjaxResult test(){
  24. return AjaxResult.success("测试接口");
  25. }
  26. /**
  27. * 下发布控任务,不支持批量操作,并记录布控任务对应的区域信息
  28. * @param ctrlDTO
  29. * @return
  30. *
  31. * 请求参数:
  32. * {
  33. * "taskId":"59275350793392128",
  34. * "endCtrlTime":"2025-03-20 00:00:00",
  35. * "resourceIdList":["aaaa","bbbb","cccc"],
  36. * "areaIdList":["dddd","eeee"],
  37. * "clueList":[
  38. * {
  39. * "clue":"13500000000",
  40. * "clueType":"D201005",
  41. * },
  42. * {
  43. * "clue":"120101000000000000",
  44. * "clueType":"D310111",
  45. * }
  46. * ......
  47. * ]
  48. *
  49. * }
  50. */
  51. @PostMapping("/ctrl")
  52. public AjaxResult ctrl(@RequestBody CtrlDTO ctrlDTO){
  53. String taskId = ctrlDTO.getTaskId();
  54. List<Map<String, Object>> clueList = ctrlDTO.getClueList();
  55. List<String> modelIdList = ctrlDTO.getModelIdList();
  56. List<String> areaIdList = ctrlDTO.getAreaIdList();
  57. if(StringUtils.isBlank(taskId) || clueList.size() == 0 || modelIdList.size() == 0){
  58. return AjaxResult.error(Constants.PARAMS_EMPTY_MSG);
  59. }
  60. String endCtrlTime = ctrlDTO.getEndCtrlTime();
  61. try {
  62. List<String> resourceCodeList = new ArrayList<>();
  63. // 将用户域传入的布控模型编号转换为烽火盘古平台数据资源编码
  64. Iterator<String> iterator = modelIdList.iterator();
  65. while (iterator.hasNext()){
  66. String modelId = iterator.next();
  67. String fhResourceCode = CommonUtil.getConfValueByKeyApp(modelId);
  68. // 集合中只添加数据资源编码值不为[yhybk]和[deving]的元素
  69. if(!"yhybk".equals(fhResourceCode) && !"deving".equals(fhResourceCode)){
  70. resourceCodeList.add(fhResourceCode);
  71. } else { // 将集合中数据资源编码值为[yhybk]或[deving]的原始模型编号元素删除
  72. iterator.remove();
  73. }
  74. }
  75. // 对集合中的元素去重,如 DRYJ-WSLJ-JRBDYJ和DRYJ-BSMGQY-JRMGQY两个模型对应的烽火数据资源编码值相同(134B102),均对应网安AUTH认证数据,保留一个即可
  76. List<String> newResourceCodeList = CommonUtil.deduplicateList(resourceCodeList);
  77. String modelIdListStr = modelIdList.toString();
  78. // 任务仅包含单人预警
  79. if(modelIdListStr.contains("DRYJ") && !modelIdListStr.contains("JJYJ")){
  80. ctrlService.processDRYJCtrl(taskId, clueList, newResourceCodeList, areaIdList, endCtrlTime);
  81. }
  82. // 任务仅包含聚集预警
  83. else if(modelIdListStr.contains("JJYJ") && !modelIdListStr.contains("DRYJ")){
  84. ctrlService.processJJYJCtrl(taskId, clueList, newResourceCodeList, areaIdList);
  85. }
  86. // 任务既包含单人预警,又包含聚集预警
  87. else {
  88. // 分别筛选出单人预警和聚集预警各自所对应的布控模型编号,并转换为对应的烽火数据资源编码
  89. List<String> dryjResourceCodeList = new ArrayList<>();
  90. List<String> jjyjResourceCodeList = new ArrayList<>();
  91. for (String modelId : modelIdList) {
  92. if(modelId.contains("DRYJ")){
  93. dryjResourceCodeList.add(CommonUtil.getConfValueByKeyApp(modelId));
  94. } else {
  95. jjyjResourceCodeList.add(CommonUtil.getConfValueByKeyApp(modelId));
  96. }
  97. }
  98. ctrlService.processDRYJCtrl(taskId, clueList, CommonUtil.deduplicateList(dryjResourceCodeList), areaIdList, endCtrlTime);
  99. ctrlService.processJJYJCtrl(taskId, clueList, CommonUtil.deduplicateList(jjyjResourceCodeList), areaIdList);
  100. }
  101. return AjaxResult.success(Constants.CTRL_ING_MSG);
  102. } catch (Exception e){
  103. log.error("任务布控发生异常", e);
  104. }
  105. return AjaxResult.error(Constants.SERVER_ERROR_MSG);
  106. }
  107. /**
  108. * 停止布控任务,不支持批量操作
  109. * @param reqBody
  110. * @return
  111. *
  112. * 请求参数:
  113. * {
  114. * "taskId":"59275350793392128",
  115. * "clueList":[
  116. * {
  117. * "clue":"13502082832",
  118. * "clueType":"D201005"
  119. * }
  120. * ]
  121. * }
  122. */
  123. @PostMapping("/stopCtrl")
  124. public AjaxResult stopCtrl(@RequestBody JSONObject reqBody){
  125. String taskId = reqBody.getString("taskId");
  126. JSONArray clueList = reqBody.getJSONArray("clueList");
  127. if(StringUtils.isBlank(taskId) || clueList == null || clueList.size() == 0){
  128. return AjaxResult.error(Constants.PARAMS_EMPTY_MSG);
  129. }
  130. try{
  131. ctrlService.processStopCtrl(taskId, clueList);
  132. return AjaxResult.success(Constants.STOP_CTRL_ING_MSG);
  133. } catch (Exception e){
  134. log.error("任务停控发生异常", e);
  135. }
  136. return AjaxResult.error(Constants.SERVER_ERROR_MSG);
  137. }
  138. /**
  139. * 保存用户域提交的布控任务相关信息
  140. * @param reqBody
  141. * @return
  142. */
  143. @PostMapping("/saveCtrlTaskInfo")
  144. public AjaxResult saveCtrlTaskInfo(@RequestBody JSONObject reqBody){
  145. JSONObject taskInfo = reqBody.getJSONObject("taskInfo");
  146. JSONArray modelIdListInfo = reqBody.getJSONArray("modelIdListInfo");
  147. JSONArray clueInfo = reqBody.getJSONArray("clueInfo");
  148. JSONArray modelInfo = reqBody.getJSONArray("modelInfo");
  149. if(taskInfo == null || modelIdListInfo.isEmpty() || clueInfo.isEmpty() || modelInfo.isEmpty()){
  150. return AjaxResult.error(Constants.PARAMS_EMPTY_MSG);
  151. }
  152. try{
  153. JSONArray areaInfo = reqBody.getJSONArray("areaInfo");
  154. return ctrlService.saveCtrlTaskInfo(taskInfo, modelIdListInfo, areaInfo, clueInfo, modelInfo)? AjaxResult.success() : AjaxResult.error();
  155. } catch (Exception e){
  156. log.error("保存用户域任务相关信息发生异常", e);
  157. }
  158. return AjaxResult.error(Constants.SERVER_ERROR_MSG);
  159. }
  160. /**
  161. * 增量查询布控任务预警结果数据
  162. * @return
  163. */
  164. @PostMapping("/getCtrlWarningInfo")
  165. public AjaxResult getCtrlWarningInfo(@RequestBody JSONObject reqBody){
  166. try{
  167. return AjaxResult.success(ctrlService.getWarningInfoByInc());
  168. } catch (Exception e){
  169. log.error("增量查询布控任务预警结果数据发生异常", e);
  170. }
  171. return AjaxResult.error(Constants.SERVER_ERROR_MSG);
  172. }
  173. /**
  174. * 保存(用户域)预警接收群组信息
  175. */
  176. @PostMapping("/saveGroupInfo")
  177. public AjaxResult saveGroupInfo(@RequestBody JSONObject reqBody){
  178. JSONArray groupInfoList = reqBody.getJSONArray("groupInfo");
  179. if(groupInfoList.isEmpty()){
  180. return AjaxResult.error(Constants.PARAMS_EMPTY_MSG);
  181. }
  182. try{
  183. return ctrlService.saveGroupInfo(groupInfoList)? AjaxResult.success() : AjaxResult.error();
  184. } catch (Exception e){
  185. log.error("保存预警接收群组信息发生异常", e);
  186. }
  187. return AjaxResult.error(Constants.SERVER_ERROR_MSG);
  188. }
  189. }