Compare commits
3 Commits
5a870cf145
...
02ac8dfda9
Author | SHA1 | Date | |
---|---|---|---|
![]() |
02ac8dfda9 | ||
![]() |
2f7bea2518 | ||
![]() |
928491f16c |
@ -21,4 +21,8 @@ public interface CommonApi {
|
|||||||
@PostMapping(PREFIX + "/commonMethod")
|
@PostMapping(PREFIX + "/commonMethod")
|
||||||
@Operation(summary = "公共方法")
|
@Operation(summary = "公共方法")
|
||||||
void commonMethod(@RequestBody Object obj, @RequestParam("topic") String topic);
|
void commonMethod(@RequestBody Object obj, @RequestParam("topic") String topic);
|
||||||
|
|
||||||
|
@PostMapping(PREFIX + "/commonMethodStr")
|
||||||
|
@Operation(summary = "公共方法")
|
||||||
|
void commonMethodStr(@RequestParam("str") String str, @RequestParam("topic") String topic);
|
||||||
}
|
}
|
||||||
|
@ -76,4 +76,8 @@ public class TaskToPathPlanningDTO {
|
|||||||
@Schema(description = "取货-叉起货需要在原来高度基础上偏移的高度")
|
@Schema(description = "取货-叉起货需要在原来高度基础上偏移的高度")
|
||||||
private Double releaseOffsetHeight;
|
private Double releaseOffsetHeight;
|
||||||
|
|
||||||
|
//PICK_UP_GOODS取货、DROP_OFF_GOODS放货、MOVE移动、AUTO_CHARGE自动充电、MANUAL_CHARGE手动充电
|
||||||
|
//如果是取放货 传PICK_UP_GOODS
|
||||||
|
private String taskType;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
package cn.iocoder.yudao.module.mqtt.api.task.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class RobotRcsHeartBeatDTO {
|
||||||
|
}
|
@ -23,9 +23,23 @@ public class CommonApiImpl implements CommonApi {
|
|||||||
String str = JSON.toJSONString(obj);
|
String str = JSON.toJSONString(obj);
|
||||||
mqttUtils.pub(topic, JSON.toJSONString(obj));
|
mqttUtils.pub(topic, JSON.toJSONString(obj));
|
||||||
if (str.length() > 510) {
|
if (str.length() > 510) {
|
||||||
log.info("MQTT消息发送成功 :{}", str.substring(0, 500));
|
log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str.substring(0, 500));
|
||||||
}else {
|
}else {
|
||||||
log.info("MQTT消息发送成功 :{}", str);
|
log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str);
|
||||||
|
}
|
||||||
|
} catch (MqttException e) {
|
||||||
|
log.info("MQTT消息发送异常 :{}",e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void commonMethodStr(String str, String topic) {
|
||||||
|
try {
|
||||||
|
mqttUtils.pub(topic, str);
|
||||||
|
if (str.length() > 510) {
|
||||||
|
log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str.substring(0, 500));
|
||||||
|
}else {
|
||||||
|
log.info("MQTT消息发送成功topic :{}, 内容 :{}",topic, str);
|
||||||
}
|
}
|
||||||
} catch (MqttException e) {
|
} catch (MqttException e) {
|
||||||
log.info("MQTT消息发送异常 :{}",e);
|
log.info("MQTT消息发送异常 :{}",e);
|
||||||
|
@ -15,17 +15,17 @@ import java.util.List;
|
|||||||
public enum DefineSubTopicEnum {
|
public enum DefineSubTopicEnum {
|
||||||
|
|
||||||
//qos 0-至多1次、1-至少1次、2-正好一次
|
//qos 0-至多1次、1-至少1次、2-正好一次
|
||||||
ROBOT_STATUS("ROBOT_STATUS", 0,"点位"),
|
ROBOT_STATUS("ROBOT_STATUS", 2,"点位"),
|
||||||
ROBOT_TASK_STATUS("ROBOT_TASK_STATUS", 0,"机器人任务完成上报"),
|
ROBOT_TASK_STATUS("ROBOT_TASK_STATUS", 2,"机器人任务完成上报"),
|
||||||
ROBOT_REACTIVE_STATUS("ROBOT_REACTIVE_STATUS", 0,"机器人响应式状态上报"),
|
ROBOT_REACTIVE_STATUS("ROBOT_REACTIVE_STATUS", 2,"机器人响应式状态上报"),
|
||||||
ROBOT_GENERICS_STATUS("ROBOT_GENERICS_STATUS", 0,"机器人异常"),
|
ROBOT_GENERICS_STATUS("ROBOT_GENERICS_STATUS", 2,"机器人异常"),
|
||||||
ROBOT_PATH_STATUS("ROBOT_PATH_STATUS", 0,"导航实时行为上报"),
|
ROBOT_PATH_STATUS("ROBOT_PATH_STATUS", 2,"导航实时行为上报"),
|
||||||
ROBOT_WORK_STATUS("ROBOT_WORK_STATUS", 0,"作业实时行为上报"),
|
ROBOT_WORK_STATUS("ROBOT_WORK_STATUS", 2,"作业实时行为上报"),
|
||||||
ROBOT_UPDATE_PALLET_HEIGHT("UPDATE_PALLET_HEIGHT", 0,"放货后货物高度反馈和取货后货物高度反馈"),
|
ROBOT_UPDATE_PALLET_HEIGHT("UPDATE_PALLET_HEIGHT", 2,"放货后货物高度反馈和取货后货物高度反馈"),
|
||||||
SYNCHRONOUS_ALL_MAP_REQUEST("SYNCHRONOUS_ALL_MAP_REQUEST", 0,"路径规划需要初始数据上报"),
|
SYNCHRONOUS_ALL_MAP_REQUEST("SYNCHRONOUS_ALL_MAP_REQUEST", 2,"路径规划需要初始数据上报"),
|
||||||
TASK_ASSIGNMENT_FEEDBACK("TASK_ASSIGNMENT_FEEDBACK", 0,"路径规划任务分配上报"),
|
TASK_ASSIGNMENT_FEEDBACK("TASK_ASSIGNMENT_FEEDBACK", 2,"路径规划任务分配上报"),
|
||||||
TASK_ASSIGNMENT_FAIL("TASK_ASSIGNMENT_FAIL", 0,"路径规划失败上报"),
|
TASK_ASSIGNMENT_FAIL("TASK_ASSIGNMENT_FAIL", 2,"路径规划失败上报"),
|
||||||
ROBOT_TASK_MOVE ("ROBOT_TASK_MOVE ", 0,"路径规划上报实时路径");
|
ROBOT_TASK_MOVE ("ROBOT_TASK_MOVE", 2,"路径规划上报实时路径");
|
||||||
|
|
||||||
|
|
||||||
private final String topic;
|
private final String topic;
|
||||||
|
@ -197,6 +197,7 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode TASK_CHECK_TASK_STATUS = new ErrorCode(1-002-035-100, "订单已完成");
|
ErrorCode TASK_CHECK_TASK_STATUS = new ErrorCode(1-002-035-100, "订单已完成");
|
||||||
ErrorCode TASK_CHECK_UPDATE_STATUS = new ErrorCode(1-002-035-101, "订单更新失败");
|
ErrorCode TASK_CHECK_UPDATE_STATUS = new ErrorCode(1-002-035-101, "订单更新失败");
|
||||||
ErrorCode TASK_CHECK_EXIST_NO = new ErrorCode(1-002-035-102, "订单号已存在");
|
ErrorCode TASK_CHECK_EXIST_NO = new ErrorCode(1-002-035-102, "订单号已存在");
|
||||||
|
ErrorCode TASK_TYPE_UN_EXIST = new ErrorCode(1-002-035-103, "找不到对应的任务类型");
|
||||||
|
|
||||||
// ========== 机器人任务明细 1-002-036-000 ==========
|
// ========== 机器人任务明细 1-002-036-000 ==========
|
||||||
ErrorCode TASK_DETAIL_NOT_EXISTS = new ErrorCode(1-002-036-001, "机器人任务明细不存在");
|
ErrorCode TASK_DETAIL_NOT_EXISTS = new ErrorCode(1-002-036-001, "机器人任务明细不存在");
|
||||||
|
@ -21,7 +21,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMap
|
|||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.*;
|
import cn.iocoder.yudao.module.system.dal.mysql.robot.*;
|
||||||
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.path.PathIsReachEnum;
|
import cn.iocoder.yudao.module.system.enums.path.PathIsReachEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.path.PathTaskType;
|
import cn.iocoder.yudao.module.system.enums.path.PathTaskTypeEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.*;
|
import cn.iocoder.yudao.module.system.enums.robot.*;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotStatusCodeEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.task.RobotStatusCodeEnum;
|
||||||
@ -140,9 +140,9 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
* @param robotCompleteTaskDTO
|
* @param robotCompleteTaskDTO
|
||||||
*/
|
*/
|
||||||
private void robotTaskDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) {
|
private void robotTaskDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey) {
|
||||||
if (PathTaskType.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
chargeDoing(robotCompleteTaskDTO, robotDoingActionKey);
|
chargeDoing(robotCompleteTaskDTO, robotDoingActionKey);
|
||||||
} else if (PathTaskType.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
} else if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
|
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
|
||||||
logOne.setActionMsg("车辆正在前往等待点");
|
logOne.setActionMsg("车辆正在前往等待点");
|
||||||
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
|
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
|
||||||
@ -182,14 +182,14 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
*/
|
*/
|
||||||
private void robotTaskDone(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
private void robotTaskDone(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
||||||
//todo 后面考虑下充电,车机目前对充电的逻辑未定义
|
//todo 后面考虑下充电,车机目前对充电的逻辑未定义
|
||||||
if (PathTaskType.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
if (PathTaskTypeEnum.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||||
|| PathTaskType.MOVE_TO_WAIT_STOP.getType().equals(robotCompleteTaskDTO.getOrderType())
|
|| PathTaskTypeEnum.MOVE_TO_WAIT_STOP.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||||
|| PathTaskType.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
|| PathTaskTypeEnum.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||||
|| PathTaskType.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
|| PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||||
|| PathTaskType.RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
|| PathTaskTypeEnum.RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
taskDone(robotCompleteTaskDTO);
|
taskDone(robotCompleteTaskDTO);
|
||||||
|
|
||||||
} else if (PathTaskType.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
} else if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||||
if (RobotTaskStageEnum.TAKEING.getType().equals(robotTaskDetailDO.getTaskStage())) {
|
if (RobotTaskStageEnum.TAKEING.getType().equals(robotTaskDetailDO.getTaskStage())) {
|
||||||
pathPlanningService.updateBehavior(String.valueOf(robotCompleteTaskDTO.getOrderId()), robotTaskDetailDO.getRobotNo()
|
pathPlanningService.updateBehavior(String.valueOf(robotCompleteTaskDTO.getOrderId()), robotTaskDetailDO.getRobotNo()
|
||||||
@ -197,9 +197,9 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
} else if (RobotTaskStageEnum.RELEASEING.getType().equals(robotTaskDetailDO.getTaskStage())) {
|
} else if (RobotTaskStageEnum.RELEASEING.getType().equals(robotTaskDetailDO.getTaskStage())) {
|
||||||
taskDone(robotCompleteTaskDTO);
|
taskDone(robotCompleteTaskDTO);
|
||||||
}
|
}
|
||||||
} else if (PathTaskType.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
} else if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
moveToWaitService.updateWaitStatus(robotCompleteTaskDTO.getOrderId(), WaitStatusEnum.REACH_WAIT.getType());
|
moveToWaitService.updateWaitStatus(robotCompleteTaskDTO.getOrderId(), WaitStatusEnum.REACH_WAIT.getType());
|
||||||
} else if (PathTaskType.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
} else if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
RobotChargeLogDO build = RobotChargeLogDO
|
RobotChargeLogDO build = RobotChargeLogDO
|
||||||
.builder()
|
.builder()
|
||||||
.id(robotCompleteTaskDTO.getOrderId())
|
.id(robotCompleteTaskDTO.getOrderId())
|
||||||
@ -371,7 +371,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
String commandType = commandStatus.getCommandType();
|
String commandType = commandStatus.getCommandType();
|
||||||
|
|
||||||
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
|
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
|
||||||
if (PathTaskType.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) {
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) {
|
||||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
||||||
@ -386,7 +386,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (PathTaskType.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
} else if (PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||||
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
||||||
logOne.setActionMsg("车辆正在前往" + robotChargeLogDO.getDeviceNo() + "充电");
|
logOne.setActionMsg("车辆正在前往" + robotChargeLogDO.getDeviceNo() + "充电");
|
||||||
@ -396,17 +396,17 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.CHARGEING.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.CHARGEING.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (PathTaskType.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
} else if (PathTaskTypeEnum.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
||||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo());
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo());
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType());
|
||||||
}
|
}
|
||||||
} else if (PathTaskType.MOVE_TO_WAIT_STOP.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
} else if (PathTaskTypeEnum.MOVE_TO_WAIT_STOP.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
||||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo());
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo());
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType());
|
||||||
}
|
}
|
||||||
} else if (PathTaskType.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
} else if (PathTaskTypeEnum.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) {
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) {
|
||||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
||||||
@ -415,7 +415,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (PathTaskType.RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
} else if (PathTaskTypeEnum.RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) {
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) {
|
||||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货");
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货");
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
|
||||||
|
@ -16,4 +16,8 @@ public class RobotTopicConstant {
|
|||||||
*RCS发送心跳给车机
|
*RCS发送心跳给车机
|
||||||
*/
|
*/
|
||||||
public static String RCS_HEART_BEAT = "RCS_HEART_BEAT";
|
public static String RCS_HEART_BEAT = "RCS_HEART_BEAT";
|
||||||
|
/**
|
||||||
|
* 让机器人同步告警码值映射的topic (拼接mac地址)
|
||||||
|
*/
|
||||||
|
public static String UPDATE_ERROR_TOPIC = "UPDATE_ERROR";
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import javax.validation.constraints.*;
|
|||||||
|
|
||||||
@Schema(description = "管理后台 - 用户操作记录新增/修改 Request VO")
|
@Schema(description = "管理后台 - 用户操作记录新增/修改 Request VO")
|
||||||
@Data
|
@Data
|
||||||
|
@Builder
|
||||||
public class UserOperationLogSaveReqVO {
|
public class UserOperationLogSaveReqVO {
|
||||||
|
|
||||||
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "24510")
|
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "24510")
|
||||||
|
@ -7,10 +7,13 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO;
|
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemRespVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
||||||
import cn.iocoder.yudao.module.system.handler.mapnode.NodeProcessingContext;
|
import cn.iocoder.yudao.module.system.handler.mapnode.NodeProcessingContext;
|
||||||
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
|
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
@ -42,6 +45,9 @@ public class PositionMapItemController {
|
|||||||
@Resource
|
@Resource
|
||||||
private NodeProcessingContext nodeProcessingContext;
|
private NodeProcessingContext nodeProcessingContext;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserOperationLogService userOperationLogService;
|
||||||
|
|
||||||
// -- 前端给所有的节点信息 -
|
// -- 前端给所有的节点信息 -
|
||||||
@PostMapping("/batchSaveOrEditOrDel")
|
@PostMapping("/batchSaveOrEditOrDel")
|
||||||
@Operation(summary = "批量新增编辑删除节点")
|
@Operation(summary = "批量新增编辑删除节点")
|
||||||
@ -59,6 +65,12 @@ public class PositionMapItemController {
|
|||||||
List<List<PositionMapItemDO>> list = CollectionUtils.compareLists(oldList, newAllList,
|
List<List<PositionMapItemDO>> list = CollectionUtils.compareLists(oldList, newAllList,
|
||||||
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
||||||
positionMapItemService.batchSaveOrEditOrDel(positionMapId, list);
|
positionMapItemService.batchSaveOrEditOrDel(positionMapId, list);
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("保存地图编辑")
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
|
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.positionmap.dto;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class RobotPositionMapDTO {
|
||||||
|
/**
|
||||||
|
* 实际坐标x轴
|
||||||
|
*/
|
||||||
|
private String actualLocationX;
|
||||||
|
/**
|
||||||
|
* 实际坐标y轴
|
||||||
|
*/
|
||||||
|
private String actualLocationY;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充
|
||||||
|
*/
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AGV编号
|
||||||
|
*/
|
||||||
|
private String robotNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 仓库点位地图表id
|
||||||
|
*/
|
||||||
|
private Long positionMapId;
|
||||||
|
}
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.robot;
|
|||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingRespVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.robot.warn.RobotWarnCodeMappingVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnCodeMappingDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnCodeMappingDO;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.RobotWarnCodeMappingService;
|
import cn.iocoder.yudao.module.system.service.robot.RobotWarnCodeMappingService;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
@ -13,6 +14,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
|
|||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
|
||||||
|
import javax.annotation.security.PermitAll;
|
||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.*;
|
||||||
import javax.validation.*;
|
import javax.validation.*;
|
||||||
import javax.servlet.http.*;
|
import javax.servlet.http.*;
|
||||||
@ -94,4 +96,11 @@ public class RobotWarnCodeMappingController {
|
|||||||
BeanUtils.toBean(list, RobotWarnCodeMappingRespVO.class));
|
BeanUtils.toBean(list, RobotWarnCodeMappingRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/agv/query")
|
||||||
|
@Operation(summary = "机器人下载告警码值映射文件")
|
||||||
|
@PermitAll
|
||||||
|
public void agvQueryWarnCode(HttpServletResponse response) {
|
||||||
|
warnCodeMappingService.agvQueryWarnCode(response);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -15,7 +15,7 @@ import lombok.NoArgsConstructor;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class TaskAssignDTO {
|
public class TaskAssignDTO {
|
||||||
@Schema(description = "robot_task_detail/robot_charge_log 的 id")
|
@Schema(description = "robot_task_detail/robot_charge_log 的 id")
|
||||||
private Long id;
|
private Long orderId;
|
||||||
|
|
||||||
@Schema(description = "任务类型(TAKE_RELEASE、CHARGE、MOVE、TAKE、RELEASE、AUTO_CHARGE)")
|
@Schema(description = "任务类型(TAKE_RELEASE、CHARGE、MOVE、TAKE、RELEASE、AUTO_CHARGE)")
|
||||||
private String type;
|
private String type;
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.robot.warn;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class RobotWarnCodeMappingVO {
|
||||||
|
|
||||||
|
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15754")
|
||||||
|
@ExcelProperty("主键ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "告警等级 (1,2,3,4)")
|
||||||
|
@ExcelProperty("告警等级 (1,2,3,4)")
|
||||||
|
private Integer warnLevel;
|
||||||
|
|
||||||
|
@Schema(description = "能不能继续做任务 (0:不能, 1:能)")
|
||||||
|
@ExcelProperty("能不能继续做任务 (0:不能, 1:能)")
|
||||||
|
private Integer doTask;
|
||||||
|
|
||||||
|
@Schema(description = "告警编号")
|
||||||
|
@ExcelProperty("告警编号")
|
||||||
|
private String warnCode;
|
||||||
|
|
||||||
|
@Schema(description = "告警信息")
|
||||||
|
@ExcelProperty("告警信息")
|
||||||
|
private String warnMsg;
|
||||||
|
|
||||||
|
@Schema(description = "告警解决方法")
|
||||||
|
@ExcelProperty("告警解决方法")
|
||||||
|
private String warnSolve;
|
||||||
|
}
|
@ -11,6 +11,8 @@ import org.springframework.validation.annotation.Validated;
|
|||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.annotation.security.PermitAll;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
||||||
@ -25,17 +27,24 @@ public class ToolsController {
|
|||||||
@Resource
|
@Resource
|
||||||
private ToolsService toolsService;
|
private ToolsService toolsService;
|
||||||
|
|
||||||
@PostMapping("/cleanAgv")
|
@PostMapping("/pp/cleanAgv")
|
||||||
@Operation(summary = "路径规划---清除交管")
|
@Operation(summary = "路径规划---清除交管")
|
||||||
@PreAuthorize("@ss.hasPermission('robot:information:cleanAgv')")
|
@PermitAll
|
||||||
public CommonResult<String> cleanAgv(@Valid @RequestParam @NotBlank(message = "请传机器人编号") String robotNo) {
|
public CommonResult<String> cleanAgv(@Valid @RequestParam @NotBlank(message = "请传机器人编号") String robotNo) {
|
||||||
return success(toolsService.cleanAgv(robotNo));
|
return success(toolsService.cleanAgv(robotNo));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/closeTaskDetail")
|
@PostMapping("/closeTaskDetail")
|
||||||
@Operation(summary = "关闭任务(同步路径规划和车机)-不改变数据库任务状态")
|
@Operation(summary = "关闭任务(同步路径规划和车机)-不改变数据库任务状态")
|
||||||
@PreAuthorize("@ss.hasPermission('robot:information:closeTaskDetail')")
|
@PermitAll
|
||||||
public CommonResult<String> closeTaskDetail(@Valid @RequestParam @NotBlank(message = "请传任务id") String taskDetailId) {
|
public CommonResult<String> closeTaskDetail(@Valid @RequestParam @NotBlank(message = "请传任务id") String taskDetailId) {
|
||||||
return success(toolsService.closeTaskDetail(taskDetailId));
|
return success(toolsService.closeTaskDetail(taskDetailId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/robot/updateWarnCode")
|
||||||
|
@Operation(summary = "机器人---下载告警码值映射文件")
|
||||||
|
@PermitAll
|
||||||
|
public CommonResult<String> updateWarnCode() {
|
||||||
|
return success(toolsService.updateWarnCode());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ public class MoveToWaitDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 主键ID
|
* 主键ID
|
||||||
*/
|
*/
|
||||||
@TableId
|
@TableId(type = IdType.ASSIGN_ID)
|
||||||
private Long id;
|
private Long id;
|
||||||
/**
|
/**
|
||||||
* AGV编号
|
* AGV编号
|
||||||
|
@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
|||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.dto.PositionMapItemSynDTO;
|
import cn.iocoder.yudao.module.mqtt.api.path.dto.PositionMapItemSynDTO;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds;
|
import cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.RobotPositionMapDTO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
@ -60,4 +61,11 @@ public interface PositionMapItemMapper extends BaseMapperX<PositionMapItemDO> {
|
|||||||
* @param laneId
|
* @param laneId
|
||||||
*/
|
*/
|
||||||
void emptyLaneId(@Param("mapId") Long mapId, @Param("laneId") Long laneId);
|
void emptyLaneId(@Param("mapId") Long mapId, @Param("laneId") Long laneId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param list
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<PositionMapItemDO> selectInWaitList(@Param("list") List<RobotPositionMapDTO> list);
|
||||||
}
|
}
|
||||||
|
@ -6,8 +6,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.robot.warn.RobotWarnCodeMappingVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnCodeMappingDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnCodeMappingDO;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 机器人告警码值映射 Mapper
|
* 机器人告警码值映射 Mapper
|
||||||
@ -28,4 +31,5 @@ public interface RobotWarnCodeMappingMapper extends BaseMapperX<RobotWarnCodeMap
|
|||||||
.orderByDesc(RobotWarnCodeMappingDO::getId));
|
.orderByDesc(RobotWarnCodeMappingDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<RobotWarnCodeMappingVO> getAllWarnCodeList();
|
||||||
}
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.enums.item;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum PositionMapItemEnum {
|
||||||
|
PATH(1,"路径点位"),
|
||||||
|
LOCATION(2,"库位点"),
|
||||||
|
CHARGE(3,"充电桩"),
|
||||||
|
STOP(4,"停车点"),
|
||||||
|
CHANGE(5,"区域变更点"),
|
||||||
|
WAIT(6,"等待点");
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*/
|
||||||
|
private final Integer type;
|
||||||
|
|
||||||
|
private final String msg;
|
||||||
|
}
|
@ -9,7 +9,7 @@ import lombok.Getter;
|
|||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum PathTaskType {
|
public enum PathTaskTypeEnum {
|
||||||
TAKE_RELEASE("TAKE_RELEASE","取放货"),
|
TAKE_RELEASE("TAKE_RELEASE","取放货"),
|
||||||
CHARGE("CHARGE","充电任务"),
|
CHARGE("CHARGE","充电任务"),
|
||||||
MOVE("MOVE","移动任务"),
|
MOVE("MOVE","移动任务"),
|
@ -0,0 +1,45 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.enums.path;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskTypeEnum;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.ROBOT_MAC_ADDRESS_EXISTS;
|
||||||
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TASK_TYPE_UN_EXIST;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum PathTaskTypeToRobotEnum {
|
||||||
|
PICK_UP_GOODS("PICK_UP_GOODS","取货"),
|
||||||
|
DROP_OFF_GOODS("DROP_OFF_GOODS","放货"),
|
||||||
|
MOVE("MOVE","移动"),
|
||||||
|
AUTO_CHARGE("AUTO_CHARGE","自动充电"),
|
||||||
|
MANUAL_CHARGE("MANUAL_CHARGE","手动充电");
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*/
|
||||||
|
private final String type;
|
||||||
|
|
||||||
|
private final String msg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务对应的类型
|
||||||
|
* @param taskType
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String taskDetailGetType(Integer taskType) {
|
||||||
|
if (RobotTaskTypeEnum.TAKE_RELEASE.getType().equals(taskType)) {
|
||||||
|
return PICK_UP_GOODS.getType();
|
||||||
|
}else if (RobotTaskTypeEnum.MOVE.getType().equals(taskType)) {
|
||||||
|
return MOVE.getType();
|
||||||
|
}else if (RobotTaskTypeEnum.TAKE.getType().equals(taskType)) {
|
||||||
|
return PICK_UP_GOODS.getType();
|
||||||
|
}else if (RobotTaskTypeEnum.RELEASE.getType().equals(taskType)) {
|
||||||
|
return DROP_OFF_GOODS.getType();
|
||||||
|
}else if (RobotTaskTypeEnum.PARK.getType().equals(taskType)) {
|
||||||
|
return MOVE.getType();
|
||||||
|
}
|
||||||
|
throw exception(TASK_TYPE_UN_EXIST);
|
||||||
|
}
|
||||||
|
}
|
@ -9,10 +9,11 @@ import lombok.Getter;
|
|||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum LocationEnableEnum {
|
public enum LocationEnableEnum {
|
||||||
YES(1), //启用
|
YES(1,"启用"),
|
||||||
NO(0); //禁用
|
NO(0,"禁用");
|
||||||
/**
|
/**
|
||||||
* 类型
|
* 类型
|
||||||
*/
|
*/
|
||||||
private final Integer type;
|
private final Integer type;
|
||||||
|
private final String msg;
|
||||||
}
|
}
|
||||||
|
@ -9,10 +9,11 @@ import lombok.Getter;
|
|||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum LocationUseStatusEnum {
|
public enum LocationUseStatusEnum {
|
||||||
YES(1), //占用
|
YES(1,"占用"),
|
||||||
NO(0); //空闲
|
NO(0,"空闲");
|
||||||
/**
|
/**
|
||||||
* 类型
|
* 类型
|
||||||
*/
|
*/
|
||||||
private final Integer type;
|
private final Integer type;
|
||||||
|
private final String msg;
|
||||||
}
|
}
|
||||||
|
@ -164,7 +164,6 @@ public class RobotJob {
|
|||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
log.info("维护车机心跳未获取到锁");
|
|
||||||
throw exception(REDISSON_NOT_OBTAIN_LOCK);
|
throw exception(REDISSON_NOT_OBTAIN_LOCK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,15 @@ import cn.hutool.core.date.DateTime;
|
|||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.config.vo.*;
|
import cn.iocoder.yudao.module.system.controller.admin.config.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper;
|
||||||
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.config.CommandConfigTypeEnum;
|
import cn.iocoder.yudao.module.system.enums.config.CommandConfigTypeEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
import cn.iocoder.yudao.module.system.service.tool.ToolsService;
|
import cn.iocoder.yudao.module.system.service.tool.ToolsService;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
@ -47,6 +50,9 @@ public class CommonConfigServiceImpl implements CommonConfigService {
|
|||||||
@Resource
|
@Resource
|
||||||
private ToolsService toolsService;
|
private ToolsService toolsService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserOperationLogService userOperationLogService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createConfig(CommonConfigSaveReqVO createReqVO) {
|
public Long createConfig(CommonConfigSaveReqVO createReqVO) {
|
||||||
// 插入
|
// 插入
|
||||||
@ -63,6 +69,11 @@ public class CommonConfigServiceImpl implements CommonConfigService {
|
|||||||
|
|
||||||
configMapper.insert(config);
|
configMapper.insert(config);
|
||||||
toolsService.sendPPsortConfig();
|
toolsService.sendPPsortConfig();
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("添加参数设置")
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
// 返回
|
// 返回
|
||||||
return config.getId();
|
return config.getId();
|
||||||
}
|
}
|
||||||
@ -130,6 +141,11 @@ public class CommonConfigServiceImpl implements CommonConfigService {
|
|||||||
configMapper.updateById(updateObj);
|
configMapper.updateById(updateObj);
|
||||||
|
|
||||||
toolsService.sendPPsortConfig();
|
toolsService.sendPPsortConfig();
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("修改参数设置")
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,14 +1,20 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.houselocation;
|
package cn.iocoder.yudao.module.system.service.houselocation;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationRespVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationVO;
|
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.robot.LocationEnableEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.robot.LocationUseStatusEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -36,6 +42,9 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
|||||||
@Resource
|
@Resource
|
||||||
private WareHouseLocationMapper houseLocationMapper;
|
private WareHouseLocationMapper houseLocationMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserOperationLogService userOperationLogService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Long createHouseLocation(WareHouseLocationSaveReqVO createReqVO) {
|
public Long createHouseLocation(WareHouseLocationSaveReqVO createReqVO) {
|
||||||
@ -51,9 +60,44 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
|||||||
public void updateHouseLocation(WareHouseLocationSaveReqVO updateReqVO) {
|
public void updateHouseLocation(WareHouseLocationSaveReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateHouseLocationExists(updateReqVO.getId());
|
validateHouseLocationExists(updateReqVO.getId());
|
||||||
|
String str = "";
|
||||||
|
WareHouseLocationDO wareHouseLocationDO = houseLocationMapper.selectById(updateReqVO.getId());
|
||||||
|
if (!wareHouseLocationDO.getLocationEnable().equals(updateReqVO.getLocationEnable())) {
|
||||||
|
if (LocationEnableEnum.YES.getType().equals(updateReqVO.getLocationEnable())) {
|
||||||
|
str = str + "设置库位" + LocationEnableEnum.YES.getMsg() + " ";
|
||||||
|
} else {
|
||||||
|
str = str + "设置库位" + LocationEnableEnum.NO.getMsg() + " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!wareHouseLocationDO.getLocationUseStatus().equals(updateReqVO.getLocationUseStatus())) {
|
||||||
|
if (LocationUseStatusEnum.YES.getType().equals(updateReqVO.getLocationUseStatus())) {
|
||||||
|
str = str + "设置库位" + LocationUseStatusEnum.YES.getMsg() + " ";
|
||||||
|
} else {
|
||||||
|
str = str + "设置库位" + LocationUseStatusEnum.NO.getMsg() + " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ObjectUtil.isNotEmpty(updateReqVO.getSkuInfo()) && ObjectUtil.isNotEmpty(wareHouseLocationDO.getSkuInfo())
|
||||||
|
&& !wareHouseLocationDO.getSkuInfo().equals(updateReqVO.getSkuInfo())) {
|
||||||
|
str = str + "设置库位物料信息 " + wareHouseLocationDO.getSkuInfo();
|
||||||
|
} else if (ObjectUtil.isNotEmpty(updateReqVO.getSkuInfo()) && ObjectUtil.isNotEmpty(wareHouseLocationDO.getSkuInfo())
|
||||||
|
&& wareHouseLocationDO.getSkuInfo().equals(updateReqVO.getSkuInfo())) {
|
||||||
|
|
||||||
|
} else if (ObjectUtil.isEmpty(updateReqVO.getSkuInfo()) && ObjectUtil.isNotEmpty(wareHouseLocationDO.getSkuInfo())) {
|
||||||
|
str = str + "设置库位物料信息为空";
|
||||||
|
} else if (ObjectUtil.isNotEmpty(updateReqVO.getSkuInfo()) && ObjectUtil.isEmpty(wareHouseLocationDO.getSkuInfo())) {
|
||||||
|
str = str + "设置库位物料信息为 " + updateReqVO.getSkuInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction(str)
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
// 更新
|
// 更新
|
||||||
WareHouseLocationDO updateObj = BeanUtils.toBean(updateReqVO, WareHouseLocationDO.class);
|
WareHouseLocationDO updateObj = BeanUtils.toBean(updateReqVO, WareHouseLocationDO.class);
|
||||||
houseLocationMapper.updateById(updateObj);
|
houseLocationMapper.updateById(updateObj);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import cn.iocoder.yudao.module.system.constant.device.DeviceChcheConstant;
|
import cn.iocoder.yudao.module.system.constant.device.DeviceChcheConstant;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.information.dto.DeviceInformationDTO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.dto.DeviceInformationDTO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.information.dto.MapBindDeviceInfoDTO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.dto.MapBindDeviceInfoDTO;
|
||||||
@ -11,6 +12,7 @@ import cn.iocoder.yudao.module.system.controller.admin.information.dto.Statistic
|
|||||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationRespVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||||
@ -19,6 +21,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper;
|
|||||||
import cn.iocoder.yudao.module.system.enums.device.DeviceStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.device.DeviceStatusEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.device.PictureConfigEnum;
|
import cn.iocoder.yudao.module.system.enums.device.PictureConfigEnum;
|
||||||
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
|
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
|
||||||
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -61,6 +64,9 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
|||||||
@Resource
|
@Resource
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserOperationLogService userOperationLogService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createInformation(DeviceInformationSaveReqVO createReqVO) {
|
public Long createInformation(DeviceInformationSaveReqVO createReqVO) {
|
||||||
// -- 先判断库里是否有相通的mac地址数据
|
// -- 先判断库里是否有相通的mac地址数据
|
||||||
@ -83,6 +89,11 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
|||||||
DeviceInformationDO information = BeanUtils.toBean(createReqVO, DeviceInformationDO.class);
|
DeviceInformationDO information = BeanUtils.toBean(createReqVO, DeviceInformationDO.class);
|
||||||
information.setDeviceStatus(1);
|
information.setDeviceStatus(1);
|
||||||
informationMapper.insert(information);
|
informationMapper.insert(information);
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("新增设备 " + createReqVO.getDeviceNo())
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
// 返回
|
// 返回
|
||||||
return information.getId();
|
return information.getId();
|
||||||
}
|
}
|
||||||
@ -103,6 +114,11 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
|||||||
// 更新
|
// 更新
|
||||||
DeviceInformationDO updateObj = BeanUtils.toBean(updateReqVO, DeviceInformationDO.class);
|
DeviceInformationDO updateObj = BeanUtils.toBean(updateReqVO, DeviceInformationDO.class);
|
||||||
informationMapper.updateById(updateObj);
|
informationMapper.updateById(updateObj);
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("更新设备信息 " + updateReqVO.getDeviceNo())
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -159,7 +175,7 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
|||||||
list.get(2).forEach(a -> a.setPositionMapItemId(null));
|
list.get(2).forEach(a -> a.setPositionMapItemId(null));
|
||||||
editList.addAll(list.get(2));
|
editList.addAll(list.get(2));
|
||||||
}
|
}
|
||||||
if (isNotEmpty(editList)){
|
if (isNotEmpty(editList)) {
|
||||||
informationMapper.updateBatch(editList);
|
informationMapper.updateBatch(editList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -271,7 +287,7 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
|||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(deviceInformationDO.getPositionMapId())
|
if (ObjectUtil.isNotEmpty(deviceInformationDO.getPositionMapId())
|
||||||
&& ObjectUtil.isNotEmpty(positionMap.get(deviceInformationDO.getPositionMapId()))) {
|
&& ObjectUtil.isNotEmpty(positionMap.get(deviceInformationDO.getPositionMapId()))) {
|
||||||
deviceInformationDO.setFloor(positionMap.get(deviceInformationDO.getPositionMapId()).getFloor()+"");
|
deviceInformationDO.setFloor(positionMap.get(deviceInformationDO.getPositionMapId()).getFloor() + "");
|
||||||
deviceInformationDO.setArea(positionMap.get(deviceInformationDO.getPositionMapId()).getArea());
|
deviceInformationDO.setArea(positionMap.get(deviceInformationDO.getPositionMapId()).getArea());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.notify;
|
package cn.iocoder.yudao.module.system.service.notify;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyMessageDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyMessageDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.notify.NotifyMessageMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.notify.NotifyMessageMapper;
|
||||||
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
@ -13,6 +18,7 @@ import javax.annotation.Resource;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 站内信 Service 实现类
|
* 站内信 Service 实现类
|
||||||
@ -26,6 +32,9 @@ public class NotifyMessageServiceImpl implements NotifyMessageService {
|
|||||||
@Resource
|
@Resource
|
||||||
private NotifyMessageMapper notifyMessageMapper;
|
private NotifyMessageMapper notifyMessageMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserOperationLogService userOperationLogService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createNotifyMessage(Long userId, Integer userType,
|
public Long createNotifyMessage(Long userId, Integer userType,
|
||||||
NotifyTemplateDO template, String templateContent, Map<String, Object> templateParams) {
|
NotifyTemplateDO template, String templateContent, Map<String, Object> templateParams) {
|
||||||
@ -64,6 +73,19 @@ public class NotifyMessageServiceImpl implements NotifyMessageService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int updateNotifyMessageRead(Collection<Long> ids, Long userId, Integer userType) {
|
public int updateNotifyMessageRead(Collection<Long> ids, Long userId, Integer userType) {
|
||||||
|
List<NotifyMessageDO> notifyMessageDOS = notifyMessageMapper.selectBatchIds(ids);
|
||||||
|
String str = "";
|
||||||
|
if (ObjectUtil.isNotEmpty(notifyMessageDOS)) {
|
||||||
|
List<String> list = notifyMessageDOS.stream().map(NotifyMessageDO::getTemplateContent).collect(Collectors.toList());
|
||||||
|
str = StringUtils.join(list, ",");
|
||||||
|
if(str.length() > 90) {
|
||||||
|
str = str.substring(0,90);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("查看了消息:" + str)
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
return notifyMessageMapper.updateListRead(ids, userId, userType);
|
return notifyMessageMapper.updateListRead(ids, userId, userType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,7 +395,7 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
|||||||
PathPosedsDTO pathPosedsDTO = JSON.parseObject(message, PathPosedsDTO.class);
|
PathPosedsDTO pathPosedsDTO = JSON.parseObject(message, PathPosedsDTO.class);
|
||||||
String mac = robotInformationService.getMacByRobotNo(pathPosedsDTO.getRobotNo());
|
String mac = robotInformationService.getMacByRobotNo(pathPosedsDTO.getRobotNo());
|
||||||
String topic = RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + mac;
|
String topic = RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + mac;
|
||||||
commonApi.commonMethod(message, topic);
|
commonApi.commonMethodStr(message, topic);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -7,14 +7,17 @@ import cn.hutool.json.JSONUtil;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
||||||
|
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotRcsHeartBeatDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.RequestProcessor;
|
import cn.iocoder.yudao.module.system.api.robot.RequestProcessor;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO;
|
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO;
|
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.vo.RobotInformationVO;
|
import cn.iocoder.yudao.module.system.api.robot.vo.RobotInformationVO;
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.informationmapassociation.InformationMapAssociationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.informationmapassociation.InformationMapAssociationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||||
@ -27,6 +30,7 @@ import cn.iocoder.yudao.module.system.enums.robot.RobotStatusEnum;
|
|||||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskModelEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskModelEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.information.RobotStatisticsTypeEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.information.RobotStatisticsTypeEnum;
|
||||||
import cn.iocoder.yudao.module.system.service.informationmapassociation.InformationMapAssociationService;
|
import cn.iocoder.yudao.module.system.service.informationmapassociation.InformationMapAssociationService;
|
||||||
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@ -61,6 +65,9 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
@Resource
|
@Resource
|
||||||
private CommonApi commonApi;
|
private CommonApi commonApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserOperationLogService userOperationLogService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
@Resource
|
@Resource
|
||||||
@ -106,6 +113,11 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
}
|
}
|
||||||
informationMapAssociationService.saveBatch(list);
|
informationMapAssociationService.saveBatch(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("新增车辆 "+createReqVO.getRobotNo())
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
// 返回
|
// 返回
|
||||||
return information.getId();
|
return information.getId();
|
||||||
}
|
}
|
||||||
@ -148,6 +160,20 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
(CollUtil.isEmpty(updateReqVO.getFloorAreaJson()) ? Collections.emptyList() : new ArrayList<>(updateReqVO.getFloorAreaJson())),
|
(CollUtil.isEmpty(updateReqVO.getFloorAreaJson()) ? Collections.emptyList() : new ArrayList<>(updateReqVO.getFloorAreaJson())),
|
||||||
ObjectUtil::equal);
|
ObjectUtil::equal);
|
||||||
informationMapAssociationService.saveOrUpdateOrDel(updateReqVO.getId(), list);
|
informationMapAssociationService.saveOrUpdateOrDel(updateReqVO.getId(), list);
|
||||||
|
|
||||||
|
String str = "";
|
||||||
|
if (!robotInformationDO.getRobotTaskModel().equals(updateReqVO.getRobotTaskModel())
|
||||||
|
&& RobotTaskModelEnum.REJECTION.getType().equals(updateReqVO.getRobotTaskModel())) {
|
||||||
|
str = ",且设置车辆锁定";
|
||||||
|
}else if (!robotInformationDO.getRobotTaskModel().equals(updateReqVO.getRobotTaskModel())
|
||||||
|
&& RobotTaskModelEnum.NORMAL.getType().equals(updateReqVO.getRobotTaskModel())) {
|
||||||
|
str = ",且设置车辆非锁定";
|
||||||
|
}
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("更新车辆信息"+str)
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -156,6 +182,12 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
validateInformationExists(id);
|
validateInformationExists(id);
|
||||||
// 删除
|
// 删除
|
||||||
informationMapper.deleteById(id);
|
informationMapper.deleteById(id);
|
||||||
|
|
||||||
|
RobotInformationDO robotInformationDO = informationMapper.selectById(id);
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("删除车辆 "+robotInformationDO.getRobotNo())
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateInformationExists(Long id) {
|
private void validateInformationExists(Long id) {
|
||||||
@ -574,10 +606,10 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
@Override
|
@Override
|
||||||
public void rcsHeartBeat() {
|
public void rcsHeartBeat() {
|
||||||
RobotInformationDO query = new RobotInformationDO();
|
RobotInformationDO query = new RobotInformationDO();
|
||||||
List<RobotInformationDO> robotInformationDOS = informationMapper.queryAllByLimit(query);
|
List<RobotInformationDO> robotInformations = informationMapper.queryAllByLimit(query);
|
||||||
for (RobotInformationDO robotInformationDO : robotInformationDOS) {
|
for (RobotInformationDO robotInformationDO : robotInformations) {
|
||||||
String topic = RobotTopicConstant.RCS_HEART_BEAT + robotInformationDO.getMacAddress();
|
String topic = RobotTopicConstant.RCS_HEART_BEAT + robotInformationDO.getMacAddress();
|
||||||
commonApi.commonMethod("同步的消息", topic);
|
commonApi.commonMethod(new RobotRcsHeartBeatDTO(), topic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,15 +8,16 @@ import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
|||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
||||||
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.*;
|
import cn.iocoder.yudao.module.mqtt.api.task.dto.*;
|
||||||
import cn.iocoder.yudao.module.mqtt.enums.task.ExecutionTypeEnum;
|
import cn.iocoder.yudao.module.mqtt.enums.task.ExecutionTypeEnum;
|
||||||
import cn.iocoder.yudao.module.system.api.path.vo.RobotClosePathPlantingDTO;
|
import cn.iocoder.yudao.module.system.api.path.vo.RobotClosePathPlantingDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO;
|
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO;
|
||||||
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotStatusCodeConstant;
|
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskAssignDTO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskAssignDTO;
|
||||||
@ -41,13 +42,14 @@ import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper;
|
|||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
|
||||||
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.device.DeviceUseStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.device.DeviceUseStatusEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.path.PathTaskType;
|
import cn.iocoder.yudao.module.system.enums.path.PathTaskTypeEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.redis.RobotCacheLockEnum;
|
import cn.iocoder.yudao.module.system.enums.redis.RobotCacheLockEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.*;
|
import cn.iocoder.yudao.module.system.enums.robot.*;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum;
|
||||||
//import cn.iocoder.yudao.module.system.service.robot.job.RobotCommonTaskService;
|
//import cn.iocoder.yudao.module.system.service.robot.job.RobotCommonTaskService;
|
||||||
import cn.iocoder.yudao.module.system.enums.wait.WaitStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.wait.WaitStatusEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
import cn.iocoder.yudao.module.system.service.wait.MoveToWaitService;
|
import cn.iocoder.yudao.module.system.service.wait.MoveToWaitService;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedissonUtils;
|
import cn.iocoder.yudao.module.system.util.redis.RedissonUtils;
|
||||||
@ -149,6 +151,9 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
@Resource
|
@Resource
|
||||||
private CommonApi commonApi;
|
private CommonApi commonApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserOperationLogService userOperationLogService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Long createTask(RobotTaskSaveReqVO createReqVO) throws InterruptedException {
|
public Long createTask(RobotTaskSaveReqVO createReqVO) throws InterruptedException {
|
||||||
@ -181,6 +186,10 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
throw exception0(TASK_CHECK_EXCEPTION.getCode(), addResult);
|
throw exception0(TASK_CHECK_EXCEPTION.getCode(), addResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder().operateAction("创建订单 " + createReqVO.getTaskNo())
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
|
|
||||||
return 1l;
|
return 1l;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,6 +369,10 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
List<Long> detailIds = new ArrayList<>();
|
List<Long> detailIds = new ArrayList<>();
|
||||||
Set<String> robotNos = new HashSet<>();
|
Set<String> robotNos = new HashSet<>();
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder().operateAction("关闭订单 " + robotTaskDO.getTaskNo())
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
|
|
||||||
for (RobotTaskDetailDO taskDetailDO : taskDetailDOS) {
|
for (RobotTaskDetailDO taskDetailDO : taskDetailDOS) {
|
||||||
if (!RobotTaskDetailStatusEnum.NEW.getType().equals(taskDetailDO.getTaskStatus())
|
if (!RobotTaskDetailStatusEnum.NEW.getType().equals(taskDetailDO.getTaskStatus())
|
||||||
&& !RobotTaskDetailStatusEnum.DOING.getType().equals(taskDetailDO.getTaskStatus())) {
|
&& !RobotTaskDetailStatusEnum.DOING.getType().equals(taskDetailDO.getTaskStatus())) {
|
||||||
@ -457,8 +470,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
|
|
||||||
Integer robotStatus = RobotStatusEnum.DOING.getType();
|
Integer robotStatus = RobotStatusEnum.DOING.getType();
|
||||||
|
|
||||||
if (PathTaskType.AUTO_CHARGE.getType().equals(taskAssignDTO.getType())) {
|
if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(taskAssignDTO.getType())) {
|
||||||
robotChargeLogs = chargeLogMapper.selectById(taskAssignDTO.getId());
|
robotChargeLogs = chargeLogMapper.selectById(taskAssignDTO.getOrderId());
|
||||||
|
|
||||||
robotChargeLogs.setTaskStatus(ChargeTaskStatusEnum.DOING.getType());
|
robotChargeLogs.setTaskStatus(ChargeTaskStatusEnum.DOING.getType());
|
||||||
chargeLogMapper.updateBatch(robotChargeLogs);
|
chargeLogMapper.updateBatch(robotChargeLogs);
|
||||||
@ -469,18 +482,18 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
detailId = robotChargeLogs.getTaskDetailId();
|
detailId = robotChargeLogs.getTaskDetailId();
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (PathTaskType.MOVE_TO_WAIT.getType().equals(taskAssignDTO.getType())) {
|
} else if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(taskAssignDTO.getType())) {
|
||||||
chargeDone(taskAssignDTO.getRobotNo());
|
chargeDone(taskAssignDTO.getRobotNo());
|
||||||
moveToWaitService.updateWaitStatus(taskAssignDTO.getId(), WaitStatusEnum.GO_TO_WAIT.getType());
|
moveToWaitService.updateWaitStatus(taskAssignDTO.getOrderId(), WaitStatusEnum.GO_TO_WAIT.getType());
|
||||||
} else if (PathTaskType.CHARGE.getType().equals(taskAssignDTO.getType())) {
|
} else if (PathTaskTypeEnum.CHARGE.getType().equals(taskAssignDTO.getType())) {
|
||||||
robotStatus = RobotStatusEnum.CHARGE.getType();
|
robotStatus = RobotStatusEnum.CHARGE.getType();
|
||||||
detailId = taskAssignDTO.getId();
|
detailId = taskAssignDTO.getOrderId();
|
||||||
} else {
|
} else {
|
||||||
chargeDone(taskAssignDTO.getRobotNo());
|
chargeDone(taskAssignDTO.getRobotNo());
|
||||||
detailId = taskAssignDTO.getId();
|
detailId = taskAssignDTO.getOrderId();
|
||||||
}
|
}
|
||||||
|
|
||||||
robotInformationMapper.updateRobotListStatus(taskAssignDTO.getRobotNo(), robotStatus, taskAssignDTO.getId());
|
robotInformationMapper.updateRobotListStatus(taskAssignDTO.getRobotNo(), robotStatus, taskAssignDTO.getOrderId());
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(detailId)) {
|
if (ObjectUtil.isNotEmpty(detailId)) {
|
||||||
setTaskDoing(detailId, taskAssignDTO.getRobotNo(), deviceNoMap);
|
setTaskDoing(detailId, taskAssignDTO.getRobotNo(), deviceNoMap);
|
||||||
@ -502,17 +515,17 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
.topic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac)
|
.topic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac)
|
||||||
.orderType(taskAssignDTO.getType())
|
.orderType(taskAssignDTO.getType())
|
||||||
.executionType(ExecutionTypeEnum.DEFAULT.getType())
|
.executionType(ExecutionTypeEnum.DEFAULT.getType())
|
||||||
.orderId(taskAssignDTO.getId().toString())
|
.orderId(taskAssignDTO.getOrderId().toString())
|
||||||
.data(Lists.newArrayList(robotAssignTask))
|
.data(Lists.newArrayList(robotAssignTask))
|
||||||
.build();
|
.build();
|
||||||
if (PathTaskType.TAKE_RELEASE.getType().equals(taskAssignDTO.getType())
|
if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(taskAssignDTO.getType())
|
||||||
|| PathTaskType.TAKE.getType().equals(taskAssignDTO.getType())
|
|| PathTaskTypeEnum.TAKE.getType().equals(taskAssignDTO.getType())
|
||||||
|| PathTaskType.RELEASE.getType().equals(taskAssignDTO.getType())) {
|
|| PathTaskTypeEnum.RELEASE.getType().equals(taskAssignDTO.getType())) {
|
||||||
RobotAssignTaskDataDTO robotAssignTaskData = getRobotAssignTaskData(v, taskAssignDTO);
|
RobotAssignTaskDataDTO robotAssignTaskData = getRobotAssignTaskData(v, taskAssignDTO);
|
||||||
List<RobotAssignTaskDataDTO> data = build.getData();
|
List<RobotAssignTaskDataDTO> data = build.getData();
|
||||||
data.add(robotAssignTaskData);
|
data.add(robotAssignTaskData);
|
||||||
} else if (PathTaskType.CHARGE.getType().equals(taskAssignDTO.getType())
|
} else if (PathTaskTypeEnum.CHARGE.getType().equals(taskAssignDTO.getType())
|
||||||
|| PathTaskType.AUTO_CHARGE.getType().equals(taskAssignDTO.getType())) {
|
|| PathTaskTypeEnum.AUTO_CHARGE.getType().equals(taskAssignDTO.getType())) {
|
||||||
RobotAssignTaskDataDTO robotAssignTaskData = new RobotAssignTaskDataDTO();
|
RobotAssignTaskDataDTO robotAssignTaskData = new RobotAssignTaskDataDTO();
|
||||||
robotAssignTaskData.setCommandType(RobotCommandTypeEnum.WORK_START_CHARGE.getType());
|
robotAssignTaskData.setCommandType(RobotCommandTypeEnum.WORK_START_CHARGE.getType());
|
||||||
List<RobotAssignTaskDataDTO> data = build.getData();
|
List<RobotAssignTaskDataDTO> data = build.getData();
|
||||||
@ -536,8 +549,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
RobotAssignTaskDataDTO take = new RobotAssignTaskDataDTO();
|
RobotAssignTaskDataDTO take = new RobotAssignTaskDataDTO();
|
||||||
RobotAssignTaskArgDTO build = null;
|
RobotAssignTaskArgDTO build = null;
|
||||||
WareHouseLocationDO location = null;
|
WareHouseLocationDO location = null;
|
||||||
if (PathTaskType.TAKE_RELEASE.getType().equals(taskAssignDTO.getType()) ||
|
if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(taskAssignDTO.getType()) ||
|
||||||
PathTaskType.TAKE.getType().equals(taskAssignDTO.getType())) {
|
PathTaskTypeEnum.TAKE.getType().equals(taskAssignDTO.getType())) {
|
||||||
take.setCommandType(RobotCommandTypeEnum.WORD_PICK_UP_GOODS.getType());
|
take.setCommandType(RobotCommandTypeEnum.WORD_PICK_UP_GOODS.getType());
|
||||||
location = locationMapper.selectById(v.getFromLocationId());
|
location = locationMapper.selectById(v.getFromLocationId());
|
||||||
build = RobotAssignTaskArgDTO.builder()
|
build = RobotAssignTaskArgDTO.builder()
|
||||||
@ -545,7 +558,7 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
.offsetHeight(offsetHeight)
|
.offsetHeight(offsetHeight)
|
||||||
.build();
|
.build();
|
||||||
take.setArg(Arrays.asList(build));
|
take.setArg(Arrays.asList(build));
|
||||||
} else if (PathTaskType.RELEASE.getType().equals(taskAssignDTO.getType())) {
|
} else if (PathTaskTypeEnum.RELEASE.getType().equals(taskAssignDTO.getType())) {
|
||||||
take.setCommandType(RobotCommandTypeEnum.WORD_DROP_OFF_GOODS.getType());
|
take.setCommandType(RobotCommandTypeEnum.WORD_DROP_OFF_GOODS.getType());
|
||||||
location = locationMapper.selectById(v.getToLocationId());
|
location = locationMapper.selectById(v.getToLocationId());
|
||||||
build = RobotAssignTaskArgDTO.builder()
|
build = RobotAssignTaskArgDTO.builder()
|
||||||
@ -1097,6 +1110,11 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
taskMapper.updateById(updateObj);
|
taskMapper.updateById(updateObj);
|
||||||
|
|
||||||
taskDetailMapper.updateBatch(taskDetailDOS);
|
taskDetailMapper.updateBatch(taskDetailDOS);
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("修改" + robotTaskDO.getTaskNo() + "优先级" + updateReqVO.getPriority())
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.robot;
|
package cn.iocoder.yudao.module.system.service.robot;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.*;
|
import javax.validation.*;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.robot.warn.RobotWarnCodeMappingVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnCodeMappingDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnCodeMappingDO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,4 +55,5 @@ public interface RobotWarnCodeMappingService {
|
|||||||
*/
|
*/
|
||||||
PageResult<RobotWarnCodeMappingDO> getWarnCodeMappingPage(RobotWarnCodeMappingPageReqVO pageReqVO);
|
PageResult<RobotWarnCodeMappingDO> getWarnCodeMappingPage(RobotWarnCodeMappingPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
void agvQueryWarnCode(HttpServletResponse response);
|
||||||
}
|
}
|
@ -1,13 +1,35 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.robot;
|
package cn.iocoder.yudao.module.system.service.robot;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnCodeMappingSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.robot.warn.RobotWarnCodeMappingVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnCodeMappingDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnCodeMappingDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotWarnCodeMappingMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotWarnCodeMappingMapper;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.springframework.context.annotation.PropertySource;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
@ -25,11 +47,15 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.WARN_CODE_
|
|||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@Validated
|
@Validated
|
||||||
|
@Slf4j
|
||||||
public class RobotWarnCodeMappingServiceImpl implements RobotWarnCodeMappingService {
|
public class RobotWarnCodeMappingServiceImpl implements RobotWarnCodeMappingService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private RobotWarnCodeMappingMapper warnCodeMappingMapper;
|
private RobotWarnCodeMappingMapper warnCodeMappingMapper;
|
||||||
|
|
||||||
|
@Value("${map.file.warn-path}")
|
||||||
|
private String warnUploadPath;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createWarnCodeMapping(RobotWarnCodeMappingSaveReqVO createReqVO) {
|
public Long createWarnCodeMapping(RobotWarnCodeMappingSaveReqVO createReqVO) {
|
||||||
// 插入
|
// 插入
|
||||||
@ -72,4 +98,60 @@ public class RobotWarnCodeMappingServiceImpl implements RobotWarnCodeMappingServ
|
|||||||
return warnCodeMappingMapper.selectPage(pageReqVO);
|
return warnCodeMappingMapper.selectPage(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 机器人查询告警码值映射
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void agvQueryWarnCode(HttpServletResponse response) {
|
||||||
|
List<RobotWarnCodeMappingVO> list = warnCodeMappingMapper.getAllWarnCodeList();
|
||||||
|
if (ObjectUtil.isEmpty(list)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
exportJson(response,list,"warn.json",warnUploadPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void exportJson(HttpServletResponse response, Object obj, String fileName, String uploadPath) {
|
||||||
|
try {
|
||||||
|
String jsonString = JSON.toJSONString(obj,
|
||||||
|
SerializerFeature.PrettyFormat,
|
||||||
|
SerializerFeature.WriteMapNullValue,
|
||||||
|
SerializerFeature.WriteDateUseDateFormat);
|
||||||
|
|
||||||
|
//String fullPath = "/" + fileName;
|
||||||
|
File path = new File(uploadPath);
|
||||||
|
if (!path.exists()) {
|
||||||
|
path.mkdirs();
|
||||||
|
}
|
||||||
|
String fullPath = uploadPath + "/" + fileName;
|
||||||
|
File file = new File(fullPath);
|
||||||
|
|
||||||
|
Writer write = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);
|
||||||
|
write.write(jsonString);
|
||||||
|
write.flush();
|
||||||
|
write.close();
|
||||||
|
|
||||||
|
FileInputStream fis = new FileInputStream(file);
|
||||||
|
// force-download
|
||||||
|
response.setContentType("application/force-download");
|
||||||
|
response.setHeader("Content-Disposition", "attachment;filename="
|
||||||
|
.concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));
|
||||||
|
response.setCharacterEncoding("utf-8");
|
||||||
|
|
||||||
|
OutputStream os = response.getOutputStream();
|
||||||
|
byte[] buf = new byte[1024];
|
||||||
|
int len = 0;
|
||||||
|
while ((len = fis.read(buf)) != -1) {
|
||||||
|
os.write(buf, 0, len);
|
||||||
|
}
|
||||||
|
fis.close();
|
||||||
|
os.close();
|
||||||
|
boolean delete = file.delete();
|
||||||
|
|
||||||
|
// return file;
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("告警码值导出JSON文件失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -55,37 +55,12 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private RobotTaskDetailMapper robotTaskDetailMapper;
|
private RobotTaskDetailMapper robotTaskDetailMapper;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RobotTaskApi robotTaskApi;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private PositionMapItemMapper positionMapItemMapper;
|
|
||||||
|
|
||||||
@Value("${zn.init_height:0.0}")
|
|
||||||
private double initHeight;
|
|
||||||
|
|
||||||
@Value("${zn.default_scan_height:0.4}")
|
|
||||||
private double scanHeight;
|
|
||||||
|
|
||||||
@Value("${zn.parm:5000}")
|
|
||||||
private Integer parm;
|
|
||||||
|
|
||||||
@Value("${zn.lift_height:0.1}")
|
|
||||||
private double liftHeight;
|
|
||||||
|
|
||||||
@Value("${zn.move_height:0.1}")
|
|
||||||
private double moveHeight;
|
|
||||||
|
|
||||||
@Value("${zn.full_electricity:100}")
|
@Value("${zn.full_electricity:100}")
|
||||||
private String fullElectricity;
|
private String fullElectricity;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private CommonConfigMapper configMapper;
|
private CommonConfigMapper configMapper;
|
||||||
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private WareHouseLocationMapper locationMapper;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
@ -121,7 +96,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
|||||||
String taskStatusKey = RobotTaskChcheConstant.ROBOT_TASK_STATUS + robot.getMacAddress();
|
String taskStatusKey = RobotTaskChcheConstant.ROBOT_TASK_STATUS + robot.getMacAddress();
|
||||||
String cargoDetectedKey = RobotTaskChcheConstant.ROBOT_CARGO_DETECTED + robot.getMacAddress();
|
String cargoDetectedKey = RobotTaskChcheConstant.ROBOT_CARGO_DETECTED + robot.getMacAddress();
|
||||||
Object taskStatus = redisUtil.get(taskStatusKey);
|
Object taskStatus = redisUtil.get(taskStatusKey);
|
||||||
if (ObjectUtil.isEmpty(taskStatus) || RobotStatusCodeConstant.TASK_STATUS_RUNNING.equals(Boolean.parseBoolean(String.valueOf(taskStatus)))) {
|
if (ObjectUtil.isEmpty(taskStatus) || !RobotStatusCodeConstant.TASK_STATUS_RUNNING.equals(Boolean.parseBoolean(String.valueOf(taskStatus)))) {
|
||||||
robot.setRobotStatus(RobotStatusEnum.DOING.getType());
|
robot.setRobotStatus(RobotStatusEnum.DOING.getType());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.robot.pathplanning;
|
package cn.iocoder.yudao.module.system.service.robot.pathplanning;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.PathPlanningApi;
|
import cn.iocoder.yudao.module.mqtt.api.path.PathPlanningApi;
|
||||||
@ -8,12 +9,17 @@ import cn.iocoder.yudao.module.mqtt.api.path.task.TaskLimitationAreaDTO;
|
|||||||
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskRobotNoLimittationAreaDTO;
|
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskRobotNoLimittationAreaDTO;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskToPathPlanningDTO;
|
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskToPathPlanningDTO;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.RobotTaskApi;
|
import cn.iocoder.yudao.module.mqtt.api.task.RobotTaskApi;
|
||||||
|
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO;
|
||||||
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
||||||
|
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.RobotPositionMapDTO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.wait.MoveToWaitDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
|
||||||
@ -21,14 +27,18 @@ import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper;
|
|||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotInformationMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotInformationMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
|
||||||
import cn.iocoder.yudao.module.system.enums.path.PathTaskType;
|
import cn.iocoder.yudao.module.system.dal.mysql.wait.MoveToWaitMapper;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.item.PositionMapItemEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.path.PathTaskTypeEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.path.PathTaskTypeToRobotEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.*;
|
import cn.iocoder.yudao.module.system.enums.robot.*;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeModelEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeModelEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.robot.information.ChargeTypeEnum;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.job.DistributeTasksService;
|
import cn.iocoder.yudao.module.system.service.robot.job.DistributeTasksService;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
@ -37,7 +47,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
@ -47,46 +56,19 @@ import java.util.stream.Collectors;
|
|||||||
@Validated
|
@Validated
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
||||||
@Autowired
|
|
||||||
private RobotInformationMapper robotInformationMapper;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private RobotTaskMapper robotTaskMapper;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RobotTaskDetailMapper robotTaskDetailMapper;
|
private RobotTaskDetailMapper robotTaskDetailMapper;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RobotTaskApi robotTaskApi;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PositionMapItemMapper positionMapItemMapper;
|
private PositionMapItemMapper positionMapItemMapper;
|
||||||
|
|
||||||
@Value("${zn.init_height:0.0}")
|
|
||||||
private double initHeight;
|
|
||||||
|
|
||||||
@Value("${zn.default_scan_height:0.4}")
|
|
||||||
private double scanHeight;
|
|
||||||
|
|
||||||
@Value("${zn.parm:5000}")
|
|
||||||
private Integer parm;
|
|
||||||
|
|
||||||
@Value("${zn.lift_height:0.1}")
|
|
||||||
private double liftHeight;
|
|
||||||
|
|
||||||
@Value("${zn.move_height:0.1}")
|
|
||||||
private double moveHeight;
|
|
||||||
|
|
||||||
@Value("${zn.task_need_single:true}")
|
@Value("${zn.task_need_single:true}")
|
||||||
private Boolean taskNeedSingle;
|
private Boolean taskNeedSingle;
|
||||||
|
|
||||||
@Value("${zn.location_number_reduce:100000000}")
|
@Value("${zn.location_number_reduce:100000000}")
|
||||||
private Long locationNumberReduce;
|
private Long locationNumberReduce;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private CommonConfigMapper configMapper;
|
|
||||||
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private WareHouseLocationMapper locationMapper;
|
private WareHouseLocationMapper locationMapper;
|
||||||
|
|
||||||
@ -111,6 +93,9 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
@Value("${zn.robot_config.offset_height}")
|
@Value("${zn.robot_config.offset_height}")
|
||||||
private Double offsetHeight;
|
private Double offsetHeight;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private MoveToWaitMapper moveToWaitMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 下发任务给PP
|
* 下发任务给PP
|
||||||
*/
|
*/
|
||||||
@ -130,7 +115,8 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
|
|
||||||
List<RobotTaskDetailDO> taskDetailDOS = robotAndTaskDetails.getRight();
|
List<RobotTaskDetailDO> taskDetailDOS = robotAndTaskDetails.getRight();
|
||||||
if (ObjectUtil.isEmpty(taskDetailDOS)) {
|
if (ObjectUtil.isEmpty(taskDetailDOS)) {
|
||||||
log.info("--不存在需要执行的任务--");
|
log.info("--不存在需要执行的任务--派车辆去等待点");
|
||||||
|
moveRobotToWait(robots);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,6 +125,136 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 派车辆去等待点
|
||||||
|
*
|
||||||
|
* @param robots
|
||||||
|
*/
|
||||||
|
private void moveRobotToWait(List<RobotInformationDO> robots) {
|
||||||
|
|
||||||
|
List<PositionMapItemDO> positionMapItems = positionMapItemMapper.selectList(new LambdaQueryWrapperX<PositionMapItemDO>()
|
||||||
|
.eq(PositionMapItemDO::getType, PositionMapItemEnum.STOP.getType())
|
||||||
|
.eq(PositionMapItemDO::getUseStatus, ZeroOneEnum.ZERO.getType()));
|
||||||
|
if (ObjectUtil.isEmpty(positionMapItems)) {
|
||||||
|
log.info("------没有空闲的停车点-----");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<PositionMapDO> positionMaps = positionMapMapper.selectList(new LambdaQueryWrapperX<PositionMapDO>());
|
||||||
|
Map<String, PositionMapDO> positionMap =
|
||||||
|
positionMaps.stream().collect(Collectors.toMap(v -> v.getFloor() + "_" + v.getArea(), Function.identity()));
|
||||||
|
|
||||||
|
List<RobotPositionMapDTO> list = new ArrayList<>();
|
||||||
|
for (RobotInformationDO robot : robots) {
|
||||||
|
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC + robot.getMacAddress();
|
||||||
|
Object object = redisUtil.get(pose2dKey);
|
||||||
|
RobotStatusDataPoseDTO robotStatusDataPoseDTO = JSONUtil.toBean((String) object, RobotStatusDataPoseDTO.class);
|
||||||
|
if (ObjectUtil.isEmpty(object) || ObjectUtil.isEmpty(robotStatusDataPoseDTO)) {
|
||||||
|
log.info("------此机器人没有点位信息------ :{}", robot.getRobotNo());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
String mapKey = robotStatusDataPoseDTO.getFloor() + "_" + robotStatusDataPoseDTO.getArea();
|
||||||
|
PositionMapDO positionMapDO = positionMap.get(mapKey);
|
||||||
|
if (ObjectUtil.isEmpty(positionMapDO)) {
|
||||||
|
log.info("------此机器人没有匹配到楼层和区域------ :{}", robot.getRobotNo());
|
||||||
|
}
|
||||||
|
RobotPositionMapDTO build = RobotPositionMapDTO.builder()
|
||||||
|
.actualLocationX(robotStatusDataPoseDTO.getX())
|
||||||
|
.actualLocationY(robotStatusDataPoseDTO.getY())
|
||||||
|
.robotNo(robot.getRobotNo())
|
||||||
|
.positionMapId(positionMapDO.getId())
|
||||||
|
.type(PositionMapItemEnum.STOP.getType())
|
||||||
|
.build();
|
||||||
|
list.add(build);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(list)) {
|
||||||
|
log.info("------没有需要移动到等待点的机器人------");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//在等待点的车
|
||||||
|
List<PositionMapItemDO> existItems = positionMapItemMapper.selectInWaitList(list);
|
||||||
|
if (ObjectUtil.isEmpty(existItems)) {
|
||||||
|
robotToWait(list, positionMapItems);
|
||||||
|
} else {
|
||||||
|
robotToWaitFilterWait(list, positionMapItems, existItems);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 派部分车去停车点
|
||||||
|
*
|
||||||
|
* @param list 车辆
|
||||||
|
* @param freePositionMapItems 空闲点位
|
||||||
|
* @param existItems 已经有车的点位
|
||||||
|
*/
|
||||||
|
private void robotToWaitFilterWait(List<RobotPositionMapDTO> list, List<PositionMapItemDO> freePositionMapItems,
|
||||||
|
List<PositionMapItemDO> existItems) {
|
||||||
|
Map<String, RobotPositionMapDTO> robotNoPositionMap =
|
||||||
|
list.stream().collect(Collectors.toMap(v -> v.getActualLocationX() + "_"
|
||||||
|
+ v.getActualLocationY() + "_" + v.getPositionMapId(), Function.identity()));
|
||||||
|
|
||||||
|
Map<String, PositionMapItemDO> existItemsMap =
|
||||||
|
existItems.stream().collect(Collectors.toMap(v -> v.getActualLocationX() + "_"
|
||||||
|
+ v.getActualLocationY() + "_" + v.getPositionMapId(), Function.identity()));
|
||||||
|
|
||||||
|
List<RobotPositionMapDTO> needMoveToWaitList = new ArrayList<>();
|
||||||
|
robotNoPositionMap.forEach((key, value) -> {
|
||||||
|
PositionMapItemDO positionMapItemDO = existItemsMap.get(key);
|
||||||
|
if (ObjectUtil.isEmpty(positionMapItemDO)) {
|
||||||
|
needMoveToWaitList.add(value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(needMoveToWaitList)) {
|
||||||
|
log.info("没有需要移动到等待点的车辆");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
robotToWait(needMoveToWaitList, freePositionMapItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 派车去停车点
|
||||||
|
*
|
||||||
|
* @param list
|
||||||
|
* @param positionMapItems
|
||||||
|
*/
|
||||||
|
private void robotToWait(List<RobotPositionMapDTO> list, List<PositionMapItemDO> positionMapItems) {
|
||||||
|
if (positionMapItems.size() < list.size()) {
|
||||||
|
log.info("空闲停车点少于车辆数量");
|
||||||
|
list = list.subList(0, positionMapItems.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> waitIds = positionMapItems
|
||||||
|
.stream()
|
||||||
|
.map(u -> u.getId() + "")
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
List<MoveToWaitDO> waits = list.stream()
|
||||||
|
.map(v -> {
|
||||||
|
MoveToWaitDO build = MoveToWaitDO.builder().robotNo(v.getRobotNo()).build();
|
||||||
|
return build;
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
moveToWaitMapper.insertBatch(waits);
|
||||||
|
|
||||||
|
List<TaskToPathPlanningDTO> pathPlanningList = new ArrayList<>();
|
||||||
|
for (MoveToWaitDO wait : waits) {
|
||||||
|
TaskToPathPlanningDTO pathPlanning = TaskToPathPlanningDTO.builder()
|
||||||
|
.orderId(String.valueOf(wait.getId()))
|
||||||
|
.orderType(PathTaskTypeEnum.MOVE_TO_WAIT.getType())
|
||||||
|
.priority(1l)
|
||||||
|
.createTime(LocalDateTime.now())
|
||||||
|
.taskType(PathTaskTypeToRobotEnum.MOVE.getType())
|
||||||
|
.build();
|
||||||
|
pathPlanningList.add(pathPlanning);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("派车去停车点--任务下发给PP :{}", JSON.toJSONString(pathPlanningList));
|
||||||
|
pathPlanningApi.synchronousLineObject(pathPlanningList, PathPlanningTopicConstant.TASK_ASSIGNMENT_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendChargeTaskToPP(List<RobotChargeLogDO> logs, List<RobotTaskDetailDO> taskDetailDOS,
|
public void sendChargeTaskToPP(List<RobotChargeLogDO> logs, List<RobotTaskDetailDO> taskDetailDOS,
|
||||||
List<RobotInformationDO> robots) {
|
List<RobotInformationDO> robots) {
|
||||||
@ -149,6 +265,9 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
Map<String, TaskRobotNoLimittationAreaDTO> robotNoLimittationAreaDTOMap =
|
Map<String, TaskRobotNoLimittationAreaDTO> robotNoLimittationAreaDTOMap =
|
||||||
robotNoLimitationArea.stream().collect(Collectors.toMap(v -> v.getRobotNo(), Function.identity()));
|
robotNoLimitationArea.stream().collect(Collectors.toMap(v -> v.getRobotNo(), Function.identity()));
|
||||||
|
|
||||||
|
Map<String, RobotInformationDO> robotMap =
|
||||||
|
robots.stream().collect(Collectors.toMap(v -> v.getRobotNo(), Function.identity()));
|
||||||
|
|
||||||
Map<Long, RobotTaskDetailDO> taskDetailMap =
|
Map<Long, RobotTaskDetailDO> taskDetailMap =
|
||||||
taskDetailDOS.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity()));
|
taskDetailDOS.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity()));
|
||||||
|
|
||||||
@ -165,7 +284,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
priority = taskDetailMap.get(v.getTaskDetailId()).getPriority();
|
priority = taskDetailMap.get(v.getTaskDetailId()).getPriority();
|
||||||
}
|
}
|
||||||
|
|
||||||
String orderType = ObjectUtil.isEmpty(v.getTaskDetailId()) ? PathTaskType.AUTO_CHARGE.getType():PathTaskType.CHARGE.getType();
|
String orderType = ObjectUtil.isEmpty(v.getTaskDetailId()) ? PathTaskTypeEnum.AUTO_CHARGE.getType() : PathTaskTypeEnum.CHARGE.getType();
|
||||||
TaskToPathPlanningDTO pathPlanning = TaskToPathPlanningDTO.builder()
|
TaskToPathPlanningDTO pathPlanning = TaskToPathPlanningDTO.builder()
|
||||||
.orderId(String.valueOf(v.getId()))
|
.orderId(String.valueOf(v.getId()))
|
||||||
.orderType(orderType)
|
.orderType(orderType)
|
||||||
@ -177,6 +296,11 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
List<TaskRobotNoLimittationAreaDTO> robotNoLimitions = Arrays.asList(taskRobotNoLimittationAreaDTO);
|
List<TaskRobotNoLimittationAreaDTO> robotNoLimitions = Arrays.asList(taskRobotNoLimittationAreaDTO);
|
||||||
pathPlanning.setRobotNoLimitationAreaDTOS(robotNoLimitions);
|
pathPlanning.setRobotNoLimitationAreaDTOS(robotNoLimitions);
|
||||||
|
|
||||||
|
RobotInformationDO robotInformationDO = robotMap.get(taskRobotNoLimittationAreaDTO.getRobotNo());
|
||||||
|
String taskType = ChargeTypeEnum.AUTOMATIC.getType().equals(robotInformationDO.getChargeType()) ?
|
||||||
|
PathTaskTypeToRobotEnum.AUTO_CHARGE.getType() : PathTaskTypeToRobotEnum.MANUAL_CHARGE.getType();
|
||||||
|
pathPlanning.setTaskType(taskType);
|
||||||
|
|
||||||
pathPlanning.setReleaseGroupId("POINT_" + v.getPositionMapItemId());
|
pathPlanning.setReleaseGroupId("POINT_" + v.getPositionMapItemId());
|
||||||
pathPlanning.setReleaseLocationNumber(releaseLocationNumberConfig);
|
pathPlanning.setReleaseLocationNumber(releaseLocationNumberConfig);
|
||||||
pathPlanning.setReleasePointId(v.getPositionMapItemId());
|
pathPlanning.setReleasePointId(v.getPositionMapItemId());
|
||||||
@ -221,10 +345,12 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
log.info("开始组装需要下发给PP的任务");
|
log.info("开始组装需要下发给PP的任务");
|
||||||
for (RobotTaskDetailDO taskDetailDO : taskDetailDOS) {
|
for (RobotTaskDetailDO taskDetailDO : taskDetailDOS) {
|
||||||
|
|
||||||
|
String taskType = PathTaskTypeToRobotEnum.taskDetailGetType(taskDetailDO.getTaskType());
|
||||||
TaskToPathPlanningDTO pathPlanning = TaskToPathPlanningDTO.builder()
|
TaskToPathPlanningDTO pathPlanning = TaskToPathPlanningDTO.builder()
|
||||||
.orderId(String.valueOf(taskDetailDO.getId()))
|
.orderId(String.valueOf(taskDetailDO.getId()))
|
||||||
.orderType(PathTaskType.getTaskType(taskDetailDO.getTaskType()))
|
.orderType(PathTaskTypeEnum.getTaskType(taskDetailDO.getTaskType()))
|
||||||
.priority(taskDetailDO.getPriority())
|
.priority(taskDetailDO.getPriority())
|
||||||
|
.taskType(taskType)
|
||||||
.createTime(taskDetailDO.getCreateTime())
|
.createTime(taskDetailDO.getCreateTime())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -251,7 +377,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
pathPlanning.setTakeGroupId("LINE_" + taskDetailDO.getFromLaneId());
|
pathPlanning.setTakeGroupId("LINE_" + taskDetailDO.getFromLaneId());
|
||||||
pathPlanning.setTakeLocationNumber(Math.abs(locationNumberReduce - taskDetailDO.getFromLocationNumber()));
|
pathPlanning.setTakeLocationNumber(Math.abs(locationNumberReduce - taskDetailDO.getFromLocationNumber()));
|
||||||
pathPlanning.setTakePointId(fromLocation.getMapItemId());
|
pathPlanning.setTakePointId(fromLocation.getMapItemId());
|
||||||
pathPlanning.setTakeHeight(Double.valueOf(fromLocation.getLocationTrayHeight()+""));
|
pathPlanning.setTakeHeight(Double.valueOf(fromLocation.getLocationTrayHeight() + ""));
|
||||||
pathPlanning.setTakeLevel(fromLocation.getLocationStorey());
|
pathPlanning.setTakeLevel(fromLocation.getLocationStorey());
|
||||||
pathPlanning.setTakeOffsetHeight(offsetHeight);
|
pathPlanning.setTakeOffsetHeight(offsetHeight);
|
||||||
|
|
||||||
@ -261,7 +387,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
pathPlanning.setTakeGroupId("POINT_" + taskDetailDO.getFromMapItemId());
|
pathPlanning.setTakeGroupId("POINT_" + taskDetailDO.getFromMapItemId());
|
||||||
pathPlanning.setTakeLocationNumber(Math.abs(locationNumberReduce - taskDetailDO.getFromLocationNumber()));
|
pathPlanning.setTakeLocationNumber(Math.abs(locationNumberReduce - taskDetailDO.getFromLocationNumber()));
|
||||||
pathPlanning.setTakePointId(fromLocation.getMapItemId());
|
pathPlanning.setTakePointId(fromLocation.getMapItemId());
|
||||||
pathPlanning.setTakeHeight(Double.valueOf(fromLocation.getLocationTrayHeight()+""));
|
pathPlanning.setTakeHeight(Double.valueOf(fromLocation.getLocationTrayHeight() + ""));
|
||||||
pathPlanning.setTakeLevel(fromLocation.getLocationStorey());
|
pathPlanning.setTakeLevel(fromLocation.getLocationStorey());
|
||||||
pathPlanning.setTakeOffsetHeight(offsetHeight);
|
pathPlanning.setTakeOffsetHeight(offsetHeight);
|
||||||
}
|
}
|
||||||
@ -273,7 +399,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
pathPlanning.setReleaseGroupId("LINE_" + taskDetailDO.getToLaneId());
|
pathPlanning.setReleaseGroupId("LINE_" + taskDetailDO.getToLaneId());
|
||||||
pathPlanning.setReleaseLocationNumber(taskDetailDO.getToLocationNumber());
|
pathPlanning.setReleaseLocationNumber(taskDetailDO.getToLocationNumber());
|
||||||
pathPlanning.setReleasePointId(toLocation.getMapItemId());
|
pathPlanning.setReleasePointId(toLocation.getMapItemId());
|
||||||
pathPlanning.setReleaseHeight(Double.valueOf(toLocation.getLocationTrayHeight()+""));
|
pathPlanning.setReleaseHeight(Double.valueOf(toLocation.getLocationTrayHeight() + ""));
|
||||||
pathPlanning.setReleaseLevel(toLocation.getLocationStorey());
|
pathPlanning.setReleaseLevel(toLocation.getLocationStorey());
|
||||||
pathPlanning.setReleaseOffsetHeight(offsetHeight);
|
pathPlanning.setReleaseOffsetHeight(offsetHeight);
|
||||||
|
|
||||||
@ -283,7 +409,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
pathPlanning.setReleaseGroupId("POINT_" + taskDetailDO.getToMapItemId());
|
pathPlanning.setReleaseGroupId("POINT_" + taskDetailDO.getToMapItemId());
|
||||||
pathPlanning.setReleaseLocationNumber(taskDetailDO.getToLocationNumber());
|
pathPlanning.setReleaseLocationNumber(taskDetailDO.getToLocationNumber());
|
||||||
pathPlanning.setReleasePointId(toLocation.getMapItemId());
|
pathPlanning.setReleasePointId(toLocation.getMapItemId());
|
||||||
pathPlanning.setReleaseHeight(Double.valueOf(toLocation.getLocationTrayHeight()+""));
|
pathPlanning.setReleaseHeight(Double.valueOf(toLocation.getLocationTrayHeight() + ""));
|
||||||
pathPlanning.setReleaseLevel(toLocation.getLocationStorey());
|
pathPlanning.setReleaseLevel(toLocation.getLocationStorey());
|
||||||
pathPlanning.setReleaseOffsetHeight(offsetHeight);
|
pathPlanning.setReleaseOffsetHeight(offsetHeight);
|
||||||
|
|
||||||
@ -560,12 +686,4 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.tool;
|
package cn.iocoder.yudao.module.system.service.tool;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
||||||
@ -9,4 +10,6 @@ public interface ToolsService {
|
|||||||
String cleanAgv( String agvNo);
|
String cleanAgv( String agvNo);
|
||||||
|
|
||||||
String closeTaskDetail(String taskDetailId);
|
String closeTaskDetail(String taskDetailId);
|
||||||
|
|
||||||
|
String updateWarnCode();
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,9 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@ -127,6 +129,25 @@ public class ToolsServiceImpl implements ToolsService {
|
|||||||
return "关闭任务成功";
|
return "关闭任务成功";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String updateWarnCode() {
|
||||||
|
List<RobotInformationDO> robots = robotInformationService.getAllRobot();
|
||||||
|
if (ObjectUtil.isEmpty(robots)){
|
||||||
|
return "暂无机器人";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (RobotInformationDO robot : robots) {
|
||||||
|
commonApi.commonMethodStr("请同步告警码值", RobotTopicConstant.UPDATE_ERROR_TOPIC+robot.getMacAddress());
|
||||||
|
try {
|
||||||
|
//怕车机同时间同步对内存有影响
|
||||||
|
Thread.sleep(500);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "同步完成";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void addWarnMsg() {
|
public void addWarnMsg() {
|
||||||
RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4)
|
RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4)
|
||||||
|
@ -11,9 +11,11 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
|||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
|
import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
|
||||||
import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
|
import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
|
||||||
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
|
import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
|
||||||
import cn.iocoder.yudao.module.infra.api.file.FileApi;
|
import cn.iocoder.yudao.module.infra.api.file.FileApi;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthRegisterReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthRegisterReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO;
|
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO;
|
||||||
@ -27,6 +29,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper;
|
|||||||
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
|
||||||
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
||||||
import cn.iocoder.yudao.module.system.service.dept.PostService;
|
import cn.iocoder.yudao.module.system.service.dept.PostService;
|
||||||
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
|
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
|
||||||
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
|
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
@ -85,6 +88,9 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
@Resource
|
@Resource
|
||||||
private ConfigApi configApi;
|
private ConfigApi configApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserOperationLogService userOperationLogService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@LogRecord(type = SYSTEM_USER_TYPE, subType = SYSTEM_USER_CREATE_SUB_TYPE, bizNo = "{{#user.id}}",
|
@LogRecord(type = SYSTEM_USER_TYPE, subType = SYSTEM_USER_CREATE_SUB_TYPE, bizNo = "{{#user.id}}",
|
||||||
@ -113,6 +119,11 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
|
|
||||||
// 3. 记录操作日志上下文
|
// 3. 记录操作日志上下文
|
||||||
LogRecordContext.putVariable("user", user);
|
LogRecordContext.putVariable("user", user);
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("新增用户 " + createReqVO.getUsername())
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
return user.getId();
|
return user.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,6 +166,11 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
// 3. 记录操作日志上下文
|
// 3. 记录操作日志上下文
|
||||||
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldUser, UserSaveReqVO.class));
|
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldUser, UserSaveReqVO.class));
|
||||||
LogRecordContext.putVariable("user", oldUser);
|
LogRecordContext.putVariable("user", oldUser);
|
||||||
|
|
||||||
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
|
.operateAction("编辑用户 " + updateReqVO.getUsername())
|
||||||
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateUserPost(UserSaveReqVO reqVO, AdminUserDO updateObj) {
|
private void updateUserPost(UserSaveReqVO reqVO, AdminUserDO updateObj) {
|
||||||
|
@ -217,18 +217,11 @@ justauth:
|
|||||||
map:
|
map:
|
||||||
file:
|
file:
|
||||||
upload-path: /Users/aikai/Documents/map/ # 地图文件上传路径
|
upload-path: /Users/aikai/Documents/map/ # 地图文件上传路径
|
||||||
|
warn-path: /Users/aikai/Documents/json/ # 告警码值上传路径
|
||||||
|
|
||||||
zn:
|
zn:
|
||||||
task-no: ZN #任务号开头
|
task-no: ZN #任务号开头
|
||||||
do_cycle: true #是否开启循环
|
do_cycle: true #是否开启循环
|
||||||
init_height: 0.0 #初始化高度
|
|
||||||
default_scan_height: 0.0 #默认的扫描高度,用于一层扫托盘
|
|
||||||
get_pallet_topic_height: 0.4 #获取托盘位置需要高于托盘的高度
|
|
||||||
default_add_height: 0.1 #默认的添加高度, 车机上报高度加上此高度 = 上一个点位的放托盘高度
|
|
||||||
take_fork_height: 0.1 #托盘高度+此高度=取货的抬叉高度
|
|
||||||
parm: 5000 #等待时间
|
|
||||||
lift_height: 0.1 #抬高托盘高度
|
|
||||||
move_height: 0.1 #行走高度
|
|
||||||
lane_auto_move: true #线库是否自动移库 true:线库执行自动移库 、false:线库关闭执行自动移库
|
lane_auto_move: true #线库是否自动移库 true:线库执行自动移库 、false:线库关闭执行自动移库
|
||||||
robot_position_cache_time: 10 #机器人上报点位存储时间(秒)
|
robot_position_cache_time: 10 #机器人上报点位存储时间(秒)
|
||||||
cycle_do_auto_move: true #存在循环的任务,是否开启自动移库. true:存在循环任务,开启自动移库; false:有循环任务不自动移库
|
cycle_do_auto_move: true #存在循环的任务,是否开启自动移库. true:存在循环任务,开启自动移库; false:有循环任务不自动移库
|
||||||
@ -236,15 +229,7 @@ zn:
|
|||||||
robot_error_level_time: 30 #机器人异常存储时间(秒)
|
robot_error_level_time: 30 #机器人异常存储时间(秒)
|
||||||
task_need_single: true #机器人对同一线库/点位是不是只能有一台机器人做任务 (true:一个点位/线库,只有一台机器人)
|
task_need_single: true #机器人对同一线库/点位是不是只能有一台机器人做任务 (true:一个点位/线库,只有一台机器人)
|
||||||
location_number_reduce: 100000000 #库位排序的差值(下发取货任务,将库位排序减去此值,然后取绝对值)
|
location_number_reduce: 100000000 #库位排序的差值(下发取货任务,将库位排序减去此值,然后取绝对值)
|
||||||
path_planning_distribute_task_time: 10 #10秒内不给PP发两次任务分配
|
|
||||||
robot_doing_action: # 机器人正在做的动作
|
robot_doing_action: # 机器人正在做的动作
|
||||||
doing_take_msg: 机器人正在取货
|
|
||||||
doing_release_msg: 机器人正在放货
|
|
||||||
complete_task: 机器人完成任务
|
|
||||||
get_pallet_topic: 机器人扫描托盘位置
|
|
||||||
scan: 机器人正在扫描
|
|
||||||
parking_space: 机器人正在前往停车位
|
|
||||||
charge: 机器人正在前往充电位
|
|
||||||
action_entity_cache_time: 172800 #机器人所有动作缓存时间 8小时
|
action_entity_cache_time: 172800 #机器人所有动作缓存时间 8小时
|
||||||
doing_action_cache_time: 172800 #单个动作缓存时间 8小时
|
doing_action_cache_time: 172800 #单个动作缓存时间 8小时
|
||||||
robot_chearg: #机器人充电的配置
|
robot_chearg: #机器人充电的配置
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
<result property="laneId" column="lane_id" jdbcType="INTEGER"/>
|
<result property="laneId" column="lane_id" jdbcType="INTEGER"/>
|
||||||
<result property="locationX" column="location_x" jdbcType="VARCHAR"/>
|
<result property="locationX" column="location_x" jdbcType="VARCHAR"/>
|
||||||
<result property="locationY" column="location_y" jdbcType="VARCHAR"/>
|
<result property="locationY" column="location_y" jdbcType="VARCHAR"/>
|
||||||
|
<result property="actualLocationX" column="actual_location_x" jdbcType="VARCHAR"/>
|
||||||
|
<result property="actualLocationY" column="actual_location_y" jdbcType="VARCHAR"/>
|
||||||
<result property="type" column="type" jdbcType="INTEGER"/>
|
<result property="type" column="type" jdbcType="INTEGER"/>
|
||||||
<result property="dataJson" column="data_json" jdbcType="VARCHAR"/>
|
<result property="dataJson" column="data_json" jdbcType="VARCHAR"/>
|
||||||
<result property="creator" column="creator" jdbcType="VARCHAR"/>
|
<result property="creator" column="creator" jdbcType="VARCHAR"/>
|
||||||
@ -33,6 +35,8 @@
|
|||||||
lane_id,
|
lane_id,
|
||||||
location_x,
|
location_x,
|
||||||
location_y,
|
location_y,
|
||||||
|
actual_location_x,
|
||||||
|
actual_location_y,
|
||||||
type,
|
type,
|
||||||
data_json,
|
data_json,
|
||||||
creator,
|
creator,
|
||||||
@ -43,117 +47,6 @@
|
|||||||
tenant_id
|
tenant_id
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<!--查询指定行数据-->
|
|
||||||
<select id="queryAllByLimit" resultMap="BaseResultMap">
|
|
||||||
select
|
|
||||||
id, position_map_id, area_id, lane_id, location_x, location_y, type, data_json, creator, create_time, updater,
|
|
||||||
update_time, deleted, tenant_id
|
|
||||||
from ware_position_map_item
|
|
||||||
<where>
|
|
||||||
<if test="id != null">
|
|
||||||
and id = #{id}
|
|
||||||
</if>
|
|
||||||
<if test="positionMapId != null">
|
|
||||||
and position_map_id = #{positionMapId}
|
|
||||||
</if>
|
|
||||||
<if test="areaId != null">
|
|
||||||
and area_id = #{areaId}
|
|
||||||
</if>
|
|
||||||
<if test="laneId != null">
|
|
||||||
and lane_id = #{laneId}
|
|
||||||
</if>
|
|
||||||
<if test="locationX != null and locationX != ''">
|
|
||||||
and location_x = #{locationX}
|
|
||||||
</if>
|
|
||||||
<if test="locationY != null and locationY != ''">
|
|
||||||
and location_y = #{locationY}
|
|
||||||
</if>
|
|
||||||
<if test="type != null">
|
|
||||||
and type = #{type}
|
|
||||||
</if>
|
|
||||||
<if test="dataJson != null and dataJson != ''">
|
|
||||||
and data_json = #{dataJson}
|
|
||||||
</if>
|
|
||||||
<if test="creator != null and creator != ''">
|
|
||||||
and creator = #{creator}
|
|
||||||
</if>
|
|
||||||
<if test="createTime != null">
|
|
||||||
and create_time = #{createTime}
|
|
||||||
</if>
|
|
||||||
<if test="updater != null and updater != ''">
|
|
||||||
and updater = #{updater}
|
|
||||||
</if>
|
|
||||||
<if test="updateTime != null">
|
|
||||||
and update_time = #{updateTime}
|
|
||||||
</if>
|
|
||||||
<if test="deleted != null">
|
|
||||||
and deleted = #{deleted}
|
|
||||||
</if>
|
|
||||||
<if test="tenantId != null">
|
|
||||||
and tenant_id = #{tenantId}
|
|
||||||
</if>
|
|
||||||
</where>
|
|
||||||
limit #{pageable.offset}, #{pageable.pageSize}
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<!--通过实体作为筛选条件查询-->
|
|
||||||
<select id="queryAll" resultMap="BaseResultMap">
|
|
||||||
select
|
|
||||||
id, position_map_id, area_id, lane_id, location_x, location_y, type, data_json, creator, create_time, updater,
|
|
||||||
update_time, deleted, tenant_id
|
|
||||||
from zn_wcs.ware_position_map_item
|
|
||||||
</select>
|
|
||||||
<!--统计总行数-->
|
|
||||||
<select id="count" resultType="java.lang.Long">
|
|
||||||
select count(1)
|
|
||||||
from ware_position_map_item
|
|
||||||
<where>
|
|
||||||
<if test="id != null">
|
|
||||||
and id = #{id}
|
|
||||||
</if>
|
|
||||||
<if test="positionMapId != null">
|
|
||||||
and position_map_id = #{positionMapId}
|
|
||||||
</if>
|
|
||||||
<if test="areaId != null">
|
|
||||||
and area_id = #{areaId}
|
|
||||||
</if>
|
|
||||||
<if test="laneId != null">
|
|
||||||
and lane_id = #{laneId}
|
|
||||||
</if>
|
|
||||||
<if test="locationX != null and locationX != ''">
|
|
||||||
and location_x = #{locationX}
|
|
||||||
</if>
|
|
||||||
<if test="locationY != null and locationY != ''">
|
|
||||||
and location_y = #{locationY}
|
|
||||||
</if>
|
|
||||||
<if test="type != null">
|
|
||||||
and type = #{type}
|
|
||||||
</if>
|
|
||||||
<if test="dataJson != null and dataJson != ''">
|
|
||||||
and data_json = #{dataJson}
|
|
||||||
</if>
|
|
||||||
<if test="creator != null and creator != ''">
|
|
||||||
and creator = #{creator}
|
|
||||||
</if>
|
|
||||||
<if test="createTime != null">
|
|
||||||
and create_time = #{createTime}
|
|
||||||
</if>
|
|
||||||
<if test="updater != null and updater != ''">
|
|
||||||
and updater = #{updater}
|
|
||||||
</if>
|
|
||||||
<if test="updateTime != null">
|
|
||||||
and update_time = #{updateTime}
|
|
||||||
</if>
|
|
||||||
<if test="deleted != null">
|
|
||||||
and deleted = #{deleted}
|
|
||||||
</if>
|
|
||||||
<if test="tenantId != null">
|
|
||||||
and tenant_id = #{tenantId}
|
|
||||||
</if>
|
|
||||||
</where>
|
|
||||||
</select>
|
|
||||||
|
|
||||||
|
|
||||||
<select id="selectByLocationId" resultType="cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds">
|
<select id="selectByLocationId" resultType="cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds">
|
||||||
select
|
select
|
||||||
t1.location_x as x,
|
t1.location_x as x,
|
||||||
@ -180,49 +73,30 @@
|
|||||||
and type in ('1','2')
|
and type in ('1','2')
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!--新增所有列-->
|
<select id="selectInWaitList"
|
||||||
<insert id="insertEntity" keyProperty="id" useGeneratedKeys="true">
|
resultType="cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO">
|
||||||
insert into ware_position_map_item(position_map_id, area_id, lane_id, location_x, location_y, type, data_json,
|
select
|
||||||
creator, create_time, updater, update_time, deleted, tenant_id)
|
<include refid="base_sql"></include>
|
||||||
values (#{positionMapId}, #{areaId}, #{laneId}, #{locationX}, #{locationY}, #{type}, #{dataJson}, #{creator},
|
from
|
||||||
#{createTime}, #{updater}, #{updateTime}, #{deleted}, #{tenantId})
|
ware_position_map_item
|
||||||
</insert>
|
where deleted = '0'
|
||||||
|
<foreach collection="list" item="item" index="index" open="(" close=")"
|
||||||
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
|
separator=",">
|
||||||
insert into ware_position_map_item(position_map_id, area_id, lane_id, location_x, location_y, type, data_json,
|
<if test="positionMapId != null">
|
||||||
creator, create_time, updater, update_time, deleted, tenant_id)
|
and position_map_id = #{positionMapId}
|
||||||
values
|
</if>
|
||||||
<foreach collection="entities" item="entity" separator=",">
|
<if test="actualLocationX != null and actualLocationX != ''">
|
||||||
(#{entity.positionMapId}, #{entity.areaId}, #{entity.laneId}, #{entity.locationX}, #{entity.locationY},
|
and actual_location_x = #{actualLocationX}
|
||||||
#{entity.type}, #{entity.dataJson}, #{entity.creator}, #{entity.createTime}, #{entity.updater},
|
</if>
|
||||||
#{entity.updateTime}, #{entity.deleted}, #{entity.tenantId})
|
<if test="actualLocationY != null and actualLocationY != ''">
|
||||||
|
and actual_location_y = #{actualLocationY},
|
||||||
|
</if>
|
||||||
|
<if test="type != null">
|
||||||
|
and type = #{type},
|
||||||
|
</if>
|
||||||
</foreach>
|
</foreach>
|
||||||
</insert>
|
</select>
|
||||||
|
|
||||||
<insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
|
|
||||||
insert into ware_position_map_item(position_map_id, area_id, lane_id, location_x, location_y, type, data_json,
|
|
||||||
creator, create_time, updater, update_time, deleted, tenant_id)
|
|
||||||
values
|
|
||||||
<foreach collection="entities" item="entity" separator=",">
|
|
||||||
(#{entity.positionMapId}, #{entity.areaId}, #{entity.laneId}, #{entity.locationX}, #{entity.locationY},
|
|
||||||
#{entity.type}, #{entity.dataJson}, #{entity.creator}, #{entity.createTime}, #{entity.updater},
|
|
||||||
#{entity.updateTime}, #{entity.deleted}, #{entity.tenantId})
|
|
||||||
</foreach>
|
|
||||||
on duplicate key update
|
|
||||||
position_map_id = values(position_map_id),
|
|
||||||
area_id = values(area_id),
|
|
||||||
lane_id = values(lane_id),
|
|
||||||
location_x = values(location_x),
|
|
||||||
location_y = values(location_y),
|
|
||||||
type = values(type),
|
|
||||||
data_json = values(data_json),
|
|
||||||
creator = values(creator),
|
|
||||||
create_time = values(create_time),
|
|
||||||
updater = values(updater),
|
|
||||||
update_time = values(update_time),
|
|
||||||
deleted = values(deleted),
|
|
||||||
tenant_id = values(tenant_id)
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
<!--通过主键修改数据-->
|
<!--通过主键修改数据-->
|
||||||
<update id="update">
|
<update id="update">
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.actionlog.RobotTaskDetailActionLogMapper">
|
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.log.RobotTaskDetailActionLogMapper">
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||||
|
@ -9,4 +9,16 @@
|
|||||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<select id="getAllWarnCodeList"
|
||||||
|
resultType="cn.iocoder.yudao.module.system.controller.admin.robot.warn.RobotWarnCodeMappingVO">
|
||||||
|
select
|
||||||
|
id,
|
||||||
|
warn_level as warnLevel,
|
||||||
|
do_task as doTask,
|
||||||
|
warn_code as warnCode,
|
||||||
|
warn_msg as warnMsg,
|
||||||
|
warn_solve as warnSolve
|
||||||
|
from
|
||||||
|
robot_warn_code_mapping
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
Loading…
Reference in New Issue
Block a user