Explorar o código

上下班规则同步

xujie hai 1 ano
pai
achega
215d290dc5

+ 5 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/util/LogUtils.java

@@ -167,4 +167,9 @@ public class LogUtils {
      * websocket 主机上报一件上下班操作数据
      */
     public  static  final Logger SOCKET_WORK_OPERATION_DATA=LoggerFactory.getLogger("socketWorkOperationData");
+
+    /**
+     * websocket 主机上报上下班规则
+     */
+    public  static  final Logger SOCKET_WORK_RULE_DATA=LoggerFactory.getLogger("socketWorkRuleData");
 }

+ 70 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/work/domain/IotWorkRule.java

@@ -0,0 +1,70 @@
+package com.xunmei.common.core.domain.work.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 上下班规则表
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("iot_work_rule")
+@ApiModel(value="IotWorkRule对象", description="上下班规则表")
+public class IotWorkRule implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private Long id;
+
+    @ApiModelProperty(value = "上下班规则:1上班规则,2下班规则")
+    @TableField("work_type")
+    private Integer workType;
+
+    @ApiModelProperty(value = "上下班规则类型:1布撤防规则,2回路规则")
+    @TableField("work_rule_type")
+    private Integer workRuleType;
+
+    @ApiModelProperty(value = "防区或者回路id")
+    @TableField("rule_obj_id")
+    private String ruleObjId;
+
+    @ApiModelProperty(value = "防区或者回路名称")
+    @TableField("rule_obj_name")
+    private String ruleObjName;
+
+    @ApiModelProperty(value = "防区:布防,撤防,回路:通电,断电")
+    @TableField("rule_obj_status")
+    private Integer ruleObjStatus;
+
+    @ApiModelProperty(value = "iot_toke")
+    @TableField("iot_token")
+    private String iotToken;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("create_time")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField("update_time")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "规则描述")
+    @TableField("remark")
+    private String remark;
+
+
+}

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

@@ -0,0 +1,48 @@
+package com.xunmei.common.core.domain.work.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 报警主机防区和上下班规则关系表
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("iot_work_rule_item")
+@ApiModel(value="IotWorkRuleItem对象", description="报警主机防区和上下班规则关系表")
+public class IotWorkRuleItem implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private Long id;
+
+    @ApiModelProperty(value = "规则id")
+    @TableField("rule_id")
+    private Long ruleId;
+
+    @ApiModelProperty(value = "对象id")
+    @TableField("obj_id")
+    private Long objId;
+
+    @ApiModelProperty(value = "区域编号")
+    @TableField("zone_id")
+    private Integer zoneId;
+
+    @ApiModelProperty(value = "主机编号")
+    @TableField("alarm_host")
+    private String alarmHost;
+
+
+}

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

@@ -0,0 +1,13 @@
+package com.xunmei.common.core.domain.work.dto;
+
+import lombok.Data;
+
+@Data
+public class WorkRuleItemReq {
+
+    //报警主机子系统号
+    private Integer zoneId;
+
+    //报警主机设备名称
+    private String hostDeviceName;
+}

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

@@ -0,0 +1,22 @@
+package com.xunmei.common.core.domain.work.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class WorkRuleReq {
+
+    private Integer workType;
+
+    private Integer workRuleType;
+
+    private Integer ruleObjStatus;
+
+    private List<WorkRuleItemReq> items;
+
+    private String remark;
+}

+ 15 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/constant/WebSocketConstants.java

