Browse Source

1.上班数据上报入库代码修改

jingyuanchao 1 year ago
parent
commit
7e65cb829f

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

@@ -157,4 +157,14 @@ public class LogUtils {
      * 网点客户端自检结果上报事件日志
      */
     public  static  final Logger SOCKET_DAILY_HEALTH=LoggerFactory.getLogger("dailyHealth");
+
+    /**
+     * websocket 主机上报一件上下班主表数据
+     */
+    public  static  final Logger SOCKET_WORK_DATA=LoggerFactory.getLogger("socketWorkData");
+
+    /**
+     * websocket 主机上报一件上下班操作数据
+     */
+    public  static  final Logger SOCKET_WORK_OPERATION_DATA=LoggerFactory.getLogger("socketWorkOperationData");
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -32,6 +33,7 @@ public class IotDayWork implements Serializable {
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    @JsonProperty("id")
     @ApiModelProperty(value = "主机上报数据主键id,上下班id,可以为空,单个操作时可以为空")
     @TableField("host_data_id")
     private Long hostDataId;

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

@@ -47,6 +47,10 @@ public class IotDayWorkOperation implements Serializable {
     @TableField("host_data_id")
     private Long hostDataId;
 
+    @ApiModelProperty(value = "主机上报数据主键id,上下班id,可以为空,单个操作时可以为空")
+    @TableField("host_data_operation_id")
+    private Long hostDataOperationId;
+
     @ApiModelProperty(value = "操作类型:0.布撤防,1控电")
     @TableField("operation_type")
     private Integer operationType;

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

@@ -0,0 +1,54 @@
+package com.xunmei.common.core.domain.work.dto;
+
+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 
+ * @since 2024-08-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TDayWork对象", description="一键上下班")
+public class DayWorKReq implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @ApiModelProperty(value = "机构id")
+    private Long orgId;
+
+    @ApiModelProperty(value = "机构名称")
+    private String orgName;
+
+    @ApiModelProperty(value = "机构path层级")
+    private String orgPath;
+
+    @ApiModelProperty(value = "数据状态:0、进行中;1、正常,2、异常")
+    private Integer dataStatus;
+
+    @ApiModelProperty(value = "数据类型:1:一键上班,2:一键下班")
+    private Integer dataType;
+
+    @ApiModelProperty(value = "数据创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "数据最后一次更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "数据生成 格式化字符串天:yyyy-MM-dd")
+    private String workDate;
+
+
+}

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

@@ -0,0 +1,62 @@
+package com.xunmei.common.core.domain.work.dto;
+
+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 
+ * @since 2024-09-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TWorkOperation对象", description="上下班操作控制表")
+public class WorkOperationReq implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    private Long id;
+
+    @ApiModelProperty(value = "上下班id,可以为空,单个操作时可以为空")
+    private Long workId;
+
+    @ApiModelProperty(value = "操作类型:0.布撤防,1控电")
+    private Integer operationType;
+
+    @ApiModelProperty(value = "目标值:0 断电/撤防 1通电/布防")
+    private Integer targetValue;
+
+    @ApiModelProperty(value = "操作时间")
+    private Date operationTime;
+
+    @ApiModelProperty(value = "数据强制结束时间")
+    private Date dataEndTime;
+
+    @ApiModelProperty(value = "实际结束时间")
+    private Date realEndTime;
+
+    @ApiModelProperty(value = "数据状态:0 进行中,1已完成,2强制结束")
+    private Integer operationStatus;
+
+    @ApiModelProperty(value = "设备id、code")
+    private String deviceId;
+
+    @ApiModelProperty(value = "iot产品名称")
+    private String productName;
+
+    @ApiModelProperty(value = "iot设备名称")
+    private String deviceName;
+
+    @ApiModelProperty(value = "操作对象名称")
+    private String operationName;
+
+
+}

+ 3 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/work/service/IotDayWorkOperationService.java

@@ -13,4 +13,7 @@ import com.xunmei.common.core.domain.work.domain.IotDayWorkOperation;
  */
 public interface IotDayWorkOperationService extends IService<IotDayWorkOperation> {
 
+
+    IotDayWorkOperation findByHostDataIdAndIotCode(Long hostDataId,Long hostDataOperationId, String iotCode);
+
 }

+ 1 - 1
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/work/service/IotDayWorkService.java

@@ -13,6 +13,6 @@ import com.xunmei.common.core.domain.work.domain.IotDayWork;
  */
 public interface IotDayWorkService extends IService<IotDayWork> {
 
-    IotDayWork findByIdAndIotCode(Long id, String iotCode);
+    IotDayWork findByHostDataIdAndIotCode(Long hostDataId, String iotCode);
 
 }

+ 42 - 2
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/work/service/impl/IotDayWorkOperationServiceImpl.java

@@ -1,14 +1,23 @@
 package com.xunmei.host.work.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 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.IotDayWorkOperation;
+import com.xunmei.common.core.domain.work.dto.WorkOperationReq;
 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.IotDayWorkOperationMapper;
 import com.xunmei.host.work.service.IotDayWorkOperationService;
+import com.xunmei.system.api.util.LogUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.StringJoiner;
 
@@ -40,9 +49,40 @@ public class IotDayWorkOperationServiceImpl extends ServiceImpl<IotDayWorkOperat
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Object execute(WebsocketExecuteReq req) {
-
-
+        Object data = req.getData();
+        LogUtils.SOCKET_WORK_OPERATION_DATA.info("接收到一键上下班操作数据:{}", data);
+        final IotServerInfo serverInfo = req.getServerInfo();
+        WorkOperationReq dayWorkOperation = JSON.parseObject(data.toString(), WorkOperationReq.class);
+        IotDayWorkOperation operation = findByHostDataIdAndIotCode(dayWorkOperation.getWorkId(), dayWorkOperation.getId(), serverInfo.getIotCode());
+        if (operation != null) {
+            BeanUtils.copyProperties(dayWorkOperation, operation);
+            updateById(operation);
+        } else {
+            operation = new IotDayWorkOperation();
+            BeanUtils.copyProperties(dayWorkOperation, operation);
+            operation.setHostDataId(dayWorkOperation.getWorkId());
+            operation.setHostDataOperationId(dayWorkOperation.getId());
+            operation.setIotCode(serverInfo.getIotCode());
+            operation.setId(IdWorker.getId());
+            save(operation);
+        }
         return null;
     }
+
+    @Override
+    public IotDayWorkOperation findByHostDataIdAndIotCode(Long hostDataId, Long hostDataOperationId, String iotCode) {
+        LambdaQueryWrapper<IotDayWorkOperation> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(IotDayWorkOperation::getHostDataId, hostDataId);
+        if (hostDataOperationId == null) {
+            //单独操作的时候这个字段为null
+            wrapper.isNull(IotDayWorkOperation::getHostDataOperationId);
+        } else {
+            wrapper.eq(IotDayWorkOperation::getHostDataOperationId, hostDataOperationId);
+        }
+        wrapper.eq(IotDayWorkOperation::getIotCode, iotCode);
+        wrapper.last(Constants.LIMIT1);
+        return this.getOne(wrapper);
+    }
 }

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

