feat(production): 新增入库添加产品规格型号id,销售台账添加产品校验库存是否充足
已修改9个文件
80 ■■■■■ 文件已修改
src/main/java/com/ruoyi/procurementrecord/dto/Details.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/ISalesLedgerProductService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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