From 4e3b8155722b66e25df3c6fd42cc586b68dea391 Mon Sep 17 00:00:00 2001 From: zhoushihao <zsh19950802@163.com> Date: 星期五, 06 六月 2025 13:55:39 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java | 403 +++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 289 insertions(+), 114 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 0f4e52a..8cba008 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,11 +5,13 @@ 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.conditions.update.UpdateWrapper; 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.damage.service.DamageService; +import com.mes.edgglasstask.entity.EdgGlassTaskInfo; +import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import com.mes.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; @@ -24,15 +26,12 @@ import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -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.stream.Collectors; /** * @Author : zhoush @@ -50,17 +49,10 @@ @Autowired(required = false) MiloService miloService; - -// @Resource(name = "cacheGlassStartCallback") -// SubscriptionCallback cacheGlassStartCallback; -// -// @Resource(name = "cacheGlassTestCallback") -// SubscriptionCallback cacheGlassTestCallback; - @Resource EdgStorageDeviceTaskService edgStorageDeviceTaskService; - @Resource - EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService; + @Autowired + EdgGlassTaskInfoService edgGlassTaskInfoService; @Resource GlassInfoService glassInfoService; @Resource @@ -69,81 +61,98 @@ EdgStorageCageService edgStorageCageService; @Resource EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService; + @Resource + DamageService damageService; - @Value("${mes.glassGap}") +// @Value("${mes.glassGap}") private int glassGap; - @Value("${mes.threshold}") + // @Value("${mes.threshold}") private int threshold; - @Value("${mes.cellLength}") + // @Value("${mes.cellLength}") private int cellLength; + // @Value("${mes.ratio}") + private int ratio; + // @Value("${mes.min.one.firstLength}") + private int minOneFirstLength; + + // @Value("${mes.min.one.secondLength}") + private int minOneSecondLength; + + // @Value("${mes.min.two.firstLength}") + private int minTwoFirstLength; + + // @Value("${mes.min.two.secondLength}") + private int minTwoSecondLength; + + private String glassInIdOne = ""; + private String glassInIdTwo = ""; 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 startTwoOpcTask() throws Exception { -// miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL2.edg_storage_device_two_task[1].task_state"), cacheGlassStartCallback); -// } - - @Scheduled(fixedDelay = 1000) +// @Scheduled(fixedDelay = 1000) public void startOneOpcTask() { startOneOpcTaskChild(EDG_STORAGE_DEVICE_ONE_TASK, 1); } - @Scheduled(fixedDelay = 1000) + // @Scheduled(fixedDelay = 1000) public void startTwoOpcTask() { startOneOpcTaskChild(EDG_STORAGE_DEVICE_TWO_TASK, 2); } 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); +// try { + if (task == null) { + log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�"); + return; } + if (task.getTaskState() == 2) { + //闃叉鍑虹墖浠诲姟涓旂鍓嶆湁鐜荤拑鐨勬儏鍐碉紝灏嗚繘鐗噄d缃┖锛屽嵆鍑虹墖浠呰�冭檻绗煎唴鐨勭幓鐠� + task.setGlassIdIn(""); + } + int request = task.getTaskState(); + int taskRunning = task.getTaskRunning(); + log.info("寮�濮嬫墽琛屼换鍔★紝浠诲姟璇蜂俊鎭负{}", task); + if (request == 0) { + log.info("璁惧锛歿}鐘舵�侊細{}", device, request); + log.info("鏈敹鍒颁换鍔¤姹傦紝缁撴潫鏈浠诲姟"); + } else if (request == 1 && taskRunning == 0) { + //杩涚墖浠诲姟 + log.info("璁惧锛歿}鐘舵�侊細{}", device, request); + log.info("杩涚墖浠诲姟锛氳繘鐗囩幓鐠僫d涓猴細{}", task.getGlassIdIn()); + intoTask(task, tableName, device); + } else if (request == 2 && taskRunning == 0) { + //鍑虹墖浠诲姟 + outTask(task, tableName, device); + } else if (request == 3 && taskRunning == 0) { + //鐩撮�氫换鍔� + log.info("璁惧锛歿}鐘舵�侊細{}", device, request); + if (!outTask(task, tableName, device)) { + intoTask(task, tableName, device); + } + } else if (request == 4) { + log.info("璁惧锛歿}鐘舵�侊細{}", device, request); + log.info("灏嗗惎鍔ㄥ瓙鏀逛负4"); + task.setTaskRunning(Const.GLASS_CACHE_TYPE_RUNNING); + edgStorageDeviceTaskService.updateTaskMessage(tableName, task); + } else if (request == 5) { + log.info("璁惧锛歿}鐘舵�侊細{}", device, request); + finishTask(task, tableName); + } else { + log.info("鐜荤拑寮傚父澶勭悊"); + damageTask(task, tableName); + } +// } catch (Exception e) { +// log.info("鎵ц浠诲姟杩囩▼涓彂鐢熷紓甯革紝浠诲姟瀛梴}锛寋}", task.getTaskState(), e.getMessage()); +// log.info("灏嗗惎鍔ㄥ瓧鏀逛负0"); +// task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY); +// edgStorageDeviceTaskService.updateTaskMessage(tableName, task); +// } } - @Scheduled(fixedDelay = 1000) + // @Scheduled(fixedDelay = 1000) public void edgOneOpcTask() throws Exception { EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_ONE_TASK); String glassId = task.getGlassId(); @@ -154,7 +163,7 @@ edgTaskChild(glassId, 1); } - @Scheduled(fixedDelay = 1000) + // @Scheduled(fixedDelay = 1000) public void edgTwoOpcTask() throws Exception { EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_TWO_TASK); String glassId = task.getGlassId(); @@ -182,11 +191,12 @@ 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)); + edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>() + .set(EdgGlassTaskInfo::getLine, cell) + .set(EdgGlassTaskInfo::getState, Const.EDG_GLASS_START) + .set(EdgGlassTaskInfo::getUpdateTime, new Date()) + .eq(EdgGlassTaskInfo::getGlassId, glassId) + .eq(EdgGlassTaskInfo::getState, Const.EDG_GLASS_BEFORE)); if (cell == 1) { glassIdOne = glassId; } else { @@ -196,10 +206,33 @@ } private boolean intoTask(EdgStorageDeviceTask task, String tableName, int deviceId) { + Date startDate = new Date(); + log.info("寮�濮嬫墽琛岃繘鐗囦换鍔★紝浠诲姟淇℃伅涓猴細{},琛ㄥ悕涓猴細{},璁惧id:{},寮�濮嬫椂闂达細{}", task, tableName, deviceId, startDate); //鑾峰彇鐜荤拑鐨勫熀鏈俊鎭� GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn())); if (null == glassInfo) { log.info("杩涚墖鐜荤拑淇℃伅涓嶅瓨鍦紝鐜荤拑id:{}", task.getGlassIdIn()); + Date endDate = new Date(); + log.info("缁撴潫杩涚墖浠诲姟璁惧涓簕}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime()); + return Boolean.FALSE; + } + if (glassInIdOne.equals(task.getGlassIdIn()) || glassInIdTwo.equals(task.getGlassIdIn())) { + log.info("鐜荤拑id涓庝笂娆$浉鍚岋紝绂佹杩涚墖"); + Date endDate = new Date(); + log.info("缁撴潫杩涚墖浠诲姟璁惧涓簕}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime()); + + return Boolean.FALSE; + } + int firstLength = minTwoFirstLength; + int secondLength = minTwoSecondLength; + if (deviceId == 1) { + firstLength = minOneFirstLength; + secondLength = minOneSecondLength; + } + if (Math.max(glassInfo.getWidth(), glassInfo.getHeight()) < firstLength || Math.min(glassInfo.getWidth(), glassInfo.getHeight()) < secondLength) { + log.info("杩涚墖鐜荤拑灏哄灏忎簬{}*{}锛岀姝㈣繘绗肩幓鐠僫d:{}锛屽昂瀵镐负{}銆亄}", firstLength, secondLength, task.getGlassIdIn(), glassInfo.getWidth(), glassInfo.getHeight()); + Date endDate = new Date(); + log.info("缁撴潫杩涚墖浠诲姟璁惧涓簕}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime()); return Boolean.FALSE; } //鑾峰彇褰撳墠杩涚墖鐜荤拑id鍜岃繘鐗囨牸瀛� 鐩稿悓灏哄鍙互鏀句笅鐨勬牸瀛� @@ -211,12 +244,10 @@ .eq(EdgStorageCage::getDeviceId, deviceId) .eq(EdgStorageCage::getEnableState, Const.SLOT_ON) .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); -// } if (CollectionUtil.isEmpty(storageCageList) || storageCageList.size() == 1) { log.info("娌℃湁澶氫綑鐨勭┖鏍煎瓙"); + Date endDate = new Date(); + log.info("缁撴潫杩涚墖浠诲姟璁惧涓簕}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime()); return Boolean.FALSE; } edgStorageCage = storageCageList.get(0); @@ -233,14 +264,27 @@ task.setStartCell(edgStorageCage.getSlot()); task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN); edgStorageDeviceTaskService.updateTaskMessage(tableName, task); - saveHistoryTask(task); + saveHistoryTask(task, deviceId); + //璁板綍杩涚墖浠诲姟鐨勭幓鐠僫d鐢ㄤ簬涓嬫浠诲姟鐨勬瘮杈冿紝闃叉鍚屼竴鍧楃幓鐠冮噸澶嶆墽琛� + if (deviceId == 1) { + glassInIdOne = task.getGlassIdIn(); + } else { + glassInIdTwo = task.getGlassIdIn(); + } + edgStorageCageService.update(new UpdateWrapper<EdgStorageCage>() + .setSql("remain_width = remain_width -" + (glassGap + Math.max(details.getWidth(), details.getHeight()))).eq("device_id", deviceId) + .eq("slot", task.getStartCell())); + Date endDate = new Date(); + log.info("缁撴潫杩涚墖浠诲姟璁惧涓簕}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime()); return Boolean.TRUE; } private boolean outTask(EdgStorageDeviceTask task, String tableName, int deviceId) { + Date startDate = new Date(); + log.info("寮�濮嬫墽琛屽嚭鐗�/鐩撮�氫换鍔★紝浠诲姟淇℃伅涓猴細{},琛ㄥ悕涓猴細{},璁惧id:{},寮�濮嬫椂闂达細{}", task, tableName, deviceId, startDate); EdgStorageCageDetails edgStorageCageDetails = null; //绗煎唴鏄増鍥剧浉宸槸鍚﹁秴杩囬槇鍊� - boolean flag = queryMaxMinDiff(threshold); + boolean flag = queryMaxMinDiffByDevice(threshold, deviceId); if (flag) { EdgStorageCageDetails minEdgDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON) @@ -288,7 +332,7 @@ 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()); + edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), glassOutInfo.getWidth(), glassOutInfo.getHeight(), 0, 0); if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) { GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() .eq(GlassInfo::getGlassId, task.getGlassIdIn()) @@ -302,11 +346,21 @@ } } if (null == edgStorageCageDetails) { - edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), 0, 0); + edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), 0, 0, 0, 0); } if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) { //鍜屼笂娆′换鍔′笉瀛樺湪鐩稿悓灏哄 + int firstLength = minTwoFirstLength; + int secondLength = minTwoSecondLength; + if (deviceId == 1) { + firstLength = minOneFirstLength; + secondLength = minOneSecondLength; + } GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn())); + if (Math.max(glassInInfo.getWidth(), glassInInfo.getHeight()) < firstLength || Math.min(glassInInfo.getWidth(), glassInInfo.getHeight()) < secondLength) { + log.info("鐩撮�氫换鍔¤繘鐗囩幓鐠冨昂瀵稿皬浜巤}*{}", firstLength, secondLength); + return Boolean.FALSE; + } edgStorageCageDetails = new EdgStorageCageDetails(); BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails); } @@ -322,6 +376,10 @@ return Boolean.FALSE; } log.info("5銆佺洿閫氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", edgStorageCageDetails); + if (glassInIdOne.equals(task.getGlassIdIn()) || glassInIdTwo.equals(task.getGlassIdIn())) { + log.info("鐜荤拑id涓庝笂娆$浉鍚岋紝绂佹杩涚墖"); + return Boolean.FALSE; + } //鐜荤拑淇℃伅鏇挎崲 String glassIdChange = queryAndChangeGlass(glassId); //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞� @@ -372,44 +430,107 @@ task.setTaskRunning(taskType); edgStorageDeviceTaskService.updateTaskMessage(tableName, task); - saveHistoryTask(task); + saveHistoryTask(task, deviceId); + //璁板綍鐩撮�氫换鍔$殑鐜荤拑id鐢ㄤ簬涓嬫浠诲姟鐨勬瘮杈冿紝闃叉鍚屼竴鍧楃幓鐠冮噸澶嶆墽琛� + if (3 == task.getTaskState()) { + if (deviceId == 1) { + glassInIdOne = edgStorageCageDetails.getGlassId(); + } else { + glassInIdTwo = edgStorageCageDetails.getGlassId(); + } + } //鏇存柊璇︽儏琛ㄤ换鍔″嚭鐗囦腑 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); + saveGlassSize(edgStorageCageDetails); +// edgStorageCageService.update(new UpdateWrapper<EdgStorageCage>() +// .setSql("remain_width = remain_width +" + Math.max(edgStorageCageDetails.getWidth(), edgStorageCageDetails.getHeight())) +// .eq("device_id", deviceId) +// .eq("slot", task.getStartCell())); + Date endDate = new Date(); + log.info("缁撴潫鍑虹墖/鐩撮�氫换鍔¤澶囦负{}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime()); return Boolean.TRUE; } private boolean finishTask(EdgStorageDeviceTask task, String tableName) { - log.info("褰撳墠浠诲姟淇℃伅涓猴細{}", task); - if (task.getTaskState() <= 4 && task.getTaskRunning() == 0) { + if (task.getTaskState() <= 4) { log.info("鏈夋鍦ㄦ墽琛岀殑浠诲姟鎴栬繖浠诲姟宸叉墽琛屼换鍔$姸鎬亄}锛屼换鍔″惎鍔ㄦ儏鍐祘}锛岀粨鏉�", task.getTaskState(), task.getTaskRunning()); return Boolean.FALSE; } + Date startDate = new Date(); + log.info("寮�濮嬫墽琛屽畬鎴愪换鍔″悗娓呴櫎鍔ㄤ綔锛屼换鍔′俊鎭负锛歿},琛ㄥ悕涓猴細{},寮�濮嬫椂闂达細{}", task, tableName, startDate); Integer cell = task.getStartCell(); - Integer state = task.getTaskState(); + task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY); + task.setGlassIdOut(""); + task.setStartCell(0); + int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2; + EdgStorageDeviceTaskHistory taskHistory = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>() + .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) + .eq(EdgStorageDeviceTaskHistory::getDeviceId, device) + .orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 1")); + //濡傛灉浠诲姟绫诲瀷涓�1锛�3锛屽皢鍒囧壊瀹屾垚鐨勭幓鐠冭嚜鍔ㄦ姤宸� + if (Const.GLASS_CACHE_TYPE_IN_ALL.contains(taskHistory.getTaskType())) { + damageService.autoSubmitReport(taskHistory.getGlassIdIn(), taskHistory.getDeviceId(), "鍒囧壊", "杩涘崸鐞�", 1); + } + updateCellRemainWidth(cell, device, taskHistory); + edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>() + .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) + .eq(EdgStorageDeviceTaskHistory::getDeviceId, device) + .set(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS) + ); + //鏈�鍚庢洿鏂颁换鍔★紝淇濊瘉浠诲姟鍓嶇殑鍔ㄤ綔閮藉仛瀹� + edgStorageDeviceTaskService.updateTaskMessage(tableName, task); + Date endDate = new Date(); + log.info("缁撴潫瀹屾垚浠诲姟鍚庢竻闄ゅ姩浣滐紝琛ㄥ悕涓猴細{},缁撴潫鏃堕棿涓猴細{}锛屽叡鑰楁椂锛歿}ms", tableName, endDate, endDate.getTime() - startDate.getTime()); + return Boolean.TRUE; + } + + private boolean damageTask(EdgStorageDeviceTask task, String tableName) { + if (task.getTaskState() <= 5) { + log.info("浠诲姟鏈彂鐢熷紓甯告竻绌猴紝浠诲姟缁撴潫锛岀數姘旂姸鎬亄},mes鐘舵�亄}", task.getTaskState(), task.getTaskRunning()); + return Boolean.FALSE; + } + Date startDate = new Date(); + log.info("寮�濮嬫墽琛屽紓甯稿鐞嗕换鍔″悗娓呴櫎鍔ㄤ綔锛屼换鍔′俊鎭负锛歿},琛ㄥ悕涓猴細{},寮�濮嬫椂闂达細{}", task, tableName, startDate); + int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2; + EdgStorageDeviceTaskHistory taskHistory = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>() + .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) + .eq(EdgStorageDeviceTaskHistory::getDeviceId, device) + .orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 1")); + Integer cell = taskHistory.getStartCell(); + Integer taskType = taskHistory.getTaskType(); + if (Const.GLASS_CACHE_TYPE_IN_ALL.contains(taskType)) { + String glassId = taskHistory.getGlassIdIn(); + edgStorageCageDetailsService.remove(new LambdaQueryWrapper<EdgStorageCageDetails>() + .eq(EdgStorageCageDetails::getDeviceId, device) + .eq(EdgStorageCageDetails::getSlot, cell) + .eq(EdgStorageCageDetails::getGlassId, glassId)); + } else { + String glassId = taskHistory.getGlassIdOut(); + edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>() + .set(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) + .eq(EdgStorageCageDetails::getDeviceId, device) + .eq(EdgStorageCageDetails::getSlot, cell) + .eq(EdgStorageCageDetails::getGlassId, glassId)); + } + + updateCellRemainWidth(cell, device, taskHistory); + edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>() + .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) + .eq(EdgStorageDeviceTaskHistory::getDeviceId, device) + .set(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_FAILURE) + ); + //鏈�鍚庢洿鏂颁换鍔★紝淇濊瘉浠诲姟鍓嶇殑鍔ㄤ綔閮藉仛瀹� 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); + Date endDate = new Date(); + log.info("瀹屾垚鎵ц寮傚父澶勭悊浠诲姟鍚庢竻闄ゅ姩浣滐紝琛ㄥ悕涓猴細{},缁撴潫鏃堕棿涓猴細{}锛屽叡鑰楁椂锛歿}ms", tableName, endDate, endDate.getTime() - startDate.getTime()); return Boolean.TRUE; + } /** @@ -435,17 +556,47 @@ "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight() + " and state != 100") .orderByAsc(GlassInfo::getTemperingLayoutId) - .orderBy(Boolean.TRUE, Boolean.TRUE, GlassInfo::getTemperingFeedSequence) + .orderByAsc(GlassInfo::getTemperingFeedSequence) .last("Limit 1"); GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper); if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) { - String swapGlassId = swapGlassInfo.getGlassId(); - log.info("灏嗙幓鐠儃}鍜岀幓鐠儃}锛屼俊鎭簰鎹�,杩涚幓鐠� {}", glassInfo, swapGlassInfo, swapGlassInfo); - swapGlassInfo.setGlassId(glassId); - glassInfo.setGlassId(swapGlassId); + //寰呮浛鎹㈢殑鐜荤拑淇℃伅 + Integer ishorizontal = glassInfo.getIshorizontal(); + Integer temperingLayoutId = glassInfo.getTemperingLayoutId(); + Integer temperingFeedSequence = glassInfo.getTemperingFeedSequence(); + Integer xCoordinate = glassInfo.getXCoordinate(); + Integer yCoordinate = glassInfo.getYCoordinate(); + double angle = glassInfo.getAngle(); + Integer ruleId = glassInfo.getRuleId(); + //鏇挎崲鍚庣殑鐜荤拑淇℃伅 + Integer swapIshorizontal = swapGlassInfo.getIshorizontal(); + Integer swapTemperingLayoutId = swapGlassInfo.getTemperingLayoutId(); + Integer swapTemperingFeedSequence = swapGlassInfo.getTemperingFeedSequence(); + Integer swapXCoordinate = swapGlassInfo.getXCoordinate(); + Integer swapYCoordinate = swapGlassInfo.getYCoordinate(); + double swapAngle = swapGlassInfo.getAngle(); + Integer swapRuleId = swapGlassInfo.getRuleId(); + //鏇挎崲鐜荤拑淇℃伅 + glassInfo.setIshorizontal(swapIshorizontal); + glassInfo.setTemperingLayoutId(swapTemperingLayoutId); + glassInfo.setTemperingFeedSequence(swapTemperingFeedSequence); + glassInfo.setXCoordinate(swapXCoordinate); + glassInfo.setYCoordinate(swapYCoordinate); + glassInfo.setAngle(swapAngle); + glassInfo.setRuleId(swapRuleId); + + swapGlassInfo.setIshorizontal(ishorizontal); + swapGlassInfo.setTemperingLayoutId(temperingLayoutId); + swapGlassInfo.setTemperingFeedSequence(temperingFeedSequence); + swapGlassInfo.setXCoordinate(xCoordinate); + swapGlassInfo.setYCoordinate(yCoordinate); + swapGlassInfo.setAngle(angle); + swapGlassInfo.setRuleId(ruleId); + + log.info("灏嗙幓鐠儃}鍜岀幓鐠儃}锛屼俊鎭簰鎹�(鍘熺墖搴忓彿鍙婂潗鏍囬櫎澶�),杩涚幓鐠� {}", glassInfo, swapGlassInfo, swapGlassInfo); glassInfoService.updateById(swapGlassInfo); glassInfoService.updateById(glassInfo); - return swapGlassId; + return swapGlassInfo.getGlassId(); } return ""; } @@ -498,11 +649,12 @@ * * @return */ - public boolean queryMaxMinDiff(int threshold) { + public boolean queryMaxMinDiffByDevice(int threshold, int deviceId) { //鑾峰彇绗煎瓙鍐呮渶澶х増鍥緄d鍜屾渶灏忕増鍥緄d鎻掑�硷紝鍒ゆ柇鏄惁澶т簬闃堝�硷紝澶т簬闃堝�肩洿鎺ュ嚭鏈�灏忕増鍥剧幓鐠� QueryWrapper<EdgStorageCageDetails> queryWrapper = new QueryWrapper<>(); queryWrapper.select("max(tempering_layout_id)-min(tempering_layout_id) as diff") .eq("state", Const.GLASS_STATE_IN) + .eq("device_id", deviceId) .inSql("slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON); List<Object> list = edgStorageCageDetailsService.listObjs(queryWrapper); //鑾峰彇绗煎唴鐜荤拑鐗堝浘宸�兼槸鍚﹀ぇ浜庨槇鍊� @@ -514,29 +666,52 @@ } } - public boolean saveHistoryTask(EdgStorageDeviceTask task) { + public boolean saveHistoryTask(EdgStorageDeviceTask task, int deviceId) { EdgStorageDeviceTaskHistory taskHistory = new EdgStorageDeviceTaskHistory(); BeanUtils.copyProperties(task, taskHistory); taskHistory.setTaskType(task.getTaskRunning()); taskHistory.setCreateTime(new Date()); taskHistory.setTaskState(Const.RAW_GLASS_TASK_NEW); + taskHistory.setDeviceId(deviceId); edgStorageDeviceTaskHistoryService.save(taskHistory); return Boolean.TRUE; } - private boolean updateCellRemainWidth(int slot, int device) { + public boolean updateCellRemainWidth(int slot, int device, EdgStorageDeviceTaskHistory taskHistory) { List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot, slot) .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)); - List<Integer> slotList = new ArrayList<>(); + int remainWidth = cellLength; if (CollectionUtil.isNotEmpty(list)) { - slotList = list.stream().map(EdgStorageCageDetails::getSlot).distinct().collect(Collectors.toList()); + if (2 == taskHistory.getTaskType()) { + remainWidth = 0; + } else { + for (EdgStorageCageDetails item : list) { + remainWidth = remainWidth - glassGap - (int) Math.max(item.getWidth(), item.getHeight()); + } + if (remainWidth <= 0) { + remainWidth = 0; + } + } } - list.removeAll(slotList); edgStorageCageService.update(new LambdaUpdateWrapper<EdgStorageCage>(). - set(EdgStorageCage::getRemainWidth, cellLength).eq(EdgStorageCage::getSlot, slot).eq(EdgStorageCage::getDeviceId, device)); + set(EdgStorageCage::getRemainWidth, remainWidth).eq(EdgStorageCage::getSlot, slot).eq(EdgStorageCage::getDeviceId, device)); return Boolean.TRUE; } + private boolean saveGlassSize(EdgStorageCageDetails glassInfo) { + EdgGlassTaskInfo edgGlassTaskInfo = new EdgGlassTaskInfo(); + BeanUtils.copyProperties(glassInfo, edgGlassTaskInfo); + edgGlassTaskInfo.setHeight((int) (glassInfo.getHeight() * ratio)); + edgGlassTaskInfo.setWidth((int) (glassInfo.getWidth() * ratio)); + edgGlassTaskInfo.setThickness((int) (glassInfo.getThickness() * ratio)); + edgGlassTaskInfo.setState(Const.EDG_GLASS_BEFORE); + edgGlassTaskInfo.setCreateTime(new Date()); + edgGlassTaskInfo.setUpdateTime(new Date()); + //鍏堝皢鍘嗗彶瀵瑰垪琛ㄤ腑鏈幓鐠冪殑鏁版嵁鍒犻櫎锛岄噸鏂版柊澧炰竴浠芥渶鏂扮殑鏁版嵁 + edgGlassTaskInfoService.remove(new LambdaQueryWrapper<EdgGlassTaskInfo>().eq(EdgGlassTaskInfo::getGlassId, glassInfo.getGlassId())); + return edgGlassTaskInfoService.save(edgGlassTaskInfo); + } + private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) { return ReadWriteEntity.builder() .identifier(identifier) -- Gitblit v1.8.0