jiawuxian 1 рік тому
батько
коміт
ddaff22b06

+ 11 - 1
project_data/sql/0.0.6-iot/soc/soc.sql

@@ -49,7 +49,14 @@ CREATE PROCEDURE schema_change () BEGIN
 					COMMENT = '报警控制器(子系统)布撤防历史表';		
     END IF;	
 	
-	
+	IF NOT EXISTS(SELECT *
+                  FROM information_schema.columns
+                  WHERE table_schema = DATABASE()
+                    AND table_name = 'iot_sensor'
+                    AND column_name = 'state_start_time') THEN
+			ALTER TABLE `iot_sensor` 
+				ADD COLUMN `state_start_time` datetime NULL COMMENT '当前状态的开始时间' AFTER `state_update_time`;		
+    END IF;	
 END ??
 DELIMITER ;
 CALL schema_change ();
@@ -1186,6 +1193,9 @@ INSERT INTO `sys_dict_data` ( `dict_sort`, `dict_label`, `dict_value`, `dict_typ
 INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 0, '正常', '0', 'video_diagnosis_state', NULL, 'default', 'N', '0', '超级管理员', '2024-02-22 18:04:49', '', NULL, NULL);
 INSERT INTO `sys_dict_data` (`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ( 1, '异常', '1', 'video_diagnosis_state', NULL, 'default', 'N', '0', '超级管理员', '2024-02-22 18:04:57', '', NULL, NULL);
 
+DELETE from sys_role_menu WHERE menu_id in (SELECT id from sys_menu WHERE `name`='物联感知' or parent_id in (SELECT id from sys_menu WHERE `name`='物联感知'));
+DELETE from sys_menu WHERE `name`='物联感知' or parent_id in(SELECT id from sys_menu WHERE `name`='物联感知');
+
 DELETE from `sys_menu` where id in (01747911340288892930,01762681378201595906,01762681622628855809,01762681985838804994,01747912241556742146,01760840909641408513,01749628217843228674,01761949441304440833);
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01747911340288892930, '物联感知', 0, 27, 'iot', NULL, NULL, 1, 0, 'M', '0', '0', '', '1', 'job', NULL, '超级管理员', '2024-01-18 17:18:32', '超级管理员', '2024-02-01 09:34:05', '');
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01762681378201595906, '录像诊断', 1726900357129232386, 13, '/iot/videoDiagnosis', NULL, NULL, 1, 0, 'C', '0', '0', 'appiot:videoDiagnosis', '0', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAABBCAYAAACO98lFAAAACXBIWXMAAAsSAAALEgHS3X78AAACD0lEQVR4nO2by1HDMBCGfxjuoQMyowKgA+CqU0pIB8lBd8JdM4QKCB3gi87pgFCAZkIHUEEYZWXGhDxkm8Gxd79b/FDkL7urSBqfrFYrcOeUuwCIBIK9BIgEgr0EiASCvQSIBIK9BIgEgr0EiASCvYTAWfGDcqYPoN9cd0qz8Np+1G3keyqtnJkCGP33U/wBj17bcZ1m1unQYgGBkXJmUqeBvCa0VUBO/UjoAL2yjxDqn3Jmjs3CyAHlzHmMnLv8cVlJUM4MAYT6cVE8fgwSMgDTPefDLzerEvI5ypmr+B3X2843LSHz2g4OXaScuQHwWrbxGPqTQ4W/6cK4SLnIa5t0XRHlTMj7ZcrI17SEcQzVvShnZqkNhqhRzgRpD6kp1HQ6hE7OY6d3EUL6MqWxWPieynbiGApjb1fBqkCleQ/7WSREAsFeAkQCwV4CRALBXgJEAsFeAkQCwV4CRALBXgI6KCGsHr+XvalTEry2QUJYpLkH8Jl6X+fSIexNem0nUUaWck9na4LXdhkXcW8PpUjnC2NIEa9tf1+KsBkdYooEGc+b51gNkbFeDGOKvOXH2e1FojCKxNXpzkRC8nBYxGu73s/I0+FXnrSM5M2ZbeQSxsUcaRlZ3G+szI/Xf5Qzg/gnoy28VNmn3IT9O1CQWSTBXgJEAsFeAkQCwV4CRALBXgJEAsFeAkQCwV4CAHwBGKFz+db+wtQAAAAASUVORK5CYII=', NULL, '超级管理员', '2024-02-28 11:30:41', '超级管理员', '2024-02-28 11:38:43', '');

