diff --git a/das/src/main/java/com/das/modules/operation/controller/ManualOperatorController.java b/das/src/main/java/com/das/modules/operation/controller/ManualOperatorController.java index 2664f584..8386170f 100644 --- a/das/src/main/java/com/das/modules/operation/controller/ManualOperatorController.java +++ b/das/src/main/java/com/das/modules/operation/controller/ManualOperatorController.java @@ -3,11 +3,13 @@ package com.das.modules.operation.controller; import cn.dev33.satoken.stp.StpUtil; import com.das.common.constant.MeasType; import com.das.common.constant.SysAuthorityIds; +import com.das.common.exceptions.ServiceException; import com.das.common.result.R; import com.das.modules.operation.domain.CommandInfoDto; import com.das.modules.operation.service.OperationService; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -65,13 +67,14 @@ public class ManualOperatorController { @PostMapping("/manualCommand") public R deviceSetPointByMrid(HttpServletRequest request,@RequestBody CommandInfoDto cmdInfo) { cmdInfo.setMeasType(MeasType.TYPE_PSR_CALCULATED_VALUE); - //判断是否有权限 boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_CTRL.toString()); if(!hasPermission){ return R.fail("没有设备遥控权限"); } - + if (cmdInfo.getDeviceId() ==null || StringUtils.isBlank(cmdInfo.getServiceCode())){ + throw new ServiceException("参数缺失"); + } optService.executeOperation(request,cmdInfo); return R.success(); } diff --git a/das/src/main/java/com/das/modules/operation/entity/SysManualStatus.java b/das/src/main/java/com/das/modules/operation/entity/SysManualStatus.java new file mode 100644 index 00000000..9cd32c6f --- /dev/null +++ b/das/src/main/java/com/das/modules/operation/entity/SysManualStatus.java @@ -0,0 +1,46 @@ +package com.das.modules.operation.entity; + +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.das.common.constant.BaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; + +/** + * 人工置位表; + */ +@TableName("sys_manual_status") +@Data +public class SysManualStatus extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + /** + * 记录id + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 设备id + */ + @TableField("device_id") + private Long deviceId; + + /** + * 属性编码 + */ + @TableField("attribute_code") + private String attributeCode; + /** + * 状态值 + */ + @TableField("status") + private Integer status; +} diff --git a/das/src/main/java/com/das/modules/operation/entity/SysOperationLog.java b/das/src/main/java/com/das/modules/operation/entity/SysOperationLog.java new file mode 100644 index 00000000..e489d025 --- /dev/null +++ b/das/src/main/java/com/das/modules/operation/entity/SysOperationLog.java @@ -0,0 +1,80 @@ +package com.das.modules.operation.entity; + +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.das.common.constant.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; +import java.util.Date; + +@TableName("sys_operation_log") +@Data +public class SysOperationLog extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 记录id + */ + @TableId(value = "id", type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 操作人账号 + */ + @TableField("user_id") + private String userId; + + /** + * 操作人名称 + */ + @TableField("user_name") + private String userName; + + /** + * 操作时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField("opt_time") + private Date optTime; + /** + * 操作人IP地址 + */ + @TableField("ip_address") + private String ipAddress; + /** + * 操作设备id + */ + @TableField("device_id") + private Long deviceId; + /** + * 设备属性编码 + */ + @TableField("attribute_code") + private String attributeCode; + /** + * 设备属性名称 + */ + @TableField("attribute_name") + private String attributeName; + /** + * 操作描述 + */ + @TableField("opt_desc") + private String optDesc; + + + + + + + +} diff --git a/das/src/main/java/com/das/modules/operation/mapper/SysManualStatusMapper.java b/das/src/main/java/com/das/modules/operation/mapper/SysManualStatusMapper.java new file mode 100644 index 00000000..5d12b179 --- /dev/null +++ b/das/src/main/java/com/das/modules/operation/mapper/SysManualStatusMapper.java @@ -0,0 +1,9 @@ +package com.das.modules.operation.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.das.modules.operation.entity.SysManualStatus; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysManualStatusMapper extends BaseMapper { +} diff --git a/das/src/main/java/com/das/modules/operation/mapper/SysOperationLogMapper.java b/das/src/main/java/com/das/modules/operation/mapper/SysOperationLogMapper.java new file mode 100644 index 00000000..7b137e38 --- /dev/null +++ b/das/src/main/java/com/das/modules/operation/mapper/SysOperationLogMapper.java @@ -0,0 +1,9 @@ +package com.das.modules.operation.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.das.modules.operation.entity.SysOperationLog; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysOperationLogMapper extends BaseMapper { +} diff --git a/das/src/main/java/com/das/modules/operation/service/OperationService.java b/das/src/main/java/com/das/modules/operation/service/OperationService.java index bb96a708..df671e6d 100644 --- a/das/src/main/java/com/das/modules/operation/service/OperationService.java +++ b/das/src/main/java/com/das/modules/operation/service/OperationService.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.IdUtil; import com.das.common.config.SessionUtil; import com.das.common.constant.MeasType; import com.das.common.exceptions.ServiceException; +import com.das.common.utils.AdminRedisTemplate; import com.das.modules.auth.domain.vo.SysUserVo; import com.das.modules.node.constant.NodeConstant; import com.das.modules.node.disruptor.TerminalMessageEventHandler; @@ -12,6 +13,10 @@ import com.das.modules.node.domain.bo.TerminalMessage; import com.das.modules.node.domain.vo.SysNodeVo; import com.das.modules.node.mapper.SysNodeMapper; import com.das.modules.operation.domain.CommandInfoDto; +import com.das.modules.operation.entity.SysManualStatus; +import com.das.modules.operation.entity.SysOperationLog; +import com.das.modules.operation.mapper.SysManualStatusMapper; +import com.das.modules.operation.mapper.SysOperationLogMapper; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import jakarta.servlet.http.HttpServletRequest; @@ -22,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional; import java.net.InetAddress; import java.net.UnknownHostException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -35,9 +41,22 @@ public class OperationService { @Autowired private SysNodeMapper sysNodeMapper; + + @Autowired + private SysManualStatusMapper sysManualStatusMapper; + + @Autowired + private SysOperationLogMapper sysOperationLogMapper; + @Autowired TerminalMessageEventHandler terminalMessageEventHandler; + @Autowired + AdminRedisTemplate adminRedisTemplate; + + + + /** * 执行操作命令 * @param request HttpServletRequest @@ -45,16 +64,36 @@ public class OperationService { */ public void executeOperation(HttpServletRequest request, CommandInfoDto cmdInfo) { SysUserVo sysUserVo = (SysUserVo) StpUtil.getTokenSession().get(SessionUtil.SESSION_USER_KEY); - - if(cmdInfo.getMeasType().equals(MeasType.TYPE_PSR_CALCULATED_VALUE)){ - //TODO:待完善:人工置位,不需要下令 + if (cmdInfo.getMeasType().equals(MeasType.TYPE_PSR_CALCULATED_VALUE)) { + //人工置位,不需要下令 // 1、只需要把数据保存到数据库 sys_manual_status表中 + SysManualStatus sysManualStatus = new SysManualStatus(); + sysManualStatus.setDeviceId(cmdInfo.getDeviceId()); + sysManualStatus.setAttributeCode(cmdInfo.getServiceCode()); + sysManualStatus.setStatus( Integer.valueOf(cmdInfo.getOpValue().toString())); + sysManualStatusMapper.insert(sysManualStatus); // 2、更新redis RT实时数据值 - }else{ + String key = String.format("RT:%s:%s", cmdInfo.getDeviceId(), cmdInfo.getServiceCode().toLowerCase()); + // 存入redis + adminRedisTemplate.set(key, cmdInfo.getOpValue()); + } else { sendCommand(cmdInfo); //发送命令消息 } - - //TODO:待完善,记录操作日志到数据库 表 sys_operation_log + //记录操作日志到数据库 表 sys_operation_log + SysOperationLog sysOperationLog = new SysOperationLog(); + sysOperationLog.setUserId(String.valueOf(sysUserVo.getId())); + sysOperationLog.setUserName(sysUserVo.getUserName()); + sysOperationLog.setOptTime(new Date()); + sysOperationLog.setDeviceId(cmdInfo.getDeviceId()); + sysOperationLog.setAttributeCode(cmdInfo.getServiceCode()); + sysOperationLog.setAttributeName(cmdInfo.getServiceName()); + sysOperationLog.setOptDesc(cmdInfo.getOptDesc()); + try { + sysOperationLog.setIpAddress(getClientIp(request)); + } catch (UnknownHostException e) { + log.error("获取客户端ip地址失败 ", e); + } + sysOperationLogMapper.insert(sysOperationLog); } /** @@ -74,7 +113,6 @@ public class OperationService { }else{ map.put("opValue", Float.valueOf(cmdInfo.getOpValue().toString())); } - //激活的node节点Id long activeNodeId = getActiveNodeId(); if(activeNodeId==0){