浏览代码

Merge remote-tracking branch 'origin/V0.1.1_alarm' into V0.1.1_alarm

# Conflicts:
#	project_data/sql/0.1.1/soc/soc.sql
jingyuanchao 1 年之前
父节点
当前提交
1e68a682a9
共有 14 个文件被更改,包括 242 次插入41 次删除
  1. 2 0
      project_data/sql/0.1.1/soc/soc.sql
  2. 2 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/work/dto/WorkRuleReq.java
  3. 96 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/EasyExcelStyleUtils.java
  4. 11 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/QuestionServiceImpl.java
  5. 26 3
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/work/service/impl/IotWorkRuleServiceImpl.java
  6. 5 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/dto/workRule/WorkRuleReq.java
  7. 1 1
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/interfaces/WorkFieldStrategy.java
  8. 2 2
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/interfaces/impl/DeployWorkStrategy.java
  9. 2 2
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/interfaces/impl/ElectWorkStrategy.java
  10. 1 1
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotDayWorkOperationService.java
  11. 5 1
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotDayWorkOperationServiceImpl.java
  12. 19 4
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotDayWorkServiceImpl.java
  13. 24 15
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotWebStatisticBoardServiceImpl.java
  14. 46 12
      soc-modules/soc-modules-iot/src/main/resources/mapper/IotWebStatisticBoardMapper.xml

+ 2 - 0
project_data/sql/0.1.1/soc/soc.sql

@@ -1372,5 +1372,7 @@ CALL schema_change();
 delete from sys_menu where id=01836604852290682881;
 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 (01836604852290682881, '通知规则', 1, 100, 'notice', 'notice/index', NULL, 1, 0, 'C', '0', '0', NULL, '1', 'skill', NULL, '超级管理员', '2024-09-19 11:15:37', '', NULL, '');
 
