From ff5614116fe3f9a8d515ba7feb3c2e408d6af16a Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期六, 28 三月 2026 10:50:56 +0800
Subject: [PATCH] fix: 销售台账产品信息数据返回缺失
---
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 150 +++++++++++++++++++++++++++++++++++--------------
1 files changed, 106 insertions(+), 44 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 68b52cb..ac469e8 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -6,6 +6,8 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.mapper.ProductModelMapper;
+import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
import com.ruoyi.framework.web.domain.R;
@@ -14,7 +16,9 @@
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.impl.ProductOrderServiceImpl;
+import com.ruoyi.purchase.dto.SimpleReturnOrderGroupDto;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.mapper.PurchaseReturnOrderProductsMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.pojo.QualityInspect;
@@ -24,9 +28,8 @@
import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.mapper.ShippingInfoMapper;
-import com.ruoyi.sales.pojo.SalesLedger;
-import com.ruoyi.sales.pojo.SalesLedgerProduct;
-import com.ruoyi.sales.pojo.ShippingInfo;
+import com.ruoyi.sales.pojo.*;
+import com.ruoyi.sales.service.ISalesLedgerProductProcessBindService;
import com.ruoyi.sales.service.ISalesLedgerProductService;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.pojo.StockInventory;
@@ -62,6 +65,7 @@
private SalesLedgerMapper salesLedgerMapper;
private PurchaseLedgerMapper purchaseLedgerMapper;
+ private PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper;
private ProductOrderMapper productOrderMapper;
@@ -73,6 +77,7 @@
private ProcessRouteMapper processRouteMapper;
private ProductProcessRouteMapper productProcessRouteMapper;
+ private ProductModelMapper productModelMapper;
private ProductWorkOrderMapper productWorkOrderMapper;
private ProductionProductMainMapper productionProductMainMapper;
@@ -84,7 +89,7 @@
private StockUtils stockUtils;
-
+ private final ISalesLedgerProductProcessBindService salesLedgerProductProcessBindService;
@Autowired
private ProductStructureMapper productStructureMapper;
@@ -104,50 +109,103 @@
// queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
// .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
- if(!CollectionUtils.isEmpty(salesLedgerProducts)){
- salesLedgerProducts.forEach(item -> {
- // 鍙戣揣淇℃伅
- ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
- .eq(ShippingInfo::getSalesLedgerProductId, item.getId())
- .orderByDesc(ShippingInfo::getCreateTime)
- .last("limit 1"));
- if(shippingInfo != null){
- item.setShippingDate(shippingInfo.getShippingDate());
- item.setShippingCarNumber(shippingInfo.getShippingCarNumber());
- item.setShippingStatus(shippingInfo.getStatus());
- item.setExpressCompany(shippingInfo.getExpressCompany());
- item.setExpressNumber(shippingInfo.getExpressNumber());
- }
- });
- // 寮�绁�
+ if (CollectionUtils.isEmpty(salesLedgerProducts)) {
+ return salesLedgerProducts;
+ }
+
+ salesLedgerProducts.forEach(item -> {
+ ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
+ .eq(ShippingInfo::getSalesLedgerProductId, item.getId())
+ .orderByDesc(ShippingInfo::getCreateTime)
+ .last("limit 1"));
+ if (shippingInfo != null) {
+ item.setShippingDate(shippingInfo.getShippingDate());
+ item.setShippingCarNumber(shippingInfo.getShippingCarNumber());
+ item.setShippingStatus(shippingInfo.getStatus());
+ item.setExpressCompany(shippingInfo.getExpressCompany());
+ item.setExpressNumber(shippingInfo.getExpressNumber());
+ }
+ });
+
+ if (salesLedgerProduct.getSalesLedgerId() != null) {
InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto();
invoiceRegistrationProductDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId().intValue());
List<InvoiceRegistrationProductDto> invoiceRegistrationProductDtoList = invoiceRegistrationProductMapper.invoiceRegistrationProductList(invoiceRegistrationProductDto);
- // 缁熻寮�绁ㄧ櫥璁颁骇鍝佺殑宸插紑绁ㄦ暟/宸插紑绁ㄩ噾棰�
if (!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)) {
for (SalesLedgerProduct ledgerProduct : salesLedgerProducts) {
BigDecimal invoiceNum = BigDecimal.ZERO;
BigDecimal invoiceAmount = BigDecimal.ZERO;
- BigDecimal noInvoiceNum = BigDecimal.ZERO;
- BigDecimal noInvoiceAmount = BigDecimal.ZERO;
for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) {
- if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
- invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
+ 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);
+ BigDecimal ledgerQuantity = ledgerProduct.getQuantity() == null ? BigDecimal.ZERO : ledgerProduct.getQuantity();
+ BigDecimal ledgerTotalPrice = ledgerProduct.getTaxInclusiveTotalPrice() == null ? BigDecimal.ZERO : ledgerProduct.getTaxInclusiveTotalPrice();
ledgerProduct.setInvoiceNum(invoiceNum);
ledgerProduct.setInvoiceAmount(invoiceAmount);
- ledgerProduct.setNoInvoiceNum(noInvoiceNum);
- ledgerProduct.setNoInvoiceAmount(noInvoiceAmount);
-
-
+ ledgerProduct.setNoInvoiceNum(ledgerQuantity.subtract(invoiceNum));
+ ledgerProduct.setNoInvoiceAmount(ledgerTotalPrice.subtract(invoiceAmount));
}
}
-
}
+
+ List<Long> productIds = salesLedgerProducts.stream()
+ .map(SalesLedgerProduct::getId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ Map<Long, BigDecimal> returnOrderGroupDtoMap = Collections.emptyMap();
+ if (!CollectionUtils.isEmpty(productIds)) {
+ List<SimpleReturnOrderGroupDto> groupListByProductIds = purchaseReturnOrderProductsMapper.getReturnOrderGroupListByProductIds(productIds);
+ if (!CollectionUtils.isEmpty(groupListByProductIds)) {
+ returnOrderGroupDtoMap = groupListByProductIds.stream()
+ .collect(Collectors.toMap(SimpleReturnOrderGroupDto::getSalesLedgerProductId,
+ SimpleReturnOrderGroupDto::getSumReturnQuantity,
+ BigDecimal::add));
+ }
+ }
+
+ List<Long> productModelIds = salesLedgerProducts.stream()
+ .map(SalesLedgerProduct::getProductModelId)
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
+ Map<Long, ProductModel> productModelMap = Collections.emptyMap();
+ if (!CollectionUtils.isEmpty(productModelIds)) {
+ List<ProductModel> productModels = productModelMapper.selectBatchIds(productModelIds);
+ if (!CollectionUtils.isEmpty(productModels)) {
+ productModelMap = productModels.stream()
+ .collect(Collectors.toMap(ProductModel::getId, Function.identity()));
+ }
+ }
+
+ Map<Long, BigDecimal> finalReturnOrderGroupDtoMap = returnOrderGroupDtoMap;
+ Map<Long, ProductModel> finalProductModelMap = productModelMap;
+ salesLedgerProducts.forEach(item -> {
+ if (item.getFutureTickets() == null || item.getFutureTickets().compareTo(BigDecimal.ZERO) == 0) {
+ item.setFutureTickets(BigDecimal.ZERO);
+ }
+ if (item.getFutureTicketsAmount() == null || item.getFutureTicketsAmount().compareTo(BigDecimal.ZERO) == 0) {
+ item.setFutureTicketsAmount(BigDecimal.ZERO);
+ }
+ if (item.getApproveStatus() == null || item.getApproveStatus() != 2) {
+ Integer hasSufficientStock = item.getHasSufficientStock();
+ if (hasSufficientStock != null && hasSufficientStock == 0) {
+ item.setApproveStatus(0);
+ } else {
+ item.setApproveStatus(1);
+ }
+ }
+ BigDecimal returnQuality = finalReturnOrderGroupDtoMap.getOrDefault(item.getId(), BigDecimal.ZERO);
+ item.setReturnQuality(returnQuality);
+ BigDecimal quantity = item.getQuantity() == null ? BigDecimal.ZERO : item.getQuantity();
+ item.setAvailableQuality(quantity.subtract(returnQuality));
+ ProductModel productModel = finalProductModelMap.get(item.getProductModelId());
+ if (productModel != null) {
+ item.setThickness(productModel.getThickness());
+ }
+ });
return salesLedgerProducts;
}
@@ -166,7 +224,7 @@
//鍒犻櫎鍙戣揣淇℃伅
List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
.in(ShippingInfo::getSalesLedgerProductId, Arrays.asList(ids)));
- if(!CollectionUtils.isEmpty(shippingInfos)){
+ if (!CollectionUtils.isEmpty(shippingInfos)) {
shippingInfoService.delete(shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList()));
}
@@ -203,12 +261,12 @@
@Transactional(rollbackFor = Exception.class)
public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) {
// 寰呭洖娆撅紝浠樻
- if(salesLedgerProduct.getType().equals(1)){
+ if (salesLedgerProduct.getType().equals(1)) {
salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getInvoiceTotal()));
//鏈紑绁ㄦ暟閲�+閲戦
salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
- }else{
+ } else {
salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getTicketsTotal()));
// 鏈潵绁ㄦ暟閲�+閲戦
salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
@@ -258,6 +316,9 @@
PurchaseLedger.class
);
}
+
+ // 娓呯┖閿�鍞骇鍝佺粦瀹氱殑鍔犲伐
+ salesLedgerProductProcessBindService.updateProductProcessBind(salesLedgerProduct.getSalesProductProcessList(), salesLedgerProduct.getId());
}
return result;
}
@@ -279,7 +340,7 @@
List<ProcessRoute> processRoutes = processRouteMapper.selectList(new QueryWrapper<ProcessRoute>().lambda()
.eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())
.orderByDesc(ProcessRoute::getCreateTime));
- if (processRoutes.size()>0){
+ if (processRoutes.size() > 0) {
ProcessRoute processRoute = processRoutes.get(0);
//鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
ProductProcessRoute productProcessRoute = new ProductProcessRoute();
@@ -316,7 +377,7 @@
}
}
// 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
- String workOrderNoStr ="GD"+ String.format("%s%03d", datePrefix, sequenceNumber);
+ String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
ProductWorkOrder productWorkOrder = new ProductWorkOrder();
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
productWorkOrder.setProductOrderId(productOrder.getId());
@@ -431,9 +492,9 @@
IPage<SalesLedgerProductDto> salesLedgerProductDtoIPage = salesLedgerProductMapper.listPage(page, salesLedgerProduct);
salesLedgerProductDtoIPage.getRecords().forEach(item -> {
// 鍒ゆ柇鐘舵��
- if(item.getTaxInclusiveTotalPrice().compareTo(item.getInvoiceTotal()) == 0){
+ if (item.getTaxInclusiveTotalPrice().compareTo(item.getInvoiceTotal()) == 0) {
item.setStatusName("宸插畬鎴愪粯娆�");
- }else{
+ } else {
item.setStatusName("鏈畬鎴愪粯娆�");
}
});
@@ -445,9 +506,9 @@
IPage<SalesLedgerProductDto> salesLedgerProductDtoIPage = salesLedgerProductMapper.listPagePurchaseLedger(page, salesLedgerProduct);
salesLedgerProductDtoIPage.getRecords().forEach(item -> {
// 鍒ゆ柇鐘舵��
- if(item.getTaxInclusiveTotalPrice().compareTo(item.getTicketsTotal()) == 0){
+ if (item.getTaxInclusiveTotalPrice().compareTo(item.getTicketsTotal()) == 0) {
item.setStatusName("宸插畬鎴愪粯娆�");
- }else{
+ } else {
item.setStatusName("鏈畬鎴愪粯娆�");
}
});
@@ -488,6 +549,7 @@
throw new RuntimeException("鍔ㄦ�佹洿鏂颁富琛ㄩ噾棰濆け璐�", e);
}
}
+
@Override
public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
//鑾峰彇浜у搧鏈�鏂扮殑宸ヨ壓璺嚎
@@ -506,7 +568,7 @@
//鎵�闇�鏁伴噺
BigDecimal multiply = salesLedgerProduct.getQuantity().multiply(productStructureDto.getUnitQuantity());
- BigDecimal subtract =stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
+ BigDecimal subtract = stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
count++;
stringBuffer.append(productStructureDto.getProductName())
@@ -517,9 +579,9 @@
.append(System.lineSeparator());
}
}
- if (count>0) {
+ if (count > 0) {
return R.fail(stringBuffer.toString());
- }else {
+ } else {
return R.ok();
}
}
--
Gitblit v1.9.3