1.库存(展示非半成品)
2.入库记录展示非半成品以及过磅单
3.报工直接入库
已修改6个文件
173 ■■■■■ 文件已修改
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/stock/StockInRecordMapper.xml 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/stock/StockInventoryMapper.xml 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -9,13 +9,10 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.production.dto.ProductStructureDto;
import com.ruoyi.production.dto.ProductionProductMainDto;
@@ -25,12 +22,13 @@
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.quality.mapper.*;
import com.ruoyi.quality.pojo.*;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectParam;
import com.ruoyi.quality.pojo.QualityUnqualified;
import com.ruoyi.quality.service.IQualityInspectService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.production.mapper.ProductionProductMainMapper;
import java.math.BigDecimal;
import java.time.LocalDate;
@@ -170,45 +168,8 @@
        if (productQty.compareTo(BigDecimal.ZERO) > 0) {
            /*新增质检*/
            List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
            if (productProcessRouteItem.getIsQuality()) {
//                int inspectType = 1;
//                String process = productProcess.getName();//工序
//                if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
//                    //最后一道工序生成出厂检
//                    inspectType = 2;
//                    process = null;
//                }
//                Product product = productMapper.selectById(productModel.getProductId());
//                QualityInspect qualityInspect = new QualityInspect();
//                qualityInspect.setProductId(product.getId());
//                qualityInspect.setProductName(product.getProductName());
//                qualityInspect.setModel(productModel.getModel());
//                qualityInspect.setUnit(productModel.getUnit());
//                qualityInspect.setQuantity(productQty);
//                qualityInspect.setProcess(process);
//                qualityInspect.setInspectState(0);
//                qualityInspect.setInspectType(inspectType);
//                qualityInspect.setProductMainId(productionProductMain.getId());
//                qualityInspect.setProductModelId(productModel.getId());
//                qualityInspectMapper.insert(qualityInspect);
//                List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType, process);
//                if (qualityTestStandard.size() > 0) {
//                    qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
//                    qualityInspectMapper.updateById(qualityInspect);
//                    qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
//                                    .eq(QualityTestStandardParam::getTestStandardId, qualityTestStandard.get(0).getId()))//默认获取最新的
//                            .forEach(qualityTestStandardParam -> {
//                                QualityInspectParam param = new QualityInspectParam();
//                                BeanUtils.copyProperties(qualityTestStandardParam, param);
//                                param.setId(null);
//                                param.setInspectId(qualityInspect.getId());
//                                qualityInspectParamMapper.insert(param);
//                            });
//                }
            }else {
                //直接入库
            //不管是否质检都直接入库
                stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
            }
            /*更新工单和生产订单*/
            ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
            productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
@@ -30,4 +30,7 @@
    //现净重
    private BigDecimal currentWeight;
    //产品类型
    private String productType;
}
src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
@@ -1,5 +1,6 @@
package com.ruoyi.stock.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.stock.pojo.StockInventory;
import io.swagger.annotations.ApiModelProperty;
@@ -68,4 +69,8 @@
    @ApiModelProperty("磅单文件路径")
    private String weighbridgeDocPath;
    @ApiModelProperty("产品类型")
    @TableField(exist = false)
    private Integer productType;
}
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -59,32 +59,46 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean addstockInventory(StockInventoryDto stockInventoryDto) {
        //新增入库记录再添加库存
        // 1. 创建入库记录
        StockInRecordDto stockInRecordDto = new StockInRecordDto();
        stockInRecordDto.setRecordId(stockInventoryDto.getRecordId());
        stockInRecordDto.setRecordType(stockInventoryDto.getRecordType());
        stockInRecordDto.setWeighingOperator(stockInventoryDto.getWeighingOperator());
        stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
        stockInRecordDto.setProductId(stockInventoryDto.getProductId());
        stockInRecordDto.setRemark(stockInventoryDto.getRemark());
        stockInRecordDto.setType("0");
        // 根据产品类型设置不同的重量字段
        if (stockInventoryDto.getProductType() != null && stockInventoryDto.getProductType() == 0) {
        stockInRecordDto.setStockInNum(stockInventoryDto.getNetWeight());
        stockInRecordDto.setWeighingDate(stockInventoryDto.getWeighingDate());
        stockInRecordDto.setNetWeight(stockInventoryDto.getNetWeight());
        stockInRecordDto.setGrossWeight(stockInventoryDto.getGrossWeight());
        stockInRecordDto.setTareWeight(stockInventoryDto.getTareWeight());
        stockInRecordDto.setLicensePlateNo(stockInventoryDto.getLicensePlateNo());
        stockInRecordDto.setWeighingOperator(stockInventoryDto.getWeighingOperator());
        stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
        stockInRecordDto.setProductId(stockInventoryDto.getProductId());
        stockInRecordDto.setRemark(stockInventoryDto.getRemark());
        stockInRecordDto.setType("0");
        //生成磅单
        String absoluteDocPath = weighbridgeDocGenerator.generateWeighbridgeDoc(stockInRecordDto);
        stockInRecordDto.setWeighbridgeDocPath(absoluteDocPath);
        } else {
            stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity());
            stockInRecordDto.setNetWeight(stockInventoryDto.getQualitity());
        }
        // 保存入库记录
        stockInRecordService.add(stockInRecordDto);
        //再进行新增库存数量库存
        //先查询库存表中的产品是否存在,不存在新增,存在更新
        StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
        // 2. 更新库存
        StockInventory oldStockInventory = stockInventoryMapper.selectOne(
                new QueryWrapper<StockInventory>().lambda()
                        .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())
        );
        if (ObjectUtils.isEmpty(oldStockInventory)) {
            // 新增库存
            StockInventory newStockInventory = new StockInventory();
            newStockInventory.setProductModelId(stockInventoryDto.getProductModelId());
            newStockInventory.setQualitity(stockInventoryDto.getNetWeight());
            newStockInventory.setQualitity(stockInventoryDto.getProductType() == 0 ?
                    stockInventoryDto.getNetWeight() : stockInventoryDto.getQualitity());
            newStockInventory.setVersion(1);
            newStockInventory.setRemark(stockInventoryDto.getRemark());
            newStockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
@@ -92,7 +106,9 @@
            newStockInventory.setProductId(stockInventoryDto.getProductId());
            stockInventoryMapper.insert(newStockInventory);
        } else {
            stockInventoryDto.setQualitity(stockInventoryDto.getNetWeight());
            // 更新库存
            stockInventoryDto.setQualitity(stockInventoryDto.getProductType() != null && stockInventoryDto.getProductType() == 0 ?
                    stockInventoryDto.getNetWeight() : stockInventoryDto.getQualitity());
            stockInventoryMapper.updateAddStockInventory(stockInventoryDto);
        }
        return true;
