From 663120b055dfdced4a67ce1d4160ae8ca19b4190 Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期四, 12 三月 2026 18:04:21 +0800
Subject: [PATCH] 修改工单所需数量
---
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 76 +++++++++++++++++++++++++++++--------
1 files changed, 59 insertions(+), 17 deletions(-)
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index acab688..08f431c 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -5,9 +5,10 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.OrderUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.production.dto.ProductStructureDto;
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
@@ -19,19 +20,19 @@
import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
-import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.service.ISalesLedgerProductService;
import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
@@ -70,6 +71,8 @@
private ProductionProductOutputMapper productionProductOutputMapper;
private ProductionProductInputMapper productionProductInputMapper;
private QualityInspectMapper qualityInspectMapper;
+ private ProductBomMapper productBomMapper;
+ private ProductStructureMapper productStructureMapper;
@Override
public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -98,10 +101,10 @@
if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
- noInvoiceNum = ledgerProduct.getQuantity().subtract(invoiceNum);
- noInvoiceAmount = ledgerProduct.getTaxInclusiveTotalPrice().subtract(invoiceAmount);
}
}
+ noInvoiceNum = ledgerProduct.getQuantity().subtract(invoiceNum);
+ noInvoiceAmount = ledgerProduct.getTaxInclusiveTotalPrice().subtract(invoiceAmount);
ledgerProduct.setInvoiceNum(invoiceNum);
ledgerProduct.setInvoiceAmount(invoiceAmount);
ledgerProduct.setNoInvoiceNum(noInvoiceNum);
@@ -213,18 +216,18 @@
Long salesLedgerId = salesLedgerProduct.getSalesLedgerId();
if (salesLedgerProduct.getId() == null) {
result = salesLedgerProductMapper.insert(salesLedgerProduct);
- addProductionData(salesLedgerProduct);
+// addProductionData(salesLedgerProduct,2);
} else {
//鏌ヨ鍘熸湰鐨勪骇鍝佸瀷鍙穒d
salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
result = salesLedgerProductMapper.updateById(salesLedgerProduct);
/*鍒犻櫎瀵瑰簲鐨勭敓浜ф暟鎹苟閲嶆柊鏂板*/
- deleteProductionData(Arrays.asList(salesLedgerProduct.getId()));
- // 鍒犻櫎鐢熶骇鏍哥畻鏁版嵁
- LambdaQueryWrapper<SalesLedgerProductionAccounting> reportWrapper = new LambdaQueryWrapper<>();
- reportWrapper.in(SalesLedgerProductionAccounting::getSalesLedgerId, salesLedgerId);
- salesLedgerProductionAccountingMapper.delete(reportWrapper);
- addProductionData(salesLedgerProduct);
+// deleteProductionData(Arrays.asList(salesLedgerProduct.getId()));
+// // 鍒犻櫎鐢熶骇鏍哥畻鏁版嵁
+// LambdaQueryWrapper<SalesLedgerProductionAccounting> reportWrapper = new LambdaQueryWrapper<>();
+// reportWrapper.in(SalesLedgerProductionAccounting::getSalesLedgerId, salesLedgerId);
+// salesLedgerProductionAccountingMapper.delete(reportWrapper);
+// addProductionData(salesLedgerProduct,2);
}
// 濡傛灉鎻掑叆鎴栨洿鏂版垚鍔燂紝骞朵笖鏈� salesLedgerId锛屾墠缁х画鏇存柊涓昏〃閲戦
@@ -259,12 +262,21 @@
/**
* 鏂板鐢熶骇鏁版嵁
+ * @param salesLedgerProduct
+ * @param type 1=鐢熶骇 2=閿�鍞�
*/
+ @Transactional(rollbackFor = Exception.class)
public void addProductionData(SalesLedgerProduct salesLedgerProduct) {
+ // 鍥犱负鐢熶骇闇�姹傛敼鍔紝闇�瑕侀澶栫粰sales_ledger_product鏂板鏁版嵁锛宼ype锛�3
+ salesLedgerProduct.setType(3);
+ salesLedgerProduct.setRegister(SecurityUtils.getLoginUser().getNickName());
+ salesLedgerProduct.setRegisterDate(LocalDateTime.now());
+
+ salesLedgerProductMapper.insert(salesLedgerProduct);
ProductOrder productOrder = new ProductOrder();
productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
productOrder.setProductModelId(salesLedgerProduct.getId());
- productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId()));
+ productOrder.setNpsNo(OrderUtils.countTodayByCreateTime(productOrderMapper, "SC"));
productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
productOrderMapper.insert(productOrder);
@@ -274,6 +286,13 @@
.orderByDesc(ProcessRoute::getCreateTime));
if (processRoutes.size()>0){
ProcessRoute processRoute = processRoutes.get(0);
+ // 鑾峰彇浜у搧bom淇℃伅
+ List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomId(processRoute.getBomId());
+ if (salesLedgerProduct.getQuantity() == null) {
+ throw new RuntimeException("鏈�缁堢敓浜ф暟閲忎笉瀛樺湪");
+ }
+ Map<Long, BigDecimal> quantities = countWorkOrderNum(productStructureDtos, salesLedgerProduct.getQuantity());
+
//鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
ProductProcessRoute productProcessRoute = new ProductProcessRoute();
productProcessRoute.setProductModelId(processRoute.getProductModelId());
@@ -319,7 +338,7 @@
ProductWorkOrder productWorkOrder = new ProductWorkOrder();
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
productWorkOrder.setProductOrderId(productOrder.getId());
- productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
+ productWorkOrder.setPlanQuantity(quantities.get(processRouteItem.getProcessId()));
productWorkOrder.setWorkOrderNo(workOrderNoStr);
productWorkOrder.setStatus(1);
@@ -330,6 +349,29 @@
productOrder.setRouteId(processRoute.getId());
productOrderMapper.updateById(productOrder);
}
+ }
+
+ /**
+ * 璁$畻宸ュ崟鏁伴噺
+ * productStructures bom淇℃伅
+ * quantity 闇�姹傛暟閲�
+ */
+ public Map<Long, BigDecimal> countWorkOrderNum(List<ProductStructureDto> productStructures, BigDecimal quantity) {
+ BigDecimal originalQuantity = quantity;
+ Map<Long, BigDecimal> resultMap = new HashMap<>();
+ resultMap.put(productStructures.get(productStructures.size() - 1).getProcessId(), quantity);
+ for (int i = productStructures.size() - 2; i >= 0; i--) {
+ ProductStructureDto productStructureDto = productStructures.get(i);
+ Assert.notNull(productStructureDto.getUnitQuantity(), "鍗曚綅浜у嚭鎵�闇�鏁伴噺涓嶅瓨鍦�");
+ if (productStructureDto.getMaterialType().equals("0")) {
+ quantity = quantity.multiply(productStructureDto.getUnitQuantity());
+ resultMap.put(productStructureDto.getProcessId(), quantity);
+ } else {
+ resultMap.put(productStructureDto.getProcessId(), originalQuantity.multiply(productStructureDto.getUnitQuantity()));
+ }
+
+ }
+ return resultMap;
}
/**
@@ -422,9 +464,9 @@
salesLedgerProductDtoIPage.getRecords().forEach(item -> {
// 鍒ゆ柇鐘舵��
if(item.getTaxInclusiveTotalPrice().compareTo(item.getInvoiceTotal()) == 0){
- item.setStatusName("宸插畬鎴愪粯娆�");
+ item.setStatusName("宸插畬鎴愬洖娆�");
}else{
- item.setStatusName("鏈畬鎴愪粯娆�");
+ item.setStatusName("鏈畬鎴愬洖娆�");
}
});
return salesLedgerProductDtoIPage;
--
Gitblit v1.9.3