From ff3af3a0dd0fe87a500c13e933bea1f553083508 Mon Sep 17 00:00:00 2001
From: cjl <276999030@qq.com>
Date: Thu, 21 Sep 2023 10:47:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/cjl' into qa

---
 screen-api/src/main/java/com/moral/api/utils/JsonUtils.java                            |  151 +++++++
 screen-api/src/main/java/com/moral/api/pojo/enums/InvestigationEnum.java               |   60 +++
 screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java   |   43 ++
 screen-api/src/main/java/com/moral/api/service/impl/ProfessionServiceImpl.java         |   15 
 screen-api/src/main/java/com/moral/api/pojo/enums/ChangeEnum.java                      |   59 ++
 screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java          |    7 
 screen-api/src/main/java/com/moral/api/controller/DictController.java                  |   39 +
 screen-api/src/main/java/com/moral/api/pojo/vo/DictionaryVo.java                       |   66 +++
 screen-manage/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java |   55 ++
 screen-api/src/main/java/com/moral/api/utils/BeanConverts.java                         |  340 +++++++++++++++++
 screen-manage/src/main/java/com/moral/api/util/CacheUtils.java                         |   20 
 screen-manage/src/main/java/com/moral/api/mapper/DeviceMapper.java                     |    5 
 screen-api/pom.xml                                                                     |    5 
 screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java            |    2 
 screen-manage/src/main/java/com/moral/api/service/GovMonitorPointService.java          |    2 
 screen-api/src/main/java/com/moral/api/pojo/enums/YesOrNo.java                         |   57 ++
 screen-manage/src/main/resources/mapper/DeviceMapper.xml                               |    5 
 screen-api/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java     |   19 
 screen-api/src/main/java/com/moral/api/pojo/enums/AllocationApproveEnum.java           |   71 +++
 screen-api/src/main/java/com/moral/api/controller/UAVController.java                   |   12 
 screen-api/src/main/java/com/moral/api/pojo/enums/StateEnum.java                       |   57 ++
 screen-manage/src/main/java/com/moral/api/controller/GovMonitorPoionController.java    |   15 
 screen-api/src/main/java/com/moral/api/pojo/enums/IntegerValueEnum.java                |   18 
 screen-api/src/main/java/com/moral/api/pojo/enums/StringValueEnum.java                 |   18 
 24 files changed, 1,099 insertions(+), 42 deletions(-)

diff --git a/screen-api/pom.xml b/screen-api/pom.xml
index 5dcd631..4c48cc5 100644
--- a/screen-api/pom.xml
+++ b/screen-api/pom.xml
@@ -73,6 +73,11 @@
             <version>1.5.1</version>
         </dependency>
 
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.3.0</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/screen-api/src/main/java/com/moral/api/controller/DictController.java b/screen-api/src/main/java/com/moral/api/controller/DictController.java
new file mode 100644
index 0000000..11051dd
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/controller/DictController.java
@@ -0,0 +1,39 @@
+package com.moral.api.controller;
+
+import com.moral.api.entity.CityConfigAqi;
+import com.moral.api.pojo.enums.ChangeEnum;
+import com.moral.api.pojo.enums.InvestigationEnum;
+import com.moral.api.pojo.enums.StateEnum;
+import com.moral.api.pojo.enums.YesOrNo;
+import com.moral.api.pojo.vo.DictionaryVo;
+import com.moral.constant.ResultMessage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiParam;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @ClassName DictController
+ * @Description TODO
+ * @Author @lizijie
+ * @Date 2023-09-20 11:39
+ * @Version 1.0
+ */
+@RestController
+@RequestMapping("/dict")
+@Api(tags = {"������"})
+public class DictController {
+    @GetMapping("list")
+
+    public ResultMessage<DictionaryVo> list() {
+        DictionaryVo dictionaryVo = new DictionaryVo()
+                .setStateEnums(StateEnum.values())
+                .setChangeEnum(ChangeEnum.values())
+                .setInvestigationEnum(InvestigationEnum.values())
+                .setYesOrNo(YesOrNo.values())
+                ;
+        return ResultMessage.ok(dictionaryVo);
+    }
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/controller/UAVController.java b/screen-api/src/main/java/com/moral/api/controller/UAVController.java
index 2323049..8763106 100644
--- a/screen-api/src/main/java/com/moral/api/controller/UAVController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/UAVController.java
@@ -26,14 +26,11 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.awt.geom.GeneralPath;
 import java.awt.geom.Point2D;
+import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -135,5 +132,10 @@
         return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),vo);
     }
 
+    @GetMapping("UAVTest")
+    public ResultMessage UAVTest(BigDecimal lat, BigDecimal lon, String batch){
+        historySecondUavService.UAVTest(lat, lon, batch);
+        return new ResultMessage();
+    }
 
 }
