设备手工操作命令接口

This commit is contained in:
yu 2024-10-31 11:30:24 +08:00
parent 8c137fcfb7
commit accd64d879
6 changed files with 194 additions and 9 deletions

View File

@ -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<Void> 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();
}

View File

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

View File

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

View File

@ -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<SysManualStatus> {
}

View File

@ -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<SysOperationLog> {
}

View File

@ -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){