From 44c120df70db14346a72fc77790bc0e3ecc11898 Mon Sep 17 00:00:00 2001 From: wangfei <3597712270@qq.com> Date: 星期一, 29 七月 2024 14:23:40 +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 | 273 +++++++++++++++++++++++++++++++++++------------------- 1 files changed, 178 insertions(+), 95 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 1254d27..126fbbd 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 @@ -16,10 +16,12 @@ import com.mes.bigstorage.service.BigStorageCageService; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; +import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO; 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.common.utils.RedisUtil; import com.mes.damage.entity.Damage; import com.mes.damage.service.DamageService; import com.mes.device.PlcParameterObject; @@ -64,6 +66,9 @@ private TemperingGlassInfoService temperingGlassInfoService; @Resource private DamageService damageService; + + @Resource + private RedisUtil redisUtil; private static final String REQUEST_WORD = "1"; @@ -178,11 +183,6 @@ String d01Id = plcParameterObject.getPlcParameter("D01ID").getValue(); String d04Id = plcParameterObject.getPlcParameter("D04ID").getValue(); log.info("1銆佽幏鍙杁01Id鎵弿ID涓猴細{};鑾峰彇d04Id鎵弿ID涓猴細{};", d01Id, d04Id); - //涓ゆ潯绾块兘鏈夎繘鍗ц浆绔嬩换鍔★紝鐩存帴缁撴潫 -// if (StringUtils.isNotBlank(d01Id) && StringUtils.isNotBlank(d04Id)) { -// log.info("涓ゆ潯绾块兘瀛樺湪杩涚墖浠诲姟锛岀粨鏉熶换鍔�"); -// return; -// } //鑾峰彇涓ゆ潯绾垮崸杞珛鏄惁鏈夌幓鐠冿紝涓斾换鍔$姸鎬佷负1/2 List<Integer> lineList = bigStorageCageFeedTaskService.querySitToUpGlass(); if (CollectionUtils.isEmpty(lineList)) { @@ -244,67 +244,73 @@ log.info("澶х悊鐗囩绌鸿溅杩涚墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); } - @Scheduled(fixedDelay = 300) + @Scheduled(fixedDelay = 5000) public void plcToHomeEdgOutTask() { Date startDate = new Date(); log.info("澶х悊鐗囩绌鸿溅杩涚墖浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate); PlcParameterObject plcMesObject = S7object.getinstance().PlcMesObject; - String e02State = plcMesObject.getPlcParameter("E02State").getAddress(); + String e02State = plcMesObject.getPlcParameter("E02State").getValue(); if (REQUEST_WORD.equals(e02State)) { log.info("鍑虹墖蹇欑锛岀粨鏉熷嚭鐗囦换鍔�"); return; } String mesToPLCAddress = plcMesObject.getPlcParameter("MESToPLC").getAddress(); - 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.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("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟"); - computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress); - Date endDate = new Date(); - log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); + List<BigStorageCageOutTask> outingList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>() + .eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_NEW)); + if (CollectionUtils.isNotEmpty(outingList)) { + log.info("鏈夋鍦ㄦ墽琛屽嚭鐗囩殑浠诲姟锛岀粨鏉熷綋鍓嶅嚭鐗囩嚎绋�"); return; } - //鏄惁鏈変汉宸ヤ笅鐗囦换鍔� 鏈夌洿鎺ュ嚭 - List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() - .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth)); - if (CollectionUtils.isNotEmpty(artificialList)) { - computeOutGlassInfo(artificialList, Boolean.FALSE, mesToPLCAddress); - Date endDate = new Date(); - log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); - return; - } - //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩 鐜荤拑灏忕墖 鐮存崯琛� 鏁伴噺 鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈 - List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll(); - if (CollectionUtils.isNotEmpty(temperingLayoutDTOList)) { - //鐜荤拑鍒伴綈鍖呮嫭宸插嚭鐗囩殑 - //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟 缁撴潫 - for (TemperingLayoutDTO item : temperingLayoutDTOList) { - 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, item.getTemperingLayoutId()) - .eq(GlassInfo::getEngineerId, item.getEngineerId())); - if (CollectionUtils.isNotEmpty(temperingGlassInfos)) { - temperingGlassInfoService.saveBatch(temperingGlassInfos); - computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress); - Date endDate = new Date(); - log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); - return; + if (redisUtil.getCacheObject("temperingSwitch")) { + //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑 + 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("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟"); + computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress); + Date endDate = new Date(); + log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); + return; + } + //鏄惁鏈変汉宸ヤ笅鐗囦换鍔� 鏈夌洿鎺ュ嚭 + List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() + .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth)); + if (CollectionUtils.isNotEmpty(artificialList)) { + computeOutGlassInfo(artificialList, Boolean.FALSE, mesToPLCAddress); + Date endDate = new Date(); + log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); + return; + } + //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩 鐜荤拑灏忕墖 鐮存崯琛� 鏁伴噺 鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈 + List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll(); + if (CollectionUtils.isNotEmpty(temperingLayoutDTOList)) { + //鐜荤拑鍒伴綈鍖呮嫭宸插嚭鐗囩殑 + //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟 缁撴潫 + for (TemperingLayoutDTO item : temperingLayoutDTOList) { + 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, item.getTemperingLayoutId()) + .eq(GlassInfo::getEngineerId, item.getEngineerId()) + .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence)); + if (CollectionUtils.isNotEmpty(temperingGlassInfos)) { + temperingGlassInfoService.saveBatch(temperingGlassInfos); + computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress); + Date endDate = new Date(); + log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime()); + return; + } } } } - //鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟 + //鎵ц鍐呴儴璋冨害浠诲姟 TemperingLayoutDTO temperingOccupySlot = bigStorageCageDetailsService.queryTemperingOccupySlot(); if (null != temperingOccupySlot) { List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId()); @@ -313,12 +319,25 @@ SlotSequenceDTO second = slotSequenceList.get(i + 1); int slotWidth = carWidth - first.getRemainWidth() - glassGap; if (first.getMinSequence() == second.getMaxSequence() + 1 - && second.getRemainWidth() > slotWidth) { + && second.getRemainWidth() > slotWidth && slotWidth >= 0) { + 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(), - e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1)).collect(Collectors.toList()); - bigStorageCageOutTaskService.saveBatch(outTasks); + .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) + .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence)); + if (CollectionUtils.isNotEmpty(list)) { + List<BigStorageCageOutTask> outTasks = new ArrayList<>(); + int serialNumber = 1; + for (BigStorageCageDetails item : list) { + outTasks.add(new BigStorageCageOutTask(item.getGlassId(), first.getSlot(), second.getSlot(), + item.getWidth() * 10, item.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW)); + } + //鏂板璋冨害浠诲姟 + bigStorageCageOutTaskService.saveBatch(outTasks); + //鏇存柊鐞嗙墖绗艰鎯呰〃璋冨害鐨勫悗鐨勭幓鐠冧綅缃俊鎭細鐢熸垚浠诲姟鍚庡厛灏嗙幓鐠冩牸瀛愪綅缃繘琛岃皟鏁达紝鐜荤拑鐘舵�佹敼涓鸿皟搴︿腑锛屾柊澧炶皟搴﹀畬鎴愪换鍔★紝澶勭悊璋冨害瀹屾垚鍚庣幓鐠冪姸鎬佹敼涓�100. + List<String> glassList = list.stream().map(BigStorageCageDetails::getGlassId).collect(Collectors.toList()); + bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>().set(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING) + .set(BigStorageCageBaseInfo::getSlot, second.getSlot()).eq(BigStorageCageDetails::getGlassId, glassList)); + } //鍚憄lc鍐欏叆纭瀛� int returnData = 0; @@ -338,6 +357,41 @@ } @Scheduled(fixedDelay = 300) + public void updateInGlassStateTask() { + Date startDate = new Date(); + log.info("1銆佸ぇ鐞嗙墖绗艰繘鐗囧畬鎴愬悗鏇存柊澶х悊鐗囩鏁版嵁浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate); + //鍥犱负澶х悊鐗囩鍜屽嚭鐗囦换鍔℃槸涓や釜搴撶殑鏁版嵁锛屾墍浠ヨ鍒嗗紑鏌ユ壘 + List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>() + .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW)); + if (CollectionUtils.isNotEmpty(list)) { + log.info("2銆佽幏鍙栨墍鏈夋鍦ㄨ繘鐗囩殑鐜荤拑淇℃伅id:{}", list); + List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList()); + List<BigStorageCageFeedTask> inSuccessGlass = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>() + .in(BigStorageCageFeedTask::getGlassId, glassIds) + .in(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)); + if (CollectionUtils.isNotEmpty(inSuccessGlass)) { + log.info("3銆佽幏鍙栬繘鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", inSuccessGlass); + List<String> inSuccessGlassIds = inSuccessGlass.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList()); + List<UpdateBigStorageCageDTO> storageCageDTOList = inSuccessGlass.stream().map(e -> { + UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO(); + BeanUtils.copyProperties(e, storageCageDTO); + return storageCageDTO; + }).collect(Collectors.toList()); + bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN); + log.info("4銆佸ぇ鐞嗙墖绗艰繘鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", inSuccessGlassIds); + //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵� + updateSlotRemain(inSuccessGlassIds, Boolean.TRUE); + log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�"); + } + + } + Date endDate = new Date(); + log.info("end:澶х悊鐗囩杩涚墖瀹屾垚鍚庢洿鏂板ぇ鐞嗙墖绗兼暟鎹换鍔$粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫浠诲姟", endDate, endDate.getTime() - startDate.getTime()); + return; + + } + + @Scheduled(fixedDelay = 300) public void updateOutGlassStateTask() { Date startDate = new Date(); log.info("1銆佸ぇ鐞嗙墖绗煎嚭鐗囧畬鎴愬悗鏇存柊澶х悊鐗囩鏁版嵁浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate); @@ -347,14 +401,22 @@ if (CollectionUtils.isNotEmpty(list)) { log.info("2銆佽幏鍙栨墍鏈夋鍦ㄥ嚭鐗囩殑鐜荤拑淇℃伅id:{}", list); List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList()); - List<Object> outSuccessGlassIdsObj = bigStorageCageOutTaskService.listObjs(new LambdaQueryWrapper<BigStorageCageOutTask>() - .select(BigStorageCageOutTask::getGlassId).in(BigStorageCageOutTask::getGlassId, glassIds).in(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_ALL)); - List<String> outSuccessGlassIds = outSuccessGlassIdsObj.stream().map(String::valueOf).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(outSuccessGlassIds)) { - log.info("3銆佽幏鍙栧嚭鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", outSuccessGlassIdsObj); - bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() - .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT).in(BigStorageCageDetails::getGlassId, outSuccessGlassIds)); - log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", outSuccessGlassIdsObj); + List<BigStorageCageOutTask> outSuccessGlass = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>() + .in(BigStorageCageOutTask::getGlassId, glassIds).in(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_ALL)); + if (CollectionUtils.isNotEmpty(outSuccessGlass)) { + log.info("3銆佽幏鍙栧嚭鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", outSuccessGlass); + List<UpdateBigStorageCageDTO> storageCageDTOList = outSuccessGlass.stream().map(e -> { + UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO(); + storageCageDTO.setGlassId(e.getGlassId()); + storageCageDTO.setTargetSlot(e.getStartSlot()); + return storageCageDTO; + }).collect(Collectors.toList()); + bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_OUT); + List<String> outSuccessGlassIds = outSuccessGlass.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList()); + log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", outSuccessGlassIds); + //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵� + updateSlotRemain(outSuccessGlassIds, Boolean.FALSE); + log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�"); } } Date endDate = new Date(); @@ -561,17 +623,16 @@ BeanUtils.copyProperties(info, cageDetails); //2銆佽幏鍙栫洰鏍囨牸瀛愪俊鎭� BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info); - //3銆佹洿鏂板ぇ鐞嗙墖绗艰〃鍓╀綑瀹藉害 - bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - info.getWidth() - glassGap) - .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot())); + //3銆佹洿鏂板ぇ鐞嗙墖绗艰〃鍓╀綑瀹藉害锛堟洿鏂板ぇ鐞嗙墖绗煎墿浣欏昂瀵哥Щ鍒拌繘绗煎畬鎴愬悗鎵ц锛� +// bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - info.getWidth() - glassGap) +// .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot())); //4銆佹洿鏂拌繘鐗囦换鍔¤〃锛岀洰鏍囨牸瀛愬強鐘舵�侊紙鐘舵�佹敼涓�2 鐢垫皵鎵埌鑷澶勭悊锛� 閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴� e.setTargetSlot(bigStorageDTO.getSlot()); -// e.setTaskType(Const.BIG_STORAGE_IN_RUN); bigStorageCageFeedTaskService.updateById(e); //5銆佸皢杩涚墖淇℃伅瀛樺叆澶х悊鐗囩璇︽儏琛� cageDetails.setSlot(bigStorageDTO.getSlot()); - cageDetails.setState(Const.GLASS_STATE_IN); + cageDetails.setState(Const.GLASS_STATE_NEW); cageDetails.setDeviceId(bigStorageDTO.getDeviceId()); cageDetails.setGap(glassGap); bigStorageCageDetailsService.save(cageDetails); @@ -590,6 +651,7 @@ for (int i = 1; i <= taskList.size(); i++) { s7control.writeWord(plcMesObject.getPlcParameter("StartAddToImport" + i).getAddress(), taskList.get(i - 1).getLine()); s7control.writeWord(plcMesObject.getPlcParameter("TargetAddToImport" + i).getAddress(), taskList.get(i - 1).getTargetSlot()); + log.info("鍚憄lc鍙戦�佺{}鐗囩幓鐠冨凡瀹屾垚", i); } int returnData = 0; int count = 1; @@ -605,27 +667,36 @@ List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>(); //鎵撹溅鍓╀綑灏哄 Integer remainWidth = carWidth; + int trainNumber = 1; + int serialNumber = 1; int maxX = 0; for (T e : list) { - if (bigStorageCageOutTaskList.size() >= outCarMaxSize || e.getWidth() > remainWidth) { - break; + int maxLength = Math.max((int) e.getWidth(), (int) e.getHeight()); + if (bigStorageCageOutTaskList.size() >= outCarMaxSize || maxLength > remainWidth) { + remainWidth = carWidth; + trainNumber = trainNumber + 1; + serialNumber = 1; + maxX = 0; + continue; } - remainWidth = remainWidth - (int) e.getWidth() - glassGap; + remainWidth = remainWidth - maxLength - glassGap; if (isTempering) { int minLength = Math.min((int) e.getWidth(), (int) e.getHeight()); if (maxX + minLength <= xMaxSize) { bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION, - e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1)); + e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1)); maxX = Math.max(maxX, e.getXCoordinate()); } else { - break; + remainWidth = carWidth; + trainNumber = trainNumber + 1; + serialNumber = 1; + maxX = 0; + continue; } - } else { bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION, - e.getWidth() * 10, e.getHeight(), 0, 0, 1)); + e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1)); } - } Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟"); log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size()); @@ -635,9 +706,6 @@ bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING) .in(BigStorageCageDetails::getGlassId, glassIds)); - //鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄 - updateSlotRemain(list, glassIds); - int returnData = 0; int count = 1; while (returnData == 0) { @@ -651,29 +719,44 @@ /** * 鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄 * - * @param list 绗煎唴鍙互鍑虹鐨勭幓鐠冧俊鎭� * @param taskGlassIds 鏈浠诲姟鍑哄幓鐨勭幓鐠僫ds - * @param <T> + * @param flag 鏄惁杩涘嚭鐗� true 杩涚墖 false 鍑虹墖 */ - 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() + glassGap))); + public void updateSlotRemain(List<String> taskGlassIds, Boolean flag) { + //鎸夌収鐜荤拑id鑾峰彇鐜荤拑淇℃伅鍙婄幓鐠冪殑鏍煎瓙鍙� + List<BigStorageCageDetails> glassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() + .in(BigStorageCageDetails::getGlassId, taskGlassIds)); + //鑾峰彇闇�瑕佸嚭鍘�/杩涚锛堝寘鎷緟鍑哄幓鐨勶級鐨勬墍鏈夌幓鐠冩牸瀛愬彿 + List<Integer> slotList = glassList.stream().map(BigStorageCageDetails::getSlot).distinct().collect(Collectors.toList()); + //鑾峰彇鏍煎瓙鍐呮墍鏈夌殑鐜荤拑淇℃伅 + List<BigStorageCageDetails> inSlotGlassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() + .in(BigStorageCageDetails::getSlot, slotList).in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); + //鑾峰彇寰呰繘鐗�/鍑哄幓鐨勭幓鐠冧俊鎭� + Map<Integer, Double> slotRemainMap = null; + if (flag) { + slotRemainMap = inSlotGlassList.stream().filter(e -> taskGlassIds.contains(e.getGlassId())) + .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> item.getWidth() + glassGap))); + } else { + slotRemainMap = inSlotGlassList.stream().filter(e -> !taskGlassIds.contains(e.getGlassId())) + .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> item.getWidth() + glassGap))); + } + //鏍煎瓙鍐呮湁鐜荤拑鐨勶紝璁$畻涓猴細 鏍煎瓙鐨勫搴� - 锛堢粰瀛愬唴鐜荤拑鐨勫昂瀵�+闂磋窛锛� 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)); + //鍙洿鏂拌繘绗煎畬鎴愮殑鐘舵�侊紝濡傛灉杩涚瀹屾垚锛屾牸瀛愬唴蹇呭畾鏈夌幓鐠冿紝涓嶅瓨鍦ㄥ嚭鐗囧悗鏍煎瓙鍐呮病鏈夌幓鐠冪殑鎯呭喌锛屾墍鏈夋牸瀛愬昂瀵搁噸缃紝鍙兘瀛樺湪浜庡嚭鐗囦换鍔� + if (!flag) { + 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)); + } } + } public Boolean computeIsRun(int line, String glassId) { -- Gitblit v1.8.0