From 87bf646a21a1664575110a85a132f486d8954293 Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期一, 17 六月 2024 14:10:33 +0800
Subject: [PATCH] 大理片笼进出片任务逻辑初次提交:已完成进出片、调度功能,功能待调整优化
---
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml | 46 +++++++++-
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java | 22 +++++
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java | 16 ++++
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java | 48 ++++++++++-
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml | 4
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java | 5 +
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java | 13 +++
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java | 38 +++++++++
8 files changed, 177 insertions(+), 15 deletions(-)
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java
new file mode 100644
index 0000000..f22b64b
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java
@@ -0,0 +1,38 @@
+package com.mes.bigstorage.entity.dto;
+
+import lombok.Data;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/6/13 15:51
+ * @Description:
+ */
+@Data
+public class SlotSequenceDTO {
+ /**
+ * 閽㈠寲鐗堝浘id
+ */
+ private String engineerId;
+
+ /**
+ * 閽㈠寲鐗堝浘id
+ */
+ private Integer temperingLayoutId;
+ /**
+ * 澶х悊鐗囪鎯呬腑鏍煎瓙鍙�
+ */
+ private Integer slot;
+ /**
+ * 鏍煎瓙鍐呯殑鏈�澶у簭鍙�
+ */
+ private Integer maxSequence;
+ /**
+ * 鏍煎瓙鍐呯殑鏈�灏忓簭鍙�
+ */
+ private Integer minSequence;
+
+ /**
+ * 鏍煎瓙鍓╀綑瀹藉害
+ */
+ private Integer remainWidth;
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java
index 279c335..18d4edb 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java
@@ -22,4 +22,9 @@
* 褰撳墠鐗堝浘鏁伴噺
*/
private Integer count;
+
+ /**
+ * 褰撳墠鐗堝浘鍗犵敤鏍煎瓙鏁伴噺
+ */
+ private Integer slotCount;
}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
index 1a59438..da14719 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
@@ -2,7 +2,11 @@
import com.github.yulichang.base.MPJBaseMapper;
import com.mes.bigstorage.entity.BigStorageCageDetails;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
/**
@@ -22,4 +26,13 @@
*/
TemperingLayoutDTO temperingIsAll();
+ /**
+ * 鑾峰彇姣忎釜閽㈠寲鐗堝浘鍗犵敤鐨勬牸瀛愭暟閲�
+ *
+ * @return
+ */
+ TemperingLayoutDTO queryTemperingOccupySlot(@Param(value = "count") int count);
+
+
+ List<SlotSequenceDTO> queryGlassMaxAndMin(@Param(value = "engineerId") String engineerId, @Param(value = "temperingLayoutId") Integer temperingLayoutId);
}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
index 9c5ad4f..d0d52d2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
import com.mes.glassinfo.entity.GlassInfo;
@@ -41,5 +42,26 @@
*/
BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo);
+ /**
+ * 鑾峰彇閽㈠寲鐗堝浘宸茬粡鍒伴綈鐨勫伐绋嬪彿鍙婄増鍥緄d
+ *
+ * @return
+ */
TemperingLayoutDTO temperingIsAll();
+
+ /**
+ * 鑾峰彇姣忎釜閽㈠寲鐗堝浘鍗犵敤鐨勬牸瀛愭暟閲�
+ *
+ * @return
+ */
+ TemperingLayoutDTO queryTemperingOccupySlot();
+
+ /**
+ * 鑾峰彇鐗堝浘姣忎釜鏍煎瓙鐨勬渶澶ф渶灏忓簭鍙�
+ *
+ * @param engineerId
+ * @param temperingLayoutId
+ * @return
+ */
+ List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId);
}
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 f909c54..6d0014c 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
@@ -7,6 +7,7 @@
import com.mes.bigstorage.entity.BigStorageCage;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
import com.mes.bigstorage.service.BigStorageCageDetailsService;
@@ -21,6 +22,7 @@
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -49,6 +51,9 @@
private BigStorageCageService bigStorageCageService;
@Resource
private GlassInfoMapper glassInfoMapper;
+
+ @Value("${mes.minCount}")
+ private int minCount;
/**
* 鏌ヨ杩�/鍑虹墖浠诲姟
@@ -259,4 +264,15 @@
public TemperingLayoutDTO temperingIsAll() {
return baseMapper.temperingIsAll();
}
+
+
+ @Override
+ public TemperingLayoutDTO queryTemperingOccupySlot() {
+ return baseMapper.queryTemperingOccupySlot(minCount);
+ }
+
+ @Override
+ public List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId) {
+ return baseMapper.queryGlassMaxAndMin(engineerId, temperingLayoutId);
+ }
}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
index 281f395..6bf600b 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
import com.mes.bigstorage.service.BigStorageCageDetailsService;
import com.mes.bigstorage.service.BigStorageCageService;
@@ -62,6 +63,9 @@
@Value("${mes.sequence.order}")
private boolean sequenceOrder;
+
+ @Value("${mes.slotWidth}")
+ private Integer slotWidth;
public static boolean bigStorageCageFullAlarm = false;
@@ -285,13 +289,13 @@
return;
}
- //todo:鑾峰彇鐘舵�佸瓧 閽㈠寲浼樺厛 or 浜哄伐涓嬬墖浼樺厛
+ //鑾峰彇鐘舵�佸瓧 閽㈠寲浼樺厛 or 浜哄伐涓嬬墖浼樺厛
if (true) {
- //todo:閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩 鐜荤拑灏忕墖 鐮存崯琛� 鏁伴噺 鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
+ //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩 鐜荤拑灏忕墖 鐮存崯琛� 鏁伴噺 鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
TemperingLayoutDTO temperingLayoutDTO = bigStorageCageDetailsService.temperingIsAll();
if (null != temperingLayoutDTO) {
//鐜荤拑鍒伴綈
- //todo: 鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟 缁撴潫
+ //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟 缁撴潫
List<BigStorageCageDetails> bigStorageCageDetails = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
.eq(BigStorageCageDetails::getTemperingLayoutId, temperingLayoutDTO.getTemperingLayoutId())
.eq(BigStorageCageDetails::getEngineerId, temperingLayoutDTO.getEngineerId()));
@@ -302,7 +306,7 @@
}).collect(Collectors.toList());
temperingGlassInfoService.saveBatch(temperingGlassInfos);
- //鎵撹溅鍓╀綑灏哄
+ //澶ц溅鍓╀綑灏哄
AtomicReference<Integer> remainWidth = new AtomicReference<>(Const.BIG_STORAGE_WIDTH);
temperingGlassInfoList.stream().forEach(e -> {
if (bigStorageCageOutTaskList.size() > 5 || e.getWidth() > remainWidth.get()) {
@@ -315,11 +319,41 @@
bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
return;
}
- //todo: 鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟 缁撴潫
+ //鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟 缁撴潫
+ TemperingLayoutDTO temperingOccupySlot = bigStorageCageDetailsService.queryTemperingOccupySlot();
+ if (null != temperingOccupySlot) {
+ List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId());
+ for (int i = 0; i < slotSequenceList.size() - 1; i++) {
+ SlotSequenceDTO first = slotSequenceList.get(i);
+ SlotSequenceDTO second = slotSequenceList.get(i + 1);
+ if (first.getMinSequence() == second.getMaxSequence() + 1
+ && second.getRemainWidth() > Const.BIG_STORAGE_WIDTH - first.getRemainWidth() - Const.BIG_STORAGE_GAP) {
+ List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+ .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN));
+ List<BigStorageCageOutTask> outTasks = list.stream().map(e -> new BigStorageCageOutTask(e.getGlassId(), first.getSlot(), second.getSlot(),
+ 0, 0, 1)).collect(Collectors.toList());
+ bigStorageCageOutTaskService.saveBatch(outTasks);
+ return;
+ }
+ }
+ }
}
- //todo:绗煎唴鏄惁鏈変汉宸ヤ笅鐗囩幓鐠� 鏈夌洿鎺ュ嚭 鏃� 缁撴潫
-
+ //绗煎唴鏄惁鏈変汉宸ヤ笅鐗囩幓鐠� 鏈夌洿鎺ュ嚭 鏃� 缁撴潫
+ List<BigStorageCageDetails> oneList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+ .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN).orderByDesc(BigStorageCageDetails::getWidth));
+ AtomicReference<Integer> remainWidth = new AtomicReference<>(Const.BIG_STORAGE_WIDTH);
+ if (CollectionUtils.isNotEmpty(oneList)) {
+ oneList.stream().forEach(e -> {
+ if (remainWidth.get() < e.getWidth().intValue()) {
+ return;
+ }
+ bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), 0, 0, 0, 1));
+ remainWidth.set(remainWidth.get() - e.getWidth().intValue() - Const.BIG_STORAGE_GAP);
+ });
+ bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+ return;
+ }
}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
index 7209b1f..2a8d5ea 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -12,4 +12,6 @@
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mes:
sequence:
- order: false
\ No newline at end of file
+ order: false
+ minCount: 5
+ slotWidth: 5000
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index 1f64557..c016951 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -6,14 +6,18 @@
<result column="engineer_id" property="engineerId"/>
<result column="tempering_layout_id" property="temperingLayoutId"/>
<result column="count" property="count"/>
+ <result column="slot_count" property="slotCount"/>
</resultMap>
- <!-- <select id="listAllTemperingCount" resultMap="temperingLayoutDTO">-->
- <!-- select tempering_layout_id,-->
- <!-- count(tempering_layout_id) as count-->
- <!-- from big_storage_cage_details-->
- <!-- where state = 100-->
- <!-- group by tempering_layout_id-->
- <!-- </select>-->
+
+ <resultMap id="slotSequenceDTO" type="com.mes.bigstorage.entity.dto.SlotSequenceDTO">
+ <result column="engineer_id" property="engineerId"/>
+ <result column="tempering_layout_id" property="temperingLayoutId"/>
+ <result column="slot" property="slot"/>
+ <result column="max_sequence" property="maxSequence"/>
+ <result column="min_sequence" property="minSequence"/>
+ <result column="remain_width" property="remainWidth"/>
+ </resultMap>
+
<select id="temperingIsAll" resultMap="temperingLayoutDTO">
SELECT T.ENGINEER_ID,
T.TEMPERING_LAYOUT_ID,
@@ -41,4 +45,32 @@
LIMIT 1
</select>
+ <select id="queryTemperingOccupySlot" resultMap="temperingLayoutDTO">
+ SELECT TEMPERING_LAYOUT_ID,
+ COUNT(DISTINCT SLOT) as SLOT_COUNT
+ FROM BIG_STORAGE_CAGE_DETAILS
+ WHERE STATE = 100
+ GROUP BY ENGINEER_ID,
+ TEMPERING_LAYOUT_ID
+ HAVING SLOT_COUNT >= #{count} LIMIT 1
+ </select>
+ <select id="queryGlassMaxAndMin" resultMap="slotSequenceDTO">
+ SELECT T.*,
+ T1.REMAIN_WIDTH
+ FROM (
+ SELECT ENGINEER_ID,
+ TEMPERING_LAYOUT_ID,
+ SLOT,
+ MAX(TEMPERING_FEED_SEQUENCE) AS MAX_SEQUENCE,
+ MIN(TEMPERING_FEED_SEQUENCE) AS MIN_SEQUENCE
+ FROM BIG_STORAGE_CAGE_DETAILS
+ WHERE ENGINEER_ID = #{engineerId}
+ AND TEMPERING_LAYOUT_ID = #{temperingLayoutId}
+ GROUP BY ENGINEER_ID,
+ TEMPERING_LAYOUT_ID,
+ SLOT
+ ) T
+ INNER JOIN BIG_STORAGE_CAGE T1 ON T.SLOT = T1.SLOT
+ ORDER BY T.MAX_SEQUENCE DESC
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.8.0