From ead280567beb29e26e0980c6b3770815e6fe86d9 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期日, 12 十一月 2023 10:09:14 +0800
Subject: [PATCH] 油烟统计

---
 ycl-platform/src/main/java/com/ycl/service/video/impl/VideoPointServiceImpl.java       |   14 
 ycl-platform/src/main/resources/application-dev.yml                                    |    2 
 ycl-platform/src/main/java/com/ycl/service/video/impl/IVideoPointService.java          |    2 
 ycl-smoke/src/main/java/com/ycl/smoke/remote/service/ISmokeDetectionService.java       |   29 +
 ycl-common/src/main/java/com/ycl/enums/common/DictTypeEnum.java                        |    5 
 ycl-platform/src/main/java/com/ycl/controller/smoke/OdsStatisticsController.java       |   66 +++
 ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCurAlarm.java                          |    8 
 ycl-platform/src/main/java/com/ycl/service/region/impl/SccgRegionServiceImpl.java      |    8 
 ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCurAlarmService.java                 |    1 
 ycl-platform/src/main/java/com/ycl/service/video/IVideoAlarmReportService.java         |    2 
 ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsStatisticsMapper.java                  |   17 +
 ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java         |   10 
 ycl-platform/src/main/java/com/ycl/service/dict/IDataDictionaryService.java            |    2 
 ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParam2Dto.java                       |   47 ++
 ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamChildDto.java                   |    7 
 ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamDto.java                        |    2 
 ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java |    7 
 ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsStatistics.java                        |   46 ++
 ycl-platform/src/main/java/com/ycl/dto/video/HKAlarmParam.java                         |  105 ++++++
 ycl-platform/src/main/java/com/ycl/controller/platformApi/TranspondDHController.java   |  135 +++++++
 ycl-platform/src/main/java/com/ycl/service/region/ISccgRegionService.java              |    2 
 ycl-platform/src/main/java/com/ycl/service/smoke/IOdsStatisticsService.java            |   17 +
 ycl-platform/src/main/java/com/ycl/service/dict/impl/DataDictionaryServiceImpl.java    |    9 
 ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsStatisticsServiceImpl.java       |   23 +
 ycl-platform/src/main/java/com/ycl/service/caseHandler/IViolationsService.java         |    2 
 ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/ViolationsServiceImpl.java |   76 +++
 ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamChild2Dto.java                  |   50 ++
 ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsStatisticsService.java               |   17 +
 ycl-smoke/src/main/java/com/ycl/smoke/utils/HttpUtil.java                              |    2 
 ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCurAlarmServiceImpl.java         |   14 
 ycl-smoke/src/main/java/com/ycl/smoke/task/ScheduledTask.java                          |  128 +++++++
 ycl-smoke/src/main/java/com/ycl/smoke/dto/DataDetectorDailyStatsParamDto.java          |   21 +
 ycl-smoke/src/main/resources/mapper/smoke/OdsStatisticsMapper.xml                      |   17 +
 ycl-platform/src/main/java/com/ycl/mapper/smoke/OdsStatisticsMapper.java               |   16 
 ycl-platform/src/main/java/com/ycl/entity/smoke/OdsStatistics.java                     |   46 ++
 ycl-platform/src/main/java/com/ycl/entity/region/SccgRegion.java                       |    4 
 ycl-platform/src/main/java/com/ycl/service/smoke/impl/OdsStatisticsServiceImpl.java    |   34 ++
 37 files changed, 971 insertions(+), 22 deletions(-)

diff --git a/ycl-common/src/main/java/com/ycl/enums/common/DictTypeEnum.java b/ycl-common/src/main/java/com/ycl/enums/common/DictTypeEnum.java
index 94974c3..f84d4c4 100644
--- a/ycl-common/src/main/java/com/ycl/enums/common/DictTypeEnum.java
+++ b/ycl-common/src/main/java/com/ycl/enums/common/DictTypeEnum.java
@@ -37,10 +37,11 @@
 
     /**
      * 鑾峰緱鎵�鏈夋灇涓剧被鍨嬪埌map
+     *
      * @return
      */
-    public static Map<String,String> getAllToMap() {
-        Map<String,String> map = new HashMap<>();
+    public static Map<String, String> getAllToMap() {
+        Map<String, String> map = new HashMap<>();
         for (DictTypeEnum alarmType : values()) {
             map.put(alarmType.getCode(), alarmType.getType());
         }
diff --git a/ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java b/ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java
index 84df694..b36d4d7 100644
--- a/ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java
+++ b/ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java
@@ -7,6 +7,7 @@
 import com.ycl.annotation.LogSave;
 import com.ycl.api.CommonResult;
 import com.ycl.dto.video.AlarmParam;
+import com.ycl.dto.video.HKAlarmParam;
 import com.ycl.entity.video.VideoPoint;
 import com.ycl.enums.common.ResultCode;
 import com.ycl.service.video.IVideoAlarmReportService;
@@ -66,6 +67,15 @@
         return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage());
     }
 
+    @ApiOperation("娴峰悍瑙嗛鎶ヨ鎺ㄩ�丄PI")
+    @PostMapping("/HK/alarmReport")
+    @LogSave(operationType = "鎶ヨ绠$悊", contain = "娴峰悍瑙嗛鎶ヨ鎺ㄩ��")
+    public CommonResult hkAlarmReport(@RequestBody @Validated HKAlarmParam alarmParam) {
+//        System.out.println("淇濆瓨鎶ヨ鏁版嵁锛�" + JSONObject.toJSONString(alarmParam));
+        videoAlarmReportService.saveFromHK(alarmParam);
+        return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage());
+    }
+
     @GetMapping("/Video/{code}/{subType}")
     @ApiOperation(value = "璁惧鑾峰彇鐩戞帶鍦板潃")
     @SneakyThrows
