From ed8b688cf8f6054fa1ce83f4031bcb8f897ecafc Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Tue, 18 Aug 2026 18:27:14 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=AD=90=E5=8D=B7=E8=B4=A8?= =?UTF-8?q?=E6=A3=80=E5=90=88=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/lms/enums/ErrorCodeConstants.java | 5 + .../nl/module/lms/enums/LockKeyConstants.java | 12 + .../module/lms/enums/PackageTaskTypeEnum.java | 1 + .../controller/pda/PackagePdaController.java | 24 +- ...qVO.java => ManaQualityCheckPdaReqVO.java} | 6 +- .../pda/vo/PackagePointPdaRespVO.java | 52 +++++ .../pda/vo/QueryPackagePointInfoReqVO.java | 16 ++ .../SlittingproductionplanMapper.java | 9 + .../packagepoint/PackagePdaService.java | 12 +- .../packagepoint/PackagePdaServiceImpl.java | 214 +++++++++++++++++- .../tasks/box/ReCheckQualifiedAgvTask.java | 94 ++++++++ .../SlittingproductionplanMapper.xml | 20 +- .../nl/module/task/api/TransportTaskApi.java | 9 + .../module/task/api/TransportTaskApiImpl.java | 11 + .../transporttask/TransportTaskMapper.java | 8 + .../transporttask/TransportTaskService.java | 8 + .../TransportTaskServiceImpl.java | 12 + .../transporttask/TransportTaskMapper.xml | 16 ++ 18 files changed, 501 insertions(+), 28 deletions(-) create mode 100644 nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/LockKeyConstants.java rename nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/{ManaQualityCheckReqVO.java => ManaQualityCheckPdaReqVO.java} (71%) create mode 100644 nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/PackagePointPdaRespVO.java create mode 100644 nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/QueryPackagePointInfoReqVO.java create mode 100644 nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/tasks/box/ReCheckQualifiedAgvTask.java diff --git a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/ErrorCodeConstants.java b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/ErrorCodeConstants.java index 4b768e1a..76dfc98a 100644 --- a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/ErrorCodeConstants.java +++ b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/ErrorCodeConstants.java @@ -54,6 +54,11 @@ public interface ErrorCodeConstants { ErrorCode PACKAGE_POINT_NOT_EXISTS = new ErrorCode(200001, "装箱区点位库存不存在"); ErrorCode PACKAGE_POINT_TASK_QUERY_FAILED = new ErrorCode(200002, "查询点位关联任务失败,请稍后重试"); ErrorCode PACKAGE_POINT_HAS_UNFINISHED_TASK = new ErrorCode(200003, "选中点位存在未完成任务,无法解锁"); + ErrorCode PACKAGE_POINT_TYPE_NOT_SUPPORTED = new ErrorCode(200004, "当前点位不支持质检合格操作"); + ErrorCode PACKAGE_POINT_LOCK_FAILED = new ErrorCode(200005, "当前点位已被占用,请稍后重试"); + ErrorCode PACKAGE_POINT_INSPECTION_PENDING_EMPTY_NOT_EXISTS = new ErrorCode(200006, "没有可用的待检空位"); + ErrorCode PACKAGE_POINT_QUALITY_TASK_CREATE_FAILED = new ErrorCode(200007, "创建质检合格AGV任务失败"); + ErrorCode POINT_EXECUTE_REFUGE = new ErrorCode(200008, "{}的点位不允许操作{}"); // ========== 子卷包装关系 ========== ErrorCode SUB_PACKAGE_RELATION_NOT_EXISTS = new ErrorCode(300001, "子卷包装关系不存在"); diff --git a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/LockKeyConstants.java b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/LockKeyConstants.java new file mode 100644 index 00000000..7a4141cf --- /dev/null +++ b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/LockKeyConstants.java @@ -0,0 +1,12 @@ +package cn.code.nl.module.lms.enums; + +/** + * 全局锁的key 或 前缀 + * @Author: liyongde + * @Date: 2026/8/18 17:33 + */ +public interface LockKeyConstants { + + /** 人工质检锁 */ + String MANUAL_QUALITY_CHECK_LOCK_KEY = "lock:pda:manual-quality-check"; +} \ No newline at end of file diff --git a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/PackageTaskTypeEnum.java b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/PackageTaskTypeEnum.java index 000f2e66..85849516 100644 --- a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/PackageTaskTypeEnum.java +++ b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/PackageTaskTypeEnum.java @@ -13,6 +13,7 @@ public enum PackageTaskTypeEnum { SUB_ROLL_CALL_EMPTY_AGV("010602", "子卷下线补空架AGV任务"), PACKAGE_AGV("010603", "装箱AGV任务"), PACKAGE_BOX_TRUSS("010604", "子卷装箱桁架任务"), + RE_CHECK_QUALIFIED_AGV("010605", "复检合格AGV任务"), ; /** * 字典键值 diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/PackagePdaController.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/PackagePdaController.java index 97d1f90a..1e638599 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/PackagePdaController.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/PackagePdaController.java @@ -1,9 +1,9 @@ package cn.code.nl.module.lms.controller.pda; import cn.code.nl.framework.common.pojo.CommonResult; -import cn.code.nl.module.lms.controller.admin.packagepoint.vo.PackagePointRespVO; -import cn.code.nl.module.lms.controller.pda.vo.ManaQualityCheckReqVO; -import cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO; +import cn.code.nl.module.lms.controller.pda.vo.ManaQualityCheckPdaReqVO; +import cn.code.nl.module.lms.controller.pda.vo.PackagePointPdaRespVO; +import cn.code.nl.module.lms.controller.pda.vo.QueryPackagePointInfoReqVO; import cn.code.nl.module.lms.service.packagepoint.PackagePdaService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -36,20 +36,16 @@ public class PackagePdaController { /** * 根据点位编码查询装箱区点位信息 * - * @param manaQualityCheckReqVO 查询参数 + * @param manaQualityCheckPdaReqVO 查询参数 * @return 点位编码、子卷号和载具号 */ @PostMapping("/query-point-info") @Operation(summary = "查询点位信息") @PermitAll - public CommonResult queryPointInfo( - @Valid @RequestBody ManaQualityCheckReqVO manaQualityCheckReqVO) { - PackagePointDO packagePoint = packagePdaService.queryPointInfo(manaQualityCheckReqVO.getPointCode()); - PackagePointRespVO response = new PackagePointRespVO(); - response.setPointCode(packagePoint.getPointCode()); - response.setContainerName(packagePoint.getContainerName()); - response.setVehicleCode(packagePoint.getVehicleCode()); - return success(response); + public CommonResult queryPointInfo( + @Valid @RequestBody QueryPackagePointInfoReqVO queryPackagePointInfoReqVO) { + PackagePointPdaRespVO packagePoint = packagePdaService.queryPointInfo(queryPackagePointInfoReqVO.getPointCode()); + return success(packagePoint); } @@ -57,8 +53,8 @@ public class PackagePdaController { @PostMapping("/quality-check") @Operation(summary = "人工质检") @PermitAll - public CommonResult executeManualQualityCheck(@Valid @RequestBody ManaQualityCheckReqVO manaQualityCheckReqVO) { -// packagePdaService.executeManualQualityCheck(manaQualityCheckReqVO) + public CommonResult executeManualQualityCheck(@Valid @RequestBody ManaQualityCheckPdaReqVO manaQualityCheckPdaReqVO) { + packagePdaService.executeManualQualityCheck(manaQualityCheckPdaReqVO); return success("操作成功!"); } diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/ManaQualityCheckReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/ManaQualityCheckPdaReqVO.java similarity index 71% rename from nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/ManaQualityCheckReqVO.java rename to nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/ManaQualityCheckPdaReqVO.java index 76c0ee8b..abf2862f 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/ManaQualityCheckReqVO.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/ManaQualityCheckPdaReqVO.java @@ -1,6 +1,7 @@ package cn.code.nl.module.lms.controller.pda.vo; import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import lombok.Data; /** @@ -9,18 +10,19 @@ import lombok.Data; * @Date: 2026/8/13 19:06 */ @Data -public class ManaQualityCheckReqVO { +public class ManaQualityCheckPdaReqVO { /** 点位编码 */ @NotEmpty(message = "点位编码不能为空") private String pointCode; - /** 子卷号 */ + /** 子卷号:可能是ERP子卷号 */ private String containerName; /** 架子号 */ private String vehicleCode; /** 是否合格 */ + @NotNull(message = "质检结果不能为空") private Boolean isQualified; } diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/PackagePointPdaRespVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/PackagePointPdaRespVO.java new file mode 100644 index 00000000..969c1144 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/PackagePointPdaRespVO.java @@ -0,0 +1,52 @@ +package cn.code.nl.module.lms.controller.pda.vo; + +import lombok.Data; + +/** + * pda装箱点位信息实体 + * @Author: liyongde + * @Date: 2026/8/18 17:10 + */ +@Data +public class PackagePointPdaRespVO { + /** + * 子卷号 + */ + private String containerName; + /** + * erp卷号 + */ + private String erpContainerName; + /** + * 锁定状态 + */ + private String lockStatus; + /** + * 点位编码 + */ + private String pointCode; + /** + * 点位状态 + */ + private String pointStatus; + /** + * 点位类型 + */ + private String pointType; + /** + * 子卷重量 + */ + private String subWeight; + /** + * 任务号 + */ + private String taskCode; + /** + * 管芯重量 + */ + private String tubeWeight; + /** + * 架子号 + */ + private String vehicleCode; +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/QueryPackagePointInfoReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/QueryPackagePointInfoReqVO.java new file mode 100644 index 00000000..ea23e8a3 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/QueryPackagePointInfoReqVO.java @@ -0,0 +1,16 @@ +package cn.code.nl.module.lms.controller.pda.vo; + +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +/** + * + * @Author: liyongde + * @Date: 2026/8/18 17:41 + */ +@Data +public class QueryPackagePointInfoReqVO { + /** 点位编码 */ + @NotEmpty(message = "点位编码不能为空") + private String pointCode; +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/slittingproductionplan/SlittingproductionplanMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/slittingproductionplan/SlittingproductionplanMapper.java index 8ccd00e8..59a2afe5 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/slittingproductionplan/SlittingproductionplanMapper.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/slittingproductionplan/SlittingproductionplanMapper.java @@ -9,6 +9,7 @@ import cn.code.nl.module.lms.controller.pda.slittingproduction.dto.SlittingDownD import cn.code.nl.module.lms.dal.dataobject.slittingproductionplan.SlittingproductionplanDO; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import cn.code.nl.module.lms.controller.admin.slittingproductionplan.vo.*; /** @@ -38,5 +39,13 @@ public interface SlittingproductionplanMapper extends BaseMapperX taskResult = transportTaskApi.getFirstUnfinishedTaskByPointCode(pointCode); + if (taskResult.isError()) { + log.error("查询点位未完成任务失败,pointCode={},返回={}", pointCode, taskResult); + throw exception(PACKAGE_POINT_TASK_QUERY_FAILED); + } + + // 组装点位和任务信息 + PackagePointPdaRespVO response = new PackagePointPdaRespVO(); + response.setPointCode(packagePoint.getPointCode()); + response.setPointStatus(packagePoint.getPointStatus()); + response.setPointType(packagePoint.getPointType()); + response.setLockStatus(packagePoint.getLockStatus()); + response.setVehicleCode(packagePoint.getVehicleCode()); + response.setTaskCode(taskResult.getData() == null ? NO_TASK : taskResult.getData().getTaskCode()); + response.setSubWeight(NO_WEIGHT_INFO); + response.setTubeWeight(NO_WEIGHT_INFO); + + // 点位没有子卷号时直接返回无子卷信息 + if (StrUtil.isBlank(packagePoint.getContainerName())) { + response.setContainerName(NO_CONTAINER_INFO); + response.setErpContainerName(NO_CONTAINER_INFO); + return response; + } + + // 根据子卷号或 ERP 子卷号查询分切生产计划 + SlittingproductionplanDO slittingPlan = slittingproductionplanMapper + .selectByContainerName(packagePoint.getContainerName()); + if (slittingPlan == null) { + response.setContainerName(packagePoint.getContainerName()); + response.setErpContainerName(UNBOUND_CONTAINER_INFO); + return response; + } + + response.setContainerName(StrUtil.isBlank(slittingPlan.getContainerName()) + ? NO_CONTAINER_INFO : slittingPlan.getContainerName()); + response.setErpContainerName(StrUtil.isBlank(slittingPlan.getExtContainerName()) + ? UNBOUND_CONTAINER_INFO : slittingPlan.getExtContainerName()); + response.setSubWeight(StrUtil.isBlank(slittingPlan.getWeight()) + ? NO_WEIGHT_INFO : slittingPlan.getWeight()); + response.setTubeWeight(StrUtil.isBlank(slittingPlan.getPaperWeight()) + ? NO_WEIGHT_INFO : slittingPlan.getPaperWeight()); + return response; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void executeManualQualityCheck(ManaQualityCheckPdaReqVO manaQualityCheckPdaReqVO) { + log.info("手持操作质检......"); + RLock lock = redissonClient.getLock(MANUAL_QUALITY_CHECK_LOCK_KEY); + if (lock.tryLock()) { + try { + if (manaQualityCheckPdaReqVO.getIsQualified()) { + doCheckedQualified(manaQualityCheckPdaReqVO); + } else { + // todo: 做不合格的操作 + } + } catch (ServiceException ex) { + throw ex; + } catch (Exception ex) { + log.error("人工质检执行异常,lockKey={}", MANUAL_QUALITY_CHECK_LOCK_KEY, ex); + throw new ServiceException(500, ex.getMessage()); + } finally { + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + } else { + throw new ServiceException(500, "操作频繁,请稍后再试!"); + } + } + + public void doCheckedQualified(ManaQualityCheckPdaReqVO manaQualityCheckPdaReqVO) { + PackagePointDO currentPoint = packagePointService.getPackagePointByCode( + manaQualityCheckPdaReqVO.getPointCode(), false); + if (currentPoint == null) { + throw exception(PACKAGE_POINT_NOT_EXISTS); + } + if (currentPoint.getPointType().equals(BoxPointTypeEnum.PACKING_POINT.getCode()) + || currentPoint.getPointType().equals(BoxPointTypeEnum.PACKING_DOCK_POINT.getCode()) + || currentPoint.getPointType().equals(BoxPointTypeEnum.OFFLINE_POINT.getCode())) { + throw exception(POINT_EXECUTE_REFUGE, + Objects.requireNonNull(BoxPointTypeEnum.getByCode(currentPoint.getPointType())).getDesc(), + "质检合格"); + } + if (BoxPointTypeEnum.INSPECTION_PENDING_POINT.getCode().equals(currentPoint.getPointType())) { + PackagePointDO updatePoint = new PackagePointDO(); + updatePoint.setPointId(currentPoint.getPointId()); + updatePoint.setPointStatus(BoxPointStatusEnum.QUALIFIED.getCode()); + packagePointMapper.updateById(updatePoint); + return; + } + + if (!BoxPointTypeEnum.UNQUALIFIED_POINT.getCode().equals(currentPoint.getPointType())) { + throw exception(PACKAGE_POINT_TYPE_NOT_SUPPORTED); + } + + if (packagePointMapper.tryLockPoint( + currentPoint.getPointId(), currentPoint.getPointStatus()) == 0) { + throw exception(PACKAGE_POINT_LOCK_FAILED); + } + + List inspectionPointList = packagePointMapper.selectAvailablePointList( + BoxPointTypeEnum.INSPECTION_PENDING_POINT.getCode(), BoxPointStatusEnum.EMPTY.getCode()); + if (CollectionUtils.isEmpty(inspectionPointList)) { + throw exception(PACKAGE_POINT_INSPECTION_PENDING_EMPTY_NOT_EXISTS); + } + + PackagePointDO destinationPoint = null; + for (PackagePointDO inspectionPoint : inspectionPointList) { + if (packagePointMapper.tryLockPoint( + inspectionPoint.getPointId(), inspectionPoint.getPointStatus()) > 0) { + destinationPoint = inspectionPoint; + break; + } + } + if (destinationPoint == null) { + throw exception(PACKAGE_POINT_INSPECTION_PENDING_EMPTY_NOT_EXISTS); + } + + TransportTaskCreateReqDTO task = new TransportTaskCreateReqDTO(); + task.setTaskName("复检合格AGV任务"); + task.setOwnerService(TaskOwnerServiceEnum.LMS.name()); + task.setBizType(RE_CHECK_QUALIFIED_BIZ_TYPE); + task.setBizId(currentPoint.getContainerName()); + task.setTaskType(PackageTaskTypeEnum.RE_CHECK_QUALIFIED_AGV.getCode()); + task.setHandleCode(RE_CHECK_QUALIFIED_HANDLE_CODE); + task.setAcsTaskType(ACS_MOVE_TASK_TYPE); + task.setAgvSystemType(AGV_SYSTEM_TYPE); + task.setPointCode1(currentPoint.getPointCode()); + task.setPointCode2(destinationPoint.getPointCode()); + task.setVehicleCode(currentPoint.getVehicleCode()); + task.setMaterialCode(currentPoint.getContainerName()); + task.setProductArea(currentPoint.getProductArea()); + task.setIsAutoIssue("1"); + task.setIsCreateFinish(true); + CommonResult taskResult = transportTaskApi.createTransportTask(task); + if (taskResult.isError()) { + log.error("创建复检合格AGV任务失败,task={},返回={}", task, taskResult); + throw exception(PACKAGE_POINT_QUALITY_TASK_CREATE_FAILED); + } + log.info("复检合格AGV任务创建成功,任务标识={},起点编码={},目的点编码={}", + taskResult.getData(), currentPoint.getPointCode(), destinationPoint.getPointCode()); } } diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/tasks/box/ReCheckQualifiedAgvTask.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/tasks/box/ReCheckQualifiedAgvTask.java new file mode 100644 index 00000000..87154d48 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/tasks/box/ReCheckQualifiedAgvTask.java @@ -0,0 +1,94 @@ +package cn.code.nl.module.lms.tasks.box; + +import cn.code.nl.framework.execute.core.AbstractTask; +import cn.code.nl.framework.execute.core.dto.TaskExecuteDTO; +import cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO; +import cn.code.nl.module.lms.dal.mysql.packagepoint.PackagePointMapper; +import cn.code.nl.module.lms.enums.BoxPointStatusEnum; +import cn.code.nl.module.task.api.TransportTaskApi; +import cn.code.nl.module.task.dto.TaskInfoDTO; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 复检合格 AGV 任务 + * + * @Author: liyongde + * @Date: 2026/8/18 + */ +@Slf4j +@Component("reCheckQualifiedAgvTask") +public class ReCheckQualifiedAgvTask extends AbstractTask { + + /** 运输任务接口 */ + @Resource + private TransportTaskApi transportTaskApi; + + /** 装箱区点位 Mapper */ + @Resource + private PackagePointMapper packagePointMapper; + + /** + * 任务完成后将目的点更新为合格品 + * + * @param taskExecuteDTO 任务执行信息 + */ + @Override + public void doHandleFinish(TaskExecuteDTO taskExecuteDTO) { + TaskInfoDTO taskInfoDTO = transportTaskApi.getTaskById(taskExecuteDTO.getTaskId()).getCheckedData(); + PackagePointDO endPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode2(), false); + PackagePointDO updatePoint = new PackagePointDO(); + updatePoint.setPointId(endPoint.getPointId()); + updatePoint.setVehicleCode(taskInfoDTO.getVehicleCode()); + updatePoint.setContainerName(taskInfoDTO.getMaterialCode()); + updatePoint.setPointStatus(BoxPointStatusEnum.QUALIFIED.getCode()); + updatePoint.setLockStatus("0"); + packagePointMapper.updateById(updatePoint); + log.info("复检合格任务{}执行完成,子卷已存入待检点{}", + taskExecuteDTO.getTaskId(), taskInfoDTO.getPointCode2()); + } + + /** + * 任务取消后解锁起点和目的点 + * + * @param taskExecuteDTO 任务执行信息 + */ + @Override + public void doHandleCancel(TaskExecuteDTO taskExecuteDTO) { + TaskInfoDTO taskInfoDTO = transportTaskApi.getTaskById(taskExecuteDTO.getTaskId()).getCheckedData(); + PackagePointDO startPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode1(), false); + PackagePointDO endPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode2(), false); + PackagePointDO updateStartPoint = new PackagePointDO(); + updateStartPoint.setPointId(startPoint.getPointId()); + updateStartPoint.setLockStatus("0"); + PackagePointDO updateEndPoint = new PackagePointDO(); + updateEndPoint.setPointId(endPoint.getPointId()); + updateEndPoint.setLockStatus("0"); + packagePointMapper.updateBatch(List.of(updateStartPoint, updateEndPoint)); + log.info("复检合格任务{}已取消,起点{}和目的点{}已解锁", taskExecuteDTO.getTaskId(), + taskInfoDTO.getPointCode1(), taskInfoDTO.getPointCode2()); + } + + /** + * 取货完成后释放不合格点 + * + * @param taskExecuteDTO 任务执行信息 + */ + @Override + public void doHandlePicked(TaskExecuteDTO taskExecuteDTO) { + TaskInfoDTO taskInfoDTO = transportTaskApi.getTaskById(taskExecuteDTO.getTaskId()).getCheckedData(); + PackagePointDO startPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode1(), false); + PackagePointDO updatePoint = new PackagePointDO(); + updatePoint.setPointId(startPoint.getPointId()); + updatePoint.setLockStatus("0"); + updatePoint.setPointStatus(BoxPointStatusEnum.EMPTY.getCode()); + updatePoint.setVehicleCode(""); + updatePoint.setContainerName(""); + packagePointMapper.updateById(updatePoint); + log.info("复检合格任务{}取货完成,不合格点{}已释放", + taskExecuteDTO.getTaskId(), taskInfoDTO.getPointCode1()); + } +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/slittingproductionplan/SlittingproductionplanMapper.xml b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/slittingproductionplan/SlittingproductionplanMapper.xml index e33869e5..0e2f9ee0 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/slittingproductionplan/SlittingproductionplanMapper.xml +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/slittingproductionplan/SlittingproductionplanMapper.xml @@ -2,11 +2,17 @@ - + - \ No newline at end of file + diff --git a/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java index 8939102a..53dac519 100644 --- a/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java +++ b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/api/TransportTaskApi.java @@ -54,6 +54,15 @@ public interface TransportTaskApi { @Operation(summary = "根据 taskCode 查询任务") CommonResult getTaskByCode(@RequestParam("taskCode") String taskCode); + /** + * 根据点位编码查询第一条未完成任务 + * + * @param pointCode 点位编码 + * @return 未完成任务 + */ + @GetMapping(PREFIX + "/getFirstUnfinishedTaskByPointCode") + CommonResult getFirstUnfinishedTaskByPointCode(@RequestParam("pointCode") String pointCode); + @GetMapping(PREFIX + "/getRunningTaskByMaterialId") @Operation(summary = "根据 materialId 和 ownerService 查询运行中任务") CommonResult> getRunningTaskByMaterialId(@RequestParam("materialId") Long materialId, diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java index 6ead55e6..0f47b430 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/api/TransportTaskApiImpl.java @@ -63,6 +63,17 @@ public class TransportTaskApiImpl implements TransportTaskApi { return success(transportTaskService.getTaskInfoByCode(taskCode)); } + /** + * 根据点位编码查询第一条未完成任务 + * + * @param pointCode 点位编码 + * @return 未完成任务 + */ + @Override + public CommonResult getFirstUnfinishedTaskByPointCode(String pointCode) { + return success(transportTaskService.getFirstUnfinishedTaskByPointCode(pointCode)); + } + @Override public CommonResult> getRunningTaskByMaterialId(Long materialId, String ownerService) { return success(transportTaskService.getRunningTaskInfoByMaterialId(materialId, ownerService)); diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java index 56b01ed4..fd717358 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/dal/mysql/transporttask/TransportTaskMapper.java @@ -126,6 +126,14 @@ public interface TransportTaskMapper extends BaseMapperX { */ long selectUnfinishedCountByPointCodes(@Param("pointCodes") List pointCodes); + /** + * 根据点位编码查询第一条未完成任务 + * + * @param pointCode 点位编码 + * @return 未完成任务 + */ + TransportTaskDO selectFirstUnfinishedByPointCode(@Param("pointCode") String pointCode); + /** * 根据任务类型和状态查询搬运任务 * diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskService.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskService.java index bfbdb699..e5d8b858 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskService.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskService.java @@ -107,6 +107,14 @@ public interface TransportTaskService { */ TaskInfoDTO getTaskInfoByCode(String taskCode); + /** + * 根据点位编码查询第一条未完成任务 + * + * @param pointCode 点位编码 + * @return 未完成任务 + */ + TaskInfoDTO getFirstUnfinishedTaskByPointCode(String pointCode); + /** * 根据物料ID和业务归属查询运行中任务(状态小于75) * diff --git a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskServiceImpl.java b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskServiceImpl.java index 1e9360b9..807d3c9c 100644 --- a/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskServiceImpl.java +++ b/nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskServiceImpl.java @@ -221,6 +221,18 @@ public class TransportTaskServiceImpl implements TransportTaskService { return TransportTaskConvert.INSTANCE.convert(task); } + /** + * 根据点位编码查询第一条未完成任务 + * + * @param pointCode 点位编码 + * @return 未完成任务 + */ + @Override + public TaskInfoDTO getFirstUnfinishedTaskByPointCode(String pointCode) { + TransportTaskDO task = transportTaskMapper.selectFirstUnfinishedByPointCode(pointCode); + return TransportTaskConvert.INSTANCE.convert(task); + } + @Override public List getRunningTaskInfoByMaterialId(Long materialId, String ownerService) { List tasks = transportTaskMapper.selectRunningListByMaterialId(materialId, ownerService); diff --git a/nl-module-task/nl-module-task-server/src/main/resources/mapper/transporttask/TransportTaskMapper.xml b/nl-module-task/nl-module-task-server/src/main/resources/mapper/transporttask/TransportTaskMapper.xml index 02886acd..35b07e2e 100644 --- a/nl-module-task/nl-module-task-server/src/main/resources/mapper/transporttask/TransportTaskMapper.xml +++ b/nl-module-task/nl-module-task-server/src/main/resources/mapper/transporttask/TransportTaskMapper.xml @@ -27,6 +27,22 @@ ) + +