From da30bfc3795305f0bbd400d196bcf4c30612c37f Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期三, 10 十二月 2025 17:01:33 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10105/r/YiWuProject

---
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java |  191 ++++++++++++++++++++++++++++++++++-------------
 1 files changed, 138 insertions(+), 53 deletions(-)

diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
index b0aa717..9905baf 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -2,16 +2,18 @@
 
 import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.toolkit.JoinWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import com.google.common.collect.Lists;
 import com.mes.base.entity.vo.BigStorageVO;
 import com.mes.bigstorage.entity.BigStorageCage;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.entity.dto.*;
+import com.mes.bigstorage.entity.request.BigCageDetailsRequest;
 import com.mes.bigstorage.entity.vo.BigStorageQueryVO;
+import com.mes.bigstorage.entity.vo.BigCageDetailsVO;
 import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
@@ -29,6 +31,8 @@
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.mapper.GlassInfoMapper;
 import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.pp.entity.OptimizeProject;
+import com.mes.pp.service.OptimizeProjectService;
 import com.mes.sysconfig.entity.SysConfig;
 import com.mes.sysconfig.service.SysConfigService;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
@@ -36,10 +40,12 @@
 import com.mes.temperingglass.service.TemperingGlassInfoService;
 import com.mes.utils.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.*;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -68,6 +74,8 @@
     private BigStorageCageService bigStorageCageService;
     @Resource
     private GlassInfoMapper glassInfoMapper;
+    @Resource
+    private OptimizeProjectService optimizeProjectService;
 
     @Resource
     private GlassInfoService glassInfoService;
@@ -77,8 +85,6 @@
     @Resource
     private SysConfigService sysConfigService;
 
-//    @Resource
-//    private PlcStorageCageTask plcStorageCageTask;
 
     @Resource
     private DamageService damageService;
@@ -276,6 +282,48 @@
     }
 
     @Override
+    public BigStorageDTO queryTargetSlot(String EngineerId, String glassId, int thickness) {
+        BigStorageDTO bigStorageDTO = null;
+        int slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_WIDTH);
+
+        BigStorageCage bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                .eq(BigStorageCage::getRemainWidth, slotWidth).orderByAsc(BigStorageCage::getSlot)
+                .inSql(BigStorageCage::getDeviceId,
+                        "select distinct device_id from big_storage_cage_details where engineer_id = '" + EngineerId + "' and device_id not in (5,6)")
+                .last("limit 1"));
+        if (null != bigStorageCage) {
+            log.info("鏍规嵁鐗堝浘id鎵惧埌绗煎瓙鍐呯殑鐩爣鏍煎瓙锛歿},鐜荤拑id锛歿}", bigStorageCage.getSlot(), glassId);
+            bigStorageDTO = new BigStorageDTO();
+            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+            bigStorageDTO.setSlot(bigStorageCage.getSlot());
+            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+            return bigStorageDTO;
+        }
+
+        //鑾峰彇鐜荤拑鐨勫帤搴︼細閲嶆柊閫夌瀛愰渶瑕佹寜鐓х瀛愬彲鏀剧幓鐠冨帤搴﹁繘琛岄�夋嫨 鍥犱负瀛愭煡璇㈡帓搴忓涓籹ql鏃犲奖鍝嶏紝鎵�浠ュ厛鎵ц瀛愭煡璇㈣幏鍙栭『搴忥紝鐒跺悗涓�娆″幓鏌ヨ
+        List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(thickness);
+
+        for (Integer item : deviceUsedList) {
+            bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+                    .eq(BigStorageCage::getRemainWidth, slotWidth).orderByAsc(BigStorageCage::getSlot)
+                    .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                    .eq(BigStorageCage::getDeviceId, item)
+                    .last("limit 1"));
+            if (null != bigStorageCage) {
+                log.info("鎸夌収瀛樼鐜荤拑鏍煎瓙鏁板崰鐢ㄦ渶灏戞柟寮忚幏鍙栦俊鎭牸瀛愪负锛歿},鐜荤拑id锛歿}", bigStorageCage.getSlot(), glassId);
+                bigStorageDTO = new BigStorageDTO();
+                bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+                bigStorageDTO.setSlot(bigStorageCage.getSlot());
+                bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+                return bigStorageDTO;
+            }
+        }
+        Assert.isTrue(null != bigStorageCage, "娌℃湁绌轰綑鐨勭瀛愬瓨鏀剧幓鐠�");
+        return bigStorageDTO;
+    }
+
+    @Override
     public BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo) {
         BigStorageDTO bigStorageDTO = null;
         int slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.VERTICAL_SLOT_WIDTH);
