huminmin
10 小时以前 5cabba0016c61d51204c7e28bf0613b1cd335327
src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
@@ -14,6 +14,10 @@
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductWorkOrderService;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityUnqualified;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -39,9 +43,13 @@
    @Autowired
    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
    @Autowired
    private ProductProcessMapper productProcessMapper;
    @Autowired
    private ProductionProductMainMapper productionProductMainMapper;
    @Autowired
    private ProductionProductOutputMapper productionProductOutputMapper;
    @Autowired
    private QualityUnqualifiedMapper qualityUnqualifiedMapper;
    @Value("${file.temp-dir}")
    private String tempDir;
@@ -50,27 +58,43 @@
    public IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder) {
        IPage<ProductWorkOrderDto> productWorkOrderDtoIPage = productWorkOrdermapper.pageProductWorkOrder(page, productWorkOrder);
        productWorkOrderDtoIPage.getRecords().forEach(record -> {
            //检查上一个工序是否已报工
            // 是否能报工: 1. 第一个工序能报工 2. 上一个工序已报工 3. 之前的工序未被隔离
            Integer currentDragSort = record.getDragSort();
            if (currentDragSort == null || currentDragSort == 1) {
                record.setIsCanReport(true);
            } else {
                //查找上一个工序
                ProductProcessRouteItem previousItem = productProcessRouteItemMapper.selectOne(
                        Wrappers.<ProductProcessRouteItem>lambdaQuery()
                                .eq(ProductProcessRouteItem::getProductRouteId, record.getProductRouteId())
                                .eq(ProductProcessRouteItem::getDragSort, currentDragSort - 1)
                // 上一个工序是否已报工
                boolean isPreviousReported = productionProductMainMapper.checkPreviousProcessReported(
                        record.getProductRouteId(),
                        currentDragSort
                );
                record.setIsCanReport(isPreviousReported);
                if (previousItem != null) {
                    //检查上一个工序是否有报工记录
                    Long count = productionProductMainMapper.selectCount(
                            Wrappers.<ProductionProductMain>lambdaQuery()
                                    .eq(ProductionProductMain::getProductProcessRouteItemId, previousItem.getId())
                // 之前的工序是否被隔离
                if (record.getIsCanReport()) {
                    // 查询所有之前的工序(排序号小于当前工序)
                    List<ProductProcessRouteItem> previousItems = productProcessRouteItemMapper.selectList(
                            Wrappers.<ProductProcessRouteItem>lambdaQuery()
                                    .eq(ProductProcessRouteItem::getProductRouteId, record.getProductRouteId())
                                    .lt(ProductProcessRouteItem::getDragSort, currentDragSort)
                    );
                    record.setIsCanReport(count > 0);
                } else {
                    record.setIsCanReport(true);
                    if (CollectionUtils.isNotEmpty(previousItems)) {
                        // 提取之前工序的名称列表
                        List<String> previousProcessNames = new ArrayList<>();
                        for (ProductProcessRouteItem item : previousItems) {
                            ProductProcess process = productProcessMapper.selectById(item.getProcessId());
                            if (process != null) {
                                previousProcessNames.add(process.getName());
                            }
                        }
                        // 检查之前的工序是否有被隔离的不合格记录
                        List<QualityUnqualified> unqualifiedList = qualityUnqualifiedMapper.selectUnqualifiedByProcessNames(previousProcessNames);
                        if (CollectionUtils.isNotEmpty(unqualifiedList)) {
                            record.setIsCanReport(false);
                        }
                    }
                }
            }
@@ -183,4 +207,4 @@
        }
        return productWorkOrderDtos;
    }
}
}