摄像头账号加密

This commit is contained in:
cbs 2025-04-25 09:09:58 +08:00
parent 8e04dca496
commit 863dfa7ec9
16 changed files with 143 additions and 110 deletions

View File

@ -4,18 +4,14 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.remote.service.task.RemoteTaskService;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskDetailDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotCameraDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskQueryDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -30,13 +26,6 @@ public class RemoteTaskController {
@Autowired
private RemoteTaskService remoteTaskService;
/*@PostMapping("/getExceptionTask")
@Operation(summary = "获取异常任务列表")
@PreAuthorize("@ss.hasPermission('remote:task:getExceptionTask')")
public CommonResult<PageResult<RemoteExceptionTaskListDTO>> getExceptionTask(@RequestBody RemoteTaskDTO remoteTaskDTO) {
PageResult<RemoteExceptionTaskListDTO> list = remoteTaskService.getExceptionTask(remoteTaskDTO);
return success(list);
}*/
@PostMapping("/getExceptionTaskDetail")
@Operation(summary = "获取异常车辆任务列表")
@ -46,6 +35,13 @@ public class RemoteTaskController {
return success(list);
}
@GetMapping("/getCarmeraByRobotNo")
@Operation(summary = "查看环境--获取摄像头IP和账号")
@PreAuthorize("@ss.hasPermission('remote:task:getExceptionTaskDetail')")
public CommonResult<List<RemoteRobotCameraDTO>> getCarmeraByRobotNo(@RequestParam("robotNo") String robotNo) {
List<RemoteRobotCameraDTO> list = remoteTaskService.getCarmeraByRobotNo(robotNo);
return success(list);
}

View File

@ -1,16 +1,13 @@
package cn.iocoder.yudao.module.remote.service.task;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskDetailDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskQueryDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.*;
import java.util.List;
public interface RemoteTaskService {
PageResult<RemoteExceptionTaskListDTO> getExceptionTask(RemoteTaskDTO remoteTaskDTO);
PageResult<RemoteExceptionTaskDetailDTO> getExceptionTaskDetail(RemoteTaskQueryDTO remoteTaskQuery);
List<RemoteRobotCameraDTO> getCarmeraByRobotNo(String robotNo);
}

View File

@ -2,10 +2,7 @@ package cn.iocoder.yudao.module.remote.service.task;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.remote.RemoteExceptionTaskApi;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskDetailDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskQueryDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -20,15 +17,7 @@ public class RemoteTaskServiceImpl implements RemoteTaskService {
@Resource
private RemoteExceptionTaskApi remoteExceptionTaskApi;
/**
* 获取异常任务列表
* @param remoteTaskDTO
* @return
*/
@Override
public PageResult<RemoteExceptionTaskListDTO> getExceptionTask(RemoteTaskDTO remoteTaskDTO) {
return remoteExceptionTaskApi.getExceptionTask(remoteTaskDTO);
}
/**
* 远遥查询异常的车辆
@ -39,4 +28,14 @@ public class RemoteTaskServiceImpl implements RemoteTaskService {
public PageResult<RemoteExceptionTaskDetailDTO> getExceptionTaskDetail(RemoteTaskQueryDTO remoteTaskQuery) {
return remoteExceptionTaskApi.getExceptionTaskDetail(remoteTaskQuery);
}
/**
* 查摄像头信息
* @param robotNo
* @return
*/
@Override
public List<RemoteRobotCameraDTO> getCarmeraByRobotNo(String robotNo) {
return remoteExceptionTaskApi.getCarmeraByRobotNo(robotNo);
}
}

View File

@ -1,10 +1,7 @@
package cn.iocoder.yudao.module.system.api.remote;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskDetailDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskQueryDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.*;
import cn.iocoder.yudao.module.system.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -21,15 +18,11 @@ public interface RemoteExceptionTaskApi {
String PREFIX = ApiConstants.PREFIX + "/remote";
/**
* 远遥查看异常列表
* @return
*/
@PostMapping(PREFIX + "/getExceptionTask")
@Operation(summary = "远遥查看异常列表")
PageResult<RemoteExceptionTaskListDTO> getExceptionTask(@RequestBody RemoteTaskDTO remoteTaskDTO);
@PostMapping(PREFIX + "/getExceptionTaskDetail")
@Operation(summary = "远遥查询异常的车辆")
PageResult<RemoteExceptionTaskDetailDTO> getExceptionTaskDetail(@RequestBody RemoteTaskQueryDTO remoteTaskQuery);
@PostMapping(PREFIX + "/getCarmeraByRobotNo")
@Operation(summary = "查摄像头信息")
List<RemoteRobotCameraDTO> getCarmeraByRobotNo(@RequestParam("robotNo") String robotNo);
}

View File

@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.system.api.remote.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class RemoteRobotCameraDTO {
@Schema(description = "摄像头位置(0:上, 1:左, 2:右, 3:下, 4:后)")
private Integer cameraPosition;
@Schema(description = "摄像头IP--长度20")
private String cameraIp;
@Schema(description = "摄像头端口--长度10")
private String cameraPort;
@Schema(description = "摄像头账号--长度30", example = "24863")
private String cameraAccount;
@Schema(description = "摄像头密码--长度40")
private String cameraPassword;
}

View File

@ -1,16 +1,20 @@
package cn.iocoder.yudao.module.system.api.remote;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskDetailDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskDTO;
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteTaskQueryDTO;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.api.remote.dto.*;
import cn.iocoder.yudao.module.system.controller.admin.robot.camera.RobotCameraAddVO;
import cn.iocoder.yudao.module.system.service.robot.RobotTaskDetailService;
import cn.iocoder.yudao.module.system.service.robot.camera.RobotCameraService;
import cn.iocoder.yudao.module.system.util.aes.AESEncryptionUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -23,16 +27,11 @@ public class RemoteExceptionTaskApiImpl implements RemoteExceptionTaskApi{
@Resource
private RobotTaskDetailService taskDetailService;
/**
* 远遥获取异常任务列表
* @param taskStage
* @param robotNo
* @return
*/
@Override
public PageResult<RemoteExceptionTaskListDTO> getExceptionTask(RemoteTaskDTO remoteTaskDTO) {
return taskDetailService.getRemoteExceptionTask(remoteTaskDTO);
}
@Resource
private RobotCameraService cameraService;
@Value("${zn.camera_secret_key}")
private String cameraSecretKey;
/**
* 远遥查询异常的车辆
@ -44,4 +43,24 @@ public class RemoteExceptionTaskApiImpl implements RemoteExceptionTaskApi{
return taskDetailService.getExceptionTaskDetail(remoteTaskQuery);
}
@Override
public List<RemoteRobotCameraDTO> getCarmeraByRobotNo(String robotNo) {
List<RobotCameraAddVO> cameraByRobotNo = cameraService.getCameraByRobotNo(robotNo);
if (ObjectUtil.isEmpty(cameraByRobotNo)) {
return new ArrayList<>();
}
List<RemoteRobotCameraDTO> list = BeanUtils.toBean(cameraByRobotNo, RemoteRobotCameraDTO.class);
for (RemoteRobotCameraDTO robotCameraDO : list) {
try {
robotCameraDO.setCameraAccount(AESEncryptionUtil.decrypt(robotCameraDO.getCameraAccount(),cameraSecretKey));
robotCameraDO.setCameraPassword(AESEncryptionUtil.decrypt(robotCameraDO.getCameraPassword(),cameraSecretKey));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return list;
}
}

View File

@ -10,6 +10,9 @@ import javax.validation.constraints.Size;
@Data
public class RobotCameraAddVO {
@Schema(description = "摄像头id")
private Long id;
@Schema(description = "摄像头位置(0:上, 1:左, 2:右, 3:下, 4:后)")
@NotNull(message = "请选择摄像头位置")
private Integer cameraPosition;

View File

@ -150,14 +150,6 @@ public interface RobotTaskDetailMapper extends BaseMapperX<RobotTaskDetailDO> {
*/
List<RobotDoingTaskDTO> getRobotDoingTaskNo();
/**
* 远遥查询异常任务列表
* @param mpPage
* @param pageReqVO
* @return
*/
IPage<RemoteExceptionTaskListDTO> selectRemoteExceptionTask(@Param("mpPage") IPage mpPage,
@Param("pageReqVO") RemoteTaskDTO pageReqVO);
/**
* 远遥查询异常任务列表

View File

@ -275,8 +275,6 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
throw exception(ROBOT_DOING_REMOTE);
}
cameraService.deleteCameraByRobotNo(robotInformationDO.getRobotNo());
if (!updateReqVO.getRobotNo().equals(robotInformationDO.getRobotNo())
|| !updateReqVO.getMacAddress().equals(robotInformationDO.getMacAddress())) {
List<RobotTaskDO> list = taskMapper.selectDoingTaskByRobotNo(robotInformationDO.getRobotNo());
@ -312,6 +310,9 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
if (ObjectUtil.isNotEmpty(existRobotIp)) {
throw exception(ROBOT_ROBOT_IP_EXISTS);
}
cameraService.deleteCameraByRobotNo(robotInformationDO.getRobotNo());
if (ObjectUtil.isNotEmpty(updateReqVO.getCameraAddVOList())) {
List<RobotCameraAddVO> cameraAddVOList = updateReqVO.getCameraAddVOList();
cameraService.checkCameraExist(cameraAddVOList);

View File

@ -112,11 +112,6 @@ public interface RobotTaskDetailService {
*/
List<RobotDoingTaskDTO> getRobotDoingTaskNo();
/**
* 获取远遥异常列表
* @return
*/
PageResult<RemoteExceptionTaskListDTO> getRemoteExceptionTask(RemoteTaskDTO remoteTaskDTO);
/**
* 远遥查询异常的车辆

View File

@ -208,15 +208,6 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
return taskDetailMapper.getRobotDoingTaskNo();
}
@Override
public PageResult<RemoteExceptionTaskListDTO> getRemoteExceptionTask(RemoteTaskDTO pageReqVO) {
IPage mpPage = MyBatisUtils.buildPage(pageReqVO);
IPage<RemoteExceptionTaskListDTO> page = taskDetailMapper.selectRemoteExceptionTask(mpPage, pageReqVO);
PageResult<RemoteExceptionTaskListDTO> dataPage = new PageResult<>();
dataPage.setTotal(page.getTotal());
dataPage.setList(page.getRecords());
return dataPage;
}
/**
* 远遥查询异常的车辆

View File

@ -9,9 +9,11 @@ import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotCameraDO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotCameraMapper;
import cn.iocoder.yudao.module.system.enums.robot.RobotStatusEnum;
import cn.iocoder.yudao.module.system.util.aes.AESEncryptionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -41,6 +43,9 @@ public class RobotCameraServiceImpl extends ServiceImpl<RobotCameraMapper, Robot
@Resource
private RobotCameraMapper cameraMapper;
@Value("${zn.camera_secret_key}")
private String cameraSecretKey;
@Override
public Long createCamera(RobotCameraSaveReqVO createReqVO) {
// 插入
@ -110,6 +115,14 @@ public class RobotCameraServiceImpl extends ServiceImpl<RobotCameraMapper, Robot
public void createCameraList(List<RobotCameraAddVO> cameraAddVOList, String robotNo) {
List<RobotCameraDO> cameraDOList = BeanUtils.toBean(cameraAddVOList, RobotCameraDO.class);
for (RobotCameraDO robotCameraDO : cameraDOList) {
try {
if (ObjectUtil.isEmpty(robotCameraDO.getId())) {
robotCameraDO.setCameraAccount(AESEncryptionUtil.encrypt(robotCameraDO.getCameraAccount(),cameraSecretKey));
robotCameraDO.setCameraPassword(AESEncryptionUtil.encrypt(robotCameraDO.getCameraPassword(),cameraSecretKey));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
robotCameraDO.setRobotNo(robotNo);
}
cameraMapper.insert(cameraDOList);

View File

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.system.util.aes;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class AESEncryptionUtil {
private static final String AES_ALGORITHM = "AES";
public static String encrypt(String plaintext, String key) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), AES_ALGORITHM);
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String ciphertext, String key) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), AES_ALGORITHM);
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(ciphertext));
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
public static void main(String[] args) throws Exception {
String plaintext = "Hello, World!2333333333";
String key = "1234567890abcdef";
String encryptedText = encrypt(plaintext, key);
System.out.println("Encrypted Text: " + encryptedText);
String decryptedText = decrypt(encryptedText, key);
System.out.println("Decrypted Text: " + decryptedText);
}
}

View File

@ -186,6 +186,7 @@ justauth:
zn:
task-no: ZN #任务号开头
camera_secret_key: A2C4rv7DY012c9ef #摄像头秘钥
do_cycle: true #是否开启循环
lane_auto_move: true #线库是否自动移库 true:线库执行自动移库 、false线库关闭执行自动移库
robot_position_cache_time: 10 #机器人上报点位存储时间(秒)

View File

@ -221,6 +221,7 @@ map:
zn:
task-no: ZN #任务号开头
camera_secret_key: A2C4rv7DY012c9ef #摄像头秘钥
do_cycle: true #是否开启循环
lane_auto_move: true #线库是否自动移库 true:线库执行自动移库 、false线库关闭执行自动移库
robot_position_cache_time: 10 #机器人上报点位存储时间(秒)

View File

@ -322,34 +322,6 @@
and t2.task_status ='1'
</select>
<select id="selectRemoteExceptionTask"
resultType="cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskListDTO">
select
t2.id,
t2.robot_no as robotNo,
t1.task_no as taskNo,
t2.from_location_no as fromLocationNo,
t2.to_location_no as toLocationNo,
t2.task_stage as taskStage
from
robot_task t1 inner join robot_task_detail t2
on t1.id = t2.robot_task_id
<where>
t1.deleted = '0'
and t2.deleted = '0'
and t2.occur_error = '1'
and t2.task_type in ('1','6')
and t2.task_status = '1'
and t1.task_status = '1'
<if test="pageReqVO.robotNo != null and pageReqVO.robotNo != ''">
and t2.robot_no = #{pageReqVO.robotNo}
</if>
<if test="pageReqVO.taskStage != null">
and t2.task_stage = #{pageReqVO.taskStage}
</if>
</where>
order by t1.create_time desc
</select>
<select id="getExceptionTaskDetail"
resultType="cn.iocoder.yudao.module.system.api.remote.dto.RemoteExceptionTaskDetailDTO">