src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -4,31 +4,33 @@
    <select id="listPage" resultType="com.ruoyi.stock.dto.StockInRecordDto">
        SELECT
        p1.product_name AS product_type,
        sir.*,
        p.product_name as product_name,
        p.product_name AS product_name,
        pm.model,
        pm.unit,
        sir.weighbridge_doc_path,
        u.nick_name as createBy
        FROM stock_in_record as sir
        LEFT JOIN product_model as pm on sir.product_model_id = pm.id
        LEFT JOIN product as p on pm.product_id = p.id
        LEFT JOIN sys_user as u on sir.create_user = u.user_id
        u.nick_name AS createBy
        FROM stock_in_record AS sir
        LEFT JOIN product_model AS pm ON sir.product_model_id = pm.id
        LEFT JOIN product AS p ON pm.product_id = p.id
        INNER JOIN product p1 ON p1.id = p.parent_id AND p1.product_name != '半成品'
        LEFT JOIN sys_user AS u ON sir.create_user = u.user_id
        <where>
            <if test="params.timeStr != null and params.timeStr != ''">
                and sir.create_time like concat('%',#{params.timeStr},'%')
                AND sir.create_time LIKE CONCAT('%', #{params.timeStr}, '%')
            </if>
            <if test="params.productName != null and params.productName != ''">
                and p.product_name like concat('%',#{params.productName},'%')
                AND p.product_name LIKE CONCAT('%', #{params.productName}, '%')
            </if>
            <if test="params.type != null and params.type != ''">
                and sir.type = #{params.type}
                AND sir.type = #{params.type}
            </if>
            <if test="params.recordType != null and params.recordType != ''">
                and sir.record_type = #{params.recordType}
                AND sir.record_type = #{params.recordType}
            </if>
        </where>
        order by sir.id desc
        ORDER BY sir.id DESC
    </select>
    <select id="listStockInRecordExportData" resultType="com.ruoyi.stock.execl.StockInRecordExportData">
        SELECT
src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -57,53 +57,45 @@
    </update>
    <select id="pagestockInventory" resultType="com.ruoyi.stock.dto.StockInventoryDto">
        select
        SELECT
        si.id,
        -- 当前净重 = 入库净重 - 出库净重
        (COALESCE(sir.total_net_weight,0) - COALESCE(sor.total_net_weight,0)) as net_weight,
        (COALESCE(sir.total_net_weight, 0) - COALESCE(sor.total_net_weight, 0)) AS net_weight,
        si.qualitity,
        COALESCE(si.locked_quantity, 0) as locked_quantity,
        COALESCE(si.locked_quantity, 0) AS locked_quantity,
        si.product_model_id,
        si.create_time,
        si.update_time,
        COALESCE(si.warn_num, 0) as warn_num,
        COALESCE(si.warn_num, 0) AS warn_num,
        si.version,
        (si.qualitity - COALESCE(si.locked_quantity, 0)) as un_locked_quantity,
        (si.qualitity - COALESCE(si.locked_quantity, 0)) AS un_locked_quantity,
        pm.model,
        si.remark,
        pm.unit,
        p.product_name,
        p1.product_name as parent_name,
        p1.id as parent_id,
        si.product_id as productId
        from stock_inventory si
        left join product_model pm on si.product_model_id = pm.id
        left join product p on pm.product_id = p.id
        left join product p1 on p.parent_id = p1.id
        -- 入库净重
        left join (
        select
        product_model_id,
        sum(net_weight) as total_net_weight
        from stock_in_record
        group by product_model_id
        ) sir on si.product_model_id = sir.product_model_id
        -- 出库净重
        left join (
        select
        product_model_id,
        sum(net_weight) as total_net_weight
        from stock_out_record
        group by product_model_id
        ) sor on si.product_model_id = sor.product_model_id
        p1.product_name AS parent_name,
        p1.id AS parent_id,
        si.product_id AS productId
        FROM stock_inventory si
        INNER JOIN product_model pm ON si.product_model_id = pm.id
        INNER JOIN product p ON pm.product_id = p.id
        INNER JOIN product p1 ON p.parent_id = p1.id AND p1.product_name != '半成品'
        LEFT JOIN (
        SELECT product_model_id, SUM(net_weight) AS total_net_weight
        FROM stock_in_record
        GROUP BY product_model_id
        ) sir ON si.product_model_id = sir.product_model_id
        LEFT JOIN (
        SELECT product_model_id, SUM(net_weight) AS total_net_weight
        FROM stock_out_record
        GROUP BY product_model_id
        ) sor ON si.product_model_id = sor.product_model_id
        <where>
            1=1
            <if test="ew.parentId != null and ew.parentId !=''">
                and p.parent_id = #{ew.parentId}
                AND p.parent_id = #{ew.parentId}
            </if>
            <if test="ew.productName != null and ew.productName !=''">
                and p.product_name like concat('%',#{ew.productName},'%')
                AND p.product_name LIKE CONCAT('%', #{ew.productName}, '%')
            </if>
        </where>
    </select>