diff --git a/ycl-platform/src/main/java/com/ycl/controller/platformApi/TranspondDHController.java b/ycl-platform/src/main/java/com/ycl/controller/platformApi/TranspondDHController.java
new file mode 100644
index 0000000..01cdf10
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/controller/platformApi/TranspondDHController.java
@@ -0,0 +1,135 @@
+package com.ycl.controller.platformApi;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ycl.annotation.LogSave;
+import com.ycl.api.CommonResult;
+import com.ycl.dto.v1.Req.FirstReq;
+import com.ycl.dto.v1.Req.SecondReq;
+import com.ycl.dto.v1.Res.FirstRes;
+import com.ycl.dto.video.AlarmParam;
+import com.ycl.enums.common.ResultCode;
+import com.ycl.utils.MD5Util;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.*;
+import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.client.DefaultResponseErrorHandler;
+import org.springframework.web.client.RestTemplate;
+
+import java.net.URI;
+
+@Api(tags = "绗笁鏂规帴鍙�-澶у崕")
+@RestController
+@RequestMapping("/API/videoService/eventCenter/messages")
+public class TranspondDHController {
+
+    @Value("${videoPoint.url}")
+    private String url;
+
+    @Value("${videoPoint.userName}")
+    private String userName;
+
+    @Value("${videoPoint.passWord}")
+    private String passWord;
+
+    @Value("${videoPoint.ip}")
+    private String ip;
+
+    @ApiOperation("娑堟伅璁㈤槄")
+    @GetMapping("/subscribeAddress")
+    public CommonResult subscribeAddress() {
+        String url = "/videoService/eventCenter/messages/subscribeAddress";
+        return getResult(url, "");
+    }
+
+    @ApiOperation("闀胯疆璇㈣幏鍙栨秷鎭�")
+    @GetMapping("/subscribe")
+    public CommonResult subscribe(@RequestParam Integer type,
+                                  @RequestParam Integer msgId,
+                                  @RequestParam(required = false) Integer msgNum,
+                                  @RequestParam(required = false) Integer waitSec) {
+        String url = "/videoService/eventCenter/messages/subscribe";
+        String param = "?type=" + type + "&msgId=" + msgId + "&msgNum=" + msgNum + "&waitSec=" + waitSec;
+        return getResult(url, param);
+    }
+
+    private CommonResult<?> getResult(String url, String param) {
+        try {
+            String token = getToken();
+
+            HttpHeaders deviceHeaders = new HttpHeaders();
+            ObjectMapper objectMapper = new ObjectMapper();
+            deviceHeaders.add("X-Subject-Token", token);
+            HttpEntity<Object> deviceEntity = new HttpEntity<>(deviceHeaders);
+
+            RestTemplate restTemplate = new RestTemplate();
+            ResponseEntity<String> exchange = restTemplate.exchange(url + param, HttpMethod.GET, deviceEntity, String.class);
+            System.out.println(exchange);
+            return CommonResult.success(exchange);
+        } catch (Exception ex) {
+            return CommonResult.failed();
+        }
+    }
+
+
+    private String getToken() throws JsonProcessingException {
+
+        String clientType = "winpc";
+        String reqUrl = "/videoService/accounts/authorize";
+        RestTemplate restTemplate = new RestTemplate();
+        restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
+            @Override
+            public boolean hasError(HttpStatus status) {
+                return super.hasError(status);
+            }
+
+            @Override
+            public void handleError(URI url, HttpMethod method, ClientHttpResponse response) {
+
+            }
+        });
+        SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
+        simpleClientHttpRequestFactory.setOutputStreaming(false);
+        restTemplate.setRequestFactory(simpleClientHttpRequestFactory);
+
+        //璇锋眰澶�
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+
+        //绗竴娆℃潈闄愯姹備綋
+        FirstReq firstReq = new FirstReq();
+        firstReq.setIpAddress(ip);
+        firstReq.setUserName(userName);
+        firstReq.setClientType(clientType);
+        ObjectMapper objectMapper = new ObjectMapper();
+
+        HttpEntity<String> firstEntity = new HttpEntity<>(objectMapper.writeValueAsString(firstReq), httpHeaders);
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url + reqUrl, firstEntity, String.class);
+
+        FirstRes firstRes = objectMapper.readValue(responseEntity.getBody(), FirstRes.class);
+
+        String signature = MD5Util.md5Encrypt(passWord);
+        signature = MD5Util.md5Encrypt(userName + signature);
+        signature = MD5Util.md5Encrypt(signature);
+        signature = MD5Util.md5Encrypt(userName + ":" + firstRes.getRealm() + ":" + signature);
+        signature = MD5Util.md5Encrypt(signature + ":" + firstRes.getRandomKey());
+
+        SecondReq secondReq = new SecondReq();
+        secondReq.setIpAddress(ip);
+        secondReq.setEncryptType(firstRes.getEncryptType());
+        secondReq.setSignature(signature);
+        secondReq.setRandomKey(firstRes.getRandomKey());
+        secondReq.setClientType(clientType);
+        secondReq.setUserName(userName);
+
+        HttpEntity<String> secondEntity = new HttpEntity<>(objectMapper.writeValueAsString(secondReq), httpHeaders);
+        ResponseEntity<String> secondResEntity = restTemplate.postForEntity(url + reqUrl, secondEntity, String.class);
+        return objectMapper.readTree(secondResEntity.getBody()).get("token").textValue();
+    }
+
+}
diff --git a/ycl-platform/src/main/java/com/ycl/controller/smoke/OdsStatisticsController.java b/ycl-platform/src/main/java/com/ycl/controller/smoke/OdsStatisticsController.java
new file mode 100644
index 0000000..d7b0966
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/controller/smoke/OdsStatisticsController.java
@@ -0,0 +1,66 @@
+package com.ycl.controller.smoke;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ycl.annotation.LogSave;
+import com.ycl.api.CommonPage;
+import com.ycl.api.CommonResult;
+import com.ycl.controller.BaseController;
+import com.ycl.entity.smoke.OdsCurAlarm;
+import com.ycl.entity.smoke.OdsCustomer;
+import com.ycl.entity.smoke.OdsStatistics;
+import com.ycl.service.smoke.IOdsCurAlarmService;
+import com.ycl.service.smoke.IOdsStatisticsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/smoke")
+@Api(tags = "娌圭儫绠$悊绠$悊-缁熻鏁版嵁鏁版嵁")
+public class OdsStatisticsController extends BaseController {
+
+    IOdsStatisticsService odsStatisticsService;
+    IOdsCurAlarmService curAlarmService;
+
+    @Autowired
+    public void setOdsStatisticsService(IOdsStatisticsService odsStatisticsService) {
+        this.odsStatisticsService = odsStatisticsService;
+    }
+
+    @Autowired
+    public void setCurAlarmService(IOdsCurAlarmService curAlarmService) {
+        this.curAlarmService = curAlarmService;
+    }
+
+    @ApiOperation("妫�娴嬩华鎬讳綋鎯呭喌鎶ヨ〃")
+    @RequestMapping(value = "/statistics/listDataDetectorDailyStats", method = RequestMethod.GET)
+    @ResponseBody
+    @LogSave(operationType = "娌圭儫妯″潡", contain = "妫�娴嬩华鎬讳綋鎯呭喌鎶ヨ〃")
+    public CommonResult<String> findDataDetectorDailyStats() {
+        OdsStatistics odsStatistics = odsStatisticsService.getByType("listDataDetectorDailyStats");
+        return CommonResult.success(odsStatistics.getContent());
+    }
+
+
+    @ApiOperation("娌圭儫鍑忔帓缁熻")
+    @RequestMapping(value = "/statistics/listDetectorDaily", method = RequestMethod.GET)
+    @ResponseBody
+    @LogSave(operationType = "娌圭儫妯″潡", contain = "娌圭儫鍑忔帓缁熻")
+    public CommonResult<String> findDetectorDaily() {
+        OdsStatistics odsStatistics = odsStatisticsService.getByType("listDetectorDaily");
+        return CommonResult.success(odsStatistics.getContent());
+    }
+
+    @ApiOperation("鐩戞祴鎶ヨ缁熻&杩愮淮鎯呭喌鎶ヨ〃")
+    @RequestMapping(value = "/statistics/listCurAlarm", method = RequestMethod.GET)
+    @ResponseBody
+    @LogSave(operationType = "娌圭儫妯″潡", contain = "鐩戞祴鎶ヨ缁熻&杩愮淮鎯呭喌鎶ヨ〃")
+    public CommonResult<List<OdsCurAlarm>> findCurAlarm() {
+        List<OdsCurAlarm> list = curAlarmService.list();
+        return CommonResult.success(list);
+    }
+}
diff --git a/ycl-platform/src/main/java/com/ycl/dto/video/HKAlarmParam.java b/ycl-platform/src/main/java/com/ycl/dto/video/HKAlarmParam.java
new file mode 100644
index 0000000..b17d322
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/dto/video/HKAlarmParam.java
@@ -0,0 +1,105 @@
+package com.ycl.dto.video;
+
+import io.swagger.models.auth.In;
+import lombok.Data;
+
+@Data
+public class HKAlarmParam {
+    /**
+     * 浜嬩欢鍞竴鏍囪瘑
+     */
+    private String eventId;
+    /**
+     * 涓婃姤浜虹數璇�
+     */
+    private String contact;
+    /**
+     * 浜嬩欢鍐呭
+     */
+    private String eventContent;
+    /**
+     * 瀵规柟浜嬩欢缂栧彿
+     */
+    private String eventNumber;
+    /**
+     * 浜嬮」鍚嶇О
+     */
+    private String eventType;
+    /**
+     * 浜嬩欢瑙勬ā(1鐗瑰ぇ,2閲嶅ぇ,3涓�鑸�)
+     */
+    private String eventscale;
+    /**
+     * 闄勪欢锛屽涓敤閫楀彿闅斿紑
+     */
+    private String fileUrl;
+    /**
+     * 鐪佸ぇ绫�
+     */
+    private String firsttype;
+    /**
+     * 鏄惁閲嶇偣鍦烘墍(0:鍚�;1:鏄�)
+     */
+    private Integer focusSite;
+    /**
+     * 浜嬪彂鏃堕棿
+     */
+    private String incidentDate;
+    /**
+     * 鏄惁閲嶇偣浜嬩欢(0鍚︼紝1鏄�)
+     */
+    private Integer keyEvent;
+    /**
+     * 绾害
+     */
+    private Double latitude;
+    /**
+     * 缁忓害
+     */
+    private Double longitude;
+    /**
+     * 鐪乤dcode
+     */
+    private String prefectureCodeIdaas;
+    /**
+     * 娑変簨浜烘暟
+     */
+    private String relatepeoplecount;
+    /**
+     * 涓婃姤浜哄鍚�
+     */
+    private String reportUserName;
+    /**
+     * 涓婃姤鏃堕棿
+     */
+    private String reportedDate;
+    /**
+     * 涓婃姤绯荤粺鍚嶇О
+     */
+    private String reportedDepartment;
+    /**
+     * 浜嬪彂鍦扮偣
+     */
+    private String scene;
+    /**
+     * 鐪佸皬绫�
+     */
+    private String secondtype;
+    /**
+     * 浜嬩欢鏍囬
+     */
+    private String subject;
+    /**
+     * 浜嬩欢鏉ユ簮绯荤粺
+     */
+    private String synergySource;
+    /**
+     * 鐪佺粏鍒嗙被
+     */
+    private String thirdtype;
+    /**
+     * 绱ф�ョ▼搴�(1:绱ф��;2闈炵揣鎬�)
+     */
+    private String urgentExtent;
+
+}
diff --git a/ycl-platform/src/main/java/com/ycl/entity/region/SccgRegion.java b/ycl-platform/src/main/java/com/ycl/entity/region/SccgRegion.java
index 8b9f4fc..a583805 100644
--- a/ycl-platform/src/main/java/com/ycl/entity/region/SccgRegion.java
+++ b/ycl-platform/src/main/java/com/ycl/entity/region/SccgRegion.java
@@ -46,6 +46,10 @@
     @ApiModelProperty(value = "榛樿0")
     private Long parentId;
 
