From 01ce2f42262c011c6be3aa86658bf7e7f3f11547 Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Fri, 28 Mar 2025 10:51:19 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/file/FileController.java | 7 ++++- .../infra/service/file/FileService.java | 7 +++++ .../infra/service/file/FileServiceImpl.java | 29 ++++++++++++++++++- .../src/main/resources/application-local.yaml | 3 ++ .../api/robot/RobotTaskStatusApiImpl.java | 13 ++++----- .../log/RobotTaskDetailActionLogService.java | 7 +++++ .../RobotTaskDetailActionLogServiceImpl.java | 17 +++++++++++ 7 files changed, 73 insertions(+), 10 deletions(-) diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java index 0ff0e0c8c..a2f43178d 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java @@ -107,5 +107,10 @@ public class FileController { return success(fileService.createBusinessReturnFile(file)); } - + @PostMapping("/businessUploadFile") + @Operation(summary = "上传文件") + @PermitAll + public CommonResult businessUploadFile(@RequestParam("uploadFiles") MultipartFile file) throws Exception { + return success(fileService.businessUploadFile(file)); + } } diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java index 6df3709c2..267e76099 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileService.java @@ -74,4 +74,11 @@ public interface FileService { * @return */ BusinessFileVO createBusinessReturnFile(MultipartFile file) throws IOException; + + /** + * 上传文件 + * @param file + * @return + */ + BusinessFileVO businessUploadFile(MultipartFile file) throws IOException; } diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java index db53d7b17..38b0cfa24 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.infra.service.file; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.io.FileUtils; @@ -18,12 +19,16 @@ import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient; import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.FilePresignedUrlRespDTO; import cn.iocoder.yudao.module.infra.framework.file.core.utils.FileTypeUtils; import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import java.io.IOException; +import java.io.*; +import java.nio.file.Files; +import java.util.HashMap; +import java.util.UUID; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_NOT_EXISTS; @@ -42,6 +47,9 @@ public class FileServiceImpl implements FileService { @Resource private FileMapper fileMapper; + @Value("${file.upload-path}") + private String uploadPath; + @Override public PageResult getFilePage(FilePageReqVO pageReqVO) { return fileMapper.selectPage(pageReqVO); @@ -190,4 +198,23 @@ public class FileServiceImpl implements FileService { return fileDo; } + @Override + public BusinessFileVO businessUploadFile(MultipartFile file) throws IOException { + File files = new File(""); + String filePath = files.getCanonicalPath() + uploadPath; + String fileName = file.getOriginalFilename(); + fileName = UUID.randomUUID() + "_" + fileName; + File dir = new File(filePath); + if (!dir.exists()) { + dir.mkdirs(); + } + File fileObj = new File(filePath, fileName); + file.transferTo(fileObj); +// 把上传上来的文件存储到磁盘上:(指定一个路径) +// file.transferTo(uploadFile); + BusinessFileVO fileDo = new BusinessFileVO(); + fileDo.setUrl(filePath+fileName); + return fileDo; + } + } diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml index ec209fde2..44c53b733 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml @@ -157,3 +157,6 @@ yudao: mock-enable: true access-log: # 访问日志的配置项 enable: false + +file: + upload-path: /Users/Documents/image/ # 文件上传路径 \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java index fdf0bfdb9..2d8955e5c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java @@ -147,14 +147,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { */ public RobotTaskDetailActionLogDO setLastLogDone(String mac){ String robotNo = robotInformationService.getRobotNoByMac(mac); - RobotTaskDetailActionLogDO lastLog = taskDetailActionLogService.getLastTaskByRobotNo(robotNo); - if (ObjectUtil.isNotEmpty(lastLog)) { - lastLog.setEndTime(LocalDateTime.now()); - lastLog.setActionStatus(ActionStatusEnum.DONE.getType()); - RobotTaskDetailActionLogSaveReqVO updateObj = BeanUtils.toBean(lastLog, RobotTaskDetailActionLogSaveReqVO.class); - taskDetailActionLogService.updateTaskDetailActionLog(updateObj); - } - return lastLog; + return taskDetailActionLogService.setPreviousTaskDoneByRobotNo(robotNo); } /** @@ -172,6 +165,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { logOne.setRobotNo(robotNo); logOne.setStartTime(LocalDateTime.now()); logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId()); + if (ObjectUtil.isNotEmpty(lastLog)) { + logOne.setCommandType(lastLog.getCommandType()); + logOne.setTaskNo(lastLog.getTaskNo()); + } taskDetailActionLogMapper.insert(logOne); redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime); moveToWaitService.updateWaitStatus(robotCompleteTaskDTO.getOrderId(), WaitStatusEnum.GO_TO_WAIT.getType()); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogService.java index f23c87807..596a61c27 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogService.java @@ -58,6 +58,13 @@ public interface RobotTaskDetailActionLogService { */ void addLogInCache(List logs); + /** + * 设置上一条数据完成 + * @param robotNo + * @return + */ + RobotTaskDetailActionLogDO setPreviousTaskDoneByRobotNo(String robotNo); + /** * 获取车辆的最后一条任务 * @param robotNo diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogServiceImpl.java index fcee4164c..90a3c9f28 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.service.log; +import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant; import cn.iocoder.yudao.module.system.controller.admin.log.vo.RobotTaskDetailActionLogPageReqVO; @@ -8,6 +9,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLo import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO; import cn.iocoder.yudao.module.system.dal.mysql.log.RobotTaskDetailActionLogMapper; import cn.iocoder.yudao.module.system.enums.robot.RobotTaskStatusEnum; +import cn.iocoder.yudao.module.system.enums.robot.actionlog.ActionStatusEnum; import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import com.alibaba.fastjson.JSON; import org.springframework.beans.factory.annotation.Value; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; +import java.time.LocalDateTime; import java.util.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -94,6 +97,20 @@ public class RobotTaskDetailActionLogServiceImpl implements RobotTaskDetailActio } } + @Override + public RobotTaskDetailActionLogDO setPreviousTaskDoneByRobotNo(String robotNo) { + RobotTaskDetailActionLogDO lastLog = taskDetailActionLogMapper.selectOne(new LambdaQueryWrapperX() + .eq(RobotTaskDetailActionLogDO::getRobotNo, robotNo) + .orderByDesc(RobotTaskDetailActionLogDO::getCreateTime) + .last("limit 1")); + if (ObjectUtil.isNotEmpty(lastLog)) { + lastLog.setEndTime(LocalDateTime.now()); + lastLog.setActionStatus(ActionStatusEnum.DONE.getType()); + taskDetailActionLogMapper.selectById(lastLog); + } + return lastLog; + } + @Override public RobotTaskDetailActionLogDO getLastTaskByRobotNo(String robotNo) { return taskDetailActionLogMapper.selectOne(new LambdaQueryWrapperX() From 28142919c86243054c095ab655c44efbbfb6b8ee Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Fri, 28 Mar 2025 15:59:30 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=84=E7=90=86?= =?UTF-8?q?=E4=B8=AD=E4=BB=BB=E5=8A=A1=E7=9A=84=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/enums/ErrorCodeConstants.java | 3 +- .../api/robot/RobotTaskStatusApiImpl.java | 21 ++++++---- .../PositionMapItemController.java | 6 +++ .../log/RobotTaskDetailActionLogMapper.java | 5 ++- .../mysql/robot/RobotTaskDetailMapper.java | 7 ++++ .../dal/mysql/robot/RobotTaskMapper.java | 7 ++++ .../robot/actionlog/ActionStatusEnum.java | 4 +- .../strategy/HouseLocationStrategyImpl.java | 42 ++++++++++++++++++- .../log/RobotTaskDetailActionLogService.java | 2 +- .../RobotTaskDetailActionLogServiceImpl.java | 4 +- .../robot/RobotInformationServiceImpl.java | 12 +++++- .../service/robot/RobotTaskDetailService.java | 7 ++++ .../robot/RobotTaskDetailServiceImpl.java | 6 +++ .../service/robot/RobotTaskServiceImpl.java | 19 +++++++-- .../robot/RobotTaskDetailActionLogMapper.xml | 3 +- .../mapper/robot/RobotTaskDetailMapper.xml | 25 ++++++++++- .../mapper/robot/RobotTaskMapper.xml | 16 +++++++ 17 files changed, 164 insertions(+), 25 deletions(-) diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index aff778d88..57dcc273c 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -178,7 +178,7 @@ public interface ErrorCodeConstants { // ========== 库位 1-002-032-000 ========== ErrorCode HOUSE_LOCATION_NOT_EXISTS = new ErrorCode(1-002-032-001, "库位不存在"); - ErrorCode HOUSE_LOCATION_NO_EXIST = new ErrorCode(1-002-032-002, "库位编号重复"); + ErrorCode HOUSE_LOCATION_HAVE_TASK = new ErrorCode(1-002-032-002, "库位存在处理中的任务"); // ========== 车辆类型 1-002-033-000========== ErrorCode MODEL_NOT_EXISTS = new ErrorCode(1-002-033-001, "车辆类型不存在"); @@ -191,6 +191,7 @@ public interface ErrorCodeConstants { ErrorCode ROBOT_LAST_TASK_DELETE = new ErrorCode(1-002-034-005, "超过限制的时间,无法继续执行前一个任务"); ErrorCode ROBOT_NOT_FOUND_WAIT_ITEM = new ErrorCode(1-002-034-006, "没有空闲的停车点"); ErrorCode ROBOT_NOT_FOUND_FREE_CHARGING_STATION = new ErrorCode(1-002-034-007, "没有空闲的充电桩"); + ErrorCode ROBOT_HAVE_DOING_TASK = new ErrorCode(1-002-034-010, "车辆有处理中的任务"); // ========== 机器人任务主表 1-002-035-000 ========== ErrorCode TASK_NOT_EXISTS = new ErrorCode(1-002-035-001, "机器人任务主表不存在"); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java index 2d8955e5c..51bbe723d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/robot/RobotTaskStatusApiImpl.java @@ -142,10 +142,11 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { /** * 上一条明细设置为完成 + * * @param mac * @return */ - public RobotTaskDetailActionLogDO setLastLogDone(String mac){ + public RobotTaskDetailActionLogDO setLastLogDone(String mac) { String robotNo = robotInformationService.getRobotNoByMac(mac); return taskDetailActionLogService.setPreviousTaskDoneByRobotNo(robotNo); } @@ -158,7 +159,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { RobotTaskDetailActionLogDO lastLog = setLastLogDone(robotCompleteTaskDTO.getMac()); if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) { - chargeDoing(robotCompleteTaskDTO, robotDoingActionKey,lastLog); + chargeDoing(robotCompleteTaskDTO, robotDoingActionKey, lastLog); } else if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType())) { RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); logOne.setActionMsg("车辆正在前往等待点"); @@ -178,10 +179,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { if ((PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType()) || PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) - && ObjectUtil.isNotEmpty(robotCompleteTaskDTO.getCommandStatus()) - && CommandTypeEnum.MOVE_POSES.getType().equals(robotCompleteTaskDTO.getCommandStatus().getCommandType()) - && RobotExecutionStateConstant.DONE.equals(robotCompleteTaskDTO.getCommandStatus().getExecutionState())) { - log.info("充电任务准备让充电设备自动伸出 :{}",robotCompleteTaskDTO.getOrderId()); + && ObjectUtil.isNotEmpty(robotCompleteTaskDTO.getCommandStatus()) + && CommandTypeEnum.MOVE_POSES.getType().equals(robotCompleteTaskDTO.getCommandStatus().getCommandType()) + && RobotExecutionStateConstant.DONE.equals(robotCompleteTaskDTO.getCommandStatus().getExecutionState())) { + log.info("充电任务准备让充电设备自动伸出 :{}", robotCompleteTaskDTO.getOrderId()); RobotChargeLogDO robotChargeLog = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId()); deviceInformationService.chargeDeviceExtend(robotChargeLog.getDeviceNo()); } @@ -189,7 +190,8 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { sendStartDoActionToPP(robotCompleteTaskDTO.getCommandStatus(), robotCompleteTaskDTO.getMac(), String.valueOf(robotCompleteTaskDTO.getOrderId())); - taskDetailActionLogMapper.updateActionStatus(robotCompleteTaskDTO.getOrderId(), ActionStatusEnum.DOING.getType()); + taskDetailActionLogMapper.updateActionStatus(robotCompleteTaskDTO.getOrderId(), ActionStatusEnum.DOING.getType() + , null); } /** @@ -241,7 +243,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { .build(); chargeLogMapper.updateById(build); } - taskDetailActionLogMapper.updateActionStatus(robotCompleteTaskDTO.getOrderId(), ActionStatusEnum.DONE.getType()); + taskDetailActionLogMapper.updateActionStatus(robotCompleteTaskDTO.getOrderId(), ActionStatusEnum.DONE.getType(), LocalDateTime.now()); } @@ -326,7 +328,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { * * @param robotCompleteTaskDTO */ - private void chargeDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey,RobotTaskDetailActionLogDO lastLog) { + private void chargeDoing(RobotCompleteTaskDTO robotCompleteTaskDTO, String robotDoingActionKey, RobotTaskDetailActionLogDO lastLog) { RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO(); RobotCommandStateDTO commandStatus = robotCompleteTaskDTO.getCommandStatus(); Integer taskStatus = ChargeTaskStatusEnum.CHARGEING.getType(); @@ -476,6 +478,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi { logOne.setTaskStage(robotTaskDetailDO.getTaskStage()); logOne.setCommandType(PathTaskTypeEnum.getTaskType(robotTaskDetailDO.getTaskType())); logOne.setTaskNo(robotTask.getTaskNo()); + logOne.setActionStatus(ActionStatusEnum.DOING.getType()); logOne.setStartTime(LocalDateTime.now()); taskDetailActionLogMapper.insert(logOne); redisUtil.set(robotDoingActionKey, logOne.getActionMsg(), doingActionCacheTime); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java index 4d3e4c0e3..389f7a7ea 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.system.api.path.PathApi; 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.vo.PositionMapItemRespVO; @@ -48,6 +49,9 @@ public class PositionMapItemController { @Resource private UserOperationLogService userOperationLogService; + @Resource + private PathApi pathApi; + // -- 前端给所有的节点信息 - @PostMapping("/batchSaveOrEditOrDel") @Operation(summary = "批量新增编辑删除节点") @@ -71,6 +75,8 @@ public class PositionMapItemController { .nickName(SecurityFrameworkUtils.getLoginUserNickname()).build(); userOperationLogService.createUserOperationLog(operationLog); + pathApi.pathInitData(); + return success(true); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/log/RobotTaskDetailActionLogMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/log/RobotTaskDetailActionLogMapper.java index deac22f1f..284033a9d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/log/RobotTaskDetailActionLogMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/log/RobotTaskDetailActionLogMapper.java @@ -8,6 +8,8 @@ import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLo import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.time.LocalDateTime; + /** * 车辆动作记录 Mapper * @@ -36,5 +38,6 @@ public interface RobotTaskDetailActionLogMapper extends BaseMapperX { * @param ids */ void updateDoneByIds(@Param("ids") List ids); + + /** + * 查询此库位处理中的任务 + * @param ids + * @return + */ + List getDoingTaskDetailByLocationIds(@Param("ids") List ids); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskMapper.java index b195f3e89..565fd9e22 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskMapper.java @@ -79,4 +79,11 @@ public interface RobotTaskMapper extends BaseMapperX { * @param ids */ void updateDoneByIds(@Param("ids") List ids); + + /** + * 查询车辆当前在做的任务 + * @param robotNo + * @return + */ + List selectDoingTaskByRobotNo(@Param("robotNo") String robotNo); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/actionlog/ActionStatusEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/actionlog/ActionStatusEnum.java index 38c393455..1824a6c58 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/actionlog/ActionStatusEnum.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/actionlog/ActionStatusEnum.java @@ -9,7 +9,9 @@ public enum ActionStatusEnum { UN_DO(0,"未开始"), DOING(1,"正在进行"), - DONE(2,"完成"); + DONE(2,"完成"), + CLOSE(3,"已取消"), + EXCEPTION(4,"异常"); /** * 类型 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java index c5bfa7541..24f950bcf 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java @@ -8,8 +8,11 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationRespVO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO; import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; +import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO; import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService; +import cn.iocoder.yudao.module.system.service.robot.RobotTaskDetailService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -18,15 +21,21 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import static cn.hutool.core.collection.CollUtil.isNotEmpty; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.HOUSE_LOCATION_NO_EXIST; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TASK_DETAIL_CHANGE_ROBOT; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static com.baomidou.mybatisplus.core.toolkit.IdWorker.getId; @Slf4j @Component public class HouseLocationStrategyImpl implements NodeProcessingStrategy { @Resource private HouseLocationService houseLocationService; + + @Resource + private RobotTaskDetailService taskDetailService; + //库位编号格式 - 第一个通配符为地图id 第二个通配符为随机数四位最后一个通配符为库位点层数 private static final String KW_NO_FORMAT = "KW-%s-%s-%s"; @@ -83,6 +92,35 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy { List oldList = houseLocationService.getByMapId(positionMapId); List> list = CollectionUtils.compareLists(oldList, newList, (oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId())); + + if (isNotEmpty(list.get(2))) { + checkLocationHaveDoingTask(list); + } + houseLocationService.batchSaveOrEditOrDel(positionMapId, list); } + + /** + * 校验要删除的库位是否有处理中的任务 + * @param list + */ + public void checkLocationHaveDoingTask(List> list) { + List ids = convertList(list.get(2), WareHouseLocationDO::getId); + List details = taskDetailService.getDoingTaskDetailByLocationIds(ids); + if (ObjectUtil.isNotEmpty(details)) { + List locationNos = new ArrayList<>(); + for (RobotTaskDetailDO detail : details) { + if (ObjectUtil.isNotEmpty(detail.getFromLocationId()) && ids.contains(detail.getFromLocationId())) { + locationNos.add(detail.getFromLocationNo()); + continue; + } + if (ObjectUtil.isNotEmpty(detail.getToLocationId()) && ids.contains(detail.getToLocationId())) { + locationNos.add(detail.getToLocationNo()); + } + } + + String join = StringUtils.join(locationNos, ","); + throw exception0(HOUSE_LOCATION_HAVE_TASK.getCode(), "以下库位存在处理中的任务:"+join,join); + } + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogService.java index 596a61c27..5737fd567 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogService.java @@ -59,7 +59,7 @@ public interface RobotTaskDetailActionLogService { void addLogInCache(List logs); /** - * 设置上一条数据完成 + * 设置上一条数据完成(非主任务) * @param robotNo * @return */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogServiceImpl.java index 90a3c9f28..f6754f538 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/log/RobotTaskDetailActionLogServiceImpl.java @@ -103,10 +103,10 @@ public class RobotTaskDetailActionLogServiceImpl implements RobotTaskDetailActio .eq(RobotTaskDetailActionLogDO::getRobotNo, robotNo) .orderByDesc(RobotTaskDetailActionLogDO::getCreateTime) .last("limit 1")); - if (ObjectUtil.isNotEmpty(lastLog)) { + if (ObjectUtil.isNotEmpty(lastLog) && ObjectUtil.isEmpty(lastLog.getCommandId())) { lastLog.setEndTime(LocalDateTime.now()); lastLog.setActionStatus(ActionStatusEnum.DONE.getType()); - taskDetailActionLogMapper.selectById(lastLog); + taskDetailActionLogMapper.updateById(lastLog); } return lastLog; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java index a2de04f06..ba2d466ec 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotInformationServiceImpl.java @@ -258,14 +258,22 @@ public class RobotInformationServiceImpl extends ServiceImpl list = taskMapper.selectDoingTaskByRobotNo(robotInformationDO.getRobotNo()); + + if (ObjectUtil.isNotEmpty(list)) { + throw exception(ROBOT_HAVE_DOING_TASK); + } + UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder() .operateAction("删除车辆 " + robotInformationDO.getRobotNo()) .nickName(SecurityFrameworkUtils.getLoginUserNickname()).build(); userOperationLogService.createUserOperationLog(operationLog); - // 校验存在 - validateInformationExists(id); // 删除 informationMapper.deleteById(id); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailService.java index a8f6ee716..e28d5e497 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailService.java @@ -73,4 +73,11 @@ public interface RobotTaskDetailService { * @return */ void manuallyCompleted(Long id); + + /** + * 查询此库位处理中的任务 + * @param ids 库位id + * @return + */ + List getDoingTaskDetailByLocationIds(List ids); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailServiceImpl.java index 4e004801c..2ba59d275 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskDetailServiceImpl.java @@ -26,6 +26,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import java.util.Collections; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -152,4 +153,9 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService { String mac = informationService.getMacByRobotNo(robotTaskDetailDO.getRobotNo()); informationService.robotCloseTaskDetail(String.valueOf(taskDetailId),mac,""); } + + @Override + public List getDoingTaskDetailByLocationIds(List ids) { + return taskDetailMapper.getDoingTaskDetailByLocationIds(ids); + } } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java index aa5d275da..d53d71548 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.service.robot; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -239,7 +240,7 @@ public class RobotTaskServiceImpl extends ServiceImpl deviceNoMap, + public RobotTaskDO setTaskDoing(Long detailId, String robotNo, Map deviceNoMap, String waitId) { RobotTaskDetailDO taskDetailDO = taskDetailMapper.selectById(detailId); taskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType()); @@ -643,7 +654,7 @@ public class RobotTaskServiceImpl extends ServiceImpl - + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml index 9aa0d0c8b..01cb3707c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/robot/RobotTaskMapper.xml @@ -328,6 +328,22 @@ order by t1.create_time desc + + From f7eaf384ca73d9701b90b5fb8d51910ec93479c0 Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Fri, 28 Mar 2025 17:12:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=BC=96=E8=BE=91=E7=BA=BF=E5=BA=93?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BA=93=E4=BD=8D=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../houselocation/WareHouseLocationMapper.java | 14 ++++++++++++++ .../houselane/WareHouseLaneServiceImpl.java | 2 ++ .../houselocation/HouseLocationService.java | 14 ++++++++++++++ .../HouseLocationServiceImpl.java | 10 ++++++++++ .../houselocation/WareHouseLocationMapper.xml | 18 ++++++++++++++++++ 5 files changed, 58 insertions(+) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java index 8bef99d7d..0d1fec253 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java @@ -122,4 +122,18 @@ public interface WareHouseLocationMapper extends BaseMapperX locationIds, @Param("taskId") Long taskId, @Param("locationLock") Integer locationLock); + + /** + * 更新线库名称 + * @param laneId + * @param laneName + */ + void updateLocationLaneNameByLaneId(@Param("laneId") Long laneId, + @Param("laneName") String laneName); + + /** + * 设置库位的线库id和名称为空 + * @param laneId + */ + void updateLocationLaneNameEmptyByLaneId(@Param("laneId") Long laneId); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneServiceImpl.java index c277ed7ef..cf189a090 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselane/WareHouseLaneServiceImpl.java @@ -151,6 +151,7 @@ public class WareHouseLaneServiceImpl extends ServiceImpl { * @return */ List getLocationByLocationNumbers(List locationNumbers); + + /** + * 更新线库名称 + * @param laneId + * @param laneName + */ + void updateLocationLaneNameByLaneId(Long laneId, String laneName); + + /** + * 设置线库名称和id为空 + * @param id + */ + void updateLocationLaneNameEmptyByLaneId(Long laneId); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java index 1341993c2..206a7fa2a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java @@ -143,6 +143,16 @@ public class HouseLocationServiceImpl extends ServiceImpl> list) { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml index 4504c5f69..2e3d2ffd6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml @@ -506,6 +506,24 @@ #{id} + + update + ware_house_location + set + lane_name = #{laneName} + where + lane_id = #{laneId} + + + + update + ware_house_location + set + lane_name = null, + lane_id = null + where + lane_id = #{laneId} +