From 69e0f44e279f7763fa9c9a4d105f154db39ee1d8 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 23 五月 2026 11:38:02 +0800
Subject: [PATCH] feat(sales): 添加每件数量字段支持及多业务流程优化
---
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java | 77 +++++++++++++++++++++++++++++++-------
1 files changed, 63 insertions(+), 14 deletions(-)
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
index 9f505aa..66853d9 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.approve.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -24,8 +25,11 @@
import com.ruoyi.basic.enums.RecordTypeEnum;
import com.ruoyi.basic.utils.FileUtil;
import com.ruoyi.common.enums.FileNameType;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.domain.SysNotice;
import com.ruoyi.project.system.domain.SysUser;
@@ -35,8 +39,12 @@
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.sales.mapper.CommonFileMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.mapper.SalesQuotationMapper;
import com.ruoyi.sales.mapper.ShippingInfoMapper;
import com.ruoyi.sales.pojo.CommonFile;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.pojo.SalesQuotation;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import lombok.RequiredArgsConstructor;
@@ -65,6 +73,9 @@
private final CommonFileServiceImpl commonFileService;
private final ISysNoticeService sysNoticeService;
private final PurchaseLedgerMapper purchaseLedgerMapper;
+ private final SalesLedgerProductMapper salesLedgerProductMapper;
+ private final SalesQuotationMapper salesQuotationMapper;
+ private final StockUtils stockUtils;
private final ShippingInfoMapper shippingInfoMapper;
private final ApproveNodeMapper approveNodeMapper;
private final ApproveProcessConfigNodeService approveProcessConfigNodeService;
@@ -80,22 +91,25 @@
.map(ApproveProcessConfigNodeVo::getApproverId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
- if (list.isEmpty()) {
- throw new RuntimeException("娴佺▼涓嶅瓨鍦�");
- }
+ // 鏃犲鏍镐汉閫昏緫娣诲姞
if (CollectionUtils.isEmpty(nodeIds)) {
- autoPassPurchaseApproveIfNoApprover(approveProcessVO);
+ switch (approveProcessVO.getApproveType()){
+ case 5:
+ autoPassPurchaseApproveIfNoApprover(approveProcessVO); // 閲囪喘鍗曟棤瀹℃牳浜洪�昏緫
+ break;
+ case 6:
+ autoPassSalesApproveIfNoApprover(approveProcessVO); // 閿�鍞姤浠锋棤瀹℃牳浜洪�昏緫
+ break;
+ case 7:
+ autoShippingApproveIfNoApprover(approveProcessVO); // 閿�鍞彂璐ф棤瀹℃牳浜洪�昏緫
+ break;
+ }
return;
}
List<SysUser> sysUsers = sysUserMapper.selectUserByIds(nodeIds);
if (CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("瀹℃牳鐢ㄦ埛涓嶅瓨鍦�");
if (sysDept == null) throw new RuntimeException("閮ㄩ棬涓嶅瓨鍦�");
if (sysUser == null) throw new RuntimeException("鐢宠浜轰笉瀛樺湪");
-// String today = LocalDate.now().format(DATE_FORMAT);
-// Long approveId = dailyRedisCounter.incrementAndGetByDb();
-// String formattedCount = String.format("%03d", approveId);
-// //娴佺▼ ID
-// String approveID = today + formattedCount;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
ApproveProcess approveProcess = new ApproveProcess();
String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "", "approve_id");
@@ -138,7 +152,7 @@
.collect(Collectors.joining(","));
approveNodeService.initApproveNodes(nodeIdStr, no, approveProcessVO.getApproveDeptId());
// 闄勪欢缁戝畾
- fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVE_PROCESS, approveProcess.getId(), approveProcessVO.getStorageBlobDTOList());
+ fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVE_PROCESS, approveProcess.getId(), approveProcessVO.getStorageBlobDTOS());
/*娑堟伅閫氱煡*/
Long id = nodeIds.getFirst();
if (approveProcess.getApproveType() == 8) {
@@ -154,14 +168,49 @@
}
}
- private void autoPassPurchaseApproveIfNoApprover(ApproveProcessVO approveProcessVO) {
- if (!Objects.equals(approveProcessVO.getApproveType(), 5)
- || !StringUtils.hasText(approveProcessVO.getApproveReason())) {
- throw new RuntimeException("瀹℃牳鐢ㄦ埛涓嶅瓨鍦�");
+ private void autoPassSalesApproveIfNoApprover(ApproveProcessVO approveProcessVO) {
+ if (!StringUtils.hasText(approveProcessVO.getApproveReason())) {
+ return;
}
+ salesQuotationMapper.update(null, new LambdaUpdateWrapper<SalesQuotation>()
+ .eq(SalesQuotation::getQuotationNo, approveProcessVO.getApproveReason())
+ .set(SalesQuotation::getStatus, "閫氳繃"));
+ }
+
+ private void autoShippingApproveIfNoApprover(ApproveProcessVO approveProcessVO) {
+ if (!StringUtils.hasText(approveProcessVO.getApproveReason())) {
+ return;
+ }
+ ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
+ .eq(ShippingInfo::getShippingNo, approveProcessVO.getApproveReason())
+ .last("limit 1"));
+ if(shippingInfo == null){
+ return;
+ }
+ shippingInfoMapper.update(null, new LambdaUpdateWrapper<ShippingInfo>()
+ .eq(ShippingInfo::getShippingNo, approveProcessVO.getApproveReason())
+ .set(ShippingInfo::getStatus, "瀹℃牳閫氳繃"));
+ //鏇存敼鍑哄簱瀹℃牳鐘舵�侊紙寰呯‘璁ゆ敼鎴愬緟瀹℃牳锛�
+ stockUtils.shipmentStatus(StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), shippingInfo.getId());
+ }
+
+ private void autoPassPurchaseApproveIfNoApprover(ApproveProcessVO approveProcessVO) {
+ if (!StringUtils.hasText(approveProcessVO.getApproveReason())) {
+ return;
+ }
+
purchaseLedgerMapper.update(null, new LambdaUpdateWrapper<PurchaseLedger>()
.eq(PurchaseLedger::getPurchaseContractNumber, approveProcessVO.getApproveReason())
.set(PurchaseLedger::getApprovalStatus, 3));
+ //閲囪喘鍏ュ簱
+ PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
+ .eq(PurchaseLedger::getPurchaseContractNumber, approveProcessVO.getApproveReason())
+ .last("limit 1"));
+ List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new QueryWrapper<SalesLedgerProduct>()
+ .lambda().eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId()).eq(SalesLedgerProduct::getType, 2));
+ for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) {
+ stockUtils.addStockWithBatchNo(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId(),purchaseLedger.getPurchaseContractNumber()+"-"+salesLedgerProduct.getId());
+ }
}
@Override
--
Gitblit v1.9.3