From 3bd356cdf09bc2e67dfe0ce9e6dc1b4dfe0e1bec Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 20 一月 2026 13:16:14 +0800
Subject: [PATCH] feat(production): 新增入库添加产品规格型号id,销售台账添加产品校验库存是否充足
---
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 59 +++++++++++++++++++++++++++--
src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java | 3 +
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java | 3 +
src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java | 2
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml | 33 ++++++++--------
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java | 3 +
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java | 10 ++++
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java | 3 +
src/main/java/com/ruoyi/procurementrecord/dto/Details.java | 2 +
9 files changed, 94 insertions(+), 24 deletions(-)
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/Details.java b/src/main/java/com/ruoyi/procurementrecord/dto/Details.java
index b2e5a21..2af2db0 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/Details.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/Details.java
@@ -13,4 +13,6 @@
private Integer id;
private BigDecimal inboundQuantity;
private BigDecimal warnNum;
+ private Long productModelId;
+
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java
index d8004b4..4bfa9ee 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java
@@ -93,4 +93,7 @@
@Excel(name = "涓嶅惈绋庢�讳环")
private BigDecimal taxExclusiveTotalPrice;
+
+ private Long productModelId;
+
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
index 28cee3c..d3bd7c0 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -76,4 +76,7 @@
*/
@TableField(fill = FieldFill.INSERT)
private Long tenantId;
+
+
+ private Long productModelId;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
index 6e103b4..19010f4 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -417,7 +417,8 @@
.createUser(loginUser.getUserId())
.updateTime(LocalDateTime.now())
.updateUser(loginUser.getUserId())
- .createBy(procurementDto.getNickName());
+ .createBy(procurementDto.getNickName())
+ .productModelId(detail.getProductModelId());
this.save(procurementRecordBuilder.build());
// 鍏ュ簱鎴愬姛鍑忔帀閲囪喘鏁伴噺
// LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>();
diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
index 6a507bc..4dfe300 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -190,7 +190,7 @@
public AjaxResult listPage(Page page, PurchaseLedgerDto purchaseLedger) {
IPage<PurchaseLedgerDto> purchaseLedgerDtoIPage = purchaseLedgerService.selectPurchaseLedgerListPage(page ,purchaseLedger);
//杩囨护鎺塧pprovalStatus=3鐨勮褰�
- purchaseLedgerDtoIPage.getRecords().removeIf(purchaseLedgerDto -> purchaseLedgerDto.getApprovalStatus() == 3);
+ purchaseLedgerDtoIPage.getRecords().removeIf(purchaseLedgerDto -> Integer.valueOf(3).equals(purchaseLedgerDto.getApprovalStatus()));
return AjaxResult.success(purchaseLedgerDtoIPage);
}
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
index 4c38a59..2b9e466 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -3,6 +3,7 @@
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.domain.R;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.service.ISalesLedgerProductService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,7 +18,6 @@
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.framework.web.page.TableDataInfo;
import java.util.List;
@@ -33,6 +33,8 @@
{
@Autowired
private ISalesLedgerProductService salesLedgerProductService;
+
+
/**
* 鏌ヨ浜у搧淇℃伅鍒楄〃
@@ -87,4 +89,10 @@
}
return toAjax(salesLedgerProductService.deleteSalesLedgerProductByIds(ids));
}
+
+ //鏍规嵁浜у搧id鑾峰彇bom鍒ゆ柇搴撳瓨鏄惁鍏呰冻
+ @GetMapping("/judgmentInventory")
+ public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
+ return salesLedgerProductService.judgmentInventory(salesLedgerProduct);
+ }
}
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java
index ccc28a7..3c439cf 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java
@@ -1,6 +1,7 @@
package com.ruoyi.sales.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.framework.web.domain.R;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import java.util.List;
@@ -20,4 +21,6 @@
int deleteSalesLedgerProductByIds(Long[] ids);
int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct);
+
+ R judgmentInventory(SalesLedgerProduct salesLedgerProduct);
}
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 ba02f28..d0e7ea8 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -4,13 +4,19 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.mapper.ProcessRouteMapper;
+import com.ruoyi.production.mapper.ProductBomMapper;
+import com.ruoyi.production.mapper.ProductStructureMapper;
+import com.ruoyi.production.pojo.ProcessRoute;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
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;
@@ -41,9 +47,17 @@
private SalesLedgerMapper salesLedgerMapper;
private PurchaseLedgerMapper purchaseLedgerMapper;
+ private StockUtils stockUtils;
@Autowired
private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
+
+ @Autowired
+ private ProcessRouteMapper processRouteMapper;
+ @Autowired
+ private ProductBomMapper productBomMapper;
+ @Autowired
+ private ProductStructureMapper productStructureMapper;
@Override
public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -56,18 +70,18 @@
// queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
// .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
- if(!CollectionUtils.isEmpty(salesLedgerProducts)){
+ if (!CollectionUtils.isEmpty(salesLedgerProducts)) {
InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto();
invoiceRegistrationProductDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId().intValue());
List<InvoiceRegistrationProductDto> invoiceRegistrationProductDtoList = invoiceRegistrationProductMapper.invoiceRegistrationProductList(invoiceRegistrationProductDto);
// 缁熻寮�绁ㄧ櫥璁颁骇鍝佺殑宸插紑绁ㄦ暟/宸插紑绁ㄩ噾棰�
- if(!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)){
+ if (!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)) {
for (SalesLedgerProduct ledgerProduct : salesLedgerProducts) {
BigDecimal invoiceNum = BigDecimal.ZERO;
BigDecimal invoiceAmount = 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());
}
}
@@ -165,6 +179,41 @@
return result;
}
+ @Override
+ public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
+ //鑾峰彇浜у搧鏈�鏂扮殑宸ヨ壓璺嚎
+ ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId()).orderByDesc(ProcessRoute::getCreateTime).last("LIMIT 1"));
+ if (processRoute == null) {
+ return R.fail("璇峰厛璁剧疆宸ヨ壓璺嚎");
+ }
+ List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomId(processRoute.getBomId());
+ if (productStructureDtos.isEmpty()) {
+ return R.fail("璇峰厛璁剧疆浜у搧缁撴瀯");
+ }
+ int count = 0;
+ StringBuilder stringBuffer = new StringBuilder();
+ for (ProductStructureDto productStructureDto : productStructureDtos) {
+ BigDecimal stockQuantity = stockUtils.getStockQuantity(productStructureDto.getProductModelId()).get("stockQuantity");
+ //鎵�闇�鏁伴噺
+ BigDecimal multiply = salesLedgerProduct.getQuantity().multiply(productStructureDto.getUnitQuantity());
+ BigDecimal subtract =stockQuantity.subtract(multiply);
+ if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
+ count++;
+ stringBuffer.append(productStructureDto.getProductName())
+ .append("-")
+ .append(productStructureDto.getModel())
+ .append("搴撳瓨涓嶈冻锛屽皯")
+ .append(subtract)
+ .append(System.lineSeparator());
+ }
+ }
+ if (count>0) {
+ return R.fail(stringBuffer.toString());
+ }else {
+ return R.ok();
+ }
+ }
+
/**
* 閫氱敤鏂规硶锛氭牴鎹富琛↖D鍜屽瓙琛ㄥ垪琛紝鏇存柊涓昏〃鐨勫悎鍚岄噾棰�
*/
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
index 14fe896..08faec0 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -4,22 +4,23 @@
<select id="listProcurementBySalesLedgerId" resultType="com.ruoyi.procurementrecord.dto.ProcurementDto">
select
- t1.supplier_name,
- t2.product_category,
- t2.id,
- t3.id as recordId,
- t2.specification_model,
- t2.unit,
- t2.quantity,
- t2.min_stock,
- t2.warn_num,
- t2.quantity as quantity0,
- t2.tax_rate,
- t2.tax_inclusive_unit_price,
- t2.tax_inclusive_total_price,
- t2.tax_exclusive_total_price,
- t3.inbound_num as quantityStock
- from purchase_ledger t1
+ t1.supplier_name,
+ t2.product_category,
+ t2.id,
+ t3.id as recordId,
+ t2.specification_model,
+ t2.unit,
+ t2.quantity,
+ t2.min_stock,
+ t2.warn_num,
+ t2.quantity as quantity0,
+ t2.tax_rate,
+ t2.tax_inclusive_unit_price,
+ t2.tax_inclusive_total_price,
+ t2.tax_exclusive_total_price,
+ t3.inbound_num as quantityStock,
+ t2.product_model_id
+ from purchase_ledger t1
left join sales_ledger_product t2 on t1.id = t2.sales_ledger_id
left join procurement_record_storage t3 on t2.id = t3.sales_ledger_product_id
where t1.purchase_contract_number = #{req.purchaseContractNumber}
--
Gitblit v1.9.3