From 278bc72697e323e1a162f72c8572163033bd12ca Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 22 六月 2026 21:57:56 +0800
Subject: [PATCH] feat: 审批完成自动发货
---
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java | 64 ++++++++++++++++++++++---------
1 files changed, 45 insertions(+), 19 deletions(-)
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
index c42eeab..48cc144 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -13,6 +13,7 @@
import com.ruoyi.approve.service.IApproveNodeService;
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.device.mapper.DeviceRepairMapper;
import com.ruoyi.device.pojo.DeviceRepair;
@@ -259,26 +260,27 @@
}
// 鍑哄簱瀹℃壒淇敼 (璁㈠崟绾у埆)
if(approveProcess.getApproveType().equals(7)){
- String[] split = approveProcess.getApproveReason().split(":");
- if (split.length > 1) {
- String identifier = split[1];
- // 鏌ユ壘閿�鍞彴璐�
- SalesLedger salesLedger = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>()
- .eq(SalesLedger::getSalesContractNo, identifier)
- .last("limit 1"));
+ String scanRemark = approveProcess.getApproveRemark();
+ if (org.springframework.util.StringUtils.hasText(scanRemark) && scanRemark.startsWith("SCAN_SHIP_DELIVERY_JSON:")) {
+ salesLedgerService.onScanShipDeliveryApproveOutcome(approveProcess, status);
+ } else {
+ String[] split = approveProcess.getApproveReason().split(":");
+ if (split.length > 1) {
+ String identifier = split[1];
+ SalesLedger salesLedger = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>()
+ .eq(SalesLedger::getSalesContractNo, identifier)
+ .last("limit 1"));
- if (salesLedger != null) {
- if(status.equals(2)){
- // 瀹℃壒瀹屾垚 -> 淇敼鐘舵�佷负瀹℃牳閫氳繃锛屼笉鎵i櫎搴撳瓨锛堟墸闄ゅ簱瀛樺湪鍙戣揣鍙拌处琛ュ厖淇℃伅锛�
- updateSalesLedgerDeliveryStatus(salesLedger.getId(), 4);
- updateShippingInfoStatusByOrder(salesLedger.getId(), "瀹℃牳閫氳繃");
- } else if(status.equals(3)){
- updateSalesLedgerDeliveryStatus(salesLedger.getId(), 3);
- // 鏇存柊鍏宠仈鐨勫彂璐ц褰曚负瀹℃牳鎷掔粷
- updateShippingInfoStatusByOrder(salesLedger.getId(), "瀹℃牳鎷掔粷");
- } else if(status.equals(1)){
- updateSalesLedgerDeliveryStatus(salesLedger.getId(), 2);
- updateShippingInfoStatusByOrder(salesLedger.getId(), "瀹℃牳涓�");
+ if (salesLedger != null) {
+ if(status.equals(2)){
+ executeStandardShipmentApproved(salesLedger.getId());
+ } else if(status.equals(3)){
+ updateSalesLedgerDeliveryStatus(salesLedger.getId(), 3);
+ updateShippingInfoStatusByOrder(salesLedger.getId(), "瀹℃牳鎷掔粷");
+ } else if(status.equals(1)){
+ updateSalesLedgerDeliveryStatus(salesLedger.getId(), 2);
+ updateShippingInfoStatusByOrder(salesLedger.getId(), "瀹℃牳涓�");
+ }
}
}
}
@@ -396,6 +398,30 @@
.eq(ShippingInfo::getSalesLedgerId, salesLedgerId));
}
+ private void executeStandardShipmentApproved(Long salesLedgerId) {
+ if (salesLedgerId == null) return;
+ List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
+ .eq(ShippingInfo::getSalesLedgerId, salesLedgerId)
+ .ne(ShippingInfo::getStatus, "宸插彂璐�"));
+
+ Date now = new Date();
+ for (ShippingInfo byId : shippingInfos) {
+ SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId());
+ if (salesLedgerProduct != null) {
+ stockUtils.substractStock(salesLedgerProduct.getSalesLedgerId(), salesLedgerProduct.getId(), salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), byId.getId());
+ BigDecimal shipped = salesLedgerProduct.getShippedQuantity() == null ? BigDecimal.ZERO : salesLedgerProduct.getShippedQuantity();
+ salesLedgerProduct.setShippedQuantity(shipped.add(salesLedgerProduct.getQuantity() == null ? BigDecimal.ZERO : salesLedgerProduct.getQuantity()));
+ salesLedgerProductMapper.updateById(salesLedgerProduct);
+ }
+ byId.setStatus("宸插彂璐�");
+ if (byId.getShippingDate() == null) {
+ byId.setShippingDate(now);
+ }
+ shippingInfoMapper.updateById(byId);
+ }
+ updateSalesLedgerDeliveryStatus(salesLedgerId, 5);
+ }
+
private void updateSalesLedgerDeliveryStatus(Long salesLedgerId, Integer status) {
if (salesLedgerId == null) return;
SalesLedger salesLedger = salesLedgerMapper.selectById(salesLedgerId);
--
Gitblit v1.9.3