gongchunyi
15 小时以前 85f9e4465f7cf545f3bd2cdc0661a9ce938751dc
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -10,8 +10,10 @@
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.quality.dto.QualityInspectDto;
@@ -39,6 +41,7 @@
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@@ -90,37 +93,38 @@
    @Override
    public int submit(QualityInspect inspect) {
        QualityInspect qualityInspect = qualityInspectMapper.selectById(inspect.getId());
        //提交前必须判断是否合格
        if (ObjectUtils.isNull(qualityInspect.getCheckResult())) {
            throw new RuntimeException("请先判断是否合格");
        //提交前必须判断是否合格(通过合格数量和不合格数量来判断)
        if (ObjectUtils.isNull(qualityInspect.getQualifiedQuantity())) {
            throw new ServiceException("合格数量不能为空");
        }
        // 区分合格数量以及不合格处理进行对应的处理
        Assert.isTrue(qualityInspect.getQuantity().compareTo(qualityInspect.getQualifiedQuantity().add(qualityInspect.getUnqualifiedQuantity())) == 0,"请检查合格数量和不合格数量,需要合格数量+不合格数量与总数保持一致");
        if(qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0){
            //合格直接入库
            // stockUtils.addStock(qualityInspect.getProductModelId(), qualityInspect.getQuantity(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(), qualityInspect.getId());
            //仅添加入库记录
            StockInventoryDto stockInventoryDto = new StockInventoryDto();
            //如果是采购质检合格入库选用CUSTOMIZATION_UNSTOCK_OUT,其余合格入库选用QUALITYINSPECT_STOCK_IN
            stockInventoryDto.setRecordType(String.valueOf(StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode()));
            if (ObjectUtils.isNotEmpty(qualityInspect.getPurchaseLedgerId())){
                stockInventoryDto.setRecordType(String.valueOf(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_OUT.getCode()));
            }
            stockInventoryDto.setRecordId(qualityInspect.getId());
            stockInventoryDto.setProductModelId(qualityInspect.getProductModelId());
            stockInventoryDto.setQualitity(qualityInspect.getQualifiedQuantity());
            stockInventoryDto.setBatchNo(resolveProductionBatchNo(
                    qualityInspect.getProductMainId(),
                    qualityInspect.getId(),
                    qualityInspect.getProductModelId()));
            stockInventoryService.addStockInRecordOnly(stockInventoryDto);
        if (ObjectUtils.isNull(qualityInspect.getUnqualifiedQuantity())) {
            throw new ServiceException("不合格数量不能为空");
        }
        // 如果合格数量为空,设为0
        if (qualityInspect.getQualifiedQuantity() == null) {
            qualityInspect.setQualifiedQuantity(BigDecimal.ZERO);
        }
        // 如果不合格数量为空,设为0
        if (qualityInspect.getUnqualifiedQuantity() == null) {
            qualityInspect.setUnqualifiedQuantity(BigDecimal.ZERO);
        }
        // 合格直接入库(已生成过入库记录则跳过,避免编辑入库后提交导致重复入库)
        if(qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0
                && !hasStockInRecord(qualityInspect)){
            stockInQualified(qualityInspect);
        }
        // 不合格处理
        if(qualityInspect.getUnqualifiedQuantity().compareTo(BigDecimal.ZERO) > 0){
            QualityUnqualified qualityUnqualified = new QualityUnqualified();
            BeanUtils.copyProperties(qualityInspect, qualityUnqualified);
            qualityUnqualified.setInspectState(0);//待处理
            qualityUnqualified.setQuantity(qualityInspect.getUnqualifiedQuantity());
            qualityUnqualified.setProductModelId(qualityInspect.getProductModelId());
            List<QualityInspectParam> inspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, inspect.getId()));
            String text = inspectParams.stream().map(QualityInspectParam::getParameterItem).collect(Collectors.joining(","));
            qualityUnqualified.setDefectivePhenomena(text + "这些指标中存在不合格");//不合格现象
@@ -167,6 +171,40 @@
                        .last("limit 1"),
                false);
        return inspectRecord == null ? null : inspectRecord.getBatchNo();
    }
    /**
     * 合格数量生成入库记录与库存
     */
    private void stockInQualified(QualityInspect qualityInspect) {
        //仅添加入库记录
        StockInventoryDto stockInventoryDto = new StockInventoryDto();
        stockInventoryDto.setRecordType(resolveStockInRecordType(qualityInspect));
        stockInventoryDto.setRecordId(qualityInspect.getId());
        stockInventoryDto.setProductModelId(qualityInspect.getProductModelId());
        stockInventoryDto.setQualitity(qualityInspect.getQualifiedQuantity());
        stockInventoryDto.setBatchNo(resolveProductionBatchNo(
                qualityInspect.getProductMainId(),
                qualityInspect.getId(),
                qualityInspect.getProductModelId()));
        stockInventoryService.addStockInRecordOnly(stockInventoryDto);
    }
    private String resolveStockInRecordType(QualityInspect qualityInspect) {
        if (ObjectUtils.isNotEmpty(qualityInspect.getPurchaseLedgerId())) {
            return StockInQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_OUT.getCode();
        }
        return StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode();
    }
    /**
     * 判断该检验单是否已生成过入库记录
     */
    private boolean hasStockInRecord(QualityInspect qualityInspect) {
        return stockInRecordService.count(Wrappers.<StockInRecord>lambdaQuery()
                .eq(StockInRecord::getRecordId, qualityInspect.getId())
                .eq(StockInRecord::getProductModelId, qualityInspect.getProductModelId())
                .eq(StockInRecord::getRecordType, resolveStockInRecordType(qualityInspect))) > 0;
    }
    /*生成检验报告*/
@@ -232,7 +270,15 @@
        }
        QualityInspect qualityInspect = new QualityInspect();
        BeanUtils.copyProperties(qualityInspectDto, qualityInspect);
        return qualityInspectMapper.updateById(qualityInspect);
        int result = qualityInspectMapper.updateById(qualityInspect);
        // 编辑时选择"入库"则生成入库记录与库存,选择"不入库"则只保存质检记录
        if (Integer.valueOf(1).equals(qualityInspectDto.getIsStockIn())) {
            if (hasStockInRecord(qualityInspect)) {
                throw new ServiceException("该检验单已生成过入库记录,请勿重复入库");
            }
            stockInQualified(qualityInspect);
        }
        return result;
    }
    @Override