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