From 09a010c5dc11c68a866a6075a74bd1bbefb4a9a8 Mon Sep 17 00:00:00 2001
From: wu <731351411@qq.com>
Date: 星期一, 24 六月 2024 16:38:23 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes

---
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java |  326 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 307 insertions(+), 19 deletions(-)

diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
index 04f9393..42c4c7a 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
@@ -1,30 +1,48 @@
 package com.mes.downstorage.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.query.MPJQueryWrapper;
 
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import com.github.yulichang.toolkit.JoinWrappers;
+import com.mes.common.config.Const;
+import com.mes.downstorage.entity.DownStorageCage;
 import com.mes.downstorage.entity.DownStorageCageDetails;
 import com.mes.downstorage.mapper.DownStorageCageDetailsMapper;
 
+import com.mes.downstorage.mapper.DownStorageCageMapper;
 import com.mes.downstorage.service.DownStorageCageDetailsService;
+import com.mes.downworkstation.entity.DownWorkstation;
+import com.mes.downworkstation.mapper.DownWorkstationMapper;
 import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.mapper.GlassInfoMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
+
 @Slf4j
 @Service
 public class DownStorageCageDetailsServiceImpl extends ServiceImpl<DownStorageCageDetailsMapper, DownStorageCageDetails> implements DownStorageCageDetailsService {
 
-
+    @Autowired(required = false)
+    private DownStorageCageMapper downStorageCageMapper;
     @Autowired
     private DownStorageCageDetailsMapper downStorageCageDetailsMapper;
+    @Autowired
+    private GlassInfoMapper glassInfoMapper;
+    @Autowired
+    private DownWorkstationMapper downWorkstationMapper;
+
     @Override
     public void addDownStorageCageDetails(DownStorageCageDetails details) {
         this.save(details);
@@ -33,33 +51,303 @@
 
     @Override
     //淇敼鐞嗙墖绗煎唴淇℃伅 鍔熻兘锛氬绗煎唴鏍呮牸鐜荤拑 銆愭坊鍔�/鍒犻櫎/鏇存崲銆�
-    public boolean updatedownStorageCageDetails(DownStorageCageDetails details){
+    public boolean updatedownStorageCageDetails(DownStorageCageDetails details) {
         baseMapper.updateById(details);
         return true;
     }
 
 
-    @Override
-    public List<DownStorageCageDetails> CacheOut(int start, int end) {
-        log.info("鍗曠墖鎯呭喌鏍规嵁浼犲叆鐨勫伐浣嶆煡璇㈢鍚堟寜鐓уぇ灏忓嚭鐗�,骞朵笖浼樺厛鍑烘弧鏋剁殑灏忕墖");
-        return downStorageCageDetailsMapper.selectJoinList(
-                DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>()
-                        .select("t.*")
-                        .leftJoin("(SELECT t1.* FROM down_storage_cage_details t1 "
-                                + "JOIN (SELECT flow_card_id, MAX(width) AS max_width FROM glass_info GROUP BY flow_card_id) t "
-                                + "ON t1.flow_card_id = t.flow_card_id WHERE t1.width = t.max_width) t3"
-                                + " ON t.glass_id = t3.glass_id")
-                        .leftJoin("down_workstation t4 ON t3.flow_card_id = t4.flow_card_id")
-                        .isNull(Boolean.parseBoolean("t.glass_id"), "SELECT glass_id FROM down_glass_info")
-                        .between("t4.workstation_id", start, end)
-                        // 鏍规嵁 racks_number 鎺掑簭
-                        .orderByDesc("t4.racks_number")
+//    @Override
+//    public List<DownStorageCageDetails> CacheOut(int start, int end) {
+//        log.info("鍗曠墖鎯呭喌鏍规嵁浼犲叆鐨勫伐浣嶆煡璇㈢鍚堟寜鐓уぇ灏忓嚭鐗�,骞朵笖浼樺厛鍑烘弧鏋剁殑灏忕墖");
+//        return downStorageCageDetailsMapper.selectJoinList(
+//                DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>()
+//                        .select("t.*")
+//                        .leftJoin("(SELECT t1.* FROM down_storage_cage_details t1 "
+//                                + "JOIN (SELECT flow_card_id, MAX(width*height) AS max_width FROM glass_info GROUP BY flow_card_id) t "
+//                                + "ON t1.flow_card_id = t.flow_card_id WHERE t1.width*t1.height = t.max_width) t3"
+//                                + " ON t.glass_id = t3.glass_id")
+//                        .leftJoin("down_workstation t4 ON t3.flow_card_id = t4.flow_card_id")
+//                        .isNull(Boolean.parseBoolean("t.glass_id"), "SELECT glass_id FROM down_glass_info")
+//                        .between("t4.workstation_id", start, end)
+//                        // 鏍规嵁 racks_number 鎺掑簭
+//                        .orderByDesc("t4.racks_number")
+//
+//        );
+//    }
 
+
+//    @Override
+//    public List<DownStorageCageDetails> getCacheOut(int start, int end) {
+//        log.info("鏍规嵁浼犲叆鐨勫伐浣嶆煡璇㈢鍚堟寜鐓ч『搴忓拰澶у皬鍑虹墖鐨勫皬鐗�");
+//        return  downStorageCageMapper.selectJoinList(
+//                DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCage>()
+//                        .select("escd.*")
+//                        .leftJoin("down_storage_cage_details escd on t.slot = escd.slot")
+//                        .leftJoin("down_workstation dw on escd.flow_card_id = dw.flow_card_id")
+//                        .leftJoin("glass_info gi on dw.flow_card_id = gi.flowcard_id  and gi.flowcard_id=escd.flow_card_id ")
+//                        .isNotNull("escd.slot")
+//                        .between("dw.workstation_id", start, end)
+//                        .orderByDesc("escd.width")
+//                        .orderByDesc("escd.height")
+//        );
+//    }
+
+
+//    @Override
+//    public List<DownStorageCageDetails> selectCacheEmpty2(){
+//        return  downStorageCageMapper.selectJoinList(
+//                DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCage>()
+//                        .select("escd.glass_id","escd.flow_card_id","escd.width","escd.height")
+//                        .leftJoin("down_storage_cage_details escd on t.device_id=escd.device_id and t.slot=escd.slot")
+//                        .isNull("escd.slot")
+//        );
+//    }
+
+
+    @Override
+    public List<Map<String, Object>> getCacheInfo() {
+        log.info("鏌ヨ绗煎瓙鍐呬俊鎭�");
+        return downStorageCageDetailsMapper.selectJoinMaps(JoinWrappers.lambda(DownStorageCageDetails.class) // 浣跨敤 JoinWrappers.lambda 鍒涘缓鑱斿悎鏌ヨ
+                .selectAll(DownStorageCageDetails.class) // 閫夋嫨鎵�鏈夊瓧娈�
+                .eq(DownStorageCage::getSlot, DownStorageCageDetails::getSlot) // 璁剧疆鍏宠仈鏉′欢
+                .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                .orderByAsc(DownStorageCage::getSlot) // 鎸� slot 瀛楁鍗囧簭鎺掑簭
         );
+    }
+
+//
+//    @Override
+//    public List<Map> getCacheInfo() {
+//        log.info(" 鏌ヨ绗煎瓙鍐呬俊鎭�");
+//        return downStorageCageMapper.selectJoinList(
+//                Map.class, new MPJQueryWrapper<DownStorageCage>()
+//                        .select("escd.*")
+//                        .leftJoin("down_storage_cage_details escd on t.slot = escd.slot")
+//                        .orderByAsc("t.slot")
+//        );
+//
+//    }
+
+//    @Override
+//    public List<DownStorageCageDetails> getCacheLeisure() {
+//        log.info(" 鏌ヨ绗煎瓙鍐呯┖闂�");
+//        List<DownStorageCageDetails> list = downStorageCageMapper.selectJoinList(
+//                DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCage>()
+//                        .select("escd.*")
+//                        .leftJoin("down_storage_cage_details escd on t.slot = escd.slot")
+//                        .isNull("escd.slot")
+//
+//                        .orderByAsc("escd.slot")
+//        );
+//        return list;
+//    }
+
+
+//    @Override
+//    public List<DownStorageCageDetails> getIsExistIntoCacheByflowcardid(String flowcardid, double width) {
+//        log.info("  鏌ヨ鍙繘姝ょ墖鐜荤拑鐨勬爡鏍煎彿  鎵惧埌绌烘牸");
+//
+//        return downStorageCageMapper.selectJoinList(
+//                DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCage>()
+//                        .select("escd.*")
+//                        .leftJoin("down_storage_cage_details escd on t.slot = escd.slot")
+//                        .isNull("escd.slot")
+//                        .apply("t.remain_width - " + width + " > 0")
+//                        .orderByAsc("escd.sequence")
+//        );
+//
+//
+//
+//
+//    }
+
+  //  @Override
+//    public List<GlassInfo>  DirectConnection(){
+//        LambdaQueryWrapper<GlassInfo> queryWrapper2 = Wrappers.lambdaQuery();
+//        queryWrapper2.select(GlassInfo::getFlowCardId,
+//                GlassInfo::getGlassId,
+//                GlassInfo::getTemperingLayoutId,
+//                GlassInfo::getTemperingFeedSequence)
+//                .notInSql(GlassInfo::getGlassId, "SELECT glass_id FROM down_glass_info")
+//                .orderByAsc(GlassInfo::getTemperingLayoutId)
+//                .orderByDesc(GlassInfo::getTemperingFeedSequence)
+//                .last("LIMIT 1");
+//
+//        // 鏌ヨ GlassInfo 琛�
+//        log.info("鐩撮�氭煡璇�");
+//        return glassInfoMapper.selectList(queryWrapper2);
+//
+//    };
+
+    @Override
+    public boolean DirectConnection(GlassInfo glassInfo) {
+        LambdaQueryWrapper<GlassInfo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(GlassInfo::getGlassId, glassInfo.getGlassId())
+                .notInSql(GlassInfo::getGlassId, "SELECT glass_id FROM down_glass_info")
+                .orderByDesc(GlassInfo::getGlassType)
+                .groupBy(GlassInfo::getFlowCardId)
+                .last("LIMIT 1");
+
+        // 鏌ヨ绗﹀悎鏉′欢鐨� GlassInfo 璁板綍鏁伴噺
+        int count = glassInfoMapper.selectCount(queryWrapper);
+
+        return count > 0;
     }
 
 
 
 
-    // Other business methods can be implemented here
+
+
+    @Override
+    public List<DownStorageCageDetails> CacheOut1(int start, int end) {
+
+
+        // 鍒涘缓涓�涓� LambdaQueryWrapper 瀹炰緥
+        LambdaQueryWrapper<DownStorageCageDetails> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+// 鏉′欢 state=100
+        lambdaQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
+        List<DownStorageCageDetails> cageDetails = downStorageCageDetailsMapper.selectList(lambdaQueryWrapper);
+        // Step 5: 鍒ゆ柇 down_storage_cage_details 缁撴灉鏁伴噺鏄惁涓�9锛屽鏋滄槸锛屽垯鎵ц鍙﹀涓�涓煡璇�
+        if (cageDetails.size() == 9) {
+            log.info("1銆佺瀛愭弧浜嗙殑鏃跺�欙紝鎸夌収绗煎唴鐗堝浘id 鐗堝浘鐗囧簭鍑�");
+            List<DownWorkstation> workstationList = downWorkstationMapper.selectList(new QueryWrapper<DownWorkstation>().between("workstation_id", start, end));
+
+            List<String> flowCardIds = new ArrayList<>();
+            for (DownWorkstation workstation : workstationList) {
+                flowCardIds.add(workstation.getFlowCardId());
+            }
+
+            if (flowCardIds.isEmpty()) {
+                log.error("鏈壘鍒板搴旂殑 flow_card_id");
+                return Collections.emptyList(); // 杩斿洖绌哄垪琛ㄦ垨鑰呮姏鍑哄紓甯革紝瑙嗘儏鍐佃�屽畾
+            }
+            LambdaQueryWrapper<DownStorageCageDetails> anotherQueryWrapper = Wrappers.lambdaQuery();
+
+            anotherQueryWrapper.orderByAsc(DownStorageCageDetails::getTemperingLayoutId);
+            anotherQueryWrapper.orderByDesc(DownStorageCageDetails::getTemperingFeedSequence);
+            anotherQueryWrapper.in(DownStorageCageDetails::getFlowCardId, flowCardIds);
+            anotherQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
+            anotherQueryWrapper.last("LIMIT 1");
+            return downStorageCageDetailsMapper.selectList(anotherQueryWrapper);
+        } else {
+
+            // Step 1: 鏌ヨ DownWorkstation 琛ㄨ幏鍙栧搴� workstation_id 鐨� flow_card_id
+            List<DownWorkstation> workstationList = downWorkstationMapper.selectList(new QueryWrapper<DownWorkstation>().between("workstation_id", start, end));
+
+            List<String> flowCardIds = new ArrayList<>();
+            for (DownWorkstation workstation : workstationList) {
+                flowCardIds.add(workstation.getFlowCardId());
+            }
+            if (flowCardIds.isEmpty()) {
+                log.error("2銆佹湭鎵惧埌瀵瑰簲鐨� flow_card_id");
+                return Collections.emptyList(); // 杩斿洖绌哄垪琛ㄦ垨鑰呮姏鍑哄紓甯革紝瑙嗘儏鍐佃�屽畾
+            }
+            log.info("娴佺▼鍗�:{}", flowCardIds);
+            LambdaQueryWrapper<GlassInfo> queryWrapper2 = Wrappers.lambdaQuery();
+            queryWrapper2.select(GlassInfo::getFlowCardId,
+                    GlassInfo::getGlassId,
+                    GlassInfo::getTemperingLayoutId,
+                    GlassInfo::getTemperingFeedSequence)
+                    .notInSql(GlassInfo::getGlassId, "SELECT glass_id FROM down_glass_info")
+                    .orderByAsc(GlassInfo::getTemperingLayoutId)
+                    .orderByDesc(GlassInfo::getTemperingFeedSequence)
+                    .last("LIMIT 1");
+
+            // 鏌ヨ GlassInfo 琛�
+            List<GlassInfo> glassInfos = glassInfoMapper.selectList(queryWrapper2);
+            if (glassInfos.isEmpty()) {
+                log.error("鏈壘鍒板搴旂殑鐜荤拑淇℃伅");
+                return Collections.emptyList(); // 杩斿洖绌哄垪琛ㄦ垨鑰呮姏鍑哄紓甯革紝瑙嗘儏鍐佃�屽畾
+            }
+            // Step 3: 鏋勯�犳煡璇� down_storage_cage_details 琛ㄧ殑鏉′欢
+            List<String> glassIds = glassInfos.stream().map(GlassInfo::getGlassId).collect(Collectors.toList());
+            LambdaQueryWrapper<DownStorageCageDetails> cageDetailsQueryWrapper = Wrappers.lambdaQuery();
+            cageDetailsQueryWrapper.in(DownStorageCageDetails::getGlassId, glassIds);
+            cageDetailsQueryWrapper.in(DownStorageCageDetails::getFlowCardId, flowCardIds);
+            cageDetailsQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
+            log.info("鎸夌収娴佺▼鍗$殑鐗堝浘id 鐗堝浘鐗囧簭鍑�");
+            // Step 4: 鏌ヨ down_storage_cage_details 琛ㄥ苟杩斿洖缁撴灉
+            return downStorageCageDetailsMapper.selectList(cageDetailsQueryWrapper);
+        }
+
+
+    }
+
+
+
+
+        @Override
+        public List<DownStorageCageDetails> CacheOut2(int start, int end) {
+
+
+            // 鍒涘缓涓�涓� LambdaQueryWrapper 瀹炰緥
+            LambdaQueryWrapper<DownStorageCageDetails> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+// 鏉′欢 state=100
+            lambdaQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
+            List<DownStorageCageDetails> cageDetails = downStorageCageDetailsMapper.selectList(lambdaQueryWrapper);
+            // Step 5: 鍒ゆ柇 down_storage_cage_details 缁撴灉鏁伴噺鏄惁涓�9锛屽鏋滄槸锛屽垯鎵ц鍙﹀涓�涓煡璇�
+            if (cageDetails.size() == 9) {
+                log.info("1銆佺瀛愭弧浜嗙殑鏃跺�欙紝鎸夌収绗煎唴娴佺▼鍗¢『搴忓嚭 GlassType鐩墠鏄祦绋嬪崱涓殑椤哄簭");
+                List<DownWorkstation> workstationList = downWorkstationMapper.selectList(new QueryWrapper<DownWorkstation>().between("workstation_id", start, end));
+
+                List<String> flowCardIds = new ArrayList<>();
+                for (DownWorkstation workstation : workstationList) {
+                    flowCardIds.add(workstation.getFlowCardId());
+                }
+
+                if (flowCardIds.isEmpty()) {
+                    log.error("鏈壘鍒板搴旂殑 flow_card_id");
+                    return Collections.emptyList(); // 杩斿洖绌哄垪琛ㄦ垨鑰呮姏鍑哄紓甯革紝瑙嗘儏鍐佃�屽畾
+                }
+                LambdaQueryWrapper<DownStorageCageDetails> anotherQueryWrapper = Wrappers.lambdaQuery();
+
+                anotherQueryWrapper.orderByAsc(DownStorageCageDetails::getGlassType);
+                anotherQueryWrapper.in(DownStorageCageDetails::getFlowCardId, flowCardIds);
+                anotherQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
+                anotherQueryWrapper.last("LIMIT 1");
+                return downStorageCageDetailsMapper.selectList(anotherQueryWrapper);
+            } else {
+
+                // Step 1: 鏌ヨ DownWorkstation 琛ㄨ幏鍙栧搴� workstation_id 鐨� flow_card_id
+                List<DownWorkstation> workstationList = downWorkstationMapper.selectList(new QueryWrapper<DownWorkstation>().between("workstation_id", start, end));
+
+                List<String> flowCardIds = new ArrayList<>();
+                for (DownWorkstation workstation : workstationList) {
+                    flowCardIds.add(workstation.getFlowCardId());
+                }
+                if (flowCardIds.isEmpty()) {
+                    log.error("2銆佹湭鎵惧埌瀵瑰簲鐨� flow_card_id");
+                    return Collections.emptyList(); // 杩斿洖绌哄垪琛ㄦ垨鑰呮姏鍑哄紓甯革紝瑙嗘儏鍐佃�屽畾
+                }
+                log.info("娴佺▼鍗�:{}", flowCardIds);
+                LambdaQueryWrapper<GlassInfo> queryWrapper2 = Wrappers.lambdaQuery();
+                queryWrapper2.select(GlassInfo::getFlowCardId,
+                        GlassInfo::getGlassId)
+                        .notInSql(GlassInfo::getGlassId, "SELECT glass_id FROM down_glass_info")
+                        .orderByAsc(GlassInfo::getGlassType)
+                        .last("LIMIT 1");
+
+                // 鏌ヨ GlassInfo 琛�
+                List<GlassInfo> glassInfos = glassInfoMapper.selectList(queryWrapper2);
+                if (glassInfos.isEmpty()) {
+                    log.error("鏈壘鍒板搴旂殑鐜荤拑淇℃伅");
+                    return Collections.emptyList(); // 杩斿洖绌哄垪琛ㄦ垨鑰呮姏鍑哄紓甯革紝瑙嗘儏鍐佃�屽畾
+                }
+                // Step 3: 鏋勯�犳煡璇� down_storage_cage_details 琛ㄧ殑鏉′欢
+                List<String> glassIds = glassInfos.stream().map(GlassInfo::getGlassId).collect(Collectors.toList());
+                LambdaQueryWrapper<DownStorageCageDetails> cageDetailsQueryWrapper = Wrappers.lambdaQuery();
+                cageDetailsQueryWrapper.in(DownStorageCageDetails::getGlassId, glassIds);
+                cageDetailsQueryWrapper.in(DownStorageCageDetails::getFlowCardId, flowCardIds);
+                cageDetailsQueryWrapper.eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN);
+                log.info("鎸夌収娴佺▼鍗$殑椤哄簭鍑�");
+                // Step 4: 鏌ヨ down_storage_cage_details 琛ㄥ苟杩斿洖缁撴灉
+                return downStorageCageDetailsMapper.selectList(cageDetailsQueryWrapper);
+            }
+
+
+    }
+
+
 }

--
Gitblit v1.8.0