@@ -383,6 +431,11 @@
     }
 
     @Override
+    public List<TemperingLayoutDTO> temperingIsAllByTemperingLayoutId(String engineerId, Integer temperingLayoutId) {
+        return baseMapper.temperingIsAllByTemperingLayoutId(engineerId, temperingLayoutId);
+    }
+
+    @Override
     public List<TemperingLayoutDTO> temperingIsAll() {
         return baseMapper.temperingIsAll();
     }
@@ -407,16 +460,26 @@
                 .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW);
         List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoMapper.selectList(temperingGlassInfoLambdaQueryWrapper);
 
+        int dispatchCount = bigStorageCageHistoryTaskService.count(new LambdaQueryWrapper<BigStorageCageHistoryTask>()
+                .eq(BigStorageCageHistoryTask::getTaskState, Const.GLASS_STATE_NEW)
+                .eq(BigStorageCageHistoryTask::getTaskType, Const.BIG_STORAGE_BEFORE_DISPATCH));
+
         if (temperingGlassInfoList.size() == 0) {
-            List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
+            MPJLambdaWrapper<GlassInfo> wrapper = JoinWrappers.lambda(GlassInfo.class)
                     .select("-1 as state,t.filmsid as films_id,t.glass_id,t.flow_card_id,t.glass_type,t.width,t.height" +
                             ",t.thickness,t.ishorizontal,t.tempering_layout_id,t.tempering_feed_sequence,t.x_coordinate,t.y_coordinate," +
                             "t.angle,t1.slot,t.engineer_id")
                     .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
                     .eq(GlassInfo::getTemperingLayoutId, temperingLayoutId)
                     .eq(GlassInfo::getEngineerId, engineerId)
-                    .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
-                    .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
+
+                    .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence);
+            if (dispatchCount > 0) {
+                wrapper.in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL);
+            } else {
+                wrapper.in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN);
+            }
+            List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, wrapper);
             if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
                 if ("0".equals(temperingFeedSequence)) {
                     if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
@@ -469,25 +532,7 @@
 
     @Override
     public boolean cancelTemperingTask() {
-        //褰撳墠姝e湪鎵ц鐨勫嚭鐗囦换鍔�
-        List<BigStorageCageHistoryTask> historyTaskList = bigStorageCageHistoryTaskService.list(new LambdaQueryWrapper<BigStorageCageHistoryTask>()
-                .eq(BigStorageCageHistoryTask::getTaskState, Const.GLASS_STATE_NEW)
-                .eq(BigStorageCageHistoryTask::getTargetSlot, Const.TEMPERING_OUT_TARGET_POSITION));
-        //涓嶅瓨鍦ㄥ嚭鐗囦换鍔★紝鐩存帴鍒犻櫎閽㈠寲灏忕墖琛ㄦ湭鍑虹墖鐨勪换鍔�
-        if (CollectionUtils.isEmpty(historyTaskList)) {
-            temperingGlassInfoMapper.delete(new LambdaQueryWrapper<TemperingGlassInfo>().eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW));
-            return Boolean.TRUE;
-        }
-        //瀛樺湪鍑虹墖浠诲姟锛屽垹闄ら挗鍖栧皬鐗囪〃
-        List<String> glassIdList = historyTaskList.stream().map(BigStorageCageHistoryTask::getGlassId).collect(Collectors.toList());
-        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIdList)
-                .orderByDesc(GlassInfo::getTemperingFeedSequence).last("limit 1"));
-        temperingGlassInfoMapper.delete(new LambdaQueryWrapper<TemperingGlassInfo>()
-                .eq(TemperingGlassInfo::getEngineerId, glassInfo.getEngineerId())
-                .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
-                .ge(TemperingGlassInfo::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
-                .gt(TemperingGlassInfo::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence())
-        );
+        redisUtil.deleteObject("temperingEngineerId");
         return Boolean.TRUE;
     }
 