+-- 修改sys_version表path字段类型和长度
+ALTER TABLE `sys_version` MODIFY COLUMN `path` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '下载地址' AFTER `note`;
 ALTER TABLE `iot_alarm_defence_area`
     MODIFY COLUMN `sensor_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '传感器类型' AFTER `defence_area_name`;

+ 2 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/work/dto/WorkRuleReq.java

@@ -19,4 +19,6 @@ public class WorkRuleReq {
     private List<WorkRuleItemReq> items;
 
     private String remark;
+
+    private String password;
 }

+ 96 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/EasyExcelStyleUtils.java

@@ -0,0 +1,96 @@
+package com.xunmei.common.core.utils;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+
+
+import static org.apache.poi.ss.usermodel.BorderStyle.THIN;
+
+/**
+ * 时间工具类
+ *
+ * @author xunmei
+ */
+public class EasyExcelStyleUtils {
+
+    public static HorizontalCellStyleStrategy buildHorizontalCellStyleStrategy(){
+       return new HorizontalCellStyleStrategy(EasyExcelStyleUtils.getHeadStyle(),EasyExcelStyleUtils.getContentStyle());
+    }
+
+    public static WriteCellStyle getHeadStyle(){
+        // 头的策略
+        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+        // 背景颜色
+//        headWriteCellStyle.setFillForegroundColor(IndexedColors.LIGHT_TURQUOISE1.getIndex());
+//        headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
+
+        // 字体
+        WriteFont headWriteFont = new WriteFont();
+        headWriteFont.setFontName("宋体");//设置字体名字
+        headWriteFont.setFontHeightInPoints((short)14);//设置字体大小
+        headWriteFont.setBold(true);//字体加粗
+        headWriteCellStyle.setWriteFont(headWriteFont); //在样式用应用设置的字体;
+
+        // 样式
+        headWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框;
+        headWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;
+        headWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //设置左边框;
+        headWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;
+        headWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框;
+        headWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;
+        headWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框;
+        headWriteCellStyle.setTopBorderColor((short) 0); //设置顶边框颜色;
+
+        headWriteCellStyle.setWrapped(true);  //设置自动换行;
+
+        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//设置水平对齐的样式为居中对齐;
+        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //设置垂直对齐的样式为居中对齐;
+        headWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适
+
+        return headWriteCellStyle;
+    }
+
+    /**
+     * 内容样式
+     * @return
+     */
+    public static WriteCellStyle getContentStyle(){
+        // 内容的策略
+        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
+
+        // 背景绿色
+        // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
+//        contentWriteCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
+//        contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
+
+        // 设置字体
+        WriteFont contentWriteFont = new WriteFont();
+        contentWriteFont.setFontHeightInPoints((short) 11);//设置字体大小
+        contentWriteFont.setFontName("宋体"); //设置字体名字
+        contentWriteCellStyle.setWriteFont(contentWriteFont);//在样式用应用设置的字体;
+
+        //设置样式;
+        contentWriteCellStyle.setBorderBottom(THIN);//设置底边框;
+        contentWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色;
+        contentWriteCellStyle.setBorderLeft(THIN);  //设置左边框;
+        contentWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色;
+        contentWriteCellStyle.setBorderRight(THIN);//设置右边框;
+        contentWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色;
+        contentWriteCellStyle.setBorderTop(THIN);//设置顶边框;
+        contentWriteCellStyle.setTopBorderColor((short) 0); ///设置顶边框颜色;
+
+        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 水平居中
+        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中
+        contentWriteCellStyle.setWrapped(true); //设置自动换行;
+
+        contentWriteCellStyle.setDataFormat((short)49);//设置单元格格式是:文本格式,方式长数字文本科学计数法
+
+        contentWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适
+
+        return contentWriteCellStyle;
+    }
+}
+

+ 11 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/question/service/impl/QuestionServiceImpl.java

@@ -4,6 +4,9 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.util.CollectionUtils;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -16,6 +19,7 @@ import com.xunmei.common.core.domain.panel.enums.PanelTypeEnums;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.domain.panel.vo.WebPanelResult;
 import com.xunmei.common.core.exception.ServiceException;
+import com.xunmei.common.core.utils.EasyExcelStyleUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.DictUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
@@ -40,6 +44,9 @@ import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.RemoteUserService;
 import io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -52,6 +59,8 @@ import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static org.apache.poi.ss.usermodel.BorderStyle.*;
+
 /**
  * 隐患问题清单Service业务层处理
  *
@@ -315,11 +324,13 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         for (QuestionExportDto questionExportDto : list) {
             if(isOverdue(questionExportDto.getConfirmStatus(),questionExportDto.getReformStatus(),questionExportDto.getReformDeadline())){
                 questionExportDto.setConfirmStatusText("已逾期");
+                questionExportDto.setReformStatusText("已逾期");
             }
             questionExportDto.setIndex(index++);
         }
         response.setContentType("application/vnd.ms-excel");
         // 调用EasyExcel的导出方法
+//        EasyExcel.write(response.getOutputStream(), QuestionExportDto.class).registerWriteHandler(EasyExcelStyleUtils.buildHorizontalCellStyleStrategy()).sheet("Sheet1").doWrite(list);
         EasyExcel.write(response.getOutputStream(), QuestionExportDto.class).sheet("Sheet1").doWrite(list);
     }
 

+ 26 - 3
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/work/service/impl/IotWorkRuleServiceImpl.java

@@ -7,12 +7,16 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystem;
+import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
 import com.xunmei.common.core.domain.work.domain.IotWorkRule;
 import com.xunmei.common.core.domain.work.domain.IotWorkRuleItem;
 import com.xunmei.common.core.domain.work.dto.WorkRuleItemReq;
 import com.xunmei.common.core.domain.work.dto.WorkRuleReq;
 import com.xunmei.common.core.utils.JacksonUtils;
+import com.xunmei.common.core.utils.RsaHelper;
+import com.xunmei.common.core.utils.StringUtils;
 import com.xunmei.host.protection.service.IotAlarmSubsystemService;
+import com.xunmei.host.server.service.IotServerInfoService;
 import com.xunmei.host.websocket.constant.WebSocketConstants;
 import com.xunmei.host.websocket.dto.WebsocketExecuteReq;
 import com.xunmei.host.websocket.enums.ProductEnums;
@@ -36,6 +40,9 @@ public class IotWorkRuleServiceImpl extends ServiceImpl<IotWorkRuleMapper, IotWo
     @Resource
     private IotAlarmSubsystemService subsystemService;
 
+    @Resource
+    private IotServerInfoService iotServerInfoService;
+
 
     @Override
     public void deleteWorkRule(IotWorkRule iotWorkRule) {
@@ -81,7 +88,7 @@ public class IotWorkRuleServiceImpl extends ServiceImpl<IotWorkRuleMapper, IotWo
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void saveBatchWorkRule(WebsocketExecuteReq req){
+    public void saveBatchWorkRule(WebsocketExecuteReq req) {
         Object data = req.getData();
         JSONArray dataArray = (JSONArray) data;
         List<WorkRuleReq> dataList = dataArray.toJavaList(WorkRuleReq.class);
@@ -118,7 +125,7 @@ public class IotWorkRuleServiceImpl extends ServiceImpl<IotWorkRuleMapper, IotWo
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void saveOrUpdateWorkRule(WebsocketExecuteReq req){
+    public void saveOrUpdateWorkRule(WebsocketExecuteReq req) {
         Object data = req.getData();
         WorkRuleReq workRuleReq = JSON.parseObject(data.toString(), WorkRuleReq.class);
         saveData(workRuleReq,req.getServerInfo().getIotCode());
@@ -134,7 +141,7 @@ public class IotWorkRuleServiceImpl extends ServiceImpl<IotWorkRuleMapper, IotWo
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void saveData(WorkRuleReq workRuleReq,String iotToken){
+    public void saveData(WorkRuleReq workRuleReq,String iotToken) {
         IotWorkRule workRule = getWorkRule(workRuleReq, iotToken);
         List<IotWorkRuleItem> deleteList = new ArrayList<>();
         List<IotWorkRuleItem> updateList = new ArrayList<>();
@@ -223,6 +230,22 @@ public class IotWorkRuleServiceImpl extends ServiceImpl<IotWorkRuleMapper, IotWo
             ruleItemService.removeBatchByIds(deleteList);
         }
 
+        String password = null;
+        //修改操作密码
+        if (StringUtils.isNotEmpty(workRuleReq.getPassword())){
+            try {
+                password = RsaHelper.decodeStr(workRuleReq.getPassword());
+            }catch (Exception e){
+                throw new RuntimeException("密码解密失败");
+            }
+        }
+        QueryWrapper<IotServerInfo> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(IotServerInfo::getIotCode, iotToken);
+        IotServerInfo serverInfo = iotServerInfoService.getOne(wrapper);
+        if (null != serverInfo){
+            serverInfo.setPassword(password);
+            iotServerInfoService.updateById(serverInfo);
+        }
     }
 
     private IotWorkRule getWorkRule(WorkRuleReq workRuleReq,String iotToken){

+ 5 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/dto/workRule/WorkRuleReq.java

@@ -21,4 +21,9 @@ public class WorkRuleReq extends PageRequest {
      * 规则类型
      */
     private Integer workRuleType;
+
+    /**
+     * 注册码,与平台机构一一对应
+     */
+    private String iotToken;
 }

+ 1 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/interfaces/WorkFieldStrategy.java

@@ -20,6 +20,6 @@ public interface WorkFieldStrategy {
      * 获取实时的上下班数据
      * @return
      */
-    List<WorkFieldDataVo> getRealWorkData(List<IotDayWorkOperation> operation, Integer workType);
+    List<WorkFieldDataVo> getRealWorkData(List<IotDayWorkOperation> operation, Integer workType,String iotToken);
 
 }

+ 2 - 2
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/interfaces/impl/DeployWorkStrategy.java

@@ -36,9 +36,9 @@ public class DeployWorkStrategy implements WorkFieldStrategy {
     private IotWorkRuleItemMapper workRuleItemMapper;
 
     @Override
-    public List<WorkFieldDataVo> getRealWorkData(List<IotDayWorkOperation> operation, Integer workType) {
+    public List<WorkFieldDataVo> getRealWorkData(List<IotDayWorkOperation> operation, Integer workType,String iotToken) {
         // 获取上下班规则
-        List<IotWorkRule> ruleList = workRuleService.getRuleList(new WorkRuleReq(workType, 1));
+        List<IotWorkRule> ruleList = workRuleService.getRuleList(new WorkRuleReq(workType, 1,iotToken));
         if (ObjectUtil.isEmpty(ruleList)) {
             return null;
         }

+ 2 - 2
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/interfaces/impl/ElectWorkStrategy.java

@@ -44,8 +44,8 @@ public class ElectWorkStrategy implements WorkFieldStrategy {
 
 
     @Override
-    public List<WorkFieldDataVo> getRealWorkData(List<IotDayWorkOperation> operation, Integer workType) {
-        List<IotWorkRule> ruleList = workRuleService.getRuleList(new WorkRuleReq(workType, 2));
+    public List<WorkFieldDataVo> getRealWorkData(List<IotDayWorkOperation> operation, Integer workType,String iotToken) {
+        List<IotWorkRule> ruleList = workRuleService.getRuleList(new WorkRuleReq(workType, 2,iotToken));
         if (ObjectUtil.isEmpty(ruleList)) {
             return null;
         }

+ 1 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotDayWorkOperationService.java

@@ -17,7 +17,7 @@ import java.util.List;
 public interface IotDayWorkOperationService extends IService<IotDayWorkOperation> {
 
 
-    List<IotDayWorkOperation> getIotDayWorkOperationList();
+    List<IotDayWorkOperation> getIotDayWorkOperationList(Long orgId);
 
     List<String> selectWorkDayList(Date startTime, Date endTime);
 }

+ 5 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotDayWorkOperationServiceImpl.java

@@ -23,9 +23,13 @@ public class IotDayWorkOperationServiceImpl extends ServiceImpl<IotDayWorkOperat
 
 
     @Override
-    public List<IotDayWorkOperation> getIotDayWorkOperationList() {
+    public List<IotDayWorkOperation> getIotDayWorkOperationList(Long orgId) {
         LambdaQueryWrapper<IotDayWorkOperation> qw = new LambdaQueryWrapper<>();
         qw.eq(IotDayWorkOperation::getOperationStatus, 0);
+        if(orgId!=null)
+        {
+            qw.eq(IotDayWorkOperation::getOrgId, orgId);
+        }
         return baseMapper.selectList(qw);
     }
 

+ 19 - 4
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotDayWorkServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.Constants;
+import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
 import com.xunmei.common.core.domain.work.domain.IotDayWork;
 import com.xunmei.common.core.domain.work.domain.IotDayWorkOperation;
 import com.xunmei.common.core.domain.work.dto.ControlDeviceDto;
@@ -24,6 +25,7 @@ import com.xunmei.iot.interfaces.WorkFieldStrategy;
 import com.xunmei.iot.mapper.IotDayWorkMapper;
 import com.xunmei.iot.service.IotDayWorkOperationService;
 import com.xunmei.iot.service.IotDayWorkService;
+import com.xunmei.iot.service.IotServerInfoService;
 import com.xunmei.system.api.RemoteHostService;
 import com.xunmei.system.api.domain.SysUser;
 import org.apache.commons.lang3.StringUtils;
@@ -55,16 +57,20 @@ public class IotDayWorkServiceImpl extends ServiceImpl<IotDayWorkMapper, IotDayW
     @Resource
     RemoteHostService hostService;
 
+    @Resource
+    IotServerInfoService iotServerInfoService;
+
     @Override
     public WorkVo getRealWorkData(WorkDayDto workDayDto) {
-        List<IotDayWorkOperation> operationList = operationService.getIotDayWorkOperationList();
+        final SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
+        List<IotDayWorkOperation> operationList = operationService.getIotDayWorkOperationList(sysUser.getOrgId());
         /**
          * operationList 根据operationType 分组
          */
         Map<Integer, List<IotDayWorkOperation>> operMap = operationList.stream().collect(Collectors.groupingBy(IotDayWorkOperation::getOperationType));
 
         WorkVo workVo = new WorkVo();
-        final SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
+
         workVo.setOrgName(sysUser.getOrgName());
         DateTime dateTime = DateTime.now();
         String date = dateTime.toString("yyyy-MM-dd");
@@ -86,15 +92,24 @@ public class IotDayWorkServiceImpl extends ServiceImpl<IotDayWorkMapper, IotDayW
          * 1、如果没有操作数据,则直接返回实时状态。
          * 2、如果有操作数据,则需要根据操作数据,构建相应的数据。
          */
+        //获取用户机构下的IotToken 站不考虑一个机构多个Token的问题,目前先取第一个
+        List<IotServerInfo> iotServerInfos = iotServerInfoService.selectConnectOrg(false, sysUser.getOrgId(), null);
+
+        if(ObjectUtil.isEmpty(iotServerInfos))
+        {
+            // 说明该机构下没有注册主机
+            throw new RuntimeException("该机构尚未安装巡检主机,暂不支持此功能");
+        }
+        String iotToken=iotServerInfos.get(0).getIotCode();
         //处理布撤防数据
         WorkFieldStrategy workStrategy = workStrategyFactory.getWorkStrategy(GroupTypeEnum.DEFENSE_TYPE.getNum());
         List<WorkFieldDataVo> realWorkData = workStrategy.getRealWorkData(operMap.get(RedirectTypeEnum.DEFENSE_REDIRECT_TYPE.getNum())
-                , workDayDto.getDataType());
+                , workDayDto.getDataType(),iotToken);
         workVo.setDeploys(realWorkData);
 
         //处理用电数据
         workStrategy = workStrategyFactory.getWorkStrategy(GroupTypeEnum.ELECT_TYPE.getNum());
-        List<WorkFieldDataVo> eletcs = workStrategy.getRealWorkData(operMap.get(RedirectTypeEnum.ELECT_REDIRECT_TYPE.getNum()), workDayDto.getDataType());
+        List<WorkFieldDataVo> eletcs = workStrategy.getRealWorkData(operMap.get(RedirectTypeEnum.ELECT_REDIRECT_TYPE.getNum()), workDayDto.getDataType(),iotToken);
         workVo.setEletcs(eletcs);
         return workVo;
     }

+ 24 - 15
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotWebStatisticBoardServiceImpl.java

@@ -41,25 +41,34 @@ public class IotWebStatisticBoardServiceImpl implements IIotWebStatisticBoardSer
             BaseDeviceTypeEnum.AlarmHostInput_Temperature.getCode(),
             BaseDeviceTypeEnum.AlarmHostInput_Humidity.getCode());
     final List<String> environmentTypes = Arrays.asList(BaseDeviceTypeEnum.FSU_Theft.getCode(),
+
             BaseDeviceTypeEnum.FSU_Infrared.getCode(),
+            BaseDeviceTypeEnum.AlarmHostInput_Infrared.getCode(),
+
             BaseDeviceTypeEnum.FSU_DoorMagnetic.getCode(),
-            BaseDeviceTypeEnum.FSU_Water.getCode(),
-            BaseDeviceTypeEnum.FSU_Ups.getCode(),
-            BaseDeviceTypeEnum.FSU_AirConditioner.getCode(),
-            BaseDeviceTypeEnum.FSU_DoPowerControl.getCode(),
-            BaseDeviceTypeEnum.FSU_DoPowerCollection.getCode(),
-            BaseDeviceTypeEnum.FSU_DoPowerControlBoxButton.getCode(),
             BaseDeviceTypeEnum.AlarmHostInput_DoorSensor.getCode(),
-            BaseDeviceTypeEnum.AlarmHostInput_Infrared.getCode(),
+
+            BaseDeviceTypeEnum.FSU_Water.getCode(),
             BaseDeviceTypeEnum.AlarmHostInput_Soaking.getCode(),
-            BaseDeviceTypeEnum.AlarmHostInput_Displacement.getCode(),
-            BaseDeviceTypeEnum.AlarmHostInput_Broken.getCode(),
-            BaseDeviceTypeEnum.AlarmHostInput_Shock.getCode(),
-            BaseDeviceTypeEnum.AlarmHostInput_Tamper.getCode(),
-            BaseDeviceTypeEnum.AlarmHostInput_Intrusion.getCode(),
-            BaseDeviceTypeEnum.AlarmHostInput_IMDualIdentification.getCode(),
-            BaseDeviceTypeEnum.AlarmHostInput_Microwave.getCode(),
-            BaseDeviceTypeEnum.AlarmHostInput_EmergencyButton.getCode()
+
+            BaseDeviceTypeEnum.FSU_Ups.getCode(),
+
+            BaseDeviceTypeEnum.FSU_AirConditioner.getCode()
+
+//            BaseDeviceTypeEnum.FSU_DoPowerControl.getCode(),
+//            BaseDeviceTypeEnum.FSU_DoPowerCollection.getCode(),
+//            BaseDeviceTypeEnum.FSU_DoPowerControlBoxButton.getCode(),
+
+//
+//
+//            BaseDeviceTypeEnum.AlarmHostInput_Displacement.getCode(),
+//            BaseDeviceTypeEnum.AlarmHostInput_Broken.getCode(),
+//            BaseDeviceTypeEnum.AlarmHostInput_Shock.getCode(),
+//            BaseDeviceTypeEnum.AlarmHostInput_Tamper.getCode(),
+//            BaseDeviceTypeEnum.AlarmHostInput_Intrusion.getCode(),
+//            BaseDeviceTypeEnum.AlarmHostInput_IMDualIdentification.getCode(),
+//            BaseDeviceTypeEnum.AlarmHostInput_Microwave.getCode(),
+//            BaseDeviceTypeEnum.AlarmHostInput_EmergencyButton.getCode()
     );
 
     final SimpleDateFormat dayFormat = new SimpleDateFormat("M月d");

+ 46 - 12
soc-modules/soc-modules-iot/src/main/resources/mapper/IotWebStatisticBoardMapper.xml

@@ -8,6 +8,13 @@
         WHERE o.path like CONCAT((select path from sys_org where id = #{orgId}), '%')
           and di.deleted = 0
         GROUP BY di.device_type
+        union all
+        SELECT di.sensor_type as device_type, count(0) as count
+        FROM iot_alarm_defence_area di
+                 INNER JOIN sys_org o on di.org_id = o.id and o.deleted = 0 and o.is_lock = 0
+        WHERE o.path like CONCAT((select path from sys_org where id = #{orgId}), '%')
+          and di.deleted = 0
+        GROUP BY di.sensor_type
     </select>
 
     <select id="orgDeviceCount" resultType="com.xunmei.iot.dto.webStatisticBoard.BoardDeviceCountDto">
@@ -17,6 +24,13 @@
         WHERE o.path like CONCAT((select path from sys_org where id = #{orgId}), '%')
           and di.deleted = 0
         GROUP BY di.device_type, o.id, o.path
+        union all
+        SELECT o.id as orgId, o.path as orgPath, di.sensor_type as device_type, count(0) as count
+        FROM iot_alarm_defence_area di
+                 INNER JOIN sys_org o on di.org_id = o.id and o.deleted = 0 and o.is_lock = 0
+        WHERE o.path like CONCAT((select path from sys_org where id = #{orgId}), '%')
+          and di.deleted = 0
+        GROUP BY di.sensor_type, o.id, o.path
     </select>
 
     <select id="protection" resultType="com.xunmei.iot.vo.webStatisticBoard.BoardProtectionVo">
@@ -87,26 +101,35 @@
         limit 3
     </select>
     <select id="alarmRate" resultType="com.xunmei.iot.vo.webStatisticBoard.BoardAlarmRateVo">
-        SELECT sum(ds.state = 0) normalCount,
-               sum(ds.state = 1) alarmCount
-        FROM iot_device_info di
-                 INNER JOIN sys_org o ON di.org_id = o.id
-            AND o.deleted = 0
-            AND o.is_lock = 0
-            AND o.path LIKE concat((SELECT path FROM sys_org WHERE id = #{orgId}),
-                                   '%')
-                 INNER JOIN iot_device_status ds
-                            ON di.id = ds.device_id
+        SELECT sum(normalCount) as normalCount, sum(alarmCount) as alarmCount
+        from (SELECT sum(ds.state = 0) normalCount,
+                     sum(ds.state = 1) alarmCount
+              FROM iot_device_info di
+                       INNER JOIN sys_org o ON di.org_id = o.id
+                  AND o.deleted = 0
+                  AND o.is_lock = 0
+                  AND o.path LIKE concat((SELECT path FROM sys_org WHERE id = #{orgId}),
+                                         '%')
+                       INNER JOIN iot_device_status ds
+                                  ON di.id = ds.device_id
+              union all
+              SELECT sum(di.state = 'normal') normalCount,
+                     sum(di.state = 'alarm')  alarmCount
+              FROM iot_alarm_defence_area di
+                       INNER JOIN sys_org o ON di.org_id = o.id
+                  AND o.deleted = 0
+                  AND o.is_lock = 0
+                  AND o.path LIKE concat((SELECT path FROM sys_org WHERE id = #{orgId}),
+                                         '%')) a
     </select>
 
     <select id="alarmList" resultType="com.xunmei.iot.vo.webStatisticBoard.BoardAlarmInfoVo">
         SELECT o.short_name  AS org_name,
-               di.device_name,
+               ad.device_name,
                ad.time       AS alarmStartTime,
                ad.end_time   AS alarmEndTime,
                ad.value_text AS alarmInfo
         FROM iot_alarm_data ad
-                 INNER JOIN iot_device_info di ON ad.device_id = di.id AND di.deleted = 0
                  INNER JOIN sys_org o ON ad.org_id = o.id AND o.deleted = 0 AND o.is_lock = 0 AND
                                          o.path LIKE concat((SELECT path FROM sys_org WHERE id = #{orgId}), '%')
         ORDER BY time DESC
@@ -123,6 +146,17 @@
                   AND o.deleted = 0
                   AND o.is_lock = 0
                   AND o.path LIKE concat((SELECT path FROM sys_org WHERE id = #{orgId}), '%')
+              WHERE ad.time > #{startTime}
+              union all
+              SELECT ai.sensor_type as device_type,
+                     Date_FORMAT(ad.time, '%Y-%m-%d') as date
+              FROM iot_alarm_data ad
+                       INNER JOIN iot_alarm_defence_area ai ON ad.device_id = ai.id
+                  AND ai.deleted = 0
+                       INNER JOIN sys_org o ON ad.org_id = o.id
+                  AND o.deleted = 0
+                  AND o.is_lock = 0
+                  AND o.path LIKE concat((SELECT path FROM sys_org WHERE id = #{orgId}), '%')
               WHERE ad.time > #{startTime}) a
         GROUP BY device_type, date
     </select>