From a022ae9804d0c2f402711b6b5202319d853919cf Mon Sep 17 00:00:00 2001
From: cjl <909710561@qq.com>
Date: Fri, 09 Aug 2024 13:38:47 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into cjl
---
screen-api/src/main/java/com/moral/api/service/DustldService.java | 5
screen-job/src/main/resources/mapper/SecondCruiserSortMapper.xml | 22
screen-api/src/main/java/com/moral/api/service/DataDisplayService.java | 2
screen-job/src/main/java/com/moral/api/mapper/SecondCruiserSortMapper.java | 11
screen-job/src/main/java/com/moral/api/entity/SecondCruiserSort.java | 48 +
screen-api/src/main/java/com/moral/api/service/SecondCruiserSortService.java | 7
screen-api/src/main/java/com/moral/api/mapper/SecondCruiserSortMapper.java | 13
screen-job/src/main/java/com/moral/api/controller/PubController.java | 24
screen-job/src/main/java/com/moral/api/service/SysDictTypeService.java | 10
screen-api/src/main/java/com/moral/api/entity/SecondCruiserSort.java | 52 ++
screen-job/src/main/java/com/moral/api/entity/SysDictType.java | 63 ++
screen-job/src/main/java/com/moral/api/service/impl/SysDictTypeServiceImpl.java | 36 +
screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java | 36 +
screen-job/src/main/resources/mapper/SysDictTypeMapper.xml | 23
screen-job/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java | 14
screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java | 44 +
screen-job/src/main/resources/mapper/HistorySecondCruiserMapper.xml | 33 +
screen-job/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java | 203 ++++++++
screen-job/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java | 14
screen-job/src/main/java/com/moral/api/service/impl/SecondCruiserSortServiceImpl.java | 19
screen-job/src/main/java/com/moral/api/entity/SysDictData.java | 65 ++
screen-job/src/main/resources/mapper/ManageCoordinateDetailMapper.xml | 44 +
screen-api/src/main/resources/mapper/DeviceMapper.xml | 3
screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java | 151 +++++
screen-job/src/main/java/com/moral/api/service/HistorySecondCruiserService.java | 18
screen-api/src/main/java/com/moral/api/controller/HeatMapController.java | 5
screen-api/src/main/java/com/moral/api/controller/CruiserController.java | 12
screen-job/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java | 131 +++++
screen-job/src/main/java/com/moral/api/entity/CruiserDTO.java | 62 ++
screen-job/src/main/java/com/moral/api/entity/HistorySecondCruiser.java | 55 ++
screen-api/src/main/resources/mapper/SecondCruiserSortMapper.xml | 20
screen-job/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java | 70 ++
screen-job/src/main/resources/mapper/OrganizationMapper.xml | 19
screen-job/src/main/java/com/moral/api/mapper/SysDictTypeMapper.java | 14
screen-api/src/main/java/com/moral/api/service/impl/SecondCruiserSortServiceImpl.java | 19
screen-job/src/main/java/com/moral/api/entity/ManageCoordinate.java | 76 +++
screen-job/src/main/java/com/moral/api/entity/DustldDTO.java | 24
screen-job/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java | 19
screen-job/src/main/java/com/moral/api/mapper/OrganizationMapper.java | 6
screen-job/src/main/java/com/moral/api/service/SecondCruiserSortService.java | 7
40 files changed, 1,480 insertions(+), 19 deletions(-)
diff --git a/screen-api/src/main/java/com/moral/api/controller/CruiserController.java b/screen-api/src/main/java/com/moral/api/controller/CruiserController.java
index 6f71385..0a5a138 100644
--- a/screen-api/src/main/java/com/moral/api/controller/CruiserController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/CruiserController.java
@@ -8,6 +8,7 @@
import com.deepoove.poi.data.RowRenderData;
import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
import com.moral.api.entity.Dustld;
+import com.moral.api.entity.SecondCruiserSort;
import com.moral.api.exception.BusinessException;
import com.moral.api.pojo.bo.ExcelBO;
import com.moral.api.pojo.dto.historySecondCruiser.HistorySecondCruiserResultDTO;
@@ -23,6 +24,7 @@
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
@@ -290,6 +292,16 @@
}
+ @GetMapping("sort")
+ @ApiOperation("������������")
+ public ResultMessage sectionRanking(@RequestParam @ApiParam(value = "mac",name = "mac���") String mac,
+ @RequestParam @ApiParam(value = "startTime",name = "������������") String startTime,
+ @RequestParam @ApiParam(value = "endTime",name = "������������") String endTime){
+
+ List<SecondCruiserSort> sort = dustldService.sort(mac, startTime, endTime);
+ return ResultMessage.ok(sort);
+ }
+
public static void downloadWord(String fileName, Map<String, Object> params, HttpServletResponse response, String newFileName) {
diff --git a/screen-api/src/main/java/com/moral/api/controller/HeatMapController.java b/screen-api/src/main/java/com/moral/api/controller/HeatMapController.java
index 7ca6485..b4a6da2 100644
--- a/screen-api/src/main/java/com/moral/api/controller/HeatMapController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/HeatMapController.java
@@ -40,8 +40,9 @@
public ResultMessage getHeatMap(@RequestParam @ApiParam(value = "organizationId",name = "������id") Integer id,
@RequestParam @ApiParam(value = "startTime",name = "������������") String startTime,
@RequestParam @ApiParam(value = "type",name= "������������") String type,
- @RequestParam @ApiParam(value = "form",name= "������������") String form){
- List<HeatMapDTO> heatMapData = dataDisplayService.getHeatMapDataV2(id, startTime, type, form);
+ @RequestParam @ApiParam(value = "form",name= "������������") String form,
+ @RequestParam @ApiParam(value = "monitorId",name= "������id") Integer monitorId){
+ List<HeatMapDTO> heatMapData = dataDisplayService.getHeatMapDataV2(id, startTime, type, form,monitorId);
return ResultMessage.ok(ObjectUtils.isEmpty(heatMapData)?"0":heatMapData);
}
@GetMapping("queryTime")
diff --git a/screen-api/src/main/java/com/moral/api/entity/SecondCruiserSort.java b/screen-api/src/main/java/com/moral/api/entity/SecondCruiserSort.java
new file mode 100644
index 0000000..5806675
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/entity/SecondCruiserSort.java
@@ -0,0 +1,52 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName SecondCruiserSort
+ * @date 2024.06.25 15:29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SecondCruiserSort extends Model<SecondCruiserSort> {
+
+ /**
+ * ������������
+ */
+ private String road;
+
+ /**
+ * ������
+ */
+ private Double value;
+
+ /**
+ * mac���
+ */
+ private String mac;
+ /**
+ * ������Id
+ */
+ private Integer organizationId;
+
+ /**
+ * ������
+ */
+ private String time;
+
+ /**
+ * ���������
+ */
+ @TableField(exist = false)
+ private Double avg;
+
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/mapper/SecondCruiserSortMapper.java b/screen-api/src/main/java/com/moral/api/mapper/SecondCruiserSortMapper.java
new file mode 100644
index 0000000..4185a91
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/mapper/SecondCruiserSortMapper.java
@@ -0,0 +1,13 @@
+package com.moral.api.mapper;
+
+import io.lettuce.core.dynamic.annotation.Param;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.moral.api.entity.SecondCruiserSort;
+
+public interface SecondCruiserSortMapper extends BaseMapper<SecondCruiserSort> {
+
+ List<SecondCruiserSort> getSort(@Param("mac") String mac, @Param("startTime") String startTime,@Param("endTime") String endTime);
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java b/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java
index 8276581..a28eedf 100644
--- a/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java
+++ b/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java
@@ -51,5 +51,5 @@
- List<HeatMapDTO> getHeatMapDataV2(Integer id, String startTime, String type, String form);
+ List<HeatMapDTO> getHeatMapDataV2(Integer id, String startTime, String type, String form,Integer monitorId);
}
diff --git a/screen-api/src/main/java/com/moral/api/service/DustldService.java b/screen-api/src/main/java/com/moral/api/service/DustldService.java
index c000340..cbb90cb 100644
--- a/screen-api/src/main/java/com/moral/api/service/DustldService.java
+++ b/screen-api/src/main/java/com/moral/api/service/DustldService.java
@@ -7,6 +7,8 @@
import java.util.Map;
import com.moral.api.entity.Dustld;
+import com.moral.api.entity.SecondCruiserSort;
+
public interface DustldService {
@@ -26,6 +28,7 @@
List<Dustld> selectAll(Map<String, Object> params);
-
+ //������������
+ List<SecondCruiserSort> sort(String mac, String startTime, String endTime);
}
diff --git a/screen-api/src/main/java/com/moral/api/service/SecondCruiserSortService.java b/screen-api/src/main/java/com/moral/api/service/SecondCruiserSortService.java
new file mode 100644
index 0000000..d1cb112
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/SecondCruiserSortService.java
@@ -0,0 +1,7 @@
+package com.moral.api.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.entity.SecondCruiserSort;
+
+public interface SecondCruiserSortService extends IService<SecondCruiserSort> {
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
index 84c58c2..5646116 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
@@ -571,10 +571,11 @@
}
@Override
- public List<HeatMapDTO> getHeatMapDataV2(Integer id, String startTime, String type, String form) {
+ public List<HeatMapDTO> getHeatMapDataV2(Integer id, String startTime, String type, String form,Integer monitorId) {
HashMap<String, Object> map = new HashMap<>();
map.put("start",startTime);
map.put("type","$."+ type);
+ map.put("monitorId",monitorId);
ArrayList<Integer> list = new ArrayList<>();
list.add(id);
ArrayList<HeatMapDTO> rsHeatMap = new ArrayList<>();
@@ -685,7 +686,125 @@
rsHeatMap.add(heatMapDTO);
}
}
- if (id==73){
+
+ if (!ObjectUtils.isEmpty(monitorId)){
+ if (monitorId==117){
+ double lat =33.35001;
+ double lng =120.142939;
+ for (int i = 0; i <24 ; i++) {
+ for (int j = 0; j < 20; j++) {
+ HeatMapDTO heatMapDTO = new HeatMapDTO();
+ heatMapDTO.setCount(0.0);
+ heatMapDTO.setLat(lat);
+ heatMapDTO.setLng(lng);
+ heatMapDTO.setName("1");
+ heatMapDTO.setMac(i+"10"+j);
+ rsHeatMap.add(heatMapDTO);
+ lng=lng+0.0021;
+ if (j==19){
+ lng=120.142939;
+ }
+ }
+ lat =lat-0.0011;
+ }
+ } else if (monitorId==118){
+ double lat =33.375618;
+ double lng =120.14271;
+ for (int i = 0; i <24 ; i++) {
+ for (int j = 0; j < 17; j++) {
+ HeatMapDTO heatMapDTO = new HeatMapDTO();
+ heatMapDTO.setCount(0.0);
+ heatMapDTO.setLat(lat);
+ heatMapDTO.setLng(lng);
+ heatMapDTO.setName("1");
+ heatMapDTO.setMac(i+"10"+j);
+ rsHeatMap.add(heatMapDTO);
+ lng=lng+0.0021;
+ if (j==16){
+ lng=120.14271;
+ }
+ }
+ lat =lat-0.0011;
+ }
+ } else if (monitorId==120){
+ double lat =33.410581;
+ double lng =120.108739;
+ for (int i = 0; i <21 ; i++) {
+ for (int j = 0; j < 15; j++) {
+ HeatMapDTO heatMapDTO = new HeatMapDTO();
+ heatMapDTO.setCount(0.0);
+ heatMapDTO.setLat(lat);
+ heatMapDTO.setLng(lng);
+ heatMapDTO.setName("1");
+ heatMapDTO.setMac(i+"10"+j);
+ rsHeatMap.add(heatMapDTO);
+ lng=lng+0.0021;
+ if (j==14){
+ lng=120.108739;
+ }
+ }
+ lat =lat-0.001;
+ }
+ }else if (monitorId==121){
+ double lat =33.398466;
+ double lng =120.153462;
+ for (int i = 0; i <13 ; i++) {
+ for (int j = 0; j < 16; j++) {
+ HeatMapDTO heatMapDTO = new HeatMapDTO();
+ heatMapDTO.setCount(0.0);
+ heatMapDTO.setLat(lat);
+ heatMapDTO.setLng(lng);
+ heatMapDTO.setName("1");
+ heatMapDTO.setMac(i+"10"+j);
+ rsHeatMap.add(heatMapDTO);
+ lng=lng+0.00085;
+ if (j==15){
+ lng=120.153462;
+ }
+ }
+ lat =lat-0.001;
+ }
+ }else if (monitorId==122){
+ double lat =33.210894;
+ double lng =120.424509;
+ for (int i = 0; i <15 ; i++) {
+ for (int j = 0; j < 9; j++) {
+ HeatMapDTO heatMapDTO = new HeatMapDTO();
+ heatMapDTO.setCount(0.0);
+ heatMapDTO.setLat(lat);
+ heatMapDTO.setLng(lng);
+ heatMapDTO.setName("1");
+ heatMapDTO.setMac(i+"10"+j);
+ rsHeatMap.add(heatMapDTO);
+ lng=lng+0.0021;
+ if (j==8){
+ lng=120.424509;
+ }
+ }
+ lat =lat-0.001;
+ }
+ }else if (monitorId==119){
+ double lat =33.384755;
+ double lng =120.20625;
+ for (int i = 0; i <14 ; i++) {
+ for (int j = 0; j < 12; j++) {
+ HeatMapDTO heatMapDTO = new HeatMapDTO();
+ heatMapDTO.setCount(0.0);
+ heatMapDTO.setLat(lat);
+ heatMapDTO.setLng(lng);
+ heatMapDTO.setName("1");
+ heatMapDTO.setMac(i+"10"+j);
+ rsHeatMap.add(heatMapDTO);
+ lng=lng+0.0021;
+ if (j==11){
+ lng=120.20625;
+ }
+ }
+ lat =lat-0.001;
+ }
+ }
+ }
+ /* if (id==73){
//���������
double lat =33.414538;
double lng =120.066616;
@@ -724,7 +843,7 @@
}
lat1 =lat1-0.0022;
}
- }
+ }*/
return distrinList(rsHeatMap);
}
@@ -743,21 +862,23 @@
ArrayList<Double> doubleArrayList = new ArrayList<>();
ArrayList<GeoCoordinate> geoCoordinates = new ArrayList<>();
List<HeatMapDTO> heatMapDTOS = collect.get(integer);
- for (HeatMapDTO heatMapDTO : heatMapDTOS) {
- GeoCoordinate geoCoordinate = new GeoCoordinate();
- doubleArrayList.add(heatMapDTO.getCount());
+ if (heatMapDTOS.size()>1){
+ for (HeatMapDTO heatMapDTO : heatMapDTOS) {
+ GeoCoordinate geoCoordinate = new GeoCoordinate();
+ doubleArrayList.add(heatMapDTO.getCount());
// heatMapDTO.setCount(heatMapDTO.getCount());
- if (type.equals("a21026")){
- heatMapDTO.setCount(1.0);
- }else {
- heatMapDTO.setCount(0.0);
- }
+ if (type.equals("a21026")){
+ heatMapDTO.setCount(1.0);
+ }else {
+ heatMapDTO.setCount(0.0);
+ }
- geoCoordinate.setLongitude(heatMapDTO.getLng());
- geoCoordinate.setLatitude(heatMapDTO.getLat());
- geoCoordinates.add(geoCoordinate);
+ geoCoordinate.setLongitude(heatMapDTO.getLng());
+ geoCoordinate.setLatitude(heatMapDTO.getLat());
+ geoCoordinates.add(geoCoordinate);
+ }
}
- if (!ObjectUtils.isEmpty(doubleArrayList)){
+ if (!ObjectUtils.isEmpty(doubleArrayList) &&doubleArrayList.size()>1){
HeatMapDTO heatMapDTO = new HeatMapDTO();
//������������������
double asDouble = doubleArrayList.stream().mapToDouble(Double::valueOf).max().getAsDouble();
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java
index 0cbe0c8..be4b23c 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/DustldServiceImpl.java
@@ -1,7 +1,9 @@
package com.moral.api.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.moral.api.config.Interceptor.UserHelper;
+import com.moral.api.entity.SecondCruiserSort;
import com.moral.api.entity.SysDictData;
import com.moral.api.exception.BusinessException;
import com.moral.api.mapper.*;
@@ -51,6 +53,9 @@
@Autowired
private DustldMapper dustldMapper;
+
+ @Autowired
+ private SecondCruiserSortMapper secondCruiserSortMapper;
/**
* ������������������
@@ -459,6 +464,37 @@
return dustlds;
}
+ /**
+ * ������������
+ * @param mac
+ * @param startTime
+ * @param endTime
+ * @return
+ */
+ @Override
+ public List<SecondCruiserSort> sort(String mac, String startTime, String endTime) {
+ SysDictData list = sysDictTypeService.listOne(SysDictTypeEnum.SYS_SECOND_CRUISER.getValue(),"dustld");
+ List<SecondCruiserSort> secondCruiserSorts = secondCruiserSortMapper.getSort(mac, startTime, endTime);
+
+ //���������������
+ if (!ObjectUtils.isEmpty(secondCruiserSorts)){
+ for (SecondCruiserSort secondCruiserSort : secondCruiserSorts) {
+ if(list.getDataValue().contains(",")){
+ List<String> resultStr = Arrays.asList(list.getDataValue().split(","));
+ if(resultStr.size() % 2 ==0){
+// secondCruiserSort.setAvg(numAvg(resultStr,BigDecimal.valueOf(secondCruiserSort.getAvg())).doubleValue());
+ secondCruiserSort.setAvg((double) Math.round(numAvg(resultStr, BigDecimal.valueOf(secondCruiserSort.getAvg())).doubleValue()));
+ }
+ }else {
+ BigDecimal dataValue = Objects.nonNull(list.getDataValue())?BigDecimal.valueOf(Double.parseDouble(list.getDataValue())):BigDecimal.ZERO;
+// secondCruiserSort.setAvg(BigDecimal.valueOf(secondCruiserSort.getAvg()).add(dataValue).doubleValue());
+ secondCruiserSort.setAvg((double) Math.round(BigDecimal.valueOf(secondCruiserSort.getAvg()).add(dataValue).doubleValue()));
+ }
+ }
+ }
+ return secondCruiserSorts;
+ }
+
//������������������
private String getList(String path, List<MultipartFile> files1) {
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/SecondCruiserSortServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/SecondCruiserSortServiceImpl.java
new file mode 100644
index 0000000..1f2ee4f
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/impl/SecondCruiserSortServiceImpl.java
@@ -0,0 +1,19 @@
+package com.moral.api.service.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.entity.SecondCruiserSort;
+import com.moral.api.mapper.SecondCruiserSortMapper;
+import com.moral.api.service.SecondCruiserSortService;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName SecondCruiserSortServiceImpl
+ * @date 2024.06.28 09:14
+ */
+@Service
+public class SecondCruiserSortServiceImpl extends ServiceImpl<SecondCruiserSortMapper, SecondCruiserSort> implements SecondCruiserSortService {
+}
diff --git a/screen-api/src/main/resources/mapper/DeviceMapper.xml b/screen-api/src/main/resources/mapper/DeviceMapper.xml
index 64c99ba..12d7c7b 100644
--- a/screen-api/src/main/resources/mapper/DeviceMapper.xml
+++ b/screen-api/src/main/resources/mapper/DeviceMapper.xml
@@ -251,6 +251,9 @@
FROM
device as d
inner JOIN organization o on o.id = d.organization_id and o.is_delete = 0
+ <if test="monitorId !=null and monitorId !=''">
+ and monitor_point_id =#{monitorId}
+ </if>
<if test="organizationIds != null and organizationIds.size !=0">
and organization_id in
<foreach collection="organizationIds" item="id" index="index" open="(" close=")" separator=",">
diff --git a/screen-api/src/main/resources/mapper/SecondCruiserSortMapper.xml b/screen-api/src/main/resources/mapper/SecondCruiserSortMapper.xml
new file mode 100644
index 0000000..9ec731e
--- /dev/null
+++ b/screen-api/src/main/resources/mapper/SecondCruiserSortMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.moral.api.mapper.SecondCruiserSortMapper">
+
+ <!-- ������������������������ -->
+ <resultMap id="BaseResultMap" type="com.moral.api.entity.SecondCruiserSort">
+ <result column="road" property="road"/>
+ <result column="time" property="time"/>
+ <result column="value" property="value"/>
+ <result column="mac" property="mac"/>
+ <result column="organization_id" property="organizationId"/>
+ </resultMap>
+
+ <select id="getSort" resultType="com.moral.api.entity.SecondCruiserSort">
+ select road,avg(value) as "avg",time,mac from second_cruiser_sort
+ where mac =#{mac} and time BETWEEN #{startTime} and #{endTime} GROUP BY road ORDER BY avg DESC
+
+ </select>
+
+</mapper>
\ No newline at end of file
diff --git a/screen-job/src/main/java/com/moral/api/controller/PubController.java b/screen-job/src/main/java/com/moral/api/controller/PubController.java
index bf074cd..d6fab21 100644
--- a/screen-job/src/main/java/com/moral/api/controller/PubController.java
+++ b/screen-job/src/main/java/com/moral/api/controller/PubController.java
@@ -54,6 +54,12 @@
@Autowired
private DeviceService deviceService;
+ @Autowired
+ private ManageCoordinateDetailService manageCoordinateDetailService;
+
+ @Autowired
+ private HistorySecondCruiserService historySecondCruiserService;
+
private final EmailSpringUtil emailSpringUtil;
private final CityWeatherForecastService cityWeatherForecastService;
@@ -160,6 +166,24 @@
return new ResultMessage();
}
+ @GetMapping("secondCruiserSort")
+ @ApiOperation(value = "���������������", notes = "���������������")
+ public ResultMessage secondCruiserSort() {
+ String startTime ="2024-06-06 00:07:01";
+ String endTime ="2024-06-06 23:07:01";
+ historySecondCruiserService.sort(startTime,endTime);
+ return new ResultMessage();
+ }
+
+ @GetMapping("insertCoordinateDetail")
+ @ApiOperation(value = "������������", notes = "������������")
+ public ResultMessage insertCoordinateDetail() {
+ String startTime ="2024-06-06 00:07:01";
+ String endTime ="2024-06-06 23:07:01";
+ manageCoordinateDetailService.insertCoordinateDetail(startTime,endTime);
+ return new ResultMessage();
+ }
+
public static void main(String[] args) {
String host = "https://pair.market.alicloudapi.com";
diff --git a/screen-job/src/main/java/com/moral/api/entity/CruiserDTO.java b/screen-job/src/main/java/com/moral/api/entity/CruiserDTO.java
new file mode 100644
index 0000000..2c0441d
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/CruiserDTO.java
@@ -0,0 +1,62 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+
+import java.util.Objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName CruiserDTO
+ * @date 2024.06.19 09:15
+ */
+@Data
+public class CruiserDTO {
+
+
+ /**
+ * ������������
+ */
+ private String time;
+
+ /**
+ * ������
+ */
+ @JsonProperty(value = "flylat")
+ private Double flyLat;
+
+ /**
+ * ������
+ */
+ @JsonProperty(value = "flylon")
+ private Double flyLon;
+
+
+ private String data;
+
+
+ private String state;
+
+
+ public CruiserDTO() {
+ this.state = "1"; // ������state������������������1
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ CruiserDTO cruiser = (CruiserDTO) o;
+ //���type���color ������������������������������������true
+ return Objects.equals(flyLat, cruiser.flyLat) &&
+ Objects.equals(flyLon, cruiser.flyLon);
+ }
+ @Override
+ public int hashCode() {
+ return Objects.hash(flyLat, flyLon);
+ }
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/DustldDTO.java b/screen-job/src/main/java/com/moral/api/entity/DustldDTO.java
new file mode 100644
index 0000000..8901680
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/DustldDTO.java
@@ -0,0 +1,24 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName DustldDTO
+ * @date 2024.06.25 14:25
+ */
+@Data
+public class DustldDTO {
+
+
+ private String name;
+ //������
+ private String flyLat;
+ //������
+ private String flyLon;
+
+ //���������
+ private Double data;
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/HistorySecondCruiser.java b/screen-job/src/main/java/com/moral/api/entity/HistorySecondCruiser.java
new file mode 100644
index 0000000..28e9cab
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/HistorySecondCruiser.java
@@ -0,0 +1,55 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName HistorySecondCruiser
+ * @date 2024.06.25 14:33
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class HistorySecondCruiser extends Model<HistorySecondCruiser> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ������mac
+ */
+ private String mac;
+
+ /**
+ * ������������
+ */
+ private Date time;
+
+ /**
+ * ������
+ */
+ private String value;
+
+ /**
+ * ���������������������id
+ */
+ private Integer organizationId;
+
+ /**
+ * ������������
+ */
+ private Date batch;
+
+
+ @Override
+ protected Serializable pkVal() {
+ return null;
+ }
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/ManageCoordinate.java b/screen-job/src/main/java/com/moral/api/entity/ManageCoordinate.java
new file mode 100644
index 0000000..2fedb24
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/ManageCoordinate.java
@@ -0,0 +1,76 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName ManageCoordinate
+ * @date 2024.06.19 09:13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ManageCoordinate extends Model<ManageCoordinate> {
+
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ������id
+ */
+ @TableId(value = "coordinate_id", type = IdType.AUTO)
+ private Integer coordinateId;
+ /**
+ * ������������
+ */
+ private String startPoint;
+ /**
+ * ������������
+ */
+ private String endPoint;
+ /**
+ *������������
+ */
+ private Integer isDel;
+ /**
+ * ������������
+ */
+ private Date createTime;
+ /**
+ * ������������
+ */
+ private Date updateTime;
+
+ /**
+ * ���������id
+ *
+ */
+ private Integer updateUserId;
+ /**
+ * ���������������
+ */
+ private String updayeUserName;
+
+
+ private Integer organizationId;
+
+ /**
+ * ���������������
+ */
+ private String value;
+
+
+ /**
+ * ���������������������
+ */
+ private String bdValue;
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java b/screen-job/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java
new file mode 100644
index 0000000..e85b570
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java
@@ -0,0 +1,70 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName ManageCoordinateDetail
+ * @date 2024.06.19 09:21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ManageCoordinateDetail extends Model<ManageCoordinateDetail> {
+
+ private static final long serialVersionUID = 1L;
+
+
+ /**
+ * ���������id
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * ������id
+ */
+ private Integer coordinateId;
+ /**
+ * ������
+ */
+ private Double longitude;
+ /**
+ *������
+ */
+ private Double latitude;
+ /**
+ * ������������
+ */
+ private Date createTime;
+ /**
+ * ������������
+ */
+ private Date updateTime;
+
+ /**
+ * ���������id
+ *
+ */
+ private Integer updateUserId;
+ /**
+ * ���������������
+ */
+ private String updayeUserName;
+
+
+ private String state;
+
+
+ @TableField(exist = false)
+ private String code;
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/SecondCruiserSort.java b/screen-job/src/main/java/com/moral/api/entity/SecondCruiserSort.java
new file mode 100644
index 0000000..6c962e5
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/SecondCruiserSort.java
@@ -0,0 +1,48 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.moral.util.DateUtils;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName SecondCruiserSort
+ * @date 2024.06.25 15:29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SecondCruiserSort extends Model<SecondCruiserSort> {
+
+ /**
+ * ������������
+ */
+ private String road;
+
+ /**
+ * ������
+ */
+ private Double value;
+
+ /**
+ * mac���
+ */
+ private String mac;
+ /**
+ * ������Id
+ */
+ private Integer organizationId;
+
+ /**
+ * ������
+ */
+ private String time;
+
+
+/* public SecondCruiserSort() {
+ this.time =DateUtils.getDateStringOfDay(-1,"yyyy-MM-dd HH:00:00"); // ������������������������������
+ }*/
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/SysDictData.java b/screen-job/src/main/java/com/moral/api/entity/SysDictData.java
new file mode 100644
index 0000000..99416ef
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/SysDictData.java
@@ -0,0 +1,65 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName SysDictData
+ * @date 2024.06.25 14:01
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysDictData extends Model<SysDictData> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ������
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * ������������Id
+ */
+ private Integer dictTypeId;
+
+ /**
+ * ������������
+ */
+ @TableField("dataKey")
+ private String dataKey;
+
+ /**
+ * ���������
+ */
+ @TableField("dataValue")
+ private String dataValue;
+
+ /**
+ * ������������
+ */
+ private Date createTime;
+
+ /**
+ * ������������
+ */
+ private Date updateTime;
+
+ /**
+ * ������������
+ */
+ private String isDelete;
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/SysDictType.java b/screen-job/src/main/java/com/moral/api/entity/SysDictType.java
new file mode 100644
index 0000000..da85871
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/SysDictType.java
@@ -0,0 +1,63 @@
+package com.moral.api.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName SysDictType
+ * @date 2024.06.25 14:05
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysDictType extends Model<SysDictType> {
+
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ������
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * ������
+ */
+ private String name;
+
+ /**
+ * ������
+ */
+ private String desc;
+
+ /**
+ * ������������ ������������
+ */
+ private Integer system;
+
+ /**
+ * ������������
+ */
+ private Date createTime;
+
+ /**
+ * ������������
+ */
+ private Date updateTime;
+
+ /**
+ * ������������
+ */
+ private String isDelete;
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java
new file mode 100644
index 0000000..2ee281a
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java
@@ -0,0 +1,14 @@
+package com.moral.api.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.moral.api.entity.HistorySecondCruiser;
+
+public interface HistorySecondCruiserMapper extends BaseMapper<HistorySecondCruiser> {
+
+ List<Map<String,Object>> getDusts(Map<String,Object> params);
+
+ List<HistorySecondCruiser> getResult(String startTime,String endTime);
+}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java b/screen-job/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java
new file mode 100644
index 0000000..b0767b6
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java
@@ -0,0 +1,19 @@
+package com.moral.api.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.moral.api.entity.CruiserDTO;
+import com.moral.api.entity.DustldDTO;
+import com.moral.api.entity.ManageCoordinate;
+import com.moral.api.entity.ManageCoordinateDetail;
+
+public interface ManageCoordinateDetailMapper extends BaseMapper<ManageCoordinateDetail> {
+
+ List<ManageCoordinate> selectCoordinate();
+
+ List<CruiserDTO> getCruiserInfo(Map<String,Object> params);
+
+ List<DustldDTO> CompareTo(Integer orgId);
+}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/OrganizationMapper.java b/screen-job/src/main/java/com/moral/api/mapper/OrganizationMapper.java
index f4c72f2..f3c083b 100644
--- a/screen-job/src/main/java/com/moral/api/mapper/OrganizationMapper.java
+++ b/screen-job/src/main/java/com/moral/api/mapper/OrganizationMapper.java
@@ -1,5 +1,9 @@
package com.moral.api.mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
import com.moral.api.entity.Organization;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -13,4 +17,6 @@
*/
public interface OrganizationMapper extends BaseMapper<Organization> {
+ List<Integer> orgIdSpecialDevList(@Param("organizationId") Integer organizationId, @Param("mac") String mac);
+
}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/SecondCruiserSortMapper.java b/screen-job/src/main/java/com/moral/api/mapper/SecondCruiserSortMapper.java
new file mode 100644
index 0000000..375383a
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/mapper/SecondCruiserSortMapper.java
@@ -0,0 +1,11 @@
+package com.moral.api.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.moral.api.entity.SecondCruiserSort;
+
+public interface SecondCruiserSortMapper extends BaseMapper<SecondCruiserSort> {
+
+ void insertAll(List<SecondCruiserSort> list);
+}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/SysDictTypeMapper.java b/screen-job/src/main/java/com/moral/api/mapper/SysDictTypeMapper.java
new file mode 100644
index 0000000..a52b923
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/mapper/SysDictTypeMapper.java
@@ -0,0 +1,14 @@
+package com.moral.api.mapper;
+
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.moral.api.entity.SysDictData;
+import com.moral.api.entity.SysDictType;
+
+public interface SysDictTypeMapper extends BaseMapper<SysDictType> {
+
+ List<SysDictData> selectCodeList(@Param("code") String code, @Param("id") String id);
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/HistorySecondCruiserService.java b/screen-job/src/main/java/com/moral/api/service/HistorySecondCruiserService.java
new file mode 100644
index 0000000..9b13087
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/HistorySecondCruiserService.java
@@ -0,0 +1,18 @@
+package com.moral.api.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.entity.HistorySecondCruiser;
+
+/**
+ * <p>
+ * ��������������������� ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-09-13
+ */
+public interface HistorySecondCruiserService extends IService<HistorySecondCruiser> {
+
+ void sort(String startTime,String endTime);
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java b/screen-job/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java
new file mode 100644
index 0000000..cb3fb2d
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java
@@ -0,0 +1,14 @@
+package com.moral.api.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.entity.ManageCoordinateDetail;
+
+public interface ManageCoordinateDetailService extends IService<ManageCoordinateDetail> {
+
+ /**
+ * ������������������
+ */
+ void insertCoordinateDetail(String startTime,String endTime);
+
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/SecondCruiserSortService.java b/screen-job/src/main/java/com/moral/api/service/SecondCruiserSortService.java
new file mode 100644
index 0000000..d1cb112
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/SecondCruiserSortService.java
@@ -0,0 +1,7 @@
+package com.moral.api.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.entity.SecondCruiserSort;
+
+public interface SecondCruiserSortService extends IService<SecondCruiserSort> {
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/SysDictTypeService.java b/screen-job/src/main/java/com/moral/api/service/SysDictTypeService.java
new file mode 100644
index 0000000..cbe633b
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/SysDictTypeService.java
@@ -0,0 +1,10 @@
+package com.moral.api.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.entity.SysDictData;
+import com.moral.api.entity.SysDictType;
+
+public interface SysDictTypeService extends IService<SysDictType> {
+
+ SysDictData listOne(String code, String dataKey);
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java
new file mode 100644
index 0000000..4813ddb
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java
@@ -0,0 +1,131 @@
+package com.moral.api.service.impl;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.entity.DustldDTO;
+import com.moral.api.entity.HistorySecondCruiser;
+import com.moral.api.entity.SecondCruiserSort;
+import com.moral.api.mapper.HistorySecondCruiserMapper;
+import com.moral.api.mapper.ManageCoordinateDetailMapper;
+import com.moral.api.mapper.OrganizationMapper;
+import com.moral.api.mapper.SecondCruiserSortMapper;
+import com.moral.api.service.HistorySecondCruiserService;
+import com.moral.util.DateUtils;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName HistorySecondCruiserServiceImpl
+ * @date 2024.06.25 14:41
+ */
+@Service
+@Slf4j
+public class HistorySecondCruiserServiceImpl extends ServiceImpl<HistorySecondCruiserMapper, HistorySecondCruiser> implements HistorySecondCruiserService {
+
+ @Autowired
+ private HistorySecondCruiserMapper historySecondCruiserMapper;
+ @Autowired
+ private OrganizationMapper organizationMapper;
+ @Autowired
+ private ManageCoordinateDetailMapper manageCoordinateDetailMapper;
+ @Autowired
+ private SecondCruiserSortMapper secondCruiserSortMapper;
+
+
+ @Override
+ @Transactional
+ public void sort(String startTime, String endTime) {
+
+ if (ObjectUtils.isEmpty(startTime)&&ObjectUtils.isEmpty(endTime)){
+ //������������������������������
+ startTime = DateUtils.getDateStringOfHour(-2, "yyyy-MM-dd HH:00:00");
+
+ //������������������
+ endTime = DateUtils.getCurDate("yyyy-MM-dd HH:00:00");
+ }
+ List<HistorySecondCruiser> result = historySecondCruiserMapper.getResult(startTime, endTime);
+
+ //
+ ArrayList<SecondCruiserSort> list1 = new ArrayList<>();
+ if (!ObjectUtils.isEmpty(result)){
+ for (HistorySecondCruiser historySecondCruiser : result) {
+ String mac = historySecondCruiser.getMac();
+ Integer organizationId = historySecondCruiser.getOrganizationId();
+ List<Integer> orgList = organizationMapper.orgIdSpecialDevList(organizationId, mac);
+ if(CollectionUtils.isEmpty(orgList)){
+ return;
+ }
+
+ HashMap<String, Object> params = new HashMap<>();
+ params.put("mac",mac);
+ params.put("startTime",startTime);
+ params.put("endTime",endTime);
+ List<Map<String, Object>> dusts = historySecondCruiserMapper.getDusts(params);
+ Map<String, List<DustldDTO>> collect = manageCoordinateDetailMapper.CompareTo(orgList.get(0)).stream().collect(Collectors.groupingBy(o -> o.getName()));
+ if (ObjectUtils.isEmpty(dusts) || ObjectUtils.isEmpty(collect)){
+ return;
+ }
+ Set<String> strings = collect.keySet();
+ for (String string : strings) {
+ SecondCruiserSort secondCruiserSort = new SecondCruiserSort();
+ ArrayList<Double> doubleArrayList = new ArrayList<>();
+ List<DustldDTO> dustldDTOS = collect.get(string);
+ for (DustldDTO dustldDTO : dustldDTOS) {
+ String flyLat = dustldDTO.getFlyLat();
+ String flyLon = dustldDTO.getFlyLon();
+ if (flyLon==null && flyLat==null){
+ continue;
+ }
+ double latDouble1 = Double.parseDouble(flyLat);
+ double lonDouble1 = Double.parseDouble(flyLon);
+ for (Map<String, Object> dust : dusts) {
+ String flyLat1 = Objects.nonNull(dust.get("flyLat")) ? dust.get("flyLat").toString() :"0";
+ String flyLon1 = Objects.nonNull(dust.get("flyLon")) ? dust.get("flyLon").toString() :"0";
+ double latDouble = Double.parseDouble(flyLat1);
+ double lonDouble = Double.parseDouble(flyLon1);
+// String flyLon1 = dust.get("flyLon").toString();
+ if (latDouble1==latDouble && lonDouble1==lonDouble){
+ Double dustld = Objects.nonNull(dust.get("dustld"))?Double.parseDouble(dust.get("dustld").toString()):0d;
+ doubleArrayList.add(dustld);
+ break;
+ }
+ }
+ }
+ if (ObjectUtils.isEmpty(doubleArrayList)){
+ continue;
+ }
+ Double ListAva = doubleArrayList.stream() .collect(Collectors.averagingDouble(Double::doubleValue));
+ double rsAvg = new BigDecimal(ListAva).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ secondCruiserSort.setRoad(string);
+ secondCruiserSort.setValue(rsAvg);
+ secondCruiserSort.setMac(mac);
+ secondCruiserSort.setOrganizationId(organizationId);
+ secondCruiserSort.setTime(endTime);
+ list1.add(secondCruiserSort);
+ }
+ }
+ }
+ if (!ObjectUtils.isEmpty(list1)){
+// log.info(list1.size()+"");
+ secondCruiserSortMapper.insertAll(list1);
+ }
+
+ }
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java
new file mode 100644
index 0000000..fb327c3
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java
@@ -0,0 +1,203 @@
+package com.moral.api.service.impl;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.entity.CruiserDTO;
+import com.moral.api.entity.ManageCoordinate;
+import com.moral.api.entity.ManageCoordinateDetail;
+import com.moral.api.mapper.ManageCoordinateDetailMapper;
+import com.moral.api.service.ManageCoordinateDetailService;
+import com.moral.util.DateUtils;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName ManageCoordinateDetailServiceImpl
+ * @date 2024.06.19 09:23
+ */
+@Service
+@Slf4j
+public class ManageCoordinateDetailServiceImpl extends ServiceImpl<ManageCoordinateDetailMapper, ManageCoordinateDetail> implements ManageCoordinateDetailService {
+
+
+ @Autowired
+ private ManageCoordinateDetailMapper manageCoordinateDetailMapper;
+
+
+ @Override
+ @Transactional
+ public void insertCoordinateDetail(String startTime,String endTime) {
+ HashMap<String, Object> params = new HashMap<>();
+
+ if (ObjectUtils.isEmpty(startTime)&&ObjectUtils.isEmpty(endTime)){
+ //������������������������
+ startTime = DateUtils.getDateStringOfDay(-1, DateUtils.yyyy_MM_dd_HH_mm_ss_EN);
+ //������������������
+ endTime = DateUtils.getCurDate(DateUtils.yyyy_MM_dd_HH_mm_ss_EN);
+ }
+ params.put("startTime",startTime);
+ params.put("endTime",endTime);
+
+ //������������������
+ List<ManageCoordinate> coordinates = manageCoordinateDetailMapper.selectCoordinate();
+ //���������������������
+ List<CruiserDTO> cruiserInfo = manageCoordinateDetailMapper.getCruiserInfo(params);
+ cruiserInfo = cruiserInfo.stream().distinct().collect(Collectors.toList());
+ List<ManageCoordinateDetail> result = new ArrayList<>();
+ for (ManageCoordinate coordinate : coordinates) {
+ String value = coordinate.getValue();
+ if (!ObjectUtils.isEmpty(value)){
+ List<Map<String, Object>> parse = (List<Map<String, Object>>) JSONArray.parse(value);
+
+ for (int i = 0; i < cruiserInfo.size(); i++) {
+ CruiserDTO cruiserDTO = cruiserInfo.get(i);
+ if (ObjectUtils.isEmpty(cruiserDTO)){
+ continue;
+ }
+ Double flyLat = cruiserDTO.getFlyLat();
+ Double flyLon = cruiserDTO.getFlyLon();
+ if (ObjectUtils.isEmpty(flyLat)||ObjectUtils.isEmpty(flyLon)){
+ continue;
+ }
+ boolean inPolygon = isInPolygon(flyLon, flyLat, parse);
+ if (inPolygon){
+ LambdaQueryWrapper<ManageCoordinateDetail> wr = new LambdaQueryWrapper<>();
+ wr.eq(ManageCoordinateDetail::getLongitude,flyLon);
+ wr.eq(ManageCoordinateDetail::getLatitude,flyLat);
+ List<ManageCoordinateDetail> manageCoordinateDetails = manageCoordinateDetailMapper.selectList(wr);
+ if (ObjectUtils.isEmpty(manageCoordinateDetails)){
+ ManageCoordinateDetail rsDTO = new ManageCoordinateDetail();
+ rsDTO.setLatitude(flyLat);
+ rsDTO.setLongitude(flyLon);
+ rsDTO.setState("2");
+ rsDTO.setCreateTime(new Date());
+ rsDTO.setUpdateTime(new Date());
+ rsDTO.setCoordinateId(coordinate.getCoordinateId());
+ result.add(rsDTO);
+ cruiserInfo.remove(i);
+ i--;
+ }
+ }
+ }
+
+ }
+ }
+ if(!CollectionUtils.isEmpty(result)){
+ this.saveBatch(result);
+// log.info(result.size()+"");
+ }
+
+ }
+
+
+ /**
+ * ���������������������������������������������
+ * @param
+ * @param mapList ������������
+ * @return
+ */
+ public static boolean isInPolygon(Double X,Double Y,List<Map<String, Object>> mapList){
+
+
+ Point2D.Double point = new Point2D.Double(X, Y);
+ List<Point2D.Double> pointList= new ArrayList<Point2D.Double>();
+
+ for (Map<String, Object> param : mapList) {
+ //������
+ String lat = param.get("lat").toString();
+ //������
+ String lng = param.get("lng").toString();
+ Point2D.Double polygonPoint = new Point2D.Double(Double.parseDouble(lng),Double.parseDouble(lat));
+ pointList.add(polygonPoint);
+ }
+ return IsPtInPoly(point,pointList);
+
+ }
+
+ /**
+ * ������������������������������������������������������������������������������������������������������������������������true
+ * @param point ���������
+ * @param pts ������������������
+ * @return ������������������������true,������������false
+ */
+ public static boolean IsPtInPoly(Point2D.Double point, List<Point2D.Double> pts){
+
+ int N = pts.size();
+ boolean boundOrVertex = true; //���������������������������������������������������������������������������������������true
+ int intersectCount = 0;//cross points count of x
+ double precision = 2e-10; //���������������������������0���������������������
+ Point2D.Double p1, p2;//neighbour bound vertices
+ Point2D.Double p = point; //���������
+
+ p1 = pts.get(0);//left vertex
+ for(int i = 1; i <= N; ++i){//check all rays
+ if(p.equals(p1)){
+ return boundOrVertex;//p is an vertex
+ }
+
+ p2 = pts.get(i % N);
+ if(p.x < Math.min(p1.x, p2.x) || p.x > Math.max(p1.x, p2.x)){
+ p1 = p2;
+ continue;
+ }
+
+ if(p.x > Math.min(p1.x, p2.x) && p.x < Math.max(p1.x, p2.x)){
+ if(p.y <= Math.max(p1.y, p2.y)){
+ if(p1.x == p2.x && p.y >= Math.min(p1.y, p2.y)){
+ return boundOrVertex;
+ }
+
+ if(p1.y == p2.y){
+ if(p1.y == p.y){
+ return boundOrVertex;
+ }else{//before ray
+ ++intersectCount;
+ }
+ }else{
+ double xinters = (p.x - p1.x) * (p2.y - p1.y) / (p2.x - p1.x) + p1.y;
+ if(Math.abs(p.y - xinters) < precision){
+ return boundOrVertex;
+ }
+
+ if(p.y < xinters){
+ ++intersectCount;
+ }
+ }
+ }
+ }else{
+ if(p.x == p2.x && p.y <= p2.y){
+ Point2D.Double p3 = pts.get((i+1) % N);
+ if(p.x >= Math.min(p1.x, p3.x) && p.x <= Math.max(p1.x, p3.x)){
+ ++intersectCount;
+ }else{
+ intersectCount += 2;
+ }
+ }
+ }
+ p1 = p2;
+ }
+
+ if(intersectCount % 2 == 0){//���������������������
+ return false;
+ } else { //���������������������
+ return true;
+ }
+ }
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/SecondCruiserSortServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/SecondCruiserSortServiceImpl.java
new file mode 100644
index 0000000..5f0b463
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/impl/SecondCruiserSortServiceImpl.java
@@ -0,0 +1,19 @@
+package com.moral.api.service.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.entity.SecondCruiserSort;
+import com.moral.api.mapper.SecondCruiserSortMapper;
+import com.moral.api.service.SecondCruiserSortService;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName SecondCruiserSortServiceImpl
+ * @date 2024.06.26 14:29
+ */
+@Service
+public class SecondCruiserSortServiceImpl extends ServiceImpl<SecondCruiserSortMapper, SecondCruiserSort> implements SecondCruiserSortService {
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/SysDictTypeServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/SysDictTypeServiceImpl.java
new file mode 100644
index 0000000..47bce0d
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/impl/SysDictTypeServiceImpl.java
@@ -0,0 +1,36 @@
+package com.moral.api.service.impl;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.entity.SysDictData;
+import com.moral.api.entity.SysDictType;
+import com.moral.api.mapper.SysDictTypeMapper;
+import com.moral.api.service.SysDictTypeService;
+
+/**
+ * Description //todo
+ *
+ * @author swb
+ * @ClassName SysDictTypeServiceImpl
+ * @date 2024.06.25 14:10
+ */
+@Service
+public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements SysDictTypeService {
+
+
+ @Override
+ public SysDictData listOne(String code, String dataKey) {
+ List<SysDictData> list = this.baseMapper.selectCodeList(code,dataKey);
+ SysDictData sysDictData = new SysDictData();
+ if (CollectionUtils.isNotEmpty(list)) {
+ return list.get(0);
+ }
+ sysDictData.setDataValue("0");
+ return sysDictData;
+
+ }
+}
diff --git a/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
index 05cbeb5..c4a6323 100644
--- a/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
+++ b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
@@ -7,7 +7,10 @@
import com.moral.api.service.HistoryFiveMinutelyService;
import com.moral.api.service.HistoryHourlyService;
import com.moral.api.service.HistoryMonthlyService;
+import com.moral.api.service.HistorySecondCruiserService;
import com.moral.api.service.HistoryWeeklyService;
+import com.moral.api.service.ManageCoordinateDetailService;
+import com.moral.api.service.impl.HistorySecondCruiserServiceImpl;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
@@ -32,6 +35,14 @@
@Autowired
private HistoryMonthlyService historyMonthlyService;
+
+
+ @Autowired
+ private ManageCoordinateDetailService manageCoordinateDetailService;
+
+
+ @Autowired
+ private HistorySecondCruiserService historySecondCruiserService;
//5������������������
@XxlJob("insertHistoryFiveMinutely")
@@ -143,4 +154,37 @@
}
+ /**
+ * ������������������
+ * @return
+ */
+ @XxlJob("manageCoordinateDetail")
+ public ReturnT manageCoordinateDetail(){
+ try {
+ manageCoordinateDetailService.insertCoordinateDetail(null,null);
+ } catch (Exception e) {
+ XxlJobHelper.log(e.getMessage());
+ return new ReturnT(ReturnT.FAIL_CODE, e.getMessage());
+ }
+ return ReturnT.SUCCESS;
+
+ }
+
+
+ /**
+ * ���������������������
+ * @return
+ */
+ @XxlJob("secondCruiserSort")
+ public ReturnT secondCruiserSort(){
+ try {
+ historySecondCruiserService.sort(null,null);
+ } catch (Exception e) {
+ XxlJobHelper.log(e.getMessage());
+ return new ReturnT(ReturnT.FAIL_CODE, e.getMessage());
+ }
+ return ReturnT.SUCCESS;
+
+ }
+
}
diff --git a/screen-job/src/main/resources/mapper/HistorySecondCruiserMapper.xml b/screen-job/src/main/resources/mapper/HistorySecondCruiserMapper.xml
new file mode 100644
index 0000000..851ed0d
--- /dev/null
+++ b/screen-job/src/main/resources/mapper/HistorySecondCruiserMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.moral.api.mapper.HistorySecondCruiserMapper">
+
+ <!-- ������������������������ -->
+ <resultMap id="BaseResultMap" type="com.moral.api.entity.HistorySecondCruiser">
+ <result column="mac" property="mac"/>
+ <result column="time" property="time"/>
+ <result column="value" property="value"/>
+ <result column="organization_id" property="organizationId"/>
+ <result column="batch" property="batch"/>
+ </resultMap>
+
+
+ <select id="getDusts" resultType="java.util.Map">
+ SELECT
+ value ->>'$.flylat' as flyLat,value ->>'$.flylon' as flyLon,value ->>'$.dustld' as dustld,
+ `time`
+ FROM `history_second_cruiser`
+ WHERE mac = #{mac}
+ AND `time` <![CDATA[>=]]> #{startTime}
+ AND `time` <![CDATA[<]]> #{endTime}
+ </select>
+
+ <select id="getResult" resultType="com.moral.api.entity.HistorySecondCruiser">
+ SELECT
+ distinct mac,organization_id
+ FROM `history_second_cruiser`
+ WHERE
+ `time` <![CDATA[>=]]> #{startTime}
+ AND `time` <![CDATA[<=]]> #{endTime}
+ </select>
+</mapper>
\ No newline at end of file
diff --git a/screen-job/src/main/resources/mapper/ManageCoordinateDetailMapper.xml b/screen-job/src/main/resources/mapper/ManageCoordinateDetailMapper.xml
new file mode 100644
index 0000000..a605f40
--- /dev/null
+++ b/screen-job/src/main/resources/mapper/ManageCoordinateDetailMapper.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.moral.api.mapper.ManageCoordinateDetailMapper">
+
+ <!-- ������������������������ -->
+ <resultMap id="BaseResultMap" type="com.moral.api.entity.ManageCoordinateDetail">
+ <id column="id" property="id" />
+ <result column="coordinate_id" property="coordinateId" />
+ <result column="longitude" property="longitude" />
+ <result column="latitude" property="latitude" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_user_id" property="updateUserId" />
+ <result column="updaye_user_name" property="updayeUserName" />
+ </resultMap>
+
+
+ <select id="selectCoordinate" resultType="com.moral.api.entity.ManageCoordinate">
+ SELECT * FROM manage_coordinate WHERE is_del =0
+ </select>
+
+ <select id="getCruiserInfo" resultType="com.moral.api.entity.CruiserDTO">
+ select DATE_FORMAT(`time`, #{dateFormat}) AS time,value ->>'$.flylat' as flyLat,value ->>'$.flylon' as flyLon
+ from history_second_cruiser
+ WHERE
+ `time` <![CDATA[>=]]> #{startTime}
+ AND `time` <![CDATA[<=]]> #{endTime}
+ order by time
+ </select>
+
+ <select id="CompareTo" resultType="com.moral.api.entity.DustldDTO">
+ SELECT
+ mc.start_point as name ,
+ md.longitude as flyLon,
+ md.latitude as flyLat
+ FROM
+ manage_coordinate AS mc
+ LEFT JOIN manage_coordinate_detail AS md ON mc.coordinate_id = md.coordinate_id
+ WHERE
+ mc.is_del =0
+ and mc.organization_id=#{orgId}
+ </select>
+
+</mapper>
\ No newline at end of file
diff --git a/screen-job/src/main/resources/mapper/OrganizationMapper.xml b/screen-job/src/main/resources/mapper/OrganizationMapper.xml
index 7dca616..39f2333 100644
--- a/screen-job/src/main/resources/mapper/OrganizationMapper.xml
+++ b/screen-job/src/main/resources/mapper/OrganizationMapper.xml
@@ -26,4 +26,23 @@
<result column="is_delete" property="isDelete" />
</resultMap>
+ <select id="orgIdSpecialDevList" resultType="java.lang.Integer">
+ select organization_id from special_device where organization_id in (
+ SELECT id FROM (
+ SELECT id, parent_id, name FROM organization WHERE id = #{organizationId}
+ UNION ALL
+ SELECT i.id, i.parent_id, i.name
+ FROM organization i
+ INNER JOIN (
+ SELECT * FROM (
+ SELECT id, parent_id, name FROM organization WHERE id = #{organizationId}
+ UNION ALL
+ SELECT id, parent_id, name FROM organization WHERE parent_id = #{organizationId}
+ ) t1
+ ) t2 ON i.parent_id = t2.id
+ where i.is_delete = 0
+ ) t3 ) and mac = #{mac} and is_delete = 0
+
+
+ </select>
</mapper>
\ No newline at end of file
diff --git a/screen-job/src/main/resources/mapper/SecondCruiserSortMapper.xml b/screen-job/src/main/resources/mapper/SecondCruiserSortMapper.xml
new file mode 100644
index 0000000..c8e561e
--- /dev/null
+++ b/screen-job/src/main/resources/mapper/SecondCruiserSortMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.moral.api.mapper.SecondCruiserSortMapper">
+
+ <!-- ������������������������ -->
+ <resultMap id="BaseResultMap" type="com.moral.api.entity.SecondCruiserSort">
+ <result column="road" property="road"/>
+ <result column="time" property="time"/>
+ <result column="value" property="value"/>
+ <result column="mac" property="mac"/>
+ <result column="organization_id" property="organizationId"/>
+ </resultMap>
+
+ <insert id="insertAll">
+ INSERT INTO second_cruiser_sort (road,time,value,mac,organization_id)
+ VALUES
+ <foreach collection="list" item="item" separator=",">
+ (#{item.road},#{item.time},#{item.value},#{item.mac},#{item.organizationId})
+ </foreach>
+ </insert>
+
+</mapper>
\ No newline at end of file
diff --git a/screen-job/src/main/resources/mapper/SysDictTypeMapper.xml b/screen-job/src/main/resources/mapper/SysDictTypeMapper.xml
new file mode 100644
index 0000000..54cc75b
--- /dev/null
+++ b/screen-job/src/main/resources/mapper/SysDictTypeMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.moral.api.mapper.SysDictTypeMapper">
+
+ <!-- ������������������������ -->
+ <resultMap id="BaseResultMap" type="com.moral.api.entity.SysDictType">
+ <id column="id" property="id" />
+ <result column="name" property="name" />
+ <result column="desc" property="desc" />
+ <result column="system" property="system" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ <result column="is_delete" property="isDelete" />
+ </resultMap>
+ <select id="selectCodeList" resultType="com.moral.api.entity.SysDictData">
+ select t1.id,t1.dict_type_id,t1.dataKey,t1.dataValue from sys_dict_type t
+ left join sys_dict_data t1 on t1.dict_type_id = t.id
+ where t.is_delete = 0 and t.name = #{code} and t1.dataKey = #{id} and t1.is_delete = 0
+ order by t1.create_time desc
+ </select>
+
+
+</mapper>
\ No newline at end of file
--
Gitblit v1.8.0