liyong
2026-04-28 ac79dfd8d661dbe166553ff80fbdbfee64e8134e
src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -1,6 +1,8 @@
package com.ruoyi.quality.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -19,6 +21,8 @@
import com.ruoyi.production.mapper.ProductionProductMainMapper;
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductOrderService;
import com.ruoyi.production.service.ProductProcessService;
import com.ruoyi.production.service.ProductWorkOrderService;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityUnqualified;
@@ -32,13 +36,17 @@
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@AllArgsConstructor
@Service
public class QualityUnqualifiedServiceImpl extends ServiceImpl<QualityUnqualifiedMapper, QualityUnqualified> implements IQualityUnqualifiedService {
    private final StockUtils stockUtils;
    private final ProductWorkOrderService productWorkOrderService;
    private QualityUnqualifiedMapper qualityUnqualifiedMapper;
    private IQualityInspectService qualityInspectService;
    private ProductOrderService productOrderService;
@@ -47,6 +55,7 @@
    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
    private ProductWorkOrderMapper productWorkOrderMapper;
    private StockUninventoryService stockUninventoryService;
    private final ProductProcessService productProcessService;
    @Override
    public IPage<QualityUnqualified> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified) {
@@ -64,7 +73,7 @@
    public int deal(QualityUnqualified qualityUnqualified) {
        QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId());
        QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId());
        if (ObjectUtils.isNotNull(qualityInspect) && qualityInspect.getInspectType()!=0) {
        if (ObjectUtils.isNotNull(qualityInspect) && qualityInspect.getInspectType() != 0) {
            switch (qualityUnqualified.getDealResult()) {
                case "返修":
                case "返工":
@@ -89,8 +98,15 @@
                        productProcessRouteMapper.insert(newProcessRoute);
                        //新增生产订单下的工艺路线子表
                        List<ProductProcessRouteItem> processRouteItems = productProcessRouteItemMapper.selectList(new QueryWrapper<ProductProcessRouteItem>().lambda().eq(ProductProcessRouteItem::getProductRouteId, productProcessRoute.getId()));
                        // 生成当前日期的前缀:年月日
                        String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
                        Map<Long, ProductProcess> productProcessMap = new HashMap<>();
                        if(CollUtil.isNotEmpty(processRouteItems)){
                            productProcessMap = productProcessService
                                    .list(new LambdaQueryWrapper<ProductProcess>().in(ProductProcess::getId, processRouteItems.stream().map(ProductProcessRouteItem::getProcessId).collect(Collectors.toList())))
                                    .stream()
                                    .collect(Collectors.toMap(ProductProcess::getId, productProcess -> productProcess));
                        }
                        for (ProductProcessRouteItem processRouteItem : processRouteItems) {
                            ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
                            BeanUtils.copyProperties(processRouteItem, productProcessRouteItem);
@@ -98,27 +114,11 @@
                            productProcessRouteItem.setProductRouteId(newProcessRoute.getId());
                            int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
                            if (insert > 0) {
                                // 查询今日已存在的最大工单号
                                ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
                                int sequenceNumber = 1; // 默认序号
                                if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
                                    String lastNo = lastWorkOrder.getWorkOrderNo().toString();
                                    if (lastNo.startsWith(datePrefix)) {
                                        String seqStr = lastNo.substring(datePrefix.length());
                                        try {
                                            sequenceNumber = Integer.parseInt(seqStr) + 1;
                                        } catch (NumberFormatException e) {
                                            sequenceNumber = 1;
                                        }
                                    }
                                }
                                // 生成完整的工单号
                                String workOrderNoStr ="FG" +String.format("%s%03d", datePrefix, sequenceNumber);
                                ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                                productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                                productWorkOrder.setProductOrderId(order.getId());
                                productWorkOrder.setPlanQuantity(order.getQuantity());
                                productWorkOrder.setWorkOrderNo(workOrderNoStr);
                                productWorkOrder.setWorkOrderNo("FG"+productWorkOrderService.generateProductWorkOrder( productProcessMap.getOrDefault(productProcessRouteItem.getProcessId(), new ProductProcess()).getName(), productOrder.getNpsNo()));
                                productWorkOrder.setStatus(1);
                                productWorkOrderMapper.insert(productWorkOrder);
                            }
@@ -127,19 +127,38 @@
                    break;
                case "报废":
                    //调用不合格库存接口 入不合格库
                    stockUtils.addUnStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId());
                    stockUtils.addUnStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), "-", "-", "-");
                    break;
                case "让步放行":
                    //调用提交合格的接口
                    stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
                    qualityInspect.setCheckResult("合格");
                    qualityInspectService.submit(qualityInspect);
                    stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId(), "-", "-", "-");
                    break;
                default:
                    break;
            }
        } else {
            //查询对应的规格型号id
            Long modelId = qualityUnqualifiedMapper.getModelId(qualityUnqualified.getProductName(), qualityUnqualified.getModel());
            switch (qualityUnqualified.getDealResult()) {
                case "报废":
                    //调用不合格库存接口 入不合格库
                    stockUtils.addUnStock(modelId, unqualified.getQuantity(), StockInUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), "-", "-", "-");
                    break;
                case "让步放行":
                    //调用提交合格的接口
                    stockUtils.addStock(modelId, unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId(), "-", "-", "-");
                    break;
                default:
                    break;
            }
        }
        qualityUnqualified.setInspectState(1);//已处理
        return qualityUnqualifiedMapper.updateById(qualityUnqualified);
    }
    @Override
    public QualityUnqualified getUnqualified(Integer id) {
        return qualityUnqualifiedMapper.getUnqualified(id);
    }
}