zhoushihao
2025-10-29 2fe150d7351d329fd1bae4f8ef9cbdfc9c172362
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
@@ -6,6 +6,8 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.mes.engineerScheduling.entity.EngineerScheduling;
import com.mes.engineerScheduling.service.EngineerSchedulingService;
import com.mes.engineering.entity.Engineering;
import com.mes.engineering.service.EngineeringService;
import com.mes.pp.entity.OptimizeProject;
@@ -20,7 +22,11 @@
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
 * <p>
@@ -36,6 +42,8 @@
public class OptimizeProjectServiceImpl extends MPJBaseServiceImpl<OptimizeProjectMapper, OptimizeProject> implements OptimizeProjectService {
    @Autowired
    private EngineeringService engineeringService;
    @Autowired
    private EngineerSchedulingService engineerSchedulingService;
    @Override
    public List<OptimizeProject> listByState(OptimizeRequest optimizeRequest) {
@@ -109,7 +117,6 @@
    public List<OptimizeProject> updateEngineerScheduling(Integer type, List<OptimizeProject> projectList) {
        // 1. 删除对应类型的数据
        baseMapper.deleteByType(type);
        // 2. 设置值
        projectList.forEach(project -> {
            project.setType(type);
@@ -123,6 +130,76 @@
        return projectList;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @DS("north_glass_mes")
    public List<OptimizeProject> updateCuttingLayout(Integer type, List<OptimizeProject> projectList) {
        //获取当前钢化排版信息
        List<EngineerScheduling> engineerScheduling = engineerSchedulingService.queryByType(3);
        List<EngineerScheduling> cutting = new ArrayList<>();
        if(type==1){
            cutting = engineerSchedulingService.queryByType(2);
        }else {
            cutting = engineerSchedulingService.queryByType(1);
        }
        //保存新增钢化排版信息
        List<EngineerScheduling> newSchedulingList = new ArrayList<>();
        Set<String> existingProjectNoSet = engineerScheduling.stream()
                .map(EngineerScheduling::getProjectNo)
                .collect(Collectors.toSet());
        // 获取当前排版新增工程
        for (OptimizeProject project : projectList) {
            String projectNo = project.getProjectNo();
            // 工程号非空,且不在已有钢化排产数据中
            if (projectNo != null && !existingProjectNoSet.contains(projectNo)) {
                EngineerScheduling newEs = new EngineerScheduling();
                newEs.setProjectNo(projectNo);
                newEs.setProjectName(project.getProjectName());
                newEs.setType(3);
                newEs.setState(100);
                newSchedulingList.add(newEs);
            }
        }
        //获取当前排版取消工程
        Set<String> cuttingProjectNos = new HashSet<>();
        for (EngineerScheduling es : cutting) {
            if (es.getProjectNo() != null) { // 避免空指针
                cuttingProjectNos.add(es.getProjectNo());
            }
        }
        engineerScheduling = engineerScheduling.stream()
                .filter(es -> es.getProjectNo() == null || !cuttingProjectNos.contains(es.getProjectNo()))
                .collect(Collectors.toList());
        //1号线钢化数据对比1号线切割数据
        Set<String> projectNoSet2 = new HashSet<>();
        for (OptimizeProject project : projectList) {
            String projectNo = project.getProjectNo();
            if (projectNo != null) { // 避免空指针
                projectNoSet2.add(projectNo);
            }
        }
        // 2. 筛选并收集符合条件的工程号(String类型)到 List<String>
        List<String> missingProjectNos = engineerScheduling.stream()
                .map(EngineerScheduling::getProjectNo) // 提取 engineerScheduling 中的工程号
                .filter(esProjectNo -> esProjectNo != null // 排除空工程号
                        && !projectNoSet2.contains(esProjectNo)) // 排除 projectList 中存在的工程号
                .collect(Collectors.toList()); // 收集结果到 List<String>
        for (OptimizeProject project : projectList) {
            project.setType(type);
            project.setState(100);
        }
        //新增钢化排版数据
        engineerSchedulingService.saveBatch(newSchedulingList);
        //更新已取消的钢化排版状态
        if(CollectionUtils.isNotEmpty(missingProjectNos)){
            engineerSchedulingService.updateState(missingProjectNos);
        }
        //取消当前类型的工程排产信息
        engineerSchedulingService.updateByType(type);
        //保存当前新切割排版数据
        baseMapper.batchInsert(projectList);
        return projectList;
    }
    @Override
    public void deleteengineerSchedulingByid(String engineerId, List<Integer> types) {