+ 53 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/IotSensorAppController.java

@@ -0,0 +1,53 @@
+package com.xunmei.iot.controller;
+
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.log.annotation.Log;
+import com.xunmei.common.log.enums.BusinessType;
+import com.xunmei.iot.dto.sensor.SensorAppPageDto;
+import com.xunmei.iot.dto.sensor.SensorPageDto;
+import com.xunmei.iot.service.IIotCommonSensorService;
+import com.xunmei.iot.vo.sensor.SensorAppPageVo;
+import com.xunmei.iot.vo.sensor.SensorAppStateVo;
+import com.xunmei.iot.vo.sensor.SensorAppVo;
+import com.xunmei.iot.vo.sensor.SensorPageVo;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @author jingyuanchao
+ * @date 2024/2/26 14:10
+ */
+@RestController
+@RequestMapping("/sensor/app")
+public class IotSensorAppController {
+
+    @Resource
+    IIotCommonSensorService sensorService;
+
+
+    @ApiOperation("动环设备分页")
+    @PostMapping({"/find"})
+    TableDataInfo<SensorAppPageVo> page(@RequestBody final SensorAppPageDto request) {
+        TableDataInfo<SensorAppPageVo> page = this.sensorService.selectSensorDataAppPage(request);
+        return page;
+    }
+
+    @ApiOperation("动环设备分页")
+    @PostMapping({"/state"})
+    AjaxResult state(@RequestBody final SensorAppPageDto request) {
+        SensorAppStateVo vo = this.sensorService.stateStatistic(request);
+        return AjaxResult.success(vo);
+    }
+
+    @ApiOperation("动环设备分页")
+    @GetMapping({"/detail/{id}"})
+    AjaxResult detail(@PathVariable("id") Long id) {
+        SensorAppVo vo = this.sensorService.appDetail(id);
+        return AjaxResult.success(vo);
+    }
+}

+ 20 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/dto/sensor/SensorAppPageDto.java

@@ -0,0 +1,20 @@
+package com.xunmei.iot.dto.sensor;
+
+import com.xunmei.common.core.web.domain.PageRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author jingyuanchao
+ * @date 2024/2/26 14:32
+ */
+@Data
+public class SensorAppPageDto extends PageRequest {
+    @ApiModelProperty(value = "传感器设备类型")
+    private String deviceType;
+
+    @ApiModelProperty(value = "告警状态,0:正常,1:告警")
+    private Integer state;
+}

+ 7 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotCommonSensorMapper.java

@@ -3,8 +3,10 @@ package com.xunmei.iot.mapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xunmei.common.core.domain.iot.domain.IotSensor;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.iot.dto.sensor.SensorAppPageDto;
+import com.xunmei.iot.vo.sensor.SensorAppStateVo;
 import com.xunmei.iot.dto.sensor.SensorPageDto;
+import com.xunmei.iot.vo.sensor.SensorAppPageVo;
 import com.xunmei.iot.vo.sensor.SensorExportVo;
 import com.xunmei.iot.vo.sensor.SensorPageVo;
 import org.apache.ibatis.annotations.Param;
@@ -32,4 +34,8 @@ public interface IotCommonSensorMapper extends BaseMapper<IotSensor> {
 
 
     List<SensorExportVo> selectListData(@Param("request") SensorPageDto request);
+
+    Page<SensorAppPageVo> selectAppPageData(Page<SensorAppPageVo> pageRequest, @Param("request") SensorAppPageDto request);
+
+    SensorAppStateVo stateStatistic(SensorAppPageDto request);
 }

+ 10 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IIotCommonSensorService.java

@@ -3,7 +3,11 @@ package com.xunmei.iot.service;
 import com.xunmei.common.core.domain.iot.domain.IotSensor;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.iot.dto.sensor.SensorAppPageDto;
+import com.xunmei.iot.vo.sensor.SensorAppStateVo;
 import com.xunmei.iot.dto.sensor.SensorPageDto;
+import com.xunmei.iot.vo.sensor.SensorAppPageVo;
+import com.xunmei.iot.vo.sensor.SensorAppVo;
 import com.xunmei.iot.vo.sensor.SensorPageVo;
 
 import javax.servlet.http.HttpServletResponse;
