فهرست منبع

Merge branch 'server-165' of uskycloud/usky-modules into master

gez 1 سال پیش
والد
کامیت
feaba23863
61فایلهای تغییر یافته به همراه1755 افزوده شده و 89 حذف شده
  1. 8 0
      service-alarm/service-alarm-biz/pom.xml
  2. 21 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/web/BaseAlarmStatisticController.java
  3. 61 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/domain/BaseAlarmStatistic.java
  4. 16 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/mapper/BaseAlarmStatisticMapper.java
  5. 16 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/BaseAlarmStatisticService.java
  6. 4 1
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/smsmessage/SmsMessage.java
  7. 41 16
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/impl/BaseAlarmServiceImpl.java
  8. 20 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/impl/BaseAlarmStatisticServiceImpl.java
  9. 16 0
      service-alarm/service-alarm-biz/src/main/resources/mapper/alarm/BaseAlarmStatisticMapper.xml
  10. 11 1
      service-backend/service-backend-api/src/main/java/com/usky/backend/client/DataQueryClient.java
  11. 1 1
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataAverageExportVO.java
  12. 1 1
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataAverageRequestVO.java
  13. 6 1
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataAverageResponseVO.java
  14. 1 1
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataHistoryAvergerVO.java
  15. 12 0
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataHistoryTotalVO.java
  16. 27 0
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataTotalRequestVO.java
  17. 8 0
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataTotalResponseVO.java
  18. 5 39
      service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/DataQueryController.java
  19. 20 1
      service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/api/DataQueryApi.java
  20. 15 1
      service-backend/service-backend-biz/src/main/java/com/usky/backend/mapper/DataRealTimeMapper.java
  21. 7 4
      service-backend/service-backend-biz/src/main/java/com/usky/backend/service/DataQueryService.java
  22. 41 10
      service-backend/service-backend-biz/src/main/java/com/usky/backend/service/impl/DataQueryServiceImpl.java
  23. 37 4
      service-backend/service-backend-biz/src/main/resources/mapper/backend/DataRealTimeMapper.xml
  24. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/MybatisGeneratorUtils.java
  25. 10 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseAlarmController.java
  26. 45 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceInfoController.java
  27. 22 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpProductInfoController.java
  28. 22 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/SysDeptController.java
  29. 101 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/SysDept.java
  30. 2 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseBuildFacilityMapper.java
  31. 2 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseBuildFacilityTypeMapper.java
  32. 2 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpProductAttributeMapper.java
  33. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/SysDeptMapper.java
  34. 6 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmService.java
  35. 9 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceInfoService.java
  36. 12 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpProductInfoService.java
  37. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/SysDeptService.java
  38. 9 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/IntegerUtils.java
  39. 64 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java
  40. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDataInfoServiceImpl.java
  41. 77 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceInfoServiceImpl.java
  42. 78 4
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpProductInfoServiceImpl.java
  43. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/SysDeptServiceImpl.java
  44. 13 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceInfoMapper.xml
  45. 24 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/SysDeptMapper.xml
  46. 31 0
      service-issue/service-issue-api/pom.xml
  47. 0 0
      service-issue/service-issue-biz/git
  48. 99 0
      service-issue/service-issue-biz/pom.xml
  49. 46 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/RuoYiSystemApplication.java
  50. 108 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/controller/MybatisGeneratorUtils.java
  51. 41 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/controller/web/YtDeviceStatusController.java
  52. 73 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/domain/YtDeviceStatus.java
  53. 23 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/mapper/YtDeviceStatusMapper.java
  54. 20 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/service/YtDeviceStatusService.java
  55. 60 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/service/impl/YtDeviceStatusServiceImpl.java
  56. 29 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/service/vo/YtDeviceStatusRequestVO.java
  57. 25 0
      service-issue/service-issue-biz/src/main/resources/bootstrap.yml
  58. 108 0
      service-issue/service-issue-biz/src/main/resources/doc/index.adoc
  59. 94 0
      service-issue/service-issue-biz/src/main/resources/logback.xml
  60. 36 0
      service-issue/service-issue-biz/src/main/resources/mapper/issue/YtDeviceStatusMapper.xml
  61. 15 0
      service-issue/service-issue-biz/src/main/resources/smart-doc.json

+ 8 - 0
service-alarm/service-alarm-biz/pom.xml

@@ -26,12 +26,20 @@
             <version>4.5.16</version>
         </dependency>
 
+        <!--语音依赖-->
         <dependency>
             <groupId>com.aliyun</groupId>
             <artifactId>aliyun-java-sdk-dyvmsapi</artifactId>
             <version>1.2.2</version>
         </dependency>
 
+        <!--短信依赖-->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
+            <version>1.1.0</version>
+        </dependency>
+
         <!--MQTT依赖-->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 21 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/web/BaseAlarmStatisticController.java

@@ -0,0 +1,21 @@
+package com.usky.alarm.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 告警统计表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2023-11-24
+ */
+@Controller
+@RequestMapping("/baseAlarmStatistic")
+public class BaseAlarmStatisticController {
+
+}
+

+ 61 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/domain/BaseAlarmStatistic.java

@@ -0,0 +1,61 @@
+package com.usky.alarm.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 告警统计表
+ * </p>
+ *
+ * @author han
+ * @since 2023-11-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseAlarmStatistic implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 告警数量
+     */
+    private Integer alarmNum;
+
+    /**
+     * 隐患数量
+     */
+    private Integer pitfallNum;
+
+    /**
+     * 统计维度;1、日 2、月
+     */
+    private Integer statisticDimen;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 组织机构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 16 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/mapper/BaseAlarmStatisticMapper.java

@@ -0,0 +1,16 @@
+package com.usky.alarm.mapper;
+
+import com.usky.alarm.domain.BaseAlarmStatistic;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 告警统计表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2023-11-24
+ */
+public interface BaseAlarmStatisticMapper extends CrudMapper<BaseAlarmStatistic> {
+
+}

+ 16 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/BaseAlarmStatisticService.java

@@ -0,0 +1,16 @@
+package com.usky.alarm.service;
+
+import com.usky.alarm.domain.BaseAlarmStatistic;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 告警统计表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2023-11-24
+ */
+public interface BaseAlarmStatisticService extends CrudService<BaseAlarmStatistic> {
+
+}

+ 4 - 1
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/smsmessage/SmsMessage.java

@@ -1,2 +1,5 @@
-package com.usky.alarm.service.config.smsmessage;public class SmsMessage {
+package com.usky.alarm.service.config.smsmessage;
+
+public class SmsMessage {
+
 }

+ 41 - 16
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/impl/BaseAlarmServiceImpl.java

@@ -1,7 +1,12 @@
 package com.usky.alarm.service.impl;
 
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
 import com.aliyuncs.dyvmsapi.model.v20170525.SingleCallByTtsResponse;
 import com.aliyuncs.exceptions.ClientException;
+import com.aliyuncs.profile.DefaultProfile;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -10,6 +15,7 @@ import com.usky.alarm.mapper.BaseAlarmMapper;
 import com.usky.alarm.mapper.BaseAlarmNoticeResultMapper;
 import com.usky.alarm.mapper.SysUserMapper;
 import com.usky.alarm.service.*;
+import com.usky.alarm.service.config.smsmessage.SmsMessage;
 import com.usky.alarm.service.config.voice.VoiceNotice;
 import com.usky.alarm.service.config.websocket.WebSocket;
 import com.usky.common.core.exception.BusinessException;
@@ -102,26 +108,45 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
                             .eq(BaseAlarmNotice::getDeleteFlag,0);
                     List<BaseAlarmNotice> records3 = baseAlarmNoticeService.list(lambdaQuery3);
                     if (records3.size()>0){
-                        if (records3.get(0).getNoticeMethod().contains("电话")){
-                            String[] array = records3.get(0).getReceiver1().split(",");
-                            for (String s : array) {
-                                LambdaQueryWrapper<SysUser> lambdaQuery4 = Wrappers.lambdaQuery();
-                                lambdaQuery4.eq(SysUser::getUserId,s)
-                                        .eq(SysUser::getDelFlag,0);
-                                SysUser sysUser = sysUserMapper.selectOne(lambdaQuery4);
-//                                SingleCallByTtsResponse code = voiceNotice.sendCVoice("15122423833","视频监控","火点侦测","2023-09-12 10:01:54");
+                        String[] array = records3.get(0).getReceiver1().split(",");
+                        for (String s : array) {
+                            LambdaQueryWrapper<SysUser> lambdaQuery4 = Wrappers.lambdaQuery();
+                            lambdaQuery4.eq(SysUser::getUserId,s)
+                                    .eq(SysUser::getDelFlag,0);
+                            SysUser sysUser = sysUserMapper.selectOne(lambdaQuery4);
+                            BaseAlarmNoticeResult baseAlarmNoticeResult = new BaseAlarmNoticeResult();
+                            baseAlarmNoticeResult.setReceiver(sysUser.getPhonenumber());
+                            baseAlarmNoticeResult.setAlarmId(alarmId);
+                            baseAlarmNoticeResult.setNoticeTime(LocalDateTime.now());
+                            baseAlarmNoticeResult.setNoticeContent(records.get(0).getProductName()+","+baseAlarmType.getTypeName()+","+baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
+                                    "HH:mm:ss")));
+                            baseAlarmNoticeResult.setTenantId(records.get(0).getTenantId());
+                            if (records3.get(0).getNoticeMethod().contains("电话")){
                                 SingleCallByTtsResponse code = voiceNotice.sendCVoice(sysUser.getPhonenumber(),
                                         records.get(0).getProductName(),baseAlarmType.getTypeName(),
                                         baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
-                                        "HH:mm:ss")));
-                                BaseAlarmNoticeResult baseAlarmNoticeResult = new BaseAlarmNoticeResult();
-                                baseAlarmNoticeResult.setReceiver(sysUser.getPhonenumber());
-                                baseAlarmNoticeResult.setAlarmId(alarmId);
-                                baseAlarmNoticeResult.setNoticeTime(LocalDateTime.now());
+                                                "HH:mm:ss")));
                                 baseAlarmNoticeResult.setNoticeType(3);
