From a325f9eda08af39cce45cba363e4247a1b7d5465 Mon Sep 17 00:00:00 2001
From: wu <731351411@qq.com>
Date: 星期五, 24 十月 2025 15:50:40 +0800
Subject: [PATCH] 切割排产,钢化排产的排序指定功能,排序规则重写

---
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java |  210 ++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 154 insertions(+), 56 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 e924a5c..ee1bfc4 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,10 +2,12 @@
 
 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.mes.base.entity.vo.BigStorageVO;
 import com.mes.bigstorage.entity.BigStorageCage;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.entity.dto.*;
@@ -13,32 +15,35 @@
 import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
+import com.mes.bigstoragecagetask.entity.BigStorageCageHistoryTask;
+import com.mes.bigstoragecagetask.service.BigStorageCageHistoryTaskService;
 import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
 import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO;
 import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
 import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper;
 import com.mes.common.config.Const;
+import com.mes.common.config.ConstSysConfig;
 import com.mes.damage.entity.Damage;
 import com.mes.damage.service.DamageService;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.mapper.GlassInfoMapper;
 import com.mes.glassinfo.service.GlassInfoService;
-import com.mes.job.PlcStorageCageTask;
+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;
 import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
 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.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -63,32 +68,37 @@
     private BigStorageCageService bigStorageCageService;
     @Resource
     private GlassInfoMapper glassInfoMapper;
+    @Resource
+    private OptimizeProjectService optimizeProjectService;
 
     @Resource
     private GlassInfoService glassInfoService;
 
     @Resource
     private TemperingGlassInfoService temperingGlassInfoService;
-
     @Resource
-    private PlcStorageCageTask plcStorageCageTask;
+    private SysConfigService sysConfigService;
+
 
     @Resource
     private DamageService damageService;
     @Resource
     private RedisUtil redisUtil;
 
-    @Value("${mes.minCount}")
-    private int minCount;
-
-    @Value("${mes.slotWidth}")
-    private Integer slotWidth;
-
-    @Value("${mes.glassGap}")
-    private Integer glassGap;
-
-    @Value("${mes.sequence.order}")
-    private boolean sequenceOrder;
+    @Resource
+    BigStorageCageHistoryTaskService bigStorageCageHistoryTaskService;
+//
+//    @Value("${mes.minCount}")
+//    private int minCount;
+//
+//    @Value("${mes.slotWidth}")
+//    private Integer slotWidth;
+//
+//    @Value("${mes.glassGap}")
+//    private Integer glassGap;
+//
+//    @Value("${mes.sequence.order}")
+//    private boolean sequenceOrder;
 
 
     @Override
@@ -164,7 +174,7 @@
         for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList
         ) {
             if (bigStorageCageDetails.getBigStorageCageFeedTask().getTaskState() == 0) {
-                carWidth = carWidth - bigStorageCageDetails.getWidth() - glassGap;
+                carWidth = carWidth - bigStorageCageDetails.getWidth() - 250;
             }
         }
         return carWidth;
@@ -230,7 +240,7 @@
         if (glassInfo != null) {
             BeanUtils.copyProperties(glassInfo, bigStorageCageDetails);
             bigStorageCageDetails.setState(1);
-            bigStorageCageDetails.setGap(glassGap);
+            bigStorageCageDetails.setGap(250);
             bigStorageCageDetailsList = new ArrayList<>();
             bigStorageCageDetailsList.add(bigStorageCageDetails);
         }
@@ -266,8 +276,51 @@
     }
 
     @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 + "'")
+                .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);
         MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class)
                 .selectAll(BigStorageCage.class)
                 .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
@@ -372,6 +425,11 @@
     }
 
     @Override
+    public List<TemperingLayoutDTO> temperingIsAllByTemperingLayoutId(String engineerId, Integer temperingLayoutId) {
+        return baseMapper.temperingIsAllByTemperingLayoutId(engineerId, temperingLayoutId);
+    }
+
+    @Override
     public List<TemperingLayoutDTO> temperingIsAll() {
         return baseMapper.temperingIsAll();
     }
@@ -379,7 +437,7 @@
 
     @Override
     public List<TemperingLayoutDTO> queryTemperingOccupySlot() {
-        return baseMapper.queryTemperingOccupySlot(minCount);
+        return baseMapper.queryTemperingOccupySlot(10);
     }
 
     @Override
@@ -390,24 +448,36 @@
     @Override
     public boolean temperingGlass(String temperingLayoutId, String engineerId, String temperingFeedSequence) {
         LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        SysConfig sysConfig = sysConfigService.queryConfigById(ConstSysConfig.CACHE_SEQUENCE_ORDER_TRUE);
+        boolean sequenceOrder = Boolean.parseBoolean(sysConfig.getConfigValue());
         temperingGlassInfoLambdaQueryWrapper
                 .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)
-                    .selectAll(GlassInfo.class)
-                    .select("-1 as state")
-                    .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
+            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)) {
-                        plcStorageCageTask.computeOutMoreGlassInfo(temperingGlassInfos, Boolean.FALSE, "");
+//                        plcStorageCageTask.computeOutMoreGlassInfo(temperingGlassInfos, Boolean.FALSE, "");
                     }
                 } else {
                     temperingGlassInfoService.saveBatch(temperingGlassInfos);
@@ -443,9 +513,21 @@
     @Override
     public List<BigStorageCageDetails> queryRealGlassInfo(BigStorageQueryVO bigStorageQueryVO) {
         return this.list(new LambdaQueryWrapper<BigStorageCageDetails>()
-                .eq(BigStorageCageDetails::getEngineerId,bigStorageQueryVO.getEngineerId())
-                .eq(BigStorageCageDetails::getTemperingLayoutId,bigStorageQueryVO.getTemperingLayoutId())
-                .in(BigStorageCageDetails::getState,Const.GLASS_STATE_IN_ALL));
+                .eq(BigStorageCageDetails::getEngineerId, bigStorageQueryVO.getEngineerId())
+                .eq(BigStorageCageDetails::getTemperingLayoutId, bigStorageQueryVO.getTemperingLayoutId())
+                .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL).orderByAsc(BigStorageCageDetails::getTemperingFeedSequence));
+    }
+
+    @Override
+    public Map<Integer, List<BigStorageVO>> querybigStorageCageDetail() {
+        List<BigStorageVO> bigStorageCages = baseMapper.querybigStorageCageDetail();
+        return bigStorageCages.stream().collect(Collectors.groupingBy(item -> item.getDeviceId()));
+    }
+
+    @Override
+    public boolean cancelTemperingTask() {
+        redisUtil.deleteObject("temperingEngineerId");
+        return Boolean.TRUE;
     }
 
     @Override
@@ -456,34 +538,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)
-                    .selectAll(GlassInfo.class)
-                    .select("-1 as state")
-                    .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
-                    .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
-                    .eq(GlassInfo::getEngineerId, engineerId)
-                    .ne(GlassInfo::getTemperingLayoutId, 0)
-                    .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
-                    .orderByAsc(GlassInfo::getTemperingLayoutId)
-                    .orderByAsc(GlassInfo::getTemperingFeedSequence)
-            );
-            if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
-                temperingGlassInfoService.saveBatch(temperingGlassInfos);
-                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
@@ -504,4 +570,36 @@
     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<OptimizeProject> queryTemperingOrder() {
+        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();
+                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;
+    }
 }

--
Gitblit v1.8.0