From a851a0eb0b9c5a8a5e9e4b038fbd1f0bf5f58bbc Mon Sep 17 00:00:00 2001
From: wuyouming666 <2265557248@qq.com>
Date: 星期五, 21 六月 2024 16:12:08 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes
---
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java | 177 ++++++++++++++++++++++++++++++++++------------------------
1 files changed, 104 insertions(+), 73 deletions(-)
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 01aa22e..aebf46d 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
@@ -5,6 +5,8 @@
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.github.yulichang.toolkit.JoinWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.mes.base.entity.BigStorageCageBaseInfo;
import com.mes.bigstorage.entity.BigStorageCage;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.entity.BigStorageDTO;
@@ -16,7 +18,9 @@
import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService;
import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
+import com.mes.common.S7object;
import com.mes.common.config.Const;
+import com.mes.device.PlcParameterObject;
import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
import com.mes.glassinfo.entity.GlassInfo;
@@ -27,13 +31,11 @@
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -63,26 +65,28 @@
@Value("${mes.sequence.order}")
private boolean sequenceOrder;
+ @Value("${mes.carWidth}")
+ private Integer carWidth;
+
@Value("${mes.slotWidth}")
private Integer slotWidth;
- // @Scheduled(fixedDelay = 5000)
- public void plcToHomeEdgScan(String d01Id) {
-// PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
-// String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue();
-// String d01Id = plcParameterObject.getPlcParameter("D01ID1").getValue();
-// String d02SitState = plcParameterObject.getPlcParameter("D02SitState").getValue();
-// String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue();
-// String d04Id = plcParameterObject.getPlcParameter("D04ID1").getValue();
-// String d05SitState = plcParameterObject.getPlcParameter("D05SitState").getValue();
+ @Value("${mes.carMaxSize}")
+ private Integer carMaxSize;
- String d01Request = "1";
- String d02SitState = "0";
-// String d01Id = "P24060403|3|6";
- String d04Request = "0";
- String d05SitState = "0";
-// String d04Id = "P24060403|4|3";
- String d04Id = "P24060403|5|4";
+ @Value("${mes.galssGap}")
+ private Integer galssGap;
+
+ @Scheduled(fixedDelay = 5000)
+ public void plcToHomeEdgScan() {
+ PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+ String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue();
+ String d01Id = plcParameterObject.getPlcParameter("D01ID1").getValue();
+ String d02SitState = plcParameterObject.getPlcParameter("D02SitState").getValue();
+ String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue();
+ String d04Id = plcParameterObject.getPlcParameter("D04ID1").getValue();
+ String d05SitState = plcParameterObject.getPlcParameter("D05SitState").getValue();
+
log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧d01涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};鑾峰彇鍒扮殑璇锋眰瀛梔04涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};",
d01Request, d01Id, d04Request, d04Id);
if (!REQUEST_WORD.equals(d01Request) && !REQUEST_WORD.equals(d04Request)) {
@@ -116,23 +120,18 @@
}
}
- // @Scheduled(fixedDelay = 5000)
+ @Scheduled(fixedDelay = 5000)
public void plcToHomeEdgFreeCarTask() {
-// PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
-// String e01Status = plcParameterObject.getPlcParameter("E01Status").getValue();
- String e01Status = "0";
+ PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+ String e01Status = plcParameterObject.getPlcParameter("E01Status").getValue();
if (REQUEST_WORD.equals(e01Status)) {
log.info("杩涚墖澶ц溅闈炵┖闂�");
return;
}
-// String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue();
-// String d01Id = plcParameterObject.getPlcParameter("D01ID1").getValue();
-// String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue();
-// String d04Id = plcParameterObject.getPlcParameter("D04ID1").getValue();
- String d01Request = "";
- String d01Id = "";
- String d04Request = "1";
- String d04Id = "";
+ String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue();
+ String d01Id = plcParameterObject.getPlcParameter("D01ID1").getValue();
+ String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue();
+ String d04Id = plcParameterObject.getPlcParameter("D04ID1").getValue();
log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧d01涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};鑾峰彇鍒扮殑璇锋眰瀛梔04涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};",
d01Request, d01Id, d04Request, d04Id);
//涓ゆ潯绾块兘鏈夎繘鍗ц浆绔嬩换鍔★紝鐩存帴缁撴潫
@@ -168,43 +167,29 @@
computeTargetByLine(outLine);
}
- // @Scheduled(fixedDelay = 5000)
+ @Scheduled(fixedDelay = 5000)
public void plcToHomeEdgOutTask() {
- //浠诲姟鏁版嵁 鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲� 鐜荤拑闂撮殧
- List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+
+ List<BigStorageCageOutTask> outingList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_NEW));
+ Assert.isTrue(CollectionUtils.isEmpty(outingList), "鏈夋鍦ㄦ墽琛屽嚭鐗囩殑浠诲姟锛岀粨鏉熷綋鍓嶅嚭鐗囩嚎绋�");
+
//鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑
- List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
+ List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.selectJoinList(TemperingGlassInfo.class, new MPJLambdaWrapper<TemperingGlassInfo>()
+ .selectAll(TemperingGlassInfo.class)
+ .leftJoin(BigStorageCageOutTask.class, BigStorageCageOutTask::getGlassId, TemperingGlassInfo::getGlassId)
.eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
+ .isNull(BigStorageCageOutTask::getGlassId)
.orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence));
if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
- //鎵撹溅鍓╀綑灏哄
- Integer remainWidth = Const.BIG_STORAGE_WIDTH;
- for (TemperingGlassInfo e : temperingGlassInfoList) {
- if (bigStorageCageOutTaskList.size() > 5 || e.getWidth() > remainWidth) {
- break;
- }
- remainWidth = remainWidth - e.getWidth().intValue() - Const.BIG_STORAGE_GAP;
- bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getState(), Const.A09_OUT_TARGET_POSITION,
- e.getWidth().intValue(), 0, 0, 1));
- }
- bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+ computeOutGlassInfo(temperingGlassInfoList);
return;
}
//鏄惁鏈変汉宸ヤ笅鐗囦换鍔� 鏈夌洿鎺ュ嚭
List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
.eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth));
if (CollectionUtils.isNotEmpty(artificialList)) {
- Integer remainWidth = Const.BIG_STORAGE_WIDTH;
- for (BigStorageCageDetails e : artificialList) {
- if (remainWidth < e.getWidth().intValue()) {
- break;
- }
- bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.A10_OUT_TARGET_POSITION,
- e.getWidth().intValue(), 0, 0, 1));
- remainWidth = remainWidth - e.getWidth().intValue() - Const.BIG_STORAGE_GAP;
- }
- bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+ computeOutGlassInfo(temperingGlassInfoList);
return;
}
//閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩 鐜荤拑灏忕墖 鐮存崯琛� 鏁伴噺 鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
@@ -214,24 +199,14 @@
//鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟 缁撴潫
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(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
.eq(GlassInfo::getTemperingLayoutId, temperingLayoutDTO.getTemperingLayoutId())
.eq(GlassInfo::getEngineerId, temperingLayoutDTO.getEngineerId()));
temperingGlassInfoService.saveBatch(temperingGlassInfos);
-
- //澶ц溅鍓╀綑灏哄
- Integer remainWidth = Const.BIG_STORAGE_WIDTH;
- for (TemperingGlassInfo e : temperingGlassInfos) {
- if (bigStorageCageOutTaskList.size() > 5 || e.getWidth() > remainWidth) {
- break;
- }
- remainWidth = remainWidth - e.getWidth().intValue() - Const.BIG_STORAGE_GAP;
- bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getState(), Const.A09_OUT_TARGET_POSITION,
- e.getWidth().intValue(), 0, 0, 1));
- }
- bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+ computeOutGlassInfo(temperingGlassInfoList);
return;
}
//鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟
@@ -241,7 +216,7 @@
for (int i = 0; i < slotSequenceList.size() - 1; i++) {
SlotSequenceDTO first = slotSequenceList.get(i);
SlotSequenceDTO second = slotSequenceList.get(i + 1);
- int slotWidth = Const.BIG_STORAGE_WIDTH - first.getRemainWidth() - Const.BIG_STORAGE_GAP;
+ int slotWidth = carWidth - first.getRemainWidth() - galssGap;
if (first.getMinSequence() == second.getMaxSequence() + 1
&& second.getRemainWidth() > slotWidth) {
List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
@@ -271,7 +246,7 @@
Integer remainWidth;
Integer glassCount;
if (0 == sitToUpRemainWidth.getGlassCount()) {
- remainWidth = Const.BIG_STORAGE_WIDTH;
+ remainWidth = carWidth;
glassCount = 0;
} else {
remainWidth = sitToUpRemainWidth.getWidth();
@@ -292,8 +267,8 @@
} else {
Integer widthSecond = edgGlassTaskInfoList.get(1).getWidth();
if (remainWidth >= widthFirst) {
- if (remainWidth - widthFirst - Const.BIG_STORAGE_GAP >= widthSecond) {
- if (glassCount <= 5) {
+ if (remainWidth - widthFirst - galssGap >= widthSecond) {
+ if (glassCount <= carMaxSize - 1) {
addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst);
return Boolean.FALSE;
} else {
@@ -392,4 +367,60 @@
}
return Boolean.TRUE;
}
+
+ private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list) {
+ //浠诲姟鏁版嵁 鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲� 鐜荤拑闂撮殧
+ List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+ //鎵撹溅鍓╀綑灏哄
+ Integer remainWidth = carWidth;
+ for (T e : list) {
+ if (bigStorageCageOutTaskList.size() > carMaxSize || e.getWidth() > remainWidth) {
+ break;
+ }
+ remainWidth = remainWidth - e.getWidth().intValue() - galssGap;
+ bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.A09_OUT_TARGET_POSITION,
+ e.getWidth().intValue(), 0, 0, 1));
+ }
+ Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
+ log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size());
+ bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+ List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+ log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄凡鍑虹墖", glassIds);
+ bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+ .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT)
+ .in(BigStorageCageDetails::getGlassId, glassIds));
+ //鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄
+ updateSlotRemain(list, glassIds);
+ return Boolean.TRUE;
+ }
+
+ /**
+ * 鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄
+ *
+ * @param list
+ * @param taskGlassIds
+ * @param <T>
+ */
+ public <T extends BigStorageCageBaseInfo> void updateSlotRemain(List<T> list, List<String> taskGlassIds) {
+ //鑾峰彇闇�瑕佸嚭鍘伙紙鍖呮嫭寰呭嚭鍘荤殑锛夌殑鎵�鏈夌幓鐠冩牸瀛愬彿
+ List<Integer> slotList = list.stream().map(T::getSlot).distinct().collect(Collectors.toList());
+ //鑾峰彇寰呭嚭鍘荤殑鐜荤拑淇℃伅锛堢瓑涓嬭溅鍑哄幓鐨勭幓鐠冿級
+ Map<Integer, Double> slotRemainMap = list.stream().filter(e -> !taskGlassIds.contains(e.getGlassId()))
+ .collect(Collectors.groupingBy(T::getSlot, Collectors.summingDouble(item -> item.getWidth() + galssGap)));
+ if (CollectionUtils.isNotEmpty(slotRemainMap)) {
+ //鎸夌収鏍煎瓙鍙锋洿鏂板墿浣欏昂瀵�
+ slotRemainMap.forEach((e, v) -> {
+ bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth - v)
+ .eq(BigStorageCage::getSlot, e));
+ });
+ }
+ Set<Integer> remainSlotList = slotRemainMap.keySet();
+ slotList.removeAll(remainSlotList);
+ if (CollectionUtils.isNotEmpty(slotList)) {
+ bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth)
+ .in(BigStorageCage::getSlot, slotList));
+ }
+
+
+ }
}
\ No newline at end of file
--
Gitblit v1.8.0