+    @TableField("region_code")
+    @ApiModelProperty(value = "鍦板煙缂栫爜")
+    private String regionCode;
+
     /**
      * 绫诲瀷1-琛楅亾2-绀惧尯3-涔�4-闀�
      */
diff --git a/ycl-platform/src/main/java/com/ycl/entity/smoke/OdsStatistics.java b/ycl-platform/src/main/java/com/ycl/entity/smoke/OdsStatistics.java
new file mode 100644
index 0000000..62f9c98
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/entity/smoke/OdsStatistics.java
@@ -0,0 +1,46 @@
+package com.ycl.entity.smoke;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ums_ods_statistics")
+public class OdsStatistics implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Id
+     */
+    @TableId("id")
+    @JsonProperty("Id")
+    private String id;
+
+    /**
+     * 璁惧鐨刴n鏁版嵁
+     */
+    @TableField("type_name")
+    private String typeName;
+
+    /**
+     * 鏁版嵁鏀堕泦鏃堕棿
+     */
+    @TableField("content")
+    private String content;
+
+}
diff --git a/ycl-platform/src/main/java/com/ycl/mapper/smoke/OdsStatisticsMapper.java b/ycl-platform/src/main/java/com/ycl/mapper/smoke/OdsStatisticsMapper.java
new file mode 100644
index 0000000..39ca1ce
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/mapper/smoke/OdsStatisticsMapper.java
@@ -0,0 +1,16 @@
+package com.ycl.mapper.smoke;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.entity.smoke.OdsStatistics;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface OdsStatisticsMapper extends BaseMapper<OdsStatistics> {
+
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/caseHandler/IViolationsService.java b/ycl-platform/src/main/java/com/ycl/service/caseHandler/IViolationsService.java
index 2889d34..143330f 100644
--- a/ycl-platform/src/main/java/com/ycl/service/caseHandler/IViolationsService.java
+++ b/ycl-platform/src/main/java/com/ycl/service/caseHandler/IViolationsService.java
@@ -1,5 +1,6 @@
 package com.ycl.service.caseHandler;
 
+import com.ycl.dto.video.HKAlarmParam;
 import com.ycl.entity.caseHandler.Violations;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ycl.entity.video.VideoAlarmReport;
@@ -27,5 +28,6 @@
      */
     void saveFromVideo(List<VideoAlarmReport> videoAlarmReports);
 
+    void saveFromHKVideo(HKAlarmParam alarmParam);
     List<VideoAndAreaVO> selectType();
 }
diff --git a/ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/ViolationsServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/ViolationsServiceImpl.java
index eea6be4..b32471e 100644
--- a/ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/ViolationsServiceImpl.java
+++ b/ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/ViolationsServiceImpl.java
@@ -3,11 +3,13 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.common.util.UtilNumber;
+import com.ycl.dto.video.HKAlarmParam;
 import com.ycl.entity.caseHandler.BaseCase;
 import com.ycl.entity.caseHandler.EventSource;
 import com.ycl.entity.caseHandler.QuestionCategory;
 import com.ycl.entity.caseHandler.Violations;
 import com.ycl.entity.dict.DataDictionary;
+import com.ycl.entity.region.SccgRegion;
 import com.ycl.entity.resources.ImageResources;
 import com.ycl.entity.video.VideoAlarmReport;
 import com.ycl.entity.video.VideoPoint;
@@ -17,6 +19,7 @@
 import com.ycl.service.caseHandler.IBaseCaseService;
 import com.ycl.service.caseHandler.IViolationsService;
 import com.ycl.service.dict.IDataDictionaryService;