@@ -2,17 +2,22 @@ package com.xunmei.host.work.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 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.dto.DayWorKReq;
 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.IotDayWorkMapper;
 import com.xunmei.host.work.service.IotDayWorkService;
+import com.xunmei.system.api.util.LogUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.StringJoiner;
 
@@ -42,25 +47,33 @@ public class IotDayWorkServiceImpl extends ServiceImpl<IotDayWorkMapper, IotDayW
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Object execute(WebsocketExecuteReq req) {
-        final Object data = req.getData();
-        final IotDayWork work = JSON.parseObject(data.toString(), IotDayWork.class);
-        final IotDayWork dayWork = findByIdAndIotCode(work.getId(), req.getServerInfo().getIotCode());
+        Object data = req.getData();
+        LogUtils.SOCKET_WORK_DATA.info("接收到一键上下班主表数据:{}", data);
+        final IotServerInfo serverInfo = req.getServerInfo();
+        DayWorKReq work = JSON.parseObject(data.toString(), DayWorKReq.class);
+        IotDayWork dayWork = findByHostDataIdAndIotCode(work.getId(), req.getServerInfo().getIotCode());
         if (dayWork != null) {
-            BeanUtils.copyProperties(work,dayWork);
-            //updateById(dayWork)
-        }else {
-            dayWork.setId(work.getId());
-            this.save(work);
+            BeanUtils.copyProperties(work, dayWork);
+            dayWork.setHostDataId(work.getId());
+            updateById(dayWork);
+        } else {
+            dayWork = new IotDayWork();
+            dayWork.setId(IdWorker.getId());
+            dayWork.setHostDataId(work.getId());
+            dayWork.setIotCode(serverInfo.getIotCode());
+            dayWork.setOrgPath(serverInfo.getOrgPath());
+            this.save(dayWork);
         }
         return null;
     }
 
     @Override
-    public IotDayWork findByIdAndIotCode(Long id, String iotCode) {
-        LambdaQueryWrapper<IotDayWork> wrapper= new LambdaQueryWrapper<>();
-        wrapper.eq(IotDayWork::getId,id);
-        wrapper.eq(IotDayWork::getIotCode,iotCode);
+    public IotDayWork findByHostDataIdAndIotCode(Long hostDataId, String iotCode) {
+        LambdaQueryWrapper<IotDayWork> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(IotDayWork::getHostDataId, hostDataId);
+        wrapper.eq(IotDayWork::getIotCode, iotCode);
         wrapper.last(Constants.LIMIT1);
         return baseMapper.selectOne(wrapper);
     }

+ 42 - 0
soc-modules/soc-modules-host/src/main/resources/logback.xml

@@ -138,6 +138,40 @@
         </encoder>
     </appender>
 
+    <!-- 主机上报一键上下班主表数据  -->
+    <appender name="socketWorkData" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <maxFileSize>${max.file.size}</maxFileSize>
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${LOG_HOME}/socketWorkData/%d{yyyy-MM-dd}-%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <maxHistory>${max.history}</maxHistory>
+            <totalSizeCap>${total.size.cap}</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 主机上报一键上下班操作数据  -->
+    <appender name="socketWorkOperationData" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <maxFileSize>${max.file.size}</maxFileSize>
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${LOG_HOME}/socketWorkOperationData/%d{yyyy-MM-dd}-%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <maxHistory>${max.history}</maxHistory>
+            <totalSizeCap>${total.size.cap}</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
 
     <logger name="websocketMsgLog" additivity="false" level="info">
         <!--上面appender元素的name值。为了和logger的name属性做区分,我故意写的不一样-->
@@ -164,6 +198,14 @@
         <!--上面appender元素的name值。为了和logger的name属性做区分,我故意写的不一样-->
         <appender-ref ref="dailyHealth"/>
     </logger>
+    <logger name="socketWorkData" additivity="false" level="info">
+        <!--上面appender元素的name值。为了和logger的name属性做区分,我故意写的不一样-->
+        <appender-ref ref="socketWorkData"/>
+    </logger>
+    <logger name="socketWorkOperationData" additivity="false" level="info">
+        <!--上面appender元素的name值。为了和logger的name属性做区分,我故意写的不一样-->
+        <appender-ref ref="socketWorkOperationData"/>
+    </logger>
 
     <!-- 日志输出级别 -->
     <root level="INFO">