From c8aa05fd65cc788abc0f44494338b04993e3b4be Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Fri, 10 Sep 2021 15:08:58 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev_

---
 screen-api/src/main/java/com/moral/api/service/SpecialDeviceService.java               |   18 +
 screen-api/src/main/java/com/moral/api/service/impl/HistorySecondUavServiceImpl.java   |  132 +++++++
 screen-common/src/main/java/com/moral/util/DateUtils.java                              |   20 +
 screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java         |   57 +++
 screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryDateVO.java                 |   47 ++
 screen-manage/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java |  222 ++++++++++++
 screen-api/src/main/java/com/moral/api/pojo/dto/uav/UAVQueryTimeSlotDTO.java           |   35 +
 screen-manage/src/main/java/com/moral/api/mapper/GovMonitorPointMapper.java            |   16 
 screen-api/src/main/java/com/moral/api/entity/HistorySecondUav.java                    |    8 
 screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVOs.java            |   44 ++
 screen-manage/src/main/resources/mapper/GovMonitorPointMapper.xml                      |   22 +
 screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVO.java             |   23 +
 screen-api/src/main/java/com/moral/api/service/HistorySecondUavService.java            |   24 +
 screen-manage/src/main/java/com/moral/api/service/GovMonitorPointService.java          |   67 +++
 screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java       |    1 
 screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java      |   30 +
 screen-common/src/main/java/com/moral/constant/Constants.java                          |    1 
 screen-api/src/main/java/com/moral/api/controller/UAVController.java                   |   45 ++
 screen-common/src/main/java/com/moral/constant/RedisConstants.java                     |    5 
 screen-manage/src/main/java/com/moral/api/controller/GovMonitorPoionController.java    |  107 +++++
 screen-manage/src/main/java/com/moral/api/entity/GovMonitorPoint.java                  |  101 +++++
 21 files changed, 1,024 insertions(+), 1 deletions(-)

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 408ba94..0342ed5 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
@@ -3,8 +3,15 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.moral.api.entity.HistorySecondUav;
 import com.moral.api.mapper.HistorySecondUavMapper;
+import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO;
+import com.moral.api.pojo.form.uav.UAVQueryTimeSlotForm;
+import com.moral.api.pojo.vo.uav.UAVQueryDateVO;
+import com.moral.api.pojo.vo.uav.UAVQueryTimeSlotVO;
+import com.moral.api.pojo.vo.uav.UAVQueryTimeSlotVOs;
+import com.moral.api.service.HistorySecondUavService;
 import com.moral.constant.ResponseCodeEnum;
 import com.moral.constant.ResultMessage;
+import com.moral.util.DateUtils;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,7 +19,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
+import java.util.*;
 
 /**
  * @ClassName UAVController
@@ -30,6 +37,8 @@
 
     @Autowired
     HistorySecondUavMapper historySecondUavMapper;
+    @Autowired
+    HistorySecondUavService historySecondUavService;
     /**
     * @Description: ������������id���mac���������������������������������
             * @Param: []
@@ -42,4 +51,38 @@
         List<HistorySecondUav> historySecondUavs = historySecondUavMapper.selectList(new QueryWrapper<>());
         return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),historySecondUavs);
     }
+
+
+    /**
+    * @Description: ������������������������������������������������������������
+            * @Param: [organizationId]
+            * @return: com.moral.constant.ResultMessage
+            * @Author: ���������
+            * @Date: 2021/9/8
+            */
+    @RequestMapping("queryDate")
+    public ResultMessage queryDate(Integer organizationId){
+        //������������������
+        List<Date> dates = historySecondUavService.queryDate(organizationId);
+        //������vo���
+        UAVQueryDateVO vo = UAVQueryDateVO.convert(dates);
+        //������������
+        return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),vo);
+    }
+
+
+    @RequestMapping("queryTimeSlot")
+    public ResultMessage queryTimeSlot(UAVQueryTimeSlotForm form){
+        //������������������������
+        if (!form.valid())
+            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
+                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+        //������������������
+        List<UAVQueryTimeSlotDTO> dtos = historySecondUavService.queryTimeSlot(form);
+        //������vo���
+        UAVQueryTimeSlotVOs vo = UAVQueryTimeSlotVOs.convert(dtos);
+        //������������
+        return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),vo);
+    }
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/entity/HistorySecondUav.java b/screen-api/src/main/java/com/moral/api/entity/HistorySecondUav.java
index 74a3c76..37443ae 100644
--- a/screen-api/src/main/java/com/moral/api/entity/HistorySecondUav.java
+++ b/screen-api/src/main/java/com/moral/api/entity/HistorySecondUav.java
@@ -1,5 +1,7 @@
 package com.moral.api.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import java.time.LocalDateTime;
 import java.io.Serializable;
@@ -23,6 +25,12 @@
     private static final long serialVersionUID = 1L;
 
     /**
+     * ������
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
      * ������mac
      */
     private String mac;
