From 970952d9fa1e53898545a452d8d846a1fa94c83b Mon Sep 17 00:00:00 2001 From: Timi Date: Mon, 21 Sep 2026 23:59:13 +0800 Subject: [PATCH] clone fulfillment attach to stock out --- .../implement/AttachmentServiceImplement.java | 1 + .../gao/service/GaoProductStockService.java | 5 +++ .../GaoOrderFulfillmentServiceImplement.java | 4 ++- .../GaoProductStockServiceImplement.java | 31 ++++++++++++++++++- 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java b/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java index a515e6f..9586f87 100644 --- a/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java +++ b/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java @@ -184,6 +184,7 @@ public class AttachmentServiceImplement extends AbstractEntityService outForFulfillment(String storeId, String bizId, List items, String requestNo, String operatorUserId); + /// 履约出库并复制履约附件到出库流水 + List outForFulfillment(String storeId, String bizId, List items, String requestNo, + String operatorUserId, List attachmentList); + /// 履约库存冲正入库 List revokeForFulfillment(String storeId, String bizId, List items, String requestNo, String operatorUserId); diff --git a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoOrderFulfillmentServiceImplement.java b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoOrderFulfillmentServiceImplement.java index 60ac386..b4c032f 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoOrderFulfillmentServiceImplement.java +++ b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoOrderFulfillmentServiceImplement.java @@ -261,8 +261,10 @@ public class GaoOrderFulfillmentServiceImplement extends AbstractEntityService attachmentList = attachmentService.listByBizId( + Attachment.BizType.GAO_ORDER_FULFILLMENT, fulfillment.getId()); productStockService.outForFulfillment(order.getStoreId(), fulfillment.getId(), stockItems, - stockRequestNo(fulfillment, "OUT"), verifierUserId); + stockRequestNo(fulfillment, "OUT"), verifierUserId, attachmentList); } TimiException.requiredTrue(1 == mapper.updateStatus(fulfillment.getId(), GaoOrderFulfillment.Status.VERIFIED, verifierUserId, Time.now(), request.getReason()), "履约状态已变化"); diff --git a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoProductStockServiceImplement.java b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoProductStockServiceImplement.java index 5cca2e0..5a077bb 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoProductStockServiceImplement.java +++ b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoProductStockServiceImplement.java @@ -232,6 +232,14 @@ public class GaoProductStockServiceImplement implements GaoProductStockService { return executeInternal(storeId, bizId, items, requestNo, operatorUserId, GaoProductStockRecord.OperationType.ORDER_OUT, null); } + @Override + @Transactional(TimiServerDBConfig.ROLLBACKER) + public List outForFulfillment(String storeId, String bizId, List items, String requestNo, + String operatorUserId, List attachmentList) { + return executeInternal(storeId, bizId, items, requestNo, operatorUserId, + GaoProductStockRecord.OperationType.ORDER_OUT, null, null, attachmentList); + } + @Override @Transactional(TimiServerDBConfig.ROLLBACKER) public List revokeForFulfillment(String storeId, String bizId, List items, String requestNo, String operatorUserId) { @@ -445,7 +453,11 @@ public class GaoProductStockServiceImplement implements GaoProductStockService { record.setOperatorUserId(operatorUserId); record.setOccurredAt(TimiJava.defaultIfNull(occurredAt, Time.now())); record.setRemark(remark); - recordService.createOperationRecord(record, attachmentList); + recordService.createOperationRecord(record, + operationType == GaoProductStockRecord.OperationType.ORDER_OUT ? null : attachmentList); + if (operationType == GaoProductStockRecord.OperationType.ORDER_OUT) { + copyAttachments(record.getId(), attachmentList); + } stock.setOnHandQuantity(onHandAfter); stock.setReservedQuantity(reservedAfter); stock.setUpdatedBy(operatorUserId); @@ -455,6 +467,23 @@ public class GaoProductStockServiceImplement implements GaoProductStockService { return result; } + /// 复制履约附件到出库流水 + /// + /// @param recordId 出库流水 ID + /// @param sourceAttachmentList 履约附件 + private void copyAttachments(String recordId, List sourceAttachmentList) { + for (Attachment source : TimiJava.safeIterable(sourceAttachmentList)) { + if (source == null) { + continue; + } + TimiException.required(source.getId(), "履约附件 ID 不能为空"); + Attachment copy = attachmentService.clone(source.getId()); + copy.setBizType(Attachment.BizType.GAO_STOCK_RECORD); + copy.setBizId(recordId); + attachmentService.update(copy); + } + } + private GaoProductStock lockOrCreateStock(String storeId, String skuId) { GaoProductStock stock = stockMapper.selectForUpdate(storeId, skuId); if (stock != null) {