-                                baseAlarmNoticeResult.setNoticeContent(records.get(0).getProductName()+","+baseAlarmType.getTypeName()+","+baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
-                                        "HH:mm:ss")));
-                                baseAlarmNoticeResult.setTenantId(records.get(0).getTenantId());
+                                if(code.getCode() != null && code.getCode().equals("OK")) {
+                                    //请求成功
+                                    baseAlarmNoticeResult.setNoticeResult(1);
+                                }else {
+                                    baseAlarmNoticeResult.setNoticeResult(2);
+                                }
+                                Integer saveAlarmResult = baseAlarmNoticeResultMapper.insert(baseAlarmNoticeResult);
+                            }
+                            if (records3.get(0).getNoticeMethod().contains("短信")){
+                                DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", "LTAI5tH3VvRL5BUkovCokHJX", "SaaWUouNqvcA0C746gcNOH9m6SRYN4");
+                                IAcsClient client = new DefaultAcsClient(profile);
+                                SendSmsRequest request = new SendSmsRequest();
+                                request.setPhoneNumbers(sysUser.getPhonenumber());//接收短信的手机号码
+                                request.setSignName("上海永天科技股份有限公司");//短信签名名称
+                                request.setTemplateCode("SMS_463791105");//短信模板CODE
+                                request.setTemplateParam("{\"deviceName\":\""+records2.get(0).getDeviceName()+"\","+"\"time\":\""+baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
+                                        "HH:mm:ss"))+"\","+
+                                        "\"alarmType\":\""+baseAlarmType.getTypeName()+"\","+"\"alarmContent\":\""+baseAlarm.getAlarmContent()+"\"}");
+                                SendSmsResponse code = client.getAcsResponse(request);
+                                baseAlarmNoticeResult.setNoticeType(4);
                                 if(code.getCode() != null && code.getCode().equals("OK")) {
                                     //请求成功
                                     baseAlarmNoticeResult.setNoticeResult(1);

+ 20 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/impl/BaseAlarmStatisticServiceImpl.java

@@ -0,0 +1,20 @@
+package com.usky.alarm.service.impl;
+
+import com.usky.alarm.domain.BaseAlarmStatistic;
+import com.usky.alarm.mapper.BaseAlarmStatisticMapper;
+import com.usky.alarm.service.BaseAlarmStatisticService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 告警统计表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2023-11-24
+ */
+@Service
+public class BaseAlarmStatisticServiceImpl extends AbstractCrudService<BaseAlarmStatisticMapper, BaseAlarmStatistic> implements BaseAlarmStatisticService {
+
+}

+ 16 - 0
service-alarm/service-alarm-biz/src/main/resources/mapper/alarm/BaseAlarmStatisticMapper.xml

@@ -0,0 +1,16 @@
+<?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.usky.alarm.mapper.BaseAlarmStatisticMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.alarm.domain.BaseAlarmStatistic">
+        <id column="id" property="id" />
+        <result column="alarm_num" property="alarmNum" />
+        <result column="pitfall_num" property="pitfallNum" />
+        <result column="statistic_dimen" property="statisticDimen" />
+        <result column="create_time" property="createTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 11 - 1
service-backend/service-backend-api/src/main/java/com/usky/backend/client/DataQueryClient.java

@@ -1,6 +1,6 @@
 package com.usky.backend.client;
 
-import com.usky.backend.domain.StatusVO;
+import com.usky.backend.domain.*;
 import com.usky.backend.domain.request.LastQueryVo;
 import com.usky.backend.domain.response.LastResultVo;
 import com.usky.common.core.bean.ApiResult;
@@ -8,10 +8,20 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 @FeignClient(contextId = "dataQueryClient", value = "usky-backend")
 public interface DataQueryClient {
 
     @RequestMapping(value = "status")
     List<StatusVO> status();
+
+    @RequestMapping(value = "deviceDataTotal")
+    List<Map<String,Object>> deviceDataTotal(@RequestBody DataTotalRequestVO requestVO);
+
+    @RequestMapping(value = "deviceDataAverage")
+    List<DataAverageResponseVO> deviceDataAverage(@RequestBody DataAverageRequestVO requestVO);
+
+    @RequestMapping(value = "DataAverageExport")
+    List<DataAverageExportVO> DataAverageExport(@RequestBody DataAverageRequestVO requestVO);
 }

+ 1 - 1
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/vo/DataAverageExportVO.java → service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataAverageExportVO.java

@@ -1,4 +1,4 @@
-package com.usky.backend.domain.vo;
+package com.usky.backend.domain;
 
 import com.usky.common.core.annotation.Excel;
 import lombok.Data;

+ 1 - 1
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/vo/DataAverageRequestVO.java → service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataAverageRequestVO.java

@@ -1,4 +1,4 @@
-package com.usky.backend.domain.vo;
+package com.usky.backend.domain;
 
 import lombok.Data;
 

+ 6 - 1
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/vo/DataAverageResponseVO.java → service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataAverageResponseVO.java

@@ -1,4 +1,4 @@
-package com.usky.backend.domain.vo;
+package com.usky.backend.domain;
 
 import lombok.Data;
 
@@ -16,6 +16,11 @@ public class DataAverageResponseVO implements Serializable {
      */
     private String deviceId;
 
+    /**
+     * 设备名称
+     */
+    private String DeviceName;
+
     /**
      * 温度平均值
      */

+ 1 - 1
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/vo/DataHistoryAvergerVO.java → service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataHistoryAvergerVO.java

@@ -1,4 +1,4 @@
-package com.usky.backend.domain.vo;
+package com.usky.backend.domain;
 
 import lombok.Data;
 

+ 12 - 0
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataHistoryTotalVO.java

@@ -0,0 +1,12 @@
+package com.usky.backend.domain;
+
+import lombok.Data;
+
+@Data
+public class DataHistoryTotalVO {
+    private String deviceId;
+
+    private String attributeName;
+
+    private double totalValue;
+}

+ 27 - 0
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataTotalRequestVO.java

@@ -0,0 +1,27 @@
+package com.usky.backend.domain;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DataTotalRequestVO {
+
+    /**
+     * 分组方式("Each","All")
+     */
+    private String groupType;
+
+    //产品编码
+    private String productCode;
+    //设备类型编码
+    private String deviceType;
+    //设备Id
+    private List<String> deviceIds;
+    //设备属性集合
+    private List<String> attributeNames;
+    //开始时间
+    private String startTime;
+    //结束时间
+    private String endTime;
+}

+ 8 - 0
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataTotalResponseVO.java

@@ -0,0 +1,8 @@
+package com.usky.backend.domain;
+
+import lombok.Data;
+
+@Data
+public class DataTotalResponseVO {
+
+}

+ 5 - 39
service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/DataQueryController.java

@@ -1,13 +1,13 @@
 package com.usky.backend.controller;
-import com.usky.backend.domain.MetricItemVo;
 import com.usky.backend.domain.StatusVO;
 import com.usky.backend.domain.request.HistoryQueryVo;
 import com.usky.backend.domain.request.LastQueryVo;
 import com.usky.backend.domain.response.HistoryResultVo;
 import com.usky.backend.domain.response.LastResultVo;
-import com.usky.backend.domain.vo.DataAverageExportVO;
-import com.usky.backend.domain.vo.DataAverageRequestVO;
-import com.usky.backend.domain.vo.DataAverageResponseVO;
+import com.usky.backend.domain.DataAverageExportVO;
+import com.usky.backend.domain.DataAverageRequestVO;
+import com.usky.backend.domain.DataAverageResponseVO;
+import com.usky.backend.domain.DataTotalRequestVO;
 import com.usky.backend.service.DataQueryService;
 import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.utils.poi.ExcelUtil;
@@ -18,9 +18,8 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -82,38 +81,5 @@ public class DataQueryController {
         return ApiResult.success(dataQueryService.status());
     }
 
-    /**
-     * 设备日平均值、月平均值、年平均值
-     * @param requestVO
-     * @return
-     */
-    @PostMapping("deviceDataAverage")
-    @ApiOperation("获取设备日平均、月平均、年平均值")
-    public ApiResult<List<DataAverageResponseVO>> deviceDataAverage(@RequestBody DataAverageRequestVO requestVO){
-        return ApiResult.success(dataQueryService.deviceDataAverage(requestVO));
-    }
-
-    /**
-     * 设备日平均值、月平均值、年平均值导出
-     * @param requestVO
-     * @param response
-     * @throws IOException
-     */
-    @PostMapping("export")
-    public void export(@RequestBody DataAverageRequestVO requestVO, HttpServletResponse response) throws IOException{
-        List<DataAverageExportVO> list = dataQueryService.DataAverageExport(requestVO);
-        ExcelUtil<DataAverageExportVO> util = new ExcelUtil<DataAverageExportVO>(DataAverageExportVO.class);
-//        String rangeDate = "";
-//        if(requestVO.getDataType().equals("Day")){
-//            rangeDate = requestVO.getStartTime().substring(0,10)+"_"+requestVO.getEndTime().substring(0,10);
-//        }else if(requestVO.getDataType().equals("Month")){
-//            rangeDate = requestVO.getStartTime().substring(0,7)+"_"+requestVO.getEndTime().substring(0,7);
-//        }else if(requestVO.getDataType().equals("Year")){
-//            rangeDate = requestVO.getStartTime().substring(0,4)+"_"+requestVO.getEndTime().substring(0,4);
-//        }
-//        String excelName = requestVO.getGroupType()+"_"+requestVO.getDataType()+"_"+rangeDate;
-        util.exportExcel(response,list,requestVO.getSheetName(),requestVO.getTitleName());
-    }
-
 }
 

+ 20 - 1
service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/api/DataQueryApi.java

@@ -1,6 +1,6 @@
 package com.usky.backend.controller.api;
 import com.usky.backend.client.DataQueryClient;
-import com.usky.backend.domain.StatusVO;
+import com.usky.backend.domain.*;
 import com.usky.backend.domain.request.LastQueryVo;
 import com.usky.backend.domain.response.LastResultVo;
 import com.usky.backend.service.DataQueryService;
@@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -30,4 +31,22 @@ public class DataQueryApi implements DataQueryClient {
         return list;
     }
 
+    @Override
+    public List<Map<String,Object>> deviceDataTotal(DataTotalRequestVO requestVO){
+        List<Map<String,Object>> list = dataQueryService.deviceDataTotal(requestVO);
+        return list;
+    }
+
+    @Override
+    public List<DataAverageResponseVO> deviceDataAverage(DataAverageRequestVO requestVO){
+        List<DataAverageResponseVO> list = dataQueryService.deviceDataAverage(requestVO);
+        return list;
+    }
+
+    @Override
+    public List<DataAverageExportVO> DataAverageExport(DataAverageRequestVO requestVO){
+        List<DataAverageExportVO> list = dataQueryService.DataAverageExport(requestVO);
+        return list;
+    }
+
 }

