From 2d94a387de61c8a5b045266eadbf9806b045230f Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 19 十一月 2025 13:57:16 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 2028 -----------------------------------------------------------
1 files changed, 2 insertions(+), 2,026 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 9a63ebd..3a4b101 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1,2040 +1,16 @@
package com.zy.asrs.service.impl;
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.zy.asrs.domain.enums.NotifyMsgType;
-import com.zy.asrs.entity.*;
-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.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.command.*;
-import com.zy.core.model.protocol.*;
-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.stereotype.Service;
-import java.util.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
/**
* 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
- * Created by vincent on 2020/8/6
*/
@Slf4j
@Service("mainService")
public class MainServiceImpl {
- @Autowired
- private WrkMastService wrkMastService;
- @Autowired
- private BasShuttleErrLogService basShuttleErrLogService;
- @Autowired
- private BasLiftErrLogService basLiftErrLogService;
- @Autowired
- private BasShuttleErrService basShuttleErrService;
- @Autowired
- private BasLiftErrService basLiftErrService;
- @Autowired
- private CommonService commonService;
- @Autowired
- private BasMapService basMapService;
- @Autowired
- private ShuttleDispatchUtils shuttleDispatchUtils;
- @Autowired
- private RedisUtil redisUtil;
- @Autowired
- private ConfigService configService;
- @Autowired
- private NavigateMapData navigateMapData;
- @Autowired
- private NavigateUtils navigateUtils;
- @Autowired
- private ShuttleOperaUtils shuttleOperaUtils;
- @Autowired
- private ShuttleAction shuttleAction;
- @Autowired
- 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 {
-
- 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);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
-
- //瀛樺叆鏁版嵁搴�
- 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 + 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) {
- e.printStackTrace();
- }
- }
-
- /**
- * 鍏ュ簱-灏忚溅鎼叆搴撲腑
- * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
- * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
- */
- public synchronized boolean shuttleInExecuteStep1(WrkMast wrkMast) {
- if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) {
- //鑾峰彇鐩爣绔�
- LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
- if (liftSta == null) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
- return false;
- }
-
- if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
- boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
- 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;
- }
-
- //鍒ゆ柇灏忚溅鏄惁瀛樺湪绉诲姩浠诲姟
- 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 shuttleOutExecute() {
- try {
- 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 = LiftUtils.getConveyorBindLiftNo(wrkMast.getStaNo());
- if (liftNo == null) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
- 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 (!liftProtocol.getIOModeType().equals(LiftIoModeType.OUT)) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡嚭搴撴ā寮忥紝绂佹鍑哄簱", wrkMast.getWrkNo());
- return false;
- }
-
- //鑾峰彇婧愮珯
- LiftStaProtocol liftSta = LiftUtils.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(Utils.getLev(moveWrkMast.getLocNo()) == Utils.getLev(moveWrkMast.getSourceLocNo())) {
- continue;
- }
-
- //瀛樺湪鎹㈠眰浠诲姟锛屽嚭搴撲换鍔℃殏鏃朵笉鎵ц
- 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;
- }
-
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /**
- * 绉诲簱浠诲姟-灏忚溅鍘荤洰鏍囩偣
- * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
- * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
- */
- 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 {
- //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔�
- 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) {
- //鑾峰彇婧愯緭閫佺珯
- LiftStaProtocol sourceLiftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
- if (sourceLiftSta == null) {
- return false;//鎵句笉鍒扮珯鐐�
- }
-
- if (!sourceLiftSta.getHasTray()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欐棤鎵樼洏", wrkMast.getWrkNo());
- return false;
- }
-
- //鑾峰彇鐩爣杈撻�佺珯
- LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
- if (liftSta == null) {
- return false;//鎵句笉鍒扮珯鐐�
- }
-
- if (liftSta.getHasTray()) {
- 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.getSiteId());
- ArrayList<LiftCommand> commands = new ArrayList<>();
- commands.add(liftCommand);
-
- //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
- LiftAssignCommand assignCommand = new LiftAssignCommand();
- assignCommand.setCommands(commands);
- assignCommand.setLiftNo(liftNo);
- assignCommand.setTaskNo(wrkMast.getWrkNo());
- assignCommand.setTaskMode(LiftTaskModeType.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())) {
- //灏忚溅杩樺湪杈撻�佺珯鐐�
- //灏忚溅鍑烘彁鍗囨満杩戠偣璺濈
- 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.getSourceLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, shuttleOutLiftLocationDistance);
- if (targetLocNo == null) {//鍑鸿緭閫佺嚎绔欑偣璁$畻澶辫触
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽嚭杈撻�佺嚎绔欑偣璁$畻澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
- return false;
- }
-
- //璋冨害灏忚溅鍘诲緟鏈轰綅
- boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), targetLocNo, 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.getHasTray()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏃犳墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getSiteId());
- return false;
- }
-
- Integer liftNo = wrkMast.getLiftNo();
- if (liftNo == null) {
- //鏈垎閰嶆彁鍗囨満
- Integer staNo = wrkMast.getStaNo();
- liftNo = LiftUtils.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.getSiteId(), 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(LiftTaskModeType.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) {
- //鑾峰彇鎻愬崌鏈轰俊鎭�
- LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getDeviceNo());
- if(liftThread == null) {
- continue;
- }
- LiftProtocol liftProtocol = liftThread.getStatus();
- if (liftProtocol == null) {
- continue;
- }
-
- if (!liftThread.isDeviceIdle()) {
- continue;
- }
-
- //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂�
- if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id
- && liftProtocol.getTaskNo() != 0
- ) {
- //灏嗕换鍔℃。鏍囪涓哄畬鎴�
- WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo());
- if (wrkMast != null) {
- 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)) {
- liftThread.reset();
- News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
- } else {
- News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
- }
- }else {
- boolean checkPreviewDispatchLift = commonService.checkWorkNoContainMk(liftProtocol.getTaskNo(), WrkIoType.PREVIEW_LIFT_MOVE.id);
- if (checkPreviewDispatchLift) {
- //灞炰簬鎻愬崌鏈洪璋冨害绉诲姩浠诲姟
- //鏃犲伐浣滄。鏀拺锛岀洿鎺ョ‘璁ゅ畬鎴�
- liftThread.setSyncTaskNo(0);
- liftThread.reset();
- News.info("宸茬‘璁ゆ彁鍗囨満棰勮皟搴︾Щ鍔ㄤ换鍔°�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
- }
- }
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /**
- * 寮傚父淇℃伅璁板綍
- */
- public void recErr() {
- try {
- this.recShuttleErr();
- this.recLiftErr();
- } catch (Exception e) {
- News.error("recErr fail", e);
- }
- }
-
- /**
- * 鍥涘悜绌挎杞﹀紓甯镐俊鎭褰�
- */
- private void recShuttleErr() {
- Date now = new Date();
- 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, device.getDeviceNo());
- if (shuttleThread == null) {
- continue;
- }
- ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
- if (shuttleProtocol == null) {
- continue;
- }
-
- if (shuttleProtocol.getTaskNo() != 0) {
- //鏈変换鍔�
- BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(device.getDeviceNo(), shuttleProtocol.getTaskNo());
- // 鏈夊紓甯�
- if (latest == null) {
- if (shuttleProtocol.getErrorCode() != null && Integer.parseInt(shuttleProtocol.getErrorCode()) != 0) {
- WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo());
- if (wrkMast == null) {
- continue;
- }
- int errorCode = Integer.parseInt(shuttleProtocol.getErrorCode());
- BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(errorCode);
- String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
- BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
- null, // 缂栧彿
- wrkMast.getWrkNo(), // 宸ヤ綔鍙�
- now, // 鍙戠敓鏃堕棿
- null, // 缁撴潫鏃堕棿
- wrkMast.getWrkSts(), // 宸ヤ綔鐘舵��
- wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨�
- device.getDeviceNo(), // 鍥涘悜绌挎杞�
- null, // plc
- wrkMast.getLocNo(), // 鐩爣搴撲綅
- wrkMast.getStaNo(), // 鐩爣绔�
- wrkMast.getSourceStaNo(), // 婧愮珯
- wrkMast.getSourceLocNo(), // 婧愬簱浣�
- wrkMast.getBarcode(), // 鏉$爜
- errorCode, // 寮傚父鐮�
- errName, // 寮傚父
- 1, // 寮傚父鎯呭喌
- now, // 娣诲姞鏃堕棿
- null, // 娣诲姞浜哄憳
- now, // 淇敼鏃堕棿
- null, // 淇敼浜哄憳
- "浠诲姟涓紓甯�", // 澶囨敞
- JSON.toJSONString(shuttleProtocol) // 绯荤粺鐘舵�佹暟鎹�
- );
- if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
- News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", device.getDeviceNo(), errName);
- }
- }
- } else {
- // 寮傚父淇
- if (shuttleProtocol.getErrorCode() == null || Integer.parseInt(shuttleProtocol.getErrorCode()) == 0) {
- latest.setEndTime(now);
- latest.setUpdateTime(now);
- latest.setStatus(2);
- if (!basShuttleErrLogService.updateById(latest)) {
- News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", device.getDeviceNo(), latest.getId());
- }
- }
- }
- }
- }
- }
-
- /**
- * 鎻愬崌鏈哄紓甯镐俊鎭褰�
- */
- private void recLiftErr() {
- Date now = new Date();
- List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
- .eq("device_type", String.valueOf(SlaveType.Lift)));
- for (DeviceConfig device : liftList) {
- // 鑾峰彇鎻愬崌鏈轰俊鎭�
- LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getDeviceNo());
- if (liftThread == null) {
- continue;
- }
- LiftProtocol liftProtocol = liftThread.getStatus();
- if (liftProtocol == null) {
- continue;
- }
-
- if (liftProtocol.getTaskNo() != 0) {
- //鏈変换鍔�
- BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(device.getDeviceNo(), liftProtocol.getTaskNo());
- // 鏈夊紓甯�
- if (latest == null) {
- if (liftProtocol.getErrorCode() != null && liftProtocol.getErrorCode() != 0) {
- WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo());
- if (wrkMast == null) {
- continue;
- }
-
- BasLiftErr basLiftErr = basLiftErrService.queryByCode(liftProtocol.getErrorCode());
- String errName = basLiftErr==null? "鏈煡寮傚父":basLiftErr.getErrName();
-
- BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
- null, // 缂栧彿
- wrkMast.getWrkNo(), // 宸ヤ綔鍙�
- now, // 鍙戠敓鏃堕棿
- null, // 缁撴潫鏃堕棿
- wrkMast.getWrkSts(), // 宸ヤ綔鐘舵��
- wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨�
- device.getDeviceNo(), // 鎻愬崌鏈�
- null, // plc
- wrkMast.getLocNo(), // 鐩爣搴撲綅
- wrkMast.getStaNo(), // 鐩爣绔�
- wrkMast.getSourceStaNo(), // 婧愮珯
- wrkMast.getSourceLocNo(), // 婧愬簱浣�
- wrkMast.getBarcode(), // 鏉$爜
- null, // 寮傚父鐮�
- errName, // 寮傚父
- 1, // 寮傚父鎯呭喌
- now, // 娣诲姞鏃堕棿
- null, // 娣诲姞浜哄憳
- now, // 淇敼鏃堕棿
- null, // 淇敼浜哄憳
- "浠诲姟涓紓甯�", // 澶囨敞
- JSON.toJSONString(liftProtocol) // 绯荤粺鐘舵�佹暟鎹�
- );
- if (!basLiftErrLogService.insert(basLiftErrLog)) {
- News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", device.getDeviceNo(), errName);
- }
- }
- } else {
- // 寮傚父淇
- if (liftProtocol.getErrorCode() == null || liftProtocol.getErrorCode() == 0) {
- latest.setEndTime(now);
- latest.setUpdateTime(now);
- latest.setStatus(2);
- if (!basLiftErrLogService.updateById(latest)) {
- News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", device.getDeviceNo(), latest.getId());
- }
- }
- }
- }
- }
- }
-
- /**
- * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數
- */
- public synchronized void loopShuttleCharge() {
- try {
-
- 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, device.getDeviceNo());
- ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
- if (shuttleProtocol == null) {
- continue;
- }
-
- //鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹�
- 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;
- }
-
- WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttleProtocol.getShuttleNo());
- if (wrkMast != null) {//宸叉湁鍏呯數浠诲姟
- continue;
- }
-
- //灏忚溅鎵�鍦ㄦゼ灞�
- int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
- BasShuttleCharge shuttleCharge = null;
-
- //鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗�
- for (BasShuttleCharge charge : charges) {
- if (lev != Utils.getLev(charge.getLocNo())) {
- continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
- }
-
- if (charge.getStatus() == 0) {
- continue;//鍏呯數妗╄绂佺敤
- }
-
- //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
- if (wrkMastService.selectChargeWorkingByChargeSta(charge.getChargeId()) == null) {
- shuttleCharge = charge;
- break;
- }
- }
-
- if (shuttleCharge == null) {
- //鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗�
- //灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔�
- 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;
- }
-
- if (charge.getStatus() == 0) {
- continue;//鍏呯數妗╄绂佺敤
- }
-
- shuttleCharge = charge;
- break;
- }
- }
- }
-
- if (shuttleCharge == null) {
- continue;
- }
-
- String chargeLocNo = shuttleCharge.getLocNo();
- wrkMast = new WrkMast();
- 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(device.getDeviceNo());
- wrkMast.setMemo(forceCharge ? "forceCharge" : "suggestCharge");
- wrkMast.setAppeTime(new Date());
- if (!wrkMastService.insert(wrkMast)) {
- News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", device.getDeviceNo());
- continue;
- }
-
- News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", device.getDeviceNo());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /**
- * 鎵ц鍥涘悜绌挎杞﹀厖鐢典换鍔�
- */
- public synchronized void executeShuttleCharge() {
- try {
- //鏌ヨ灏忚溅鍏呯數浠诲姟
- 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;
- }
-
- boolean result1 = this.executeShuttleChargeStepGoToChargeSta(wrkMast);//灏忚溅绛夊緟鍏呯數妗�
- if (!result1) {
- continue;
- }
-
- boolean result2 = this.executeShuttleChargeStepArrivalChargeSta(wrkMast);//灏忚溅鍒拌揪鍏呯數妗�
- if (!result2) {
- continue;
- }
-
- boolean result3 = this.executeShuttleChargeStepStartCharge(wrkMast);//灏忚溅寮�濮嬪厖鐢�
- if (!result3) {
- continue;
- }
-
- boolean result4 = this.executeShuttleChargeStepStopCharge(wrkMast);//灏忚溅鍋滄鍏呯數
- if (!result4) {
- continue;
- }
-
- boolean result5 = this.executeShuttleChargeStepLeaveCharge(wrkMast);//灏忚溅绂诲紑鍏呯數妗�
- if (!result5) {
- continue;
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /**
- * 灏忚溅鍓嶅線鍏呯數妗�
- */
- private synchronized boolean executeShuttleChargeStepGoToChargeSta(WrkMast wrkMast) {
- if (wrkMast.getWrkSts() == WrkStsType.NEW_CHARGE.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 (wrkMast.getLocNo().equals(shuttleProtocol.getCurrentLocNo())) {
- //灏忚溅鍦ㄥ厖鐢垫々浣嶇疆
- wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts);
- wrkMast.setModiTime(new Date());
- wrkMastService.updateById(wrkMast);
- return false;
- }
-
- //璋冨害灏忚溅鍘诲厖鐢垫々
- boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getLocNo(), wrkMast.getShuttleNo());
- if (!dispatched) {
- return false;
- }
-
- wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN.sts);//灏忚溅鍓嶅線鍏呯數妗�
- wrkMast.setModiTime(new Date());
- wrkMastService.updateById(wrkMast);
- return false;
- }
- return true;
- }
-
- /**
- * 灏忚溅鍒拌揪鍏呯數妗�
- */
- private synchronized boolean executeShuttleChargeStepArrivalChargeSta(WrkMast wrkMast) {
- if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_RUN.sts) {
- ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
- if (shuttleThread == null) {
- return false;
- }
- ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
- if (shuttleProtocol == null) {
- return false;
- }
-
- //鍒ゆ柇鏄惁瀛樺湪鏈畬鎴愮殑绉诲姩浠诲姟
- WrkMast moveWrk = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
- if(moveWrk != null) {
- return false;
- }
-
- if (!wrkMast.getLocNo().equals(shuttleProtocol.getCurrentLocNo())) {
- return false;
- }
-
- //灏忚溅鍦ㄥ厖鐢垫々浣嶇疆
- wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts);//灏忚溅鍒拌揪鍏呯數妗�
- wrkMast.setModiTime(new Date());
- wrkMastService.updateById(wrkMast);
-
- return false;
- }
- return true;
- }
-
- //灏忚溅寮�濮嬪厖鐢�
- private synchronized boolean executeShuttleChargeStepStartCharge(WrkMast wrkMast) {
- if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_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;
- }
-
- //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝厖鐢靛懡浠�
- ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
- assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
- assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
- 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_START_CHARGING.sts);
- wrkMast.setModiTime(new Date());
- if (!wrkMastService.updateById(wrkMast)) {
- return false;
- }
-
- //涓嬪彂浠诲姟
- 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;
- }
-
- //灏忚溅鍋滄鍏呯數
- private synchronized boolean executeShuttleChargeStepStopCharge(WrkMast wrkMast) {
- if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_CHARGING.sts) {
- ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
- if (shuttleThread == null) {
- return false;
- }
- ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
- if (shuttleProtocol == null) {
- return false;
- }
-
- 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;
- }
-
- //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝仠姝㈠厖鐢靛懡浠�
- ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
- assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
- assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
- assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE_OFF.id);//鍏呯數鍏�
- assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-
- List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, false);
- assignCommand.setCommands(commands);//杩愯鍛戒护
-
- //涓嬪彂浠诲姟
- shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
- redisUtil.set(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo(), "limit", 10);
- return false;
- }
- return true;
- }
-
- //灏忚溅绂诲紑鍏呯數妗�
- private synchronized boolean executeShuttleChargeStepLeaveCharge(WrkMast wrkMast) {
- if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_CHARGING_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;
- }
-
- 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(), basShuttleCharge.getWaitLocNo(), wrkMast.getShuttleNo());
- if (!dispatched) {
- return false;
- }
-
- wrkMast.setWrkSts(WrkStsType.COMPLETE_CHARGE.sts);
- wrkMast.setModiTime(new Date());
- if (wrkMastService.updateById(wrkMast)) {
- return false;
- }
- return false;
- }
- return true;
- }
-
- /**
- * 鎵ц灏忚溅绉诲簱浠诲姟
- */
- public synchronized void shuttleMoveExecute() {
- try {
- //鏌ヨ灏忚溅绉诲簱浠诲姟
- List<WrkMast> wrkMasts = wrkMastService.selectShuttleMoveWrk();
- for (WrkMast wrkMast : wrkMasts) {
- 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;
- }
-
- boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑
- if (!stepMoveLoc) {
- continue;
- }
-
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /**
- * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒拌繎鐐逛腑
- * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
- * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
- */
- private boolean shuttleMoveExecuteStepMoveNearby(WrkMast wrkMast) {
- //--------------------------------------灏忚溅绉诲姩鍒拌繎鐐逛腑-----------------------------------------//
- Date now = new Date();
-
- //灏忚溅绉诲姩鍒拌繎鐐� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐逛腑
- if (wrkMast.getWrkSts() == WrkStsType.NEW_MOVE.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(wrkMast.getLocNo()) == Utils.getLev(shuttleProtocol.getCurrentLocNo())) {
- //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛屼笉闇�瑕侀�氳繃鎻愬崌鏈鸿皟搴�
- wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);// 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
- wrkMast.setModiTime(now);
- if (wrkMastService.updateById(wrkMast)) {
- //涓嬪彂浠诲姟
- return true;//鐩存帴杩涘叆309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
- }
- return false;
- }
-
- //鎼滅储鏈�杩戜笖鏃犳晠闅滄彁鍗囨満
- LiftStaProtocol recentLiftStation = liftDispatchUtils.getRecentLiftStation(shuttleProtocol.getShuttleNo(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
- if(recentLiftStation == null) {
- News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂茶緭閫佺珯鐐�", shuttleProtocol.getShuttleNo(), wrkMast.getLocNo());
- 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(), endLocation, NavigationMapType.getMapTypes(NavigationMapType.NORMAL, NavigationMapType.SHUTTLE), assignCommand, shuttleThread);
- if (commands == null) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
- return false;//璺緞瑙i攣澶辫触
- }
-
- assignCommand.setCommands(commands);
-
- wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷宠繎鐐逛腑
- wrkMast.setSourceStaNo(recentLiftStation.getSiteId());
- wrkMast.setStaNo(targetLiftSta.getSiteId());
- 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;
- }
-
- /**
- * 灏忚溅杩佺Щ-灏忚溅杩佸叆鎻愬崌鏈轰腑
- * 濡傞渶涓绘柟娉曟墽琛宑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;
- }
- return true;
- }
-
- /**
- * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愪腑
- * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
- * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
- */
- private boolean shuttleMoveExecuteStepLiftMove(WrkMast wrkMast) {
- //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------//
- Date now = new Date();
-
- //鎻愬崌鏈烘惉杩愪腑 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;
- }
- LiftProtocol liftProtocol = liftThread.getStatus();
- if (liftProtocol == null) {
- return false;
- }
- if (!liftThread.isIdle()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
- return false;
- }
-
- //鑾峰彇婧愮珯
- LiftStaProtocol sourceLiftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
- //鑾峰彇鐩爣绔�
- LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
- if (sourceLiftSta == null || liftSta == null) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
- return false;//缂哄皯绔欑偣淇℃伅
- }
-
- if (liftSta.getHasTray()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
- return false;//鏈夋墭鐩樿烦杩�
- }
-
- //鑾峰彇鎻愬崌鏈哄懡浠�
- 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());
- assignCommand.setTaskNo(wrkMast.getWrkNo());
- assignCommand.setTaskMode(LiftTaskModeType.SHUTTLE_SWITCH.id);
-
- wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
- wrkMast.setSystemMsg("");//娓呯┖娑堟伅
- wrkMast.setModiTime(now);
- if (wrkMastService.updateById(wrkMast)) {
- //涓嬪彂浠诲姟
- 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;
- }
-
- /**
- * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑
- * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
- * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
- */
- private boolean shuttleMoveExecuteStepMoveLoc(WrkMast wrkMast) {
- //--------------------------------------灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑-----------------------------------------//
- Date now = new Date();
-
- //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
- if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT_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 (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
- wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);//311.灏忚溅绉诲姩瀹屾垚
- wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
- wrkMast.setModiTime(now);
- wrkMastService.updateById(wrkMast);
- 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(wrkMast.getLocNo());//鐩爣搴撲綅
-
- //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
- 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);
-
- 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);
- }
- }
- return true;
- }
-
- //鑷姩鍒囨崲鍑哄叆搴撴ā寮�
- public void autoSwitchLiftIOMode() {
- List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
- .eq("device_type", String.valueOf(SlaveType.Lift)));
- for (DeviceConfig device : liftList) {
- Integer liftNo = device.getDeviceNo();
- LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo);
- if (liftThread == null) {
- continue;
- }
- LiftProtocol liftProtocol = liftThread.getStatus();
- if (liftProtocol == null) {
- continue;
- }
-
- List<Integer> liftAllStaNo = LiftUtils.getLiftAllStaNo(liftNo);
- if (liftAllStaNo.isEmpty()) {
- continue;
- }
-
- List<Integer> conveyorBindLiftAllStaNo = LiftUtils.getConveyorBindLiftAllStaNo(liftNo);
- if (conveyorBindLiftAllStaNo.isEmpty()) {
- continue;
- }
-
- //鑾峰彇鍏ュ簱浠诲姟
- List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
- .in("sta_no", liftAllStaNo)
- .in("wrk_sts"
- , WrkStsType.NEW_INBOUND.sts
- , WrkStsType.INBOUND_DEVICE_RUN.sts
- , WrkStsType.INBOUND_LIFT_RUN.sts
- , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts
- , WrkStsType.INBOUND_SHUTTLE_RUN.sts
- , WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts
- ));
-
- //鑾峰彇鍑哄簱浠诲姟
- List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
- .in("sta_no", conveyorBindLiftAllStaNo)
- .in("wrk_sts"
- , WrkStsType.NEW_OUTBOUND.sts
- , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts
- , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts
- , WrkStsType.OUTBOUND_LIFT_RUN.sts
- , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts
- ));
- if (liftProtocol.getIOModeType().equals(LiftIoModeType.NONE)) {
- //鏈煡妯″紡
- if (!inWrkMasts.isEmpty()) {
- liftThread.switchIOMode(LiftIoModeType.IN);
- } else if (!outWrkMasts.isEmpty()) {
- liftThread.switchIOMode(LiftIoModeType.OUT);
- }else {
- liftThread.switchIOMode(LiftIoModeType.IN);
- }
- } else if (liftProtocol.getIOModeType().equals(LiftIoModeType.IN)) {
- //鍏ュ簱妯″紡
- if (inWrkMasts.isEmpty() && !outWrkMasts.isEmpty()) {
- liftThread.switchIOMode(LiftIoModeType.OUT);
- }
- } else if (liftProtocol.getIOModeType().equals(LiftIoModeType.OUT)) {
- //鍑哄簱妯″紡
- if (outWrkMasts.isEmpty() && !inWrkMasts.isEmpty()) {
- liftThread.switchIOMode(LiftIoModeType.IN);
- }
- }
- }
- }
}
--
Gitblit v1.9.1