chenhj
2 天以前 663120b055dfdced4a67ce1d4160ae8ca19b4190
修改工单所需数量
已修改5个文件
64 ■■■■■ 文件已修改
src/main/java/com/ruoyi/production/pojo/ProductStructure.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductOrderMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductStructureMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductStructure.java
@@ -53,4 +53,8 @@
    private Long bomId;
    /**
     * 材料类型(0主料, 1辅料)
     */
    private String materialType;
}
src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
@@ -1,26 +1,16 @@
package com.ruoyi.production.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.dto.ProductModelDto;
import com.ruoyi.basic.dto.ProductTreeDto;
import com.ruoyi.basic.mapper.ProductMapper;
import com.ruoyi.basic.mapper.ProductModelMapper;
import com.ruoyi.basic.pojo.Product;
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.production.dto.ProductStructureDto;
import com.ruoyi.production.mapper.ProductBomMapper;
import com.ruoyi.production.mapper.ProductStructureMapper;
import com.ruoyi.production.pojo.ProductStructure;
import com.ruoyi.production.service.ProductStructureService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
@@ -30,8 +20,6 @@
    @Autowired
    private  ProductStructureMapper productStructureMapper;
    @Override
    public Boolean addProductStructureDto(ProductStructureDto productStructureDto) {
@@ -44,8 +32,6 @@
    @Override
    public List<ProductStructureDto> listBybomId(Long bomId) {
        List<ProductStructureDto> tree = productStructureMapper.listBybomId(bomId);
        return tree;
        return productStructureMapper.listBybomId(bomId);
    }
}
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -5,11 +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.OrderUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.production.dto.ProductStructureDto;
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
@@ -21,14 +20,13 @@
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;
@@ -73,6 +71,8 @@
    private ProductionProductOutputMapper productionProductOutputMapper;
    private ProductionProductInputMapper productionProductInputMapper;
    private QualityInspectMapper qualityInspectMapper;
    private ProductBomMapper productBomMapper;
    private ProductStructureMapper productStructureMapper;
    @Override
    public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -286,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());
@@ -331,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);
@@ -345,6 +352,29 @@
    }
    /**
     * 计算工单数量
     * 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;
    }
    /**
     * 删除生产数据
     */
    public void deleteProductionData(List<Long> productIds) {
src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -70,7 +70,8 @@
               p.product_name,
               pp.name as  process_name,
               pm.product_id,
               pm.model
               pm.model,
               ps.material_type
        from
            product_structure ps
                left join product_model pm on ps.product_model_id = pm.id
src/main/resources/mapper/production/ProductStructureMapper.xml
@@ -10,6 +10,7 @@
        <result property="demandedQuantity" column="demanded_quantity"/>
        <result property="unit" column="unit"/>
        <result property="tenantId" column="tenant_id"/>
        <result property="materialType" column="material_type"/>
    </resultMap>
    <select id="listBybomId" resultType="com.ruoyi.production.dto.ProductStructureDto">
        select ps.*,