From b4f51417997c20dd15e3db19d5055edd55d872cd Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期三, 27 十一月 2024 09:46:12 +0800
Subject: [PATCH] 版本保存 1、磨边队列进入多片已修改完成 2、解决状态清0异常现象
---
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java | 366 +++++++++++++++++++++++++++++++++++++++------------
1 files changed, 278 insertions(+), 88 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..0f4e52a 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,7 +29,10 @@
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
@@ -37,10 +43,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 +72,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();
+ 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);
+ 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 +203,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 +231,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 +245,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 +253,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 +282,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 +517,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));
+ List<Integer> slotList = new ArrayList<>();
+ if (CollectionUtil.isNotEmpty(list)) {
+ slotList = list.stream().map(EdgStorageCageDetails::getSlot).distinct().collect(Collectors.toList());
+ }
+ list.removeAll(slotList);
+ edgStorageCageService.update(new LambdaUpdateWrapper<EdgStorageCage>().
+ set(EdgStorageCage::getRemainWidth, cellLength).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