+ 15 - 1
service-backend/service-backend-biz/src/main/java/com/usky/backend/mapper/DataRealTimeMapper.java

@@ -3,7 +3,8 @@ package com.usky.backend.mapper;
 import com.usky.backend.domain.DataRealTime;
 //import com.usky.backend.domain.request.DeviceDataInfoVO;
 import com.usky.backend.domain.MetricItemVo;
-import com.usky.backend.domain.vo.DataHistoryAvergerVO;
+import com.usky.backend.domain.DataHistoryAvergerVO;
+import com.usky.backend.domain.DataHistoryTotalVO;
 import com.usky.common.mybatis.core.CrudMapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
@@ -26,6 +27,19 @@ public interface DataRealTimeMapper extends CrudMapper<DataRealTime> {
 
     String QueryDeviceTypeAbbrevia(@Param("deviceType") String deviceType);
 
+    List<DataHistoryTotalVO> QueryEachHistoryTotalData(@Param("tableName") String tableName,
+                                                       @Param("startTime") String startTime,
+                                                       @Param("endTime") String endTime,
+                                                       @Param("productCode") String productCode,
+                                                       @Param("deviceIdList") List<String> deviceIdList,
+                                                       @Param("attributeNameList") List<String> attributeNameList);
+
+    List<DataHistoryTotalVO> QueryTotalHistoryTotalData(@Param("tableName") String tableName,
+                                                        @Param("startTime") String startTime,
+                                                        @Param("endTime") String endTime,
+                                                        @Param("productCode") String productCode,
+                                                        @Param("attributeNameList") List<String> attributeNameList);
+
     List<DataHistoryAvergerVO> QueryEachHistoryAvrgData(@Param("leftLen") Integer leftLen,
                                                         @Param("tableName") String tableName,
                                                         @Param("startTime") String startTime,

+ 7 - 4
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/DataQueryService.java

@@ -6,12 +6,13 @@ import com.usky.backend.domain.request.HistoryQueryVo;
 import com.usky.backend.domain.request.LastQueryVo;
 import com.usky.backend.domain.response.HistoryResultVo;
 import com.usky.backend.domain.response.LastResultVo;
-import com.usky.backend.domain.vo.DataAverageExportVO;
-import com.usky.backend.domain.vo.DataAverageRequestVO;
-import com.usky.backend.domain.vo.DataAverageResponseVO;
-import org.springframework.web.bind.annotation.RequestBody;
+import com.usky.backend.domain.DataAverageExportVO;
+import com.usky.backend.domain.DataAverageRequestVO;
+import com.usky.backend.domain.DataAverageResponseVO;
+import com.usky.backend.domain.DataTotalRequestVO;
 
 import java.util.List;
+import java.util.Map;
 
 public interface DataQueryService {
     HistoryResultVo historyMetric(String deviceId, String metric, String startTime, String endTime,String typeAbbrevia);
@@ -22,6 +23,8 @@ public interface DataQueryService {
 
     List<StatusVO> status();
 
+    List<Map<String,Object>> deviceDataTotal(DataTotalRequestVO requestVO);
+
     List<DataAverageResponseVO> deviceDataAverage(DataAverageRequestVO requestVO);
 
     List<DataAverageExportVO> DataAverageExport(DataAverageRequestVO requestVO);

+ 41 - 10
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/impl/DataQueryServiceImpl.java

@@ -1,31 +1,23 @@
 package com.usky.backend.service.impl;
 
-import cn.hutool.db.meta.Table;
 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.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.backend.domain.*;
 import com.usky.backend.domain.request.HistoryQueryVo;
 import com.usky.backend.domain.request.LastQueryVo;
 import com.usky.backend.domain.response.HistoryResultVo;
 import com.usky.backend.domain.response.LastResultVo;
-import com.usky.backend.domain.vo.DataAverageExportVO;
-import com.usky.backend.domain.vo.DataAverageRequestVO;
-import com.usky.backend.domain.vo.DataAverageResponseVO;
-import com.usky.backend.domain.vo.DataHistoryAvergerVO;
 import com.usky.backend.mapper.DataRealTimeMapper;
 import com.usky.backend.service.*;
-import net.sf.ehcache.search.expression.IsNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -113,6 +105,45 @@ public class DataQueryServiceImpl implements DataQueryService {
         return list;
     }
 
+    @Override
+    public List<Map<String,Object>> deviceDataTotal(DataTotalRequestVO requestVO){
+        List<Map<String,Object>> list = new ArrayList<>();
+        //设备类型简称
+        String typeAbbrevia = dataRealTimeMapper.QueryDeviceTypeAbbrevia(requestVO.getDeviceType());
+        String tableName = "data_"+typeAbbrevia+"_history";
+
+        List<DataHistoryTotalVO> list1 = new ArrayList<>();
+        if(requestVO.getGroupType().equals("Each")){
+            list1 = dataRealTimeMapper.QueryEachHistoryTotalData(tableName,requestVO.getStartTime(),requestVO.getEndTime(),requestVO.getProductCode(),requestVO.getDeviceIds(),requestVO.getAttributeNames());
+        }else if(requestVO.getGroupType().equals("Total")){
+            list1 = dataRealTimeMapper.QueryTotalHistoryTotalData(tableName,requestVO.getStartTime(),requestVO.getEndTime(),requestVO.getProductCode(),requestVO.getAttributeNames());
+        }
+        if(CollectionUtils.isNotEmpty(list1)){
+            List<String> deviceIdList = new ArrayList<>();
+            for(int i=0;i<list1.size();i++){
+                if(!deviceIdList.contains(list1.get(i).getDeviceId())){
+                    deviceIdList.add(list1.get(i).getDeviceId());
+                }
+            }
+            if(CollectionUtils.isNotEmpty(deviceIdList)){
+                for(int j=0;j<deviceIdList.size();j++){
+                    Map<String,Object> map = new HashMap<>();
+
+                    map.put("deviceId",deviceIdList.get(j));
+
+                    for(int k=0;k<list1.size();k++){
+                        if(deviceIdList.get(j).equals(list1.get(k).getDeviceId())){
+                            map.put(list1.get(k).getAttributeName(),list1.get(k).getTotalValue());
+                        }
+                    }
+                    list.add(map);
+                }
+            }
+        }
+
+        return list;
+    }
+
     @Override
     public List<DataAverageResponseVO> deviceDataAverage(DataAverageRequestVO requestVO){
         List<DataAverageResponseVO> list = new ArrayList<>();
@@ -227,7 +258,7 @@ public class DataQueryServiceImpl implements DataQueryService {
         List<DataHistoryAvergerVO> list1 = new ArrayList<>();
         List<String> outDeviceList = new ArrayList<>();
         outDeviceList.add("weather0001");
-        List<DataHistoryAvergerVO> list2 = dataRealTimeMapper.QueryEachHistoryAvrgData(leftLen,tableName,requestVO.getStartTime(),requestVO.getEndTime(),requestVO.getProductCode(),outDeviceList,requestVO.getAttributeNames());
+        List<DataHistoryAvergerVO> list2 = dataRealTimeMapper.QueryEachHistoryAvrgData(leftLen,tableName,requestVO.getStartTime(),requestVO.getEndTime(),null,outDeviceList,requestVO.getAttributeNames());
         if(requestVO.getGroupType().equals("Each")){
             list1 = dataRealTimeMapper.QueryEachHistoryAvrgData(leftLen,tableName,requestVO.getStartTime(),requestVO.getEndTime(),requestVO.getProductCode(),requestVO.getDeviceIds(),requestVO.getAttributeNames());
         }else if(requestVO.getGroupType().equals("Total")){

+ 37 - 4
service-backend/service-backend-biz/src/main/resources/mapper/backend/DataRealTimeMapper.xml

@@ -45,9 +45,42 @@
             </if>
         </where>
     </select>
-    <select id="QueryEachHistoryAvrgData" resultType="com.usky.backend.domain.vo.DataHistoryAvergerVO">
-        SELECT a.data_date as dataDate,concat("房间",a.device_id) as deviceId, a.attribute_name as attributeName ,avg(a.attribute_data) as avrg
-        from (select product_code,device_id,attribute_name,attribute_data,left(data_time,#{leftLen}) as data_date FROM ${tableName} WHERE data_time  BETWEEN  #{startTime} AND  #{endTime} AND product_code = #{productCode}
+    <select id="QueryEachHistoryTotalData" resultType="com.usky.backend.domain.DataHistoryTotalVO">
+        select device_id as deviceId,attribute_name as attributeName,sum(attribute_data) as totalValue
+        FROM ${tableName}
+        WHERE data_time  BETWEEN  #{startTime} AND  #{endTime} AND product_code = #{productCode}
+        <if test="deviceIdList != null and deviceIdList.size() > 0">
+            AND device_id in
+            <foreach item="item" collection="deviceIdList" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="attributeNameList != null and attributeNameList.size() > 0">
+            AND attribute_name in
+            <foreach item="item" collection="attributeNameList" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        group by device_id,attribute_name
+    </select>
+    <select id="QueryTotalHistoryTotalData" resultType="com.usky.backend.domain.DataHistoryTotalVO">
+        select "all" as deviceId,attribute_name as attributeName,sum(attribute_data) as totalValue
+        FROM ${tableName}
+        WHERE data_time  BETWEEN  #{startTime} AND  #{endTime} AND product_code = #{productCode}
+        <if test="attributeNameList != null and attributeNameList.size() > 0">
+            AND attribute_name in
+            <foreach item="item" collection="attributeNameList" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        group by attribute_name
+    </select>
+    <select id="QueryEachHistoryAvrgData" resultType="com.usky.backend.domain.DataHistoryAvergerVO">
+        SELECT a.data_date as dataDate,a.device_id as deviceId, a.attribute_name as attributeName ,avg(a.attribute_data) as avrg
+        from (select product_code,device_id,attribute_name,attribute_data,left(data_time,#{leftLen}) as data_date FROM ${tableName} WHERE data_time  BETWEEN  #{startTime} AND  #{endTime}
+        <if test="productCode != null">
+            AND product_code = #{productCode}
+        </if>
         <if test="deviceIdList != null and deviceIdList.size() > 0">
             AND device_id in
             <foreach item="item" collection="deviceIdList" open="(" separator="," close=")">
@@ -62,7 +95,7 @@
         </if>) a
         GROUP BY a.data_date,a.device_id,a.attribute_name;
     </select>
-    <select id="QueryTotalHistoryAvrgData" resultType="com.usky.backend.domain.vo.DataHistoryAvergerVO">
+    <select id="QueryTotalHistoryAvrgData" resultType="com.usky.backend.domain.DataHistoryAvergerVO">
         SELECT a.data_date as dataDate,'所有房间' as deviceId,a.attribute_name as attributeName ,avg(a.attribute_data) as avrg
         FROM (SELECT product_code,attribute_name,attribute_data,LEFT(data_time,#{leftLen}) AS data_date FROM ${tableName} WHERE data_time  BETWEEN  #{startTime} AND  #{endTime} AND product_code = #{productCode}
         AND device_id != 'weather0001'

+ 1 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/MybatisGeneratorUtils.java

@@ -71,7 +71,7 @@ public class MybatisGeneratorUtils {
         // strategy.setTablePrefix("t_"); // 表名前缀
         strategy.setEntityLombokModel(true); //使用lombok
         //修改自己想要生成的表
-        strategy.setInclude("base_alarm_notice_result");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        strategy.setInclude("sys_dept");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
         mpg.setStrategy(strategy);
 
         // 关闭默认 xml 生成,调整生成 至 根目录

+ 10 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/BaseAlarmController.java

@@ -100,5 +100,15 @@ public class BaseAlarmController {
         baseAlarmService.add(baseAlarm);
         return ApiResult.success();
     }
+
+    /**
+     * 综合云图-告警统计
+     * @param deptId 部门ID
+     * @return
+     */
+    @GetMapping("/alarmStatistic")
+    public ApiResult<List<Object>> alarmStatistic(@RequestParam(value = "deptId", required = false) Integer deptId){
+        return ApiResult.success(baseAlarmService.alarmStatistic(deptId));
+    }
 }
 

+ 45 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDeviceInfoController.java

@@ -4,21 +4,29 @@ package com.usky.iot.controller.web;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.backend.domain.DataAverageExportVO;
+import com.usky.backend.domain.DataAverageRequestVO;
+import com.usky.backend.domain.DataAverageResponseVO;
+import com.usky.backend.domain.DataTotalRequestVO;
 import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.bean.CommonPage;
+import com.usky.common.core.utils.poi.ExcelUtil;
 import com.usky.iot.domain.BaseFacilityDevice;
 import com.usky.iot.domain.DmpDeviceInfo;
 import com.usky.iot.service.DmpDeviceInfoService;
 import com.usky.iot.service.vo.BaseFacilityDeviceVO;
 import com.usky.iot.service.vo.DmpDeviceInfoRequest;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotNull;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 设备信息表
@@ -129,5 +137,42 @@ public class DmpDeviceInfoController {
                                                                @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize){
         return ApiResult.success(dmpDeviceInfoService.deviceCurrentDataList(deviceName,installAddress,productCode,pageNum,pageSize));
     }
+
+
+
+    /**
+     * 获取设备某个时间端内的汇总值
+     * @param requestVO
+     * @return
+     */
+    @PostMapping("deviceDataTotal")
+    @ApiOperation("获取设备某个时间端内的汇总值")
+    public ApiResult<List<Map<String,Object>>> deviceDataTotal(@RequestBody DataTotalRequestVO requestVO){
+        return ApiResult.success(dmpDeviceInfoService.deviceDataTotal(requestVO));
+    }
+
+    /**
+     * 设备日平均值、月平均值、年平均值
+     * @param requestVO
+     * @return
+     */
+    @PostMapping("deviceDataAverage")
+    @ApiOperation("获取设备日平均、月平均、年平均值")
+    public ApiResult<List<DataAverageResponseVO>> deviceDataAverage(@RequestBody DataAverageRequestVO requestVO){
+        return ApiResult.success(dmpDeviceInfoService.deviceDataAverage(requestVO));
+    }
+
+    /**
+     * 设备日平均值、月平均值、年平均值导出
+     * @param requestVO
+     * @param response
+     * @throws IOException
+     */
+    @PostMapping("deviceDataAverageExport")
+    public void export(@RequestBody DataAverageRequestVO requestVO, HttpServletResponse response) throws IOException{
+        List<DataAverageExportVO> list = dmpDeviceInfoService.DataAverageExport(requestVO);
+        ExcelUtil<DataAverageExportVO> util = new ExcelUtil<DataAverageExportVO>(DataAverageExportVO.class);
+        util.exportExcel(response,list,requestVO.getSheetName(),requestVO.getTitleName());
+    }
 }
 

+ 22 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpProductInfoController.java

@@ -84,8 +84,28 @@ public class DmpProductInfoController {
         return ApiResult.success(dmpProductInfoService.collect());
     }
 
+    /**
+     * 综合云图-设备统计接口
+     *
+     * @param deptId 部门ID
+     * @return
+     */
+    @GetMapping("deviceStatistic")
+    public ApiResult<List<Map<String,Object>>> deviceStatistic(@RequestParam(value = "deptId", required = false) Integer deptId){
+        return ApiResult.success(dmpProductInfoService.deviceCollect(deptId));
+    }
 
-
-
+    /**
+     * 综合云图-设备工况统计接口
+     *
+     * @param deptId 部门ID
+     * @param productCode 产品编码
+     * @return
+     */
+    @GetMapping("deviceStatusStatistic")
+    public ApiResult<List<Object>> deviceStatusStatistic(@RequestParam(value = "deptId", required = false) Integer deptId,
+                                                   @RequestParam(value = "productCode", required = false) String productCode) {
+        return ApiResult.success(dmpProductInfoService.deviceStatusStatistic(deptId,productCode));
+    }
 }
 

+ 22 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/SysDeptController.java

@@ -0,0 +1,22 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 部门表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2023-11-27
+ */
+@RestController
+@RequestMapping("/sysDept")
+public class SysDeptController {
+
+}
+

+ 101 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/SysDept.java

@@ -0,0 +1,101 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 部门表
+ * </p>
+ *
+ * @author han
+ * @since 2023-11-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysDept implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 部门id
+     */
+    @TableId(value = "dept_id", type = IdType.AUTO)
+    private Long deptId;
+
+    /**
+     * 父部门id
+     */
+    private Long parentId;
+
+    /**
+     * 祖级列表
+     */
+    private String ancestors;
+
+    /**
+     * 部门名称
+     */
+    private String deptName;
+
+    /**
+     * 显示顺序
+     */
+    private Integer orderNum;
+
+    /**
+     * 负责人
+     */
+    private String leader;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 部门状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    private String delFlag;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 2 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseBuildFacilityMapper.java

@@ -5,6 +5,7 @@ import com.usky.iot.domain.BaseBuildFacility;
 import com.usky.common.mybatis.core.CrudMapper;
 import com.usky.iot.domain.BaseBuildFacilityType;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
@@ -16,6 +17,7 @@ import java.util.List;
  * @author han
  * @since 2023-07-26
  */
+@Repository
 public interface BaseBuildFacilityMapper extends CrudMapper<BaseBuildFacility> {
     BaseBuildFacilityType baseBuildFacilityTypeList(@Param("facilityType") String facilityType);
     List<BaseBuild> getBuildName(@Param("buildIdList") List<Integer> buildIdList);

+ 2 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/BaseBuildFacilityTypeMapper.java

@@ -2,6 +2,7 @@ package com.usky.iot.mapper;
 
 import com.usky.iot.domain.BaseBuildFacilityType;
 import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
 
 /**
  * <p>
@@ -11,6 +12,7 @@ import com.usky.common.mybatis.core.CrudMapper;
  * @author han
  * @since 2023-07-26
  */
+@Repository
 public interface BaseBuildFacilityTypeMapper extends CrudMapper<BaseBuildFacilityType> {
 
 }

+ 2 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpProductAttributeMapper.java

@@ -2,6 +2,7 @@ package com.usky.iot.mapper;
 
 import com.usky.common.mybatis.core.CrudMapper;
 import com.usky.iot.domain.DmpProductAttribute;
+import org.springframework.stereotype.Repository;
 
 
 /**
@@ -12,6 +13,7 @@ import com.usky.iot.domain.DmpProductAttribute;
  * @author ya
  * @since 2022-10-08
  */
+@Repository
 public interface DmpProductAttributeMapper extends CrudMapper<DmpProductAttribute> {
 
 }

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/SysDeptMapper.java

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.SysDept;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 部门表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2023-11-27
+ */
+public interface SysDeptMapper extends CrudMapper<SysDept> {
+
+}

+ 6 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/BaseAlarmService.java

@@ -36,4 +36,10 @@ public interface BaseAlarmService extends CrudService<BaseAlarm> {
     boolean add(BaseAlarm baseAlarm);
 
     void status();
+
+    /**
+     * 综合云图-告警统计
+     * @return
+     */
+    List<Object> alarmStatistic(Integer deptId);
 }

+ 9 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDeviceInfoService.java

@@ -1,10 +1,15 @@
 package com.usky.iot.service;
 
+import com.usky.backend.domain.DataAverageExportVO;
+import com.usky.backend.domain.DataAverageRequestVO;
+import com.usky.backend.domain.DataAverageResponseVO;
+import com.usky.backend.domain.DataTotalRequestVO;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.mybatis.core.CrudService;
 import com.usky.iot.domain.DmpDeviceInfo;
 import com.usky.iot.service.vo.BaseFacilityDeviceVO;
 import com.usky.iot.service.vo.DmpDeviceInfoRequest;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
@@ -58,4 +63,8 @@ public interface DmpDeviceInfoService extends CrudService<DmpDeviceInfo> {
     void export(DmpDeviceInfoRequest dmpDeviceInfoRequest, HttpServletResponse response);
 
     CommonPage<Object> deviceCurrentDataList(String deviceName,String installAddress,String productCode,Integer pageNum,Integer pageSize);
+
+    List<Map<String,Object>> deviceDataTotal(DataTotalRequestVO requestVO);
+    List<DataAverageResponseVO> deviceDataAverage(DataAverageRequestVO requestVO);
+    List<DataAverageExportVO> DataAverageExport(DataAverageRequestVO requestVO);
 }

+ 12 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpProductInfoService.java

@@ -30,4 +30,16 @@ public interface DmpProductInfoService extends CrudService<DmpProductInfo> {
     boolean remove(Integer id);
 
     List<Map<String,Object>> collect();
+
+    /**
+     * 设备状态统计
+     * @return
+     */
+    List<Map<String,Object>> deviceCollect(Integer deptId);
+
+    /**
+     * 综合云图-设备工况统计接口
+     * @return
+     */
+    List<Object> deviceStatusStatistic(Integer deptId,String productId);
 }

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/SysDeptService.java

@@ -0,0 +1,16 @@
+package com.usky.iot.service;
+
+import com.usky.iot.domain.SysDept;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 部门表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2023-11-27
+ */
+public interface SysDeptService extends CrudService<SysDept> {
+
+}

+ 9 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/IntegerUtils.java

@@ -0,0 +1,9 @@
+package com.usky.iot.service.config;
+
+import java.util.Optional;
+
+public class IntegerUtils {
+    public static boolean hasValue(Integer value) {
+        return Optional.ofNullable(value).isPresent();
+    }
+}

+ 64 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java

@@ -22,7 +22,12 @@ import com.usky.iot.service.vo.BaseAlarmResponeVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -636,6 +641,65 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
 
         }
     }
+
+    @Override
+    public List<Object> alarmStatistic(Integer deptId) {
+        List<Object> list = new ArrayList<>();
+        Map<String, Object> map = new HashMap<>();
+        LocalDateTime now = LocalDateTime.now();
+        LocalDate today = LocalDate.now();
+        LocalDateTime startOfDay = LocalDateTime.of(today, LocalTime.MIN);
+        LocalDateTime startOfYear = now.minusYears(1);
+        QueryWrapper<BaseAlarm> queryWrapper = Wrappers.query();
+        queryWrapper.select("COUNT(alarm_grade=1 or null) as alarmCount","COUNT(alarm_grade!=1 or" +
+                " null) as hiddenCount","COUNT(alarm_grade=1 and handle_status=1 or null) as ahAlarmCount","COUNT" +
+                "(alarm_grade!=1 and handle_status=1 or null) as ahHiddenCount")
+                .between("alarm_time",startOfDay,now);
+        List<Map<String,Object>> alarmStatisticList = this.listMaps(queryWrapper);
+        QueryWrapper<BaseAlarm> queryWrapper1 = Wrappers.query();
+        queryWrapper1.select("COUNT(alarm_grade=1 or null) as alarmCount","COUNT(alarm_grade=1 and handle_status=1 or null) as ahAlarmCount")
+                .between("alarm_time",startOfYear,now);
+        List<Map<String,Object>> alarmStatisticList1 = this.listMaps(queryWrapper1);
+        QueryWrapper<BaseAlarm> queryWrapper2 = Wrappers.query();
+        queryWrapper2.select("COUNT(alarm_grade=1 and handle_status=0 or null) as alarmCount","COUNT(alarm_grade=1 " +
+                "and alarm_type='111' or null) as fireAlarmCount","COUNT(alarm_grade!=1 and handle_status=0 or null) " +
+                "as hiddenCount");
+        List<Map<String,Object>> alarmStatisticList2 = this.listMaps(queryWrapper2);
+        BigDecimal ahAlarmCountBig = new BigDecimal(Integer.valueOf(alarmStatisticList.get(0).get("ahAlarmCount").toString()));
+        BigDecimal temp = new BigDecimal(Integer.valueOf(alarmStatisticList.get(0).get("alarmCount").toString()));
+        if (Integer.valueOf(alarmStatisticList.get(0).get("alarmCount").toString()).equals(0)){
+            map.put("ahAlarmCountBig", 0);
+        }else {
+            ahAlarmCountBig = ahAlarmCountBig.divide(temp,2, RoundingMode.HALF_UP);
+            map.put("ahAlarmCountBig", ahAlarmCountBig);
+        }
+        BigDecimal ahHiddenCountBig = new BigDecimal(Integer.valueOf(alarmStatisticList.get(0).get("ahHiddenCount").toString()));
+        BigDecimal temp1 = new BigDecimal(Integer.valueOf(alarmStatisticList.get(0).get("hiddenCount").toString()));
+        if (Integer.valueOf(alarmStatisticList.get(0).get("hiddenCount").toString()).equals(0)){
+            map.put("ahHiddenDayCountBig", 0);
+        }else {
+            ahHiddenCountBig = ahHiddenCountBig.divide(temp1,2, RoundingMode.HALF_UP);
+            map.put("ahHiddenDayCountBig", ahHiddenCountBig);
+        }
+
+        BigDecimal ahAlarmYearCountBig = new BigDecimal(Integer.valueOf(alarmStatisticList1.get(0).get("ahAlarmCount").toString()));
+        BigDecimal temp2 = new BigDecimal(Integer.valueOf(alarmStatisticList1.get(0).get("alarmCount").toString()));
+        if (Integer.valueOf(alarmStatisticList1.get(0).get("alarmCount").toString()).equals(0)){
+            map.put("ahAlarmYearCountBig", 0);
+        }else {
+            ahAlarmYearCountBig = ahAlarmYearCountBig.divide(temp2,2, RoundingMode.HALF_UP);
+            map.put("ahAlarmYearCountBig", ahAlarmYearCountBig);
+        }
+        map.put("alarmDayCount", Integer.valueOf(alarmStatisticList.get(0).get("alarmCount").toString()));
+        map.put("hiddenDayCount", Integer.valueOf(alarmStatisticList.get(0).get("hiddenCount").toString()));
+        map.put("ahHiddenDayCount", Integer.valueOf(alarmStatisticList.get(0).get("ahHiddenCount").toString()));
+        map.put("alarmYearCount", Integer.valueOf(alarmStatisticList1.get(0).get("alarmCount").toString()));
+        map.put("uhAlarmCount", Integer.valueOf(alarmStatisticList2.get(0).get("alarmCount").toString()));
+        map.put("fireAlarmCount", Integer.valueOf(alarmStatisticList2.get(0).get("fireAlarmCount").toString()));
+        map.put("uhHiddenCount", Integer.valueOf(alarmStatisticList2.get(0).get("hiddenCount").toString()));
+        list.add(map);
+        return list;
+    }
 }
 
 

+ 1 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDataInfoServiceImpl.java

@@ -105,7 +105,7 @@ public class DmpDataInfoServiceImpl extends AbstractCrudService<DmpDataInfoMappe
                         }
                         dataInfo.setMetrics(mp);
                         dataInfo.setDevice_id(dmpDeviceDataRequestVO.getDeviceId());
-                        dataInfo.setProduct_id(list.get(0).getId().toString());
+                        dataInfo.setProduct_id(list.get(0).getProductCode());
                         dataInfo.setTimestamp(dmpDeviceDataRequestVO.getTimestamp());
                         dataInfo.setDevice_type(list.get(0).getDeviceType()+"-"+shortName);
                     }

+ 77 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceInfoServiceImpl.java

@@ -16,7 +16,12 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.mysql.cj.x.protobuf.MysqlxDatatypes;
+import com.usky.backend.client.DataQueryClient;
 import com.usky.backend.client.DeviceDataClient;
+import com.usky.backend.domain.DataAverageExportVO;
+import com.usky.backend.domain.DataAverageRequestVO;
+import com.usky.backend.domain.DataAverageResponseVO;
+import com.usky.backend.domain.DataTotalRequestVO;
 import com.usky.backend.domain.response.DataRealTimeResponseVO;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
@@ -63,6 +68,9 @@ public class DmpDeviceInfoServiceImpl extends AbstractCrudService<DmpDeviceInfoM
     @Autowired
     private DeviceDataClient deviceDataClient;
 
+    @Autowired
+    private DataQueryClient dataQueryClient;
+
     @Override
     public void add(DmpDeviceInfo dmpDeviceInfo) {
         if (checkNameUnique(dmpDeviceInfo)){
@@ -562,4 +570,73 @@ public class DmpDeviceInfoServiceImpl extends AbstractCrudService<DmpDeviceInfoM
 
         return new CommonPage<>(objectList,total,pageNum,pageSize);
     }
+
+    @Override
+    public List<Map<String,Object>> deviceDataTotal(DataTotalRequestVO requestVO){
+        List<Map<String,Object>> list = dataQueryClient.deviceDataTotal(requestVO);
+
+        return list;
+    }
+
+    @Override
+    public List<DataAverageResponseVO> deviceDataAverage(DataAverageRequestVO requestVO){
+        List<DataAverageResponseVO> list = dataQueryClient.deviceDataAverage(requestVO);
+
+        if(requestVO.getGroupType().equals("Each")){
+            if(list.size() > 0){
+                List<String> deviceIdList = new ArrayList<>();
+                for (int i = 0; i < list.size(); i++) {
+                    deviceIdList.add(list.get(i).getDeviceId());
+                }
+                LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
+                queryWrapper.in(DmpDeviceInfo::getDeviceId,deviceIdList)
+                        .eq(DmpDeviceInfo::getDeleteFlag,0)
+                        .eq(DmpDeviceInfo::getTenantId,SecurityUtils.getTenantId());
+                List<DmpDeviceInfo> deviceInfoList = this.list(queryWrapper);
+                if(CollectionUtils.isNotEmpty(deviceIdList)){
+                    for (int i = 0; i < list.size(); i++) {
+                        for (int j = 0; j < deviceInfoList.size(); j++) {
+                            if(list.get(i).getDeviceId().equals(deviceInfoList.get(j).getDeviceId())){
+                                list.get(i).setDeviceName(deviceInfoList.get(j).getDeviceName());
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return list;
+    }
+
+    @Override
+    public List<DataAverageExportVO> DataAverageExport(DataAverageRequestVO requestVO){
+        List<DataAverageExportVO> list = dataQueryClient.DataAverageExport(requestVO);
+
+        if(requestVO.getGroupType().equals("Each")){
+            if(list.size() > 0){
+                List<String> deviceIdList = new ArrayList<>();
+                for (int i = 0; i < list.size(); i++) {
+                    deviceIdList.add(list.get(i).getDeviceName());
+                }
+                LambdaQueryWrapper<DmpDeviceInfo> queryWrapper = Wrappers.lambdaQuery();
+                queryWrapper.in(DmpDeviceInfo::getDeviceId,deviceIdList)
+                        .eq(DmpDeviceInfo::getDeleteFlag,0)
+                        .eq(DmpDeviceInfo::getTenantId,SecurityUtils.getTenantId());
+                List<DmpDeviceInfo> deviceInfoList = this.list(queryWrapper);
+                if(CollectionUtils.isNotEmpty(deviceIdList)){
+                    for (int i = 0; i < list.size(); i++) {
+                        for (int j = 0; j < deviceInfoList.size(); j++) {
+                            if(list.get(i).getDeviceName().equals(deviceInfoList.get(j).getDeviceId())){
+                                list.get(i).setDeviceName(deviceInfoList.get(j).getDeviceName());
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return list;
+    }
 }

+ 78 - 4
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpProductInfoServiceImpl.java

@@ -1,10 +1,12 @@
 package com.usky.iot.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.shaded.com.google.gson.JsonArray;
 import com.alibaba.nacos.shaded.com.google.gson.JsonObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -14,17 +16,16 @@ import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.common.security.utils.SecurityUtils;
-import com.usky.iot.domain.BaseAlarm;
-import com.usky.iot.domain.DmpDeviceType;
-import com.usky.iot.domain.DmpProductAttribute;
-import com.usky.iot.domain.DmpProductInfo;
+import com.usky.iot.domain.*;
 import com.usky.iot.mapper.DmpProductInfoMapper;
 import com.usky.iot.service.*;
+import com.usky.iot.service.config.IntegerUtils;
 import com.usky.iot.service.vo.DmpProductInfoRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -251,4 +252,77 @@ public class DmpProductInfoServiceImpl extends AbstractCrudService<DmpProductInf
     public List<Map<String, Object>> collect() {
         return baseMapper.selectCollect();
     }
+
+    @Override
+    public List<Map<String, Object>> deviceCollect(Integer deptId) {
+        List<Integer> productIds2 = new ArrayList<>();
+        QueryWrapper<DmpProductInfo> query2 = Wrappers.query();
+        query2.select("id as productId","product_name as productName")
+                .eq("delete_flag",0)
+                .eq("tenant_id",SecurityUtils.getTenantId());
+        List<Map<String, Object>> productIds1 = this.listMaps(query2);
+        if (productIds1.size()>0){
+            for (int i = 0; i < productIds1.size(); i++) {
+                productIds2.add(Integer.valueOf(productIds1.get(i).get("productId").toString()));
+            }
+        }
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (CollectionUtil.isNotEmpty(productIds2)){
+            QueryWrapper<DmpDeviceStatus> query1 = Wrappers.query();
+            query1.select("product_id as productId","count(*) as count","count(device_status != 1 or null) as " +
+                    "faultCount")
+                    .in("product_id",productIds2)
+                    .groupBy("product_id");
+            list = dmpDeviceStatusService.listMaps(query1);
+            for (int l = 0; l < productIds1.size(); l++) {
+                for (int j = 0; j < list.size(); j++){
+                    if (productIds1.get(l).get("productId").equals(list.get(j).get("productId"))){
+                        list.get(j).put("productName",productIds1.get(l).get("productName"));
+                    }
+                }
+            }
+        }
+        return list;
+    }
+
+    @Override
+    public List<Object> deviceStatusStatistic(Integer deptId,String productCode) {
+        List<Object> list2 = new ArrayList<>();
+        QueryWrapper<DmpDeviceStatus> query = Wrappers.query();
+        query.select("count(*) as count","COUNT(device_status=1 or null) as " +
+                "onCount","COUNT(device_status=2 or null) as offCount")
+                .eq(StringUtils.isNotBlank(productCode),"product_code",productCode);
+        List<Map<String, Object>> list = dmpDeviceStatusService.listMaps(query);
+        QueryWrapper<DmpDeviceInfo> query1 = Wrappers.query();
+        query1.select("count(*) as count","COUNT(service_status=1 or null) as notActiveCount")
+                .eq(StringUtils.isNotBlank(productCode),"product_code",productCode);
+        List<Map<String, Object>> list1 = dmpDeviceInfoService.listMaps(query1);
+        Map<String, Object> map = new HashMap<>();
+        if (Integer.valueOf(list.get(0).get("offCount").toString()).equals(0)){
+            map.put("count", 0);
+            map.put("onCount", 0);
+            map.put("offCount", 0);
+            map.put("notActiveCount", 0);
+            map.put("onCountBig", 0);
+            map.put("offCountBig", 0);
+            map.put("notActiveCountBig", 0);
+        }else {
+            BigDecimal onCountBig = new BigDecimal(Integer.valueOf(list.get(0).get("onCount").toString()));
+            BigDecimal temp = new BigDecimal(Integer.valueOf(list.get(0).get("count").toString()));
+            onCountBig = onCountBig.divide(temp,2,RoundingMode.HALF_UP);
+            BigDecimal offCountBig = new BigDecimal(Integer.valueOf(list.get(0).get("offCount").toString()));
+            offCountBig = offCountBig.divide(temp,2,RoundingMode.HALF_UP);
+            BigDecimal notActiveCountBig = new BigDecimal(Integer.valueOf(list1.get(0).get("notActiveCount").toString()));
+            notActiveCountBig = notActiveCountBig.divide(temp,2,RoundingMode.HALF_UP);
+            map.put("count", Integer.valueOf(list.get(0).get("count").toString()));
+            map.put("onCount", Integer.valueOf(list.get(0).get("onCount").toString()));
+            map.put("offCount", Integer.valueOf(list.get(0).get("offCount").toString()));
+            map.put("notActiveCount", Integer.valueOf(list1.get(0).get("notActiveCount").toString()));
+            map.put("onCountBig", onCountBig);
+            map.put("offCountBig", offCountBig);
+            map.put("notActiveCountBig", notActiveCountBig);
+        }
+        list2.add(map);
+        return list2;
+    }
 }

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/SysDeptServiceImpl.java

@@ -0,0 +1,20 @@
+package com.usky.iot.service.impl;
+
+import com.usky.iot.domain.SysDept;
+import com.usky.iot.mapper.SysDeptMapper;
+import com.usky.iot.service.SysDeptService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 部门表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2023-11-27
+ */
+@Service
+public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDept> implements SysDeptService {
+
+}

+ 13 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceInfoMapper.xml

@@ -57,4 +57,17 @@
         </where>
     </select>
 
+    <select id="getProductInfo" resultType="com.usky.iot.domain.DmpProductInfo">
+        select dpi.*
+        from dmp_product dpi
+        <where>
+            <if test="productCode != null">
+                and dpi.product_code = #{productCode}
+            </if>
+            <if test="1 == 1">
+                and dpi.delete_flag = 0
+            </if>
+        </where>
+    </select>
+
 </mapper>

+ 24 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/SysDeptMapper.xml

@@ -0,0 +1,24 @@
+<?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.usky.iot.mapper.SysDeptMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.SysDept">
+        <id column="dept_id" property="deptId" />
+        <result column="parent_id" property="parentId" />
+        <result column="ancestors" property="ancestors" />
+        <result column="dept_name" property="deptName" />
+        <result column="order_num" property="orderNum" />
+        <result column="leader" property="leader" />
+        <result column="phone" property="phone" />
+        <result column="email" property="email" />
+        <result column="status" property="status" />
+        <result column="del_flag" property="delFlag" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 31 - 0
service-issue/service-issue-api/pom.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>service-issue</artifactId>
+        <groupId>com.usky</groupId>
+        <version>0.0.1</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-issue-api</artifactId>
+    <!-- SpringCloud Openfeign -->
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>usky-common-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-openfeign-core</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+
+</project>

+ 0 - 0
service-issue/service-issue-biz/git


+ 99 - 0
service-issue/service-issue-biz/pom.xml

@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>service-issue</artifactId>
+        <groupId>com.usky</groupId>
+        <version>0.0.1</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-issue-biz</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>common-cloud-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-backend-api</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-issue-api</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-spring-boot-starter</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>4.5.16</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
+            <version>1.1.0</version>
+        </dependency>
+
+        <!--MQTT依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-integration</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.integration</groupId>
+            <artifactId>spring-integration-mqtt</artifactId>
+        </dependency>
+        <!--websocket依赖-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-websocket</artifactId>
+            <version>5.2.8.RELEASE</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.2.6.RELEASE</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>com.github.shalousun</groupId>
+                <artifactId>smart-doc-maven-plugin</artifactId>
+                <version>2.1.1</version>
+                <configuration>
+                    <!--指定生成文档的使用的配置文件,配置文件放在自己的项目中-->
+                    <configFile>./src/main/resources/smart-doc.json</configFile>
+                    <!--指定项目名称-->
+                    <projectName>test</projectName>
+                    <!--                    <excludes>-->
+                    <!--                        <exclude>com.bizmatics:product-service-provider</exclude>-->
+                    <!--                        <exclude>cn.afterturn:easypoi-web</exclude>-->
+                    <!--                    </excludes>-->
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 46 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/RuoYiSystemApplication.java

@@ -0,0 +1,46 @@
+package com.usky.issue;
+
+
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.core.env.Environment;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+/**
+ * 系统模块
+ * 
+ * @author ruoyi
+ */
+
+//@EnableSwagger2
+@EnableFeignClients(basePackages = "com.usky")
+@MapperScan(value = "com.usky.issue.mapper")
+@ComponentScan("com.usky")
+@SpringBootApplication
+public class RuoYiSystemApplication
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(RuoYiSystemApplication.class);
+
+    public static void main(String[] args) throws UnknownHostException {
+        ConfigurableApplicationContext application = SpringApplication.run(RuoYiSystemApplication.class, args);
+        Environment env = application.getEnvironment();
+        String ip = InetAddress.getLocalHost().getHostAddress();
+        String port = env.getProperty("server.port");
+        String path = env.getProperty("server.servlet.context-path");
+        LOGGER.info("\n----------------------------------------------------------\n\t" +
+                "Application is running! Access URLs:\n\t" +
+                "Local: \t\thttp://localhost:" + port + (null==path?"":path) + "/\n\t" +
+                "External: \thttp://" + ip + ":" + port + (null==path?"":path) + "/\n\t" +
+                "Api: \t\thttp://" + ip + ":" + port + (null==path?"":path) + "/swagger-ui/index.html\n\t" +
+                "----------------------------------------------------------");
+    }
+}

+ 108 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/controller/MybatisGeneratorUtils.java

@@ -0,0 +1,108 @@
+package com.usky.issue.controller;//package com.usky.iot.controller;//package com.usky.dm.controller.web.business;//package com.usky.dm.controller.web;
+
+
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.InjectionConfig;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author yq
+ * @date 2021/7/6 11:42
+ */
+public class MybatisGeneratorUtils {
+    public static void main(String[] args) {
+
+            shell("service-issue","service-issue-biz");
+    }
+
+    private static void shell(String parentName,String model) {
+
+        AutoGenerator mpg = new AutoGenerator();
+        //1、全局配置
+        GlobalConfig gc = new GlobalConfig();
+//        File file = new File(model);
+//        String path = file.getAbsolutePath();
+        String projectPath = System.getProperty("user.dir");
+        projectPath+="/"+parentName;
+        projectPath+="/"+model;
+        gc.setOutputDir(projectPath+ "/src/main/java");  //生成路径(一般都是生成在此项目的src/main/java下面)
+        //修改为自己的名字
+        gc.setAuthor("fu"); //设置作者
+        gc.setOpen(false);
+        gc.setFileOverride(true); //第二次生成会把第一次生成的覆盖掉
+        gc.setServiceName("%sService"); //生成的service接口名字首字母是否为I,这样设置就没有
+        gc.setBaseResultMap(true); //生成resultMap
+        mpg.setGlobalConfig(gc);
+
+        //2、数据源配置
+        //修改数据源
+        DataSourceConfig dsc = new DataSourceConfig();
+        dsc.setUrl("jdbc:mysql://47.98.201.187:3306/UskyOw?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8");
+        dsc.setDriverName("com.mysql.jdbc.Driver");
+        dsc.setUsername("fuYuChuan");
+        dsc.setPassword("fuYuChuan@123");
+        mpg.setDataSource(dsc);
+
+        // 3、包配置
+        PackageConfig pc = new PackageConfig();
+        pc.setParent("com.usky.issue");
+        pc.setController("controller.web");
+        pc.setEntity("domain");
+        pc.setMapper("mapper");
+        pc.setService("service");
+        pc.setServiceImpl("service.impl");
+//        pc.setXml("mapper.demo");
+        //pc.setModuleName("test");
+        mpg.setPackageInfo(pc);
+
+        // 4、策略配置
+        StrategyConfig strategy = new StrategyConfig();
+        strategy.setNaming(NamingStrategy.underline_to_camel);
+        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
+        strategy.setSuperMapperClass("com.usky.common.mybatis.core.CrudMapper");
+        strategy.setSuperServiceClass("com.usky.common.mybatis.core.CrudService");
+        strategy.setSuperServiceImplClass("com.usky.common.mybatis.core.AbstractCrudService");
+        // strategy.setTablePrefix("t_"); // 表名前缀
+        strategy.setEntityLombokModel(true); //使用lombok
+        //修改自己想要生成的表
+        strategy.setInclude("yt_device_status");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        mpg.setStrategy(strategy);
+
+        // 关闭默认 xml 生成,调整生成 至 根目录
+        //修改对应的模块名称
+        TemplateConfig tc = new TemplateConfig();
+        // 自定义配置
+        InjectionConfig cfg = new InjectionConfig() {
+            @Override
+            public void initMap() {
+                // to do nothing
+            }
+        };
+        //如果模板引擎是 velocity
+        String templatePath = "/templates/mapper.xml.vm";
+        // 自定义输出配置
+        List<FileOutConfig> focList = new ArrayList<>();
+        // 自定义配置会被优先输出
+        String finalProjectPath = projectPath;
+        focList.add(new FileOutConfig(templatePath) {
+            @Override
+            public String outputFile(TableInfo tableInfo) {
+                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
+                return finalProjectPath + "/src/main/resources/mapper/issue" + "/"
+                        + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
+            }
+        });
+        cfg.setFileOutConfigList(focList);
+        mpg.setCfg(cfg);
+        tc.setXml(null);
+        mpg.setTemplate(tc);
+        //5、执行
+        mpg.execute();
+    }
+}

+ 41 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/controller/web/YtDeviceStatusController.java

@@ -0,0 +1,41 @@
+package com.usky.issue.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.issue.domain.YtDeviceStatus;
+import com.usky.issue.service.YtDeviceStatusService;
+import com.usky.issue.service.vo.YtDeviceStatusRequestVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 离线设备VIEW 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2023-11-23
+ */
+@RestController
+@RequestMapping("/ytDeviceStatus")
+public class YtDeviceStatusController {
+    @Autowired
+    private YtDeviceStatusService ytDeviceStatusService;
+
+    /**
+     * 分页
+     * @param requestVO
+     * @return
+     */
+    @PostMapping("page")
+    ApiResult<CommonPage<YtDeviceStatus>> page(@RequestBody YtDeviceStatusRequestVO requestVO){
+        return ApiResult.success(ytDeviceStatusService.page(requestVO));
+    }
+
+}
+

+ 73 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/domain/YtDeviceStatus.java

@@ -0,0 +1,73 @@
+package com.usky.issue.domain;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 离线设备VIEW
+ * </p>
+ *
+ * @author fu
+ * @since 2023-11-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class YtDeviceStatus implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 单位编号
+     */
+    private String companyCode;
+
+    /**
+     * 单位名称
+     */
+    private String companyName;
+
+    /**
+     * 设备编号
+     */
+    private String deviceCode;
+
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+
+    /**
+     * 单位地址
+     */
+    private String address;
+
+    /**
+     * 设备类型
+     */
+    private String deviceType;
+
+    /**
+     * 最后通信时间
+     */
+    private String dataTime;
+
+    /**
+     * 当前时间
+     */
+    private String statTime;
+
+    /**
+     * 时间差值(小时)
+     */
+    private Long difference;
+
+
+}

+ 23 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/mapper/YtDeviceStatusMapper.java

@@ -0,0 +1,23 @@
+package com.usky.issue.mapper;
+
+import com.usky.issue.domain.YtDeviceStatus;
+import com.usky.common.mybatis.core.CrudMapper;
+import feign.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 离线设备VIEW Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2023-11-23
+ */
+@Repository
+public interface YtDeviceStatusMapper extends CrudMapper<YtDeviceStatus> {
+    List<YtDeviceStatus> getDeviceStatusType(@Param("deviceType") String deviceType,
+                                             @Param("Current") int Current,
+                                             @Param("Size") int Size);
+}

+ 20 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/YtDeviceStatusService.java

@@ -0,0 +1,20 @@
+package com.usky.issue.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.issue.domain.YtDeviceStatus;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.issue.service.vo.YtDeviceStatusRequestVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 离线设备VIEW 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2023-11-23
+ */
+public interface YtDeviceStatusService extends CrudService<YtDeviceStatus> {
+    CommonPage<YtDeviceStatus> page(YtDeviceStatusRequestVO requestVO);
+}

+ 60 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/impl/YtDeviceStatusServiceImpl.java

@@ -0,0 +1,60 @@
+package com.usky.issue.service.impl;
+
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.issue.domain.YtDeviceStatus;
+import com.usky.issue.mapper.YtDeviceStatusMapper;
+import com.usky.issue.service.YtDeviceStatusService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.issue.service.vo.YtDeviceStatusRequestVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 离线设备VIEW 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2023-11-23
+ */
+@Service
+public class YtDeviceStatusServiceImpl extends AbstractCrudService<YtDeviceStatusMapper, YtDeviceStatus> implements YtDeviceStatusService {
+
+    @Autowired
+    private YtDeviceStatusMapper ytDeviceStatusMapper;
+
+    @Override
+    public CommonPage<YtDeviceStatus> page(YtDeviceStatusRequestVO requestVO) {
+
+        String deviceType = requestVO.getDeviceType();
+        int pageCurrent = requestVO.getCurrent();
+        int pageSize = requestVO.getSize();
+
+        List<YtDeviceStatus> list = ytDeviceStatusMapper.getDeviceStatusType(deviceType, pageCurrent, pageSize);
+        // 计算总记录数
+        int total = list.size();
+
+        // 计算总页数
+        int current = (total + pageSize - 1) / pageSize;
+
+        // 计算当前页的起始索引
+        int startIndex = (pageCurrent - 1) * pageSize;
+
+        //对传入类型进行判断筛选
+        List<YtDeviceStatus> filteredList = list.stream()
+                .filter(device -> device.getDeviceType().equals(deviceType))
+                .collect(Collectors.toList());
+
+        // 对记录进行分页操作
+        List<YtDeviceStatus> records = filteredList.stream()
+                .skip(startIndex)//跳过startIndex个元素,从startIndex+1开始
+                .limit(pageSize)//限制显示大小,只处理pageSize个元素
+                .collect(Collectors.toList());//将流中的元素收集到List<YtDeviceStatus> == 获取当前页记录
+
+        return new CommonPage<>(records, total, pageSize, pageCurrent);
+    }
+}

+ 29 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/vo/YtDeviceStatusRequestVO.java

@@ -0,0 +1,29 @@
+package com.usky.issue.service.vo;
+
+import lombok.Data;
+
+/**
+ * @description:TODO
+ * @author: fu
+ * @create: 2023/11/23 15:58
+ */
+@Data
+public class YtDeviceStatusRequestVO {
+
+    /**
+     * 页数
+     */
+    private Integer current;
+
+    /**
+     * 条数
+     */
+    private Integer size;
+
+    /**
+     * 设备类型
+     */
+    private String deviceType;
+
+}
+

+ 25 - 0
service-issue/service-issue-biz/src/main/resources/bootstrap.yml

@@ -0,0 +1,25 @@
+# Tomcat
+server:
+  port: 9887
+
+# Spring
+spring: 
+  application:
+    # 应用名称
+    name: service-issue
+  profiles:
+    # 环境配置
+    active: dev
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: usky-cloud-nacos:8848
+      config:
+        # 配置中心地址
+        server-addr: usky-cloud-nacos:8848
+        # 配置文件格式
+        file-extension: yml
+        # 共享配置
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

+ 108 - 0
service-issue/service-issue-biz/src/main/resources/doc/index.adoc

@@ -0,0 +1,108 @@
+= 安防项目
+
+[width="100%",options="header"]
+[stripes=even]
+|====================
+|Version |  Update Time  | Status | Author |  Description
+|v2022-04-21 16:57:08|2022-04-21 16:57:08|auto|@yq|Created by smart-doc
+|====================
+
+
+== &lt;p&gt;参数配置表 前端控制器&lt;/p&gt;
+== &lt;p&gt;部门信息&lt;/p&gt;
+=== 查看部门信息
+*URL:* http:10.23.39.1:8082/sysDept/list
+
+*Type:* POST
+
+*Author:* ya
+
+*Content-Type:* application/json; charset=utf-8
+
+
+
+
+*Body-parameters:*
+
+[width="100%",options="header"]
+[stripes=even]
+|====================
+|Parameter | Type|Description|Required|Since
+|deptId|int64|部门id|false|-
+|parentId|int64|父部门id|false|-
+|ancestors|string|祖级列表|false|-
+|deptName|string|部门名称|false|-
+|orderNum|int32|显示顺序|false|-
+|leader|string|负责人|false|-
+|phone|string|联系电话|false|-
+|email|string|邮箱|false|-
+|status|string|部门状态(0正常 1停用)|false|-
+|delFlag|string|删除标志(0代表存在 2代表删除)|false|-
+|createBy|string|创建者|false|-
+|createTime|string|创建时间|false|-
+|updateBy|string|更新者|false|-
+|updateTime|string|更新时间|false|-
+|bId|int64|建筑id|false|-
+|====================
+
+*Response-fields:*
+
+[width="100%",options="header"]
+[stripes=even]
+|====================
+|Field | Type|Description|Since
+|status|object|No comments found.|-
+|code|string|No comments found.|-
+|msg|string|No comments found.|-
+|data|object|No comments found.|-
+|└─deptId|int64|部门id|-
+|└─parentId|int64|父部门id|-
+|└─ancestors|string|祖级列表|-
+|└─deptName|string|部门名称|-
+|└─orderNum|int32|显示顺序|-
+|└─leader|string|负责人|-
+|└─phone|string|联系电话|-
+|└─email|string|邮箱|-
+|└─status|string|部门状态(0正常 1停用)|-
+|└─delFlag|string|删除标志(0代表存在 2代表删除)|-
+|└─createBy|string|创建者|-
+|└─createTime|string|创建时间|-
+|└─updateBy|string|更新者|-
+|└─updateTime|string|更新时间|-
+|└─bId|int64|建筑id|-
+|exception|string|No comments found.|-
+|====================
+
+*Response-example:*
+----
+{
+	"status": {
+		
+	},
+	"code": "97564",
+	"msg": "wnr5qt",
+	"data": [
+		{
+			"deptId": 540,
+			"parentId": 858,
+			"ancestors": "o5lg60",
+			"deptName": "文.沈",
+			"orderNum": 260,
+			"leader": "ufz93p",
+			"phone": "17852835049",
+			"email": "智渊.徐@yahoo.com",
+			"status": "nu6cnp",
+			"delFlag": "72oiji",
+			"createBy": "5fxr6j",
+			"createTime": "2022-04-21 16:57:10",
+			"updateBy": "4kcs4e",
+			"updateTime": "2022-04-21 16:57:10",
+			"bId": 977
+		}
+	],
+	"exception": "53u6bg"
+}
+----
+
+== &lt;p&gt;用户信息表 前端控制器&lt;/p&gt;
+

+ 94 - 0
service-issue/service-issue-biz/src/main/resources/logback.xml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 日志存放路径 -->
+    <property name="log.path" value="/var/log/uskycloud/service-offline" />
+    <!-- 日志输出格式 -->
+    <property name="log.pattern" value="%d{MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{26}:%line: %msg%n" />
+    <!--    	<property name="log.pattern" value="%gray(%d{MM-dd HH:mm:ss.SSS}) %highlight(%-5level) &#45;&#45; [%gray(%thread)] %cyan(%logger{26}:%line): %msg%n" />-->
+
+
+    <property name="SQL_PACKAGE" value="com.usky.iot.mapper"/>
+
+    <!-- 控制台输出 -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="file_sql" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/sql.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/sql.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>3</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 系统日志输出 -->
+    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/info.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>3</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/error.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>ERROR</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 系统模块日志级别控制  -->
+    <!--	<logger name="com.usky" level="info" />-->
+    <!-- Spring日志级别控制  -->
+    <!--	<logger name="org.springframework" level="warn" />-->
+
+    <logger name="${SQL_PACKAGE}" additivity="false" level="debug">
+        <appender-ref ref="console"/>
+        <appender-ref ref="file_sql"/>
+    </logger>
+
+    <!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <appender-ref ref="file_error" />
+        <appender-ref ref="console" />
+    </root>
+</configuration>

+ 36 - 0
service-issue/service-issue-biz/src/main/resources/mapper/issue/YtDeviceStatusMapper.xml

@@ -0,0 +1,36 @@
+<?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.usky.issue.mapper.YtDeviceStatusMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.issue.domain.YtDeviceStatus">
+        <result column="id" property="id"/>
+        <result column="company_code" property="companyCode"/>
+        <result column="company_name" property="companyName"/>
+        <result column="device_code" property="deviceCode"/>
+        <result column="device_name" property="deviceName"/>
+        <result column="address" property="address"/>
+        <result column="device_type" property="deviceType"/>
+        <result column="data_time" property="dataTime"/>
+        <result column="stat_time" property="statTime"/>
+        <result column="difference" property="difference"/>
+    </resultMap>
+
+    <select id="getDeviceStatusType" resultType="com.usky.issue.domain.YtDeviceStatus">
+        select
+        device_code,device_name,address,device_type,company_name,company_code,data_time
+        from yt_device_status yds
+        <where>
+                company_code in ('10357','10356','10354','10352','10349','10350','10347','10346','10334','10188',
+                '10343','10348','10331','10320','10320','10164','10071','10345','10144','10064','10336','10131','10205',
+                '10340','10339','10225','10323','10320','10134','10337','10226','10214','10160','10076','10079','10078',
+                '10215','10324','10324','10154','10106','10121','10067','10325','10323','10322','10320','10128','10314',
+                '10315','10312','10222','10077','10146','10151','10232','10116','10114','10122','10166','10353','10358',
+                '10359','10361','10360','10140','10362','10206','10355','10105','10338','10318','10367','10124','10365',
+                '10363','10368','10371','10341','10375','10373','10126','10374','10376','10378')
+                AND difference > 48
+        </where>
+        order by company_code asc
+    </select>
+
+</mapper>

+ 15 - 0
service-issue/service-issue-biz/src/main/resources/smart-doc.json

@@ -0,0 +1,15 @@
+{
+  "outPath":"./src/main/resources/doc",
+  "serverUrl": "http:10.23.39.1:9887/",
+  "isStrict": false,
+  "coverOld": true,
+  "allInOne": true,
+  "packageFilters": "com.usky.iot.controller.web",
+  "requestExample":"false",
+  "responseExample":"true",
+  "projectName": "iot项目",
+  "appKey": "20211216921084883495813120",
+  "appToken":"967031b0cc6f474aaf73616cbf2b25c2",
+  "secret": "N@Pd,KXAHki*BW3=zK.XPNykf!=CM79J",
+  "openUrl": "http://101.133.214.75:7700/api"
+}