|
|
@@ -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;
|
|
|
+ }
|
|
|
}
|