ZengTao
2025-03-28 f68d3c71819feb59e7a227a5d992b059b900916c
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -8,7 +8,6 @@
import com.github.yulichang.query.MPJLambdaQueryWrapper;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.mes.common.config.Const;
import com.mes.damage.entity.Damage;
import com.mes.damage.mapper.DamageMapper;
import com.mes.damage.service.DamageService;
@@ -24,9 +23,9 @@
import com.mes.engineering.mapper.EngineeringMapper;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.mapper.GlassInfoMapper;
import com.mes.pp.entity.OptimizeDetail;
import com.mes.pp.entity.OptimizeLayout;
import com.mes.pp.entity.*;
import com.mes.pp.mapper.OptimizeDetailMapper;
import com.mes.pp.mapper.OptimizeHeatDetailMapper;
import com.mes.taskcache.entity.TaskCache;
import com.mes.taskcache.service.TaskCacheService;
import com.mes.uppattenusage.entity.UpPattenUsage;
@@ -37,7 +36,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -54,24 +55,28 @@
@Slf4j
public class EdgStorageCageDetailsServiceImpl extends MPJBaseServiceImpl<EdgStorageCageDetailsMapper, EdgStorageCageDetails> implements EdgStorageCageDetailsService {
    @Autowired
    @Resource
    UpPattenUsageMapper upPattenUsageMapper;
    @Autowired
    @Resource
    EngineeringMapper engineeringMapper;
    @Autowired
    @Resource
    OptimizeDetailMapper optimizeDetailMapper;
    @Autowired
    @Resource
    OptimizeHeatDetailMapper optimizeHeatDetailMapper;
    @Resource
    EdgStorageCageMapper edgStorageCageMapper;
    @Autowired
    @Resource
    GlassInfoMapper glassInfoMapper;
    @Autowired
    TaskCacheService taskCacheService;
    @Autowired
    @Resource
    DamageMapper damageMapper;
    @Autowired
@@ -114,6 +119,7 @@
//        }
//        return true;
//    }
    /**
     * 获取 切割当前版图
     *
@@ -122,22 +128,22 @@
    @Override
    public List<Map<String, Object>> selectCutTerritory() {
        //查询EdgStorageCageDetails最后一张玻璃所属版图
        List<UpPattenUsage> upPattenUsage=upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
        List<UpPattenUsage> upPattenUsage = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
                .selectAll(UpPattenUsage.class)
                .distinct()
                .innerJoin(Engineering.class, on -> on
                        .eq(Engineering::getEngineerId, UpPattenUsage::getEngineeringId))
                .innerJoin(GlassInfo.class, on -> on
                        .eq(GlassInfo::getEngineerId, UpPattenUsage::getEngineeringId)
                        .eq(GlassInfo::getPatternSequence,UpPattenUsage::getLayoutSequence))
                        .eq(GlassInfo::getPatternSequence, UpPattenUsage::getLayoutSequence))
                .leftJoin(EdgStorageCageDetails.class, on -> on
                        .eq(EdgStorageCageDetails::getEngineerId, UpPattenUsage::getEngineeringId)
                        .eq(EdgStorageCageDetails::getGlassId,GlassInfo::getGlassId))
                        .eq(EdgStorageCageDetails::getGlassId, GlassInfo::getGlassId))
                .leftJoin(Damage.class, on -> on
                        .eq(Damage::getEngineerId, UpPattenUsage::getEngineeringId)
                        .eq(Damage::getGlassId,GlassInfo::getGlassId))
                .eq(Engineering::getState,1)
                .and(wrapper->wrapper.isNotNull(EdgStorageCageDetails::getId).or().isNotNull(Damage::getId))
                        .eq(Damage::getGlassId, GlassInfo::getGlassId))
                .eq(Engineering::getState, 1)
                .and(wrapper -> wrapper.isNotNull(EdgStorageCageDetails::getId).or().isNotNull(Damage::getId))
                .orderByDesc(UpPattenUsage::getLayoutSequence)
                .orderByDesc(GlassInfo::getId)
        );
@@ -145,43 +151,43 @@
            //当前版
            UpPattenUsage upPattenUsage1 = upPattenUsage.get(0);
            //查看当前版是否存在未进笼子或破损的玻璃
            List<UpPattenUsage> upPattenUsage2=upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
            List<UpPattenUsage> upPattenUsage2 = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
                    .selectAll(UpPattenUsage.class)
                    .distinct()
                    .innerJoin(GlassInfo.class, on -> on
                            .eq(GlassInfo::getEngineerId, UpPattenUsage::getEngineeringId)
                            .eq(GlassInfo::getPatternSequence,UpPattenUsage::getLayoutSequence))
                            .eq(GlassInfo::getPatternSequence, UpPattenUsage::getLayoutSequence))
                    .leftJoin(EdgStorageCageDetails.class, on -> on
                            .eq(EdgStorageCageDetails::getEngineerId, UpPattenUsage::getEngineeringId)
                            .eq(EdgStorageCageDetails::getGlassId,GlassInfo::getGlassId))
                            .eq(EdgStorageCageDetails::getGlassId, GlassInfo::getGlassId))
                    .leftJoin(Damage.class, on -> on
                            .eq(Damage::getEngineerId, UpPattenUsage::getEngineeringId)
                            .eq(Damage::getGlassId,GlassInfo::getGlassId))
                    .eq(UpPattenUsage::getEngineeringId,upPattenUsage.get(0).getEngineeringId())
                    .eq(UpPattenUsage::getLayoutSequence,upPattenUsage.get(0).getLayoutSequence())
                    .and(wrapper->wrapper.isNull(EdgStorageCageDetails::getId).or().isNull(Damage::getId))
                            .eq(Damage::getGlassId, GlassInfo::getGlassId))
                    .eq(UpPattenUsage::getEngineeringId, upPattenUsage.get(0).getEngineeringId())
                    .eq(UpPattenUsage::getLayoutSequence, upPattenUsage.get(0).getLayoutSequence())
                    .and(wrapper -> wrapper.isNull(EdgStorageCageDetails::getId).or().isNull(Damage::getId))
                    .orderByDesc(UpPattenUsage::getLayoutSequence)
                    .orderByDesc(GlassInfo::getId)
            );
            //显示下一版  否则显示当前版图
            if(upPattenUsage2.isEmpty()){
            if (upPattenUsage2.isEmpty()) {
                //剩余版图
                List<UpPattenUsage> upPattenUsage3=upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
                List<UpPattenUsage> upPattenUsage3 = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
                        .selectAll(UpPattenUsage.class)
                        .distinct()
                        .innerJoin(Engineering.class, on -> on
                                .eq(Engineering::getEngineerId, UpPattenUsage::getEngineeringId))
                        .eq(Engineering::getState,1)
                        .gt(UpPattenUsage::getLayoutSequence,upPattenUsage1.getLayoutSequence())
                        .eq(Engineering::getState, 1)
                        .gt(UpPattenUsage::getLayoutSequence, upPattenUsage1.getLayoutSequence())
                        .orderByAsc(UpPattenUsage::getLayoutSequence)
                );
                if(!upPattenUsage3.isEmpty()){
                if (!upPattenUsage3.isEmpty()) {
                    //切换成下一版图
                    upPattenUsage1=upPattenUsage3.get(0);
                    upPattenUsage1 = upPattenUsage3.get(0);
                }
            }
            List<Map<String, Object>> cutTerritorys=optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
            List<Map<String, Object>> cutTerritorys = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
                    .selectAll(OptimizeDetail.class)
                    .selectAs(OptimizeLayout::getWidth, "olWidth")
                    .selectAs(OptimizeLayout::getHeight, "olHeight")
@@ -191,32 +197,32 @@
                    .eq(OptimizeDetail::getProjectNo, upPattenUsage1.getEngineeringId())
                    .eq(OptimizeDetail::getStockId, upPattenUsage1.getLayoutSequence())
            );
            Map<String, EdgStorageCageDetails> edgMaps=baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
            Map<String, EdgStorageCageDetails> edgMaps = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
                    .selectAll(EdgStorageCageDetails.class)
                    .eq(EdgStorageCageDetails::getEngineerId,upPattenUsage1.getEngineeringId())
            ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId,EdgStorageCageDetails->EdgStorageCageDetails));
                    .eq(EdgStorageCageDetails::getEngineerId, upPattenUsage1.getEngineeringId())
            ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails -> EdgStorageCageDetails));
            Map<String, Damage> damageMaps=damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
            Map<String, Damage> damageMaps = damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
                    .selectAll(Damage.class)
                    .eq(Damage::getEngineerId,upPattenUsage1.getEngineeringId())
                    .and(wrapper->wrapper.eq(Damage::getType,8)
                    .eq(Damage::getEngineerId, upPattenUsage1.getEngineeringId())
                    .and(wrapper -> wrapper.eq(Damage::getType, 8)
                            .or()
                            .eq(Damage::getType,9))
            ).stream().collect(Collectors.toMap(Damage::getGlassId,Damage->Damage,(V1,V2)->V2));
                            .eq(Damage::getType, 9))
            ).stream().collect(Collectors.toMap(Damage::getGlassId, Damage -> Damage, (V1, V2) -> V2));
            List<Map<String, Object>> resultCutTerritory=new ArrayList<>();
            List<Map<String, Object>> resultCutTerritory = new ArrayList<>();
            for (Map<String, Object> cutTerritory : cutTerritorys) {
//                log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails);
                if(cutTerritory.get("glass_id")==null||"".equals(cutTerritory.get("glass_id"))){
                    log.info("优化数据中glassId存在空值-----内容:{}",cutTerritorys);
                if (cutTerritory.get("glass_id") == null || "".equals(cutTerritory.get("glass_id"))) {
                    log.info("优化数据中glassId存在空值-----内容:{}", cutTerritorys);
                    return new ArrayList<>();
                }else if(damageMaps.get(cutTerritory.get("glass_id"))!=null){
                } else if (damageMaps.get(cutTerritory.get("glass_id")) != null) {
                    //log.info("玻璃已破损/拿走-----内容:{}",damageMaps.get(item.get("glass_id")));
                    cutTerritory.put("glass_state",damageMaps.get(cutTerritory.get("glass_id")).getType());
                }else if(edgMaps.get(cutTerritory.get("glass_id"))!=null){
                    cutTerritory.put("glass_state",edgMaps.get(cutTerritory.get("glass_id")).getState());
                }else{
                    cutTerritory.put("glass_state",0);
                    cutTerritory.put("glass_state", damageMaps.get(cutTerritory.get("glass_id")).getType());
                } else if (edgMaps.get(cutTerritory.get("glass_id")) != null) {
                    cutTerritory.put("glass_state", edgMaps.get(cutTerritory.get("glass_id")).getState());
                } else {
                    cutTerritory.put("glass_state", 0);
                }
                resultCutTerritory.add(cutTerritory);
            }
@@ -234,18 +240,18 @@
    @Override
    public List<List<Map<String, Object>>> selectCurrentCutTerritory(String current) {
        List<Engineering> engineering=engineeringMapper.selectJoinList(Engineering.class, new MPJLambdaWrapper<Engineering>()
        List<Engineering> engineering = engineeringMapper.selectJoinList(Engineering.class, new MPJLambdaWrapper<Engineering>()
                .selectAll(Engineering.class)
                .eq(Engineering::getEngineerId,current)
                .eq(Engineering::getEngineerId, current)
        );
        if(engineering.size()==0){
            log.info("当前工程号未领取过:{}",current);
        if (engineering.size() == 0) {
            log.info("当前工程号未领取过:{}", current);
            return new ArrayList<>();
        }
        //结果
        List<Map<String, Object>> resultCutTerritory=new ArrayList<>();
        List<Map<String, Object>> resultCutTerritory = new ArrayList<>();
        //此工程的所有优化数据
        List<Map<String, Object>> cutTerritory=optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
        List<Map<String, Object>> cutTerritory = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
                .selectAll(OptimizeDetail.class)
                .selectAs(OptimizeLayout::getWidth, "olWidth")
                .selectAs(OptimizeLayout::getHeight, "olHeight")
@@ -255,46 +261,106 @@
                .eq(OptimizeDetail::getProjectNo, current)
        );
        Map<String, EdgStorageCageDetails> edgMaps=baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
        Map<String, EdgStorageCageDetails> edgMaps = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
                .selectAll(EdgStorageCageDetails.class)
                .eq(EdgStorageCageDetails::getEngineerId,current)
        ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId,EdgStorageCageDetails->EdgStorageCageDetails,(V1,V2)->V2));
                .eq(EdgStorageCageDetails::getEngineerId, current)
        ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails -> EdgStorageCageDetails, (V1, V2) -> V2));
        Map<String, Damage> damageMaps=damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
        Map<String, Damage> damageMaps = damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
                .selectAll(Damage.class)
                .eq(Damage::getEngineerId,current)
                .and(wrapper->wrapper.eq(Damage::getType,8)
                .eq(Damage::getEngineerId, current)
                .and(wrapper -> wrapper.eq(Damage::getType, 8)
                        .or()
                        .eq(Damage::getType,9))
        ).stream().collect(Collectors.toMap(Damage::getGlassId,Damage->Damage,(V1,V2)->V2));
                        .eq(Damage::getType, 9))
        ).stream().collect(Collectors.toMap(Damage::getGlassId, Damage -> Damage, (V1, V2) -> V2));
        for (Map<String, Object> item : cutTerritory) {
//          log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails);
            if(item.get("glass_id")==null||"".equals(item.get("glass_id"))){
                log.info("优化数据中glassId存在空值-----内容:{}",cutTerritory);
            if (item.get("glass_id") == null || "".equals(item.get("glass_id"))) {
                log.info("优化数据中glassId存在空值-----内容:{}", cutTerritory);
                return new ArrayList<>();
            }
            if(damageMaps.get(item.get("glass_id"))!=null){
            if (damageMaps.get(item.get("glass_id")) != null) {
                //log.info("玻璃已破损/拿走-----内容:{}",damageMaps.get(item.get("glass_id")));
                item.put("glass_state",damageMaps.get(item.get("glass_id")).getType());
            }else if(edgMaps.get(item.get("glass_id"))!=null){
                item.put("glass_state",edgMaps.get(item.get("glass_id")).getState());
            }else{
                item.put("glass_state",0);
                item.put("glass_state", damageMaps.get(item.get("glass_id")).getType());
            } else if (edgMaps.get(item.get("glass_id")) != null) {
                item.put("glass_state", edgMaps.get(item.get("glass_id")).getState());
            } else {
                item.put("glass_state", 0);
            }
            resultCutTerritory.add(item);
        }
        Map<String, List<Map<String, Object>>> groupBy=resultCutTerritory.stream().collect(Collectors.groupingBy(item->item.get("stock_id").toString()));
        Map<String, List<Map<String, Object>>> groupBy = resultCutTerritory.stream().collect(Collectors.groupingBy(item -> item.get("stock_id").toString()));
//        List<List<Map<String, Object>>> Result=groupBy.values().stream().collect(Collectors.toList());
        int count=1;
        List<List<Map<String, Object>>> result=new ArrayList<>();
        int count = 1;
        List<List<Map<String, Object>>> result = new ArrayList<>();
        for (String item : groupBy.keySet()) {
            String key=count+"";
            if(key!=null){
            String key = count + "";
            if (key != null) {
                result.add(groupBy.get(key));
            }
            count++;
        }
        return result;
    }
    /**
     * 获取 工程下的钢化版图
     *
     * @param current
     * @return
     */
    @Override
    public List<Map<String, Object>> selectTemperingTerritory(String current) {
        //此工程的所有优化数据
        List<Map<String, Object>> resultCutTerritory = optimizeHeatDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeHeatDetail.class)
                .selectAll(OptimizeHeatDetail.class)
                .selectAs(OptimizeProject::getLoadWidth, "olWidth")
                .selectAs(OptimizeProject::getLoadLength, "olHeight")
                .selectAs(OptimizeHeatLayout::getLayoutRate, "olLayoutRate")
                .leftJoin(OptimizeHeatLayout.class, on -> on
                        .eq(OptimizeHeatLayout::getProjectNo, OptimizeHeatDetail::getProjectNo)
                        .eq(OptimizeHeatLayout::getLayoutId, OptimizeHeatDetail::getLayoutId))
                .leftJoin(OptimizeProject.class, on -> on
                        .eq(OptimizeProject::getProjectNo, OptimizeHeatLayout::getProjectNo))
                .eq(OptimizeHeatDetail::getProjectNo, current)
                .gt(OptimizeHeatDetail::getLayoutId, 0)
        );
        //这里就是 按版图号分组  [{layout_id:"1",width:200,height:300...},{layout_id:"2",width:300,height:300...}]
        Map<String, List<Map<String, Object>>> groupBy = resultCutTerritory.stream().collect(Collectors.groupingBy(item -> item.get("layout_id").toString()));
        //按版图号排序
        List<Map<String, Object>> result = new ArrayList<>();//返回结果
        for (int i = 1; i <= groupBy.keySet().size(); i++) {
            String key = i + "";
            if (key != null) {
                List<Map<String, Object>> galssInfo = groupBy.get(key);//当前钢化版图内玻璃小片集合
                if (!galssInfo.isEmpty()) {
                    Map<String, Object> item = new HashMap<>();//新格式编排
                    //以下为同层  {key:"groupBy.get(key)",olLayoutRate:"小片集合"}
                    //          {key:"groupBy.get(key)",olLayoutRate:[{},{},{},{}]}
                    item.put("listGlass", groupBy.get(key));
                    item.put("LayoutId", key);
                    item.put("olWidth", galssInfo.get(0).get("olWidth").toString());
                    item.put("olHeight", galssInfo.get(0).get("olHeight").toString());
                    item.put("olLayoutRate", galssInfo.get(0).get("olLayoutRate").toString());
                    result.add(item);
                } else {
                    log.info("当前钢化版图不存在小片数据请检查,版图号:{}" + key);
                    return null;
                }
            }
        }
