From 09a010c5dc11c68a866a6075a74bd1bbefb4a9a8 Mon Sep 17 00:00:00 2001 From: wu <731351411@qq.com> Date: 星期一, 24 六月 2024 16:38:23 +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 | 282 ++++++++++++++++++++++++++++++++------------------------ 1 files changed, 162 insertions(+), 120 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 3e689cb..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 @@ -2,13 +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.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; 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; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService; @@ -30,10 +35,7 @@ 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; /** @@ -43,6 +45,8 @@ @Slf4j public class PlcStorageCageTask { + @Resource + private BigStorageCageService bigStorageCageService; @Resource private BigStorageCageDetailsService bigStorageCageDetailsService; @Resource @@ -61,29 +65,45 @@ @Value("${mes.sequence.order}") private boolean sequenceOrder; + @Value("${mes.carWidth}") + private Integer carWidth; + @Value("${mes.slotWidth}") private Integer slotWidth; + + @Value("${mes.carMaxSize}") + private Integer carMaxSize; + + @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)) { log.info("涓ゆ潯绾挎湭鏀跺埌杩涚墖浠诲姟锛岀粨鏉熸湰娆℃壂鎻忚繘鍗ц浆绔嬩换鍔�"); return; } + if (REQUEST_WORD.equals(d02SitState) && REQUEST_WORD.equals(d05SitState)) { + log.info("涓ゆ潯绾垮崸杞珛鍧囧湪鎵ц浠诲姟锛岀粨鏉熸湰娆℃壂鎻忚繘鍗ц浆绔嬩换鍔�"); + return; + } Boolean flag01 = Boolean.FALSE; Boolean flag04 = Boolean.FALSE; //鎸夌収绾胯矾鍙婄幓鐠僫d鑾峰彇鐩搁偦涓ゅ潡鐜荤拑 鍗ц浆绔嬩笂鐨勭幓鐠� - if (REQUEST_WORD.equals(d01Request)) { + if (REQUEST_WORD.equals(d01Request) && !REQUEST_WORD.equals(d02SitState)) { flag01 = judgeGlassTypeStatus(d01Id, Const.A09_OUT_TARGET_POSITION); } - if (REQUEST_WORD.equals(d04Request)) { + if (REQUEST_WORD.equals(d04Request) && !REQUEST_WORD.equals(d05SitState)) { flag04 = judgeGlassTypeStatus(d04Id, Const.A10_OUT_TARGET_POSITION); } if (flag01 && flag04) { @@ -103,9 +123,9 @@ @Scheduled(fixedDelay = 5000) public void plcToHomeEdgFreeCarTask() { PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; - String freeCar = plcParameterObject.getPlcParameter("freeCar").getValue(); - if (REQUEST_WORD.equals(freeCar)) { - log.info("澶ц溅闈炵┖闂�"); + String e01Status = plcParameterObject.getPlcParameter("E01Status").getValue(); + if (REQUEST_WORD.equals(e01Status)) { + log.info("杩涚墖澶ц溅闈炵┖闂�"); return; } String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue(); @@ -116,23 +136,23 @@ d01Request, d01Id, d04Request, d04Id); //涓ゆ潯绾块兘鏈夎繘鍗ц浆绔嬩换鍔★紝鐩存帴缁撴潫 if (Const.BIG_STORAGE_REQUEST_IN.equals(d01Request) - && Const.BIG_STORAGE_REQUEST_IN.equals(d04Request) - && StringUtils.isNotBlank(d01Id) - && StringUtils.isNotBlank(d04Id)) { + && Const.BIG_STORAGE_REQUEST_IN.equals(d04Request)) { log.info("涓ゆ潯绾块兘瀛樺湪杩涚墖浠诲姟锛岀粨鏉熶换鍔�"); return; } //鑾峰彇涓ゆ潯绾垮崸杞珛鏄惁鏈夌幓鐠冿紝涓斾换鍔$姸鎬侀兘涓�2 - List<String> lineList = bigStorageCageFeedTaskService.querySitToUpGlass(); + List<Integer> lineList = bigStorageCageFeedTaskService.querySitToUpGlass(); if (CollectionUtils.isEmpty(lineList)) { log.info("涓ゆ潯绾垮崸杞珛涓虹┖鎴栬�呮湁杩涚墖浠诲姟鏈畬鎴愶紝缁撴潫浠诲姟"); return; } - String line1 = lineList.get(0); - String flagLine = line1.equals(Const.A09_OUT_TARGET_POSITION) ? d01Id : d04Id; + Integer lineFirst = lineList.get(0); + String lineGlassId = lineFirst.equals(Const.A09_OUT_TARGET_POSITION) ? d01Id : d04Id; if (lineList.size() == 1) { //璁$畻浠诲姟琛ㄨ繘鐗囨牸瀛� 鍙戦�佽繘鐗囦换鍔� - computeTargetByLine(Integer.parseInt(flagLine)); + if (StringUtils.isEmpty(lineGlassId)) { + computeTargetByLine(lineFirst); + } return; } if (StringUtils.isBlank(d01Id) && StringUtils.isBlank(d04Id)) { @@ -149,70 +169,44 @@ @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, - 0, 0, 1)); - } - bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); + computeOutGlassInfo(temperingGlassInfoList); return; } - //todo:鏄惁鏈変汉宸ヤ笅鐗囦换鍔� 鏈夌洿鎺ュ嚭 - //绗煎唴鏄惁鏈変汉宸ヤ笅鐗囩幓鐠� 鏃� 缁撴潫 + //鏄惁鏈変汉宸ヤ笅鐗囦换鍔� 鏈夌洿鎺ュ嚭 List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth)); - if (CollectionUtils.isEmpty(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(), 0, 0, 0, 1)); - remainWidth = remainWidth - e.getWidth().intValue() - Const.BIG_STORAGE_GAP; - } - bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); + if (CollectionUtils.isNotEmpty(artificialList)) { + computeOutGlassInfo(temperingGlassInfoList); return; } - //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩 鐜荤拑灏忕墖 鐮存崯琛� 鏁伴噺 鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈 TemperingLayoutDTO temperingLayoutDTO = bigStorageCageDetailsService.temperingIsAll(); if (null != temperingLayoutDTO) { //鐜荤拑鍒伴綈 //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟 缁撴潫 - List<BigStorageCageDetails> bigStorageCageDetails = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() - .eq(BigStorageCageDetails::getTemperingLayoutId, temperingLayoutDTO.getTemperingLayoutId()) - .eq(BigStorageCageDetails::getEngineerId, temperingLayoutDTO.getEngineerId())); - List<TemperingGlassInfo> temperingGlassInfos = bigStorageCageDetails.stream().map(e -> { - TemperingGlassInfo info = new TemperingGlassInfo(); - BeanUtils.copyProperties(e, info); - return info; - }).collect(Collectors.toList()); + 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 : 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, - 0, 0, 1)); - } - bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList); + computeOutGlassInfo(temperingGlassInfoList); return; } //鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟 @@ -222,12 +216,13 @@ for (int i = 0; i < slotSequenceList.size() - 1; i++) { SlotSequenceDTO first = slotSequenceList.get(i); SlotSequenceDTO second = slotSequenceList.get(i + 1); + int slotWidth = carWidth - first.getRemainWidth() - galssGap; if (first.getMinSequence() == second.getMaxSequence() + 1 - && second.getRemainWidth() > Const.BIG_STORAGE_WIDTH - first.getRemainWidth() - Const.BIG_STORAGE_GAP) { + && second.getRemainWidth() > slotWidth) { 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()); + slotWidth, 0, 0, 1)).collect(Collectors.toList()); bigStorageCageOutTaskService.saveBatch(outTasks); return; } @@ -247,25 +242,41 @@ .orderByAsc(EdgGlassTaskInfo::getTime)); Assert.isFalse(CollectionUtils.isEmpty(edgGlassTaskInfoList), "璇嗗埆鐜荤拑淇℃伅鏈嚭鐜板湪灏哄琛ㄤ腑,鑾峰彇鐩搁偦涓ゅ潡鐜荤拑澶辫触"); //2銆佽幏鍙栧崸杞珛鍓╀綑瀹藉害 - Map<String, Object> map = bigStorageCageFeedTaskService.getMap(new QueryWrapper<BigStorageCageFeedTask>() - .select("cast(" + Const.BIG_STORAGE_WIDTH + " - sum(width + " + Const.BIG_STORAGE_GAP + ") as INT) as remainWidth") - .eq("line", line).eq("task_state", Const.BIG_STORAGE_IN_UP)); - Integer remainWidth = null == map ? Const.BIG_STORAGE_WIDTH : Integer.parseInt(map.get("remainWidth") + ""); + BigStorageDTO sitToUpRemainWidth = bigStorageCageFeedTaskService.querySitToUpRemainWidth(line); + Integer remainWidth; + Integer glassCount; + if (0 == sitToUpRemainWidth.getGlassCount()) { + remainWidth = carWidth; + glassCount = 0; + } else { + remainWidth = sitToUpRemainWidth.getWidth(); + glassCount = sitToUpRemainWidth.getGlassCount(); + } //2銆佽幏鍙栧崸杞珛 Integer widthFirst = edgGlassTaskInfoList.get(0).getWidth(); if (edgGlassTaskInfoList.size() == 1) { if (remainWidth >= widthFirst) { - addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst); - return Boolean.FALSE; + if (glassCount <= 5) { + addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst); + return Boolean.FALSE; + } else { + addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst); + return Boolean.TRUE; + } } } else { Integer widthSecond = edgGlassTaskInfoList.get(1).getWidth(); if (remainWidth >= widthFirst) { - if (remainWidth - widthFirst - Const.BIG_STORAGE_GAP >= widthSecond) { - addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthSecond); - return Boolean.FALSE; + if (remainWidth - widthFirst - galssGap >= widthSecond) { + if (glassCount <= carMaxSize - 1) { + addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst); + return Boolean.FALSE; + } else { + addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst); + return Boolean.TRUE; + } } else { - addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthSecond); + addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst); } } } @@ -279,7 +290,7 @@ private Boolean addFeedTask(String glassId, Integer line, Integer taskType, Integer width) { BigStorageCageFeedTask bigStorageCageFeedTask = new BigStorageCageFeedTask(); bigStorageCageFeedTask.setGlassId(glassId); - bigStorageCageFeedTask.setTaskState(Const.BIG_STORAGE_REQUEST_IN); + bigStorageCageFeedTask.setTaskState(Const.BIG_STORAGE_IN_NEW); bigStorageCageFeedTask.setLine(line); bigStorageCageFeedTask.setTaskType(taskType); bigStorageCageFeedTask.setWidth(width); @@ -313,20 +324,12 @@ //1銆佽幏鍙栦换鍔¤〃涓殑鎵�鏈夌幓鐠冿紙鎸囧畾绾胯矾涓斿凡缁忚繘鍗ц浆绔嬪畬鎴愶級 List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>() .eq(BigStorageCageFeedTask::getLine, line) - .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP) + .in(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP_ALL) .orderByAsc(BigStorageCageFeedTask::getId)); //2銆佸幓绗煎瓙鍐呮煡鎵炬槸鍚﹀彲浠ョ户缁瓨鏀剧殑绗煎瓙 List<String> glassIds = taskList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList()); List<GlassInfo> glassInfos = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIds)); - - List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>(); - List<BigStorageCageDetails> temperingList = computeIsTemperingTargetByLine(glassInfos, taskList, Boolean.TRUE); - List<BigStorageCageDetails> noTemperingList = computeIsTemperingTargetByLine(glassInfos, taskList, Boolean.FALSE); - bigStorageCageDetailsList.addAll(temperingList); - bigStorageCageDetailsList.addAll(noTemperingList); - //4銆佸湪璇︽儏琛ㄤ腑鍔犲叆杩涚墖鐜荤拑淇℃伅 - bigStorageCageDetailsService.saveBatch(bigStorageCageDetailsList); - return Boolean.TRUE; + return computeIsTemperingTargetByLine(glassInfos, taskList, Boolean.TRUE) && computeIsTemperingTargetByLine(glassInfos, taskList, Boolean.FALSE); } /** @@ -336,22 +339,10 @@ * @param taskList 褰撴潯绾垮崸杞珛鎵�鏈変换鍔� * @param isTempering true 閽㈠寲 false 涓嶉挗鍖� */ - private List<BigStorageCageDetails> computeIsTemperingTargetByLine(List<GlassInfo> glassInfos, List<BigStorageCageFeedTask> taskList, Boolean isTempering) { - Map<String, GlassInfo> glassInfoMap; - if (isTempering) { - glassInfoMap = glassInfos.stream().filter(e -> e.getTemperingLayoutId() != 0) - .collect(Collectors.toMap(GlassInfo::getGlassId, p -> p)); - } else { - glassInfoMap = glassInfos.stream().filter(e -> e.getTemperingLayoutId() == 0) - .collect(Collectors.toMap(GlassInfo::getGlassId, p -> p)); - } - - //璁剧疆涓存椂鍙橀噺鎺ュ彈鐗堝浘id锛岀増搴忋�佹牸瀛愬彿鍙婂墿浣欏搴� - Integer temperingLayoutIdTemp = 0; - Integer temperingFeedSequenceTemp = 0; - BigStorageDTO bigStorageDTO = new BigStorageDTO(); - - List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>(); + private boolean computeIsTemperingTargetByLine(List<GlassInfo> glassInfos, List<BigStorageCageFeedTask> taskList, Boolean isTempering) { + //1銆佸皢鐜荤拑淇℃伅闆嗗悎杞负glassid涓簁ey鐨刴ap + Map<String, GlassInfo> glassInfoMap = glassInfos.stream() + .collect(Collectors.toMap(GlassInfo::getGlassId, p -> p)); for (BigStorageCageFeedTask e : taskList) { GlassInfo info = glassInfoMap.get(e.getGlassId()); if (info == null) { @@ -359,26 +350,77 @@ } BigStorageCageDetails cageDetails = new BigStorageCageDetails(); BeanUtils.copyProperties(info, cageDetails); - if (temperingLayoutIdTemp.equals(info.getTemperingLayoutId()) - && temperingFeedSequenceTemp.equals(info.getTemperingFeedSequence() + 1) - && info.getWidth() <= bigStorageDTO.getWidth()) { - bigStorageDTO.setWidth(bigStorageDTO.getWidth() - info.getWidth().intValue() - Const.BIG_STORAGE_GAP); - } else { - bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info); - } - - cageDetails.setSlot(bigStorageDTO.getSlot()); - cageDetails.setState(Const.GLASS_STATE_IN); - + //2銆佽幏鍙栫洰鏍囨牸瀛愪俊鎭� + BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info); + //3銆佹洿鏂板ぇ鐞嗙墖绗艰〃鍓╀綑瀹藉害 + bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth()) + .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot())); + //4銆佹洿鏂拌繘鐗囦换鍔¤〃锛岀洰鏍囨牸瀛愬強鐘舵�侊紙鐘舵�佹敼涓�2 鐢垫皵鎵埌鑷澶勭悊锛� 閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴� e.setTargetSlot(bigStorageDTO.getSlot()); e.setTaskType(Const.BIG_STORAGE_IN_RUN); - - temperingLayoutIdTemp = info.getTemperingLayoutId(); - temperingFeedSequenceTemp = info.getTemperingFeedSequence(); - //3銆佹洿鏂拌繘鐗囦换鍔¤〃 閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴� bigStorageCageFeedTaskService.updateById(e); - bigStorageCageDetailsList.add(cageDetails); + + //5銆佸皢杩涚墖淇℃伅瀛樺叆澶х悊鐗囩璇︽儏琛� + cageDetails.setSlot(bigStorageDTO.getSlot()); + cageDetails.setState(Const.GLASS_STATE_IN); + bigStorageCageDetailsService.save(cageDetails); } - return bigStorageCageDetailsList; + 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