From 7635dc25bd2a4d565df496b2d96354639966768d Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期四, 25 九月 2025 11:09:44 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 2906 +++++++++++++++++++++++++----------------------------------
1 files changed, 1,239 insertions(+), 1,667 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 1514ae1..94dfa94 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1,29 +1,31 @@
package com.zy.asrs.service.impl;
import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.SpringUtils;
+import com.zy.asrs.domain.enums.NotifyMsgType;
import com.zy.asrs.entity.*;
-import com.zy.asrs.mapper.*;
import com.zy.asrs.service.*;
+import com.zy.asrs.utils.NotifyUtils;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.*;
import com.zy.common.model.enums.NavigationMapType;
import com.zy.common.service.CommonService;
import com.zy.common.utils.*;
import com.zy.core.News;
-import com.zy.core.action.ForkLiftAction;
+import com.zy.core.action.LiftAction;
import com.zy.core.action.ShuttleAction;
import com.zy.core.cache.SlaveConnection;
+import com.zy.core.dispatcher.LiftDispatchUtils;
import com.zy.core.dispatcher.ShuttleDispatchUtils;
import com.zy.core.enums.*;
-import com.zy.core.model.*;
import com.zy.core.model.command.*;
import com.zy.core.model.protocol.*;
-import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.*;
+import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.*;
@@ -36,18 +38,8 @@
@Service("mainService")
public class MainServiceImpl {
- @Value("${wms.url}")
- private String wmsUrl;
- @Autowired
- private SlaveProperties slaveProperties;
@Autowired
private WrkMastService wrkMastService;
- @Autowired
- private WrkMastLogMapper wrkMastLogMapper;
- @Autowired
- private LocMastService locMastService;
- @Autowired
- private BasDevpService basDevpService;
@Autowired
private BasShuttleErrLogService basShuttleErrLogService;
@Autowired
@@ -61,17 +53,11 @@
@Autowired
private BasMapService basMapService;
@Autowired
- private BasLiftService basLiftService;
- @Autowired
private ShuttleDispatchUtils shuttleDispatchUtils;
@Autowired
private RedisUtil redisUtil;
@Autowired
- private BasLiftOptService basLiftOptService;
- @Autowired
private ConfigService configService;
- @Autowired
- private NavigateMapUtils navigateMapUtils;
@Autowired
private NavigateMapData navigateMapData;
@Autowired
@@ -81,471 +67,67 @@
@Autowired
private ShuttleAction shuttleAction;
@Autowired
- private ForkLiftAction forkLiftAction;
-
-
-// /**
-// * 缁勬墭
-// * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
-// */
-// public void generateStoreWrkFile() {
-// try {
-// // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-// for (DevpSlave devp : slaveProperties.getDevp()) {
-// // 閬嶅巻鍏ュ簱鍙�
-// for (DevpSlave.Sta inSta : devp.getInSta()) {
-// // 鑾峰彇鍏ュ簱绔欎俊鎭�
-// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-// StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
-// if (staProtocol == null) {
-// continue;
-// } else {
-// staProtocol = staProtocol.clone();
-// }
-// Short workNo = staProtocol.getWorkNo();
-// // 灏哄妫�娴嬪紓甯�
-// boolean back = false;
-// String errMsg = "寮傚父锛�";
-// if (staProtocol.isFrontErr()) {
-// errMsg = errMsg + "鍓嶈秴闄愶紱";
-// back = true;
-// }
-// if (staProtocol.isBackErr()) {
-// errMsg = errMsg + "鍚庤秴闄�";
-// back = true;
-// }
-// if (staProtocol.isHighErr()) {
-// errMsg = errMsg + "楂樿秴闄�";
-// back = true;
-// }
-// if (staProtocol.isLeftErr()) {
-// errMsg = errMsg + "宸﹁秴闄�";
-// back = true;
-// }
-// if (staProtocol.isRightErr()) {
-// errMsg = errMsg + "鍙宠秴闄�";
-// back = true;
-// }
-// if (staProtocol.isWeightErr()) {
-// errMsg = errMsg + "瓒呴噸";
-// back = true;
-// }
-// if (staProtocol.isBarcodeErr()) {
-// errMsg = errMsg + "鎵爜澶辫触";
-// back = true;
-// }
-// // 閫�鍥�
-// if (back) {
-// // led 寮傚父鏄剧ず
-// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-// if (ledThread != null) {
-// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
-// }
-// continue;
-// }
-//
-// // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
-// if (staProtocol.isAutoing() && staProtocol.isLoading()
-// && staProtocol.isInEnable()
-// && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
-// ) {
-//
-// // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
-// if (barcodeThread == null) {
-// continue;
-// }
-// String barcode = barcodeThread.getBarcode();
-// if (!Cools.isEmpty(barcode)) {
-//// News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
-// if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode) || "00000000".equals(barcode)) {
-//// staProtocol.setWorkNo((short) 32002);
-//// staProtocol.setStaNo(inSta.getBackSta().shortValue());
-//// devpThread.setPakMk(staProtocol.getSiteId(), false);
-//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//
-// // led 寮傚父鏄剧ず
-// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-// if (ledThread != null) {
-// String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-// }
-// continue;
-// }
-// } else {
-//// staProtocol.setWorkNo((short) 32002);
-//// staProtocol.setStaNo(inSta.getBackSta().shortValue());
-//// devpThread.setPakMk(staProtocol.getSiteId(), false);
-//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//
-//// // led 寮傚父鏄剧ず
-//// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-//// if (ledThread != null) {
-//// String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯";
-//// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-//// }
-// continue;
-// }
-//
-// // 杩囨护鐩樼偣/鎷f枡/骞舵澘浠诲姟
-// WrkMast wrkMast1 = wrkMastMapper.selectPickStepByBarcode(barcode);
-// if (null != wrkMast1) {
-// continue;
-// }
-//
-// // 鍒ゆ柇閲嶅宸ヤ綔妗�
-// WrkMast wrkMast2 = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
-// if (wrkMast2 != null) {
-// News.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast2.getWrkNo());
-// continue;
-// }
-//
-// try {
-// LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-// SearchLocParam param = new SearchLocParam();
-// param.setBarcode(barcode);
-// param.setIoType(1);
-// param.setSourceStaNo(inSta.getStaNo());
-// param.setLocType1(locTypeDto.getLocType1());
-// String response = new HttpHandler.Builder()
-// .setUri(wmsUrl)
-// .setPath("/rpc/pakin/loc/v2")
-// .setJson(JSON.toJSONString(param))
-// .build()
-// .doPost();
-// JSONObject jsonObject = JSON.parseObject(response);
-// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
-// Integer code = jsonObject.getInteger("code");
-// if (code.equals(200)) {
-// StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-// // plc 澶勭悊
-// barcodeThread.setBarcode("");
-//// staProtocol.setWorkNo(dto.getWorkNo().shortValue());
-//// staProtocol.setStaNo(dto.getStaNo().shortValue());
-//// devpThread.setPakMk(staProtocol.getSiteId(), false);
-////
-//// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//// if (!result) {
-//// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-//// }
-//
-// // 鍒ゆ柇閲嶅宸ヤ綔妗�
-// WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
-// if (wrkMast == null) {
-// continue;
-// }
-//
-// // 鏇存柊宸ヤ綔涓绘。
-// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
-// wrkMast.setModiTime(new Date());
-// if (wrkMastMapper.updateById(wrkMast) == 0) {
-// News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
-// }
-//
-// } else if (code == 500) {
-// if (ledThread != null) {
-// String errorMsg = jsonObject.getString("msg");
-// if (!Cools.isEmpty(errorMsg)) {
-// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-// ledThread.setLedMk(false);
-// }
-// }
-// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
-// } else if (code == 700) {
-//// staProtocol.setWorkNo((short) 32002);
-//// staProtocol.setRollback102(1);//102绔欏洖閫�淇″彿
-//// devpThread.setPakMk(staProtocol.getSiteId(), false);
-//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(5, staProtocol));
-//
-// // led 寮傚父鏄剧ず
-// if (ledThread != null) {
-// String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒";
-// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
-// ledThread.setLedMk(false);
-// }
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-// }
-// }
-// }
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-// }
-
-// /**
-// * 鎷f枡銆佸苟鏉垮啀鍏ュ簱
-// */
-// @Transactional
-// public synchronized void stnToCrnStnPick(){
-// try {
-// for (DevpSlave devp : slaveProperties.getDevp()) {
-// // 閬嶅巻鎷f枡鍏ュ簱鍙�
-// for (DevpSlave.Sta pickSta : devp.getPickInSta()) {
-// // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭�
-// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-// StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
-// if (staProtocol == null) {
-// continue;
-// } else {
-// staProtocol = staProtocol.clone();
-// }
-// if (staProtocol.isAutoing()
-// && staProtocol.isLoading()
-// && staProtocol.isInEnable()
-//// && (staProtocol.getWorkNo() > 0)
-// && staProtocol.isPakMk()) {
-//
-// // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
-// if (barcodeThread == null) {
-// continue;
-// }
-// String barcode = barcodeThread.getBarcode();
-// if (Cools.isEmpty(barcode)) {
-// continue;
-// }
-// if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
-// continue;
-// }
-//
-// WrkMast wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode);
-// if (wrkMast == null) {//鎵句笉鍒板伐浣滄。
-// continue;
-// }
-//
-// if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104)
-// || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
-// continue;
-// }
-//
-//// //*********************鍚屽簱浣嶇粍鏍¢獙*********************
-//// boolean flag = false;
-//// String th = "";
-//// List<String> innerLoc = Utils.getGroupInnerLoc(wrkMast.getSourceLocNo());
-//// for (String loc : innerLoc) {
-//// LocMast locMast = locMastService.selectById(loc);
-//// if (locMast == null) {
-//// continue;
-//// }
-////
-//// if (!locMast.getLocSts().equals("F")) {
-//// flag = true;
-//// th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�";
-//// break;
-//// }
-//// }
-//// if (flag) {
-//// News.info(th);
-//// continue;
-//// }
-//// //*********************鍚屽簱浣嶇粍鏍¢獙*********************
-//
-//// // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-//// if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
-//// News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
-//// continue;
-//// }
-//
-// try {
-// LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());//婧愬簱浣�
-// SearchLocParam param = new SearchLocParam();
-// param.setWrkNo(wrkMast.getWrkNo());
-// param.setBarcode(wrkMast.getBarcode());
-// param.setIoType(wrkMast.getIoType());
-// param.setSourceStaNo(pickSta.getStaNo());
-// param.setLiftNo(pickSta.getLiftNo());
-// param.setLocType1(locMast.getLocType1());
-// String response = new HttpHandler.Builder()
-// .setUri(wmsUrl)
-// .setPath("/rpc/pakin/loc/v2")
-// .setJson(JSON.toJSONString(param))
-// .build()
-// .doPost();
-// JSONObject jsonObject = JSON.parseObject(response);
-// Integer code = jsonObject.getInteger("code");
-// if (code.equals(200)) {
-// StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-//
-//// //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯
-//// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo()));
-//// if (liftStaProtocol == null) {
-//// News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触");
-//// continue;
-//// }
-////
-//// // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
-//// wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54
-//// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
-//// wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯
-//// wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔�
-//// wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅
-//// wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌�
-//// wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌�
-//// wrkMast.setModiTime(new Date());
-//// if (wrkMastMapper.updateById(wrkMast) == 0) {
-//// News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
-//// continue;
-//// }
-// } else if (code == 500) {
-// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-// }
-// }
-// }
-//
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-// }
-
-// /**
-// * 鐩樼偣鍐嶅叆搴�
-// */
-// @Transactional
-// public synchronized void stnToCrnStnPlate(){
-// try {
-// for (DevpSlave devp : slaveProperties.getDevp()) {
-// // 閬嶅巻鎷f枡鍏ュ簱鍙�
-// for (DevpSlave.Sta pickSta : devp.getPickInSta()) {
-// // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭�
-// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-// StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
-// if (staProtocol == null) {
-// continue;
-// } else {
-// staProtocol = staProtocol.clone();
-// }
-// if (staProtocol.isAutoing()
-// && staProtocol.isLoading()
-// && staProtocol.isInEnable()
-//// && (staProtocol.getWorkNo() > 0)
-// && staProtocol.isPakMk()) {
-//
-// // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
-// if (barcodeThread == null) {
-// continue;
-// }
-// String barcode = barcodeThread.getBarcode();
-// if (Cools.isEmpty(barcode)) {
-// continue;
-// }
-// if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
-// continue;
-// }
-// WrkMast wrkMast = wrkMastMapper.selectByBarcode(barcode);
-// if (wrkMast == null) {//鎵句笉鍒板伐浣滄。
-// continue;
-// }
-//
-// if ((wrkMast.getIoType() != 107)
-// || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
-// continue;
-// }
-//
-//// // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-//// if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
-//// News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
-//// continue;
-//// }
-//
-// //鐩樼偣鎵炬柊搴撲綅
-// try {
-// LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());//婧愬簱浣�
-// SearchLocParam param = new SearchLocParam();
-// param.setWrkNo(wrkMast.getWrkNo());
-// param.setBarcode(wrkMast.getBarcode());
-// param.setIoType(107);//鐩樼偣
-// param.setSourceStaNo(pickSta.getStaNo());
-// param.setLiftNo(pickSta.getLiftNo());
-// param.setLocType1(locMast.getLocType1());
-// String response = new HttpHandler.Builder()
-// .setUri(wmsUrl)
-// .setPath("/rpc/pakin/loc/v2")
-// .setJson(JSON.toJSONString(param))
-// .build()
-// .doPost();
-// JSONObject jsonObject = JSON.parseObject(response);
-// Integer code = jsonObject.getInteger("code");
-// if (code.equals(200)) {
-// StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-//
-//// //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯
-//// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo()));
-//// if (liftStaProtocol == null) {
-//// News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触");
-//// continue;
-//// }
-////
-//// // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
-//// wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 107->57
-//// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
-//// wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯
-//// wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔�
-//// wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅
-//// wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌�
-//// wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌�
-//// wrkMast.setModiTime(new Date());
-//// if (wrkMastMapper.updateById(wrkMast) == 0) {
-//// News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
-//// continue;
-//// }
-//
-//// staProtocol.setStaNo(dto.getSourceStaNo().shortValue());//鍐欏叆鐩爣绔�
-//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//
-// } else if (code == 500) {
-// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-// }
-//
-// }
-// }
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-// }
+ private LiftAction liftAction;
+ @Autowired
+ private NotifyUtils notifyUtils;
+ @Autowired
+ private BasShuttleChargeService basShuttleChargeService;
+ @Autowired
+ private DeviceConfigService deviceConfigService;
+ @Autowired
+ private LiftDispatchUtils liftDispatchUtils;
+ @Autowired
+ private BasShuttleService basShuttleService;
/**
* 鍒濆鍖栧疄鏃跺湴鍥�
*/
public synchronized void initRealtimeBasMap() {
try {
- for (int i = 1; i <= 4; i++) {//鎬诲叡鍥涘眰妤�
- Object data = redisUtil.get(RedisKeyType.MAP.key + i);
- if (data == null) {//redis鍦板浘鏁版嵁涓虹┖锛屼粠鏁版嵁搴撲腑鑾峰彇
- BasMap basMap = basMapService.selectLatestMap(i);
- if (basMap == null) {
- //鏁版嵁搴撲腑涔熶笉瀛樺湪鍦板浘鏁版嵁锛屼粠鍦板浘鏂囦欢涓幏鍙�
- //杞藉叆鍦板浘
- List<List<MapNode>> lists = navigateMapData.getJsonData(i, -1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
- //瀛樺叆鏁版嵁搴�
- basMap = new BasMap();
- basMap.setData(JSON.toJSONString(lists));
- basMap.setCreateTime(new Date());
- basMap.setUpdateTime(new Date());
- basMap.setLev(i);
+ List<BasMap> basMaps = basMapService.selectList(new EntityWrapper<BasMap>().orderBy("lev", true));
+ for (BasMap basMap : basMaps) {
+ Integer lev = basMap.getLev();
+ Object data = redisUtil.get(RedisKeyType.MAP.key + lev);
+ if (data == null) {//redis鍦板浘鏁版嵁涓虹┖
+ //杞藉叆鍦板浘
+ List<List<MapNode>> lists = navigateMapData.getJsonOriginData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
- if (!basMapService.insert(basMap)) {
- log.info("鍦板浘鏁版嵁瀛樺偍澶辫触");
- }
+ //瀛樺叆鏁版嵁搴�
+ basMap.setData(JSON.toJSONString(lists));
+ basMap.setCreateTime(new Date());
+ basMap.setUpdateTime(new Date());
+ if (!basMapService.updateById(basMap)) {
+ log.info("鍦板浘鏁版嵁瀛樺偍澶辫触");
}
//灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
- redisUtil.set(RedisKeyType.MAP.key + i, JSON.toJSONString(basMap));
+ redisUtil.set(RedisKeyType.MAP.key + lev, lists);
+ }
+
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
+ */
+ public synchronized void shuttleInExecute() {
+ try {
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .in("wrk_sts"
+ , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts
+ )
+ .orderBy("io_pri", false)
+ .orderBy("appe_time", true)
+ );
+ for (WrkMast wrkMast : wrkMasts) {
+ boolean step1 = this.shuttleInExecuteStep1(wrkMast);//灏忚溅鎼叆搴撲腑
+ Thread.sleep(100);
+ if (!step1) {
+ continue;
}
}
} catch (Exception e) {
@@ -553,352 +135,328 @@
}
}
-// /**
-// * 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
-// */
-// public synchronized void shuttleInExecute() {
-// try {
-// List<WrkMast> wrkMasts = wrkMastMapper.selectInStep4();
-// for (WrkMast wrkMast : wrkMasts) {
-// //鑾峰彇婧愮珯
-// BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo());
-// if (sourceBasDevp == null) {
-// continue;//绔欑偣涓嶅瓨鍦�
-// }
-//
-// //鑾峰彇鐩爣绔�
-// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(sourceBasDevp.getLiftNo(), Utils.getLev(wrkMast.getLocNo()));
-// if (liftStaProtocol == null) {
-// continue;//绔欑偣涓嶅瓨鍦�
-// }
-//
-// // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢锛岃嚜鍔ㄣ�佺┖闂层�佹湁鐗�
-// if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) {
-// News.info("{}浠诲姟锛岃緭閫佺珯鐐圭姸鎬佷笉婊¤冻鍏ュ簱銆傝緭閫佺珯鐐�:{}", wrkMast.getWrkNo(), JSON.toJSONString(liftStaProtocol));
-// continue;
-// }
-//
-// boolean step1 = this.shuttleInExecuteStep1(wrkMast, liftStaProtocol);//灏忚溅鎼叆搴撲腑
-// if (!step1) {
-// continue;
-// }
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-// }
+ /**
+ * 鍏ュ簱-灏忚溅鎼叆搴撲腑
+ * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+ * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+ */
+ public synchronized boolean shuttleInExecuteStep1(WrkMast wrkMast) {
+ if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) {
+ //鑾峰彇鐩爣绔�
+ ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+ if (liftSta == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
+ return false;
+ }
-// /**
-// * 鍏ュ簱-灏忚溅鎼叆搴撲腑
-// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-// */
-// public boolean shuttleInExecuteStep1(WrkMast wrkMast, LiftStaProtocol liftStaProtocol) {
-// if (wrkMast.getWrkSts() == 4) {
-// if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
-// boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
-// News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
-// return false;
-// }
-//
-// //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-// ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-// if (shuttleThread == null) {
-// return false;
-// }
-// ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
-// if (shuttleProtocol == null) {
-// return false;
-// }
-// if (!shuttleThread.isIdle()) {
-// News.info("{}浠诲姟锛寋}灏忚溅蹇欑涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-// return false;
-// }
-//// //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
-//// if (shuttleProtocol.getToken() != 0) {
-//// News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-//// return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
-//// }
-//
-// //鍒ゆ柇灏忚溅鏄惁瀛樺湪绉诲姩浠诲姟
-// WrkMast hasMoveWorking = wrkMastMapper.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
-// if (hasMoveWorking != null) {
-// News.info("{}浠诲姟锛寋}灏忚溅锛屽瓨鍦ㄧЩ鍔ㄤ换鍔★紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-// return false;//瀛樺湪绉诲姩浠诲姟锛岀姝㈡墽琛屽叆搴撲换鍔�
-// }
-//
-// //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣�
-// if (!shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) {
-// //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
-// shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
-// News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-// return false;
-// }
-//
-// //灏忚溅宸叉姷杈捐緭閫佺珯鐐逛綅缃紝杩涜鎼繍璐х墿
-// ShuttleOperaResult result = ShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo());
-// if (result == null) {//璺緞璁$畻澶辫触
-// News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-// return false;
-// }
-//
-// //鍒涘缓鍒嗛厤鍛戒护
-// ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-// assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-// assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
-// assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id);//鍏ュ簱妯″紡
-// assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-// assignCommand.setCommands(result.getCommands());//杩愯鍛戒护
-// assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣
-//
-// wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓�
-// wrkMast.setModiTime(new Date());
-//// shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝
-// if (wrkMastMapper.updateById(wrkMast) > 0) {
-// //涓嬪彂浠诲姟
-// MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-// }
-//
-// return false;
-// }
-// return true;
-// }
+ if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
+ boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
+ return false;
+ }
-// /**
-// * 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
-// */
-// public synchronized void shuttleOutExecute() {
-// try {
-// for (WrkMast wrkMast : wrkMastMapper.selectBy2125()) {
-// boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
-// if (!step1) {
-// continue;
-// }
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-// }
-//
-// /**
-// * 鍑哄簱-灏忚溅鎼嚭搴撲腑
-// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-// */
-// public boolean shuttleOutExecuteStep1(WrkMast wrkMast) {
-// //21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
-// if (wrkMast.getWrkSts() == 21) {
-// EntityWrapper<StaDesc> wrapper = new EntityWrapper<>();
-// wrapper.eq("type_no", wrkMast.getIoType());//璺緞绫诲瀷
-// wrapper.eq("stn_no", wrkMast.getStaNo());//鍑哄簱绔欑偣缂栧彿
-// StaDesc staDesc = staDescService.selectOne(wrapper);
-// if (staDesc == null) {
-// News.info("{}浠诲姟锛屽嚭搴撹矾寰勪笉瀛樺湪", wrkMast.getWrkNo());
-// return false;//鍑哄簱璺緞涓嶅瓨鍦�
-// }
-//
-// //鑾峰彇鍑哄簱绔欑偣
-// BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo());
-// if (basDevp == null) {
-// return false;//鍑哄簱绔欑偣涓嶅瓨鍦�
-// }
-//
-//// if (!basDevp.getAutoing().equals("Y")) {
-//// News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鏄嚜鍔ㄧ姸鎬�",wrkMast.getWrkNo(),basDevp.getDevNo());
-//// return false;//涓嶆槸鑷姩鐘舵��
-//// }
-////
-//// if (!basDevp.getOutEnable().equals("Y")) {
-//// News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), basDevp.getDevNo());
-//// return false;//鍑哄簱绔欑偣涓嶅彲鍑�
-//// }
-//
-// Integer liftNo = basDevp.getLiftNo();//鎼滅储鍑哄簱鎻愬崌鏈烘槸鍚﹀瓨鍦ㄥ叆搴撲换鍔★紝濡傚瓨鍦ㄧ姝㈠嚭搴�
-// List<WrkMast> liftWrkMasts = wrkMastMapper.selectInWrkMastByLiftNo(liftNo);
-// if (!liftWrkMasts.isEmpty()) {
-// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽瓨鍦ㄥ叆搴撲换鍔★紝绯荤粺绂佹鍑哄簱", wrkMast.getWrkNo(), liftNo);
-// return false;//瀛樺湪鍏ュ簱浠诲姟锛岀姝㈠嚭搴�
-// }
-//
-// //鍚屽簱浣嶇粍鏍¢獙
-// List<String> outerLoc = Utils.getGroupOuterLoc(wrkMast.getSourceLocNo());
-// List<LocMast> outerLocMasts = locMastService.selectNotEmptyLocNos(outerLoc);
-// if (!outerLocMasts.isEmpty()) {
-// News.info("{}浠诲姟锛屾祬搴撲綅瀛樺湪璐х墿锛岀郴缁熺瓑寰呬腑", wrkMast.getWrkNo());
-// return false;//娴呭簱浣嶅瓨鍦ㄦ湭鎵ц浠诲姟
-// }
-//
-// //鑾峰彇婧愮珯
-// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo()));
-// if (liftStaProtocol == null) {
-// return false;//鎵句笉鍒扮珯鐐�
-// }
-//
-// if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && !liftStaProtocol.getHasTray())) {
-// News.info("{}浠诲姟锛寋}鍐呴儴杈撻�佺珯锛屼笉婊¤冻鑷姩銆佺┖闂层�佹棤鎵樼洏鐘舵��", wrkMast.getWrkNo(), liftStaProtocol.getStaNo());
-// return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹病鏈夋墭鐩�
-// }
-//
-// if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
-// //寮哄埗棰勭暀涓�鍙板皬杞︾粰鍏ュ簱浠诲姟
-// int lev = Utils.getLev(wrkMast.getSourceLocNo());
-// //鑾峰彇褰撳墠妤煎眰鏈夊嚑鍙板彲鐢ㄥ皬杞�
-// int shuttleCount = shuttleDispatchUtils.getShuttleCountByLev(lev);
-// if (shuttleCount >= 2) {//鍙湁鍙敤灏忚溅鏁伴噺澶т簬2锛屾墠杩涜鍏ュ簱浠诲姟棰勭暀灏忚溅
-// int shuttleWrkInObligateCount = 1;//棰勭暀灏忚溅鏁伴噺
-// Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleWrkInObligateCount").eq("status", 1));
-// if (config != null) {
-// shuttleWrkInObligateCount = Integer.parseInt(config.getValue());
-// }
-// //鍙敤鍑哄簱灏忚溅鏁伴噺(缁欏叆搴撲换鍔¢鐣欎竴鍙拌溅)
-// int useShuttleCount = shuttleCount - shuttleWrkInObligateCount;
-// //鏌ヨ妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟鏁伴噺
-// List<WrkMast> wrkMasts = wrkMastService.selectShuttleOutWrkByLev(lev);
-// if (wrkMasts.size() >= useShuttleCount) {
-// News.info("{}浠诲姟锛屽綋鍓嶆ゼ灞傚彲鐢ㄥ皬杞}鍙帮紝鍑哄簱浠诲姟宸插垎閰峽}鍙帮紝绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size());
-// return false;
-// }
-// }
-// boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
-// News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
-// return false;
-// }
-//
-// //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-// NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-// if (shuttleThread == null) {
-// return false;
-// }
-// NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-// if (shuttleProtocol == null) {
-// return false;
-// }
-// if (!shuttleProtocol.isIdle()) {
-// News.info("{}浠诲姟锛寋}灏忚溅锛屽繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-// return false;
-// }
-// //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
-// if (shuttleProtocol.getToken() != 0) {
-// News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-// return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
-// }
-//
-// //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅
-// if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
-// //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
-// shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
-// News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-// return false;
-// }
-//
-// //灏忚溅宸叉姷杈捐揣鐗╀綅缃紝杩涜鎼繍璐х墿
-// ShuttleOperaResult result = ShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), liftStaProtocol.getLocNo());//灏嗚揣鐗╂惉杩愯嚦鎻愬崌鏈鸿緭閫佺珯鐐�
-// if (result == null) {//鍑哄簱璺緞璁$畻澶辫触
-// News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-// return false;
-// }
-//
-// //鍒涘缓鍒嗛厤鍛戒护
-// ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-// assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-// assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
-// assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());//鍑哄簱妯″紡
-// assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-// assignCommand.setCommands(result.getCommands());//杩愯鍛戒护
-// assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣
-//
-// wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
-// wrkMast.setModiTime(new Date());
-// shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝
-// if (wrkMastMapper.updateById(wrkMast) > 0) {
-// //涓嬪彂浠诲姟
-// MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-// }
-// return false;
-// }
-// return true;
-// }
+ //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+ if (shuttleThread == null) {
+ return false;
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null) {
+ return false;
+ }
+ if (!shuttleThread.isIdle()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅蹇欑涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ //鍒ゆ柇灏忚溅鏄惁瀛樺湪绉诲姩浠诲姟
+ WrkMast hasMoveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+ if (hasMoveWorking != null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}鍙峰皬杞︼紝瀛樺湪绉诲姩浠诲姟锛岀姝㈡淳鍙戜换鍔�", wrkMast.getShuttleNo());
+ return false;//瀛樺湪绉诲姩浠诲姟锛岀姝㈡墽琛屽叆搴撲换鍔�
+ }
+
+ //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣�
+ if (!shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) {
+ //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
+ shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+ News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ //妫�娴嬮殰纰嶇墿杞�
+ int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
+ add(shuttleProtocol.getShuttleNo());
+ }}, new ArrayList<>());
+ if (checkObstacle > 0) {
+ News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
+ return false;
+ }
+
+ ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+ assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+ assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
+ assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+ assignCommand.setAuto(true);//鑷姩妯″紡
+
+ //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(liftSta.getLocNo(), wrkMast.getLocNo(), NavigationMapType.getDfxWithDevice(), assignCommand, shuttleThread);
+ if (commands == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true);
+ if (liftCommand == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ List<ShuttleCommand> liftCommand2 = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false);
+ if (liftCommand2 == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇涓嬮檷鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ commands.add(0, liftCommand.get(0));
+ commands.add(liftCommand2.get(0));
+ assignCommand.setCommands(commands);
+
+ wrkMast.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓� 4.鎻愬崌鏈烘惉杩愬畬鎴� ==> 5.灏忚溅鎼繍涓�
+ wrkMast.setModiTime(new Date());
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ if (wrkMastService.updateById(wrkMast)) {
+ //涓嬪彂浠诲姟
+ shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ //瑙﹀彂閫氱煡
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_TRANSPORT);
+ return false;
+ }
+ return false;
+ }
+ return true;
+ }
/**
- * 鍥涘悜绌挎杞︿换鍔″畬鎴�
+ * 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
*/
- public synchronized void shuttleFinished() {
+ public synchronized void shuttleOutExecute() {
try {
- for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
- //鑾峰彇鍥涘悜绌挎杞︿俊鎭�
- ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
- ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
- if (shuttleProtocol == null) {
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .in("wrk_sts"
+ , WrkStsType.NEW_OUTBOUND.sts
+ )
+ .orderBy("io_pri", false)
+ .orderBy("appe_time", true)
+ );
+ for (WrkMast wrkMast : wrkMasts) {
+ boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
+ Thread.sleep(100);
+ if (!step1) {
+ continue;
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 鍑哄簱-灏忚溅鎼嚭搴撲腑
+ * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+ * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+ */
+ public synchronized boolean shuttleOutExecuteStep1(WrkMast wrkMast) {
+ //101.鐢熸垚鍑哄簱浠诲姟 => 102.灏忚溅鎼繍涓�
+ if (wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) {
+ Integer liftNo = wrkMast.getLiftNo();
+ if (liftNo == null) {
+ //閫氳繃杈撻�佺嚎绔欏彿鑾峰彇鎻愬崌鏈哄彿
+ liftNo = ForkLiftUtils.getConveyorBindLiftNo(wrkMast.getStaNo());
+ if (liftNo == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
+ return false;
+ }
+ }
+
+ ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
+ if (forkLiftThread == null) {
+ return false;
+ }
+ ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
+ if (forkLiftProtocol == null) {
+ return false;
+ }
+
+ //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡嚭搴撴ā寮�
+ if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡嚭搴撴ā寮忥紝绂佹鍑哄簱", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //鑾峰彇婧愮珯
+ ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo()));
+ if (liftSta == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
+ return false;
+ }
+
+ if (liftSta.getHasCar()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getSiteId());
+ return false;
+ }
+
+ if (liftSta.getHasTray()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getSiteId());
+ return false;
+ }
+
+ List<WrkMast> shuttleMoveList = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .eq("io_type", 200)
+ );
+ for (WrkMast moveWrkMast : shuttleMoveList) {
+ if(Utils.getLev(moveWrkMast.getLocNo()) != Utils.getLev(wrkMast.getSourceLocNo())) {
continue;
}
- //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭銆佸皬杞﹀浜庣┖闂茬姸鎬�
- if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id //浠诲姟瀹屾垚绛夊緟纭
- && shuttleProtocol.getTaskNo() != 0
- ) {
- //灏嗕换鍔℃。鏍囪涓哄畬鎴�
- WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo());
- if (wrkMast != null) {
- if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE.sts) {
- //302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
- wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);
- } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE.sts) {
- //310.灏忚溅绉诲姩涓� ==> 311.灏忚溅绉诲姩瀹屾垚
- wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
- shuttleThread.setSyncTaskNo(0);
- } else if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) {
- //204.灏忚溅鍏呯數涓� ==> 205.灏忚溅鍏呯數瀹屾垚
- wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts);
- shuttleThread.setSyncTaskNo(0);
- }
-// switch (wrkMast.getWrkSts().intValue()) {
-//// case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
-//// wrkMast.setWrkSts(9L);
-//// shuttleProtocol.setTaskNo(0);
-//// if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-//// //閲婃斁灏忚溅浠ょ墝
-//// shuttleProtocol.setToken(0);
-//// }
-//// break;
-//// case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚
-//// wrkMast.setWrkSts(23L);
-//// shuttleProtocol.setTaskNo(0);
-//// if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-//// //閲婃斁灏忚溅浠ょ墝
-//// shuttleProtocol.setToken(0);
-//// }
-//// break;
-// case 302:
-// wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);
-// break;
-// case WrkStsType.MOVE_SHUTTLE.sts:
-// wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
-// shuttleThread.setSyncTaskNo(0);
-// break;
-// default:
-// }
+ if(Utils.getLev(moveWrkMast.getLocNo()) == Utils.getLev(moveWrkMast.getSourceLocNo())) {
+ continue;
+ }
- if (wrkMastService.updateById(wrkMast)) {
- //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
- shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
- News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
- } else {
- News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
- }
- } else {
- Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo());
- if(object != null){
- ShuttleAssignCommand assignCommand = JSON.parseObject(object.toString(), ShuttleAssignCommand.class);
- if (!assignCommand.getAuto()) {
- //鎵嬪姩妯″紡
- //宸ヤ綔鍙锋竻闆�
- shuttleThread.setTaskNo(0);
- //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
- shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
- News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
- }
- }
+ //瀛樺湪鎹㈠眰浠诲姟锛屽嚭搴撲换鍔℃殏鏃朵笉鎵ц
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽瓨鍦ㄦ崲灞備换鍔★紝鍑哄簱浠诲姟绛夊緟涓�", wrkMast.getWrkNo());
+ return false;
+ }
+
+ boolean checkLocPathIsAvailable = navigateUtils.checkLocPathIsAvailable(wrkMast.getSourceLocNo(), liftSta.getLocNo());
+ if(!checkLocPathIsAvailable) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭璁$畻鍒板彲鎵ц璺緞锛岀瓑寰呬腑", wrkMast.getWrkNo());
+ return false;
+ }
+
+ if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
+ //寮哄埗棰勭暀涓�鍙板皬杞︾粰鍏ュ簱浠诲姟
+ int lev = Utils.getLev(wrkMast.getSourceLocNo());
+ //鑾峰彇褰撳墠妤煎眰鏈夊嚑鍙板彲鐢ㄥ皬杞�
+ int shuttleCount = shuttleDispatchUtils.getShuttleEnableUseCountByLev(lev);
+ if (shuttleCount >= 2) {//鍙湁鍙敤灏忚溅鏁伴噺澶т簬2锛屾墠杩涜鍏ュ簱浠诲姟棰勭暀灏忚溅
+ int shuttleWrkInObligateCount = 1;//棰勭暀灏忚溅鏁伴噺
+ Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleWrkInObligateCount").eq("status", 1));
+ if (config != null) {
+ shuttleWrkInObligateCount = Integer.parseInt(config.getValue());
}
+ //鍙敤鍑哄簱灏忚溅鏁伴噺(缁欏叆搴撲换鍔¢鐣欎竴鍙拌溅)
+ int useShuttleCount = shuttleCount - shuttleWrkInObligateCount;
+ //鏌ヨ妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟鏁伴噺
+ List<WrkMast> wrkMasts = wrkMastService.selectShuttleOutWrkByLev(lev);
+ if (wrkMasts.size() >= useShuttleCount) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽綋鍓嶆ゼ灞傚彲鐢ㄥ皬杞}鍙帮紝鍑哄簱浠诲姟宸插垎閰峽}鍙帮紝绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size());
+ return false;
+ }
+ }
+ boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
+ return false;
+ }
+
+ //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+ if (shuttleThread == null) {
+ return false;
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null) {
+ return false;
+ }
+ if (!shuttleThread.isIdle()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅
+ if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
+ //妫�娴嬮殰纰嶇墿杞�
+ int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getSourceLocNo(), new ArrayList<Integer>() {{
+ add(shuttleProtocol.getShuttleNo());
+ }}, new ArrayList<>());
+ if (checkObstacle > 0) {
+ News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
+ shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ //妫�娴嬫槸鍚﹀瓨鍦ㄧЩ鍔ㄤ换鍔�
+ WrkMast moveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+ if (moveWorking != null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀瓨鍦ㄧЩ鍔ㄤ换鍔�", wrkMast.getWrkNo());
+ return false;
+ }
+
+ ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+ assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+ assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
+ assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+ assignCommand.setAuto(true);//鑷姩妯″紡
+
+ //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), liftSta.getLocNo(), NavigationMapType.getDfxWithDevice(), assignCommand, shuttleThread);
+ if (commands == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true);
+ if (liftCommand == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ List<ShuttleCommand> liftCommand2 = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false);
+ if (liftCommand2 == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇涓嬮檷鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ commands.add(0, liftCommand.get(0));
+ commands.add(liftCommand2.get(0));
+ assignCommand.setCommands(commands);
+
+ wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓� 101.鐢熸垚鍑哄簱浠诲姟 ==> 102.灏忚溅鎼繍涓�
+ wrkMast.setSourceStaNo(liftSta.getSiteId());
+ wrkMast.setModiTime(new Date());
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ if (wrkMastService.updateById(wrkMast)) {
+ //涓嬪彂浠诲姟
+ shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ //瑙﹀彂閫氱煡
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_TRANSPORT);
+ return false;
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 鎵ц绉诲簱浠诲姟
+ */
+ public synchronized void shuttleLocMoveExecute() {
+ try {
+ //鏌ヨ绉诲簱浠诲姟
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .in("wrk_sts", WrkStsType.NEW_LOC_MOVE.sts)
+ .orderBy("io_pri", false)
+ .orderBy("appe_time", true)
+ );
+ for (WrkMast wrkMast : wrkMasts) {
+ boolean stepToTarget = this.shuttleLocMoveExecuteToTarget(wrkMast);//绉诲簱浠诲姟-灏忚溅鍘荤洰鏍囩偣
+ if (!stepToTarget) {
+ continue;
}
}
@@ -907,386 +465,452 @@
}
}
-// /**
-// * 鎻愬崌鏈轰换鍔�
-// */
-// public synchronized void liftIoExecute() {
-// try {
-// for (LiftSlave liftSlave : slaveProperties.getLift()) {
-// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
-// if (liftThread == null) {
-// continue;
-// }
-// LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-// if (liftProtocol == null) {
-// continue;
-// }
-//
-// if (!liftProtocol.isIdle()) {
-// News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftSlave.getId());
-// continue;
-// }
-//
-// //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚﹁鍗犵敤
-// if (liftProtocol.getToken() != 0) {
-// News.info("{}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗�", liftSlave.getId());
-// continue;
-// }
-//
-// //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔�
-// List<WrkMast> wrkMasts = wrkMastMapper.selectLiftStep223103();
-// if (wrkMasts.isEmpty()) {
-// continue;
-// }
-//
-// for (WrkMast wrkMast : wrkMasts) {
-// //鎼滅储鏄惁鏈夊叾浠栦换鍔″崰鐢ㄤ簡鎻愬崌鏈猴紝濡傛灉鍗犵敤鎻愬崌鏈虹殑浠诲姟鍜屽綋鍓嶄换鍔$浉鍚岋紝鍒欒繍琛屾墽琛�
-// WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue());
-// if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) {
-// News.info("{}鍙锋彁鍗囨満锛岃鍏朵粬浠诲姟{}鍗犵敤涓斿拰褰撳墠浠诲姟{}涓嶇浉鍚岋紝绂佹娲惧彂", liftSlave.getId(), wrkMast1.getWrkNo(), wrkMast.getWrkNo());
-// continue;
-// }
-//
-// boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴�
-// if (!stepIn) {
-// continue;
-// }
-//
-// boolean stepOut = this.liftIoExecuteStepOut(wrkMast);//鎻愬崌鏈哄嚭搴�
-// if (!stepOut) {
-// continue;
-// }
-// }
-//
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-// }
-//
-// /**
-// * 鎻愬崌鏈哄叆搴�
-// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-// */
-// private boolean liftIoExecuteStepIn(WrkMast wrkMast) {
-// //--------------------------------------鎻愬崌鏈哄叆搴�-----------------------------------------//
-// Date now = new Date();
-//
-// //2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑
-// if (wrkMast.getWrkSts() == 2) {
-// //鑾峰彇婧愮珯
-// BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo());
-// if (sourceBasDevp == null) {
-// return false;//鎵句笉鍒扮珯鐐�
-// }
-//
-// if (!sourceBasDevp.getInEnable().equals("Y")) {
-// News.info("{}浠诲姟锛寋}婧愮珯锛屾病鏈夊彲鍏ヤ俊鍙�", wrkMast.getWrkNo(), sourceBasDevp.getDevNo());
-// return false;//绔欑偣涓嶅彲鍏�
-// }
-//
-// Integer barcodeId = Utils.getBarcodeIdByStaNo(wrkMast.getSourceStaNo());
-// if (barcodeId == null) {
-// News.info("{}浠诲姟锛寋}婧愮珯锛屾壘涓嶅埌鍙敤鏉$爜鍣↖D", wrkMast.getWrkNo(), sourceBasDevp.getDevNo());
-// return false;//绔欑偣涓嶅彲鍏�
-// }
-//
-// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId);
-// if (barcodeThread == null) {
-// News.info("{}浠诲姟锛寋}婧愮珯锛屾潯鐮佸櫒{}绾跨▼涓虹┖", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId);
-// return false;//绔欑偣涓嶅彲鍏�
-// }
-// String barcode = barcodeThread.getBarcode();
-// if(!Cools.isEmpty(barcode)) {
-// if(!("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode))) {
-// //瀛樺湪鏉$爜鍊硷紝鍒ゆ柇鏄惁鍜屽綋鍓嶅伐浣滄。涓�鑷�
-// if (!barcode.equals(wrkMast.getBarcode())) {
-// News.info("{}浠诲姟,{}绔欑偣锛屾潯鐮佸櫒{}鍊納}涓庡伐浣滄。鏉$爜鍊納}涓嶄竴鑷达紝绯荤粺璺宠繃鎵ц", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId, barcode,wrkMast.getBarcode());
-// return false;//绔欑偣涓嶅彲鍏�
-// }
-// }
-// }else {
-// return false;
-// }
-//
-// //鍒ゆ柇鎻愬崌鏈烘暣涓笁妤兼槸鍚﹂兘澶勪簬鍏ュ簱妯″紡
-// Integer outInModel1 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 1);
-// Integer outInModel2 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 5);
-// Integer outInModel3 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 8);
-// if (outInModel1 == null || outInModel2 == null || outInModel3 == null) {
-// News.info("{}浠诲姟锛屾病鏈夊嚭鍏ュ簱妯″紡", wrkMast.getWrkNo());
-// return false;//涓嶅瓨鍦ㄥ嚭鍏ュ簱妯″紡
-// }
-//
-// if (outInModel1 == 2 || outInModel2 == 2 && outInModel3 == 2) {
-// News.info("{}浠诲姟锛屾湁绔欑偣澶勪簬鍑哄簱妯″紡锛岀姝㈠叆搴�", wrkMast.getWrkNo());
-// return false;//鍙鏈変竴涓浜庡嚭搴撴ā寮忥紝绂佹鍏ュ簱
-// }
-//
-// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, sourceBasDevp.getLiftNo());
-// if (liftThread == null) {
-// return false;
-// }
-// LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-// if (liftProtocol == null) {
-// return false;
-// }
-// if (!liftProtocol.isIdle()) {
-// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-// return false;
-// }
-// //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
-// if (liftProtocol.getToken() != 0) {
-// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-// return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
-// }
-//
-// //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞�
-// if (liftProtocol.getHasCar()) {
-// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呴儴鏈夊皬杞︼紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-// return false;//鏈夊皬杞︼紝绂佹娲惧彂
-// }
-//
-// //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩�
-// if (liftProtocol.getHasTray()) {
-// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呴儴鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-// return false;//鏈夋墭鐩橈紝绂佹娲惧彂
-// }
-//
-// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
-// WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
-// if (liftWrkMast != null) {
-// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽綋鍓嶆彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-// return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
-// }
-//
-// //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿)
-// Integer startSta = Integer.parseInt(sourceBasDevp.getQrCodeValue());
-// //鑾峰彇鎻愬崌鏈虹珯鐐�
-// LiftStaProtocol targetStaProtocol = NyLiftUtils.getLiftStaByLev(liftThread.getSlave().getId(), Utils.getLev(wrkMast.getLocNo()));
-// if (targetStaProtocol == null) {
-// return false;//绔欑偣涓嶅瓨鍦�
-// }
-//
-// if (targetStaProtocol.getHasTray()) {
-// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛寋}绔欑偣锛屾彁鍗囨満绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo(), targetStaProtocol.getStaNo());
-// return false;//鎻愬崌鏈虹珯鐐规湁鎵樼洏锛岀姝㈡淳鍙�
-// }
-//
-// Integer targetSta = targetStaProtocol.getStaNo();
-//
-// //鑾峰彇鎻愬崌鏈哄懡浠�
-// NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo());
-// if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) {
-// //鎷f枡鍐嶅洖搴擄紝閲嶆柊鍒嗛厤璁惧宸ヤ綔鍙�
-// int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿
-// BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(String.valueOf(deviceWrk), liftThread.getSlave().getId());
-// if (basLiftOpt != null) {
-// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛岃澶囧伐浣滃彿鍑虹幇閲嶅鎯呭喌锛岃鑱旂郴鎶�鏈汉鍛樻敮鎸併��", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-// return false;
-// }
-// liftCommand.setTaskNo((short) deviceWrk);
-// }
-// ArrayList<NyLiftCommand> commands = new ArrayList<>();
-// commands.add(liftCommand);
-//
-// //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
-// LiftAssignCommand assignCommand = new LiftAssignCommand();
-// assignCommand.setCommands(commands);
-// assignCommand.setLiftNo(liftProtocol.getLiftNo());
-// assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-// assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue());
-//
-// wrkMast.setWrkSts(3L);//2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑
-// wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙�
-// wrkMast.setModiTime(now);
-// liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
-// if (wrkMastMapper.updateById(wrkMast) > 0) {
-// //涓嬪彂浠诲姟
-// MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
-// }
-//
-// return false;
-// }
-// return true;
-// }
-//
-// /**
-// * 鎻愬崌鏈哄嚭搴�
-// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
-// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
-// */
-// private boolean liftIoExecuteStepOut(WrkMast wrkMast) {
-// //--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------//
-// Date now = new Date();
-//
-// //23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑
-// if (wrkMast.getWrkSts() == 23) {
-// NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-// if (shuttleThread == null) {
-// return false;
-// }
-//
-// //鑾峰彇鍑哄簱绔欑偣(鐩爣绔�)
-// BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo());
-// if (basDevp == null) {
-// News.info("{}浠诲姟锛屽嚭搴撶珯鐐逛笉瀛樺湪锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
-// return false;//鍑哄簱绔欑偣涓嶅瓨鍦�
-// }
-//
-// //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿)
-// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo()));
-// if (liftStaProtocol == null) {
-// News.info("{}浠诲姟锛屾壘涓嶅埌绔欑偣锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
-// return false;//鎵句笉鍒扮珯鐐�
-// }
-// Integer startSta = liftStaProtocol.getStaNo();
-//
-// NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-// if (shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) {
-// //灏忚溅杩樺湪杈撻�佺珯鐐�
-// //璋冨害灏忚溅閬胯
-// boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread);
-// if (!result) {
-// News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-// return false;
-// }
-// }
-//
-// if (!basDevp.getAutoing().equals("Y")) {
-// News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夎嚜鍔ㄤ俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo());
-// return false;//鍑哄簱绔欑偣涓嶅彲鍑�
-// }
-//
-// if (basDevp.getLoading().equals("Y")) {
-// News.info("{}浠诲姟锛寋}绔欑偣锛屽瓨鍦ㄦ湁鐗╀俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo());
-// return false;//鍑哄簱绔欑偣涓嶅彲鍑�
-// }
-//
-// if (!basDevp.getOutEnable().equals("Y")) {
-// News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo());
-// return false;//鍑哄簱绔欑偣涓嶅彲鍑�
-// }
-//
-// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basDevp.getLiftNo());
-// if (liftThread == null) {
-// return false;
-// }
-// LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-// if (liftProtocol == null) {
-// return false;
-// }
-//
-// if (!liftProtocol.isIdle()) {
-// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-// return false;
-// }
-// //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
-// if (liftProtocol.getToken() != 0) {
-// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-// return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
-// }
-// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
-// WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
-// if (liftWrkMast != null) {
-// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽綋鍓嶆彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
-// return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
-// }
-//
-// //鑾风洰鏍囩珯婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐�
-// BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getStaNo());
-// if (targetBasDevp == null) {
-// News.info("{}浠诲姟锛寋}绔欑偣锛岀珯鐐逛笉瀛樺湪锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), wrkMast.getStaNo());
-// return false;//绔欑偣涓嶅瓨鍦�
-// }
-// //鑾峰彇鐗涚溂鎻愬崌鏈虹珯鐐圭紪鍙�(鐩爣缂栧彿)
-// Integer targetSta = Integer.parseInt(targetBasDevp.getQrCodeValue());
-//
-// //鑾峰彇鎻愬崌鏈哄懡浠�
-// NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftThread.getSlave().getId(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo());
-//
-// ArrayList<NyLiftCommand> commands = new ArrayList<>();
-// commands.add(liftCommand);
-//
-// //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
-// LiftAssignCommand assignCommand = new LiftAssignCommand();
-// assignCommand.setCommands(commands);
-// assignCommand.setLiftNo(liftProtocol.getLiftNo());
-// assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-// assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue());
-//
-// wrkMast.setWrkSts(24L);//23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑
-// wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙�
-// wrkMast.setModiTime(now);
-// liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
-// if (wrkMastMapper.updateById(wrkMast) > 0) {
-// //涓嬪彂浠诲姟
-// MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
-// }
-//
-// return false;
-// }
-// return true;
-// }
-//
/**
- * 璐у弶鎻愬崌鏈轰换鍔″畬鎴�
+ * 绉诲簱浠诲姟-灏忚溅鍘荤洰鏍囩偣
+ * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+ * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
*/
- public synchronized void forkLiftFinished() {
+ private boolean shuttleLocMoveExecuteToTarget(WrkMast wrkMast) {
+ //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------//
+ Date now = new Date();
+
+ //灏忚溅绉诲姩鑷崇珯鐐� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鎼繍涓�
+ if (wrkMast.getWrkSts() == WrkStsType.NEW_LOC_MOVE.sts) {
+ boolean checkLocPathIsAvailable = navigateUtils.checkLocPathIsAvailable(wrkMast.getSourceLocNo(), wrkMast.getLocNo());
+ if(!checkLocPathIsAvailable) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭璁$畻鍒板彲鎵ц璺緞锛岀瓑寰呬腑", wrkMast.getWrkNo());
+ return false;
+ }
+
+ if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
+ boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣
+ News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
+ return false;
+ }
+
+ //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+ if (shuttleThread == null) {
+ return false;
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null) {
+ return false;
+ }
+
+ if (shuttleProtocol.getCurrentLocNo() == null) {
+ return false;
+ }
+
+ //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅
+ if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
+ //浠诲姟琚伩闅滃彇娑�
+ Object cancelLock = redisUtil.get(RedisKeyType.TRAFFIC_CONTROL_SHUTTLE_OBSTACLE_CANCEL_TASK_LOCK.key + wrkMast.getShuttleNo());
+ if(cancelLock != null) {
+ return false;
+ }
+
+ //灏忚溅鏈埌杈惧彇璐т綅缃�
+ shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞︽湭鍒拌揪鍙栬揣浣嶇疆", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+ return false;
+ }
+
+ //妫�娴嬫槸鍚﹀瓨鍦ㄧЩ鍔ㄤ换鍔�
+ WrkMast moveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+ if (moveWorking != null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀瓨鍦ㄧЩ鍔ㄤ换鍔�", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //妫�娴嬮殰纰嶇墿杞�
+ int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
+ add(shuttleProtocol.getShuttleNo());
+ }}, new ArrayList<>());
+ if (checkObstacle > 0) {
+ News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
+ return false;
+ }
+
+ ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+ assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+ assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
+ assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+ assignCommand.setAuto(true);//鑷姩妯″紡
+ assignCommand.setLocNo(wrkMast.getLocNo());
+
+ //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.DFX), assignCommand, shuttleThread);
+ if (commands == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true);
+ if (liftCommand == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ List<ShuttleCommand> liftCommand2 = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false);
+ if (liftCommand2 == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇涓嬮檷鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ commands.add(0, liftCommand.get(0));
+ commands.add(liftCommand2.get(0));
+ assignCommand.setCommands(commands);
+
+ wrkMast.setWrkSts(WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鎼繍涓�
+ wrkMast.setModiTime(now);
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ if (wrkMastService.updateById(wrkMast)) {
+ //涓嬪彂浠诲姟
+ shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ //瑙﹀彂閫氱煡
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING);
+ return false;
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 鎻愬崌鏈轰换鍔�
+ */
+ public synchronized void liftIoExecute() {
try {
- for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
+ //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔�
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .in("wrk_sts", WrkStsType.NEW_INBOUND.sts, WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts));
+ if (wrkMasts.isEmpty()) {
+ return;
+ }
+
+ for (WrkMast wrkMast : wrkMasts) {
+ boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴�
+ if (!stepIn) {
+ continue;
+ }
+
+ boolean stepOut = this.liftIoExecuteStepOut(wrkMast);//鎻愬崌鏈哄嚭搴�
+ if (!stepOut) {
+ continue;
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 鎻愬崌鏈哄叆搴�
+ * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+ * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+ */
+ private boolean liftIoExecuteStepIn(WrkMast wrkMast) {
+ //--------------------------------------鎻愬崌鏈哄叆搴�-----------------------------------------//
+ Date now = new Date();
+
+ //1.鐢熸垚鍏ュ簱浠诲姟 ==> 3.鎻愬崌鏈烘惉杩愪腑
+ if (wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) {
+ //鑾峰彇鐩爣杈撻�佺珯
+ ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+ if (liftSta == null) {
+ return false;//鎵句笉鍒扮珯鐐�
+ }
+
+ if (liftSta.getHasTray()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏", wrkMast.getWrkNo());
+ return false;
+ }
+
+ if (liftSta.getHasCar()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪灏忚溅", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //妫�娴嬫ゼ灞傛槸鍚︽湁鍙敤绌挎杞�
+ boolean checkLevHasShuttle = Utils.checkLevHasShuttle(liftSta.getLev());
+ if (!checkLevHasShuttle) {
+ if (wrkMast.getShuttleNo() != null) {
+ return false;
+ }
+
+ //鑾峰彇灏忚溅寰呮満浣�
+ String standbyLocNo = Utils.getShuttleStandbyLocNo(liftSta.getLocNo());
+ if (standbyLocNo == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃幏鍙栧皬杞﹀緟鏈轰綅澶辫触", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //璋冨害灏忚溅鍘诲緟鏈轰綅
+ boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), standbyLocNo);
+ if (!dispatchShuttle) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo());
+ return false;
+ }
+ return false;
+ }
+
+ Integer liftNo = wrkMast.getLiftNo();
+ if (liftNo == null) {
+ //鏈垎閰嶆彁鍗囨満
+ Integer staNo = wrkMast.getSourceStaNo();
+ liftNo = LiftUtils.getConveyorBindLiftNo(staNo);
+ if(liftNo == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //鐢宠鎻愬崌鏈鸿祫婧�
+ boolean applyLift = liftAction.applyLift(liftNo, wrkMast.getWrkNo());
+ if(!applyLift) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀敵璇锋彁鍗囨満璧勬簮澶辫触锛岀姝㈠叆搴�", wrkMast.getWrkNo());
+ return false;
+ }
+ return false;
+ }
+
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo);
+ if (liftThread == null) {
+ return false;
+ }
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
+ return false;
+ }
+ if (!liftThread.isIdle()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftSta.getLiftNo());
+ return false;
+ }
+
+ //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡叆搴撴ā寮�
+ if (!liftProtocol.getIOModeType().equals(LiftIoModeType.IN)) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡叆搴撴ā寮忥紝绂佹鍏ュ簱", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //璇锋眰涓婄骇绯荤粺锛屾槸鍚﹀厑璁稿叆搴�
+ boolean inMission = LiftUtils.queryInMission(wrkMast.getSourceStaNo(), liftSta.getLiftNo(), wrkMast.getWmsWrkNo());
+ if (!inMission) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屼笂绾х郴缁熶笉鍏佽鍏ュ簱", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //鑾峰彇鎻愬崌鏈哄懡浠�
+ LiftCommand liftCommand = liftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getLev());
+ ArrayList<LiftCommand> commands = new ArrayList<>();
+ commands.add(liftCommand);
+
+ //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+ LiftAssignCommand assignCommand = new LiftAssignCommand();
+ assignCommand.setCommands(commands);
+ assignCommand.setLiftNo(liftNo);
+ assignCommand.setTaskNo(wrkMast.getWrkNo());
+ assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id);
+
+ wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 1.鐢熸垚鍏ュ簱浠诲姟 ==> 3.鎻愬崌鏈烘惉杩愪腑
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ wrkMast.setModiTime(now);
+ if (wrkMastService.updateById(wrkMast)) {
+ //涓嬪彂浠诲姟
+ liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 鎻愬崌鏈哄嚭搴�
+ * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+ * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+ */
+ private boolean liftIoExecuteStepOut(WrkMast wrkMast) {
+ //--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------//
+ //103.灏忚溅鎼繍瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑
+ if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts) {
+ //鑾峰彇婧愮珯
+ LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
+ if (liftSta == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾壘涓嶅埌绔欑偣锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
+ return false;//鎵句笉鍒扮珯鐐�
+ }
+
+ if(wrkMast.getShuttleNo() != null) {
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+ if (shuttleThread == null) {
+ return false;
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if(shuttleProtocol == null) {
+ return false;
+ }
+
+ if (shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) {
+ //灏忚溅杩樺湪杈撻�佺珯鐐�
+ //鑾峰彇灏忚溅寰呮満浣�
+ String standbyLocNo = Utils.getShuttleStandbyLocNo(liftSta.getLocNo());
+ if (standbyLocNo == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃幏鍙栧皬杞﹀緟鏈轰綅澶辫触", wrkMast.getWrkNo());
+ return false;
+ }
+ //璋冨害灏忚溅鍘诲緟鏈轰綅
+ boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), standbyLocNo, wrkMast.getShuttleNo());
+ if (!dispatchShuttle) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo());
+ return false;
+ }
+ } else {
+ //灏忚溅宸蹭笉鍦ㄨ緭閫佺珯鐐逛綅缃紝閲婃斁灏忚溅
+ wrkMast.setShuttleNo(null);//閲婃斁灏忚溅
+ wrkMast.setModiTime(new Date());
+ wrkMastService.updateById(wrkMast);
+ return false;
+ }
+ return false;
+ }
+
+ if (liftSta.getHasCar()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getSiteId());
+ return false;
+ }
+
+ if (!liftSta.getHasTray()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏃犳墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getSiteId());
+ return false;
+ }
+
+ Integer liftNo = wrkMast.getLiftNo();
+ if (liftNo == null) {
+ //鏈垎閰嶆彁鍗囨満
+ Integer staNo = wrkMast.getStaNo();
+ liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo);
+ if(liftNo == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
+ return false;
+ }
+ //鐢宠鎻愬崌鏈鸿祫婧�
+ boolean applyLift = liftAction.applyLift(liftSta.getLiftNo(), wrkMast.getWrkNo());
+ if(!applyLift) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀敵璇锋彁鍗囨満璧勬簮澶辫触锛岀姝㈡墽琛屽嚭搴�", wrkMast.getWrkNo());
+ return false;
+ }
+ return false;
+ }
+
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo);
+ if (liftThread == null) {
+ return false;
+ }
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
+ return false;
+ }
+ if (!liftThread.isIdle()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftSta.getLiftNo());
+ return false;
+ }
+
+ //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡嚭搴撴ā寮�
+ if (!liftProtocol.getIOModeType().equals(LiftIoModeType.OUT)) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡嚭搴撴ā寮忥紝绂佹鍑哄簱", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //璇锋眰涓婄骇绯荤粺锛屾槸鍚﹀厑璁稿嚭搴�
+ boolean outMission = LiftUtils.queryOutMission(wrkMast.getStaNo());
+ if (!outMission) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屼笂绾х郴缁熶笉鍏佽鍑哄簱", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //鑾峰彇鎻愬崌鏈哄懡浠�
+ LiftCommand liftCommand = liftThread.getPickAndPutCommand(wrkMast.getWrkNo(), liftSta.getLev(), wrkMast.getStaNo());
+ ArrayList<LiftCommand> commands = new ArrayList<>();
+ commands.add(liftCommand);
+
+ //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+ LiftAssignCommand assignCommand = new LiftAssignCommand();
+ assignCommand.setCommands(commands);
+ assignCommand.setLiftNo(liftNo);
+ assignCommand.setTaskNo(wrkMast.getWrkNo());
+ assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id);
+
+ wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 103.鐢熸垚鍏ュ簱浠诲姟 ==> 104.鎻愬崌鏈烘惉杩愪腑
+ wrkMast.setShuttleNo(null);//閲婃斁灏忚溅
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ wrkMast.setModiTime(new Date());
+ if (wrkMastService.updateById(wrkMast)) {
+ //涓嬪彂浠诲姟
+ liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 鎻愬崌鏈轰换鍔″畬鎴�
+ */
+ public synchronized void liftFinished() {
+ try {
+ List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Lift)));
+ for (DeviceConfig device : liftList) {
//鑾峰彇鎻愬崌鏈轰俊鎭�
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId());
- ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
- if (forkLiftProtocol == null) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getDeviceNo());
+ if(liftThread == null) {
+ continue;
+ }
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
continue;
}
//鎻愬崌鏈轰负绛夊緟纭涓旂┖闂�
- if (forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.WAITING.id
- && forkLiftProtocol.getWrkNo() != 0
+ if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id
+ && liftProtocol.getTaskNo() != 0
) {
//灏嗕换鍔℃。鏍囪涓哄畬鎴�
- WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo());
+ WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo());
if (wrkMast != null) {
- switch (wrkMast.getWrkSts().intValue()) {
-// case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴�
-// wrkMast.setWrkSts(4L);
-// wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
-// if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) {
-// //閲婃斁鎻愬崌鏈轰护鐗�
-// liftProtocol.setToken(0);
-// }
-// break;
-// case 24://24.鎻愬崌鏈烘惉杩愪腑 ==> 25.鎻愬崌鏈烘惉杩愬畬鎴�
-// wrkMast.setWrkSts(25L);
-// if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆
-// wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴�
-// } else {
-// if (wrkMast.getMk() == null || !wrkMast.getMk().equals("Y")) {
-// //涓嶉渶瑕佺敤鍒版満姊拌噦锛岀洿鎺ヨ浆29.鍑哄簱瀹屾垚
-// wrkMast.setWrkSts(29L);
-// wrkMast.setShuttleNo(null);//閲婃斁灏忚溅
-// wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
-// wrkMast.setModiTime(new Date());
-// }
-// }
-// break;
- case 306://306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴�
- wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts);
- //璐у弶鎻愬崌鏈洪渶瑕佽烦杩囪縼鍑烘彁鍗囨満娴佺▼
- wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);
- break;
- default:
+ if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN.sts) {
+ //3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴�
+ wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts);
+ wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+ }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_NEARBY_COMPLETE.sts) {
+ //303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴� -- 璋冨害鎻愬崌鏈哄埌灏忚溅灞�
+ } else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_LIFT_RUN.sts) {
+ //304.鎻愬崌鏈烘惉杩愪腑 ==> 109.鍑哄簱瀹屾垚
+ wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts);
+ wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+ } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN.sts) {
+ //306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴�
+ wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts);
+ } else {
+ News.error("鎻愬崌鏈虹‘璁ゅけ璐ワ紝鎻愬崌鏈哄彿={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
+ return;
}
wrkMast.setModiTime(new Date());
if (wrkMastService.updateById(wrkMast)) {
- forkLiftThread.reset();
- News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo());
+ liftThread.reset();
+ News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
} else {
- News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo());
+ News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
+ }
+ }else {
+ boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(liftProtocol.getTaskNo(), WrkIoType.PREVIEW_LIFT_MOVE.id);
+ if (checkPreviewDispatchForkLift) {
+ //灞炰簬鎻愬崌鏈洪璋冨害绉诲姩浠诲姟
+ //鏃犲伐浣滄。鏀拺锛岀洿鎺ョ‘璁ゅ畬鎴�
+ liftThread.setSyncTaskNo(0);
+ liftThread.reset();
+ News.info("宸茬‘璁ゆ彁鍗囨満棰勮皟搴︾Щ鍔ㄤ换鍔°�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
}
}
}
@@ -1313,9 +937,11 @@
*/
private void recShuttleErr() {
Date now = new Date();
- for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
+ List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Shuttle)));
+ for (DeviceConfig device : shuttleList) {
// 鑾峰彇鍥涘悜绌挎杞︿俊鎭�
- ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getDeviceNo());
if (shuttleThread == null) {
continue;
}
@@ -1326,7 +952,7 @@
if (shuttleProtocol.getTaskNo() != 0) {
//鏈変换鍔�
- BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo());
+ BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(device.getDeviceNo(), shuttleProtocol.getTaskNo());
// 鏈夊紓甯�
if (latest == null) {
if (shuttleProtocol.getErrorCode() != null && Integer.parseInt(shuttleProtocol.getErrorCode()) != 0) {
@@ -1344,7 +970,7 @@
null, // 缁撴潫鏃堕棿
wrkMast.getWrkSts(), // 宸ヤ綔鐘舵��
wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨�
- shuttleSlave.getId(), // 鍥涘悜绌挎杞�
+ device.getDeviceNo(), // 鍥涘悜绌挎杞�
null, // plc
wrkMast.getLocNo(), // 鐩爣搴撲綅
wrkMast.getStaNo(), // 鐩爣绔�
@@ -1362,7 +988,7 @@
JSON.toJSONString(shuttleProtocol) // 绯荤粺鐘舵�佹暟鎹�
);
if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
- News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
+ News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", device.getDeviceNo(), errName);
}
}
} else {
@@ -1372,7 +998,7 @@
latest.setUpdateTime(now);
latest.setStatus(2);
if (!basShuttleErrLogService.updateById(latest)) {
- News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
+ News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", device.getDeviceNo(), latest.getId());
}
}
}
@@ -1385,9 +1011,11 @@
*/
private void recLiftErr() {
Date now = new Date();
- for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
+ List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.ForkLift)));
+ for (DeviceConfig device : forkliftList) {
// 鑾峰彇鎻愬崌鏈轰俊鎭�
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId());
+ ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo());
if (forkLiftThread == null) {
continue;
}
@@ -1398,7 +1026,7 @@
if (forkLiftProtocol.getTaskNo() != 0) {
//鏈変换鍔�
- BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(forkLiftSlave.getId(), forkLiftProtocol.getTaskNo());
+ BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(device.getDeviceNo(), forkLiftProtocol.getTaskNo());
// 鏈夊紓甯�
if (latest == null) {
if (forkLiftProtocol.getErrorCode() != null && forkLiftProtocol.getErrorCode() != 0) {
@@ -1417,7 +1045,7 @@
null, // 缁撴潫鏃堕棿
wrkMast.getWrkSts(), // 宸ヤ綔鐘舵��
wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨�
- forkLiftSlave.getId(), // 鎻愬崌鏈�
+ device.getDeviceNo(), // 鎻愬崌鏈�
null, // plc
wrkMast.getLocNo(), // 鐩爣搴撲綅
wrkMast.getStaNo(), // 鐩爣绔�
@@ -1435,7 +1063,7 @@
JSON.toJSONString(forkLiftProtocol) // 绯荤粺鐘舵�佹暟鎹�
);
if (!basLiftErrLogService.insert(basLiftErrLog)) {
- News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", forkLiftSlave.getId(), errName);
+ News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", device.getDeviceNo(), errName);
}
}
} else {
@@ -1445,7 +1073,7 @@
latest.setUpdateTime(now);
latest.setStatus(2);
if (!basLiftErrLogService.updateById(latest)) {
- News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", forkLiftSlave.getId(), latest.getId());
+ News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", device.getDeviceNo(), latest.getId());
}
}
}
@@ -1453,322 +1081,57 @@
}
}
- // -------------------------------------------------------------------------------
-
-// /**
-// * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
-// */
-// public void storeEmptyPlt(){
-// try {
-// for (DevpSlave devp : slaveProperties.getDevp()) {
-// // 閬嶅巻绌烘澘鍏ュ簱鍙�
-// for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
-// // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭�
-// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-// StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
-// if (staProtocol == null) {
-// continue;
-// } else {
-// staProtocol = staProtocol.clone();
-// }
-// // 绔欑偣鏉′欢鍒ゆ柇
-// if (staProtocol.isAutoing()
-// && staProtocol.isLoading()
-// && staProtocol.isInEnable()
-// && staProtocol.isEmptyMk()
-// && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo() >= 9990 || staProtocol.getWorkNo() <= 9999))
-// && staProtocol.isPakMk()) {
-//
-// // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-// String barcode = null;
-// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, emptyInSta.getBarcode());
-// if (barcodeThread != null) {
-// String barcode0 = barcodeThread.getBarcode();
-// if (!Cools.isEmpty(barcode0)) {
-//// News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", emptyInSta.getBarcode(), barcode0);
-// if (!"NG".endsWith(barcode0) && !"NoRead".equals(barcode0) && !"empty".equals(barcode0)) {
-// barcode = barcode0;
-// }
-// }
-// }
-//
-// if (!Cools.isEmpty(barcode)) {
-// WrkMast wrkMast = wrkMastMapper.selectByBarcode(barcode);//鏉$爜瀛樺湪宸ヤ綔妗�
-// if (wrkMast != null) {
-// continue;
-// }
-// }
-//
-// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, emptyInSta.getLed());
-//
-// try {
-// LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-//
-// SearchLocParam param = new SearchLocParam();
-// param.setIoType(10);
-// if (!Cools.isEmpty(barcode)) {
-// param.setBarcode(barcode);
-// }
-// param.setSourceStaNo(emptyInSta.getStaNo());
-//// param.setLocType1(locTypeDto.getLocType1());
-// String response = new HttpHandler.Builder()
-// .setUri(wmsUrl)
-// .setPath("/rpc/pakin/loc/v2")
-// .setJson(JSON.toJSONString(param))
-// .build()
-// .doPost();
-// JSONObject jsonObject = JSON.parseObject(response);
-// Integer code = jsonObject.getInteger("code");
-// if (code.equals(200)) {
-// StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-// barcodeThread.setBarcode("");
-//// // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-//// staProtocol.setWorkNo(dto.getWorkNo().shortValue());
-//// staProtocol.setStaNo(dto.getStaNo().shortValue());
-//// devpThread.setPakMk(staProtocol.getSiteId(), false);
-//// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//// if (!result) {
-//// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-//// }
-// } else {
-// if (ledThread != null) {
-// String errorMsg = jsonObject.getString("msg");
-// if (!Cools.isEmpty(errorMsg)) {
-// MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(3, errorMsg));
-// }
-// }
-// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response);
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-// }
-//
-// }
-//
-//
-// }
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-// }
-
- /**
- * 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
- */
- public void ledExecute() {
-// try {
-// for (LedSlave led : slaveProperties.getLed()) {
-// // 鑾峰彇杈撻�佺嚎plc绾跨▼
-// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-// // 鍛戒护闆嗗悎
-// List<LedCommand> commands = new ArrayList<>();
-// // 宸ヤ綔妗i泦鍚�
-// List<WrkMast> wrkMasts = new ArrayList<>();
-// List<WrkMastLog> wrkMastLogs = new ArrayList<>();
-// for (Integer staNo : led.getStaArr()) {
-// // 鑾峰彇鍙夎溅绔欑偣
-// StaProtocol staProtocol = devpThread.getStation().get(staNo);
-// if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) {
-// continue;
-// } else {
-// staProtocol = staProtocol.clone();
-// }
-// // 鑾峰彇宸ヤ綔妗f暟鎹�
-// WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-// Integer wrkNo = staProtocol.getWorkNo().intValue();
-// Integer ioType = null;
-// String sourceLocNo = null;
-// String locNo = null;
-// Integer wrkStaNo = null;
-// String barcode = null;
-// if (wrkMast == null) {
-// //鏌ヨ鍘嗗彶妗�
-// WrkMastLog wrkMastLog = wrkMastLogMapper.selectLatestByWorkNo(staProtocol.getWorkNo().intValue());
-// if (wrkMastLog == null) {
-// continue;
-// }
-// ioType = wrkMastLog.getIoType();
-// sourceLocNo = wrkMastLog.getSourceLocNo();
-// locNo = wrkMastLog.getLocNo();
-// wrkStaNo = wrkMastLog.getStaNo();
-// barcode = wrkMastLog.getBarcode();
-// wrkMastLogs.add(wrkMastLog);
-// }else {
-// if (wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) {
-// continue;
-// }
-// ioType = wrkMast.getIoType();
-// sourceLocNo = wrkMast.getSourceLocNo();
-// locNo = wrkMast.getLocNo();
-// wrkStaNo = wrkMast.getStaNo();
-// barcode = wrkMast.getBarcode();
-// wrkMasts.add(wrkMast);
-// }
-// // 缁勮鍛戒护
-// LedCommand ledCommand = new LedCommand();
-// ledCommand.setWorkNo(wrkNo);
-// ledCommand.setIoType(ioType);
-// // 鍑哄簱妯″紡
-// switch (ioType) {
-// case 101:
-// ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
-// break;
-// case 103:
-// ledCommand.setTitle("鎷f枡鍑哄簱");
-// break;
-// case 104:
-// ledCommand.setTitle("骞舵澘鍑哄簱");
-// break;
-// case 107:
-// ledCommand.setTitle("鐩樼偣鍑哄簱");
-// break;
-// case 110:
-// ledCommand.setTitle("绌烘澘鍑哄簱");
-// ledCommand.setEmptyMk(true);
-// break;
-// default:
-// News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkNo, ioType);
-// break;
-// }
-// ledCommand.setSourceLocNo(sourceLocNo);
-// ledCommand.setLocNo(locNo);
-// ledCommand.setStaNo(wrkStaNo);
-// ledCommand.setBarcode(barcode);
-// if (ioType != 110 && ioType != 10) {
-// List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo));
-// if (!wrkDetls.isEmpty()) {
-// wrkDetls.forEach(wrkDetl -> {
-// double remainNum = wrkDetl.getStock() - wrkDetl.getAnfme();//鍓╀綑鏁伴噺
-// if (remainNum < 0) {
-// remainNum = 0;
-// }
-// String matnr = wrkDetl.getMatnr();
-// Mat mat = matService.selectByMatnr(wrkDetl.getMatnr());
-// if (mat != null) {
-// if (!mat.getMatnr().equals(mat.getMatnr2())) {
-// matnr += " - " + mat.getMatnr2();
-// }
-// }
-// ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetl.getMaktx(), wrkDetl.getAnfme(), remainNum, wrkDetl.getSpecs(), wrkDetl.getSuppCode(), wrkDetl.getOrderNo()));
-// });
-// }else {
-// List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectLatestByWorkNo(wrkNo, barcode);
-// for (WrkDetlLog wrkDetlLog : wrkDetlLogs) {
-// double remainNum = wrkDetlLog.getStock() - wrkDetlLog.getAnfme();//鍓╀綑鏁伴噺
-// if (remainNum < 0) {
-// remainNum = 0;
-// }
-// String matnr = wrkDetlLog.getMatnr();
-// Mat mat = matService.selectByMatnr(wrkDetlLog.getMatnr());
-// if (mat != null) {
-// if (!mat.getMatnr().equals(mat.getMatnr2())) {
-// matnr += " - " + mat.getMatnr2();
-// }
-// }
-// ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetlLog.getMaktx(), wrkDetlLog.getAnfme(), remainNum, wrkDetlLog.getSpecs(), wrkDetlLog.getSuppCode()));
-// }
-// }
-// commands.add(ledCommand);
-// }
-// Set<Integer> workNos = null;
-// if (!wrkMasts.isEmpty()) {
-// workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
-// }else {
-// workNos = wrkMastLogs.stream().map(WrkMastLog::getWrkNo).collect(Collectors.toSet());
-// }
-// // 鑾峰彇LED绾跨▼
-// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
-// // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
-// if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
-// continue;
-// }
-// // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
-// if (!commands.isEmpty()) {
-// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
-// log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-// continue;
-// } else {
-// ledThread.setLedMk(false);
-// }
-// }
-//
-// try {
-// // 淇敼涓绘。led鏍囪
-// for (WrkMast wrkMast : wrkMasts) {
-// wrkMast.setOveMk("Y");
-// wrkMast.setModiTime(new Date());
-// if (wrkMastMapper.updateById(wrkMast) == 0) {
-// throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
-// }
-// }
-//
-// // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
-// ledThread.setWorkNos(workNos);
-//
-// } catch (Exception e) {
-// e.printStackTrace();
-// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-// }
-//
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
- }
-
- /**
- * 鍏朵粬 ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
- */
- public void ledReset() {
-// try {
-// for (LedSlave led : slaveProperties.getLed()) {
-// // 鑾峰彇杈撻�佺嚎plc绾跨▼
-// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-// // 鍛戒护闆嗗悎
-// boolean reset = true;
-// for (Integer staNo : led.getStaArr()) {
-// // 鑾峰彇鍙夎溅绔欑偣
-// StaProtocol staProtocol = devpThread.getStation().get(staNo);
-// if (staProtocol == null) {
-// continue;
-// }
-// if (staProtocol.isLoading()) {
-// reset = false;
-// break;
-// }
-// }
-// // 鑾峰彇led绾跨▼
-// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
-// // led鏄剧ず榛樿鍐呭
-// if (reset) {
-// ledThread.setLedMk(true);
-// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
-// log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-// }
-// }
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
- }
-
/**
* 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數
*/
public synchronized void loopShuttleCharge() {
try {
- for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+
+ List<BasShuttleCharge> charges = basShuttleChargeService.selectList(new EntityWrapper<BasShuttleCharge>().orderBy("charge_id", true));
+ if (charges.isEmpty()) {
+ return;//鏃犲厖鐢垫々
+ }
+
+ List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Shuttle)));
+ for (DeviceConfig device : shuttleList) {
//鑾峰彇鍥涘悜绌挎杞︾嚎绋�
- ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getDeviceNo());
ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
if (shuttleProtocol == null) {
continue;
}
//鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹�
- if (!shuttleThread.isRequireCharge()) {
+ if (shuttleThread.isRequireCharge().equals(ShuttleRequireChargeType.NONE)) {
+ continue;//鏃犻渶鍏呯數
+ }
+
+ boolean forceCharge = true;
+ if (shuttleThread.isRequireCharge().equals(ShuttleRequireChargeType.SUGGEST_CHARGE)) {
+ BasShuttle basShuttle = basShuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", device.getDeviceNo()));
+ if (basShuttle != null) {
+ Integer suggestChargeLine = basShuttle.getSuggestChargeLine();
+ boolean chargeSuggestResult = Integer.parseInt(shuttleProtocol.getBatteryPower()) < suggestChargeLine;
+ if (chargeSuggestResult) {
+ //妫�娴嬬郴缁熸槸鍚︽湁浠诲姟
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("io_type", 1, 101, 201));
+ if (wrkMasts.isEmpty()) {
+ forceCharge = false;
+ }else {
+ continue;
+ }
+ }
+ }
+ }
+
+ WrkMast wrkMast1 = wrkMastService.selectShuttleWorking(shuttleProtocol.getShuttleNo());
+ if (wrkMast1 != null) {
+ continue;
+ }
+
+ WrkMast wrkMast2 = wrkMastService.selectShuttleHasMoveWorking(shuttleProtocol.getShuttleNo());
+ if (wrkMast2 != null) {
continue;
}
@@ -1779,17 +1142,21 @@
//灏忚溅鎵�鍦ㄦゼ灞�
int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
- ShuttleChargeType shuttleCharge = null;
+ BasShuttleCharge shuttleCharge = null;
//鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗�
- for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
- if (lev != Utils.getLev(chargeType.locNo)) {
+ for (BasShuttleCharge charge : charges) {
+ if (lev != Utils.getLev(charge.getLocNo())) {
continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
}
+ if (charge.getStatus() == 0) {
+ continue;//鍏呯數妗╄绂佺敤
+ }
+
//灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
- if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) {
- shuttleCharge = chargeType;
+ if (wrkMastService.selectChargeWorkingByChargeSta(charge.getChargeId()) == null) {
+ shuttleCharge = charge;
break;
}
}
@@ -1797,17 +1164,22 @@
if (shuttleCharge == null) {
//鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗�
//灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔�
- for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
- if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) {
- //鍒ゆ柇褰撳墠鍏呯數妗╂ゼ灞傛槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
- int chargeLev = Utils.getLev(chargeType.locNo);//鍏呯數妗╂ゼ灞�
- boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞�
- if (checkLevHasShuttle) {
- //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
+ for (BasShuttleCharge charge : charges) {
+ if (wrkMastService.selectChargeWorkingByChargeSta(charge.getChargeId()) == null) {
+ //鍒ゆ柇褰撳墠鍏呯數妗╂槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
+ ArrayList<String> locs = new ArrayList<>();
+ locs.add(charge.getLocNo());
+ Integer checkHasShuttle = Utils.checkGroupLocHasShuttle(locs);
+ if(checkHasShuttle != null) {
+ //褰撳墠鍏呯數妗╂湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
continue;
}
- shuttleCharge = chargeType;
+ if (charge.getStatus() == 0) {
+ continue;//鍏呯數妗╄绂佺敤
+ }
+
+ shuttleCharge = charge;
break;
}
}
@@ -1817,23 +1189,23 @@
continue;
}
- String chargeLocNo = shuttleCharge.locNo;
+ String chargeLocNo = shuttleCharge.getLocNo();
wrkMast = new WrkMast();
- wrkMast.setMk(String.valueOf(shuttleCharge.id));
+ wrkMast.setMk(String.valueOf(shuttleCharge.getChargeId()));
wrkMast.setWrkNo(commonService.getWorkNo(WrkIoType.SHUTTLE_CHARGE.id));
wrkMast.setWrkSts(WrkStsType.NEW_CHARGE.sts);
wrkMast.setIoType(WrkIoType.SHUTTLE_CHARGE.id);//300.鍏呯數
wrkMast.setIoPri((double) 999);
wrkMast.setLocNo(chargeLocNo);
- wrkMast.setShuttleNo(shuttle.getId());
- wrkMast.setMemo("charge");
+ wrkMast.setShuttleNo(device.getDeviceNo());
+ wrkMast.setMemo(forceCharge ? "forceCharge" : "suggestCharge");
wrkMast.setAppeTime(new Date());
if (!wrkMastService.insert(wrkMast)) {
- News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", shuttle.getId());
+ News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", device.getDeviceNo());
continue;
}
- News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", shuttle.getId());
+ News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", device.getDeviceNo());
}
} catch (Exception e) {
e.printStackTrace();
@@ -1846,8 +1218,10 @@
public synchronized void executeShuttleCharge() {
try {
//鏌ヨ灏忚溅鍏呯數浠诲姟
- for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
- WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttle.getId());
+ List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Shuttle)));
+ for (DeviceConfig device : shuttleList) {
+ WrkMast wrkMast = wrkMastService.selectChargeWorking(device.getDeviceNo());
if(wrkMast == null) {
continue;
}
@@ -1896,7 +1270,7 @@
return false;
}
- if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+ if (wrkMast.getLocNo().equals(shuttleProtocol.getCurrentLocNo())) {
//灏忚溅鍦ㄥ厖鐢垫々浣嶇疆
wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts);
wrkMast.setModiTime(new Date());
@@ -1938,7 +1312,7 @@
return false;
}
- if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+ if (!wrkMast.getLocNo().equals(shuttleProtocol.getCurrentLocNo())) {
return false;
}
@@ -1968,13 +1342,13 @@
ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
- assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id);//鍑哄簱妯″紡
+ assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE_ON.id);//鍏呯數寮�
assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, true);
assignCommand.setCommands(commands);//杩愯鍛戒护
- wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_WORKING.sts);
+ wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_START_CHARGING.sts);
wrkMast.setModiTime(new Date());
if (!wrkMastService.updateById(wrkMast)) {
return false;
@@ -1982,6 +1356,8 @@
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_START);//瑙﹀彂閫氱煡
return false;
}
return true;
@@ -1989,7 +1365,7 @@
//灏忚溅鍋滄鍏呯數
private synchronized boolean executeShuttleChargeStepStopCharge(WrkMast wrkMast) {
- if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) {
+ if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_CHARGING.sts) {
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
if (shuttleThread == null) {
return false;
@@ -1999,7 +1375,21 @@
return false;
}
- if (!shuttleThread.isChargingCompleted()) {
+ boolean stopCharge = false;
+ if (wrkMast.getMemo().equals("suggestChargeTaskStop")) {
+ stopCharge = true;
+ }else {
+ if (shuttleThread.isChargingCompleted()) {
+ stopCharge = true;
+ }
+ }
+
+ if (!stopCharge) {
+ return false;
+ }
+
+ Object limitObj = redisUtil.get(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo());
+ if (limitObj != null) {
return false;
}
@@ -2007,7 +1397,7 @@
ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
- assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id);//鍑哄簱妯″紡
+ assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE_OFF.id);//鍏呯數鍏�
assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, false);
@@ -2015,6 +1405,7 @@
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ redisUtil.set(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo(), "limit", 10);
return false;
}
return true;
@@ -2022,7 +1413,7 @@
//灏忚溅绂诲紑鍏呯數妗�
private synchronized boolean executeShuttleChargeStepLeaveCharge(WrkMast wrkMast) {
- if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts) {
+ if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_CHARGING_COMPLETE.sts) {
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
if (shuttleThread == null) {
return false;
@@ -2032,13 +1423,22 @@
return false;
}
- ShuttleChargeType chargeType = ShuttleChargeType.get(Integer.parseInt(wrkMast.getMk()));
- if(chargeType == null) {
+ BasShuttleCharge basShuttleCharge = basShuttleChargeService.selectOne(new EntityWrapper<BasShuttleCharge>().eq("charge_id", wrkMast.getMk()));
+ if(basShuttleCharge == null) {
+ return false;
+ }
+
+ //妫�娴嬮殰纰嶇墿杞�
+ int checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{
+ add(shuttleProtocol.getShuttleNo());
+ }}, new ArrayList<>());
+ if (checkObstacle > 0) {
+ News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
return false;
}
//璋冨害灏忚溅鍘诲緟鏈轰綅
- boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), chargeType.waitLocNo, wrkMast.getShuttleNo());
+ boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), basShuttleCharge.getWaitLocNo(), wrkMast.getShuttleNo());
if (!dispatched) {
return false;
}
@@ -2061,13 +1461,23 @@
//鏌ヨ灏忚溅绉诲簱浠诲姟
List<WrkMast> wrkMasts = wrkMastService.selectShuttleMoveWrk();
for (WrkMast wrkMast : wrkMasts) {
- boolean stepMoveSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐�
- if (!stepMoveSta) {
+ boolean stepMoveNearby = this.shuttleMoveExecuteStepMoveNearby(wrkMast);//灏忚溅绉诲姩鍒拌繎鐐�
+ if (!stepMoveNearby) {
+ continue;
+ }
+
+ boolean stepMoveInLift = this.shuttleMoveExecuteStepMoveInLift(wrkMast);//灏忚溅杩佸叆鎻愬崌鏈轰腑
+ if (!stepMoveInLift) {
continue;
}
boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑
if (!stepLiftMove) {
+ continue;
+ }
+
+ boolean updateShuttleLocation = this.shuttleMoveExecuteStepUpdateShuttleLocation(wrkMast);//鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍�
+ if (!updateShuttleLocation) {
continue;
}
@@ -2083,15 +1493,15 @@
}
/**
- * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮珯鐐�
+ * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒拌繎鐐逛腑
* 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
* ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
*/
- private boolean shuttleMoveExecuteStepMoveSta(WrkMast wrkMast) {
- //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------//
+ private boolean shuttleMoveExecuteStepMoveNearby(WrkMast wrkMast) {
+ //--------------------------------------灏忚溅绉诲姩鍒拌繎鐐逛腑-----------------------------------------//
Date now = new Date();
- //灏忚溅绉诲姩鑷崇珯鐐� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐逛腑
+ //灏忚溅绉诲姩鍒拌繎鐐� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐逛腑
if (wrkMast.getWrkSts() == WrkStsType.NEW_MOVE.sts) {
//鑾峰彇鍥涘悜绌挎杞︾嚎绋�
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
@@ -2105,7 +1515,7 @@
//灏忚溅澶勪簬绌洪棽鐘舵��
if (!shuttleThread.isIdle()) {
- News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;
}
@@ -2120,59 +1530,204 @@
return false;
}
- //鑾峰彇婧愯緭閫佺珯
- ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
- if (liftSta == null) {
- return false;//鎵句笉鍒扮珯鐐�
+ //鎼滅储鏈�杩戜笖鏃犳晠闅滄彁鍗囨満
+ LiftStaProtocol recentLiftStation = liftDispatchUtils.getRecentLiftStation(shuttleProtocol.getShuttleNo(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
+ if(recentLiftStation == null) {
+ News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂茶緭閫佺珯鐐�", shuttleProtocol.getShuttleNo(), wrkMast.getLocNo());
+ return false;
}
- //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
- WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftSta.getLiftNo());
- if (liftWrkMast != null) {
- News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getLiftNo());
- return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+ LiftStaProtocol targetLiftSta = LiftUtils.getLiftStaByLev(recentLiftStation.getLiftNo(), Utils.getLev(wrkMast.getLocNo()));
+ if(targetLiftSta == null) {
+ return false;
+ }
+
+ //璁$畻杩戠偣浣嶇疆
+ String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), recentLiftStation.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1);
+ if (endLocation == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹁繎鐐逛綅缃绠楀け璐�", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //灏忚溅宸插湪杩戠偣浣嶇疆鏃犻渶鍓嶅線
+ if (shuttleProtocol.getCurrentLocNo().equals(endLocation)) {
+ wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY_COMPLETE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴�
+ wrkMast.setSourceStaNo(recentLiftStation.getSiteId());
+ wrkMast.setStaNo(targetLiftSta.getSiteId());
+ wrkMast.setModiTime(now);
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ wrkMastService.updateById(wrkMast);
+ return true;
}
ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+ assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+ assignCommand.setLocNo(endLocation);
assignCommand.setAuto(true);//鑷姩妯″紡
- //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
- List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
+ //鑾峰彇灏忚溅鍒拌繎鐐硅璧板懡浠�
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), endLocation, NavigationMapType.getMapTypes(NavigationMapType.NORMAL, NavigationMapType.SHUTTLE), assignCommand, shuttleThread);
if (commands == null) {
- News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;//璺緞瑙i攣澶辫触
}
assignCommand.setCommands(commands);
-// //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
-// List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
-// if (targetNodes == null) {
-// return false;//鏈幏鍙栧埌鑺傜偣
-// }
-// boolean checkPathIsAvailable = navigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo()));
-// if (!checkPathIsAvailable) {
-// News.info("{}浠诲姟锛寋}灏忚溅锛岀洰鏍囩珯鐐硅矾寰勮鍗犵敤锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-// return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢�
-// }
-// //灏濊瘯閿佸畾鐩爣绔欒矾寰�
-// boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
-// if (!result2) {
-// News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-// return false;//璺緞閿佸畾澶辫触
-// }
-// //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
-
- wrkMast.setWrkSts(WrkStsType.MOVE_SITE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐�
+ wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷宠繎鐐逛腑
+ wrkMast.setSourceStaNo(recentLiftStation.getSiteId());
+ wrkMast.setStaNo(targetLiftSta.getSiteId());
wrkMast.setModiTime(now);
- wrkMast.setLiftNo(liftSta.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈�
-// shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗�
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
if (wrkMastService.updateById(wrkMast)) {
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING);
+ //瑙﹀彂閫氱煡
+ return false;
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 灏忚溅杩佺Щ-灏忚溅杩佸叆鎻愬崌鏈轰腑
+ * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+ * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+ */
+ private boolean shuttleMoveExecuteStepMoveInLift(WrkMast wrkMast) {
+ //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈轰腑-----------------------------------------//
+ Date now = new Date();
+
+ //灏忚溅杩佸叆鎻愬崌鏈� 303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴� ==> 304.灏忚溅杩佸叆鎻愬崌鏈轰腑
+ if (wrkMast.getWrkSts() == WrkStsType.MOVE_NEARBY_COMPLETE.sts) {
+ //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+ if (shuttleThread == null) {
+ return false;
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null) {
+ return false;
+ }
+
+ //灏忚溅澶勪簬绌洪棽鐘舵��
+ if (!shuttleThread.isIdle()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ //鑾峰彇婧愯緭閫佺珯
+ LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
+ if (liftSta == null) {
+ return false;//鎵句笉鍒扮珯鐐�
+ }
+
+ if (liftSta.getHasCar()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄥ皬杞�", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //鑾峰彇鐩爣杈撻�佺珯
+ LiftStaProtocol liftStaTarget = LiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+ if (liftStaTarget == null) {
+ return false;//鎵句笉鍒扮珯鐐�
+ }
+
+ if (liftStaTarget.getHasCar()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪灏忚溅", wrkMast.getWrkNo());
+ return false;
+ }
+
+ if (wrkMast.getLiftNo() == null) {
+ //鐢宠鎻愬崌鏈鸿祫婧�
+ boolean applyLift = liftAction.applyLift(liftSta.getLiftNo(), wrkMast.getWrkNo());
+ if(!applyLift) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀敵璇锋彁鍗囨満璧勬簮澶辫触锛岀姝㈢Щ鍔�", wrkMast.getWrkNo());
+ return false;
+ }
+ return false;
+ }
+
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
+ if (liftThread == null) {
+ return false;
+ }
+
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
+ return false;
+ }
+
+ if (!liftThread.isIdle()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
+ return false;
+ }
+
+ Object object = redisUtil.get(RedisKeyType.LIFT_MOVE_TO_SHUTTLE_LIMIT.key + wrkMast.getWrkNo());
+ int targetLev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
+ if (object == null || liftProtocol.getLev() != targetLev) {
+ //鑾峰彇鎻愬崌鏈哄懡浠�
+ LiftStaProtocol startSta = LiftUtils.getLiftStaByLev(liftProtocol.getLiftNo(), liftProtocol.getLev());
+ LiftStaProtocol targetSta = LiftUtils.getLiftStaByLev(liftProtocol.getLiftNo(), targetLev);
+ if (startSta == null || targetSta == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛岀珯鐐规暟鎹笉瀛樺湪", wrkMast.getWrkNo(), wrkMast.getLiftNo());
+ return false;
+ }
+ LiftCommand liftCommand = liftThread.getMoveCommand(commonService.getWorkNo(WrkIoType.PREVIEW_LIFT_MOVE.id), startSta.getSiteId(), targetSta.getSiteId());
+ ArrayList<LiftCommand> commands = new ArrayList<>();
+ commands.add(liftCommand);
+
+ //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+ LiftAssignCommand assignCommand = new LiftAssignCommand();
+ assignCommand.setCommands(commands);
+ assignCommand.setLiftNo(wrkMast.getLiftNo());
+ assignCommand.setTaskNo(wrkMast.getWrkNo());
+ assignCommand.setTaskMode(LiftTaskModeType.MOVE.id);
+ //涓嬪彂浠诲姟
+ liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満鍦▄}灞傦紝鎻愬崌鏈轰笉鍦ㄥ皬杞﹀眰锛岃皟搴︾Щ鍔ㄤ腑", wrkMast.getWrkNo(), liftProtocol.getLev(), wrkMast.getLiftNo());
+ redisUtil.set(RedisKeyType.LIFT_MOVE_TO_SHUTTLE_LIMIT.key + wrkMast.getWrkNo(), "lift_moving", 60 * 3);
+ redisUtil.set(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo(), "lock", 8);
+ return false;
+ }
+
+ Object limitObj = redisUtil.get(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo());
+ if (limitObj != null) {
+ return false;
+ }
+
+ String liftLocNo = liftThread.getCurrentLocNo();
+
+ ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+ assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+ assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
+ assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+ assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+ assignCommand.setLocNo(liftLocNo);
+ assignCommand.setAuto(true);//鑷姩妯″紡
+
+ //鑾峰彇灏忚溅鍒版彁鍗囨満琛岃蛋鍛戒护
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftLocNo, NavigationMapType.getMapTypes(NavigationMapType.NORMAL), assignCommand, shuttleThread, "inLift");
+ if (commands == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;//璺緞瑙i攣澶辫触
+ }
+
+ assignCommand.setCommands(commands);
+
+ wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT.sts);//303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴� ==> 304.灏忚溅杩佸叆鎻愬崌鏈轰腑
+ wrkMast.setModiTime(now);
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ if (wrkMastService.updateById(wrkMast)) {
+ //涓嬪彂浠诲姟
+ shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING);
+ //瑙﹀彂閫氱煡
return false;
}
return false;
@@ -2189,56 +1744,146 @@
//--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------//
Date now = new Date();
- //鎻愬崌鏈烘惉杩愪腑 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
- if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_COMPLETE.sts) {
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, wrkMast.getLiftNo());
- if (forkLiftThread == null) {
+ //鎻愬崌鏈烘惉杩愪腑 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
+ if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT_COMPLETE.sts) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
+ if (liftThread == null) {
return false;
}
- ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
- if (forkLiftProtocol == null) {
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
return false;
}
- if (!forkLiftThread.isIdle()) {
- News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
+ if (!liftThread.isIdle()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
return false;
- }
- //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
- WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo());
- if (liftWrkMast != null) {
- if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚�
- News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
- return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
- }
}
//鑾峰彇婧愮珯
- ForkLiftStaProtocol sourceLiftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
+ LiftStaProtocol sourceLiftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
//鑾峰彇鐩爣绔�
- ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+ LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
if (sourceLiftSta == null || liftSta == null) {
- News.info("{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
return false;//缂哄皯绔欑偣淇℃伅
}
+ if (liftSta.getHasTray()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
+ return false;//鏈夋墭鐩樿烦杩�
+ }
//鑾峰彇鎻愬崌鏈哄懡浠�
- List<ForkLiftCommand> liftCommands = forkLiftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), liftSta.getLev());
- ArrayList<ForkLiftCommand> commands = new ArrayList<>();
- commands.addAll(liftCommands);
+ LiftCommand liftCommand = liftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getSiteId(), liftSta.getSiteId());
+ ArrayList<LiftCommand> commands = new ArrayList<>();
+ commands.add(liftCommand);
//鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
LiftAssignCommand assignCommand = new LiftAssignCommand();
assignCommand.setCommands(commands);
- assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue());
- assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
- assignCommand.setTaskMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue());
+ assignCommand.setLiftNo(wrkMast.getLiftNo());
+ assignCommand.setTaskNo(wrkMast.getWrkNo());
+ assignCommand.setTaskMode(LiftTaskModeType.SHUTTLE_SWITCH.id);
- wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
+ wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
wrkMast.setModiTime(now);
if (wrkMastService.updateById(wrkMast)) {
//涓嬪彂浠诲姟
- forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+ liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍�
+ * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+ * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+ */
+ private boolean shuttleMoveExecuteStepUpdateShuttleLocation(WrkMast wrkMast) {
+ //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------//
+ Date now = new Date();
+
+ //鎻愬崌鏈烘惉杩愪腑 307.鎻愬崌鏈烘惉杩愬畬鎴� ==> 308.灏忚溅杩佸嚭鎻愬崌鏈轰腑
+ if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts) {
+ //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+ if (shuttleThread == null) {
+ return false;
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null) {
+ return false;
+ }
+
+ //灏忚溅澶勪簬绌洪棽鐘舵��
+ if (!shuttleThread.isIdle()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
+ Object object = redisUtil.get(RedisKeyType.SHUTTLE_UPDATE_LOCATION.key + shuttleProtocol.getShuttleNo());
+ if(object != null) {
+ return false;
+ }
+
+ ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+ assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+ assignCommand.setTaskMode(ShuttleTaskModeType.UPDATE_LOCATION.id);//鏇存柊鍧愭爣
+ assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+ assignCommand.setAuto(true);//鑷姩妯″紡
+ assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+ assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
+
+ //鏇存柊灏忚溅鍧愭爣
+ ShuttleCommand command = shuttleThread.getUpdateLocationCommand(wrkMast.getWrkNo(), wrkMast.getLocNo());
+ ArrayList<ShuttleCommand> commands = new ArrayList<>();
+ commands.add(command);
+
+ assignCommand.setCommands(commands);
+ //涓嬪彂浠诲姟
+ shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ redisUtil.set(RedisKeyType.SHUTTLE_UPDATE_LOCATION.key + shuttleProtocol.getShuttleNo(), "update", 10);
+ return false;
+ }
+
+ //灏忚溅鍑烘彁鍗囨満杩戠偣璺濈
+ int shuttleOutLiftLocationDistance = 2;
+ Config shuttleOutLiftLocationDistanceConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleOutLiftLocationDistance"));
+ if (shuttleOutLiftLocationDistanceConfig != null) {
+ shuttleOutLiftLocationDistance = Integer.parseInt(shuttleOutLiftLocationDistanceConfig.getValue());
+ }
+
+ String targetLocNo = navigateUtils.calcFirstLocation(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, shuttleOutLiftLocationDistance);
+ if (targetLocNo == null) {//鍑烘彁鍗囨満杩戠偣璁$畻澶辫触
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽嚭鎻愬崌鏈鸿繎鐐硅绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;
+ }
+
+ ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+ assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+ assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
+ assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+ assignCommand.setAuto(true);//鑷姩妯″紡
+ assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+ assignCommand.setLocNo(targetLocNo);//鐩爣搴撲綅
+
+ //鑾峰彇灏忚溅鍒拌繎鐐瑰懡浠�
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), targetLocNo, NavigationMapType.getMapTypes(NavigationMapType.NORMAL), assignCommand, shuttleThread);
+ if (commands == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ return false;//璺緞璁$畻澶辫触
+ }
+ assignCommand.setCommands(commands);
+
+ wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT.sts);//灏忚溅杩佸嚭鎻愬崌鏈轰腑
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ wrkMast.setModiTime(now);
+ if (wrkMastService.updateById(wrkMast)) {
+ //涓嬪彂浠诲姟
+ shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
}
}
return true;
@@ -2268,7 +1913,7 @@
//灏忚溅澶勪簬绌洪棽鐘舵��
if (!shuttleThread.isIdle()) {
- News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;
}
@@ -2289,56 +1934,19 @@
assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
- List<ShuttleCommand> commands = null;
- //璺ㄦゼ灞傜Щ鍔ㄤ换鍔�
- if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
-// //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆
-// //鑾峰彇鐩爣绔�
-// LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
-// if (liftSta == null) {
-// return false;//鎵句笉鍒扮珯鐐�
-// }
-//
-// List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo());
-// if (targetNodes == null) {
-// return false;//鏈幏鍙栧埌鑺傜偣
-// }
-//
-// //璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
-// ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
-// for (NavigateNode node : targetNodes) {
-// whiteList.add(new int[]{node.getX(), node.getY()});
-// }
-// commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread, whiteList);
- }else {
- //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
- commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
- }
-
+ //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), assignCommand, shuttleThread);
if (commands == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;//璺緞璁$畻澶辫触
}
assignCommand.setCommands(commands);
-// if (wrkMast.getLiftNo() != null) {
-// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
-// if (liftThread == null) {
-// return false;
-// }
-// LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-// if (liftProtocol == null) {
-// return false;
-// }
-// if (liftProtocol.getToken().equals(shuttleProtocol.getShuttleNo())) {
-// liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗�
-// }
-// }
-
wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
wrkMast.setModiTime(now);
-
if (wrkMastService.updateById(wrkMast)) {
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
@@ -2346,41 +1954,5 @@
}
return true;
}
-
-// //鎵弿璁惧PakMk鏍囪鏄惁瓒呮椂
-// public synchronized void scanDevicePakMk() {
-// try {
-// //鎵弿灏忚溅
-// for (ShuttleSlave slave : slaveProperties.getShuttle()) {
-// NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId());
-// NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-// if (shuttleProtocol == null) {
-// continue;
-// }
-//
-// if ((System.currentTimeMillis() - shuttleProtocol.getSendTime() > (1000 * 60 * 5)) && shuttleProtocol.getPakMk()) {
-// //璁惧瓒呰繃5鍒嗛挓杩樻病澶嶄綅鏍囪
-// shuttleProtocol.setPakMk(false);//澶嶄綅鏍囪
-// }
-// }
-//
-// //鎵弿鎻愬崌鏈�
-// for (LiftSlave slave : slaveProperties.getLift()) {
-// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId());
-// LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-// if (liftProtocol == null) {
-// continue;
-// }
-//
-// if ((System.currentTimeMillis() - liftProtocol.getSendTime() > (1000 * 60 * 5)) && liftProtocol.getPakMk()) {
-// //璁惧瓒呰繃5鍒嗛挓杩樻病澶嶄綅鏍囪
-// liftProtocol.setPakMk(false);//澶嶄綅鏍囪
-// }
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-//
-// }
}
--
Gitblit v1.9.1