diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java index ceaf3780b..14ed16445 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java @@ -21,7 +21,7 @@ import java.util.Map; * @description: TODO * @date 2024/5/10 8:58 **/ -@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE,url = "http://10.33.0.109:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class) +@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE,fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class) public interface WmsServiceFeign { /** @@ -133,6 +133,27 @@ public interface WmsServiceFeign { @PostMapping(value = "/stockInOrderApi/omsCancelInOrder") public AjaxResult omsCancelInOrder(@RequestBody StockInOrder stockInOrder); + /** + * oms出库执行单反审(已出库/已复核单据客户通知回退场景):WMS侧还原实物库存并推送OMS库存、 + * 逻辑删除出库链路单据、生成1条出库异常【反审记录】;反审原因经 remark 透传。 + * 已产生下游不可逆数据时返回错误,OMS据此整体回滚。 + */ + @ApiOperation("oms出库执行单反审WMS回退") + @PostMapping(value = "/stockOutOrderApi/omsReverseExecutionOrder") + public AjaxResult omsReverseExecutionOrder(@RequestBody StockOutOrder stockOutOrder); + + /** + * oms入库业务单反审:WMS侧一个事务内回退已入库/收货中/上架中单据—— + * 校验未产生出库(按入库单号+动作"分配库存/出库"查库存调整记录>0即有出库) -> + * 按库存行整行回退库存扣减 -> 软删W入库单/W收货单/W上架单全链并打已反审标记 + * (各页面【已反审】tab按"已软删+已反审"查询归档数据)-> 写1条入库异常【反审记录】(type=3)。 + * 入参: inOrderNumber=执行入库单号, remark=业务单号+反审原因, updateBy/updateByName=反审人; + * WMS无该单数据时幂等返回成功(未下发单反审不产生WMS数据)。 + */ + @ApiOperation("oms入库单反审WMS回退") + @PostMapping(value = "/stockInOrderApi/omsReverseInOrder") + public AjaxResult omsReverseInOrder(@RequestBody StockInOrder stockInOrder); + @ApiOperation("oms查询物料列表") @GetMapping("/materialBaseInfoApi/queryList") public TableDataInfo getMaterialBaseInfoList(MaterialInfoDTO materialInfoDTO); diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWmsFallbackFactory.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWmsFallbackFactory.java index daddb00ab..4f48a4cea 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWmsFallbackFactory.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWmsFallbackFactory.java @@ -82,6 +82,12 @@ public class RemoteWmsFallbackFactory implements FallbackFactory().lambda() + boolean updateResult; + LambdaUpdateWrapper auditUpdateWrapper = new UpdateWrapper().lambda() .set(ReservationStockOutOrder::getReservationAuditId, loginUser.getUserid()) .set(ReservationStockOutOrder::getReservationAuditName, userRealName) .set(ReservationStockOutOrder::getReservationAuditTime, new Date()) @@ -417,7 +422,12 @@ public class ReservationStockOutOrderDomainService { .set(ReservationStockOutOrder::getUpdateByName, userRealName) .set(ReservationStockOutOrder::getUpdateTime, new Date()) .set(ReservationStockOutOrder::getIssueStatus, issueStatus) - .in(ReservationStockOutOrder::getOutOrderId, stockOutOrderDO.getOutOrderIds())); + .in(ReservationStockOutOrder::getOutOrderId, stockOutOrderDO.getOutOrderIds()); + // 重新审核通过时复位反审标记: 单据离开【已反审】页签回到正常流转 + if (issueStatus == 2) { + auditUpdateWrapper.set(ReservationStockOutOrder::getReverseStatus, 0); + } + updateResult = stockOutOrderService.update(null, auditUpdateWrapper); //审核通过时同步线路/车次到关联的运输业务单 if (issueStatus == 2) { @@ -662,6 +672,118 @@ public class ReservationStockOutOrderDomainService { return update; } + /** + * @description 反审出库业务单(按前端展示字段 issueStatus 判断可反审范围: 2-已审核(未出库) / 4-已出库 均可反审; + * 0-已创建无需反审、3-已驳回可直接编辑; status 字段在出库完成后不一定同步为9, 故不作为判断依据, + * 仅兜底排除 10-已取消/11-已关闭)。 + * 反审将单据回退到最原始状态(1-已创建, issueStatus=0)并打上反审标记: + * WMS 侧按出库单实际状态分支还原库存(已出库: 实物库存还原+推OMS; 未出库: 仅还原分配/冻结占用)、 + * 清理执行单据(出库单/明细/拣货/复核/交接/配送, 软删+reverseFlag=1 划归【已反审】tab)、 + * 每个执行出库单生成1条出库异常记录【反审记录】(out_order_abnormal, abnormalType=3); + * OMS 侧软删执行出库单及明细、软删预约库存调整记录。 + * 反审后单据进入【已反审】页签(status=1 且 reverse_status=1), 可继续编辑/审核/撤销; + * 重新审核通过时 reverse_status 自动复位 0(见 auditState)。 + * @date 2026/9/8 + */ + @Transactional(rollbackFor = Exception.class) + public Boolean reverseAudit(ReservationStockOutOrderDO stockOutOrderDO) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + // 获取用户姓名(优先从UserPo获取,如果为空则使用realname,最后使用username作为兜底) + String userRealName = loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null + ? loginUser.getUserPo().getUserName() + : (loginUser.getRealname() != null ? loginUser.getRealname() : loginUser.getUsername()); + List outOrderIds = stockOutOrderDO.getOutOrderIds(); + if (outOrderIds == null || outOrderIds.isEmpty()) { + throw new ServiceException("请选择需要反审的出库单"); + } + String reverseRemark = stockOutOrderDO.getReverseRemark(); + + for (Long outOrderId : outOrderIds) { + ReservationStockOutOrder byId = stockOutOrderService.getById(outOrderId); + if (byId == null) { + throw new ServiceException("出库单不存在, outOrderId=" + outOrderId); + } + Integer status = byId.getStatus(); + if (status != null && (status == 10 || status == 11)) { + throw new ServiceException("出库单[" + byId.getOutOrderNumber() + "]已取消/已关闭, 不能反审"); + } + // 反审条件按前端展示字段 issueStatus 判断: 2-已审核(未出库) / 4-已出库 均可反审 + Integer issueStatus = byId.getIssueStatus(); + if (!Integer.valueOf(2).equals(issueStatus) && !Integer.valueOf(4).equals(issueStatus)) { + throw new ServiceException("出库单[" + byId.getOutOrderNumber() + "]当前状态(issueStatus=" + issueStatus + + ")不支持反审, 仅已审核/已出库状态可反审"); + } + // 逐个执行出库单调 WMS 反审: 还原实物库存+推送OMS库存、清理WMS单据、生成反审异常记录; + // 任一失败抛异常整体回滚, 避免单边反审 + List executionOrders = executionStockOutOrderService.list(new QueryWrapper().lambda() + .eq(ExecutionStockOutOrder::getBusinessOutOrderNumber, byId.getOutOrderNumber()) + .eq(ExecutionStockOutOrder::getDelFlag, 1)); + for (ExecutionStockOutOrder executionStockOutOrder : executionOrders) { + String executionOutOrderNumber = executionStockOutOrder.getOutOrderNumber(); + StockOutOrder wmsOutOrder = new StockOutOrder(); + wmsOutOrder.setOutOrderNumber(executionOutOrderNumber); + // 反审原因经 remark 透传 WMS, 记入反审异常记录备注 + wmsOutOrder.setRemark("业务单号:" + byId.getOutOrderNumber() + + (reverseRemark != null && !reverseRemark.isEmpty() ? ",反审原因:" + reverseRemark : "")); + AjaxResult wmsResult = wmsServiceFeign.omsReverseExecutionOrder(wmsOutOrder); + if (wmsResult == null || !"200".equals(String.valueOf(wmsResult.get("code")))) { + throw new ServiceException("执行出库单[" + executionOutOrderNumber + "]WMS反审失败:" + + (wmsResult == null ? "WMS服务不可用" : wmsResult.get("msg"))); + } + // 软删执行出库单明细 + 执行出库单(与取消下发 cancelIssueOrder 一致) + List materialDetails = executionOutMaterialDetailService.list(new QueryWrapper().lambda() + .eq(ExecutionOutMaterialDetail::getOutOrderNumber, executionOutOrderNumber) + .eq(ExecutionOutMaterialDetail::getDelFlag, 1)); + materialDetails.forEach(executionOutMaterialDetail -> { + executionOutMaterialDetailService.update(null, new UpdateWrapper().lambda() + .set(ExecutionOutMaterialDetail::getDelFlag, 2) + .set(ExecutionOutMaterialDetail::getReverseFlag, 1) + .eq(ExecutionOutMaterialDetail::getMaterialDetailId, executionOutMaterialDetail.getMaterialDetailId())); + }); + executionStockOutOrderService.update(null, new UpdateWrapper().lambda() + .set(ExecutionStockOutOrder::getDelFlag, 2) + .set(ExecutionStockOutOrder::getReverseFlag, 1) + .eq(ExecutionStockOutOrder::getOutOrderNumber, executionOutOrderNumber)); + // 软删预约库存调整记录(下发分配时生成): 仅软删留痕, 库存数量由 WMS omsEdit 推送还原 + inventoryAdjustmentRecordMapper.update(null, new UpdateWrapper().lambda() + .set(ReservationInventoryAdjustmentRecord::getDelFlag, 2) + .eq(ReservationInventoryAdjustmentRecord::getExecutionOrderNumber, executionOutOrderNumber) + .eq(ReservationInventoryAdjustmentRecord::getDelFlag, 1)); + } + } + + // 主单回退到已创建并打反审标记; 更新条件带 issueStatus in (2,4) + 排除已取消/已关闭 兜底防并发重复反审 + // issueStatus 回退到 0-已创建(前端展示映射: 0-已创建 2-已审核 3-已驳回 4-已出库) + return stockOutOrderService.update(null, new UpdateWrapper().lambda() + .set(ReservationStockOutOrder::getStatus, 1) + .set(ReservationStockOutOrder::getIssueStatus, 0) + .set(ReservationStockOutOrder::getIssueId, null) + .set(ReservationStockOutOrder::getIssueName, null) + .set(ReservationStockOutOrder::getIssueTime, null) + .set(ReservationStockOutOrder::getReservationAuditId, null) + .set(ReservationStockOutOrder::getReservationAuditName, null) + .set(ReservationStockOutOrder::getReservationAuditTime, null) + .set(ReservationStockOutOrder::getAllocationQuantity, BigDecimal.ZERO) + .set(ReservationStockOutOrder::getAlreadyAllocationQuantity, BigDecimal.ZERO) + .set(ReservationStockOutOrder::getPickingQuantity, BigDecimal.ZERO) + .set(ReservationStockOutOrder::getCheckQuantity, BigDecimal.ZERO) + .set(ReservationStockOutOrder::getCheckStatus, 1) + .set(ReservationStockOutOrder::getCheckTaskDistribution, 2) + .set(ReservationStockOutOrder::getCompleteTime, null) + .set(ReservationStockOutOrder::getOutboundTime, null) + .set(ReservationStockOutOrder::getReverseStatus, 1) + .set(ReservationStockOutOrder::getReverseBy, loginUser.getUserid()) + .set(ReservationStockOutOrder::getReverseByName, userRealName) + .set(ReservationStockOutOrder::getReverseTime, new Date()) + .set(ReservationStockOutOrder::getReverseRemark, reverseRemark) + .set(ReservationStockOutOrder::getUpdateBy, loginUser.getUserid()) + .set(ReservationStockOutOrder::getUpdateByName, userRealName) + .set(ReservationStockOutOrder::getUpdateTime, new Date()) + .in(ReservationStockOutOrder::getOutOrderId, outOrderIds) + .in(ReservationStockOutOrder::getIssueStatus, 2, 4) + .notIn(ReservationStockOutOrder::getStatus, 10, 11)); + } + @Transactional(rollbackFor = Exception.class) public Boolean executeAndIssue(ReservationStockOutOrderDO stockOutOrderDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java index 28114c62b..ee912d037 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java @@ -159,6 +159,17 @@ public class ReservationStockOutOrderApi extends BaseController { return AjaxResult.success(stockOutOrderApplicationService.cancelIssueOrder(stockOutOrderDO)); } + /** + * 反审出库单: 已出库/已复核(issueStatus=2已审核)的单据回退到已创建并打反审标记, + * WMS还原实物库存并生成出库异常记录【反审记录】, 单据划归【已反审】页签 + */ + @ApiOperation("反审出库单") + @PostMapping(value = "/reverseAudit") + public AjaxResult reverseAudit(@RequestBody ReservationStockOutOrderDTO stockOutOrderDTO) { + ReservationStockOutOrderDO stockOutOrderDO = stockOutOrderAssembler.toDO(stockOutOrderDTO); + return AjaxResult.success(stockOutOrderApplicationService.reverseAudit(stockOutOrderDO)); + } + @ApiOperation("下发出库单") @PostMapping(value = "/executeAndIssue") public AjaxResult executeAndIssue(@RequestBody ReservationStockOutOrderDTO stockOutOrderDTO) { diff --git a/mhd_oms/src/main/resources/mapper/reservationStockOutOrder/ReservationStockOutOrderMapper.xml b/mhd_oms/src/main/resources/mapper/reservationStockOutOrder/ReservationStockOutOrderMapper.xml index ad3073c4f..a95ebedbb 100644 --- a/mhd_oms/src/main/resources/mapper/reservationStockOutOrder/ReservationStockOutOrderMapper.xml +++ b/mhd_oms/src/main/resources/mapper/reservationStockOutOrder/ReservationStockOutOrderMapper.xml @@ -117,6 +117,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + @@ -136,7 +141,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ,a.reservation_audit_id,a.issue_name,a.issue_id,a.issue_time,a.issue_status,a.tms_order_number, a.DIRECTOR_NAME ,a.DIRECTOR_PHONE,a.DIRECTOR_ID,a.RESERVATION_ORDER_SOURCE,a.OUTBOUND_TIME,a.RETURN_QUANTITY,a.DELIVERY_NAME,a.CUSTOMER_NUMBER,a.INVOICE_NUMBER,a.RETURN_ORDER_NUMBER,a.TOTAL_AMOUNT, a.ROUTE,a.PUSH_TIME,a.PUSH_STATUS,a.PUSH_BY,a.PUSH_BY_NAME,a.execution_out_order_number,a.LINE_CODE,a.LINE_NAME,a.SHUTTLE_NO, - a.TOTAL_WAREHOUSE_RENT,a.BUSINESS_CHARGE_TYPE,a.BUSINESS_PRICE_WAY,a.DISCOUNT + a.TOTAL_WAREHOUSE_RENT,a.BUSINESS_CHARGE_TYPE,a.BUSINESS_PRICE_WAY,a.DISCOUNT, + a.REVERSE_STATUS,a.REVERSE_BY,a.REVERSE_BY_NAME,a.REVERSE_TIME,a.REVERSE_REMARK @@ -178,11 +184,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and a.status IN (3, 4, 5, 6, 7, 8) + + + and a.status = 1 and a.reverse_status = 1 + + + and a.status = 1 and (a.reverse_status is null or a.reverse_status = 0) + and a.status = #{status} + + and a.reverse_status = #{reverseStatus} + and a.status > #{gtStatus} diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java index f9a22003e..fe9c17096 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/handoverTaskOrder/HandoverTaskOrderApplicationService.java @@ -157,6 +157,14 @@ public class HandoverTaskOrderApplicationService { return handoverTaskOrderDomainService.getInfo(outTaskOrderId); } + /** + * 获取交接作业单归档详情(已反审): 反审时交接单已软删, 供【已反审】tab 查看归档详情 + */ + public HandoverTaskOrderPO getReverseInfo(Long outTaskOrderId) + { + return handoverTaskOrderDomainService.getReverseInfo(outTaskOrderId); + } + /** * 按作业单号获取交接作业单详细信息(PDA 端) * 用于下发任务(taskType=7)中 trackingNumber 对应交接作业单的 taskNumber diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java index d0c1d6e14..38a13922b 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/pickingOrder/PickingOrderApplicationService.java @@ -282,11 +282,18 @@ public class PickingOrderApplicationService { setMaterialMoreDetailListRecursively(pickingMaterialDetailPOList, batchDetailMap); pickingOrderPO.setMaterialDetailList(pickingMaterialDetailPOList); - log.info("返回拣货单信息,pickingOrderId={}, materialDetailList大小={}", - pickingOrderPO.getPickingOrderId(), + log.info("返回拣货单信息,pickingOrderId={}, materialDetailList大小={}", + pickingOrderPO.getPickingOrderId(), pickingMaterialDetailPOList != null ? pickingMaterialDetailPOList.size() : 0); return pickingOrderPO; } + + /** + * 获取拣货单归档详情(已反审): 反审时拣货单已软删(del_flag=2), 供【已反审】tab 查看归档详情 + */ + public PickingOrderPO getReverseInfoByIdAndType(Long pickingOrderId, Integer type) { + return pickingOrderDomainService.getReverseInfoByIdAndType(pickingOrderId, type); + } /** * 递归为物料明细设置更多属性 diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java index 23427cd72..ef40b67d0 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/reviewOrder/ReviewOrderApplicationService.java @@ -186,6 +186,27 @@ public class ReviewOrderApplicationService { header.setMaterialDetailList(details); return header; } + + /** + * 获取复核单归档详情(已反审): 反审时复核单/明细均已软删(del_flag=2), 供【已反审】tab 查看归档详情 + */ + public ReviewOrderPO getReverseDetailByReviewOrderId(Long reviewOrderId) { + if (reviewOrderId == null) { + throw new ServiceException("复核单ID不能为空"); + } + ReviewOrderPO header = reviewOrderMapper.selectHeaderByReviewOrderIdReverse(reviewOrderId); + if (header == null) { + throw new ServiceException("复核单不存在"); + } + List details = reviewOrderMapper.queryDetailByReviewOrderIdReverse(reviewOrderId); + fillDisplayQtyFields(details); + Map> batchDetailMap = loadDisplayBatchDetailMap(details); + fillDynamicBatchDisplayFields(details, batchDetailMap); + buildReviewMaterialMoreDetailListLikeShelf(details, batchDetailMap); + fillHeaderSummary(header, details); + header.setMaterialDetailList(details); + return header; + } public ReviewOrderPO getDetailByReviewOrderNumber(String reviewOrderNumber) { diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java index d3fc80599..b209f10ee 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java @@ -500,7 +500,15 @@ public class StockOutOrderApplicationService { return stockOutOrderPO; } - + + /** + * 获取出库单归档详情(已反审): 反审时单据已软删, 供【已反审】tab 查看归档详情 + */ + public StockOutOrderPO getReverseInfoChildren(Long outOrderId) + { + return stockOutOrderDomainService.getReverseInfoChildren(outOrderId); + } + /** * 出库交接场景:递归过滤 pickingQuantity 为 0 的明细(与交接详情一致) * @param detailList 物料明细树 @@ -1950,6 +1958,13 @@ public class StockOutOrderApplicationService { stockOutOrderDomainService.cancelExecutionOrder(stockOutOrder); } + /** + * oms出库执行单反审(已出库单据回退): 还原实物库存并推送OMS、清理单据、生成反审异常记录 + */ + public void reverseExecutionOrder(StockOutOrder stockOutOrder){ + stockOutOrderDomainService.reverseExecutionOrder(stockOutOrder); + } + public void omsOrderAddDetail(List outMaterialDetails){ stockOutOrderDomainService.omsOrderAddDetail(outMaterialDetails); } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/entity/HandoverTaskOrder.java b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/entity/HandoverTaskOrder.java index 9946e65a7..848486e28 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/entity/HandoverTaskOrder.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/entity/HandoverTaskOrder.java @@ -144,4 +144,7 @@ public class HandoverTaskOrder extends BaseVOEntity { private String operatorsName; @ApiModelProperty("计费信息") private String billingJson; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/repository/po/HandoverTaskOrderPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/repository/po/HandoverTaskOrderPO.java index 73042d160..69fd1232d 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/repository/po/HandoverTaskOrderPO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/repository/po/HandoverTaskOrderPO.java @@ -146,4 +146,7 @@ public class HandoverTaskOrderPO extends BaseVOEntity { private List materialDetailList; @ApiModelProperty("计费信息") private String billingJson; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/repository/todo/HandoverTaskOrderDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/repository/todo/HandoverTaskOrderDO.java index ddc6af7d6..bd1a4f1af 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/repository/todo/HandoverTaskOrderDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/repository/todo/HandoverTaskOrderDO.java @@ -146,4 +146,7 @@ public class HandoverTaskOrderDO extends BaseVOEntity { private String pictureApp; private String billingJson; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java index c2a27a982..13b14ea91 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java @@ -44,6 +44,7 @@ import com.mhd.wms.domain.materialInventory.repository.mapper.MaterialInventoryM import com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryParamDO; import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail; import com.mhd.wms.domain.outMaterialDetail.repository.mapper.OutMaterialDetailMapper; +import com.mhd.wms.domain.pickingMaterialDetail.entity.PickingMaterialDetail; import com.mhd.wms.domain.pickingMaterialDetail.repository.mapper.PickingMaterialDetailMapper; import com.mhd.wms.domain.pickingMaterialDetail.repository.po.PickingMaterialDetailPO; import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO; @@ -242,6 +243,90 @@ public class HandoverTaskOrderDomainService { return handoverTaskOrderPO; } + /** + * 获取交接作业单归档详情(已反审): 出库单反审时交接单及关联出库明细均已软删(del_flag=2), + * 本方法镜像 getInfo 按 del_flag=2 查归档数据, 供交接单【已反审】tab 查看详情。 + */ + public HandoverTaskOrderPO getReverseInfo(Long outTaskOrderId) + { + HandoverTaskOrderPO handoverTaskOrderPO = handoverTaskOrderService.getInfo(outTaskOrderId); + if (handoverTaskOrderPO == null) { + return null; + } + String orderNumber = handoverTaskOrderPO.getOrderNumber(); + if (orderNumber != null && !orderNumber.trim().isEmpty()) { + StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper().lambda() + .eq(StockOutOrder::getOutOrderNumber, orderNumber) + .eq(StockOutOrder::getDelFlag, 2)); + Integer review = stockOutOrder != null ? stockOutOrder.getReview() : null; + // 归档明细: 出库明细已随反审软删, 按 del_flag=2 查 + LambdaQueryWrapper omdQuery = new QueryWrapper().lambda() + .eq(OutMaterialDetail::getOutOrderNumber, orderNumber) + .eq(OutMaterialDetail::getDelFlag, 2); + List outMaterialDetailList = outMaterialDetailMapper.selectList(omdQuery); + List materialDetailList = new ArrayList<>(); + for (OutMaterialDetail omd : outMaterialDetailList) { + BigDecimal handoverQuantity; + BigDecimal pickQty; + if (Integer.valueOf(1).equals(review)) { + // 需要复核时:仅限复核单上的明细(picking_material_detail 有拣货的 unique_id) + List pmdList = pickingMaterialDetailMapper.selectList(new QueryWrapper().lambda() + .eq(PickingMaterialDetail::getOutUniqueId, omd.getUniqueId()) + .eq(PickingMaterialDetail::getDelFlag, 2) + .gt(PickingMaterialDetail::getPickingQuantity, BigDecimal.ZERO)); + if (pmdList == null || pmdList.isEmpty()) { + continue; + } + if (omd.getCheckQuantity() == null || omd.getCheckQuantity().compareTo(BigDecimal.ZERO) <= 0) { + continue; + } + PickingMaterialDetailPO pickingSummary = pickingMaterialDetailMapper.queryTotalsByOutNumberAndBaseId(omd.getUniqueId()); + pickQty = (pickingSummary != null && pickingSummary.getPickingQuantity() != null) ? pickingSummary.getPickingQuantity() : BigDecimal.ZERO; + if (pickQty.compareTo(BigDecimal.ZERO) <= 0) { + continue; + } + handoverQuantity = omd.getCheckQuantity(); + } else { + BigDecimal qty = omd.getPickingQuantity() != null ? omd.getPickingQuantity() : omd.getQuantity(); + if (qty == null || qty.compareTo(BigDecimal.ZERO) <= 0) { + continue; + } + pickQty = qty; + handoverQuantity = qty; + } + TaskHandoverMaterialDetailPO detail = new TaskHandoverMaterialDetailPO(); + detail.setMaterialDetailId(omd.getMaterialDetailId()); + detail.setUniqueId(omd.getUniqueId()); + detail.setTaskNumber(handoverTaskOrderPO.getTaskNumber()); + detail.setOrganizationId(omd.getOrganizationId()); + detail.setOrganizationName(omd.getOrganizationName()); + detail.setTopOrganizationId(omd.getTopOrganizationId()); + detail.setMaterialBaseInfoId(omd.getMaterialBaseInfoId()); + detail.setMaterialCode(omd.getMaterialCode() != null ? omd.getMaterialCode() : omd.getMaterialNo()); + detail.setMaterialName(omd.getMaterialName() != null ? omd.getMaterialName() : omd.getCommodityName()); + detail.setBarCode(omd.getBarCode()); + detail.setWeightLimit(omd.getWeightLimit()); + detail.setVolumeLimit(omd.getVolumeLimit()); + detail.setQuantity(omd.getQuantity()); + detail.setPickingQuantity(pickQty); + detail.setCheckQuantity(handoverQuantity); + detail.setPackId(omd.getPackId()); + detail.setPackCode(omd.getPackCode()); + detail.setPackName(omd.getPackName()); + detail.setPackDetailId(omd.getPackDetailId() != null ? String.valueOf(omd.getPackDetailId()) : null); + detail.setUnitCode(omd.getUnitCode()); + detail.setUnitName(omd.getUnitName()); + detail.setUnitNumber(omd.getUnitNumber()); + detail.setMaterialWarehouseControlId(omd.getMaterialWarehouseControlId()); + detail.setSerialNumberManage(omd.getSerialNumberManage()); + detail.setRemark(omd.getRemark()); + materialDetailList.add(detail); + } + handoverTaskOrderPO.setMaterialDetailList(materialDetailList); + } + return handoverTaskOrderPO; + } + /** * @description 分配月台 diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/entity/OutMaterialDetail.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/entity/OutMaterialDetail.java index 830f67c50..cb2547da6 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/entity/OutMaterialDetail.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/entity/OutMaterialDetail.java @@ -541,4 +541,7 @@ public class OutMaterialDetail extends BaseVOEntity { @ApiModelProperty("出库数量") @Excel(name = "出库数量") private BigDecimal outQuantity; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/entity/OutOrderAbnormal.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/entity/OutOrderAbnormal.java index c3a97fdf7..92e3305b8 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/entity/OutOrderAbnormal.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/entity/OutOrderAbnormal.java @@ -53,8 +53,8 @@ public class OutOrderAbnormal extends BaseVOEntity { @Excel(name = "拣货作业单号") private String outTaskOrderNumber; - @ApiModelProperty("类型:1-拣货 2-复核") - @Excel(name = "类型:1-拣货 2-复核") + @ApiModelProperty("类型:1-拣货 2-复核 3-反审记录") + @Excel(name = "类型:1-拣货 2-复核 3-反审记录") private Integer type; @ApiModelProperty("计划数量") @@ -69,8 +69,8 @@ public class OutOrderAbnormal extends BaseVOEntity { @Excel(name = "异常数量 = 作业数量 - 计划数量") private BigDecimal abnormalActualQuantity; - @ApiModelProperty("异常类型: 1-拣货异常 2-复核异常") - @Excel(name = "异常类型: 1-拣货异常 2-复核异常") + @ApiModelProperty("异常类型: 1-拣货异常 2-复核异常 3-反审记录") + @Excel(name = "异常类型: 1-拣货异常 2-复核异常 3-反审记录") private Integer abnormalType; @ApiModelProperty("异常原因") diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/repository/po/OutOrderAbnormalPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/repository/po/OutOrderAbnormalPO.java index d3e8b18f3..4d0ae6aef 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/repository/po/OutOrderAbnormalPO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/repository/po/OutOrderAbnormalPO.java @@ -53,8 +53,8 @@ public class OutOrderAbnormalPO extends BaseVOEntity { @Excel(name = "拣货作业单号") private String outTaskOrderNumber; - @ApiModelProperty("类型:1-拣货 2-复核") - @Excel(name = "类型:1-拣货 2-复核") + @ApiModelProperty("类型:1-拣货 2-复核 3-反审记录") + @Excel(name = "类型:1-拣货 2-复核 3-反审记录") private Integer type; @ApiModelProperty("计划数量:拣货异常=分配数量;复核异常=拣货数量") @@ -69,8 +69,8 @@ public class OutOrderAbnormalPO extends BaseVOEntity { @Excel(name = "异常数量 = 作业数量 - 计划数量") private BigDecimal abnormalActualQuantity; - @ApiModelProperty("异常类型: 1-拣货异常 2-复核异常") - @Excel(name = "异常类型: 1-拣货异常 2-复核异常") + @ApiModelProperty("异常类型: 1-拣货异常 2-复核异常 3-反审记录") + @Excel(name = "异常类型: 1-拣货异常 2-复核异常 3-反审记录") private Integer abnormalType; @ApiModelProperty("异常原因") diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/repository/todo/OutOrderAbnormalDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/repository/todo/OutOrderAbnormalDO.java index 6c9328db7..d83fe037d 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/repository/todo/OutOrderAbnormalDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outOrderAbnormal/repository/todo/OutOrderAbnormalDO.java @@ -51,8 +51,8 @@ public class OutOrderAbnormalDO extends BaseVOEntity { @Excel(name = "拣货作业单号") private String outTaskOrderNumber; - @ApiModelProperty("类型:1-拣货 2-复核") - @Excel(name = "类型:1-拣货 2-复核") + @ApiModelProperty("类型:1-拣货 2-复核 3-反审记录") + @Excel(name = "类型:1-拣货 2-复核 3-反审记录") private Integer type; @ApiModelProperty("计划数量") @@ -67,8 +67,8 @@ public class OutOrderAbnormalDO extends BaseVOEntity { @Excel(name = "异常数量 = 作业数量 - 计划数量") private BigDecimal abnormalActualQuantity; - @ApiModelProperty("异常类型: 1-拣货异常 2-复核异常") - @Excel(name = "异常类型: 1-拣货异常 2-复核异常") + @ApiModelProperty("异常类型: 1-拣货异常 2-复核异常 3-反审记录") + @Excel(name = "异常类型: 1-拣货异常 2-复核异常 3-反审记录") private Integer abnormalType; @ApiModelProperty("异常原因") diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingMaterialDetail/entity/PickingMaterialDetail.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingMaterialDetail/entity/PickingMaterialDetail.java index 667c63419..5a0384d29 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingMaterialDetail/entity/PickingMaterialDetail.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingMaterialDetail/entity/PickingMaterialDetail.java @@ -321,4 +321,7 @@ public class PickingMaterialDetail extends BaseVOEntity { private String bondInvtNoGw; private String whNoGw; private String seatNoGw; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/entity/PickingOrder.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/entity/PickingOrder.java index 4db8b013b..8b2693564 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/entity/PickingOrder.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/entity/PickingOrder.java @@ -133,4 +133,7 @@ public class PickingOrder extends BaseVOEntity { private String pushByName; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/facade/IPickingOrderService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/facade/IPickingOrderService.java index 98ea9a016..6cc9e3a25 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/facade/IPickingOrderService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/facade/IPickingOrderService.java @@ -58,6 +58,11 @@ public interface IPickingOrderService extends IService */ public PickingOrderPO getInfoByIdAndType(Long pickingOrderId, Integer type); + /** + * @description 根据id和类型获取指定拣货单信息(归档: 已反审软删 del_flag=2, 供【已反审】tab 详情) + */ + public PickingOrderPO getInfoByIdAndTypeReverse(Long pickingOrderId, Integer type); + /** * @description 根据单号和类型获取指定拣货单信息 diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/mapper/PickingOrderMapper.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/mapper/PickingOrderMapper.java index 241a7513f..6ae3ffd54 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/mapper/PickingOrderMapper.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/mapper/PickingOrderMapper.java @@ -25,12 +25,22 @@ public interface PickingOrderMapper extends BaseMapper */ public PickingOrderPO queryOutOrderById(Long pickingOrderId); + /** + * 根据Id关联出库单查询(归档: 已反审软删 del_flag=2, 供【已反审】tab 详情) + */ + public PickingOrderPO queryOutOrderByIdReverse(Long pickingOrderId); + /** * 根据Id关联波次单查询 */ public PickingOrderPO queryWaveOrderById(Long pickingOrderId); + /** + * 根据Id关联波次单查询(归档: 已反审软删 del_flag=2) + */ + public PickingOrderPO queryWaveOrderByIdReverse(Long pickingOrderId); + /** * 根据单号关联出库单查询 */ diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/persistence/PickingOrderImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/persistence/PickingOrderImpl.java index 85a562eea..02187ecf7 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/persistence/PickingOrderImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/repository/persistence/PickingOrderImpl.java @@ -146,6 +146,23 @@ public class PickingOrderImpl extends ServiceImpl pickingMaterialDetailPOList = pickingMaterialDetailService.queryList(pickingMaterialDetailDO); + for (PickingMaterialDetailPO pickingMaterialDetailPO : pickingMaterialDetailPOList) { + Long materialBaseInfoId = pickingMaterialDetailPO.getMaterialBaseInfoId(); + MaterialBaseInfo materialBaseInfo = materialBaseInfoMapper.selectById(materialBaseInfoId); + if(materialBaseInfo!=null){ + pickingMaterialDetailPO.setMaterialCode(materialBaseInfo.getMaterialCode()); + pickingMaterialDetailPO.setMaterialName(materialBaseInfo.getMaterialName()); + pickingMaterialDetailPO.setCopyCode(materialBaseInfo.getCopyCode()); + } + } + copyCodeReferenceDomainService.fillWeightListOnPickingMaterialDetails(pickingMaterialDetailPOList); + pickingOrderPO.setMaterialDetailList(pickingMaterialDetailPOList); + return pickingOrderPO; + } + /** * @description 整单下发 * @author ZhouGY diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewMaterialDetail.java b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewMaterialDetail.java index c491d51f6..752c61705 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewMaterialDetail.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewMaterialDetail.java @@ -120,4 +120,7 @@ public class ReviewMaterialDetail extends BaseVOEntity { @ApiModelProperty("包装详情id") @Excel(name = "包装详情id") private String packDetailId; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewOrder.java b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewOrder.java index 70e507384..461fb3bca 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewOrder.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/entity/ReviewOrder.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.mhd.common.core.web.domain.BaseVOEntity; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; @@ -58,4 +59,7 @@ public class ReviewOrder extends BaseVOEntity { private Date receiveTime; private String remark; + + @ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)") + private Integer reverseFlag; } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/mapper/ReviewOrderMapper.java b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/mapper/ReviewOrderMapper.java index 7b566a279..de063e2dd 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/mapper/ReviewOrderMapper.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/mapper/ReviewOrderMapper.java @@ -24,6 +24,16 @@ public interface ReviewOrderMapper extends BaseMapper { */ ReviewOrderPO selectHeaderByReviewOrderId(@Param("reviewOrderId") Long reviewOrderId); + /** + * 详情-主表(按主键,归档: 已反审软删 del_flag=2,供【已反审】tab 详情) + */ + ReviewOrderPO selectHeaderByReviewOrderIdReverse(@Param("reviewOrderId") Long reviewOrderId); + + /** + * 详情-明细行(按复核单主键,归档: 已反审软删 del_flag=2) + */ + List queryDetailByReviewOrderIdReverse(@Param("reviewOrderId") Long reviewOrderId); + /** * 详情-主表(按复核单号) */ diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/po/ReviewOrderPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/po/ReviewOrderPO.java index 719ac71c3..221343da7 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/po/ReviewOrderPO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/po/ReviewOrderPO.java @@ -106,4 +106,7 @@ public class ReviewOrderPO extends BaseVOEntity { /** 详情与上架单一致:头字段扁平 + 明细列表 */ @ApiModelProperty("复核明细") private List materialDetailList; + + @ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)") + private Integer reverseFlag; } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/todo/ReviewOrderDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/todo/ReviewOrderDO.java index ee8f2ff20..37d83e50c 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/todo/ReviewOrderDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/reviewOrder/repository/todo/ReviewOrderDO.java @@ -86,4 +86,7 @@ public class ReviewOrderDO extends BaseVOEntity { */ @ApiModelProperty("仅已接收:1-是(receive_time 非空)") private Integer onlyReceived; + + @ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)") + private Integer reverseFlag; } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/entity/StockOutOrder.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/entity/StockOutOrder.java index acd99ede4..8b3955914 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/entity/StockOutOrder.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/entity/StockOutOrder.java @@ -461,4 +461,7 @@ public class StockOutOrder extends BaseVOEntity { @ApiModelProperty("签名备注") private String signatureRemark; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/po/StockOutOrderPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/po/StockOutOrderPO.java index f1d09b638..7390071ab 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/po/StockOutOrderPO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/po/StockOutOrderPO.java @@ -497,4 +497,7 @@ public class StockOutOrderPO extends BaseVOEntity { @ApiModelProperty("签名备注") private String signatureRemark; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 0-无 1-已反审(反审时软删del_flag=2并打标记)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/todo/StockOutOrderDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/todo/StockOutOrderDO.java index 6a53cc15b..c724ce735 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/todo/StockOutOrderDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/todo/StockOutOrderDO.java @@ -538,4 +538,7 @@ public class StockOutOrderDO extends BaseVOEntity { /** PDA出库签名列表专用:作业任务人员模糊查询字段 */ @ApiModelProperty("作业任务人员模糊查询") private String workUserNameLike; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java index ac01e100e..d99a8ffd5 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java @@ -48,6 +48,7 @@ import com.mhd.wms.domain.materialInventory.entity.MaterialInventory; import com.mhd.wms.domain.materialInventory.repository.facade.IMaterialInventoryService; import com.mhd.wms.domain.materialInventory.repository.mapper.MaterialInventoryMapper; import com.mhd.wms.domain.materialInventory.repository.po.MaterialInventoryPO; +import com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryParamDO; import com.mhd.wms.domain.materialMoreDetail.repository.po.MaterialMoreDetailPO; import com.mhd.wms.domain.materialWarehouseControl.repository.facade.IMaterialWarehouseControlService; import com.mhd.wms.domain.materialWarehouseControl.repository.po.MaterialWarehouseControlPO; @@ -63,6 +64,7 @@ import com.mhd.wms.domain.outMaterialDetail.repository.po.OutMaterialDetailPO; import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailBaseDO; import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailDO; import com.mhd.wms.domain.outOrderAbnormal.repository.facade.IOutOrderAbnormalService; +import com.mhd.wms.domain.outOrderAbnormal.entity.OutOrderAbnormal; import com.mhd.wms.domain.outOrderAbnormal.repository.todo.OutOrderAbnormalBaseDO; import com.mhd.wms.domain.pickingMaterialDetail.entity.PickingMaterialDetail; import com.mhd.wms.domain.pickingMaterialDetail.repository.facade.IPickingMaterialDetailService; @@ -888,6 +890,34 @@ public class StockOutOrderDomainService { return stockOutOrderPO; } + /** + * 获取出库单归档详情(已反审): 出库单反审时主表/明细均已软删(del_flag=2), + * 主表 getInfo 走 getById 不滤 del_flag, 明细通过 DO.delFlag=2 查归档数据 + * (out_material_detail queryList XML 支持 delFlag 参数), 供【已反审】tab 查看详情。 + */ + public StockOutOrderPO getReverseInfoChildren(Long outOrderId) { + StockOutOrderPO stockOutOrderPO = stockOutOrderService.getInfo(outOrderId); + if (stockOutOrderPO == null || stockOutOrderPO.getOutOrderNumber() == null) { + throw new ServiceException("出库单不存在"); + } + OutMaterialDetailDO outMaterialDetailDO = new OutMaterialDetailDO(); + outMaterialDetailDO.setOutOrderNumber(stockOutOrderPO.getOutOrderNumber()); + outMaterialDetailDO.setDelFlag(2); + List materialDetailPOList = outMaterialDetailService.queryListChildren(outMaterialDetailDO); + for (OutMaterialDetailPO outMaterialDetailPO : materialDetailPOList) { + String materialNo = outMaterialDetailPO.getMaterialNo(); + List materialBaseInfos = materialBaseInfoMapper.selectList(new QueryWrapper().lambda().eq(MaterialBaseInfo::getMaterialCode, materialNo)); + if (!CollectionUtils.isEmpty(materialBaseInfos) && materialBaseInfos.size() > 0) { + outMaterialDetailPO.setCommodityName(materialBaseInfos.get(0).getMaterialName()); + outMaterialDetailPO.setMaterialCode(materialBaseInfos.get(0).getMaterialCode()); + outMaterialDetailPO.setMaterialName(materialBaseInfos.get(0).getMaterialName()); + outMaterialDetailPO.setCopyCode(materialBaseInfos.get(0).getCopyCode()); + } + } + stockOutOrderPO.setMaterialDetailList(materialDetailPOList); + return stockOutOrderPO; + } + /** * 获取出库单详细信息(PDA复核管理查询详情) * 复核场景下与PC端getCheckInfo保持一致,返回拣货下发时的完整数据(树形结构、拣货汇总、批次属性等) @@ -2625,6 +2655,191 @@ public class StockOutOrderDomainService { } } + /** + * @description oms出库执行单反审(业务单反审时逐执行单调用; 业务单侧仅允许"已审核未出库"单据反审): + * 按WMS出库单状态分支还原库存: + * 1.未出库(状态非9, 常规场景): 还原分配占用(可用+、冻结-, 与 cancelExecutionOrder 取消分配同口径), + * 不动实物库存、不推OMS——实物未被扣减, 加回会虚增库存; 软删库存调整记录。 + * 2.已出库(状态9, 防御分支, 业务单侧已拦截): 镜像交接扣减 doStockOutDeduct(实物/可用加回, 冻结不动), + * 生成库存调整记录【出库反审】并 omsEdit 推送还原OMS预约库存。 + * 3.逻辑删除出库链路单据(软删+reverseFlag=1, 划归【已反审】tab): 配送明细/出库明细/出库单/拣货单及明细/复核单及明细/交接作业单。 + * 4.生成1条出库异常记录【反审记录】(abnormalType=3), 单号前缀 FSYC, 供记录跟踪。 + * 反审原因经入参 remark 透传(OMS侧拼接业务单号+反审原因)。 + * @date 2026/9/8 + */ + @Transactional(rollbackFor = Exception.class) + public void reverseExecutionOrder(StockOutOrder stockOutOrder) { + String outOrderNumber = stockOutOrder.getOutOrderNumber(); + StockOutOrder stockOutOrderDB = stockOutOrderService.getOne(new LambdaQueryWrapper() + .eq(StockOutOrder::getOutOrderNumber, outOrderNumber) + .eq(StockOutOrder::getDelFlag, 1)); + if (stockOutOrderDB == null) { + // 幂等: OMS普通「下发」生成的执行单不推WMS(仅「执行并下发」才推), WMS无此单属正常场景, + // 直接返回成功(无数据可清), 由OMS侧完成OMS侧清理——与入库侧反审"WMS无数据时幂等成功"同口径 + log.info("出库反审幂等:WMS无活动出库单[{}],无需清理", outOrderNumber); + return; + } + // OMS经Feign调用时可能无登录上下文(SecurityUtils会抛异常), 容错获取, 兜底用出库单创建人 + LoginUser loginUser; + try { + loginUser = SecurityUtils.getLoginUser(); + } catch (Exception e) { + loginUser = new LoginUser(); + loginUser.setUserid(stockOutOrderDB.getCreateBy() != null ? stockOutOrderDB.getCreateBy() : 0L); + loginUser.setUsername(stockOutOrderDB.getCreateByName() != null ? stockOutOrderDB.getCreateByName() : "system"); + } + String reverseRemark = stockOutOrder.getRemark(); + //逻辑删除配送明细(所有清理路径统一先清, 与 cancelExecutionOrder 一致) + deliveryDetailsLinkService.update(new UpdateWrapper().lambda() + .set(com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink::getDelFlag, 2) + .eq(com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink::getOrderNumber, outOrderNumber) + .eq(com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink::getDelFlag, 1)); + List materialDetails = outMaterialDetailService.list(new LambdaQueryWrapper() + .eq(OutMaterialDetail::getOutOrderNumber, outOrderNumber) + .eq(OutMaterialDetail::getDelFlag, 1)); + // 出库/未出库分支: 未出库单据(WMS状态非9)实物库存未被扣减, 只还原分配占用(可用+冻结-), + // 不做实物还原也不推OMS——否则会虚增库存; 已出库(9)分支还原实物并推OMS(防御保留, 业务单反审已拦截已出库单) + boolean shipped = stockOutOrderDB.getStatus() != null && stockOutOrderDB.getStatus() == 9; + for (OutMaterialDetail materialDetail : materialDetails) { + MaterialInventory materialInventory = materialInventoryMapper.selectById(materialDetail.getMaterialInventoryId()); + if (!shipped) { + // ===== 未出库: 还原分配占用(与 cancelExecutionOrder 的取消分配同口径) ===== + BigDecimal allocationQuantity = materialDetail.getAllocationQuantity(); + if (materialInventory != null && allocationQuantity != null && allocationQuantity.compareTo(BigDecimal.ZERO) > 0) { + materialInventory.setAllocationQuantity((materialInventory.getAllocationQuantity() == null ? BigDecimal.ZERO : materialInventory.getAllocationQuantity()).add(allocationQuantity)); + materialInventory.setFreezeQuantity((materialInventory.getFreezeQuantity() == null ? BigDecimal.ZERO : materialInventory.getFreezeQuantity()).subtract(allocationQuantity)); + materialInventory.setUpdateTime(new Date()); + materialInventoryMapper.updateById(materialInventory); + } + //逻辑删除库存调整记录 + Long uniqueId = materialDetail.getUniqueId(); + String relateNo = outOrderNumber + "#" + uniqueId; + inventoryAdjustmentRecordService.update(new InventoryAdjustmentRecord(), new LambdaUpdateWrapper() + .set(InventoryAdjustmentRecord::getDelFlag, 2) + .eq(InventoryAdjustmentRecord::getRelateNo, relateNo)); + } else { + // ===== 已出库: 还原实物库存并推送OMS(防御分支) ===== + //还原数量与交接扣减一致: 需复核取复核数量, 否则取拣货数量(为空取计划数量), 见 doStockOutDeduct + BigDecimal effectiveQuantity = Integer.valueOf(1).equals(stockOutOrderDB.getReview()) + ? materialDetail.getCheckQuantity() + : (materialDetail.getPickingQuantity() != null ? materialDetail.getPickingQuantity() : materialDetail.getQuantity()); + Long materialInventoryId = materialDetail.getMaterialInventoryId(); + if (materialInventoryId == null || effectiveQuantity == null || effectiveQuantity.compareTo(BigDecimal.ZERO) <= 0) { + //无可还原库存(未交接或漏传), 仍继续清理单据 + materialDetail.setDelFlag(2); + materialDetail.setReverseFlag(1); + outMaterialDetailService.updateById(materialDetail); + continue; + } + if (materialInventory != null && !"yang_pin_chu_ku".equals(stockOutOrderDB.getBusinessType())) { + //样品出库交接不扣库存(与 doStockOutDeduct 一致), 反审同样跳过还原 + BigDecimal area = materialDetail.getCheckArea() != null ? materialDetail.getCheckArea() : BigDecimal.ZERO; + BigDecimal volume = materialDetail.getCheckVolume() != null ? materialDetail.getCheckVolume() : BigDecimal.ZERO; + BigDecimal grossWeight = materialDetail.getCheckGrossWeight() != null ? materialDetail.getCheckGrossWeight() : BigDecimal.ZERO; + BigDecimal netWeight = materialDetail.getCheckNetWeight() != null ? materialDetail.getCheckNetWeight() : BigDecimal.ZERO; + MaterialInventoryParamDO restoreParam = new MaterialInventoryParamDO(); + restoreParam.setMaterialInventoryId(materialInventoryId); + restoreParam.setMaterialBaseInfoId(materialInventory.getMaterialBaseInfoId()); + restoreParam.setOrganizationId(materialInventory.getOrganizationId()); + restoreParam.setOrganizationName(materialInventory.getOrganizationName()); + restoreParam.setTopOrganizationId(materialInventory.getTopOrganizationId()); + restoreParam.setWarehouseId(materialInventory.getWarehouseId()); + restoreParam.setWarehouseCode(materialInventory.getWarehouseCode()); + restoreParam.setWarehouseName(materialInventory.getWarehouseName()); + restoreParam.setQuantity(effectiveQuantity); + restoreParam.setArea(area); + restoreParam.setVolume(volume); + restoreParam.setGrossWeight(grossWeight); + restoreParam.setNetWeight(netWeight); + restoreParam.setLotNumber(materialInventory.getLotNumber()); + restoreParam.setBatchNumber(materialInventory.getBatchNumber()); + restoreParam.setInOrderNumber(materialInventory.getInOrderNumber()); + restoreParam.setProductionDate(materialInventory.getProductionDate()); + restoreParam.setExpiryDate(materialInventory.getExpiryDate()); + //库存调整记录【出库反审】(kctzjl 内部取调整前快照, 与交接扣减先记录后改库存的顺序一致) + restoreParam.setRelateNo(outOrderNumber + "#" + materialDetail.getUniqueId()); + materialInventoryService.kctzjl(restoreParam, "出库反审", loginUser); + //type=1 上架还原: 实物库存/可用数量加回, 冻结数量不动 + restoreParam.setType("1"); + materialInventoryService.xgkc(restoreParam); + //推送OMS还原预约库存(type=1: OMS侧实物/可用加回, 与交接 omsEdit 扣减互逆) + MaterialInventoryOmsParamDO omsParam = new MaterialInventoryOmsParamDO(); + BeanUtils.copyProperties(restoreParam, omsParam); + omsParam.setKctzType("出库反审"); + omsParam.setLoginUser(loginUser); + omsServiceFeign.omsEdit(omsParam); + } + } + //逻辑删除出库单明细 + materialDetail.setDelFlag(2); + materialDetail.setReverseFlag(1); + outMaterialDetailService.updateById(materialDetail); + } + //逻辑删除出库单(用按单号查出的DB对象更新: 传入对象无主键, 直接updateById不生效, 与 cancelExecutionOrder 一致) + stockOutOrderDB.setDelFlag(2); + stockOutOrderDB.setReverseFlag(1); + stockOutOrderService.updateById(stockOutOrderDB); + //逻辑删除拣货单及拣货明细 + PickingOrder pickingOrder = pickingOrderService.getOne(new LambdaQueryWrapper() + .eq(PickingOrder::getDelFlag, 1) + .eq(PickingOrder::getOrderNumber, outOrderNumber)); + if (pickingOrder != null) { + String pickingOrderNumber = pickingOrder.getPickingOrderNumber(); + List pickingDetails = pickingMaterialDetailService.list(new LambdaQueryWrapper() + .eq(PickingMaterialDetail::getPickingOrderNumber, pickingOrderNumber) + .eq(PickingMaterialDetail::getDelFlag, 1)); + for (PickingMaterialDetail pickingMaterialDetail : pickingDetails) { + pickingMaterialDetail.setDelFlag(2); + pickingMaterialDetail.setReverseFlag(1); + pickingMaterialDetailService.updateById(pickingMaterialDetail); + } + pickingOrder.setDelFlag(2); + pickingOrder.setReverseFlag(1); + pickingOrderService.updateById(pickingOrder); + } + //逻辑删除复核单及复核明细(已复核单据反审时存在) + List reviewOrders = reviewOrderMapper.selectList(new LambdaQueryWrapper() + .eq(ReviewOrder::getDelFlag, 1) + .eq(ReviewOrder::getOutOrderNumber, outOrderNumber)); + for (ReviewOrder reviewOrder : reviewOrders) { + reviewMaterialDetailMapper.update(null, new LambdaUpdateWrapper() + .set(ReviewMaterialDetail::getDelFlag, 2) + .set(ReviewMaterialDetail::getReverseFlag, 1) + .eq(ReviewMaterialDetail::getReviewOrderId, reviewOrder.getReviewOrderId()) + .eq(ReviewMaterialDetail::getDelFlag, 1)); + reviewOrder.setDelFlag(2); + reviewOrder.setReverseFlag(1); + reviewOrderMapper.updateById(reviewOrder); + } + //逻辑删除交接作业单(不需复核单据出库完成时生成) + List handoverTaskOrders = handoverTaskOrderService.list(new LambdaQueryWrapper() + .eq(HandoverTaskOrder::getDelFlag, 1) + .eq(HandoverTaskOrder::getOrderNumber, outOrderNumber)); + for (HandoverTaskOrder handoverTaskOrder : handoverTaskOrders) { + handoverTaskOrder.setDelFlag(2); + handoverTaskOrder.setReverseFlag(1); + handoverTaskOrderService.updateById(handoverTaskOrder); + } + //生成1条出库异常记录【反审记录】, 供记录跟踪 + OutOrderAbnormal reverseAbnormal = new OutOrderAbnormal(); + reverseAbnormal.setOrganizationId(stockOutOrderDB.getOrganizationId()); + reverseAbnormal.setOrganizationName(stockOutOrderDB.getOrganizationName()); + reverseAbnormal.setTopOrganizationId(stockOutOrderDB.getTopOrganizationId()); + reverseAbnormal.setAbnormalNumber(OrderSequence.getOrderCode("FSYC")); + reverseAbnormal.setOutOrderNumber(outOrderNumber); + reverseAbnormal.setType(3); + reverseAbnormal.setAbnormalType(3); + reverseAbnormal.setQuantity(stockOutOrderDB.getQuantity()); + reverseAbnormal.setActualQuantity(stockOutOrderDB.getPickingQuantity()); + reverseAbnormal.setAbnormalActualQuantity(BigDecimal.ZERO); + reverseAbnormal.setAbnormalReason("出库单反审"); + reverseAbnormal.setRemark(reverseRemark); + reverseAbnormal.setCreateBy(loginUser.getUserid()); + reverseAbnormal.setCreateByName(loginUser.getUsername()); + reverseAbnormal.setCreateTime(new Date()); + outOrderAbnormalService.save(reverseAbnormal); + } + @Transactional(rollbackFor = Exception.class) public void omsOrderAddDetail(List outMaterialDetails) { if (CollectionUtils.isEmpty(outMaterialDetails)) { diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/handoverTaskOrder/HandoverTaskOrderDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/handoverTaskOrder/HandoverTaskOrderDTO.java index dfe630a13..ee8013dc8 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/handoverTaskOrder/HandoverTaskOrderDTO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/handoverTaskOrder/HandoverTaskOrderDTO.java @@ -174,4 +174,7 @@ public class HandoverTaskOrderDTO extends BaseVOEntity { private String pictureApp; private String billingJson; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outOrderAbnormal/OutOrderAbnormalDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outOrderAbnormal/OutOrderAbnormalDTO.java index 30f15c850..7a0d775d9 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outOrderAbnormal/OutOrderAbnormalDTO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outOrderAbnormal/OutOrderAbnormalDTO.java @@ -50,8 +50,8 @@ public class OutOrderAbnormalDTO extends BaseVOEntity { @Excel(name = "拣货作业单号") private String outTaskOrderNumber; - @ApiModelProperty("类型:1-拣货 2-复核") - @Excel(name = "类型:1-拣货 2-复核") + @ApiModelProperty("类型:1-拣货 2-复核 3-反审记录") + @Excel(name = "类型:1-拣货 2-复核 3-反审记录") private Integer type; @ApiModelProperty("计划数量") @@ -66,8 +66,8 @@ public class OutOrderAbnormalDTO extends BaseVOEntity { @Excel(name = "异常数量 = 作业数量 - 计划数量") private BigDecimal abnormalActualQuantity; - @ApiModelProperty("异常类型: 1-拣货异常 2-复核异常") - @Excel(name = "异常类型: 1-拣货异常 2-复核异常") + @ApiModelProperty("异常类型: 1-拣货异常 2-复核异常 3-反审记录") + @Excel(name = "异常类型: 1-拣货异常 2-复核异常 3-反审记录") private Integer abnormalType; @ApiModelProperty("异常原因") diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/pickingOrder/PickingOrderDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/pickingOrder/PickingOrderDTO.java index ec6e70228..07571fd3a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/pickingOrder/PickingOrderDTO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/pickingOrder/PickingOrderDTO.java @@ -196,4 +196,7 @@ public class PickingOrderDTO extends BaseVOEntity { @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTimeTo; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/reviewOrder/ReviewOrderDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/reviewOrder/ReviewOrderDTO.java index 623a64d74..3beb8961e 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/reviewOrder/ReviewOrderDTO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/reviewOrder/ReviewOrderDTO.java @@ -86,4 +86,7 @@ public class ReviewOrderDTO extends BaseVOEntity { private Integer tabType; + + @ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)") + private Integer reverseFlag; } diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/stockOutOrder/StockOutOrderDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/stockOutOrder/StockOutOrderDTO.java index 3f4377b96..dc29ee6d8 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/stockOutOrder/StockOutOrderDTO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/stockOutOrder/StockOutOrderDTO.java @@ -513,4 +513,7 @@ public class StockOutOrderDTO extends StockOutOrderBaseDTO { /** PDA出库签名列表专用:作业任务人员模糊查询字段 */ @ApiModelProperty("作业任务人员(模糊查询)") private String workUserNameLike; -} \ No newline at end of file + + @ApiModelProperty("反审标记: 1-已反审(查询【已反审】tab时与delFlag=2一起传入)") + private Integer reverseFlag; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/handoverTaskOrder/HandoverTaskOrderApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/handoverTaskOrder/HandoverTaskOrderApi.java index 75c444212..798a11e4d 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/handoverTaskOrder/HandoverTaskOrderApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/handoverTaskOrder/HandoverTaskOrderApi.java @@ -92,6 +92,16 @@ public class HandoverTaskOrderApi extends BaseController { return AjaxResult.success(handoverTaskOrderApplicationService.getInfo(outTaskOrderId)); } + /** + * 获取交接作业单归档详情(已反审): 反审时交接单已软删(del_flag=2), 供【已反审】tab 查看归档详情 + */ + @ApiOperation("获取交接作业单归档详情(已反审)") + @GetMapping(value = "/getReverseInfo/{outTaskOrderId}") + public AjaxResult getReverseInfo(@PathVariable("outTaskOrderId") Long outTaskOrderId) + { + return AjaxResult.success(handoverTaskOrderApplicationService.getReverseInfo(outTaskOrderId)); + } + @ApiOperation("分配月台") @PostMapping("/allocationPlatform") diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/pickingOrder/PickingOrderApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/pickingOrder/PickingOrderApi.java index ac12e34c6..d671fc454 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/pickingOrder/PickingOrderApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/pickingOrder/PickingOrderApi.java @@ -80,6 +80,15 @@ public class PickingOrderApi extends BaseController { return AjaxResult.success(pickingOrderApplicationService.getInfoByIdAndType(pickingOrderId, type)); } + /** + * 获取拣货单归档详情(已反审): 反审时拣货单已软删(del_flag=2), 供【已反审】tab 查看归档详情 + */ + @ApiOperation("获取拣货单归档详情(已反审)") + @GetMapping(value = "/getReverseInfoByIdAndType/{pickingOrderId}/{type}") + public AjaxResult getReverseInfoByIdAndType(@PathVariable("pickingOrderId") Long pickingOrderId, @PathVariable("type") Integer type) { + return AjaxResult.success(pickingOrderApplicationService.getReverseInfoByIdAndType(pickingOrderId, type)); + } + @ApiOperation("整单下发") @PostMapping("/allDistribution") diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/reviewOrder/ReviewOrderApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/reviewOrder/ReviewOrderApi.java index 2c4e97188..e98818258 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/reviewOrder/ReviewOrderApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/reviewOrder/ReviewOrderApi.java @@ -52,6 +52,15 @@ public class ReviewOrderApi extends BaseController { return AjaxResult.success(reviewOrderApplicationService.getDetailByReviewOrderId(reviewOrderId)); } + /** + * 获取复核单归档详情(已反审): 反审时复核单已软删(del_flag=2), 供【已反审】tab 查看归档详情 + */ + @ApiOperation("获取复核单归档详情(已反审)") + @GetMapping(value = "/getReverseInfo/{reviewOrderId}") + public AjaxResult getReverseInfo(@PathVariable("reviewOrderId") Long reviewOrderId) { + return AjaxResult.success(reviewOrderApplicationService.getReverseDetailByReviewOrderId(reviewOrderId)); + } + @ApiOperation("根据复核单号获取复核单详情") @GetMapping(value = "/getInfoReviewOrderNumber") public AjaxResult getInfoReviewOrderNumber(@RequestParam("reviewOrderNumber") String reviewOrderNumber) { diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java index 80cd2ccba..58c10f37a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java @@ -200,6 +200,16 @@ public class StockOutOrderApi extends BaseController { return AjaxResult.success(stockOutOrderApplicationService.getInfoChildren(outOrderId)); } + /** + * 获取出库单归档详情(已反审): 反审时单据已软删(del_flag=2), 常规详情查不到, + * 本接口不滤主表 del_flag 且明细查 del_flag=2 归档数据, 供【已反审】tab 使用 + */ + @ApiOperation("获取出库单归档详情(已反审)") + @GetMapping(value = "/getReverseInfo/{outOrderId}") + public AjaxResult getReverseInfo(@PathVariable("outOrderId") Long outOrderId) { + return AjaxResult.success(stockOutOrderApplicationService.getReverseInfoChildren(outOrderId)); + } + /** * 根据出库单号获取出库单详细信息 */ @@ -561,6 +571,17 @@ public class StockOutOrderApi extends BaseController { return AjaxResult.success(); } + /** + * oms出库执行单反审(已出库单据回退): 还原实物库存并推送OMS、 + * 逻辑删除出库单/明细/拣货/复核/交接/配送链路数据、生成出库异常记录【反审记录】 + */ + @ApiOperation("oms出库执行单反审") + @PostMapping(value = "/omsReverseExecutionOrder") + public AjaxResult omsReverseExecutionOrder(@RequestBody StockOutOrder stockOutOrder) { + stockOutOrderApplicationService.reverseExecutionOrder(stockOutOrder); + return AjaxResult.success(); + } + /** * oms下发单配送明细保存 */ diff --git a/mhd_wms/src/main/resources/mapper/handoverTaskOrder/HandoverTaskOrderMapper.xml b/mhd_wms/src/main/resources/mapper/handoverTaskOrder/HandoverTaskOrderMapper.xml index 197871c3d..e01a2e528 100644 --- a/mhd_wms/src/main/resources/mapper/handoverTaskOrder/HandoverTaskOrderMapper.xml +++ b/mhd_wms/src/main/resources/mapper/handoverTaskOrder/HandoverTaskOrderMapper.xml @@ -39,6 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -49,7 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" a.platform_code, a.platform_name, a.platform_use_time_id, a.platform_use_start_time, a.platform_use_end_time, a.platform_use_status, a.order_type_code, a.order_type_name, a.expect_time, a.warehouse_id, a.warehouse_code, a.warehouse_name, a.shipper_id, a.shipper_name, a.order_number, a.picking_order_number, a.remark, a.task_distribution, a.task_distribution_time, a.create_time, a.create_by, a.create_by_name, a.update_time, - a.update_by, a.update_by_name, a.del_flag, a.picture_app,a.billing_json + a.update_by, a.update_by_name, a.del_flag, a.reverse_flag, a.picture_app,a.billing_json @@ -138,6 +139,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and a.del_flag = #{delFlag} and a.del_flag = 1 + + and a.reverse_flag = #{reverseFlag} + + + + + + + + + + +