So2Controller.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. package com.ruoyi.web.controller.gas;
  2. import cn.hutool.core.convert.Convert;
  3. import cn.hutool.core.date.DateUtil;
  4. import cn.hutool.core.util.NumberUtil;
  5. import cn.hutool.core.util.ObjectUtil;
  6. import cn.hutool.core.util.StrUtil;
  7. import com.ruoyi.common.constant.CacheConstants;
  8. import com.ruoyi.common.constant.ElasticConstants;
  9. import com.ruoyi.common.constant.HttpStatus;
  10. import com.ruoyi.common.core.controller.BaseController;
  11. import com.ruoyi.common.core.domain.AjaxResult;
  12. import com.ruoyi.common.core.domain.entity.SysDictData;
  13. import com.ruoyi.common.core.page.PageDomain;
  14. import com.ruoyi.common.core.page.TableDataInfo;
  15. import com.ruoyi.common.core.page.TableSupport;
  16. import com.ruoyi.common.core.redis.RedisCache;
  17. import com.ruoyi.common.enums.AggsType;
  18. import com.ruoyi.framework.config.ElasticSearchClient;
  19. import com.ruoyi.system.domain.GuapMonitorPoint;
  20. import com.ruoyi.system.domain.IllegalShip;
  21. import com.ruoyi.system.domain.XiuTanSemInstrument;
  22. import com.ruoyi.system.service.IAisDatabase;
  23. import com.ruoyi.system.service.IHeiYanService;
  24. import com.ruoyi.system.service.ISo2Service;
  25. import com.ruoyi.system.service.ISysDictTypeService;
  26. import io.swagger.annotations.Api;
  27. import io.swagger.annotations.ApiOperation;
  28. import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.web.bind.annotation.GetMapping;
  31. import org.springframework.web.bind.annotation.RequestMapping;
  32. import org.springframework.web.bind.annotation.RequestParam;
  33. import org.springframework.web.bind.annotation.RestController;
  34. import java.util.ArrayList;
  35. import java.util.Date;
  36. import java.util.HashMap;
  37. import java.util.List;
  38. import java.util.Map;
  39. /**
  40. * @Description: 硫含量
  41. * @Author: huangcheng
  42. * @Date: 2021/8/26
  43. * @Version V1.0
  44. */
  45. @RestController
  46. @RequestMapping("/so2")
  47. @Api(tags = "硫含量接口")
  48. public class So2Controller extends BaseController {
  49. @Autowired
  50. private ElasticSearchClient client;
  51. @Autowired
  52. private IAisDatabase aisDatabase;
  53. @Autowired
  54. private ISo2Service so2Service;
  55. @Autowired
  56. private IHeiYanService heiYanService;
  57. @Autowired
  58. private RedisCache redisCache;
  59. @Autowired
  60. private ISysDictTypeService dictTypeService;
  61. @GetMapping("/list")
  62. @ApiOperation("硫嫌疑船舶列表数据")
  63. public TableDataInfo list(IllegalShip illegalShip) {
  64. // 传来的参数
  65. Map<String, Object> params = illegalShip.getParams();
  66. Map<String, Object> equalsCondition = new HashMap<>();
  67. // 组装查询条件
  68. equalsCondition.put("mmsi", StrUtil.isBlank(illegalShip.getMmsi()) ? null : StrUtil.concat(true, "*", illegalShip.getMmsi(), "*"));
  69. equalsCondition.put("shipName", StrUtil.isBlank(illegalShip.getShipName()) ? null : StrUtil.concat(true, "*", illegalShip.getShipName(), "*"));
  70. equalsCondition.put("shipRegionType", illegalShip.getShipRegionType());
  71. equalsCondition.put("destination", StrUtil.isBlank(illegalShip.getDestination()) ? null : StrUtil.concat(true, "*", illegalShip.getDestination(), "*"));
  72. equalsCondition.put("orgName", illegalShip.getOrgName());
  73. equalsCondition.put("illegalStatus", illegalShip.getIllegalStatus());
  74. equalsCondition.put("dealResult", illegalShip.getDealResult());
  75. equalsCondition.put("fastResult", illegalShip.getFastResult());
  76. equalsCondition.put("uploadResult", illegalShip.getUploadResult());
  77. equalsCondition.put("illegalType", illegalShip.getIllegalType());
  78. equalsCondition.put("monitorPointName", illegalShip.getMonitorPointName());
  79. if (StrUtil.isNotBlank(illegalShip.getFilterMmsi()) && StrUtil.isBlank(illegalShip.getMmsi())) {
  80. equalsCondition.put("mmsi", illegalShip.getFilterMmsi());
  81. }
  82. // 组装范围查询条件
  83. Map<String, Object> rangeCondition = new HashMap<>();
  84. if (ObjectUtil.isNotEmpty(params.get("beginTime"))) {
  85. params.put("beginTime", params.get("beginTime") + " 00:00:00");
  86. }
  87. if (ObjectUtil.isNotEmpty(params.get("endTime"))) {
  88. params.put("endTime", params.get("endTime") + " 23:59:59");
  89. }
  90. rangeCondition.put("createTime", StrUtil.concat(true, "[", Convert.toStr(params.get("beginTime")), ",", Convert.toStr(params.get("endTime")), "]"));
  91. List<String> orderBy = new ArrayList<>();
  92. orderBy.add("-createTime");
  93. PageDomain pageDomain = TableSupport.buildPageRequest();
  94. Map<String, Object> maps = client.searchDocument(equalsCondition, rangeCondition, orderBy, pageDomain.getPageNum(), pageDomain.getPageSize(), ElasticConstants.SO2_ALERT, ElasticConstants.AIS_ILLEGAL_SHIP);
  95. TableDataInfo rspData = new TableDataInfo();
  96. rspData.setCode(HttpStatus.SUCCESS);
  97. rspData.setMsg("查询成功");
  98. rspData.setRows(Convert.toList(IllegalShip.class, maps.get("pageList")));
  99. rspData.setTotal(Convert.toLong(maps.get("totalNum")));
  100. return rspData;
  101. }
  102. @GetMapping("/guangpu/monitorPoint")
  103. @ApiOperation("光谱-检测点数据")
  104. public AjaxResult monitorPoint(GuapMonitorPoint monitorPoint) {
  105. // 传来的参数
  106. Map<String, Object> equalsCondition = new HashMap<>();
  107. // 组装查询条件
  108. equalsCondition.put("name", StrUtil.isBlank(monitorPoint.getName()) ? null : StrUtil.concat(true, "*", monitorPoint.getName(), "*"));
  109. Map<String, Object> maps = client.searchDocument(equalsCondition, null, null, 1, 10000, ElasticConstants.SO2_MONITOR_POINT);
  110. return AjaxResult.success(Convert.toList(GuapMonitorPoint.class, maps.get("pageList")));
  111. }
  112. @GetMapping("/xiutan/semInstrument")
  113. @ApiOperation("嗅探-设备数据")
  114. public AjaxResult semInstrument(XiuTanSemInstrument semInstrument) {
  115. // 传来的参数
  116. Map<String, Object> equalsCondition = new HashMap<>();
  117. // 组装查询条件
  118. equalsCondition.put("name", StrUtil.isBlank(semInstrument.getName()) ? null : StrUtil.concat(true, "*", semInstrument.getName(), "*"));
  119. Map<String, Object> maps = client.searchDocument(equalsCondition, null, null, 1, 10000, ElasticConstants.AIS_SEM_INSTRUMENT);
  120. return AjaxResult.success(Convert.toList(XiuTanSemInstrument.class, maps.get("pageList")));
  121. }
  122. @GetMapping("/static/device")
  123. @ApiOperation("设备安装位置统计")
  124. public AjaxResult deviceStatic() {
  125. if (redisCache.hasKey(CacheConstants.DEVICE_STATIC)) {
  126. return AjaxResult.success(redisCache.getCacheMap(CacheConstants.DEVICE_STATIC));
  127. }
  128. List<Map<String, Object>> aisDevice = aisDatabase.queryDeviceStatic();
  129. List<Map<String, Object>> so2Device = so2Service.queryDeviceStatic();
  130. List<Map<String, Object>> heiyanDevice = heiYanService.queryDeviceStatic();
  131. // 两个结果合并
  132. Map<String, Integer> result = new HashMap<>(8);
  133. for (Map<String, Object> stringIntegerMap : aisDevice) {
  134. result.put(Convert.toStr(stringIntegerMap.get("point")), Convert.toInt(stringIntegerMap.get("count")));
  135. }
  136. for (Map<String, Object> stringIntegerMap : so2Device) {
  137. result.put(Convert.toStr(stringIntegerMap.get("point")), Convert.toInt(NumberUtil.add(result.get(Convert.toStr(stringIntegerMap.get("point"))), Convert.toInt(stringIntegerMap.get("count")))));
  138. }
  139. for (Map<String, Object> stringObjectMap : heiyanDevice) {
  140. result.put(Convert.toStr(stringObjectMap.get("point")), Convert.toInt(NumberUtil.add(result.get(Convert.toStr(stringObjectMap.get("point"))), Convert.toInt(stringObjectMap.get("count")))));
  141. }
  142. redisCache.setCacheMap(CacheConstants.DEVICE_STATIC, result);
  143. return AjaxResult.success(result);
  144. }
  145. @GetMapping("/static/deviceType")
  146. @ApiOperation("设备类型统计")
  147. public AjaxResult deviceTypeStatic() {
  148. if (redisCache.hasKey(CacheConstants.DEVICE_TYPE_STATIC)) {
  149. return AjaxResult.success(redisCache.getCacheMap(CacheConstants.DEVICE_TYPE_STATIC));
  150. }
  151. int aisDevice = aisDatabase.queryDeviceCount();
  152. int so2Device = so2Service.queryDeviceCount();
  153. int heiyanDevice = heiYanService.queryDeviceCount();
  154. // 两个结果合并
  155. Map<String, Integer> result = new HashMap<>(4);
  156. result.put("光谱", so2Device);
  157. result.put("嗅探", aisDevice);
  158. result.put("黑烟", heiyanDevice);
  159. redisCache.setCacheMap(CacheConstants.DEVICE_TYPE_STATIC, result);
  160. return AjaxResult.success(result);
  161. }
  162. @GetMapping("/snapPos/static")
  163. @ApiOperation("硫含量超标船舶分布统计")
  164. public AjaxResult so2SnapPosStatic(@RequestParam(required = false) String month) {
  165. String beginTime = "";
  166. String endTime = "";
  167. if (StrUtil.isBlank(month)) {
  168. beginTime = DateUtil.formatDate(DateUtil.beginOfMonth(new Date())) + " 00:00:00";
  169. endTime = DateUtil.formatDate(DateUtil.endOfMonth(new Date())) + " 23:59:59";
  170. } else {
  171. beginTime = month + "-01 00:00:00";
  172. endTime = DateUtil.formatDate(DateUtil.endOfMonth(DateUtil.parseDate(beginTime))) + " 23:59:59";
  173. }
  174. Map<String, Object> equalsCondition = new HashMap<>();
  175. equalsCondition.put("illegalStatus", 2);
  176. Map<String, Object> so2RangeCondition = new HashMap<>();
  177. so2RangeCondition.put("createTime", StrUtil.concat(true, "[", beginTime, ",", endTime, "]"));
  178. Map<Object, Object> so2Aggs = client.aggs(AggsType.count, "monitorPointName", "id", equalsCondition, so2RangeCondition, ElasticConstants.AIS_ILLEGAL_SHIP, ElasticConstants.SO2_ALERT);
  179. // 构造硫的数据
  180. List<SysDictData> so2_snap_pos = dictTypeService.selectDictDataByType("so2_snap_pos");
  181. Map<String, Object> result = new HashMap<>();
  182. for (SysDictData so2_snap_po : so2_snap_pos) {
  183. result.put(so2_snap_po.getDictLabel(),
  184. (ObjectUtil.isEmpty(so2Aggs.get(so2_snap_po.getDictLabel())) ? 0 : Convert.toInt(so2Aggs.get(so2_snap_po.getDictLabel()))));
  185. }
  186. return AjaxResult.success(result);
  187. }
  188. @GetMapping("/timeStatic")
  189. @ApiOperation("超标船舶统计-按时间")
  190. public AjaxResult monthStatic(@RequestParam(required = false) String interval, @RequestParam(required = false) String startMonth, @RequestParam(required = false) String endMonth) {
  191. if (StrUtil.isBlank(interval)) {
  192. // 默认值为1个月
  193. interval = "1M";
  194. }
  195. Map<String, Object> rangeCondition = new HashMap<>();
  196. if (!StrUtil.isAllBlank(startMonth, endMonth)) {
  197. if (StrUtil.isNotBlank(startMonth)) {
  198. startMonth = startMonth + "-01 00:00:00";
  199. }
  200. if (StrUtil.isNotBlank(endMonth)) {
  201. endMonth = DateUtil.formatDate(DateUtil.endOfMonth(DateUtil.parseDate(endMonth + "-01 00:00:00"))) + " 23:59:59";
  202. }
  203. rangeCondition.put("createTime", StrUtil.concat(true, "[", startMonth, ",", endMonth, "]"));
  204. }
  205. Map<String, Object> equalsCondition = new HashMap<>();
  206. equalsCondition.put("illegalStatus", 2);
  207. Map<Object, Object> aisAggs = client.dateHistogramAggs(AggsType.count, "createTime", "id", equalsCondition, rangeCondition, new DateHistogramInterval(interval), ElasticConstants.AIS_ILLEGAL_SHIP);
  208. Map<Object, Object> so2Aggs = client.dateHistogramAggs(AggsType.count, "createTime", "id", equalsCondition, rangeCondition, new DateHistogramInterval(interval), ElasticConstants.SO2_ALERT);
  209. equalsCondition.put("illegalStatus", 3);
  210. Map<Object, Object> heiyanAggs = client.dateHistogramAggs(AggsType.count, "createTime", "id", equalsCondition, rangeCondition, new DateHistogramInterval(interval), ElasticConstants.HEIYAN_SHIP_RECOGNITION);
  211. Map<String, Map<Object, Object>> result = new HashMap<>();
  212. result.put("ais", aisAggs);
  213. result.put("so2", so2Aggs);
  214. result.put("black", heiyanAggs);
  215. return AjaxResult.success(result);
  216. }
  217. @GetMapping("/third/timeStatic")
  218. @ApiOperation("for-Third-超标船舶统计-按时间")
  219. public AjaxResult thirdMonthStatic(@RequestParam(required = false) String interval, @RequestParam(required = false) String startMonth, @RequestParam(required = false) String endMonth) {
  220. if (StrUtil.isBlank(interval)) {
  221. // 默认值为1个月
  222. interval = "1M";
  223. }
  224. Map<String, Object> rangeCondition = new HashMap<>();
  225. if (!StrUtil.isAllBlank(startMonth, endMonth)) {
  226. if (StrUtil.isNotBlank(startMonth)) {
  227. startMonth = startMonth + "-01 00:00:00";
  228. }
  229. if (StrUtil.isNotBlank(endMonth)) {
  230. endMonth = DateUtil.formatDate(DateUtil.endOfMonth(DateUtil.parseDate(endMonth + "-01 00:00:00"))) + " 23:59:59";
  231. }
  232. rangeCondition.put("createTime", StrUtil.concat(true, "[", startMonth, ",", endMonth, "]"));
  233. }
  234. Map<String, Object> equalsCondition = new HashMap<>();
  235. equalsCondition.put("illegalStatus", 2);
  236. Map<Object, Object> so2Aggs = client.dateHistogramAggs(AggsType.count, "createTime", "id", equalsCondition, rangeCondition, new DateHistogramInterval(interval), ElasticConstants.SO2_ALERT, ElasticConstants.AIS_ILLEGAL_SHIP);
  237. equalsCondition.put("illegalStatus", 3);
  238. Map<Object, Object> heiyanAggs = client.dateHistogramAggs(AggsType.count, "createTime", "id", equalsCondition, rangeCondition, new DateHistogramInterval(interval), ElasticConstants.HEIYAN_SHIP_RECOGNITION);
  239. Map<String, Map<Object, Object>> result = new HashMap<>();
  240. result.put("so2", so2Aggs);
  241. result.put("black", heiyanAggs);
  242. return AjaxResult.success(result);
  243. }
  244. }