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; } src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java
@@ -93,4 +93,7 @@ @Excel(name = "不含税总价") private BigDecimal taxExclusiveTotalPrice; private Long productModelId; } src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -76,4 +76,7 @@ */ @TableField(fill = FieldFill.INSERT) private Long tenantId; private Long productModelId; } 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<>(); 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); //过滤掉approvalStatus=3的记录 purchaseLedgerDtoIPage.getRecords().removeIf(purchaseLedgerDto -> purchaseLedgerDto.getApprovalStatus() == 3); purchaseLedgerDtoIPage.getRecords().removeIf(purchaseLedgerDto -> Integer.valueOf(3).equals(purchaseLedgerDto.getApprovalStatus())); return AjaxResult.success(purchaseLedgerDtoIPage); } 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); } } 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); } 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) { @@ -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(); } } /** * 通用方法:根据主表ID和子表列表,更新主表的合同金额 */ src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -18,7 +18,8 @@ t2.tax_inclusive_unit_price, t2.tax_inclusive_total_price, t2.tax_exclusive_total_price, t3.inbound_num as quantityStock 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