diff --git a/screen-api/src/main/java/com/moral/api/pojo/dto/uav/UAVQueryTimeSlotDTO.java b/screen-api/src/main/java/com/moral/api/pojo/dto/uav/UAVQueryTimeSlotDTO.java
new file mode 100644
index 0000000..80c0087
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/dto/uav/UAVQueryTimeSlotDTO.java
@@ -0,0 +1,35 @@
+package com.moral.api.pojo.dto.uav;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName UAVQueryTimeSlotDTO
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/8 15:13
+ * @Version TODO
+ **/
+@Data
+public class UAVQueryTimeSlotDTO {
+
+    /*
+    * ���������mac
+    * */
+    private String mac;
+
+    /*
+    * ���������������
+    * */
+    private String name;
+
+    /*
+    * ������������������������
+    * map������������������key���startTime
+    * ���������������key���endTime
+    * */
+    private List<Map<String,Date>> timeSlot;
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java b/screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java
new file mode 100644
index 0000000..c182c07
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java
@@ -0,0 +1,57 @@
+package com.moral.api.pojo.form.uav;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.moral.util.DateUtils;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.util.ObjectUtils;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @ClassName queryTimeSlotForm
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/8 14:17
+ * @Version TODO
+ **/
+@Data
+public class UAVQueryTimeSlotForm {
+
+    /*
+    * ������id
+    * */
+    private Integer organizationId;
+
+    /*
+    * ������
+    * */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private Date date;
+
+    /*
+    * ������������
+    * */
+    private Date startDate;
+
+    /*
+    * ������������
+    * */
+    private Date endDate;
+
+
+    public boolean valid() {
+        if (
+                ObjectUtils.isEmpty(organizationId)&&
+                        ObjectUtils.isEmpty(date)
+                )
+            return false;
+        //������������������������������������
+        List<Date> dates = DateUtils.dateToStartAndEndTime(date);
+        startDate = dates.get(0);
+        endDate = dates.get(1);
+        return true;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryDateVO.java b/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryDateVO.java
new file mode 100644
index 0000000..96263ef
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryDateVO.java
@@ -0,0 +1,47 @@
+package com.moral.api.pojo.vo.uav;
+
+import com.moral.util.DateUtils;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * @ClassName UAVQueryDateVO
+ * @Description ������������������������������������vo
+ * @Author ���������
+ * @Date 2021/9/8 11:03
+ * @Version TODO
+ **/
+@Data
+public class UAVQueryDateVO {
+
+    /**
+    * @Description: ������hashset���������������
+            * @Param:
+            * @return:
+            * @Author: ���������
+            * @Date: 2021/9/8
+            */
+    public HashSet<String> datesStr;
+
+    /**
+    * @Description: ���������������������������������vo���������
+            * @Param: [dates]
+            * @return: com.moral.api.pojo.vo.uav.UAVQueryDateVO
+            * @Author: ���������
+            * @Date: 2021/9/8
+            */
+    public static UAVQueryDateVO convert(List<Date> dates){
+        //������������������������������������
+        UAVQueryDateVO uavQueryDateVO = new UAVQueryDateVO();
+        HashSet<String> datesStr = new HashSet<>();
+        for (Date date : dates) {
+            datesStr.add(DateUtils.dateToDateString(date,"yyyy-MM-dd"));
+        }
+        uavQueryDateVO.setDatesStr(datesStr);
+        return uavQueryDateVO;
+    }
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVO.java b/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVO.java
new file mode 100644
index 0000000..90343dc
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVO.java
@@ -0,0 +1,23 @@
+package com.moral.api.pojo.vo.uav;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName UAVQueryTimeSlotVO
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/8 16:57
+ * @Version TODO
+ **/
+@Data
+public class UAVQueryTimeSlotVO {
+
+    private String mac;
+
+    private String name;
+
+    private List<Map<String,String>> timeSlot;
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVOs.java b/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVOs.java
new file mode 100644
index 0000000..a713d11
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/uav/UAVQueryTimeSlotVOs.java
@@ -0,0 +1,44 @@
+package com.moral.api.pojo.vo.uav;
+
+import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO;
+import com.moral.util.DateUtils;
+import lombok.Data;
+
+import java.util.*;
+
+/**
+ * @ClassName UAVQueryTimeSlotVOs
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/8 17:16
+ * @Version TODO
+ **/
+@Data
+public class UAVQueryTimeSlotVOs {
+
+    List<UAVQueryTimeSlotVO> vos;
+
+    public static UAVQueryTimeSlotVOs convert(List<UAVQueryTimeSlotDTO> dtos){
+        UAVQueryTimeSlotVOs resultVO = new UAVQueryTimeSlotVOs();
+        List<UAVQueryTimeSlotVO> vos = new ArrayList<>();
+        for (UAVQueryTimeSlotDTO dto : dtos) {
+            UAVQueryTimeSlotVO vo = new UAVQueryTimeSlotVO();
+            vo.setMac(dto.getMac());
+            vo.setName(dto.getName());
+            List<Map<String,String>> timeSlotVo = new ArrayList<>();
+            List<Map<String, Date>> timeSlot = dto.getTimeSlot();
+            for (Map<String, Date> map : timeSlot) {
+                Map<String,String> newMap = new LinkedHashMap<>();
+                map.forEach((key,value)->{
+                    String dateStr = DateUtils.dateToDateString(value, "yyyy-MM-dd HH:mm:ss");
+                    newMap.put(key,dateStr);
+                });
+                timeSlotVo.add(newMap);
+            }
+            vo.setTimeSlot(timeSlotVo);
+            vos.add(vo);
+        }
+        resultVO.setVos(vos);
+        return resultVO;
+    }
+}
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 7814476..4b663ca 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
@@ -2,6 +2,11 @@
 
 import com.moral.api.entity.HistorySecondUav;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO;
+import com.moral.api.pojo.form.uav.UAVQueryTimeSlotForm;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +18,23 @@
  */
 public interface HistorySecondUavService extends IService<HistorySecondUav> {
 
+    /**
+    * @Description: ������������id������������������������������������������
+            * @Param: [organizationId]
+            * @return: java.util.List<java.util.Date>
+            * @Author: ���������
+            * @Date: 2021/9/8
+            */
+    List<Date> queryDate(Integer organizationId);
+
+    /**
+    * @Description: ���������������������������������������������������������
+            * @Param: [from]
+            * @return: List<UAVQueryTimeSlotDTO>
+            * @Author: ���������
+            * @Date: 2021/9/8
+            */
+    List<UAVQueryTimeSlotDTO> queryTimeSlot(UAVQueryTimeSlotForm form);
+
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/SpecialDeviceService.java b/screen-api/src/main/java/com/moral/api/service/SpecialDeviceService.java
index ea3f8da..7711c12 100644
--- a/screen-api/src/main/java/com/moral/api/service/SpecialDeviceService.java
+++ b/screen-api/src/main/java/com/moral/api/service/SpecialDeviceService.java
@@ -22,4 +22,22 @@
     //���������������
     List<Map<String, Object>> carTrajectory(Map<String, Object> params);
 
+    /**
+    * @Description: ������mac������������������������
+            * @Param: [mac]
+            * @return: com.moral.api.entity.SpecialDevice
+            * @Author: ���������
+            * @Date: 2021/9/8
+            */
+    Map<String,Object> getSpecialDeviceMapByMac(String mac);
+
+    /**
+    * @Description: ������mac������������������������
+            * @Param: [mac]
+            * @return: com.moral.api.entity.SpecialDevice
+            * @Author: ���������
+            * @Date: 2021/9/8
+            */
+    SpecialDevice getSpecialDeviceByMac(String mac);
+
 }
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 c0da684..1565dc3 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,10 +1,21 @@
 package com.moral.api.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.moral.api.entity.HistorySecondUav;
+import com.moral.api.entity.Organization;
 import com.moral.api.mapper.HistorySecondUavMapper;
+import com.moral.api.pojo.dto.uav.UAVQueryTimeSlotDTO;
+import com.moral.api.pojo.form.uav.UAVQueryTimeSlotForm;
 import com.moral.api.service.HistorySecondUavService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.service.OrganizationService;
+import com.moral.api.service.SpecialDeviceService;
+import com.moral.util.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.function.Predicate;
 
 /**
  * <p>
@@ -17,4 +28,125 @@
 @Service
 public class HistorySecondUavServiceImpl extends ServiceImpl<HistorySecondUavMapper, HistorySecondUav> implements HistorySecondUavService {
 
+    @Autowired
+    HistorySecondUavMapper historySecondUavMapper;
+    @Autowired
+    OrganizationService organizationService;
+    @Autowired
+    SpecialDeviceService specialDeviceService;
+
+    @Override
+    public List<Date> queryDate(Integer organizationId) {
+        //������������������
+        QueryWrapper<HistorySecondUav> queryWrapper = new QueryWrapper<>();
+        //���������������id
+        List<Organization> children = organizationService.getChildrenOrganizationsById(organizationId);
+        List<Integer> childrenId = new ArrayList<>();
+        for (Organization child : children) {
+            childrenId.add(child.getId());
+        }
+        childrenId.add(organizationId);
+        queryWrapper.in("organization_id",childrenId);
+        //���������������������������180���
+        Date endDate = new Date();
+        Date startDate = DateUtils.addDays(endDate, -180);
+        queryWrapper.between("batch",startDate,endDate);
+        //������������������
+        queryWrapper.select("DISTINCT batch");
+        //������������
+        List<HistorySecondUav> historySecondUavs = historySecondUavMapper.selectList(queryWrapper);
+        //������������Date������
+        List<Date> result = new ArrayList<>();
+        for (HistorySecondUav historySecondUav : historySecondUavs) {
+            result.add(historySecondUav.getBatch());
+        }
+        return result;
+    }
+
+    @Override
+    public List<UAVQueryTimeSlotDTO> queryTimeSlot(UAVQueryTimeSlotForm form) {
+        //������
+        Integer organizationId = form.getOrganizationId();
+        Date startDate = form.getStartDate();
+        Date endDate = form.getEndDate();
+        QueryWrapper<HistorySecondUav> wrapper = new QueryWrapper<>();
+        //���������������id
+        List<Organization> children = organizationService.getChildrenOrganizationsById(organizationId);
+        List<Integer> childrenId = new ArrayList<>();
+        for (Organization child : children) {
+            childrenId.add(child.getId());
+        }
+        childrenId.add(organizationId);
+        wrapper.in("organization_id",childrenId);
+        //������������batch������������������������������������������������
+        wrapper.between("batch",startDate,endDate);
+        //������������������
+        wrapper.select("mac,time,batch");
+        //������������
+        List<HistorySecondUav> historySecondUavs = historySecondUavMapper.selectList(wrapper);
+        //������batch������������
+        Map<String,List<HistorySecondUav>> batchMap = new LinkedHashMap<>();//key���batch���string
+        for (HistorySecondUav historySecondUav : historySecondUavs) {
+            //������batch���������������������
+            List<HistorySecondUav> list = batchMap.get(historySecondUav.getBatch().toString());
+            if(list!=null){
+                list.add(historySecondUav);
+            }else{
+                ArrayList<HistorySecondUav> newList = new ArrayList<>();
+                newList.add(historySecondUav);
+                batchMap.put(historySecondUav.getBatch().toString(),newList);
+            }
+        }
+        //������������30������������������
+        batchMap.values().removeIf(new Predicate<List<HistorySecondUav>>() {
+            @Override
+            public boolean test(List<HistorySecondUav> historySecondUavs) {
+                if(historySecondUavs.size()<=30)
+                    return true;
+                return false;
+            }
+        });
+        //������mac������������
+        Map<String,List<Map<String,List<HistorySecondUav>>>> macBatchMap = new LinkedHashMap<>();//key���mac
+        //������batchMap���mac���������������������macBatchMap���key���batch���������map���������������������value
+        batchMap.forEach((key,value)->{
+            String mac = value.get(0).getMac();
+            List<Map<String, List<HistorySecondUav>>> maps = macBatchMap.get(mac);
+            if(maps!=null){
+                Map<String,List<HistorySecondUav>> map = new LinkedHashMap<>();
+                map.put(key,value);
+                maps.add(map);
+            }else{
+                List<Map<String,List<HistorySecondUav>>> list = new ArrayList<>();
+                Map<String,List<HistorySecondUav>> map = new LinkedHashMap<>();
+                map.put(key,value);
+                list.add(map);
+                macBatchMap.put(value.get(0).getMac(),list);
+            }
+        });
+        //������������������
+        List<UAVQueryTimeSlotDTO> dtos = new ArrayList<>();
+        macBatchMap.forEach((key,value)->{
+            UAVQueryTimeSlotDTO dto = new UAVQueryTimeSlotDTO();
+            List<Map<String,Date>> timeSlots = new ArrayList<>();
+            dto.setMac(key);
+            //������mac������������������
+            dto.setName((String) specialDeviceService.getSpecialDeviceMapByMac(key).get("name"));
+            //���������������
+            value.forEach(listValue->{
+                listValue.forEach((mKey,mValue)->{
+                    Date slotStartDate = mValue.get(0).getTime();
+                    Date slotEndDate = mValue.get(mValue.size()-1).getTime();
+                    Map<String,Date> dateMap = new HashMap<>();
+                    dateMap.put("startTime",slotStartDate);
+                    dateMap.put("endTime",slotEndDate);
+                    timeSlots.add(dateMap);
+                });
+            });
+            dto.setTimeSlot(timeSlots);
+            dtos.add(dto);
+        });
+      return dtos;
+    }
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
index ce1ee37..0d730ba 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
@@ -27,6 +27,7 @@
     @Autowired
     OrganizationMapper organizationMapper;
 
+
     @Override
     public List<Organization> getChildrenOrganizationsById(Integer id) {
         List<Organization> childrenOrganization = new ArrayList<>();
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java
index 4ff6a07..fd19d65 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java
@@ -2,18 +2,23 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.moral.api.entity.HistorySecondSpecial;
+import com.moral.api.entity.Organization;
 import com.moral.api.entity.SpecialDevice;
 import com.moral.api.entity.SpecialDeviceHistory;
 import com.moral.api.mapper.HistorySecondSpecialMapper;
 import com.moral.api.mapper.SpecialDeviceMapper;
+import com.moral.api.service.OrganizationService;
 import com.moral.api.service.SpecialDeviceHistoryService;
 import com.moral.api.service.SpecialDeviceService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.moral.constant.Constants;
+import com.moral.constant.RedisConstants;
 import com.moral.util.GeodesyUtils;
 import com.moral.util.TokenUtils;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
@@ -37,6 +42,14 @@
 
     @Autowired
     private SpecialDeviceHistoryService specialDeviceHistoryService;
+
+    @Autowired
+    OrganizationService organizationService;
+
+    @Autowired
+    SpecialDeviceMapper specialDeviceMapper;
+    @Autowired
+    RedisTemplate redisTemplate;
 
     private final static Double dis = 50d;
 
@@ -84,6 +97,23 @@
         return filterData(data);
     }
 
+    @Override
+    public Map<String,Object> getSpecialDeviceMapByMac(String mac) {
+        //������������������
+        Map<String,Object> specialDeviceMap = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.DEVICE,mac);
+       return specialDeviceMap;
+    }
+
+    @Override
+    public SpecialDevice getSpecialDeviceByMac(String mac) {
+        QueryWrapper<SpecialDevice> queryWrapper = new QueryWrapper();
+        queryWrapper.eq("mac",mac);
+        queryWrapper.eq("is_delete",Constants.NOT_DELETE);
+        SpecialDevice specialDevice = specialDeviceMapper.selectOne(queryWrapper);
+        return specialDevice;
+    }
+
+
     //������������������������
     private List<Map<String, Object>> filterData(List<Map<String, Object>> data) {
         List<Map<String, Object>> result = new ArrayList<>();
diff --git a/screen-common/src/main/java/com/moral/constant/Constants.java b/screen-common/src/main/java/com/moral/constant/Constants.java
index 38b3a9a..4346d0d 100644
--- a/screen-common/src/main/java/com/moral/constant/Constants.java
+++ b/screen-common/src/main/java/com/moral/constant/Constants.java
@@ -218,5 +218,6 @@
      * ������������������������������
      * */
     public static final String SPECIAL_DEVICE_UAV = "1";
+
     
 }
diff --git a/screen-common/src/main/java/com/moral/constant/RedisConstants.java b/screen-common/src/main/java/com/moral/constant/RedisConstants.java
index e449781..69de65a 100644
--- a/screen-common/src/main/java/com/moral/constant/RedisConstants.java
+++ b/screen-common/src/main/java/com/moral/constant/RedisConstants.java
@@ -78,5 +78,10 @@
      * */
     public static final String SPECIAL_DEVICE_INFO = "special_device_alarm_info";
 
+    /*
+     * redis���������������������key
+     * */
+    public static final String GOV_MONITOR_POINT = "gov_monitor_point";
+
 
 }
diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java
index 9af501f..7b313a8 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -92,6 +92,26 @@
 
 
     /**
+    * @Description: ������������������������������������������������
+            * @Param: [date]
+            * @return: java.util.List<java.util.Date>
+            * @Author: ���������
+            * @Date: 2021/9/8
+            */
+    public static List<Date> dateToStartAndEndTime(Date date){
+        String dateStr = dateToDateString(date, "yyyy-MM-dd");
+        String startDateStr = dateStr+" 00:00:00";
+        String endDateStr = dateStr+" 23:59:59";
+        Date startDate = getDate(startDateStr, "yyyy-MM-dd HH:mm:ss");
+        Date endDate = getDate(endDateStr, "yyyy-MM-dd HH:mm:ss");
+        ArrayList<Date> dates = new ArrayList<>();
+        dates.add(startDate);
+        dates.add(endDate);
+        return dates;
+    }
+
+
+    /**
     * @Description: Date���toString������������Date
             * @Param: []
             * @return: java.util.Date
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
new file mode 100644
index 0000000..6bfbc14
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/controller/GovMonitorPoionController.java
@@ -0,0 +1,107 @@
+package com.moral.api.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.moral.api.entity.GovMonitorPoint;
+import com.moral.api.mapper.GovMonitorPointMapper;
+import com.moral.api.service.GovMonitorPointService;
+import com.moral.constant.Constants;
+import com.moral.constant.ResponseCodeEnum;
+import com.moral.constant.ResultMessage;
+import com.moral.util.WebUtils;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @program: screen
+ * @description: ������������
+ * @author: lizijie
+ * @create: 2021-09-09 11:31
+ **/
+@Slf4j
+@Api(tags = {"������������"})
+@RestController
+@RequestMapping("/govMonitorPoint")
+public class GovMonitorPoionController {
+
+    @Resource
+    private GovMonitorPointService govMonitorPointService;
+
+    @Resource
+    private GovMonitorPointMapper govMonitorPointMapper;
+
+    @RequestMapping(value = "getGovMonitorPointByCondition", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultMessage getSpecialDeviceByCondition(HttpServletRequest request) {
+        Map<String,Object> parameters = WebUtils.getParametersStartingWith(request,null);
+        Map<String,Object> resultMap = govMonitorPointService.getDataByCondition(parameters);
+        if (!resultMap.containsKey("code")){
+            return ResultMessage.ok(resultMap);
+        }
+        return ResultMessage.fail(Integer.parseInt(resultMap.get("code").toString()),resultMap.get("msg").toString());
+    }
+
+    @RequestMapping(value = "insert", method = RequestMethod.POST)
+    @ResponseBody
+    public ResultMessage insert(@RequestBody GovMonitorPoint govMonitorPoint){
+        String guid = govMonitorPoint.getGuid();
+        String name = govMonitorPoint.getName();
+        double longitude = govMonitorPoint.getLongitude();
+        double latitude = govMonitorPoint.getLatitude();
+        String station_level = govMonitorPoint.getStationLevel();
+        if (ObjectUtils.isEmpty(guid) && ObjectUtils.isEmpty(name) && ObjectUtils.isEmpty(longitude) && ObjectUtils.isEmpty(latitude) && ObjectUtils.isEmpty(station_level)){
+            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+        }
+        QueryWrapper<GovMonitorPoint> wrapper_govMonitorPoint = new QueryWrapper<>();
+        wrapper_govMonitorPoint.eq("is_delete",Constants.NOT_DELETE);
+        wrapper_govMonitorPoint.eq("guid",guid).or().eq("name",name);
+        List<GovMonitorPoint> govMonitorPoints = govMonitorPointMapper.selectList(wrapper_govMonitorPoint);
+        if (govMonitorPoints.size()>0){
+            return ResultMessage.fail(ResponseCodeEnum.MONITOR_POINT_IS_EXIST.getCode(),ResponseCodeEnum.MONITOR_POINT_IS_EXIST.getMsg());
+        }
+        govMonitorPointService.insert(govMonitorPoint);
+        return ResultMessage.ok();
+    }
+
+    @RequestMapping(value = "update", method = RequestMethod.POST)
+    @ResponseBody
+    public ResultMessage update(@RequestBody GovMonitorPoint govMonitorPoint){
+        int id = govMonitorPoint.getId();
+        if (ObjectUtils.isEmpty(id)){
+            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+        }
+        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){
+            return ResultMessage.fail(ResponseCodeEnum.MONITOR_POINT_IS_NOT_EXIST.getCode(),ResponseCodeEnum.MONITOR_POINT_IS_NOT_EXIST.getMsg());
+        }
+        govMonitorPointService.update(govMonitorPoint);
+        return ResultMessage.ok();
+    }
+
+    @RequestMapping(value = "delete", method = RequestMethod.POST)
+    @ResponseBody
+    public ResultMessage delete(@RequestBody Map map){
+        int id = Integer.parseInt(map.get("id").toString());
+        if (ObjectUtils.isEmpty(id)){
+            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+        }
+        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){
+            return ResultMessage.fail(ResponseCodeEnum.MONITOR_POINT_IS_NOT_EXIST.getCode(),ResponseCodeEnum.MONITOR_POINT_IS_NOT_EXIST.getMsg());
+        }
+        govMonitorPointService.delete(id);
+        return ResultMessage.ok();
+    }
+}
diff --git a/screen-manage/src/main/java/com/moral/api/entity/GovMonitorPoint.java b/screen-manage/src/main/java/com/moral/api/entity/GovMonitorPoint.java
new file mode 100644
index 0000000..192517b
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/entity/GovMonitorPoint.java
@@ -0,0 +1,101 @@
+package com.moral.api.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author moral
+ * @since 2021-09-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class GovMonitorPoint extends Model<GovMonitorPoint> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * ������������code
+     */
+    private String guid;
+
+    /**
+     * ������
+     */
+    private String name;
+
+    /**
+     * ������
+     */
+    private Double longitude;
+
+    /**
+     * ������
+     */
+    private Double latitude;
+
+    /**
+     * ���������
+     */
+    private Integer provinceCode;
+
+    /**
+     * ���������
+     */
+    private Integer cityCode;
+
+    /**
+     * ���/���������
+     */
+    private Integer areaCode;
+
+    /**
+     * ���������������������������������������������
+     */
+    private String stationLevel;
+
+    /**
+     * ������������
+     */
+    private Date createTime;
+
+    /**
+     * ������������
+     */
+    private Date updateTime;
+
+    /**
+     * ������������
+     */
+    private String isDelete;
+
+    /**
+     * ������
+     */
+    @TableField("`desc`")
+    private String desc;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/GovMonitorPointMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/GovMonitorPointMapper.java
new file mode 100644
index 0000000..e261c0c
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/mapper/GovMonitorPointMapper.java
@@ -0,0 +1,16 @@
+package com.moral.api.mapper;
+
+import com.moral.api.entity.GovMonitorPoint;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper ������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-09-09
+ */
+public interface GovMonitorPointMapper extends BaseMapper<GovMonitorPoint> {
+
+}
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
new file mode 100644
index 0000000..dc7c625
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/service/GovMonitorPointService.java
@@ -0,0 +1,67 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.GovMonitorPoint;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-09-09
+ */
+public interface GovMonitorPointService extends IService<GovMonitorPoint> {
+
+    /**
+      *@Description: ������������������������������������
+      *@Param: [map]
+      *@return: java.util.Map<java.lang.String,java.lang.Object> 
+      *@Author: lizijie
+      *@Date: 2021/9/9 11:28
+     **/
+    Map<String,Object> getDataByCondition(Map map);
+
+    /**
+      *@Description: ������������������
+      *@Param: [govMonitorPoint]
+      *@return: void
+      *@Author: lizijie
+      *@Date: 2021/9/9 15:09
+     **/
+    @Transactional
+    void insert(GovMonitorPoint govMonitorPoint);
+
+    /**
+      *@Description: ������������������
+      *@Param: [govMonitorPoint]
+      *@return: void 
+      *@Author: lizijie
+      *@Date: 2021/9/10 10:10
+     **/
+    @Transactional
+    void update(GovMonitorPoint govMonitorPoint);
+
+    /**
+      *@Description: ������������������
+      *@Param: [id]
+      *@return: void
+      *@Author: lizijie
+      *@Date: 2021/9/10 13:11
+     **/
+    @Transactional
+    void delete(Integer id);
+    
+    /**
+      *@Description: ������id������������������������
+      *@Param: [id]
+      *@return: com.moral.api.entity.GovMonitorPoint 
+      *@Author: lizijie
+      *@Date: 2021/9/9 16:35
+     **/
+    GovMonitorPoint selectGovMonitorPointInfoById(int id);
+
+}
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
new file mode 100644
index 0000000..9cac6b4
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/GovMonitorPointServiceImpl.java
@@ -0,0 +1,222 @@
+package com.moral.api.service.impl;
+
+import com.alibaba.fastjson.JSON;
+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.plugins.pagination.Page;
+import com.moral.api.entity.GovMonitorPoint;
+import com.moral.api.entity.SysArea;
+import com.moral.api.mapper.GovMonitorPointMapper;
+import com.moral.api.mapper.SysAreaMapper;
+import com.moral.api.service.GovMonitorPointService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.util.LogUtils;
+import com.moral.constant.Constants;
+import com.moral.constant.RedisConstants;
+import com.moral.constant.ResponseCodeEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Field;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * <p>
+ *  ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-09-09
+ */
+@Service
+public class GovMonitorPointServiceImpl extends ServiceImpl<GovMonitorPointMapper, GovMonitorPoint> implements GovMonitorPointService {
+
+    @Autowired(required = false)
+    private GovMonitorPointMapper govMonitorPointMapper;
+
+    @Autowired(required = false)
+    private SysAreaMapper sysAreaMapper;
+
+    @Autowired(required = false)
+    private RedisTemplate redisTemplate;
+
+    @Autowired
+    private LogUtils logUtils;
+
+    /*
+     * ���redis������������������
+     * */
+    private Map<String, Object> getGovMonitorPointInfoFromRedis(String id) {
+        return (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.GOV_MONITOR_POINT, id);
+    }
+
+    /*
+     * ������������������redis
+     */
+    private void setGovMonitorPointInfoToRedis(String id, GovMonitorPoint govMonitorPointInfo) {
+        redisTemplate.opsForHash().put(RedisConstants.GOV_MONITOR_POINT, id, govMonitorPointInfo);
+    }
+
+    /*
+     * ���redis������������������
+     */
+    private void delGovMonitorPointInfoFromRedis(String id) {
+        redisTemplate.opsForHash().delete(RedisConstants.GOV_MONITOR_POINT, id);
+    }
+
+    @Override
+    public Map<String, Object> getDataByCondition(Map map) {
+        Map<String,Object> resultMap = new HashMap<>();
+        if (!map.containsKey("current")||!map.containsKey("size")){
+            resultMap.put("code",ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode());
+            resultMap.put("msg",ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+            return resultMap;
+        }
+        int current = Integer.parseInt(map.get("current").toString());
+        int size = Integer.parseInt(map.get("size").toString());
+        Page<GovMonitorPoint> page = new Page<>(current,size);
+        QueryWrapper<GovMonitorPoint> wrapper_Condition = new QueryWrapper<>();
+        wrapper_Condition.eq("is_delete",Constants.NOT_DELETE);
+        if (!ObjectUtils.isEmpty(map.get("name"))){
+            wrapper_Condition.like("name",map.get("name").toString());
+        }
+        if (!ObjectUtils.isEmpty(map.get("stationLevel"))){
+            wrapper_Condition.like("station_level",map.get("stationLevel").toString());
+        }
+        wrapper_Condition.orderByDesc("create_time");
+        Page resultPage = govMonitorPointMapper.selectPage(page,wrapper_Condition);
+        int totalNumber = govMonitorPointMapper.selectCount(wrapper_Condition);
+        List<GovMonitorPoint> govMonitorPoints = resultPage.getRecords();
+        SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        List<Map<String,Object>> govMonitorPointList = new ArrayList<>();
+        for (GovMonitorPoint govMonitorPoint:govMonitorPoints) {
+            Map govMonitorPointMap = JSON.parseObject(JSON.toJSONString(govMonitorPoint),Map.class);
+            String createTime = SDF.format(govMonitorPoint.getCreateTime());
+            String updateTime = SDF.format(govMonitorPoint.getUpdateTime());
+            govMonitorPointMap.put("createTime",createTime);
+            govMonitorPointMap.put("updateTime",updateTime);
+            String position = "";
+            if (!ObjectUtils.isEmpty(govMonitorPoint.getProvinceCode())){
+                QueryWrapper<SysArea> wrapper_province = new QueryWrapper<>();
+                wrapper_province.eq("area_code",govMonitorPoint.getProvinceCode());
+                SysArea sysArea_provice = sysAreaMapper.selectOne(wrapper_province);
+                if (!ObjectUtils.isEmpty(sysArea_provice)){
+                    position = position+sysArea_provice.getAreaName();
+                    if (!ObjectUtils.isEmpty(govMonitorPoint.getCityCode())){
+                        QueryWrapper<SysArea> wrapper_city = new QueryWrapper<>();
+                        wrapper_city.eq("area_code",govMonitorPoint.getCityCode());
+                        SysArea sysArea_city = sysAreaMapper.selectOne(wrapper_city);
+                        if (!ObjectUtils.isEmpty(sysArea_city)){
+                            position = position+"/"+sysArea_city.getAreaName();
+                            if (!ObjectUtils.isEmpty(govMonitorPoint.getAreaCode())){
+                                QueryWrapper<SysArea> wrapper_area = new QueryWrapper<>();
+                                wrapper_area.eq("area_code",govMonitorPoint.getAreaCode());
+                                SysArea sysArea_area = sysAreaMapper.selectOne(wrapper_area);
+                                if (!ObjectUtils.isEmpty(sysArea_area)){
+                                    position = position+"/"+sysArea_area.getAreaName();
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            govMonitorPointMap.put("position",position);
+            govMonitorPointList.add(govMonitorPointMap);
+        }
+        resultMap.put("govMonitorPointList",govMonitorPointList);
+        resultMap.put("totalNumber",totalNumber);
+        resultMap.put("current",current);
+        int totalPageNumber = totalNumber/size;
+        if(totalNumber%size != 0){
+            totalPageNumber += 1;
+        }
+        resultMap.put("totalPageNumber",totalPageNumber);
+        return resultMap;
+    }
+
+    @Transactional
+    @Override
+    public void insert(GovMonitorPoint govMonitorPoint) {
+        int count = govMonitorPointMapper.insert(govMonitorPoint);
+        //������������redis
+        setGovMonitorPointInfoToRedis(govMonitorPoint.getId().toString(),selectGovMonitorPointInfoById(govMonitorPoint.getId()));
+        if (count > 0){
+            //������������������
+            HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+            StringBuilder content = new StringBuilder();
+            content.append("������������������������").append("id:").append(govMonitorPoint.getId()+";").append(govMonitorPoint.getName()+";").append(":").append("guid���").append(govMonitorPoint.getGuid()+";");
+            logUtils.saveOperationForManage(request, content.toString(), Constants.INSERT_OPERATE_TYPE);
+        }
+    }
+
+    @Transactional
+    @Override
+    public void update(GovMonitorPoint govMonitorPoint) {
+        Integer id = govMonitorPoint.getId();
+        GovMonitorPoint oldGovMonitorPoint = govMonitorPointMapper.selectById(id);
+        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(oldGovMonitorPoint.getGuid()).append("->").append(govMonitorPoint.getGuid()).append(";");
+        }
+        if (!ObjectUtils.isEmpty(govMonitorPoint.getName())){
+            content.append("name:").append(oldGovMonitorPoint.getName()).append("->").append(govMonitorPoint.getName()).append(";");
+        }
+        if (!ObjectUtils.isEmpty(govMonitorPoint.getLongitude())){
+            content.append("longitude:").append(oldGovMonitorPoint.getLongitude()).append("->").append(govMonitorPoint.getLongitude()).append(";");
+        }
+        if (!ObjectUtils.isEmpty(govMonitorPoint.getLatitude())){
+            content.append("latitude:").append(oldGovMonitorPoint.getLatitude()).append("->").append(govMonitorPoint.getLatitude()).append(";");
+        }
+        if (!ObjectUtils.isEmpty(govMonitorPoint.getProvinceCode())){
+            content.append("provinceCode:").append(oldGovMonitorPoint.getProvinceCode()).append("->").append(govMonitorPoint.getProvinceCode()).append(";");
+        }
+        if (!ObjectUtils.isEmpty(govMonitorPoint.getCityCode())){
+            content.append("cityCode:").append(oldGovMonitorPoint.getCityCode()).append("->").append(govMonitorPoint.getCityCode()).append(";");
+        }
+        if (!ObjectUtils.isEmpty(govMonitorPoint.getAreaCode())){
+            content.append("areaCode:").append(oldGovMonitorPoint.getAreaCode()).append("->").append(govMonitorPoint.getAreaCode()).append(";");
+        }
+        if (!ObjectUtils.isEmpty(govMonitorPoint.getStationLevel())){
+            content.append("stationLevel:").append(oldGovMonitorPoint.getStationLevel()).append("->").append(govMonitorPoint.getStationLevel()).append(";");
+        }
+        if (!ObjectUtils.isEmpty(govMonitorPoint.getDesc())){
+            content.append("desc:").append(oldGovMonitorPoint).append("->").append(govMonitorPoint.getDesc()).append(";");
+        }
+        logUtils.saveOperationForManage(request, content.toString(), Constants.UPDATE_OPERATE_TYPE);
+    }
+
+    @Override
+    public void delete(Integer id) {
+        UpdateWrapper<GovMonitorPoint> wrapper_delete = new UpdateWrapper<>();
+        wrapper_delete.eq("id",id).set("is_delete",Constants.DELETE);
+        govMonitorPointMapper.update(null,wrapper_delete);
+        //������redis
+        delGovMonitorPointInfoFromRedis(id.toString());
+        //������������������
+        HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+        StringBuilder content = new StringBuilder();
+        content.append("������������������").append("id:").append(id).append(";");
+        logUtils.saveOperationForManage(request, content.toString(), Constants.DELETE_OPERATE_TYPE);
+    }
+
+    @Override
+    public GovMonitorPoint selectGovMonitorPointInfoById(int id) {
+        GovMonitorPoint govMonitorPoint = govMonitorPointMapper.selectById(id);
+        return govMonitorPoint;
+    }
+}
diff --git a/screen-manage/src/main/resources/mapper/GovMonitorPointMapper.xml b/screen-manage/src/main/resources/mapper/GovMonitorPointMapper.xml
new file mode 100644
index 0000000..1bd2fcc
--- /dev/null
+++ b/screen-manage/src/main/resources/mapper/GovMonitorPointMapper.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.GovMonitorPointMapper">
+
+        <!-- ������������������������ -->
+        <resultMap id="BaseResultMap" type="com.moral.api.entity.GovMonitorPoint">
+                    <id column="id" property="id" />
+                    <result column="gov_code" property="govCode" />
+                    <result column="name" property="name" />
+                    <result column="longitude" property="longitude" />
+                    <result column="latitude" property="latitude" />
+                    <result column="province_code" property="provinceCode" />
+                    <result column="city_code" property="cityCode" />
+                    <result column="area_code" property="areaCode" />
+                    <result column="gov_type" property="govType" />
+                    <result column="create_time" property="createTime" />
+                    <result column="update_time" property="updateTime" />
+                    <result column="is_delete" property="isDelete" />
+                    <result column="desc" property="desc" />
+        </resultMap>
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.8.0