diff --git a/screen-api/src/main/java/com/moral/api/pojo/enums/AllocationApproveEnum.java b/screen-api/src/main/java/com/moral/api/pojo/enums/AllocationApproveEnum.java
new file mode 100644
index 0000000..24d3383
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/enums/AllocationApproveEnum.java
@@ -0,0 +1,71 @@
+package com.moral.api.pojo.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.moral.api.exception.BusinessException;
+import lombok.Getter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @ClassName InvestigationEnum
+ * @Description TODO
+ * @Author @cjl
+ * @Date 2023-09-20 14:47
+ * @Version 1.0
+ */
+@Getter
+@JsonFormat(shape = JsonFormat.Shape.OBJECT)
+public enum AllocationApproveEnum implements IntegerValueEnum{
+    /**
+     *������
+     */
+    NEW_BUILT(10, "������"),
+    /**
+     *���������
+     */
+    UNDER_RECTIFICATION(20, "���������"),
+    /**
+     *���������
+     */
+    IN_APPROVAL(30, "���������"),
+    /**
+     *������
+     */
+    PASS(40, "������"),
+    /**
+     *������
+     */
+    REFUSE(50, "������"),
+
+    ;
+
+    @EnumValue
+    public  final Integer value;
+    public  final String name;
+
+    AllocationApproveEnum(Integer value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    private static Map<Integer, AllocationApproveEnum> valueMap = new HashMap<>();
+    static {
+        for (AllocationApproveEnum v : AllocationApproveEnum.values()) {
+            valueMap.put(v.value, v);
+        }
+    }
+    @JsonCreator
+    public static AllocationApproveEnum getByValue(Integer value) {
+        if (value == null) {
+            return null;
+        }
+        AllocationApproveEnum result = valueMap.get(value);
+        if (result == null) {
+            throw new BusinessException("������������������" + value);
+        }
+        return result;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/enums/ChangeEnum.java b/screen-api/src/main/java/com/moral/api/pojo/enums/ChangeEnum.java
new file mode 100644
index 0000000..b09051c
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/enums/ChangeEnum.java
@@ -0,0 +1,59 @@
+package com.moral.api.pojo.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.moral.api.exception.BusinessException;
+import lombok.Getter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @ClassName StateEnum
+ * @Description TODO
+ * @Author @lizijie
+ * @Date 2023-09-20 11:11
+ * @Version 1.0
+ */
+@Getter
+@JsonFormat(shape = JsonFormat.Shape.OBJECT)
+public enum ChangeEnum implements IntegerValueEnum {
+
+    /**
+     *������������
+     */
+    IMMEDIATELY(1, "������������"),
+    /**
+     *������������
+     */
+    DEADLINE(2, "������������"),
+   ;
+
+    @EnumValue
+    public  final Integer value;
+    public  final String name;
+
+    ChangeEnum(Integer value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    private static Map<Integer, ChangeEnum> valueMap = new HashMap<>();
+    static {
+        for (ChangeEnum v : ChangeEnum.values()) {
+            valueMap.put(v.value, v);
+        }
+    }
+    @JsonCreator
+    public static ChangeEnum getByValue(Integer value) {
+        if (value == null) {
+            return null;
+        }
+        ChangeEnum result = valueMap.get(value);
+        if (result == null) {
+            throw new BusinessException("������������������" + value);
+        }
+        return result;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/enums/IntegerValueEnum.java b/screen-api/src/main/java/com/moral/api/pojo/enums/IntegerValueEnum.java
new file mode 100644
index 0000000..25ed09a
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/enums/IntegerValueEnum.java
@@ -0,0 +1,18 @@
+package com.moral.api.pojo.enums;
+
+/**
+ * @ClassName IntegerValueEnum
+ * @Description TODO
+ * @Author @lizijie
+ * @Date 2023-09-20 11:35
+ * @Version 1.0
+ */
+public interface IntegerValueEnum {
+
+    /**
+     * ������value
+     *
+     * @return
+     */
+    Integer getValue();
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/enums/InvestigationEnum.java b/screen-api/src/main/java/com/moral/api/pojo/enums/InvestigationEnum.java
new file mode 100644
index 0000000..24d6802
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/enums/InvestigationEnum.java
@@ -0,0 +1,60 @@
+package com.moral.api.pojo.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.moral.api.exception.BusinessException;
+import lombok.Getter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @ClassName InvestigationEnum
+ * @Description TODO
+ * @Author @cjl
+ * @Date 2023-09-20 14:47
+ * @Version 1.0
+ */
+@Getter
+@JsonFormat(shape = JsonFormat.Shape.OBJECT)
+public enum InvestigationEnum implements IntegerValueEnum{
+    /**
+     *������������
+     */
+    SCENE(1, "������"),
+    /**
+     *������������
+     */
+    TRAVELING_VEHICLE(2, "������"),
+
+    UAV(3, "���������"),
+    ;
+
+    @EnumValue
+    public  final Integer value;
+    public  final String name;
+
+    InvestigationEnum(Integer value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    private static Map<Integer, InvestigationEnum> valueMap = new HashMap<>();
+    static {
+        for (InvestigationEnum v : InvestigationEnum.values()) {
+            valueMap.put(v.value, v);
+        }
+    }
+    @JsonCreator
+    public static InvestigationEnum getByValue(Integer value) {
+        if (value == null) {
+            return null;
+        }
+        InvestigationEnum result = valueMap.get(value);
+        if (result == null) {
+            throw new BusinessException("������������������" + value);
+        }
+        return result;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/enums/StateEnum.java b/screen-api/src/main/java/com/moral/api/pojo/enums/StateEnum.java
new file mode 100644
index 0000000..0c1f9e9
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/enums/StateEnum.java
@@ -0,0 +1,57 @@
+package com.moral.api.pojo.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.moral.api.exception.BusinessException;
+import lombok.Getter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @ClassName StateEnum
+ * @Description TODO
+ * @Author @lizijie
+ * @Date 2023-09-20 11:11
+ * @Version 1.0
+ */
+@Getter
+@JsonFormat(shape = JsonFormat.Shape.OBJECT)
+public enum StateEnum implements IntegerValueEnum {
+    /**
+     *���������
+     */
+    NOT_EFFECTIVE(10, "���������"),
+    /**
+     *���������
+     */
+    TAKE_EFFECT(20, "���������");
+
+    @EnumValue
+    public  final Integer value;
+    public  final String name;
+
+    StateEnum(Integer value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    private static Map<Integer, StateEnum> valueMap = new HashMap<>();
+    static {
+        for (StateEnum v : StateEnum.values()) {
+            valueMap.put(v.value, v);
+        }
+    }
+    @JsonCreator
+    public static StateEnum getByValue(Integer value) {
+        if (value == null) {
+            return null;
+        }
+        StateEnum result = valueMap.get(value);
+        if (result == null) {
+            throw new BusinessException("������������������" + value);
+        }
+        return result;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/enums/StringValueEnum.java b/screen-api/src/main/java/com/moral/api/pojo/enums/StringValueEnum.java
new file mode 100644
index 0000000..5942632
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/enums/StringValueEnum.java
@@ -0,0 +1,18 @@
+package com.moral.api.pojo.enums;
+
+/**
+ * @ClassName StringValueEnum
+ * @Description TODO
+ * @Author @lizijie
+ * @Date 2023-09-20 11:36
+ * @Version 1.0
+ */
+public interface StringValueEnum {
+
+    /**
+     * ������value
+     *
+     * @return
+     */
+    String getValue();
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/enums/YesOrNo.java b/screen-api/src/main/java/com/moral/api/pojo/enums/YesOrNo.java
new file mode 100644
index 0000000..7035cd3
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/enums/YesOrNo.java
@@ -0,0 +1,57 @@
+package com.moral.api.pojo.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.moral.api.exception.BusinessException;
+import lombok.Getter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @ClassName StateEnum
+ * @Description TODO
+ * @Author @lizijie
+ * @Date 2023-09-20 11:11
+ * @Version 1.0
+ */
+@Getter
+@JsonFormat(shape = JsonFormat.Shape.OBJECT)
+public enum YesOrNo implements IntegerValueEnum {
+    /**
+     *���������
+     */
+    YES(1, "���"),
+    /**
+     *���������
+     */
+    No(0, "���");
+
+    @EnumValue
+    public  final Integer value;
+    public  final String name;
+
+    YesOrNo(Integer value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    private static Map<Integer, YesOrNo> valueMap = new HashMap<>();
+    static {
+        for (YesOrNo v : YesOrNo.values()) {
+            valueMap.put(v.value, v);
+        }
+    }
+    @JsonCreator
+    public static YesOrNo getByValue(Integer value) {
+        if (value == null) {
+            return null;
+        }
+        YesOrNo result = valueMap.get(value);
+        if (result == null) {
+            throw new BusinessException("������������������" + value);
+        }
+        return result;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/DictionaryVo.java b/screen-api/src/main/java/com/moral/api/pojo/vo/DictionaryVo.java
new file mode 100644
index 0000000..e1874dc
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/DictionaryVo.java
@@ -0,0 +1,66 @@
+package com.moral.api.pojo.vo;
+
+import com.moral.api.pojo.enums.ChangeEnum;
+import com.moral.api.pojo.enums.InvestigationEnum;
+import com.moral.api.pojo.enums.StateEnum;
+import com.moral.api.pojo.enums.YesOrNo;
+import com.moral.api.utils.BeanConverts;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName DictionaryVo
+ * @Description TODO
+ * @Author @lizijie
+ * @Date 2023-09-20 13:30
+ * @Version 1.0
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "������������ - VO", description = "������������ - VO")
+public class DictionaryVo {
+
+    private List<Map<String, Object>> StateEnums;
+
+    private List<Map<String, Object>> InvestigationEnum;
+
+    private List<Map<String, Object>> ChangeEnum;
+    private List<Map<String, Object>> YesOrNo;
+
+
+
+
+    public static List<Map<String, Object>> enumArray2Map(Enum[] enums) {
+        List<Map<String, Object>> mapList = Arrays.asList(enums).stream().map(BeanConverts::objToMapNonJson).collect(Collectors.toList());
+        mapList.stream().map(map -> map.remove("declaringClass")).collect(Collectors.toList());
+        return mapList;
+    }
+
+    public DictionaryVo setStateEnums(StateEnum[] enumResult) {
+        this.StateEnums = enumArray2Map(enumResult);
+        return this;
+    }
+
+    public DictionaryVo setInvestigationEnum(com.moral.api.pojo.enums.InvestigationEnum[] stateEnum) {
+        this.InvestigationEnum = enumArray2Map(stateEnum);
+        return this;
+    }
+
+    public DictionaryVo setChangeEnum(com.moral.api.pojo.enums.ChangeEnum[] enumResult) {
+        this.ChangeEnum = enumArray2Map(enumResult);
+        return this;
+    }
+
+    public DictionaryVo setYesOrNo(com.moral.api.pojo.enums.YesOrNo[] enumResult) {
+        this.YesOrNo = enumArray2Map(enumResult);
+        return this;
+    }
+
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java b/screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java
index 9c5a01c..7209030 100644
--- a/screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java
+++ b/screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java
@@ -5,6 +5,7 @@
 import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO;
 import com.moral.api.pojo.form.uav.UAVQueryTimeSlotForm;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -46,4 +47,5 @@
     List<HistorySecondUav> queryDataByBatch(String batch);
 
 
+    boolean UAVTest(BigDecimal lat, BigDecimal lon, String batch);
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java
index d3822e4..4e81d4e 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java
@@ -25,14 +25,7 @@
 
 import java.text.DecimalFormat;
 import java.time.Duration;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.OptionalDouble;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.DoubleStream;
 
@@ -126,7 +119,7 @@
         CityAqiMonthly cityAqiMonthly = cityAqiMonthlyMapper.selectOne(cityAqiMonthlyQueryWrapper);
         Double compositeIndex = null;
         String compositeIndexYearOnYear = null;
-        Integer pm25 = null;
+        Double pm25 = null;
         String pm25YearOnYear = null;
         if (cityAqiMonthly != null) {
             Map<String, Object> aqiMap = JSONObject.parseObject(cityAqiMonthly.getValue(), Map.class);
@@ -145,7 +138,7 @@
 
             //3.PM2.5������
             if (aqiMap.get("PM2_5") != null) {
-                pm25 = Integer.parseInt(aqiMap.get("PM2_5").toString());
+                pm25 = Objects.nonNull(aqiMap.get("PM2_5"))?Double.parseDouble(aqiMap.get("PM2_5").toString()):0d;
             }
             currentRankingResult.put("PM2_5", pm25 + "ug/m��");
 
@@ -183,7 +176,7 @@
         Map<Integer, Map<String, Object>> monthlyCumulativeResult = null;
         Double cityCompositeIndex = null;
         String cityCompositeIndexYearOnYear = null;
-        Integer cityPM25 = null;
+        Double cityPM25 = null;
         String cityPM25YearOnYear = null;
         if (!"1".equals(month)) {
             Map<String, Object> cumulativeRankingResult = new HashMap<>();
@@ -201,7 +194,7 @@
                         cityCompositeIndexYearOnYear = cityMap.get("compositeIndex_yearOnYear").toString();
                     }
                     //���������PM2.5
-                    cityPM25 = (int) Double.parseDouble(cityMap.get("PM2_5").toString());
+                    cityPM25 = Double.parseDouble(cityMap.get("PM2_5").toString());
                     if (cityMap.get("PM2_5_yearOnYear") != null) {
                         cityPM25YearOnYear = cityMap.get("PM2_5_yearOnYear").toString();
                     }
@@ -944,7 +937,7 @@
      * @param pm25YearOnYear           ���������������������������pm2.5������
      * @description ���������������������������������������������������������������������������
      */
-    private Map<String, Object> getAreaCurrentMonthResult(Map<Integer, String> areasMap, List<CityAqiMonthly> areaData, Double compositeIndex, String compositeIndexYearOnYear, Integer pm25, String pm25YearOnYear) {
+    private Map<String, Object> getAreaCurrentMonthResult(Map<Integer, String> areasMap, List<CityAqiMonthly> areaData, Double compositeIndex, String compositeIndexYearOnYear, Double pm25, String pm25YearOnYear) {
         Map<String, Object> result = new HashMap<>();
         result.put("compositeIndex", compositeIndex);
         result.put("compositeIndexYearOnYear", compositeIndexYearOnYear);
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java
index 10b8016..627b26a 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java
@@ -1,6 +1,7 @@
 package com.moral.api.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.moral.api.entity.*;
 import com.moral.api.mapper.HistorySecondUavMapper;
@@ -349,4 +350,46 @@
         }
     }
 
+    @Override
+    public boolean UAVTest(BigDecimal lat, BigDecimal lon, String batch) {
+        List<HistorySecondUav> list = new ArrayList<>();
+
+        QueryWrapper<HistorySecondUav> wrapper = new QueryWrapper<>();
+        wrapper.eq("batch", batch);
+        wrapper.select("value,mac,time,organization_id");
+        wrapper.orderByAsc("time");
+        List<HistorySecondUav> datas = historySecondUavMapper.selectList(wrapper);
+        Date time =DateUtils.addDays(datas.get(2).getTime(),0);
+        //String bat = "2023-08-08 14:42:20";
+        for(HistorySecondUav g : datas){
+            HistorySecondUav historySecondUav = new HistorySecondUav();
+            historySecondUav.setTime(DateUtils.addDays(g.getTime(),0));
+            historySecondUav.setMac(g.getMac());
+            historySecondUav.setBatch(time);
+            historySecondUav.setOrganizationId(g.getOrganizationId());
+            Map<String, Object> data = JSON.parseObject(g.getValue(), Map.class);
+            Map<String, Object> dataResult = new HashMap<>();
+            dataResult = data;
+            dataResult.put("flylat",Objects.isNull(data.get("flylat"))||data.get("flylat").toString().equals("0")?0d:Double.parseDouble(String.format("%.10f",Double.parseDouble(data.get("flylat").toString())+lat.doubleValue())));
+            dataResult.put("flylon",Objects.isNull(data.get("flylon"))||data.get("flylon").toString().equals("0")?0d:Double.parseDouble(String.format("%.10f",Double.parseDouble(data.get("flylon").toString())+lon.doubleValue())));
+            /*if(Objects.nonNull(data.get("a21026"))&& !data.get("a21026").toString().equals("0")){
+                Double a21026D = Double.parseDouble(data.get("a21026").toString());
+                if( a21026D>15){
+                    a21026D = a21026D -10;
+                }
+                dataResult.put("a21026",Double.parseDouble(String.format("%.4f",a21026D)));
+            }
+            if(Objects.nonNull(data.get("a21004"))&& !data.get("a21004").toString().equals("0")){
+                Double a21024D = Double.parseDouble(data.get("a21004").toString());
+                if( a21024D>100){
+                    a21024D = a21024D -100;
+                }
+                dataResult.put("a21004",Double.parseDouble(String.format("%.4f",a21024D)));
+            }*/
+            historySecondUav.setValue(JSONObject.toJSONString(dataResult));
+            list.add(historySecondUav);
+        }
+        this.saveBatch(list);
+        return true;
+    }
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/ProfessionServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/ProfessionServiceImpl.java
index 2608c7b..18ae1e2 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/ProfessionServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/ProfessionServiceImpl.java
@@ -6,14 +6,7 @@
 import org.springframework.util.ObjectUtils;
 
 import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import com.alibaba.fastjson.JSONObject;
@@ -103,8 +96,10 @@
         List<Map<String, Object>> devices = deviceService.getDevicesByOrganizationId(organizationId);
         Set<Map<String, Object>> result = new HashSet<>();
         for (Map<String, Object> device : devices) {
-            List<Map<String, Object>> professions = (List<Map<String, Object>>) device.get("professions");
-            result.addAll(professions);
+            if(Objects.nonNull(device)&&Objects.nonNull(device.get("professions"))&&device.containsKey("professions")){
+                List<Map<String, Object>> professions = (List<Map<String, Object>>) device.get("professions");
+                result.addAll(professions);
+            }
         }
         return result;
     }
diff --git a/screen-api/src/main/java/com/moral/api/utils/BeanConverts.java b/screen-api/src/main/java/com/moral/api/utils/BeanConverts.java
new file mode 100644
index 0000000..9d00737
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/utils/BeanConverts.java
@@ -0,0 +1,340 @@
+package com.moral.api.utils;
+
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.cglib.beans.BeanMap;
+
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+
+import java.util.*;
+
+/**
+ * @ClassName BeanConverts
+ * @Description TODO
+ * @Author @lizijie
+ * @Date 2023-09-20 13:41
+ * @Version 1.0
+ */
+@Slf4j
+@SuppressWarnings("unchecked")
+public class BeanConverts {
+    private static  ObjectMapper objectMapper = new ObjectMapper();
+    static{
+
+        //���������������������������������������������
+        objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
+
+        //���������������������������������������������,���������������
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+
+        //���������������������������,������������
+        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+
+        //���������null���������
+        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+    }
+
+    private BeanConverts() {
+    }
+
+    /**
+     * BeanUtils.copyProperties ������
+     * ������������source ���������������������
+     *
+     * @param source           ���������
+     * @param target           ������������
+     * @param ignoreProperties ������������
+     */
+    public static void copyPropertiesIgnoreNull(Object source, Object target, String... ignoreProperties) {
+        Set<String> ignoreSet = new HashSet<>();
+        if (ignoreProperties != null) {
+            ignoreSet.addAll(Arrays.asList(ignoreProperties));
+        }
+        ignoreSet.addAll(getObjectNullFieldName(source));
+        BeanUtils.copyProperties(source, target, ignoreSet.toArray(new String[0]));
+    }
+
+    /**
+     * ������������������������null ���������������������
+     *
+     * @param object ���������
+     * @return ������������������
+     */
+    public static List<String> getObjectNullFieldName(Object object) {
+        BeanMap beanMap = BeanMap.create(object);
+        List<String> fieldNameList = new ArrayList<>();
+        for (Object key : beanMap.keySet()) {
+            if (beanMap.get(key) == null) {
+                fieldNameList.add(key.toString());
+            }
+        }
+        return fieldNameList;
+    }
+
+    /**
+     * ������������������map
+     * ���������������������
+     *
+     * @param obj ������
+     * @return ���������
+     */
+    public static Map<String, Object> objToMapIgnoreNull(Object obj) {
+        return objToMap(obj, true);
+    }
+
+    /**
+     * ������������������map
+     *
+     * @param obj ������
+     * @return ���������
+     */
+    public static Map<String, Object> objToMap(Object obj) {
+        return objToMap(obj, false);
+    }
+
+    /**
+     * ������������������map
+     *
+     * @param obj        ������
+     * @param ignoreNull ������������������
+     * @return ���������
+     */
+    private static Map<String, Object> objToMap(Object obj, boolean ignoreNull) {
+        return JSONUtil.parseObj(obj, ignoreNull);
+    }
+
+    /**
+     * entity ������
+     *
+     * @param obj   ���������
+     * @param clazz ������������
+     * @param <T>   ������
+     * @return ������������
+     */
+    public static <T> T cloneShallow(Object obj, Class<T> clazz) {
+        if (obj == null) {
+            return null;
+        }
+        T t = BeanUtils.instantiateClass(clazz);
+        BeanUtils.copyProperties(obj, t);
+        return t;
+    }
+
+    /**
+     * entity ������������
+     *
+     * @param collection ���������������
+     * @param clazz      ������������
+     * @param <T>        ������
+     * @return ������������������
+     */
+    public static <T> List<T> cloneShallow(Collection<?> collection, Class<T> clazz) {
+        return collection.stream().map(item -> convert(item, clazz)).collect(Collectors.toList());
+    }
+
+    /**
+     * entity ������
+     *
+     * @param obj   ���������
+     * @param clazz ������������
+     * @param <T>   ������
+     * @return ������������
+     */
+    public static <T> T convert(Object obj, Class<T> clazz) {
+
+        return objectMapper.convertValue(obj, clazz);
+    }
+
+    public static <T> T convert(Object obj, TypeReference<T> type) {
+        return objectMapper.convertValue(obj, type);
+    }
+
+    /**
+     * entity ������
+     *
+     * @param optional ���������
+     * @param clazz    ������������
+     * @param <T>      ������
+     * @return ������������
+     */
+    public static <T> T convert(Optional<?> optional, Class<T> clazz) {
+        return optional.map(obj -> convert(obj, clazz)).orElseGet(null);
+    }
+
+    /**
+     * entity ������������
+     *
+     * @param collection ���������������
+     * @param clazz      ������������
+     * @param <T>        ������
+     * @return ������������������
+     */
+    public static <T> List<T> convert(Collection<?> collection, Class<T> clazz) {
+        return JSONArray.parseArray(JSONArray.toJSONString(collection), clazz);
+    }
+
+    /**
+     * entity ������������
+     *
+     * @param iterable ������������
+     * @param clazz    ������������
+     * @param <T>      ������
+     * @return ������������������
+     */
+    public static <T> List<T> convert(Iterable<?> iterable, Class<T> clazz) {
+        return convert(StreamSupport.stream(iterable.spliterator(), false), clazz);
+    }
+
+    /**
+     * entity ������������
+     *
+     * @param stream ���������������
+     * @param clazz  ������������
+     * @param <T>    ������
+     * @return ������������������
+     */
+    public static <T> List<T> convert(Stream<?> stream, Class<T> clazz) {
+        return stream.map(entity -> convert(entity, clazz)).collect(Collectors.toList());
+    }
+
+
+    /**
+     * map ���������
+     *
+     * @param clazz      ������������
+     * @param collection ���������������
+     * @param <T>        ������
+     * @return ������������������
+     */
+    public static <T> List<T> mapToObj(Class<T> clazz, Collection<Map<String, Object>> collection) {
+        return collection.stream().map(map -> BeanConverts.mapToObj(clazz, map)).collect(Collectors.toList());
+    }
+
+    /**
+     * map ���������
+     *
+     * @param clazz ������������
+     * @param map   ���������
+     * @param <T>   ������
+     * @return ������������
+     */
+    public static <T> T mapToObj(Class<T> clazz, Map<String, Object> map) {
+        T d = BeanUtils.instantiateClass(clazz);
+        BeanInfo beanInfo;
+        try {
+            beanInfo = Introspector.getBeanInfo(d.getClass());
+        } catch (IntrospectionException e) {
+            log.warn(e.getMessage(), e);
+            return null;
+        }
+        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+        for (PropertyDescriptor property : propertyDescriptors) {
+            Method setter = property.getWriteMethod();
+            if (setter == null) {
+                continue;
+            }
+            Object value = map.get(property.getName());
+            if (value == null) {
+                continue;
+            } else if (value instanceof Timestamp) {
+                if (property.getPropertyType().equals(LocalDate.class)) {
+                    value = ((Timestamp) value).toLocalDateTime().toLocalDate();
+                } else {
+                    value = ((Timestamp) value).toLocalDateTime();
+                }
+            } else if (property.getPropertyType().equals(BigDecimal.class)) {
+                value = BigDecimal.valueOf((double) value);
+            }
+            try {
+                setter.invoke(d, value);
+            } catch (Exception e) {
+                log.warn(e.getMessage(), e);
+            }
+        }
+        return d;
+    }
+
+    /**
+     * ������������������������������������������map
+     *
+     * @param collection    ������������
+     * @param keyProperty   key���������
+     * @param valueProperty value���������
+     * @param <E>           ������
+     * @return ���������map
+     */
+    public static <E> Map<String, E> propertyToMap(Collection collection, String keyProperty, String valueProperty) {
+        Map<String, E> map = new LinkedHashMap<>();
+        if (collection.isEmpty()) {
+            return map;
+        }
+        Object obj = collection.iterator().next();
+        BeanInfo beanInfo;
+        try {
+            beanInfo = Introspector.getBeanInfo(obj.getClass());
+        } catch (IntrospectionException e) {
+            log.warn(e.getMessage(), e);
+            return map;
+        }
+        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+        Method keyGetter = null;
+        Method valueGetter = null;
+        for (PropertyDescriptor property : propertyDescriptors) {
+            if (keyProperty.equals(property.getName()) && property.getReadMethod() != null) {
+                keyGetter = property.getReadMethod();
+            } else if (valueProperty.equals(property.getName()) && property.getReadMethod() != null) {
+                valueGetter = property.getReadMethod();
+            }
+        }
+        if (keyGetter == null || valueGetter == null) {
+            return map;
+        }
+        for (Object item : collection) {
+            try {
+                map.put(keyGetter.invoke(item).toString(), (E) valueGetter.invoke(item));
+            } catch (IllegalAccessException | InvocationTargetException e) {
+                log.warn(e.getMessage(), e);
+            }
+        }
+        return map;
+    }
+
+    /**
+     * ������������������map
+     *
+     * @param obj        ������
+     * @return ���������
+     */
+    public static Map<String, Object> objToMapNonJson(Object obj) {
+        Map<String, Object> map = new HashMap<>(8);
+        if (obj != null) {
+            BeanMap beanMap = BeanMap.create(obj);
+            for (Object key : beanMap.keySet()) {
+                Object value = beanMap.get(key);
+                map.put(key.toString(), value);
+            }
+        }
+        return map;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/utils/JsonUtils.java b/screen-api/src/main/java/com/moral/api/utils/JsonUtils.java
new file mode 100644
index 0000000..cc76f61
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/utils/JsonUtils.java
@@ -0,0 +1,151 @@
+package com.moral.api.utils;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+/**
+ * @ClassName JsonUtils
+ * @Description TODO
+ * @Author @lizijie
+ * @Date 2023-09-20 13:43
+ * @Version 1.0
+ */
+public class JsonUtils {
+    private static ObjectMapper objectMapper = new ObjectMapper();
+
+    /**
+     * ���������json���������
+     *
+     * @param object
+     * @return
+     */
+    public static String objectToJson(Object object) {
+        return objectToJson(object, null);
+    }
+
+    /**
+     * ���������json���������
+     *
+     * @param object     ������������json���������
+     * @param defaultStr ���������������������������������
+     * @return
+     */
+    public static String objectToJson(Object object, String defaultStr) {
+        try {
+            return objectMapper.writeValueAsString(object);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        return defaultStr;
+    }
+
+    /**
+     * json������������������������
+     *
+     * @param jsonStr json���������
+     * @param object  ���������������������������
+     * @param <T>     ������
+     * @return
+     */
+    public static <T> T jsonToObject(String jsonStr, T object) {
+        try {
+            return objectMapper.readValue(jsonStr, new TypeReference<T>() {
+            });
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return object;
+
+    }
+
+    /**
+     * json������������������������
+     *
+     * @param jsonStr json���������
+     * @param t       ������������������
+     * @param <T>     ������
+     * @return
+     */
+    public static <T> T jsonToObject(String jsonStr, Class<T> t) {
+        try {
+            return objectMapper.readValue(jsonStr, t);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
+    /**
+     * json������������������������
+     *
+     * @param jsonStr       json���������
+     * @param typeReference
+     * @param <T>
+     * @return
+     */
+    public static <T> T jsonToObject(String jsonStr, TypeReference<T> typeReference) {
+        try {
+            return objectMapper.readValue(jsonStr, typeReference);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
+    /**
+     * json������������Map
+     *
+     * @param jsonStr
+     * @param t
+     * @param v
+     * @param <K>
+     * @param <V>
+     * @return
+     */
+    public static <K, V> Map<K, V> jsonToMap(String jsonStr, Class<K> t, Class<V> v) {
+        try {
+            return objectMapper.readValue(jsonStr, new TypeReference<Map<K, V>>() {
+            });
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+    public static <K, V> Map<K, V> objectToMap(Object object, Class<K> t, Class<V> v) {
+        try {
+            return objectMapper.readValue(objectToJson(object), new TypeReference<Map<K, V>>() {
+            });
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
+    /**
+     * json������������������
+     *
+     * @param jsonStr     json���������
+     * @param objectClass ���������
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> jsonToList(String jsonStr, Class<T> objectClass) {
+        try {
+            return objectMapper.readValue(jsonStr, new TypeReference<List<T>>() {
+            });
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    public static <T> List<T> convert(Collection<?> collection, Class<T> clazz) {
+        return jsonToList(objectToJson(collection), clazz);
+    }
+}
diff --git a/screen-manage/src/main/java/com/moral/api/controller/GovMonitorPoionController.java b/screen-manage/src/main/java/com/moral/api/controller/GovMonitorPoionController.java
index 7999b4e..910fb39 100644
--- a/screen-manage/src/main/java/com/moral/api/controller/GovMonitorPoionController.java
+++ b/screen-manage/src/main/java/com/moral/api/controller/GovMonitorPoionController.java
@@ -12,10 +12,7 @@
 import com.moral.constant.ResultMessage;
 import com.moral.util.WebUtils;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
@@ -97,6 +94,16 @@
         return ResultMessage.ok();
     }
 
+    @GetMapping("updateGuid")
+    @ApiOperation(value = "������������������", notes = "������������������")
+    public ResultMessage updateGuid(@RequestParam @ApiParam(value = "id",name = "������id") Integer id,
+                                    @RequestParam @ApiParam(value = "guid",name = "������������") String guid) {
+
+        govMonitorPointService.updateList(id,guid);
+        return ResultMessage.ok();
+    }
+
+
     @RequestMapping(value = "delete", method = RequestMethod.POST)
     @ResponseBody
     public ResultMessage delete(@RequestBody Map map) {
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/DeviceMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/DeviceMapper.java
index 5eb2191..fd13764 100644
--- a/screen-manage/src/main/java/com/moral/api/mapper/DeviceMapper.java
+++ b/screen-manage/src/main/java/com/moral/api/mapper/DeviceMapper.java
@@ -1,7 +1,5 @@
 package com.moral.api.mapper;
 
-import org.apache.ibatis.annotations.Param;
-
 import java.util.List;
 import java.util.Map;
 
@@ -11,6 +9,7 @@
 import com.moral.api.entity.Device;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.moral.api.pojo.vo.device.DeviceVO;
+import io.lettuce.core.dynamic.annotation.Param;
 
 /**
  * <p>
@@ -24,6 +23,6 @@
 
     DeviceVO selectDeviceInfoById(Integer deviceId);
 
-    List<Device> queryDeviceUnitAlarmInfo();
+    List<Device> queryDeviceUnitAlarmInfo(@Param("region") String mac);
 
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/GovMonitorPointService.java b/screen-manage/src/main/java/com/moral/api/service/GovMonitorPointService.java
index be3353a..c5397b0 100644
--- a/screen-manage/src/main/java/com/moral/api/service/GovMonitorPointService.java
+++ b/screen-manage/src/main/java/com/moral/api/service/GovMonitorPointService.java
@@ -46,6 +46,8 @@
     @Transactional
     void update(GovMonitorPoint govMonitorPoint);
 
+    void updateList(Integer id,String guid);
+
     /**
       *@Description: ������������������
       *@Param: [id]
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
index ade5420..f707242 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
@@ -191,7 +191,7 @@
         //������������������redis
         setDeviceInfoToRedis(mac, deviceInfo);
         //������deviceInfo������
-        CacheUtils.refreshDeviceAlarmInfo();
+        CacheUtils.refreshDeviceAlarmInfo(mac);
         //������������������
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
         StringBuilder content = new StringBuilder();
@@ -629,8 +629,9 @@
     public void setRedisDevice() {
         List<Device> list = lambdaQuery().eq(Device::getIsDelete,0).list();
         for(Device d : list){
-           Map<String, Object> deviceInfo = selectDeviceInfoById(d.getId());
-           setDeviceInfoToRedis(d.getMac(), deviceInfo);
+            redisTemplate.opsForHash().delete(RedisConstants.DEVICE, d.getMac());
+            Map<String, Object> deviceInfo = selectDeviceInfoById(d.getId());
+            setDeviceInfoToRedis(d.getMac(), deviceInfo);
         }
     }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java
index a1b608f..9a0f119 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java
@@ -4,11 +4,13 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.moral.api.entity.Device;
 import com.moral.api.entity.GovMonitorPoint;
 import com.moral.api.entity.Organization;
 import com.moral.api.entity.SysArea;
+import com.moral.api.exception.BusinessException;
 import com.moral.api.mapper.DeviceMapper;
 import com.moral.api.mapper.GovMonitorPointMapper;
 import com.moral.api.mapper.SysAreaMapper;
@@ -20,6 +22,7 @@
 import com.moral.constant.Constants;
 import com.moral.constant.RedisConstants;
 import com.moral.constant.ResponseCodeEnum;
+import com.moral.constant.ResultMessage;
 import com.moral.util.RegionCodeUtils;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +37,8 @@
 
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 /**
@@ -58,6 +63,9 @@
 
     @Resource
     private OrganizationService organizationService;
+
+    @Resource
+    private DeviceService deviceService;
 
     @Autowired(required = false)
     private DeviceMapper deviceMapper;
@@ -213,6 +221,53 @@
     }
 
     @Override
+    @Transactional
+    public void updateList(Integer id, String guid) {
+        ExecutorService executorService = Executors.newFixedThreadPool(2);
+        QueryWrapper<GovMonitorPoint> wrapper_govMonitorPoint = new QueryWrapper<>();
+        wrapper_govMonitorPoint.eq("is_delete", Constants.NOT_DELETE);
+        wrapper_govMonitorPoint.eq("id", id);
+        List<GovMonitorPoint> govMonitorPoints = govMonitorPointMapper.selectList(wrapper_govMonitorPoint);
+        if (govMonitorPoints.size() == 0) {
+            throw new BusinessException("������������������");
+        }
+        GovMonitorPoint govMonitorPoint = govMonitorPoints.get(0);
+        String oldGuid = govMonitorPoint.getGuid();
+        LambdaQueryChainWrapper<Device> wrapper = deviceService.lambdaQuery();
+        wrapper.eq(Device::getIsDelete,0);
+        wrapper.eq(Device::getGuid,oldGuid);
+        List<Device> list = wrapper.list();
+        list.forEach(it->it.setGuid(guid));
+
+        deviceService.updateBatchById(list);
+
+        govMonitorPoint.setGuid(guid);
+        govMonitorPointMapper.updateById(govMonitorPoint);
+        //������redis
+        delGovMonitorPointInfoFromRedis(id.toString());
+        //������redis
+        setGovMonitorPointInfoToRedis(id.toString(), selectGovMonitorPointInfoById(id));
+        //������������������
+        HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+        StringBuilder content = new StringBuilder();
+        content.append("������������������������").append("id:").append(govMonitorPoint.getId() + ";");
+        if (!ObjectUtils.isEmpty(govMonitorPoint.getGuid())) {
+            content.append("guid:").append(oldGuid).append("->").append(guid).append(";");
+        }
+        LogUtils.saveOperationForManage(request, content.toString(), Constants.UPDATE_OPERATE_TYPE);
+        for(Device d : list){
+            executorService.submit(()->{
+                redisTemplate.opsForHash().delete(RedisConstants.DEVICE, d.getMac());
+                Map<String, Object> deviceInfo = deviceService.selectDeviceInfoById(d.getId());
+                redisTemplate.opsForHash().put(RedisConstants.DEVICE, d.getMac(), deviceInfo);
+
+            });
+        }
+        // ���������������
+        executorService.shutdown();
+    }
+
+    @Override
     public void delete(Integer id) {
         UpdateWrapper<GovMonitorPoint> wrapper_delete = new UpdateWrapper<>();
         wrapper_delete.eq("id", id).set("is_delete", Constants.DELETE);
diff --git a/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java b/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java
index 4d6e791..cecec02 100644
--- a/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java
+++ b/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java
@@ -17,6 +17,7 @@
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
 
 import java.util.HashMap;
 import java.util.List;
@@ -82,10 +83,21 @@
 
 
     public static void refreshDeviceAlarmInfo() {
-        //������������
-        redisTemplate.delete(RedisConstants.DEVICE_INFO);
+
+        refreshDeviceAlarmInfo(null);
+
+
+    }
+    public static void refreshDeviceAlarmInfo(String mac){
+        if(StringUtils.isEmpty(mac)){
+            //������������
+            redisTemplate.delete(RedisConstants.DEVICE_INFO);
+        }else {
+            redisTemplate.opsForHash().delete(RedisConstants.DEVICE_INFO,mac);
+        }
         //������������������
-        List<Device> devices = deviceMapper.queryDeviceUnitAlarmInfo();
+        List<Device> devices = deviceMapper.queryDeviceUnitAlarmInfo(mac);
+
         Map<String, SysDictData> unitMap = sysDictDataService.getDictDatasByType("unit");
         //���������������������������������������������
         Map<String,Device> result = new HashMap<>();
@@ -132,6 +144,8 @@
         redisTemplate.opsForHash().putAll(RedisConstants.DEVICE_INFO,result);
     }
 
+
+
     public static void refreshSpecialDeviceAlarmInfo() {
         //������������
         redisTemplate.delete(RedisConstants.SPECIAL_DEVICE_INFO);
diff --git a/screen-manage/src/main/resources/mapper/DeviceMapper.xml b/screen-manage/src/main/resources/mapper/DeviceMapper.xml
index f394f1e..ead9eb8 100644
--- a/screen-manage/src/main/resources/mapper/DeviceMapper.xml
+++ b/screen-manage/src/main/resources/mapper/DeviceMapper.xml
@@ -251,7 +251,10 @@
         on
             d.`device_version_id` = oua.`version_id`   and d.`organization_id` = oua.`organization_id` and oua.`is_delete` = 0
         where
-            d.`is_delete` = 0;
+            d.`is_delete` = 0
+        <if test="mac != null and mac != '' ">
+            and d.mac = #{mac}
+        </if>
     </select>
 
 

--
Gitblit v1.8.0