+import com.ycl.service.region.ISccgRegionService;
 import com.ycl.service.resources.IImageResourcesService;
 import com.ycl.service.video.impl.IVideoPointService;
 import com.ycl.vo.cockpit.enforcementEvents.VideoAndAreaVO;
@@ -24,8 +27,11 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.time.Instant;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.util.List;
+
 
 /**
  * <p>
@@ -42,7 +48,7 @@
     private IBaseCaseService baseCaseService;
     private IDataDictionaryService dataDictionaryService;
     private IImageResourcesService imageResourcesService;
-
+    private ISccgRegionService regionService;
     @Resource
     BaseCaseMapper baseCaseMapper;
 
@@ -69,20 +75,19 @@
         this.imageResourcesService = imageResourcesService;
     }
 
+    @Autowired
+    public void setRegionService(ISccgRegionService regionService) {
+        this.regionService = regionService;
+    }
+
     @Override
     public void saveFromVideo(List<VideoAlarmReport> videoAlarmReports) {
         for (VideoAlarmReport videoAlarmReport : videoAlarmReports) {
-            VideoPoint videoPoint = null;
-            LambdaQueryWrapper<VideoPoint> queryWrapper = new LambdaQueryWrapper<VideoPoint>()
-                    .eq(VideoPoint::getPlatResourceId, videoAlarmReport.getPlatResourceId())
-                    .or().eq(VideoPoint::getCode, videoAlarmReport.getPlatResourceId());
-            List<VideoPoint> pointList = videoPointService.list(queryWrapper);
-            if (pointList.size() > 0) {
-                videoPoint = pointList.get(0);
-            }
+
             BaseCase baseCase = BaseCase.builder().eventSource(EventSource.VIDEO.getCode()).category(QuestionCategory.VIOLATION.getCode())
                     .code(utilNumber.createCaseCode()).createTime(LocalDateTime.now()).createUser(0L).state(1).alarmTime(videoAlarmReport.getAlarmTime()).build();
             Violations violations = new Violations();
+            VideoPoint videoPoint = videoPointService.getByCode(videoAlarmReport.getPlatResourceId());
             if (videoPoint != null) {
                 baseCase.setLatitude(videoPoint.getLatitude());
                 baseCase.setLongitude(videoPoint.getLongitude());
@@ -120,6 +125,59 @@
     }
 
     @Override
+    public void saveFromHKVideo(HKAlarmParam alarmParam) {
+
+        SccgRegion region = regionService.getByCode(alarmParam.getPrefectureCodeIdaas());
+        VideoPoint videoPoint = videoPointService.getByCode(alarmParam.getEventNumber());
+
+        List<DataDictionary> dataDictionaries = dataDictionaryService.queryByRemark(alarmParam.getSubject());
+
+        Instant instant = Instant.ofEpochMilli(Long.parseLong(alarmParam.getIncidentDate()));
+
+        BaseCase baseCase = BaseCase.builder().eventSource(1).category(QuestionCategory.VIOLATION.getCode())
+                .code(utilNumber.createCaseCode()).createTime(LocalDateTime.now()).createUser(0L).state(1).
+                alarmTime(LocalDateTime.ofInstant(instant, ZoneId.systemDefault())).build();
+        Violations violations = new Violations();
+
+        baseCase.setLatitude(alarmParam.getLatitude());
+        baseCase.setLongitude(alarmParam.getLongitude());
+        if (region != null) {
+            baseCase.setStreetId(region.getId().intValue());
+        }
+        baseCase.setSite(alarmParam.getScene());
+
+        baseCaseService.save(baseCase);
+        violations.setId(baseCase.getId());
+
+        if (dataDictionaries.size() > 0) {
+            violations.setGradeId(dataDictionaries.get(0).getId());
+        }
+
+        violations.setDescription(alarmParam.getEventContent());
+        violations.setInformant(alarmParam.getReportUserName());
+        violations.setInformantPhoneCode(alarmParam.getContact());
+        if (videoPoint != null) {
+            violations.setVideoPointId(videoPoint.getId());
+        }
+        baseMapper.insert(violations);
+        String[] imgs = alarmParam.getFileUrl().split(",");
+
+        try {
+            for (int i = 0; i < imgs.length; i++) {
+                ImageResources imageResources = new ImageResources();
+                imageResources.setType("01");
+                imageResources.setBelongToId(baseCase.getId());
+                imageResources.setUrl(imgs[i]);
+                imageResources.setCreateTime(LocalDateTime.now());
+                imageResourcesService.save(imageResources);
+
+            }
+        } catch (Exception ex) {
+
+        }
+    }
+
+    @Override
     public List<VideoAndAreaVO> selectType() {
         return baseCaseMapper.selectType();
     }
diff --git a/ycl-platform/src/main/java/com/ycl/service/dict/IDataDictionaryService.java b/ycl-platform/src/main/java/com/ycl/service/dict/IDataDictionaryService.java
index 587582b..5273142 100644
--- a/ycl-platform/src/main/java/com/ycl/service/dict/IDataDictionaryService.java
+++ b/ycl-platform/src/main/java/com/ycl/service/dict/IDataDictionaryService.java
@@ -35,4 +35,6 @@
     Page listViolations(Integer current, Integer size, String keyWord);
 
     List<DataDictionaryVo> queryTreeType(String typeCode, Integer level);
+
+    List<DataDictionary> queryByRemark(String remark);
 }
diff --git a/ycl-platform/src/main/java/com/ycl/service/dict/impl/DataDictionaryServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/dict/impl/DataDictionaryServiceImpl.java
index 454d2ca..2f34e0b 100644
--- a/ycl-platform/src/main/java/com/ycl/service/dict/impl/DataDictionaryServiceImpl.java
+++ b/ycl-platform/src/main/java/com/ycl/service/dict/impl/DataDictionaryServiceImpl.java
@@ -83,4 +83,13 @@
     public List<DataDictionaryVo> queryTreeType(String typeCode, Integer level) {
         return baseMapper.queryTreeType(typeCode, level);
     }
+
+    @Override
+    public List<DataDictionary> queryByRemark(String remark) {
+        LambdaQueryWrapper<DataDictionary> queryWrapper = new LambdaQueryWrapper<DataDictionary>()
+                .eq(DataDictionary::getRemark, remark);
+
+        List<DataDictionary> dataDictionary = dataDictionaryMapper.selectList(queryWrapper);
+        return dataDictionary;
+    }
 }
diff --git a/ycl-platform/src/main/java/com/ycl/service/region/ISccgRegionService.java b/ycl-platform/src/main/java/com/ycl/service/region/ISccgRegionService.java
index 2cac581..a325270 100644
--- a/ycl-platform/src/main/java/com/ycl/service/region/ISccgRegionService.java
+++ b/ycl-platform/src/main/java/com/ycl/service/region/ISccgRegionService.java
@@ -24,4 +24,6 @@
     Page<SccgRegion> list(Integer pageSize, Integer pageNum);
 
     List<SccgRegion> getChildren(Long parentId);
+
+    SccgRegion getByCode(String code);
 }
diff --git a/ycl-platform/src/main/java/com/ycl/service/region/impl/SccgRegionServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/region/impl/SccgRegionServiceImpl.java
index 02929fd..9f578e5 100644
--- a/ycl-platform/src/main/java/com/ycl/service/region/impl/SccgRegionServiceImpl.java
+++ b/ycl-platform/src/main/java/com/ycl/service/region/impl/SccgRegionServiceImpl.java
@@ -101,4 +101,12 @@
         List<SccgRegion> regions = baseMapper.selectList(wrapper);
         return regions;
     }
+
+    @Override
+    public SccgRegion getByCode(String code) {
+        LambdaQueryWrapper<SccgRegion> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SccgRegion::getRegionCode, code);
+
+        return baseMapper.selectOne(wrapper);
+    }
 }
diff --git a/ycl-platform/src/main/java/com/ycl/service/smoke/IOdsStatisticsService.java b/ycl-platform/src/main/java/com/ycl/service/smoke/IOdsStatisticsService.java
new file mode 100644
index 0000000..adb6a5d
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/smoke/IOdsStatisticsService.java
@@ -0,0 +1,17 @@
+package com.ycl.service.smoke;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.entity.smoke.OdsStatistics;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅 鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface IOdsStatisticsService extends IService<OdsStatistics> {
+
+    OdsStatistics getByType(String typeName);
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/smoke/impl/OdsStatisticsServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/smoke/impl/OdsStatisticsServiceImpl.java
new file mode 100644
index 0000000..1af3b00
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/service/smoke/impl/OdsStatisticsServiceImpl.java
@@ -0,0 +1,34 @@
+package com.ycl.service.smoke.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.entity.caseHandler.WorkflowConfigStep;
+import com.ycl.entity.smoke.OdsStatistics;
+import com.ycl.mapper.smoke.OdsStatisticsMapper;
+import com.ycl.service.smoke.IOdsStatisticsService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Service
+public class OdsStatisticsServiceImpl extends ServiceImpl<OdsStatisticsMapper, OdsStatistics> implements IOdsStatisticsService {
+
+    @Override
+    public OdsStatistics getByType(String typeName) {
+        LambdaQueryWrapper<OdsStatistics> queryWrapper = new LambdaQueryWrapper<OdsStatistics>().eq(OdsStatistics::getTypeName, typeName).orderByDesc(OdsStatistics::getId);
+        List<OdsStatistics> list = this.list(queryWrapper);
+        if (list.size() > 0) {
+            return list.get(0);
+        }
+        return null;
+    }
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/video/IVideoAlarmReportService.java b/ycl-platform/src/main/java/com/ycl/service/video/IVideoAlarmReportService.java
index a745258..518a330 100644
--- a/ycl-platform/src/main/java/com/ycl/service/video/IVideoAlarmReportService.java
+++ b/ycl-platform/src/main/java/com/ycl/service/video/IVideoAlarmReportService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ycl.dto.video.AlarmParam;
+import com.ycl.dto.video.HKAlarmParam;
 import com.ycl.entity.video.VideoAlarmReport;
 
 /**
@@ -21,4 +22,5 @@
      */
     void save(AlarmParam alarmParam);
 
