From 60ca631acba02b8a99d241cdce0b0a51b104cadc Mon Sep 17 00:00:00 2001 From: liang <594755172@qq.com> Date: Tue, 20 May 2025 17:02:34 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=A2=9E=E5=8A=A0kitting=E5=A4=87?= =?UTF-8?q?=E6=B3=A8=E7=9A=84=E6=98=BE=E7=A4=BA=E3=80=82=202.=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0outs=E7=9A=84=E6=9B=B4=E6=96=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev_wms_client/src/layout/OutsMonitor.vue | 4 +- dev_wms_client/src/layout/kitting.vue | 20 +++- .../model/bo/wms/OrderConfirmEntity.java | 5 + .../dto/request/wms/OutsUpdateRequest.java | 30 ++++++ .../com/wms_main/model/po/TAppStandWork.java | 6 ++ .../java/com/wms_main/model/po/TAppWork.java | 6 ++ .../com/wms_main/model/po/TAppWorkRecord.java | 6 ++ .../model/vo/wms/KateWorkOptionsVo.java | 6 ++ .../serviceImpl/ConveyTaskServiceImpl.java | 3 +- .../ITaskOperationControllerService.java | 8 ++ .../KateWorkControllerServiceImpl.java | 12 ++- .../TaskOperationControllerServiceImpl.java | 93 +++++++++++++++++-- .../serviceImpl/OutsExecutorServiceImpl.java | 3 +- 13 files changed, 186 insertions(+), 16 deletions(-) create mode 100644 dev_wms_serve/src/main/java/com/wms_main/model/dto/request/wms/OutsUpdateRequest.java diff --git a/dev_wms_client/src/layout/OutsMonitor.vue b/dev_wms_client/src/layout/OutsMonitor.vue index e2fa667..1479b99 100644 --- a/dev_wms_client/src/layout/OutsMonitor.vue +++ b/dev_wms_client/src/layout/OutsMonitor.vue @@ -62,14 +62,14 @@ - +
+ + + @@ -96,6 +101,10 @@ + + + @@ -260,7 +269,8 @@ let workFormEntity = reactive({ singleProductId: '', boxNo: '', goodsId: '', - planStartDate: null + planStartDate: null, + kittingRemark: '' }) let workFormQuery = reactive({ workOrder: '', @@ -337,6 +347,7 @@ watch(() => workFormEntity.workOrder, (newVal, oldVal) => { workFormEntity.singleProductId = '' workFormEntity.boxNo = '' workFormEntity.goodsId = '' + workFormEntity.kittingRemark = '' } }) watch(() => workFormEntity.productId, (newVal, oldVal) => { @@ -389,6 +400,7 @@ const initWorkOptions = () => { // 设置成品号 workFormEntity.productIdOrigin = response.data.productIdOrigin workFormEntity.productId = response.data.productId + workFormEntity.kittingRemark = response.data.kittingRemark workOptions.singleProductId = response.data.singleProductId workOptions.boxNo = response.data.boxNo workOptions.goodsId = response.data.goodsId @@ -397,6 +409,7 @@ const initWorkOptions = () => { // 重置成品号 workFormEntity.productIdOrigin = '' workFormEntity.productId = '' + workFormEntity.kittingRemark = '' workOptions.singleProductId = [] workOptions.boxNo = [] workOptions.goodsId = [] @@ -420,6 +433,7 @@ const resetWorkFormQuery = () => { workFormEntity.singleProductId = '' workFormEntity.boxNo = '' workFormEntity.goodsId = '' + workFormEntity.kittingRemark = '' } // 确认配料 const confirmStart = () => { @@ -506,6 +520,7 @@ const getWork = () => { confirmEntity.goodsId = response.data.orderConfirm.goodsId confirmEntity.planPickQty = response.data.orderConfirm.planPickQty confirmEntity.realPickQty = response.data.orderConfirm.realPickQty + confirmEntity.kittingRemark = response.data.orderConfirm.kittingRemark confirmEntity.stockId = response.data.stockConfirm.stockId confirmEntity.vehicleId = response.data.stockConfirm.vehicleId confirmEntity.planRemainQty = response.data.stockConfirm.planRemainQty @@ -528,11 +543,13 @@ const getWork = () => { confirmEntity.boxNo = response.data.orderConfirm.boxNo confirmEntity.productId = response.data.orderConfirm.productId confirmEntity.singleProductId = response.data.orderConfirm.singleProductId + confirmEntity.kittingRemark = response.data.orderConfirm.kittingRemark } else { confirmEntity.workOrder = '' confirmEntity.boxNo = '' confirmEntity.productId = '' confirmEntity.singleProductId = '' + confirmEntity.kittingRemark = '' } } }).catch(err => { @@ -624,6 +641,7 @@ const resetConfirmEntity = () => { confirmEntity.planPickQty = null confirmEntity.realPickQty = null confirmEntity.stockId = '' + confirmEntity.kittingRemark = '' confirmEntity.vehicleId = '' confirmEntity.planRemainQty = null confirmEntity.realRemainQty = null diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/bo/wms/OrderConfirmEntity.java b/dev_wms_serve/src/main/java/com/wms_main/model/bo/wms/OrderConfirmEntity.java index 80e177a..f2f7fd2 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/model/bo/wms/OrderConfirmEntity.java +++ b/dev_wms_serve/src/main/java/com/wms_main/model/bo/wms/OrderConfirmEntity.java @@ -52,4 +52,9 @@ public class OrderConfirmEntity { */ @JsonProperty("realPickQty") private Integer realPickQty; + /** + * 拣选备注 + */ + @JsonProperty("kittingRemark") + private String kittingRemark; } diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/dto/request/wms/OutsUpdateRequest.java b/dev_wms_serve/src/main/java/com/wms_main/model/dto/request/wms/OutsUpdateRequest.java new file mode 100644 index 0000000..d597ff9 --- /dev/null +++ b/dev_wms_serve/src/main/java/com/wms_main/model/dto/request/wms/OutsUpdateRequest.java @@ -0,0 +1,30 @@ +package com.wms_main.model.dto.request.wms; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * 出库单更新请求 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OutsUpdateRequest extends BaseWmsRequest { + /** + * 任务号 + */ + @JsonProperty("taskId") + private String taskId; + /** + * 更新类型 + * 1: 取消 + * 2: 完成 + * 3: 重置 + */ + @JsonProperty("updateType") + private Integer updateType; +} diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppStandWork.java b/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppStandWork.java index 84cffff..5e08629 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppStandWork.java +++ b/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppStandWork.java @@ -92,4 +92,10 @@ public class TAppStandWork { */ @TableField(value = "put_area") private String putArea; + /** + * 备注 + * 主要用于标识ECN + */ + @TableField(value = "kitting_remark") + private String kittingRemark; } diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppWork.java b/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppWork.java index 0ab4de8..cc2047f 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppWork.java +++ b/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppWork.java @@ -113,4 +113,10 @@ public class TAppWork { */ @TableField(value = "product_type") private Integer productType; + /** + * 备注 + * 用于ECN相关 + */ + @TableField(value = "kitting_remark") + private String kittingRemark; } diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppWorkRecord.java b/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppWorkRecord.java index 8f84e9b..602d6ec 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppWorkRecord.java +++ b/dev_wms_serve/src/main/java/com/wms_main/model/po/TAppWorkRecord.java @@ -105,4 +105,10 @@ public class TAppWorkRecord { */ @TableField(value = "product_type") private Integer productType; + /** + * 备注 + * 用于ECN相关 + */ + @TableField(value = "kitting_remark") + private String kittingRemark; } diff --git a/dev_wms_serve/src/main/java/com/wms_main/model/vo/wms/KateWorkOptionsVo.java b/dev_wms_serve/src/main/java/com/wms_main/model/vo/wms/KateWorkOptionsVo.java index 39d53d8..3861537 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/model/vo/wms/KateWorkOptionsVo.java +++ b/dev_wms_serve/src/main/java/com/wms_main/model/vo/wms/KateWorkOptionsVo.java @@ -50,4 +50,10 @@ public class KateWorkOptionsVo { */ @JsonProperty("goodsId") private List goodsId = Collections.emptyList(); + /** + * 备注 + * 主要用于ECN + */ + @JsonProperty("kittingRemark") + private String kittingRemark = ""; } diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/business/serviceImpl/ConveyTaskServiceImpl.java b/dev_wms_serve/src/main/java/com/wms_main/service/business/serviceImpl/ConveyTaskServiceImpl.java index b3f5ecc..bd79d97 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/service/business/serviceImpl/ConveyTaskServiceImpl.java +++ b/dev_wms_serve/src/main/java/com/wms_main/service/business/serviceImpl/ConveyTaskServiceImpl.java @@ -347,7 +347,8 @@ public class ConveyTaskServiceImpl implements IConveyTaskService { thisWork.getGoodsId(), thisWork.getBoxNo(), planPickQty, - planPickQty + planPickQty, + thisWork.getKittingRemark() ); StockConfirmEntity stockConfirmVo = new StockConfirmEntity( pickPlan.getPlanId(), diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/controller/ITaskOperationControllerService.java b/dev_wms_serve/src/main/java/com/wms_main/service/controller/ITaskOperationControllerService.java index 7db65eb..82baa9b 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/service/controller/ITaskOperationControllerService.java +++ b/dev_wms_serve/src/main/java/com/wms_main/service/controller/ITaskOperationControllerService.java @@ -1,5 +1,6 @@ package com.wms_main.service.controller; +import com.wms_main.model.dto.request.wms.OutsUpdateRequest; import com.wms_main.model.dto.request.wms.WmsTaskRequest; import com.wms_main.model.dto.response.wms.BaseWmsApiResponse; @@ -20,4 +21,11 @@ public interface ITaskOperationControllerService { * @return 更新结果 */ BaseWmsApiResponse updateWmsTask(WmsTaskRequest wmsTaskRequest); + + /** + * 更新出库表单---取消或者完成 + * @param outsUpdateRequest 请求 + * @return 结果 + */ + BaseWmsApiResponse updateOutsTask(OutsUpdateRequest outsUpdateRequest); } diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/controller/serviceImpl/KateWorkControllerServiceImpl.java b/dev_wms_serve/src/main/java/com/wms_main/service/controller/serviceImpl/KateWorkControllerServiceImpl.java index f265b54..bc8ce65 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/service/controller/serviceImpl/KateWorkControllerServiceImpl.java +++ b/dev_wms_serve/src/main/java/com/wms_main/service/controller/serviceImpl/KateWorkControllerServiceImpl.java @@ -103,6 +103,8 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService result.setProductIdOrigin(dbs.getProductIdOrigin()); // 设置过滤成品号 result.setProductId(dbs.getProductId()); + // 设置备注 + result.setKittingRemark(dbs.getKittingRemark()); if (!getWorkOptionsOfServicePieces(kateWorksQuery, dbs.getProductIdOrigin(), result)) { if (getWorkOptionsOfNonServicePieces(kateWorksQuery, dbs.getProductId(), result)) { result.setProductType(1);// 普通成品 @@ -298,7 +300,8 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService thisStandWork.getGoodsId(), thisStandWork.getBoxNo(), thisStandWork.getPlanPickQty(), - thisStandWork.getRealPickQty()), + thisStandWork.getRealPickQty(), + thisStandWork.getKittingRemark()), new StockConfirmEntity( thisStandWork.getStockId(), thisStandWork.getVehicleId(), @@ -1438,7 +1441,8 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService work.getGoodsId(), work.getBoxNo(), thisNeedNum, - thisNeedNum + thisNeedNum, + work.getKittingRemark() ); // 查找到这个库外料 TAppGoods outGoods = new TAppGoods(); @@ -1702,6 +1706,7 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService tempServiceProductWork.setIsOut(0); } tempServiceProductWork.setLackStatus(0); + tempServiceProductWork.setKittingRemark(dbs.getKittingRemark());// ECN备注 workList.add(tempServiceProductWork); } // 查询服务件是否包含单片 @@ -1736,6 +1741,7 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService tempSingleServiceProductWork.setIsOut(0); } tempSingleServiceProductWork.setLackStatus(0); + tempSingleServiceProductWork.setKittingRemark(dbs.getKittingRemark());// ECN备注 workList.add(tempSingleServiceProductWork); } } @@ -1772,6 +1778,7 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService tempNonServiceProductWork.setIsOut(0); } tempNonServiceProductWork.setLackStatus(0); + tempNonServiceProductWork.setKittingRemark(dbs.getKittingRemark());// ECN备注 workList.add(tempNonServiceProductWork); } // 查询服务件是否包含单片 @@ -1806,6 +1813,7 @@ public class KateWorkControllerServiceImpl implements IKateWorkControllerService tempSingleNonServiceProductWork.setIsOut(0); } tempSingleNonServiceProductWork.setLackStatus(0); + tempSingleNonServiceProductWork.setKittingRemark(dbs.getKittingRemark());// ECN备注 workList.add(tempSingleNonServiceProductWork); } } diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/controller/serviceImpl/TaskOperationControllerServiceImpl.java b/dev_wms_serve/src/main/java/com/wms_main/service/controller/serviceImpl/TaskOperationControllerServiceImpl.java index 65ea56e..59f51a7 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/service/controller/serviceImpl/TaskOperationControllerServiceImpl.java +++ b/dev_wms_serve/src/main/java/com/wms_main/service/controller/serviceImpl/TaskOperationControllerServiceImpl.java @@ -4,16 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.wms_main.constant.enums.wcs.WcsStackerTaskStatusEnums; import com.wms_main.constant.enums.wms.WmsStackerTaskStatusEnums; -import com.wms_main.dao.ITAppTaskBakService; -import com.wms_main.dao.ITAppTaskService; -import com.wms_main.dao.ITAppWcsTaskBakService; -import com.wms_main.dao.ITAppWcsTaskService; +import com.wms_main.dao.*; +import com.wms_main.model.dto.request.wms.OutsUpdateRequest; import com.wms_main.model.dto.request.wms.WmsTaskRequest; import com.wms_main.model.dto.response.wms.BaseWmsApiResponse; -import com.wms_main.model.po.TAppTask; -import com.wms_main.model.po.TAppTaskBak; -import com.wms_main.model.po.TAppWcsTask; -import com.wms_main.model.po.TAppWcsTaskBak; +import com.wms_main.model.po.*; import com.wms_main.repository.utils.ConvertUtils; import com.wms_main.repository.utils.StringUtils; import com.wms_main.service.controller.ITaskOperationControllerService; @@ -34,9 +29,14 @@ public class TaskOperationControllerServiceImpl implements ITaskOperationControl private final ITAppTaskBakService appTaskBakService;// wms任务记录服务 private final ITAppWcsTaskService appWcsTaskService;// wcs任务服务 private final ITAppWcsTaskBakService appWcsTaskBakService;// wcs任务记录服务 + private final ITAppOutsService appOutsService;// 出库单服务 + private final ITAppOutsRecordService appOutsRecordService;// 出库单记录服务 + private final ITAppPickPlanService appPickPlanService;// 拣选计划服务 + private final ITAppPickTaskService appPickTaskService;// 拣选任务服务 /** * 删除wms任务 + * * @param wmsTaskRequest 请求参数 * @return 删除结果 */ @@ -60,6 +60,7 @@ public class TaskOperationControllerServiceImpl implements ITaskOperationControl /** * 更新wms任务 + * * @param wmsTaskRequest 请求参数 * @return 更新结果 */ @@ -176,9 +177,83 @@ public class TaskOperationControllerServiceImpl implements ITaskOperationControl } } + /** + * 更新当前的出库单任务---取消或者完成 + * + * @param outsUpdateRequest 请求 + * @return 处理结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public BaseWmsApiResponse updateOutsTask(OutsUpdateRequest outsUpdateRequest) { + // 校验参数 + if (outsUpdateRequest == null) { + return BaseWmsApiResponse.error("请求参数不能为NULL。"); + } + if (StringUtils.isEmpty(outsUpdateRequest.getTaskId())) { + return BaseWmsApiResponse.error("请求缺少任务号taskId。"); + } + if (outsUpdateRequest.getUpdateType() == null) { + return BaseWmsApiResponse.error("请求缺少更新类型updateType。"); + } + // 查询对应的出库单 + TAppOuts targetOuts = appOutsService.getById(outsUpdateRequest.getTaskId()); + if (targetOuts == null) { + return BaseWmsApiResponse.error("未查询到对应的出库单。"); + } + // 查询对应的pickPlan + List pickPlansOfThisTask = appPickPlanService.list(new LambdaQueryWrapper() + .eq(TAppPickPlan::getWorkIndex, targetOuts.getTaskId())); + if (pickPlansOfThisTask != null && !pickPlansOfThisTask.isEmpty()) { + // 查询这些plan包含的拣选任务 + List pickTasksOfThisTask = appPickTaskService.list(new LambdaQueryWrapper() + .eq(TAppPickTask::getPickStand, targetOuts.getDestination()) + .in(TAppPickTask::getVehicleId, pickPlansOfThisTask.stream().map(TAppPickPlan::getVehicleId).distinct().toList())); + if (pickTasksOfThisTask != null && !pickTasksOfThisTask.isEmpty()) { + // 如果存在pickPlan且存在pickTask,那么不允许后续操作。 + return BaseWmsApiResponse.error("当前任务已经下发且未完成,不可进行后续操作。"); + } + } + // 根据不用的更新类型,进行操作 + if (outsUpdateRequest.getUpdateType() == 1) {// CANCEL + // 移除这个出库单,并删除其对应的pickPlan + appOutsService.removeById(targetOuts.getTaskId()); + appPickPlanService.remove(new LambdaQueryWrapper() + .eq(TAppPickPlan::getWorkIndex, targetOuts.getTaskId())); + } else if (outsUpdateRequest.getUpdateType() == 2) {// FINISH + // 移除这个出库单,生成记录,并删除对应的pickPlan + appOutsService.removeById(targetOuts.getTaskId()); + appOutsRecordService.save(new TAppOutsRecord( + targetOuts.getTaskId(), + targetOuts.getGoodsId(), + targetOuts.getVehicleId(), + targetOuts.getNeedNum(), + targetOuts.getDistributeNum(), + targetOuts.getPickNum(), + targetOuts.getOutType(), + targetOuts.getDestination(), + targetOuts.getUserName(), + targetOuts.getReason(), + targetOuts.getRequestTime() + )); + appPickPlanService.remove(new LambdaQueryWrapper() + .eq(TAppPickPlan::getWorkIndex, targetOuts.getTaskId())); + } else if (outsUpdateRequest.getUpdateType() == 3) {// REBOOT + // 将已分配数量更改掉,并删除pickPlan + targetOuts.setDistributeNum(targetOuts.getNeedNum() - targetOuts.getPickNum()); + appOutsService.updateById(targetOuts); + appPickPlanService.remove(new LambdaQueryWrapper() + .eq(TAppPickPlan::getWorkIndex, targetOuts.getTaskId())); + } else { + return BaseWmsApiResponse.error("更新类型错误。"); + } + return BaseWmsApiResponse.success("更新信息成功。"); + } + /** * 更新详情 - * @param targetTask 目标任务 + * + * @param targetTask 目标任务 * @param wmsTaskRequest 请求信息 */ private void updateDetailInfoExceptStatus(TAppTask targetTask, WmsTaskRequest wmsTaskRequest) { diff --git a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/serviceImpl/OutsExecutorServiceImpl.java b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/serviceImpl/OutsExecutorServiceImpl.java index 14b889c..05af03d 100644 --- a/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/serviceImpl/OutsExecutorServiceImpl.java +++ b/dev_wms_serve/src/main/java/com/wms_main/service/quartz_job/serviceImpl/OutsExecutorServiceImpl.java @@ -1102,7 +1102,8 @@ public class OutsExecutorServiceImpl implements IOutsExecutorService { appWork.getFinishTime(), appWork.getLackStatus(), appWork.getIsOut(), - appWork.getProductType() + appWork.getProductType(), + appWork.getKittingRemark() ); }