@@ -23,4 +27,10 @@ public interface IIotCommonSensorService extends IService<IotSensor> {
     TableDataInfo<SensorPageVo> selectSensorLogDataPage(SensorPageDto request);
 
     void export(SensorPageDto request, HttpServletResponse response);
+
+    TableDataInfo<SensorAppPageVo> selectSensorDataAppPage(SensorAppPageDto request);
+
+    SensorAppStateVo stateStatistic(SensorAppPageDto request);
+
+    SensorAppVo appDetail(Long id);
 }

+ 48 - 5
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotCommonSensorServiceImpl.java

@@ -5,21 +5,23 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.alibaba.fastjson2.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xunmei.common.core.constant.DictConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
-import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskExportVo;
 import com.xunmei.common.core.domain.iot.domain.IotSensor;
-import com.xunmei.common.core.domain.mediator.domain.MediatorCategory;
+import com.xunmei.common.core.exception.ServiceException;
+import com.xunmei.common.core.utils.bean.BeanUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
-import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.DictUtils;
+import com.xunmei.iot.dto.sensor.SensorAppPageDto;
+import com.xunmei.iot.vo.sensor.SensorAppStateVo;
 import com.xunmei.iot.dto.sensor.SensorPageDto;
 import com.xunmei.iot.mapper.IotCommonSensorMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.iot.mapper.MediatorCategoryMapper;
 import com.xunmei.iot.service.IIotCommonSensorService;
+import com.xunmei.iot.vo.sensor.SensorAppPageVo;
+import com.xunmei.iot.vo.sensor.SensorAppVo;
 import com.xunmei.iot.vo.sensor.SensorExportVo;
 import com.xunmei.iot.vo.sensor.SensorPageVo;
 import com.xunmei.system.api.RemoteOrgService;
@@ -33,7 +35,6 @@ import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 
 /**
  * <p>
@@ -110,6 +111,48 @@ public class IotCommonSensorServiceImpl extends ServiceImpl<IotCommonSensorMappe
         }
     }
 
+    @Override
+    public TableDataInfo<SensorAppPageVo> selectSensorDataAppPage(SensorAppPageDto request) {
+        final SysOrg sysOrg = orgService.selectOrgById(request.getOrgId(), SecurityConstants.INNER);
+        if (ObjectUtil.equal(Boolean.TRUE, request.getCheckSub())) {
+            request.setOrgPath(sysOrg.getPath());
+            request.setOrgId(null);
+        }
+
+        Page<SensorAppPageVo> page = sensorMapper.selectAppPageData(request.getPageRequest(), request);
+        for (SensorAppPageVo record : page.getRecords()) {
+            final String info = record.getInfo();
+            record.setInfo(dealInfoData(info));
+            record.setDeviceType(DictUtils.getDictLabel(DictConstants.SENSOR_DEVICE_TYPE, Integer.parseInt(record.getDeviceType())));
+            record.setStateText(DictUtils.getDictLabel(DictConstants.SENSOR_ALARM_STATUS, record.getState()));
+        }
+
+        return TableDataInfo.build(page);
+    }
+
+    @Override
+    public SensorAppStateVo stateStatistic(SensorAppPageDto request) {
+        SensorAppStateVo vo = baseMapper.stateStatistic(request);
+
+        return vo;
+    }
+
+    @Override
+    public SensorAppVo appDetail(Long id) {
+        IotSensor sensor = baseMapper.selectById(id);
+
+        if (ObjectUtil.isNull(sensor)) {
+            throw new ServiceException("不存在该设备");
+        }
+
+        SensorAppVo vo = new SensorAppVo();
+        BeanUtils.copyProperties(sensor, vo);
+        vo.setDeviceTypeText(DictUtils.getDictLabel(DictConstants.SENSOR_DEVICE_TYPE, Integer.parseInt(vo.getDeviceType())));
+        vo.setStateText(DictUtils.getDictLabel(DictConstants.SENSOR_ALARM_STATUS, vo.getState()));
+
+        return vo;
+    }
+
     private void dealPageParam(SensorPageDto request) {
         final SysOrg sysOrg = orgService.selectOrgById(request.getOrgId(), SecurityConstants.INNER);
         if (ObjectUtil.equal(Boolean.TRUE, request.getCheckSub())) {

+ 40 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/sensor/SensorAppPageVo.java

@@ -0,0 +1,40 @@
+package com.xunmei.iot.vo.sensor;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xunmei.common.core.constant.Constants;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author jingyuanchao
+ * @date 2024/2/26 14:37
+ */
+@Data
+public class SensorAppPageVo {
+
+    private Long id;
+
+    @ApiModelProperty("设备名称")
+    private String deviceName;
+
+    @ApiModelProperty("设备类型")
+    private String deviceType;
+
+    @ApiModelProperty("所属机构")
+    private String orgName;
+
+    @ApiModelProperty(value = "告警状态,0:正常,1:告警")
+    private Integer state;
+
+    @ApiModelProperty(value = "告警状态")
+    private String stateText;
+
+    @JsonFormat(pattern = Constants.HMS_FORMAT)
+    @ApiModelProperty("上报时间")
+    private LocalDateTime statusUpdateTime;
+
+    @ApiModelProperty("上报内容")
+    private String info;
+}