@@ -160,6 +160,21 @@ public interface WebSocketConstants {
      */
     String WORK_OPERATION = "workOperation";
 
+    /**
+     * 全量workRule
+     */
+    String WORK_RULE = "workRule";
+
+    /**
+     * 增量workRule
+     */
+    String INCREMENT_WORK_RULE = "incrementWorkRule";
+
+    /**
+     * 删除workRule
+     */
+    String DELETE_WORK_RULE = "deleteWorkRule";
+
     // ------------------ IOT提供的服务能力结束 ------------------
 
     /**

+ 7 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/work/mapper/IotWorkRuleItemMapper.java

@@ -0,0 +1,7 @@
+package com.xunmei.host.work.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.work.domain.IotWorkRuleItem;
+
+public interface IotWorkRuleItemMapper extends BaseMapper<IotWorkRuleItem> {
+}

+ 7 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/work/mapper/IotWorkRuleMapper.java

@@ -0,0 +1,7 @@
+package com.xunmei.host.work.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.work.domain.IotWorkRule;
+
+public interface IotWorkRuleMapper extends BaseMapper<IotWorkRule> {
+}

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

@@ -0,0 +1,7 @@
+package com.xunmei.host.work.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.work.domain.IotWorkRuleItem;
+
+public interface IotWorkRuleItemService extends IService<IotWorkRuleItem> {
+}

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

@@ -0,0 +1,9 @@
+package com.xunmei.host.work.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.work.domain.IotWorkRule;
+
+public interface IotWorkRuleService extends IService<IotWorkRule> {
+
+    void deleteWorkRule(IotWorkRule iotWorkRule);
+}

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

@@ -0,0 +1,12 @@
+package com.xunmei.host.work.service.impl;
+
+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;
+
+@Service
+public class IotWorkRuleItemServiceImpl extends ServiceImpl<IotWorkRuleItemMapper, IotWorkRuleItem> implements IotWorkRuleItemService {
+
+}

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

@@ -0,0 +1,158 @@
+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.extension.service.impl.ServiceImpl;
+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.WorkRuleReq;
+import com.xunmei.common.core.utils.JacksonUtils;
+import com.xunmei.host.websocket.constant.WebSocketConstants;
+import com.xunmei.host.websocket.dto.WebsocketExecuteReq;
+import com.xunmei.host.websocket.enums.ProductEnums;
+import com.xunmei.host.websocket.service.RouterService;
+import com.xunmei.host.work.mapper.IotWorkRuleMapper;
+import com.xunmei.host.work.service.IotWorkRuleItemService;
+import com.xunmei.host.work.service.IotWorkRuleService;
+import com.xunmei.system.api.util.LogUtils;
+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;
+
+@Service
+public class IotWorkRuleServiceImpl extends ServiceImpl<IotWorkRuleMapper, IotWorkRule> implements IotWorkRuleService, RouterService {
+
+    @Resource
+    private IotWorkRuleItemService ruleItemService;
+
+
+    @Override
+    public void deleteWorkRule(IotWorkRule iotWorkRule) {
+        if (iotWorkRule != null) {
+            Long ruleId = iotWorkRule.getId();
+            //删除上下班规则
+            super.removeById(ruleId);
+            //删除上下班规则与子系统关联关系
+            deleteItemByRuleId(ruleId);
+        }
+    }
+
+    @Override
+    public ProductEnums product() {
+        return ProductEnums.DETECTION_HOST;
+    }
+
+    @Override
+    public String routerKey() {
+        StringJoiner sj = new StringJoiner(",");
+        //上下班规则全量数据
+        sj.add(WebSocketConstants.WORK_RULE);
+        //上下班规则增量数据
+        sj.add(WebSocketConstants.INCREMENT_WORK_RULE);
+        //删除上下班规则
+        sj.add(WebSocketConstants.DELETE_WORK_RULE);
+
+        return sj.toString();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Object execute(WebsocketExecuteReq req) {
+        LogUtils.SOCKET_WORK_RULE_DATA.info("收到消息:{}", JacksonUtils.toJSONString(req));
+        if (WebSocketConstants.WORK_RULE.equals(req.getEvent())) {
+            saveBatchWorkRule(req);
+        } else if (WebSocketConstants.INCREMENT_WORK_RULE.equals(req.getEvent())) {
+            saveOrUpdateWorkRule(req);
+        }else if (WebSocketConstants.DELETE_WORK_RULE.equals(req.getEvent())) {
+            deleteData(req);
+        }
+        return null;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void saveBatchWorkRule(WebsocketExecuteReq req){
+        Object data = req.getData();
+        JSONArray dataArray = (JSONArray) data;
+        List<WorkRuleReq> dataList = dataArray.toJavaList(WorkRuleReq.class);
+        String iotToken = req.getServerInfo().getIotCode();
+        //查询所有数据
+        QueryWrapper<IotWorkRule> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(IotWorkRule::getIotToken, iotToken);
+        List<IotWorkRule> ruleList = super.list();
+
+        //删除主机不存在的规则
+        if (ruleList != null && ruleList.size() > 0){
+            Iterator<IotWorkRule> iterator = ruleList.iterator();
+            while (iterator.hasNext()){
+                IotWorkRule next = iterator.next();
+                for (WorkRuleReq workRuleReq : dataList) {
+                    boolean b = ObjectUtil.equal(next.getWorkRuleType(), workRuleReq.getWorkRuleType()) && ObjectUtil.equal(next.getRuleObjStatus(), workRuleReq.getRuleObjStatus())
+                            && ObjectUtil.equal(next.getWorkType(), workRuleReq.getWorkType());
+                    if (b){
+                        iterator.remove();
+                    }
+                }
+            }
+            if (ruleList.size() > 0){
+                for (IotWorkRule workRule : ruleList) {
+                    deleteWorkRule(workRule);
+                }
+            }
+        }
+
+        //新增或修改主机上送上来的规则
+        for (WorkRuleReq workRuleReq : dataList) {
+            saveData(workRuleReq,iotToken);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void saveOrUpdateWorkRule(WebsocketExecuteReq req){
+        Object data = req.getData();
+        WorkRuleReq workRuleReq = (WorkRuleReq) data;
+        saveData(workRuleReq,req.getServerInfo().getIotCode());
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteData(WebsocketExecuteReq req){
+        Object data = req.getData();
+        WorkRuleReq workRuleReq = (WorkRuleReq) data;
+
+        IotWorkRule workRule = getWorkRule(workRuleReq, req.getServerInfo().getIotCode());
+        deleteWorkRule(workRule);
+    }
+
+    private void saveData(WorkRuleReq workRuleReq,String iotToken){
+        IotWorkRule workRule = getWorkRule(workRuleReq, iotToken);
+        //修改
+        if (null != workRule){
+
+        }else {
+            //新增
+        }
+    }
+
+    private IotWorkRule getWorkRule(WorkRuleReq workRuleReq,String iotToken){
+        QueryWrapper<IotWorkRule> wrapper = new QueryWrapper<>();
+        wrapper.lambda()
+                .eq(IotWorkRule::getWorkRuleType, workRuleReq.getWorkRuleType())
+                .eq(IotWorkRule::getRuleObjStatus, workRuleReq.getRuleObjStatus())
+                .eq(IotWorkRule::getIotToken, iotToken)
+                .eq(IotWorkRule::getWorkType, workRuleReq.getWorkType());
+
+        return super.getOne(wrapper);
+    }
+
+
+
+    private void deleteItemByRuleId(Long ruleId){
+        QueryWrapper<IotWorkRuleItem> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(IotWorkRuleItem::getRuleId, ruleId);
+        ruleItemService.remove(wrapper);
+    }
+}