zhoushihao
2024-10-27 ef45387ac4b65538bb965dd7fe9c40d28bceca64
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -8,8 +8,8 @@
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;
import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
import com.mes.edgglasstask.entity.request.IdentWornRequest;
@@ -19,10 +19,13 @@
import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
import com.mes.edgstoragecage.mapper.EdgStorageCageMapper;
import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
import com.mes.engineering.entity.Engineering;
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;
@@ -33,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;
@@ -50,25 +55,70 @@
@Slf4j
public class EdgStorageCageDetailsServiceImpl extends MPJBaseServiceImpl<EdgStorageCageDetailsMapper, EdgStorageCageDetails> implements EdgStorageCageDetailsService {
    @Autowired
    @Resource
    UpPattenUsageMapper upPattenUsageMapper;
    @Autowired
    @Resource
    EngineeringMapper engineeringMapper;
    @Resource
    OptimizeDetailMapper optimizeDetailMapper;
    @Autowired
    @Resource
    OptimizeHeatDetailMapper optimizeHeatDetailMapper;
    @Resource
    EdgStorageCageMapper edgStorageCageMapper;
    @Autowired
    @Resource
    GlassInfoMapper glassInfoMapper;
    @Autowired
    TaskCacheService taskCacheService;
    @Resource
    DamageMapper damageMapper;
    @Autowired
    DamageService damageService;
    @Autowired
    EdgGlassTaskInfoService edgGlassTaskInfoService;
//
//    @Override
//    public boolean identWorn(Map<String, Object> arguments) {
//        String glassId=arguments.get("glassId").toString();
//        int state=arguments.get("state").toString().isEmpty()?0:Integer.parseInt(arguments.get("state").toString());
//        int line=arguments.get("line").toString().isEmpty()?0:Integer.parseInt(arguments.get("line").toString());
//        String workingProcedure=arguments.get("workingProcedure").toString();
//        if(state==0||line==0||workingProcedure==null||glassId==null||glassId.isEmpty()){
//            log.info("前端传递数据不全:{}",arguments);
//            return false;
//        }
//        List<GlassInfo> GlassInfos = glassInfoMapper.selectList(new MPJLambdaQueryWrapper<GlassInfo>()
//                .selectAll(GlassInfo.class)
//                .eq(GlassInfo::getGlassId, glassId));
//        if (GlassInfos.size() == 1) {
//            Damage damage =new Damage();
//            damage.setGlassId(glassId);
//            damage.setLine(line);
//            damage.setWorkingProcedure(workingProcedure);
//            damage.setRemark("");
//            damage.setStatus(state);//8破损,9拿走
//            damageService.insertDamage(damage);
//        }else{
//            return false;
//        }
//        List<EdgStorageCageDetails> edgStorageCageDetails = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
//                .selectAll(EdgStorageCageDetails.class)
//                .eq(EdgStorageCageDetails::getGlassId, glassId));
//        if (edgStorageCageDetails.size() == 1) {
//            EdgStorageCageDetails item = edgStorageCageDetails.get(0);
//            item.setState(state);
//            baseMapper.update(item, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class).eq(EdgStorageCageDetails::getGlassId, glassId));
//        }
//        return true;
//    }
    /**
     * 获取 切割当前版图
@@ -77,12 +127,66 @@
     */
    @Override
    public List<Map<String, Object>> selectCutTerritory() {
        List<UpPattenUsage> upPattenUsage = upPattenUsageMapper.selectList(new MPJLambdaWrapper<UpPattenUsage>()
        //查询EdgStorageCageDetails最后一张玻璃所属版图
        List<UpPattenUsage> upPattenUsage = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
                .selectAll(UpPattenUsage.class)
                .orderByDesc(UpPattenUsage::getState)
                .orderByDesc(UpPattenUsage::getId));
                .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))
                .leftJoin(EdgStorageCageDetails.class, on -> on
                        .eq(EdgStorageCageDetails::getEngineerId, UpPattenUsage::getEngineeringId)
                        .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))
                .orderByDesc(UpPattenUsage::getLayoutSequence)
                .orderByDesc(GlassInfo::getId)
        );
        if (!upPattenUsage.isEmpty()) {
            //当前版
            UpPattenUsage upPattenUsage1 = upPattenUsage.get(0);
            //查看当前版是否存在未进笼子或破损的玻璃
            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))
                    .leftJoin(EdgStorageCageDetails.class, on -> on
                            .eq(EdgStorageCageDetails::getEngineerId, UpPattenUsage::getEngineeringId)
                            .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))
                    .orderByDesc(UpPattenUsage::getLayoutSequence)
                    .orderByDesc(GlassInfo::getId)
            );
            //显示下一版  否则显示当前版图
            if (upPattenUsage2.isEmpty()) {
                //剩余版图
                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())
                        .orderByAsc(UpPattenUsage::getLayoutSequence)
                );
                if (!upPattenUsage3.isEmpty()) {
                    //切换成下一版图
                    upPattenUsage1 = upPattenUsage3.get(0);
                }
            }
            List<Map<String, Object>> cutTerritorys = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
                    .selectAll(OptimizeDetail.class)
                    .selectAs(OptimizeLayout::getWidth, "olWidth")