+    void saveFromHK(HKAlarmParam alarmParam);
 }
diff --git a/ycl-platform/src/main/java/com/ycl/service/video/impl/IVideoPointService.java b/ycl-platform/src/main/java/com/ycl/service/video/impl/IVideoPointService.java
index 81edc68..6350430 100644
--- a/ycl-platform/src/main/java/com/ycl/service/video/impl/IVideoPointService.java
+++ b/ycl-platform/src/main/java/com/ycl/service/video/impl/IVideoPointService.java
@@ -20,4 +20,6 @@
 public interface IVideoPointService extends IService<VideoPoint> {
 
     IPage<VideoPointVo> getList(Integer streetId, Integer communityId, Integer current, Integer size);
+
+    VideoPoint getByCode(String code);
 }
diff --git a/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java
index 5873897..0d822f5 100644
--- a/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java
+++ b/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java
@@ -219,6 +219,13 @@
         }
     }
 
+    @Override
+    public void saveFromHK(HKAlarmParam alarmParam) {
+        if (alarmParam != null) {
+            violationsService.saveFromHKVideo(alarmParam);
+        }
+    }
+
     private List<VideoAlarmReport> getByAlarmId(String alarmId) {
         LambdaQueryWrapper<VideoAlarmReport> queryWrapper = new LambdaQueryWrapper<VideoAlarmReport>().eq(VideoAlarmReport::getAlarmId, alarmId);
         return this.list(queryWrapper);
diff --git a/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoPointServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoPointServiceImpl.java
index f057787..ab6c578 100644
--- a/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoPointServiceImpl.java
+++ b/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoPointServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ycl.service.video.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ycl.entity.video.VideoPoint;
@@ -27,4 +28,17 @@
     public IPage<VideoPointVo> getList(Integer streetId, Integer communityId, Integer current, Integer size) {
         return baseMapper.search(new Page<>(current, size), streetId, communityId);
     }
+
+    @Override
+    public VideoPoint getByCode(String code) {
+        VideoPoint videoPoint = null;
+        LambdaQueryWrapper<VideoPoint> queryWrapper = new LambdaQueryWrapper<VideoPoint>()
+                .eq(VideoPoint::getPlatResourceId, code)
+                .or().eq(VideoPoint::getCode, code);
+        List<VideoPoint> pointList = this.list(queryWrapper);
+        if (pointList.size() > 0) {
+            videoPoint = pointList.get(0);
+        }
+        return videoPoint;
+    }
 }
diff --git a/ycl-platform/src/main/resources/application-dev.yml b/ycl-platform/src/main/resources/application-dev.yml
index b186f3c..206594e 100644
--- a/ycl-platform/src/main/resources/application-dev.yml
+++ b/ycl-platform/src/main/resources/application-dev.yml
@@ -35,7 +35,7 @@
         timeout: 0
 
   datasource:
