فهرست منبع

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

jingyuanchao 1 سال پیش
والد
کامیت
9010bf9929

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

@@ -1110,5 +1110,6 @@ CREATE TABLE `iot_work_rule_item` (
                                       `obj_id` bigint DEFAULT NULL COMMENT '对象id',
                                       `zone_id` int DEFAULT NULL COMMENT '区域编号',
                                       `alarm_host` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '主机编号',
+                                      `iot_token` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'iot_token',
                                       PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='报警主机防区和上下班规则关系表';

+ 4 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/work/domain/IotWorkRuleItem.java

@@ -44,5 +44,9 @@ public class IotWorkRuleItem implements Serializable {
     @TableField("alarm_host")
     private String alarmHost;
 
+    @ApiModelProperty(value = "iot_code")
+    @TableField("iot_token")
+    private String iotToken;
+
 
 }

+ 4 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/work/service/IotWorkRuleItemService.java

@@ -3,5 +3,9 @@ package com.xunmei.host.work.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.work.domain.IotWorkRuleItem;
 
+import java.util.List;
+
 public interface IotWorkRuleItemService extends IService<IotWorkRuleItem> {
+
+    List<IotWorkRuleItem> getByRuleId(Long ruleId);
 }

+ 9 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/work/service/impl/IotWorkRuleItemServiceImpl.java

@@ -1,12 +1,21 @@
 package com.xunmei.host.work.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.domain.work.domain.IotWorkRuleItem;
 import com.xunmei.host.work.mapper.IotWorkRuleItemMapper;
 import com.xunmei.host.work.service.IotWorkRuleItemService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class IotWorkRuleItemServiceImpl extends ServiceImpl<IotWorkRuleItemMapper, IotWorkRuleItem> implements IotWorkRuleItemService {
 
+    @Override
+    public List<IotWorkRuleItem> getByRuleId(Long ruleId) {
+        QueryWrapper<IotWorkRuleItem> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(IotWorkRuleItem::getRuleId, ruleId);
+        return baseMapper.selectList(wrapper);
+    }
 }

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

@@ -3,11 +3,15 @@ package com.xunmei.host.work.service.impl;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONArray;
 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.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.host.protection.service.IotAlarmSubsystemService;
 import com.xunmei.host.websocket.constant.WebSocketConstants;
 import com.xunmei.host.websocket.dto.WebsocketExecuteReq;
 import com.xunmei.host.websocket.enums.ProductEnums;
@@ -20,9 +24,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.Iterator;
-import java.util.List;
-import java.util.StringJoiner;
+import java.util.*;
 
 @Service
 public class IotWorkRuleServiceImpl extends ServiceImpl<IotWorkRuleMapper, IotWorkRule> implements IotWorkRuleService, RouterService {
@@ -30,6 +32,9 @@ public class IotWorkRuleServiceImpl extends ServiceImpl<IotWorkRuleMapper, IotWo
     @Resource
     private IotWorkRuleItemService ruleItemService;
 
+    @Resource
+    private IotAlarmSubsystemService subsystemService;
+
 
     @Override
     public void deleteWorkRule(IotWorkRule iotWorkRule) {
@@ -127,14 +132,96 @@ public class IotWorkRuleServiceImpl extends ServiceImpl<IotWorkRuleMapper, IotWo
         deleteWorkRule(workRule);
     }
 
-    private void saveData(WorkRuleReq workRuleReq,String iotToken){
+    @Transactional(rollbackFor = Exception.class)
+    public void saveData(WorkRuleReq workRuleReq,String iotToken){
         IotWorkRule workRule = getWorkRule(workRuleReq, iotToken);
+        List<IotWorkRuleItem> deleteList = new ArrayList<>();
+        List<IotWorkRuleItem> updateList = new ArrayList<>();
+        List<IotWorkRuleItem> addList = new ArrayList<>();
         //修改
         if (null != workRule){
+            workRule.setRemark(workRuleReq.getRemark());
+            workRule.setUpdateTime(new Date());
+            super.updateById(workRule);
 
+            List<WorkRuleItemReq> items = workRuleReq.getItems();
+            List<IotWorkRuleItem> itemList = ruleItemService.getByRuleId(workRule.getId());
+            if (itemList != null && itemList.size() > 0){
+                if (items != null && items.size() > 0){
+                    Iterator<IotWorkRuleItem> iterator = itemList.iterator();
+                    while (iterator.hasNext()){
+                        IotWorkRuleItem next = iterator.next();
+                        for(WorkRuleItemReq item : items) {
+                            boolean b = ObjectUtil.equal(next.getZoneId(),item.getZoneId()) && ObjectUtil.equal(next.getAlarmHost(),item.getHostDeviceName())
+                                    && ObjectUtil.equal(next.getIotToken(),iotToken);
+                            if (b){
+                                updateList.add(next);
+                                iterator.remove();
+                            }
+                        }
+                    }
+                    if (itemList.size() > 0){
+                        deleteList.addAll(itemList);
+                    }
+
+                }else {
+                    deleteList.addAll(itemList);
+                }
+                if(updateList.size() > 0){
+                    //删除需要修改的数据,剩下的就是需要新增的数据
+                    items.removeIf(item -> updateList.stream().anyMatch(next -> ObjectUtil.equal(next.getZoneId(), item.getZoneId()) && ObjectUtil.equal(next.getAlarmHost(), item.getHostDeviceName())));
+                }
+                if (items != null && items.size() > 0){
+                    for(WorkRuleItemReq itemReq : items){
+                        IotWorkRuleItem item = new IotWorkRuleItem();
+                        item.setRuleId(workRule.getId());
+                        item.setZoneId(itemReq.getZoneId());
+                        item.setAlarmHost(itemReq.getHostDeviceName());
+                        item.setIotToken(iotToken);
+                        item.setObjId(getSubSystemId(itemReq.getZoneId(),itemReq.getHostDeviceName(),iotToken));
+                        addList.add(item);
+                    }
+                }
+            }
         }else {
             //新增
+            workRule = new IotWorkRule();
+            long ruleId = IdWorker.getId();
+            workRule.setWorkType(workRuleReq.getWorkType());
+            workRule.setWorkRuleType(workRuleReq.getWorkRuleType());
+            workRule.setRuleObjStatus(workRuleReq.getRuleObjStatus());
+            workRule.setIotToken(iotToken);
+            workRule.setRemark(workRuleReq.getRemark());
+            workRule.setCreateTime(new Date());
+            workRule.setUpdateTime(new Date());
+            workRule.setId(ruleId);
+
+            super.save(workRule);
+
+            List<WorkRuleItemReq> items = workRuleReq.getItems();
+            if (items != null && items.size() > 0){
+                for(WorkRuleItemReq itemReq : items){
+                    IotWorkRuleItem item = new IotWorkRuleItem();
+                    item.setId(IdWorker.getId());
+                    item.setRuleId(ruleId);
+                    item.setZoneId(itemReq.getZoneId());
+                    item.setAlarmHost(itemReq.getHostDeviceName());
+                    item.setIotToken(iotToken);
+                    item.setObjId(getSubSystemId(itemReq.getZoneId(),itemReq.getHostDeviceName(),iotToken));
+                    addList.add(item);
+                }
+            }
+        }
+        if (addList.size() > 0){
+            ruleItemService.saveBatch(addList);
         }
+        if (updateList.size() > 0){
+            ruleItemService.updateBatchById(updateList);
+        }
+        if (deleteList.size() > 0){
+            ruleItemService.removeBatchByIds(deleteList);
+        }
+
     }
 
     private IotWorkRule getWorkRule(WorkRuleReq workRuleReq,String iotToken){
@@ -155,4 +242,18 @@ public class IotWorkRuleServiceImpl extends ServiceImpl<IotWorkRuleMapper, IotWo
         wrapper.lambda().eq(IotWorkRuleItem::getRuleId, ruleId);
         ruleItemService.remove(wrapper);
     }
+
+    private Long getSubSystemId(Integer zoneId,String alarmHostCode,String iotToken){
+        QueryWrapper<IotAlarmSubsystem> wrapper = new QueryWrapper<>();
+        wrapper.lambda()
+                .eq(IotAlarmSubsystem::getCode, zoneId.toString())
+                .eq(IotAlarmSubsystem::getAlarmHostCode, alarmHostCode)
+                .eq(IotAlarmSubsystem::getIotToken, iotToken);
+
+        IotAlarmSubsystem subsystem = subsystemService.getOne(wrapper);
+        if(null != subsystem){
+            return subsystem.getId();
+        }
+        return null;
+    }
 }