//        List<List<Map<String, Object>>> result = new ArrayList<>();//返回结果
//
//        for (int i = 1; i <= groupBy.keySet().size(); i++) {
//            String key = i + "";
//            if (key != null) {
//                result.add(groupBy.get(key));
//            }
//        }
        return result;
    }
@@ -412,7 +478,7 @@
        BeanUtils.copyProperties(request, damage);
        damage.setType(request.getState());
        damage.setRemark("");
        damage.setStatus(0);
        damage.setStatus(1);
        damageService.insertDamage(damage);
        return "success";
    }
@@ -424,11 +490,42 @@
        BeanUtils.copyProperties(request, damage);
        damage.setType(request.getState());
        damage.setRemark("");
        damage.setStatus(0);
        damage.setStatus(1);
        damageService.insertDamage(damage);
        //修改磨边队列数据状态
        edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>()
                .set(EdgGlassTaskInfo::getStatus, request.getState()).eq(EdgGlassTaskInfo::getGlassId, request.getGlassId()));
        return "success";
    }
    /**
     * 进片  扫码ID验证重复
     *
     * @param glassId
     * @return
     */
    @Override
    public boolean inToVerify(String glassId) {
        List<EdgStorageCageDetails> listEdgStorageCageDetails = baseMapper.selectList(new LambdaQueryWrapper<EdgStorageCageDetails>()
                .eq(EdgStorageCageDetails::getGlassId, glassId)
        );
        if (listEdgStorageCageDetails.isEmpty()) {
            //说明此玻璃没有进过理片
            return true;
        } else {
            List<Damage> damage = damageMapper.selectList(new LambdaQueryWrapper<Damage>()
                    .eq(Damage::getGlassId, glassId)
                    .and(wrapper -> wrapper.eq(Damage::getType, 8).or().eq(Damage::getType, 9))
            );
            if (!damage.isEmpty()) {
                return true;
            }
        }
        return false;
    }
    @Override
    public EdgStorageCageDetails queryEdgStorageDetailsBySize(int deviceId, int currentSlot, double width, double height) {
        return baseMapper.queryEdgStorageDetailsBySize(deviceId, currentSlot, width, height);
    }
}