From f68d3c71819feb59e7a227a5d992b059b900916c Mon Sep 17 00:00:00 2001 From: ZengTao <2773468879@qq.com> Date: 星期五, 28 三月 2025 08:28:26 +0800 Subject: [PATCH] 修改报表,界面添加查询流程卡个数,调整推送数据到前端的间隔 --- hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java | 369 +++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 279 insertions(+), 90 deletions(-) diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java index 0211d1e..66371a9 100644 --- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java +++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java @@ -5,8 +5,11 @@ 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.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; import com.mes.common.config.Const; +import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo; +import com.mes.edgglasstaskqueueinfo.service.EdgGlassTaskQueueInfoService; import com.mes.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; @@ -26,6 +29,8 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -37,10 +42,24 @@ @Slf4j public class OpcCacheGlassTask { + private static final String EDG_STORAGE_DEVICE_ONE_TASK = "edg_storage_device_one_task"; + + private static final String EDG_STORAGE_DEVICE_TWO_TASK = "edg_storage_device_two_task"; + @Autowired(required = false) MiloService miloService; + + +// @Resource(name = "cacheGlassStartCallback") +// SubscriptionCallback cacheGlassStartCallback; +// +// @Resource(name = "cacheGlassTestCallback") +// SubscriptionCallback cacheGlassTestCallback; + @Resource EdgStorageDeviceTaskService edgStorageDeviceTaskService; + @Resource + EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService; @Resource GlassInfoService glassInfoService; @Resource @@ -52,78 +71,130 @@ @Value("${mes.glassGap}") private int glassGap; + @Value("${mes.threshold}") + private int threshold; @Value("${mes.cellLength}") private int cellLength; - @Value("${mes.threshold}") - private int threshold; -// @Autowired -// MPJBaseService edgStorageDeviceTaskService; -// -// @Autowired -// SubscriptionCallback cacheGlassSubscriptionCallback; + private String glassIdOne = ""; + private String glassIdTwo = ""; + +// @Scheduled(fixedDelay = Long.MAX_VALUE) +// public void startOneOpcTask() throws Exception { +// miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL1.edg_storage_device_one_task[1].task_state"), cacheGlassStartCallback); +// } // // @Scheduled(fixedDelay = Long.MAX_VALUE) -// public void startOpcTask() throws Exception { -// miloService.subscriptionFromOpcUa(Arrays.asList("my.device.x1", "my.device.x2"), cacheGlassSubscriptionCallback); +// public void startTwoOpcTask() throws Exception { +// miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL2.edg_storage_device_two_task[1].task_state"), cacheGlassStartCallback); // } - @Scheduled(fixedDelay = 1000) - public void startOpcTask() throws Exception { - int request = 1; -// 鑾峰彇绗煎唴鐜荤拑淇℃伅 - taskByDevice(); +// @Scheduled(fixedDelay = 1000) + public void startOneOpcTask() { + startOneOpcTaskChild(EDG_STORAGE_DEVICE_ONE_TASK, 1); } - @Scheduled(fixedDelay = 1000) - public void finishOpcTask() throws Exception { - EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage("edg_storage_device_one_task"); - if (task == null) { - log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�"); - return; - } - if (task.getTaskState() <= 3) { - log.info("涓嶅瓨鍦ㄦ湭瀹屾垚鐨勪换鍔�"); - return; - } - Integer cell = task.getStartCell(); - Integer state = task.getTaskState(); - task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY); - task.setTaskState(Const.GLASS_CACHE_TYPE_EMPTY); - task.setStartCell(-1); - edgStorageDeviceTaskService.updateTaskMessage("edg_storage_device_one_task", task); - edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>() - .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) - .set(EdgStorageDeviceTaskHistory::getTaskState, - Const.GLASS_CACHE_TYPE_RUNNING.equals(state) ? Const.RAW_GLASS_TASK_SUCCESS : Const.RAW_GLASS_TASK_FAILURE) - ); - updateCellRemainWidth(cell); +// @Scheduled(fixedDelay = 1000) + public void startTwoOpcTask() { + startOneOpcTaskChild(EDG_STORAGE_DEVICE_TWO_TASK, 2); } - private void taskByDevice() throws Exception { - EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage("edg_storage_device_one_task"); - if (task == null) { - log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�"); + private void startOneOpcTaskChild(String tableName, int device) { + EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName); + try { + if (task == null) { + log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�"); + return; + } + if (task.getTaskState() == 2) { + //闃叉鍑虹墖浠诲姟涓旂鍓嶆湁鐜荤拑鐨勬儏鍐碉紝灏嗚繘鐗噄d缃┖锛屽嵆鍑虹墖浠呰�冭檻绗煎唴鐨勭幓鐠� + task.setGlassIdIn(""); + } + int request = task.getTaskState(); + log.info("寮�濮嬫墽琛屼换鍔★紝浠诲姟璇蜂俊鎭负{}", task); + if (request == 0) { + log.info("鏈敹鍒颁换鍔¤姹傦紝缁撴潫鏈浠诲姟"); + } else if (request == 1) { + //杩涚墖浠诲姟 + log.info("杩涚墖浠诲姟锛氳繘鐗囩幓鐠僫d涓猴細{}", task.getGlassIdIn()); + intoTask(task, tableName, device); + } else if (request == 2) { + //鍑虹墖浠诲姟 + outTask(task, tableName, device); + } else if (request == 3) { + //鐩撮�氫换鍔� + if (!outTask(task, tableName, device)) { + intoTask(task, tableName, device); + } + } else if (request == 4) { + log.info("灏嗗惎鍔ㄥ瓙鏀逛负0"); + task.setTaskRunning(Const.GLASS_CACHE_TYPE_RUNNING); + edgStorageDeviceTaskService.updateTaskMessage(tableName, task); + } else { + finishTask(task, tableName); + } + } catch (Exception e) { + log.info("鎵ц浠诲姟杩囩▼涓彂鐢熷紓甯革紝浠诲姟瀛梴}锛寋}", task.getTaskState(), e.getMessage()); + log.info("灏嗗惎鍔ㄥ瓙鏀逛负0"); + task.setTaskState(Const.GLASS_CACHE_TYPE_EMPTY); + edgStorageDeviceTaskService.updateTaskMessage(tableName, task); + } + } + + +// @Scheduled(fixedDelay = 1000) + public void edgOneOpcTask() throws Exception { + EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_ONE_TASK); + String glassId = task.getGlassId(); + if (StringUtils.isBlank(glassId) || glassId.equals(glassIdOne)) { + log.info("{}鍙风嚎纾ㄨ竟鍓嶇幓鐠冩湭灏变綅锛岀粨鏉熸湰娆′换鍔�", 1); return; } - int request = task.getTaskState(); - if (request == 0) { - log.info("鏈敹鍒颁换鍔¤姹傦紝缁撴潫鏈浠诲姟"); - } else if (request == 1) { - //杩涚墖浠诲姟 - intoTask(task); - } else if (request == 2) { - //鍑虹墖浠诲姟 - outTask(task); - } else if (request == 3) { - //todo:鐩撮�氫换鍔� + edgTaskChild(glassId, 1); + } +// @Scheduled(fixedDelay = 1000) + public void edgTwoOpcTask() throws Exception { + EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_TWO_TASK); + String glassId = task.getGlassId(); + if (StringUtils.isBlank(glassId) || glassId.equals(glassIdTwo)) { + log.info("{}鍙风嚎纾ㄨ竟鍓嶇幓鐠冩湭灏变綅锛岀粨鏉熸湰娆′换鍔�", 2); + return; + } + edgTaskChild(glassId, 2); + } + + private void edgTaskChild(String glassId, int cell) throws Exception { + GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId).last("limit 1")); + if (glassInfo == null) { + log.info("瀵瑰垪琛ㄤ腑鐨勭幓鐠僫d閿欒锛岃妫�鏌ユ暟鎹紝鐜荤拑id锛歿}", glassId); + return; + } + String toEndingId = glassInfo.getTemperingLayoutId() + "" + glassInfo.getTemperingFeedSequence(); + List<ReadWriteEntity> list = new ArrayList<>(); +// list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".mesControl", true)); + list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".glassId", Integer.parseInt(toEndingId))); + list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".toEdingId", Integer.parseInt(toEndingId))); + list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".width", (int) Math.max(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10))); + list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".height", (int) Math.min(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10))); + + miloService.writeToOpcUa(list); + miloService.writeToOpcWord(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".thickness", (int) glassInfo.getThickness() * 10)); + //淇敼纾ㄨ竟瀵瑰垪涓殑纾ㄨ竟绾胯矾鍙婄姸鎬� + edgGlassTaskQueueInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskQueueInfo>() + .set(EdgGlassTaskQueueInfo::getLine, cell) + .set(EdgGlassTaskQueueInfo::getState, Const.EDG_GLASS_START) + .eq(EdgGlassTaskQueueInfo::getGlassId, glassId) + .eq(EdgGlassTaskQueueInfo::getState, Const.EDG_GLASS_BEFORE)); + if (cell == 1) { + glassIdOne = glassId; } else { - log.info("寮傚父鏁版嵁锛岀粨鏉熸湰娆′换鍔�"); + glassIdTwo = glassId; } + } - private boolean intoTask(EdgStorageDeviceTask task) { + private boolean intoTask(EdgStorageDeviceTask task, String tableName, int deviceId) { //鑾峰彇鐜荤拑鐨勫熀鏈俊鎭� GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn())); if (null == glassInfo) { @@ -131,15 +202,14 @@ return Boolean.FALSE; } //鑾峰彇褰撳墠杩涚墖鐜荤拑id鍜岃繘鐗囨牸瀛� 鐩稿悓灏哄鍙互鏀句笅鐨勬牸瀛� -// select * from edg_storage_cage t left join edg_storage_cage_details t1 on t.slot = t1.slot -// where t.device_id =1 and t1.state = 100 and t.remain_width >= 827 and t1.width = 827 and t1.height = 1124 order by abs(t.slot - 10) - EdgStorageCage edgStorageCage = edgStorageCageService.getEdgStorageCageBySize(1, glassInfo.getWidth(), glassInfo.getHeight(), task.getCurrentCell()); + EdgStorageCage edgStorageCage = edgStorageCageService.getEdgStorageCageBySize(deviceId, glassInfo.getWidth(), glassInfo.getHeight(), task.getCurrentCell()); if (edgStorageCage == null) { log.info("鐩稿悓灏哄鍙互鏀句笅鐨勬牸瀛愭湭鎵惧埌锛屾牸瀛恑d:{}", task.getCurrentCell()); // SELECT * from edg_storage_cage where device_id = 1 and remain_width > 1000 order by abs(slot - 10) - List<EdgStorageCage> storageCageList = edgStorageCageService.list(new LambdaQueryWrapper<EdgStorageCage>().eq(EdgStorageCage::getDeviceId, 1) + List<EdgStorageCage> storageCageList = edgStorageCageService.list(new LambdaQueryWrapper<EdgStorageCage>() + .eq(EdgStorageCage::getDeviceId, deviceId) .eq(EdgStorageCage::getEnableState, Const.SLOT_ON) - .ge(EdgStorageCage::getRemainWidth, glassInfo.getWidth()).last("order by abs(slot - " + task.getCurrentCell() + ")")); + .ge(EdgStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight())).last("order by abs(slot - " + task.getCurrentCell() + ")")); // //鐩撮�氫换鍔� // if (flag && CollectionUtil.isNotEmpty(emptyList)) { // return emptyList.get(0); @@ -160,13 +230,13 @@ //鏇存柊浠诲姟淇℃伅 task.setStartCell(edgStorageCage.getSlot()); - task.setTaskRunning(task.getTaskState()); - edgStorageDeviceTaskService.updateTaskMessage("edg_storage_device_one_task", task); + task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN); + edgStorageDeviceTaskService.updateTaskMessage(tableName, task); saveHistoryTask(task); return Boolean.TRUE; } - private boolean outTask(EdgStorageDeviceTask task) { + private boolean outTask(EdgStorageDeviceTask task, String tableName, int deviceId) { EdgStorageCageDetails edgStorageCageDetails = null; //绗煎唴鏄増鍥剧浉宸槸鍚﹁秴杩囬槇鍊� boolean flag = queryMaxMinDiff(threshold); @@ -174,6 +244,7 @@ EdgStorageCageDetails minEdgDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON) .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) + .eq(EdgStorageCageDetails::getDeviceId, deviceId) .orderByAsc(EdgStorageCageDetails::getTemperingLayoutId) .orderBy(Boolean.TRUE, Boolean.TRUE, EdgStorageCageDetails::getTemperingFeedSequence) .last("limit 1")); @@ -181,12 +252,25 @@ edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getWidth, minEdgDetails.getWidth()) .eq(EdgStorageCageDetails::getHeight, minEdgDetails.getHeight()) - .inSql(EdgStorageCageDetails::getId, "select min(id ) from edg_storage_cage_details where state = 100 group by slot ") - .last("order by abs(t.slot - " + task.getCurrentCell() + ") asc limit 1") + .eq(EdgStorageCageDetails::getDeviceId, deviceId) + .inSql(EdgStorageCageDetails::getId, "select min(id) from edg_storage_cage_details where state = 100 group by slot ") + .last("order by abs(slot - " + task.getCurrentCell() + ") asc limit 1") ); + //缁欑洿閫氫换鍔� + if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) { + GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() + .eq(GlassInfo::getGlassId, task.getGlassIdIn()) + .eq(GlassInfo::getWidth, minEdgDetails.getWidth()) + .eq(GlassInfo::getHeight, minEdgDetails.getHeight())); + if (null != glassInInfo) { + edgStorageCageDetails = new EdgStorageCageDetails(); + BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails); + } + } if (null == edgStorageCageDetails) { edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) + .eq(EdgStorageCageDetails::getDeviceId, deviceId) .eq(EdgStorageCageDetails::getSlot, minEdgDetails.getSlot()) .orderByAsc(EdgStorageCageDetails::getId) .last("limit 1") @@ -197,51 +281,135 @@ // 鑾峰彇涓婃浠诲姟 // 鑾峰彇鍘嗗彶琛ㄤ腑涓婃浠诲姟鏈�鍚庝竴鐗囧昂瀵� EdgStorageDeviceTaskHistory edgeData = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>() - .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS). - orderByDesc(EdgStorageDeviceTaskHistory::getId).last("limit 1")); - GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, edgeData.getGlassIdOut())); - //绗煎唴鐨勭幓鐠冪殑灏哄鏄惁鍜屼笂涓�娆′换鍔′竴鑷� - edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(one.getWidth(), one.getHeight()); + .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS) + .in(EdgStorageDeviceTaskHistory::getTaskType, Const.GLASS_CACHE_TYPE_OUT, Const.GLASS_CACHE_TYPE_THROUGH) + .orderByDesc(EdgStorageDeviceTaskHistory::getId).last("limit 1")); + if (null != edgeData) { + GlassInfo glassOutInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, edgeData.getGlassIdOut())); + //绗煎唴鐨勭幓鐠冪殑灏哄鏄惁鍜屼笂涓�娆′换鍔′竴鑷� + edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), glassOutInfo.getWidth(), glassOutInfo.getHeight()); + if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) { + GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() + .eq(GlassInfo::getGlassId, task.getGlassIdIn()) + .eq(GlassInfo::getWidth, glassOutInfo.getWidth()) + .eq(GlassInfo::getHeight, glassOutInfo.getHeight())); + if (null != glassInInfo) { + edgStorageCageDetails = new EdgStorageCageDetails(); + BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails); + } + } + } } if (null == edgStorageCageDetails) { - edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(0, 0); + edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), 0, 0); + } + if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) { + //鍜屼笂娆′换鍔′笉瀛樺湪鐩稿悓灏哄 + GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn())); + edgStorageCageDetails = new EdgStorageCageDetails(); + BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails); } if (edgStorageCageDetails == null) { //鍜屼笂娆′换鍔′笉瀛樺湪鐩稿悓灏哄 log.info("绗煎唴娌℃湁鐜荤拑浜�"); return Boolean.FALSE; } - //鐜荤拑淇℃伅鏇挎崲 - String glassIdChange = queryAndChangeGlass(edgStorageCageDetails.getGlassId()); - //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞� - queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange); + int taskType = Const.GLASS_CACHE_TYPE_OUT; + String glassId = edgStorageCageDetails.getGlassId(); + if (glassId.equals(task.getGlassIdIn())) { + if (3 != task.getTaskState()) { + return Boolean.FALSE; + } + log.info("5銆佺洿閫氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", edgStorageCageDetails); + //鐜荤拑淇℃伅鏇挎崲 + String glassIdChange = queryAndChangeGlass(glassId); + //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞� + queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange); + if (StringUtils.isNotBlank(glassIdChange)) { + edgStorageCageDetails = new EdgStorageCageDetails(); + GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); + BeanUtils.copyProperties(one, edgStorageCageDetails); + } + EdgStorageCage storageCage = edgStorageCageService.getOne(new LambdaQueryWrapper<EdgStorageCage>() + .eq(EdgStorageCage::getDeviceId, deviceId) + .eq(EdgStorageCage::getEnableState, Const.SLOT_ON) + .ge(EdgStorageCage::getRemainWidth, cellLength) + .last("order by abs(slot - " + task.getCurrentCell() + ") limit 1")); + Assert.isTrue(null != storageCage, "鏍煎瓙宸叉弧,鏃犳硶鎵ц鐩撮�氫换鍔�"); + log.info("3銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", storageCage); + edgStorageCageDetails.setSlot(storageCage.getSlot()); + edgStorageCageDetails.setDeviceId(storageCage.getDeviceId()); + edgStorageCageDetails.setState(Const.GLASS_STATE_OUT); + edgStorageCageDetailsService.save(edgStorageCageDetails); + taskType = Const.GLASS_CACHE_TYPE_THROUGH; + } else { + log.info("5銆侀潪鐩撮�氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", edgStorageCageDetails); + if (!edgStorageCageDetails.getSlot().equals(task.getCurrentCell())) { + EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() + .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) + .eq(EdgStorageCageDetails::getDeviceId, deviceId) + .eq(EdgStorageCageDetails::getSlot, task.getCurrentCell()).eq(EdgStorageCageDetails::getWidth, edgStorageCageDetails.getWidth()) + .eq(EdgStorageCageDetails::getHeight, edgStorageCageDetails.getHeight()).eq(EdgStorageCageDetails::getThickness, edgStorageCageDetails.getThickness()) + .orderByAsc(EdgStorageCageDetails::getId).last("limit 1") + ); + if (null != currentGlass) { + edgStorageCageDetails = currentGlass; + } + } + //鐜荤拑淇℃伅鏇挎崲 + String glassIdChange = queryAndChangeGlass(edgStorageCageDetails.getGlassId()); + //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞� + queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange); + LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT); + edgStorageCageDetailsService.update(wrapper); + log.info("5銆佹洿鏂板嚭鐗囩幓鐠冪殑鐘舵�佷负{}", Const.GLASS_STATE_OUT); + } //鐢熸垚鍑虹墖浠诲姟 task.setGlassIdOut(edgStorageCageDetails.getGlassId()); - task.setCurrentCell(edgStorageCageDetails.getSlot()); - task.setTaskRunning(Const.GLASS_CACHE_TYPE_OUT); - edgStorageDeviceTaskService.updateTaskMessage("edg_storage_device_one_task", task); + task.setStartCell(edgStorageCageDetails.getSlot()); + task.setTaskRunning(taskType); + + edgStorageDeviceTaskService.updateTaskMessage(tableName, task); saveHistoryTask(task); //鏇存柊璇︽儏琛ㄤ换鍔″嚭鐗囦腑 edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>() .set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT) .eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId())); + //纾ㄨ竟瀵瑰垪琛ㄦ柊澧炰竴鏉℃暟鎹� + EdgGlassTaskQueueInfo edgInfo = new EdgGlassTaskQueueInfo(); + BeanUtils.copyProperties(task, edgInfo); + edgInfo.setGlassId(edgStorageCageDetails.getGlassId()); + edgInfo.setCreateTime(new Date()); + edgInfo.setWidth((int) edgStorageCageDetails.getWidth()); + edgInfo.setHeight((int) edgStorageCageDetails.getHeight()); + edgInfo.setThickness((int) edgStorageCageDetails.getThickness()); + edgInfo.setState(Const.EDG_GLASS_BEFORE); + edgGlassTaskQueueInfoService.save(edgInfo); return Boolean.TRUE; } - private boolean updateCellRemainWidth(int slot) { - List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot, slot) - .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)); - if (CollectionUtil.isEmpty(list)) { - log.info("鏍煎瓙{}鍐呮棤鐜荤拑锛屾棤娉曟洿鏂�", slot); + private boolean finishTask(EdgStorageDeviceTask task, String tableName) { + log.info("褰撳墠浠诲姟淇℃伅涓猴細{}", task); + if (task.getTaskState() <= 4 && task.getTaskRunning() == 0) { + log.info("鏈夋鍦ㄦ墽琛岀殑浠诲姟鎴栬繖浠诲姟宸叉墽琛屼换鍔$姸鎬亄}锛屼换鍔″惎鍔ㄦ儏鍐祘}锛岀粨鏉�", task.getTaskState(), task.getTaskRunning()); return Boolean.FALSE; } - int widthTotal = (int) list.stream().map(e -> e.getWidth() + glassGap).mapToDouble(Double::intValue).sum(); - int remainWidth = cellLength - widthTotal >= 0 ? cellLength - widthTotal : 0; - edgStorageCageService.update(new LambdaUpdateWrapper<EdgStorageCage>(). - set(EdgStorageCage::getRemainWidth, remainWidth).eq(EdgStorageCage::getSlot, slot)); - return Boolean.FALSE; + Integer cell = task.getStartCell(); + Integer state = task.getTaskState(); + task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY); + task.setGlassIdOut(""); + task.setStartCell(0); + edgStorageDeviceTaskService.updateTaskMessage(tableName, task); + edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>() + .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) + .set(EdgStorageDeviceTaskHistory::getTaskState, + Const.GLASS_CACHE_TYPE_FINISH.equals(state) ? Const.RAW_GLASS_TASK_SUCCESS : Const.RAW_GLASS_TASK_FAILURE) + ); + int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2; + updateCellRemainWidth(cell, device); + return Boolean.TRUE; } - /** * 鏌ヨ鐜荤拑骞惰繘琛屼氦鎹� @@ -348,10 +516,31 @@ public boolean saveHistoryTask(EdgStorageDeviceTask task) { EdgStorageDeviceTaskHistory taskHistory = new EdgStorageDeviceTaskHistory(); BeanUtils.copyProperties(task, taskHistory); - task.setTaskType(task.getTaskRunning()); - task.setTaskState(Const.RAW_GLASS_TASK_NEW); + taskHistory.setTaskType(task.getTaskRunning()); + taskHistory.setCreateTime(new Date()); + taskHistory.setTaskState(Const.RAW_GLASS_TASK_NEW); edgStorageDeviceTaskHistoryService.save(taskHistory); return Boolean.TRUE; } + private boolean updateCellRemainWidth(int slot, int device) { + List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot, slot) + .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)); + int remainWidth = cellLength; + if (CollectionUtil.isNotEmpty(list)) { + int widthTotal = (int) list.stream().map(e -> Math.max(e.getWidth(), e.getHeight()) + glassGap).mapToDouble(Double::intValue).sum(); + remainWidth = cellLength - widthTotal >= 0 ? cellLength - widthTotal : 0; + } + edgStorageCageService.update(new LambdaUpdateWrapper<EdgStorageCage>(). + set(EdgStorageCage::getRemainWidth, remainWidth).eq(EdgStorageCage::getSlot, slot).eq(EdgStorageCage::getDeviceId, device)); + return Boolean.TRUE; + } + + private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) { + return ReadWriteEntity.builder() + .identifier(identifier) + //Kep涓槸Long绫诲瀷锛屽嵆锛欼nt32锛孞ava涓殑int绫诲瀷 + .value(value) + .build(); + } } -- Gitblit v1.8.0