@@ -499,38 +544,18 @@
 
     @Override
     public boolean appointTemperingEngineerId(String engineerId) {
-        LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        temperingGlassInfoLambdaQueryWrapper
-                .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW);
-        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoMapper.selectList(temperingGlassInfoLambdaQueryWrapper);
-
-        if (temperingGlassInfoList.size() == 0) {
-            List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
-                    .select("-1 as state,t.filmsid as films_id,t.glass_id,t.flow_card_id,t.glass_type,t.width,t.height" +
-                            ",t.thickness,t.ishorizontal,t.tempering_layout_id,t.tempering_feed_sequence,t.x_coordinate,t.y_coordinate," +
-                            "t.angle,t1.slot,t.engineer_id")
-                    .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
-                    .eq(GlassInfo::getEngineerId, engineerId)
-                    .ne(GlassInfo::getTemperingLayoutId, 0)
-                    .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
-                    .orderByAsc(BigStorageCageDetails::getTemperingLayoutId)
-                    .orderByAsc(BigStorageCageDetails::getTemperingFeedSequence)
-            );
-            if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
-                //閬垮厤澶ч噺鏁版嵁鎻掑叆瀵艰嚧sqlserver鏁版嵁搴撳紓甯革紝鍒嗘壒娆℃瘡璋冨瓨鍌ㄤ緷娆�
-                List<List<TemperingGlassInfo>> temperingGlassInfoLists = Lists.partition(temperingGlassInfos, 50);
-                for (List<TemperingGlassInfo> item : temperingGlassInfoLists) {
-                    temperingGlassInfoService.saveBatch(item);
-                }
-                return true;
-            }
+        String oldEngineerId = redisUtil.getCacheObject("temperingEngineerId");
+        if (StringUtils.isBlank(oldEngineerId)) {
+            redisUtil.setCacheObject("temperingEngineerId", engineerId);
+            return Boolean.TRUE;
+        } else {
+            return Boolean.FALSE;
         }
-        return false;
     }
 
     @Override
-    public List<BigStorageRelationDTO> queryIsAllNeedDispatchVirtualSlot() {
-        return baseMapper.queryIsAllNeedDispatchVirtualSlot();
+    public List<BigStorageRelationDTO> queryIsAllNeedDispatchVirtualSlot(List<Integer> deviceIdList) {
+        return baseMapper.queryIsAllNeedDispatchVirtualSlot(deviceIdList);
     }
 
     @Override
@@ -551,4 +576,64 @@
     public void updateDeviceIdBySlot(List<Integer> slotList) {
         baseMapper.updateDeviceIdBySlot(slotList);
     }
+
+    @Override
+    public List<BigStorageCageDetails> queryEngineer() {
+        QueryWrapper<BigStorageCageDetails> wrapper = new QueryWrapper<>();
+        wrapper.select("distinct engineer_id")
+                .eq("state", 100);
+        return this.list(wrapper);
+    }
+
+    @Override
+    public List<BigStorageCageDetails> queryNeedDispatch() {
+        return baseMapper.queryNeedDispatch();
+    }
+
+    @Override
+    public BigStorageSlotDTO queryNeedDispatchSlotBySequence() {
+        return baseMapper.queryNeedDispatchSlotBySequence();
+    }
+
+    @Override
+    public List<OptimizeProject> queryTemperingOrder() {
+        String temperingengineerId = redisUtil.getCacheObject("temperingEngineerId");
+        List<TemperingGlassCountDTO> temperingGlassCountDTOS = baseMapper.queryTemperingGlassCountSummary(1);
+        List<OptimizeProject> projectList = optimizeProjectService.engineerScheduling(new OptimizeProject() {{
+            setType(3);
+        }});
+        Set<String> projectNoSet = projectList.stream()
+                .map(OptimizeProject::getProjectNo)
+                .collect(Collectors.toSet());
+        List<OptimizeProject> resultList = new ArrayList<>();
+        for (TemperingGlassCountDTO dto : temperingGlassCountDTOS) {
+            if (projectNoSet.contains(dto.getEngineerId())) {
+                OptimizeProject project = new OptimizeProject();
+                if (Objects.equals(dto.getEngineerId(), temperingengineerId)) {
+                    project.setState(1);
+                }
+                project.setProjectNo(dto.getEngineerId());
+                project.setGlassType(dto.getFilmsId());
+                project.setGlassThickness(dto.getThickness().intValue());
+                project.setGlassTotal(dto.getTotalCount());
+                project.setGlassTotalArea(dto.getRealCount());
+                resultList.add(project);
+            }
+        }
+        return resultList;
+    }
+
+    @Override
+    public List<BigCageDetailsVO> queryVerticalSheetCageDetailsList(BigCageDetailsRequest request) {
+        List<BigCageDetailsVO> cageDetails = baseMapper.queryVerticalSheetCageDetailsList(request);
+        if (!(com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(request.getFlowCardId()) &&
+                com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(request.getFilmsId()) &&
+                com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(request.getEngineerId()) &&
+                com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(request.getGlassId()))) {
+            cageDetails = cageDetails.stream()
+                    .filter(detail -> detail.getGlassId() != null)
+                    .collect(Collectors.toList());
+        }
+        return cageDetails;
+    }
 }

--
Gitblit v1.8.0