+ 13 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/sensor/SensorAppStateVo.java

@@ -0,0 +1,13 @@
+package com.xunmei.iot.vo.sensor;
+
+import lombok.Data;
+
+/**
+ * app列表的状态数量
+ */
+@Data
+public class SensorAppStateVo {
+    private Integer alarm;
+
+    private Integer normal;
+}

+ 43 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/sensor/SensorAppVo.java

@@ -0,0 +1,43 @@
+package com.xunmei.iot.vo.sensor;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xunmei.common.core.constant.Constants;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author jingyuanchao
+ * @date 2024/2/26 14:37
+ */
+@Data
+public class SensorAppVo {
+
+    private Long id;
+
+    @ApiModelProperty("设备名称")
+    private String deviceName;
+
+    @ApiModelProperty("设备类型")
+    private String deviceType;
+
+    @ApiModelProperty("设备类型")
+    private String deviceTypeText;
+
+    @ApiModelProperty("所属机构")
+    private String orgName;
+
+    @ApiModelProperty(value = "告警状态,0:正常,1:告警")
+    private Integer state;
+
+    @ApiModelProperty(value = "告警状态")
+    private String stateText;
+
+    @JsonFormat(pattern = Constants.HMS_FORMAT)
+    @ApiModelProperty("上报时间")
+    private LocalDateTime statusUpdateTime;
+
+    @ApiModelProperty("上报内容")
+    private String info;
+}

+ 32 - 0
soc-modules/soc-modules-iot/src/main/resources/mapper/IotSensorMapper.xml

@@ -27,6 +27,38 @@
             and s.state_update_time <![CDATA[<=]]>  #{request.endTime}
         </if>
     </select>
+    <select id="selectAppPageData" resultType="com.xunmei.iot.vo.sensor.SensorAppPageVo">
+        select s.id,org_name, device_name, device_type, infos as info,device_code, status_update_time ,state
+        from iot_sensor s
+        where s.deleted=0
+        <if test="request.orgId!= null">
+            and s.org_id=#{request.orgId}
+        </if>
+        <if test="request.orgPath!= null">
+            and s.org_path like CONCAT(#{request.orgPath}, '%')
+        </if>
+        <if test="request.state!= null">
+            and s.state = #{request.state}
+        </if>
+        <if test="request.deviceType!= null and request.deviceType!= ''">
+            and s.device_type = #{request.deviceType}
+        </if>
+    </select>
+    <select id="stateStatistic" resultType="com.xunmei.iot.vo.sensor.SensorAppStateVo">
+        SELECT count(state=0) as normal,count(state=1) as alarm from iot_sensor
+        from iot_sensor s
+        where s.deleted=0
+        <if test="request.orgId!= null">
+            and s.org_id=#{request.orgId}
+        </if>
+        <if test="request.orgPath!= null">
+            and s.org_path like CONCAT(#{request.orgPath}, '%')
+        </if>
+        <!--        <if test="request.deviceType!= null and request.deviceType!= ''">-->
+        <!--            and s.device_type = #{request.deviceType}-->
+        <!--        </if>-->
+    </select>
+
 
     <select id="selectSensorLogDataPage" resultType="com.xunmei.iot.vo.sensor.SensorPageVo">
         select s.id, org_id, org_name, device_name, infos as info,device_code, update_time from