@@ -93,29 +197,36 @@
                    .eq(OptimizeDetail::getProjectNo, upPattenUsage1.getEngineeringId())
                    .eq(OptimizeDetail::getStockId, upPattenUsage1.getLayoutSequence())
            );
            List<Map<String, Object>> ResultcutTerritorys = new ArrayList<>();
            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));
            Map<String, Damage> damageMaps = damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
                    .selectAll(Damage.class)
                    .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));
            List<Map<String, Object>> resultCutTerritory = new ArrayList<>();
            for (Map<String, Object> cutTerritory : cutTerritorys) {
                EdgStorageCageDetails edgStorageCageDetails = baseMapper.selectOne(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
                        .selectAll(EdgStorageCageDetails.class)
                        .eq(EdgStorageCageDetails::getGlassId, cutTerritory.get("glass_id"))
                        .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
//                log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails);
                if (edgStorageCageDetails != null) {
                    cutTerritory.put("glass_state", edgStorageCageDetails.getState());
                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) {
                    //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);
                }
                ResultcutTerritorys.add(cutTerritory);
                resultCutTerritory.add(cutTerritory);
            }
            return ResultcutTerritorys;
//            Sql版本
//            return optimizeDetailMapper.selectJoinMaps(new MPJQueryWrapper<OptimizeDetail>().selectAll(OptimizeDetail.class)
//                    .select("ol.width as olwidth","ol.height as olheight")
//                    .leftJoin("optimize_layout ol on t.project_no=ol.project_no and t.stock_id=ol.stock_id")
//                    .eq("t.project_no", upPattenUsage1.getEngineeringId())
//                    .eq("t.stock_id",upPattenUsage1.getLayoutSequence())
//            );
            return resultCutTerritory;
        }
        return null;
    }
@@ -128,10 +239,19 @@
     */
    @Override
    public List<List<Map<String, Object>>> selectCurrentCutTerritory(String current) {
        List<Engineering> engineering = engineeringMapper.selectJoinList(Engineering.class, new MPJLambdaWrapper<Engineering>()
                .selectAll(Engineering.class)
                .eq(Engineering::getEngineerId, current)
        );
        if (engineering.size() == 0) {
            log.info("当前工程号未领取过:{}", current);
            return new ArrayList<>();
        }
        //结果
        List<Map<String, Object>> ResultcutTerritorys = new ArrayList<>();
        List<Map<String, Object>> resultCutTerritory = new ArrayList<>();
        //此工程的所有优化数据
        List<Map<String, Object>> cutTerritorys = 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")
@@ -144,29 +264,104 @@
        Map<String, EdgStorageCageDetails> edgMaps = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
                .selectAll(EdgStorageCageDetails.class)
                .eq(EdgStorageCageDetails::getEngineerId, current)
                .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
        ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails -> EdgStorageCageDetails));
        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);
        ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails -> EdgStorageCageDetails, (V1, V2) -> V2));
        Map<String, Damage> damageMaps = damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
                .selectAll(Damage.class)
                .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));
        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);
                return new ArrayList<>();
            } 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);
            }
            ResultcutTerritorys.add(cutTerritory);
            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);
            }
            resultCutTerritory.add(item);
        }
        Map<String, List<Map<String, Object>>> groupBy = ResultcutTerritorys.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());
        return new ArrayList<>(groupBy.values());
//Sql版本
//        return optimizeDetailMapper.selectJoinMaps(new MPJQueryWrapper<OptimizeDetail>().selectAll(OptimizeDetail.class)
//                .select("ol.width as olwidth","ol.height as olheight")
//                .leftJoin("optimize_layout ol on t.project_no=ol.project_no and t.stock_id=ol.stock_id")
//                .eq("t.project_no",current)
//        );
        int count = 1;
        List<List<Map<String, Object>>> result = new ArrayList<>();
        for (String item : groupBy.keySet()) {
            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;
    }
    /**
@@ -302,4 +497,35 @@
                .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(double width, double height) {
        return baseMapper.queryEdgStorageDetailsBySize(width, height);
    }
}