-    url: jdbc:mysql://42.193.1.25:3306/sccg1020?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
+    url: jdbc:mysql://42.193.1.25:3306/sccg?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
     username: root
     password: 321$YcYl@1970!
     type: com.alibaba.druid.pool.DruidDataSource
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParam2Dto.java b/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParam2Dto.java
new file mode 100644
index 0000000..8ea18c4
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParam2Dto.java
@@ -0,0 +1,47 @@
+package com.ycl.smoke.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@Builder
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class CurAlarmParam2Dto {
+    /**
+     * 璧峰浣嶇疆 - 蹇呭~
+     */
+    @JsonProperty("StartAt")
+    private Integer StartAt;
+    /**
+     * 璇锋眰鏁伴噺 - 蹇呭~
+     */
+    @JsonProperty("Size")
+    private Integer Size;
+    /**
+     * 1锛氳秴鏍�2锛氬紓甯� - 蹇呭~
+     */
+    @JsonProperty("Typ")
+    private Integer Typ;
+
+    /**
+     * 鎺掑簭渚濇嵁 - 鍚�
+     */
+    @JsonProperty("SortBy")
+    private String  SortBy;
+    /**
+     * 鍗囧簭銆侀檷搴�
+     */
+    @JsonProperty("SortMode")
+    private String SortMode;
+
+
+    @JsonProperty("Param")
+    private CurAlarmParamChild2Dto Param;
+}
+
+
+
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamChild2Dto.java b/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamChild2Dto.java
new file mode 100644
index 0000000..85dc83d
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamChild2Dto.java
@@ -0,0 +1,50 @@
+package com.ycl.smoke.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@Builder
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class CurAlarmParamChild2Dto {
+    /**
+     * 鏄�	鏄惁闇�瑕佹渶楂樻祿搴︽棩鏈�
+     */
+    @JsonProperty("WithCEmissionsMaxDate")
+    public Boolean WithCEmissionsMaxDate;
+
+    @JsonProperty("LocaleWithDevice")
+    public Boolean LocaleWithDevice;
+
+    /**
+     * 鏄�	鏌ヨ璧峰鏃堕棿
+     */
+    @JsonProperty("startAt")
+    public Long StartAt;
+    /**
+     * 鏄�	鏌ヨ缁撴潫鏃堕棿
+     */
+    @JsonProperty("endAt")
+    public Long EndAt;
+
+    /**
+     * 鍚�	鍋ュ悍鐮侀鑹�
+     */
+    @JsonProperty("HealthCodeColor")
+    public String HealthCodeColor;
+    /**
+     * 鍚�	璁惧缂栫爜
+     */
+    @JsonProperty("mn")
+    public String mn;
+    /**
+     * 25	鍚�	鎵�灞炲崟浣�
+     */
+    @JsonProperty("Owner")
+    public String Owner;
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamChildDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamChildDto.java
index 96dae28..4a2afff 100644
--- a/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamChildDto.java
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamChildDto.java
@@ -1,5 +1,6 @@
 package com.ycl.smoke.dto;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Builder;
 import lombok.Data;
@@ -8,12 +9,17 @@
 @Data
 @Builder
 @EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
 public class CurAlarmParamChildDto {
     /**
      * 鏄�	鏄惁闇�瑕佹渶楂樻祿搴︽棩鏈�
      */
     @JsonProperty("WithCEmissionsMaxDate")
     public Boolean WithCEmissionsMaxDate;
+
+    @JsonProperty("LocaleWithDevice")
+    public Boolean LocaleWithDevice;
+
     /**
      * 鏄�	鏌ヨ璧峰鏃堕棿
      */
@@ -24,6 +30,7 @@
      */
     @JsonProperty("EndAt")
     public Long EndAt;
+
     /**
      * 鍚�	鍋ュ悍鐮侀鑹�
      */
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamDto.java
index c5fc479..b750923 100644
--- a/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamDto.java
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/dto/CurAlarmParamDto.java
@@ -1,5 +1,6 @@
 package com.ycl.smoke.dto;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Builder;
 import lombok.Data;
@@ -8,6 +9,7 @@
 @Data
 @Builder
 @EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
 public class CurAlarmParamDto {
     /**
      * 璧峰浣嶇疆 - 蹇呭~
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/dto/DataDetectorDailyStatsParamDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/dto/DataDetectorDailyStatsParamDto.java
new file mode 100644
index 0000000..ce62b3b
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/dto/DataDetectorDailyStatsParamDto.java
@@ -0,0 +1,21 @@
+package com.ycl.smoke.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@Builder
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class DataDetectorDailyStatsParamDto {
+    // {"Typ":1,"WithAreaLocaleReport":false,"Owner":"/7686/","AcquitDateBegin":"2023-10-12","AcquitDateEnd":"2023-11-11"}:
+    @JsonProperty("Typ")
+    private Integer Typ;
+    private Boolean WithAreaLocaleReport;
+    private String Owner;
+    private String AcquitDateBegin;
+    private String AcquitDateEnd;
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCurAlarm.java b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCurAlarm.java
index b6713fc..b1b00fc 100644
--- a/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCurAlarm.java
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCurAlarm.java
@@ -209,14 +209,14 @@
      */
     @TableField("local_lat")
     @JsonProperty("LocaleLat")
-    private String localLat;
+    private String LocaleLat;
 
     /**
      * 缁忓害
      */
     @TableField("local_lng")
     @JsonProperty("LocaleLng")
-    private String localLng;
+    private String LocaleLng;
 
     /**
      * 璁惧鐨刴n鏁版嵁
@@ -237,7 +237,7 @@
      */
     @TableField("off_line_cause_by_shop_days")
     @JsonProperty("OfflineCausedByShopDays")
-    private Integer offLineCauseByShopDays;
+    private Integer OfflineCausedByShopDays;
 
     /**
      * 鎵�灞炲崟浣�
@@ -251,7 +251,7 @@
      */
     @TableField("shop_close_days")
     @JsonProperty("ShopClosedDays")
-    private Integer shopCloseDays;
+    private Integer ShopClosedDays;
 
     /**
      * 鐘舵�乕1:涓�鑸洃娴嬬偣,2:鐗规畩鐩戞祴鐐�,99:搴熷純鐩戞祴鐐筣
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsStatistics.java b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsStatistics.java
new file mode 100644
index 0000000..2636be5
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsStatistics.java
@@ -0,0 +1,46 @@
+package com.ycl.smoke.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ums_ods_statistics")
+public class OdsStatistics implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Id
+     */
+    @TableId("id")
+    @JsonProperty("Id")
+    private String id;
+
+    /**
+     * 璁惧鐨刴n鏁版嵁
+     */
+    @TableField("type_name")
+    private String typeName;
+
+    /**
+     * 鏁版嵁鏀堕泦鏃堕棿
+     */
+    @TableField("content")
+    private String content;
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsStatisticsMapper.java b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsStatisticsMapper.java
new file mode 100644
index 0000000..6241faf
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsStatisticsMapper.java
@@ -0,0 +1,17 @@
+package com.ycl.smoke.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.smoke.entity.OdsAlarmMsg;
+import com.ycl.smoke.entity.OdsStatistics;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface OdsStatisticsMapper extends BaseMapper<OdsStatistics> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/service/ISmokeDetectionService.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/service/ISmokeDetectionService.java
index 0d6f102..123c83c 100644
--- a/ycl-smoke/src/main/java/com/ycl/smoke/remote/service/ISmokeDetectionService.java
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/service/ISmokeDetectionService.java
@@ -47,6 +47,35 @@
                               @RequestHeader("Auth") String token);
 
 
+    /**
+     * 鎬讳綋鎯呭喌
+     *
+     * @param {"Typ":1,"WithAreaLocaleReport":false,"AcquitDateBegin":"2023-10-12","AcquitDateEnd":"2023-11-11"}:
+     * @param token
+     * @return
+     */
+    @PostMapping(value = "/admin/listDataDetectorDailyStats")
+    String getListDataDetectorDailyStats(@RequestBody DataDetectorDailyStatsParamDto paramDto,
+                                         @RequestHeader("Auth") String token);
+
+    /**
+     * 娌圭儫鍑忔帓
+     *
+     * @param {"StartAt":0,"Size":20,"Param":{"startAt":1697040000,"endAt":1699631999}}:
+     * @param token
+     * @return
+     */
+    @PostMapping(value = "/admin/listDetectorDaily")
+    String getListDetectorDaily(@RequestBody CurAlarmParam2Dto paramDto,
+                                @RequestHeader("Auth") String token);
+
+    /**
+     * 鐩戞祴鎶ヨ缁熻  杩愮淮鎯呭喌鎶ヨ〃
+     *
+     * @param {"StartAt":0,"Size":20,"Typ":2,"SortBy":"status","SortMode":"asc","Param":{"StartAt":1696953600,"EndAt":1699545600,"LocaleWithDevice":true}}:
+     * @param token
+     * @return
+     */
     @PostMapping(value = "/admin/listCurAlarm")
     String getListCurAlarm(@RequestBody CurAlarmParamDto paramDto,
                            @RequestHeader("Auth") String token);
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCurAlarmService.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCurAlarmService.java
index b06b155..1e18836 100644
--- a/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCurAlarmService.java
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCurAlarmService.java
@@ -13,4 +13,5 @@
  */
 public interface IOdsCurAlarmService extends IService<OdsCurAlarm> {
 
+    void saveByLocalId(OdsCurAlarm o);
 }
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsStatisticsService.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsStatisticsService.java
new file mode 100644
index 0000000..918ccb9
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsStatisticsService.java
@@ -0,0 +1,17 @@
+package com.ycl.smoke.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.smoke.entity.OdsAlarmMsg;
+import com.ycl.smoke.entity.OdsStatistics;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅 鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface IOdsStatisticsService extends IService<OdsStatistics> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCurAlarmServiceImpl.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCurAlarmServiceImpl.java
index da03bef..3d10bee 100644
--- a/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCurAlarmServiceImpl.java
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCurAlarmServiceImpl.java
@@ -1,10 +1,13 @@
 package com.ycl.smoke.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ycl.smoke.entity.OdsCurAlarm;
 import com.ycl.smoke.mapper.OdsCurAlarmMapper;
 import com.ycl.smoke.service.IOdsCurAlarmService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +20,15 @@
 @Service
 public class OdsCurAlarmServiceImpl extends ServiceImpl<OdsCurAlarmMapper, OdsCurAlarm> implements IOdsCurAlarmService {
 
+    @Override
+    public void saveByLocalId(OdsCurAlarm o) {
+        LambdaQueryWrapper<OdsCurAlarm> queryWrapper = new LambdaQueryWrapper<OdsCurAlarm>().eq(OdsCurAlarm::getLocaleId, o.getLocaleId());
+        List<OdsCurAlarm> list = this.list(queryWrapper);
+        if (list.size() > 0) {
+            o.setId(list.get(0).getId());
+            updateById(o);
+        } else {
+            save(o);
+        }
+    }
 }
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsStatisticsServiceImpl.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsStatisticsServiceImpl.java
new file mode 100644
index 0000000..297cf32
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsStatisticsServiceImpl.java
@@ -0,0 +1,23 @@
+package com.ycl.smoke.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.smoke.entity.OdsAlarmMsg;
+import com.ycl.smoke.entity.OdsStatistics;
+import com.ycl.smoke.mapper.OdsAlarmMsgMapper;
+import com.ycl.smoke.mapper.OdsStatisticsMapper;
+import com.ycl.smoke.service.IOdsAlarmMsgService;
+import com.ycl.smoke.service.IOdsStatisticsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Service
+public class OdsStatisticsServiceImpl extends ServiceImpl<OdsStatisticsMapper, OdsStatistics> implements IOdsStatisticsService {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/task/ScheduledTask.java b/ycl-smoke/src/main/java/com/ycl/smoke/task/ScheduledTask.java
index 8038a21..68846db 100644
--- a/ycl-smoke/src/main/java/com/ycl/smoke/task/ScheduledTask.java
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/task/ScheduledTask.java
@@ -4,26 +4,30 @@
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.ycl.service.redis.RedisService;
 import com.ycl.smoke.entity.*;
 import com.ycl.smoke.dto.*;
 import com.ycl.smoke.remote.service.ISmokeDetectionService;
 import com.ycl.smoke.service.*;
+import com.ycl.smoke.utils.HttpUtil;
 import com.ycl.utils.redis.RedisKey;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
 @Component
 public class ScheduledTask {
-
+    private final String host = "http://116.62.234.187:8120";
     ISmokeDetectionService smokeDetectionService;
 
     IOdsAlarmMsgService alarmMsgService;
@@ -43,6 +47,8 @@
     IOdsAlarmRecordService alarmRecordService;
 
     IOdsCurAlarmService curAlarmService;
+
+    IOdsStatisticsService odsStatisticsService;
 
     @Resource
     private RedisService redisService;
@@ -95,6 +101,11 @@
     @Autowired
     public void setDetectorDailyService(IOdsDetectorDailyService detectorDailyService) {
         this.detectorDailyService = detectorDailyService;
+    }
+
+    @Autowired
+    public void setOdsStatisticsService(IOdsStatisticsService odsStatisticsService) {
+        this.odsStatisticsService = odsStatisticsService;
     }
 
     @Scheduled(cron = "0 0 1 * * ?")   // 姣忓ぉ闆剁偣鎵ц
@@ -194,6 +205,10 @@
         }
     }
 
+    @Scheduled(cron = "0 */30 * * * ?")   // 姣�5鍒嗛挓鎵ц
+    public void loginTask() {
+        login();
+    }
 
     //    @Scheduled(cron = "0 0 1 * * ?")   // 姣忓ぉ闆剁偣鎵ц
     @Scheduled(cron = "0 */1 * * * ?")   // 姣�5鍒嗛挓鎵ц
@@ -218,7 +233,6 @@
 
     private void getInTimeData(DataIntimeParamDto paramDto) {
         try {
-            String jj = JSON.toJSONString(paramDto);
             String json = smokeDetectionService.listDataIntime(paramDto, redisService.get(RedisKey.SMOKE_TOKEN).toString());
             SmokeResultResponseDto responseDto = JSON.parseObject(json, SmokeResultResponseDto.class);
 
@@ -358,11 +372,32 @@
         }
     }
 
+    /**
+     * 鐩戞祴鎶ヨ缁熻 杩愮淮鎯呭喌鎶ヨ〃
+     */
     @Scheduled(cron = "0 0 1 * * ?")   // 姣忓ぉ闆剁偣鎵ц
 //    @Scheduled(cron = "0/1 * * * * ?")   // 姣忕鎵ц
     public void listCurAlarm() {
         try {
-            CurAlarmParamDto paramDto = CurAlarmParamDto.builder().Typ(2).build();
+            CurAlarmParamDto paramDto = CurAlarmParamDto.builder().StartAt(0).Size(20).SortBy("status").SortMode("asc").Typ(2).build();
+            CurAlarmParamChildDto childDto = CurAlarmParamChildDto.builder().build();
+
+            Calendar calendar = Calendar.getInstance();
+            calendar.set(Calendar.SECOND, 0);
+            calendar.set(Calendar.MINUTE, 0);
+            calendar.set(Calendar.HOUR_OF_DAY, 0);
+            calendar.set(Calendar.MILLISECOND, 0);
+            calendar.add(Calendar.DAY_OF_MONTH, -1);
+            long todayZero = calendar.getTimeInMillis();
+
+            calendar.add(Calendar.DAY_OF_MONTH, 1);
+            calendar.add(Calendar.MONTH, -1);
+            long lastMonthZero = calendar.getTimeInMillis();
+
+            childDto.setStartAt(lastMonthZero / 1000);
+            childDto.setEndAt(todayZero / 1000);
+            childDto.setLocaleWithDevice(true);
+            paramDto.setParam(childDto);
 
             String json = smokeDetectionService.getListCurAlarm(paramDto, redisService.get(RedisKey.SMOKE_TOKEN).toString());
             SmokeResultResponseDto responseDto = JSON.parseObject(json, SmokeResultResponseDto.class);
@@ -372,7 +407,7 @@
                 List<OdsCurAlarm> list = responseDataDto.getContent();
                 list.forEach(o -> {
                     try {
-                        curAlarmService.save(o);
+                        curAlarmService.saveByLocalId(o);
                     } catch (Exception ex) {
                         System.out.printf(ex.getMessage());
                     }
@@ -380,7 +415,7 @@
                 // alarmMsgService.saveBatch(list);
             } else if (responseDto.getStatus() == 114) {
                 login();
-                queryDataDetectorDaily2Task();
+                listCurAlarm();
             } else {
                 System.out.printf(responseDto.getData().toString());
             }
@@ -389,6 +424,89 @@
         }
     }
 
+    /**
+     * 妫�娴嬩华鎬讳綋鎯呭喌鎶ヨ〃
+     */
+    @Scheduled(cron = "0 0 1 * * ?")   // 姣忓ぉ闆剁偣鎵ц
+//    @Scheduled(cron = "0/1 * * * * ?")   // 姣忕鎵ц
+    public void listDataDetectorDailyStats() {
+        try {
+            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+            Calendar calendar = Calendar.getInstance();
+            String dateEnd = df.format(calendar.getTime());
+
+            calendar.add(Calendar.MONTH, -1);
+            String dateBegin = df.format(calendar.getTime());
+
+            DataDetectorDailyStatsParamDto paramDto = DataDetectorDailyStatsParamDto.builder().Typ(1).WithAreaLocaleReport(false)
+                    .AcquitDateBegin(dateBegin).AcquitDateEnd(dateEnd).build();
+            String json = smokeDetectionService.getListDataDetectorDailyStats(paramDto, redisService.get(RedisKey.SMOKE_TOKEN).toString());
+            SmokeResultResponseDto responseDto = JSON.parseObject(json, SmokeResultResponseDto.class);
+
+            if (responseDto.getStatus() == 200) {
+                LambdaUpdateWrapper<OdsStatistics> update = new LambdaUpdateWrapper<OdsStatistics>()
+                        .eq(OdsStatistics::getTypeName, "listDataDetectorDailyStats")
+                        .set(OdsStatistics::getContent, responseDto.getData().toString());
+
+                odsStatisticsService.update(update);
+            } else if (responseDto.getStatus() == 114) {
+                login();
+                listDataDetectorDailyStats();
+            } else {
+                System.out.printf(responseDto.getData().toString());
+            }
+        } catch (Exception ex) {
+            System.out.printf(ex.getMessage());
+        }
+    }
+
+    /**
+     * 娌圭儫鍑忔帓缁熻
+     */
+    @Scheduled(cron = "0 0 1 * * ?")   // 姣忓ぉ闆剁偣鎵ц
+//    @Scheduled(cron = "0/1 * * * * ?")   // 姣忕鎵ц
+    public void listDetectorDaily() {
+        try {
+            CurAlarmParam2Dto paramDto = CurAlarmParam2Dto.builder().StartAt(0).Size(20).build();
+            CurAlarmParamChild2Dto childDto = CurAlarmParamChild2Dto.builder().build();
+
+            Calendar calendar = Calendar.getInstance();
+            calendar.set(Calendar.SECOND, 0);
+            calendar.set(Calendar.MINUTE, 0);
+            calendar.set(Calendar.HOUR_OF_DAY, 0);
+            calendar.set(Calendar.MILLISECOND, 0);
+            calendar.add(Calendar.DAY_OF_MONTH, -1);
+            long todayZero = calendar.getTimeInMillis();
+
+            calendar.add(Calendar.DAY_OF_MONTH, 1);
+            calendar.add(Calendar.MONTH, -1);
+            long lastMonthZero = calendar.getTimeInMillis();
+
+            childDto.setStartAt(lastMonthZero / 1000);
+            childDto.setEndAt(todayZero / 1000);
+            paramDto.setParam(childDto);
+            // {"StartAt":0,"Size":20,"Param":{"startAt":1697040000,"endAt":1699631999}}:
+            String json = smokeDetectionService.getListDetectorDaily(paramDto, redisService.get(RedisKey.SMOKE_TOKEN).toString());
+            SmokeResultResponseDto responseDto = JSON.parseObject(json, SmokeResultResponseDto.class);
+
+            if (responseDto.getStatus() == 200) {
+                LambdaUpdateWrapper<OdsStatistics> update = new LambdaUpdateWrapper<OdsStatistics>()
+                        .eq(OdsStatistics::getTypeName, "listDetectorDaily")
+                        .set(OdsStatistics::getContent, responseDto.getData().toString());
+
+                odsStatisticsService.update(update);
+            } else if (responseDto.getStatus() == 114) {
+                login();
+                listDetectorDaily();
+            } else {
+                System.out.printf(responseDto.getData().toString());
+            }
+        } catch (Exception ex) {
+            System.out.printf(ex.getMessage());
+        }
+    }
+
+
     void login() {
         LoginParamDto loginParamDto = LoginParamDto.builder().username("閬傛槍鍩庣灞�").password("123456").noCode(true).build();
         String json = smokeDetectionService.loginAction(loginParamDto);
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/utils/HttpUtil.java b/ycl-smoke/src/main/java/com/ycl/smoke/utils/HttpUtil.java
index faaf54b..940e13b 100644
--- a/ycl-smoke/src/main/java/com/ycl/smoke/utils/HttpUtil.java
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/utils/HttpUtil.java
@@ -118,7 +118,7 @@
             //绗笁姝ワ細缁檋ttpPost璁剧疆JSON鏍煎紡鐨勫弬鏁�
             StringEntity requestEntity = new StringEntity(json,"utf-8");
             requestEntity.setContentEncoding("UTF-8");
-            httpPost.setHeader("Content-type", "application/json");
+            httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");
             httpPost.setHeader("Auth",token);
             httpPost.setEntity(requestEntity);
 
diff --git a/ycl-smoke/src/main/resources/mapper/smoke/OdsStatisticsMapper.xml b/ycl-smoke/src/main/resources/mapper/smoke/OdsStatisticsMapper.xml
new file mode 100644
index 0000000..6383c5c
--- /dev/null
+++ b/ycl-smoke/src/main/resources/mapper/smoke/OdsStatisticsMapper.xml
@@ -0,0 +1,17 @@
+<?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.ycl.smoke.mapper.OdsStatisticsMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.smoke.entity.OdsStatistics">
+        <id column="id" property="id" />
+        <result column="type_name" property="typeName" />
+        <result column="content" property="content" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id, type_name, content
+    </sql>
+
+</mapper>

--
Gitblit v1.8.0