From 1e16693c0c1dacd3dddd4a9b23988960e85a7b86 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期五, 11 四月 2025 12:57:28 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 5840 ++++++++++++++++++++++++++++++++--------------------------- 1 files changed, 3,170 insertions(+), 2,670 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 0d32709..efe8350 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -4,22 +4,30 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; +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.MapNode; +import com.zy.common.model.NavigateNode; +import com.zy.common.model.SearchLocParam; +import com.zy.common.model.StartupDto; import com.zy.common.model.enums.NavigationMapType; import com.zy.common.service.CommonService; -import com.zy.common.service.erp.ErpService; import com.zy.common.utils.*; -import com.zy.core.DevpThread; import com.zy.core.News; +import com.zy.core.action.LiftAction; +import com.zy.core.action.ShuttleAction; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; +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.command.LiftAssignCommand; +import com.zy.core.model.command.LiftCommand; +import com.zy.core.model.command.ShuttleAssignCommand; +import com.zy.core.model.command.ShuttleCommand; import com.zy.core.model.protocol.*; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.*; @@ -27,12 +35,12 @@ 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 org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.interceptor.TransactionAspectSupport; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; /** * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔� @@ -42,26 +50,10 @@ @Service("mainService") public class MainServiceImpl { - @Value("${wms.url}") - private String wmsUrl; @Autowired private SlaveProperties slaveProperties; @Autowired - private WrkMastMapper wrkMastMapper; - @Autowired private WrkMastService wrkMastService; - @Autowired - private LocMastService locMastService; - @Autowired - private StaDescService staDescService; - @Autowired - private BasDevpService basDevpService; - @Autowired - private BasErrLogService basErrLogService; - @Autowired - private BasSteErrLogService basSteErrLogService; - @Autowired - private BasShuttleService basShuttleService; @Autowired private BasShuttleErrLogService basShuttleErrLogService; @Autowired @@ -69,223 +61,251 @@ @Autowired private BasShuttleErrService basShuttleErrService; @Autowired - private BasCrnErrorMapper basCrnErrorMapper; - @Autowired - private BasSteService basSteService; - @Autowired - private WrkChargeService wrkChargeService; - @Autowired - private BasSteErrService basSteErrService; + private BasLiftErrService basLiftErrService; @Autowired private CommonService commonService; @Autowired - private WrkChargeMapper wrkChargeMapper; - @Autowired private BasMapService basMapService; - @Autowired - private ErpService erpService; - @Autowired - private BasLiftService basLiftService; @Autowired private ShuttleDispatchUtils shuttleDispatchUtils; @Autowired private RedisUtil redisUtil; - @Autowired - private WrkMastLogMapper wrkMastLogMapper; - @Autowired - private BasLiftOptService basLiftOptService; @Autowired private ConfigService configService; @Autowired private NavigateMapUtils navigateMapUtils; @Autowired private NavigateMapData navigateMapData; + @Autowired + private NavigateUtils navigateUtils; + @Autowired + private ShuttleOperaUtils shuttleOperaUtils; + @Autowired + private ShuttleAction shuttleAction; + @Autowired + private NotifyUtils notifyUtils; + @Autowired + private BasShuttleChargeService basShuttleChargeService; + @Autowired + private BasLiftOptService basLiftOptService; + @Autowired + private LiftAction liftAction; + + private boolean isInEnable(DevpThread devpThread, Integer staNo) { + if (staNo == null) { + return false; + } + // 鑾峰彇鍏ュ簱绔欎俊鎭� + switch (staNo) { + case 1011: + case 1012: + devpThread.getStation().get(1012).isInEnable(); + break; + case 1021: + case 1022: + case 1023: + devpThread.getStation().get(1022).isInEnable(); + break; + case 1031: + case 1032: + devpThread.getStation().get(1032).isInEnable(); + break; + case 1025: + case 1026: + devpThread.getStation().get(1025).isInEnable(); + break; + case 1013: + case 1014: + case 1015: + devpThread.getStation().get(1014).isInEnable(); + break; + } + return false; + } + + private boolean isOutEnable(DevpThread devpThread, Integer staNo) { + if (staNo == null) { + return false; + } + // 鑾峰彇鍏ュ簱绔欎俊鎭� + switch (staNo) { + case 1011: + case 1012: + devpThread.getStation().get(1012).isOutEnable(); + break; + case 1021: + case 1022: + case 1023: + devpThread.getStation().get(1022).isOutEnable(); + break; + case 1031: + case 1032: + devpThread.getStation().get(1032).isOutEnable(); + break; + case 1025: + case 1026: + devpThread.getStation().get(1025).isOutEnable(); + break; + case 1013: + case 1014: + case 1015: + devpThread.getStation().get(1014).isOutEnable(); + break; + } + return false; + } /** * 缁勬墭 * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2 */ - public void generateStoreWrkFile() { + public synchronized void generateInboundWrk() { 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(); + DevpSlave devpSlave = slaveProperties.getDevp().get(0); + // 閬嶅巻鍏ュ簱鍙� + for (DevpSlave.Sta inSta : devpSlave.getInSta()) { + // 鑾峰彇鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.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) { + ledThread.error(errMsg); } - Short workNo = staProtocol.getWorkNo(); - // 灏哄妫�娴嬪紓甯� - boolean back = false; - String errMsg = "寮傚父锛�"; - if (staProtocol.isFrontErr()) { - errMsg = errMsg + "鍓嶈秴闄愶紱"; - back = true; + continue; + } + // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 + if (staProtocol.isAutoing() && staProtocol.isLoading() + && isInEnable(devpThread, inSta.getStaNo()) + && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) + && staProtocol.isPakMk() + ) { + String barcode = staProtocol.getBarcode(); + if (!Cools.isEmpty(barcode)) { + News.info("鏉$爜鎵弿鍣ㄦ娴嬫潯鐮佷俊鎭細{}", barcode); } - 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)); + // 鍒ゆ柇閲嶅宸ヤ綔妗� + WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>() + .eq("source_sta_no", inSta.getStaNo()) + .eq("wrk_sts", WrkStsType.NEW_INBOUND) + .eq("barcode", barcode)); + if (wrkMast != null) { + News.error("宸ヤ綔妗e凡瀛樺湪,宸ヤ綔鍙�={}", wrkMast.getWrkNo()); + if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) { + MessageQueue.offer(SlaveType.Devp, devpSlave.getId(), new Task(2, staProtocol)); + devpThread.setPakMk(staProtocol.getSiteId(), false); + News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(wrkMast)); } continue; } - // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 - if (staProtocol.isAutoing() && staProtocol.isLoading() - && staProtocol.isInEnable() - && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) - ) { + try { + String wmsUrl = "127.0.0.1:8080/fyxcwms"; + SearchLocParam param = new SearchLocParam(); + param.setBarcode(barcode); + param.setIoType(1); + param.setSourceStaNo(inSta.getStaNo()); + param.setLocType1(staProtocol.getLocType1().shortValue()); + String response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/rpc/pakin/loc/v1") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + Integer code = jsonObject.getInteger("code"); + if (code.equals(200)) { + MessageQueue.offer(SlaveType.Devp, devpSlave.getId(), new Task(2, staProtocol)); + devpThread.setPakMk(staProtocol.getSiteId(), false); + News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(wrkMast)); - // 鑾峰彇鏉$爜鎵弿浠俊鎭� - 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)); + StartupDto dto = jsonObject.getObject("data", StartupDto.class); - // 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; - } +// String wmsLocNo = dto.getLocNo(); +// int row = Integer.parseInt(wmsLocNo.substring(0, 2)); +// int bay = Integer.parseInt(wmsLocNo.substring(2, 5)); +// int lev = Integer.parseInt(wmsLocNo.substring(5, 7)); +// String wcsLocNo = Utils.getLocNo(row, bay, lev); +// +// CreateInTaskParam createInTaskParam = new CreateInTaskParam(); +// createInTaskParam.setTaskNo(String.valueOf(dto.getWorkNo())); +// createInTaskParam.setDestLoc(wcsLocNo); +// createInTaskParam.setOriginSite(dto.getSourceStaNo().toString()); +// createInTaskParam.setDestSite(dto.getStaNo().toString()); +// createInTaskParam.setPriority(11); +// createInTaskParam.setBarcode(barcode); +// +// R result = openUtils.createInTask(createInTaskParam); +// News.info("鍒涘缓鍏ュ簱浠诲姟锛屼换鍔℃暟鎹�={}锛學MS鍝嶅簲={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject), JSON.toJSON(result)); +// try{ +// String msg = ""; +// HashMap<String, String> hashMap = new HashMap<>(); +// hashMap.put("msg", msg); +// hashMap.put("sta", inSta.getStaNo().toString()); +// new HttpHandler.Builder() +// .setUri(wmsUrl) +// .setPath("/rpc/led/getError") +// .setJson(JSON.toJSONString(hashMap)) +// .build() +// .doPost(); +// }catch (Exception e){ +// +// } } 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() + String msg = jsonObject.getString("msg"); + HashMap<String, String> hashMap = new HashMap<>(); + hashMap.put("msg", msg); + hashMap.put("sta", inSta.getStaNo().toString()); + new HttpHandler.Builder() .setUri(wmsUrl) - .setPath("/rpc/pakin/loc/v2") - .setJson(JSON.toJSONString(param)) + .setPath("/rpc/led/getError") + .setJson(JSON.toJSONString(hashMap)) .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(); + News.error("鍏ュ簱鐢宠澶辫触锛屼换鍔℃暟鎹�={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject)); } + } catch (Exception e) { + e.printStackTrace(); } } } @@ -293,572 +313,106 @@ 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(); - } - } - } - + public synchronized void stnToOutStn() { + DevpSlave devpSlave = slaveProperties.getDevp().get(0); + // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯 + for (DevpSlave.Sta outSta : devpSlave.getOutSta()) { + // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅 + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId()); + StaProtocol staProtocol = devpThread.getStation().get(outSta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); } - } 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(); - } - } - -// /** -// * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱 -// */ -// @Transactional -// public synchronized void stnToCrnStnPick(){ -// 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) { + if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) { + // 鏌ヨ宸ヤ綔妗� +// WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId()); +// if (wrkMast == null) { // continue; +// } +// // 鍒ゆ柇宸ヤ綔妗f潯浠� +// if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) { +// +// } + + // 鍒ゆ柇杈撻�佺嚎鍜屽皬杞︾姸鎬佺姸鎬佺瓑寰呯‘璁� +// if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue()) +// && crnProtocol.statusType == CrnStatusType.WAITING +// && crnProtocol.forkPosType == CrnForkPosType.HOME) { +// log.info("鍫嗗灈鏈哄嚭搴撳畬鎴� - 寮�濮嬫墽琛�"); +// +// // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- +// +// // 涓嬪彂绔欑偣淇℃伅 +// staProtocol.setWorkNo(wrkMast.getWrkNo()); +// staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(), wrkMast.getSourceStaNo())); +// if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) { +// log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂澶辫触"); +// continue; +// } else { +// log.info(staProtocol.getWorkNo() + "," + staProtocol.getStaNo() + "杈撻�佺嚎鍑哄簱鍛戒护涓嬪彂鎴愬姛"); +// } +// +// // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触 +// wrkMast.setWrkSts(14L); +// wrkMast.setCrnEndTime(new Date()); +// if (wrkMastMapper.updateById(wrkMast) != 0) { +// // 澶嶄綅鍫嗗灈鏈� +// log.error("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,{}", wrkMast.getWrkNo()); +// crnThread.setResetFlag(true); +// } else { +// News.error("" + mark + " - 1" + " - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo()); +// } +// // } else { -// staProtocol = staProtocol.clone(); +// News.errorNoLog("" + mark + " - 6" + " - 鍫嗗灈鏈轰俊鎭笉绗﹀悎鍏ュ簱鏉′欢锛侊紒锛�" +// + " 鍫嗗灈鏈虹姸鎬侊細" + crnProtocol.modeType + "==鑷姩AUTO锛�" + CrnModeType.AUTO +// + "銆佸爢鍨涙満浠诲姟鍙凤細" + crnProtocol.getTaskNo() + "==宸ヤ綔妗d换鍔″彿锛�" + wrkMast.getWrkNo().shortValue() +// + "銆佺姸鎬佹灇涓撅細" + crnProtocol.statusType + "==WAITING锛�90 //浠诲姟瀹屾垚绛夊緟WCS纭)锛�" + CrnStatusType.WAITING +// + "銆佽揣鍙変綅缃細" + crnProtocol.forkPosType + "==HOME锛�0 // 璐у弶鍘熶綅锛�" + CrnForkPosType.HOME); // } -// if (staProtocol.isAutoing() -// && staProtocol.isLoading() -//// && (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9999) -//// && staProtocol.getStaNo().equals(staProtocol.getSiteId().shortValue()) -// && staProtocol.isPakMk()){ -// -// // 鑾峰彇鏉$爜鎵弿浠俊鎭� -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); -// if (barcodeThread == null) { -// continue; -// } -// String barcode = barcodeThread.getBarcode(); -// -// WrkMast wrkMast = null; -// wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode); -// if (wrkMast == null) { -// continue; -// } -//// if (staProtocol.getWorkNo() == 9996) { -//// String barcode = barcodeThread.getBarcode(); -//// if(!Cools.isEmpty(barcode)) { -//// News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode); -//// if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { -//// staProtocol.setWorkNo((short) 32002); -//// staProtocol.setStaNo(pickSta.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, pickSta.getLed()); -//// if (ledThread != null) { -//// String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯"; -//// MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg)); -//// } -//// continue; -//// } -//// } else { -//// staProtocol.setWorkNo((short) 32002); -//// staProtocol.setStaNo(pickSta.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, pickSta.getLed()); -//// if (ledThread != null) { -//// String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯"; -//// MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg)); -//// } -//// continue; -//// } -//// wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode); -//// if (null == wrkMast) { -//// News.error("{}鏉$爜閿欒锛屾殏鏃犳嫞鏂欎换鍔★紒", barcode); -//// } -//// } -// -// if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) -// || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) { -// continue; -// } -// -// // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� -// if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { -// throw new CoolException(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); -// } -// -// String sourceLocNo = wrkMast.getSourceLocNo().trim(); -// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(sourceLocNo));//鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯 -// if (liftStaProtocol == null) { -// continue; -// } -// -// // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� -// wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57 -// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 -// wrkMast.setSourceStaNo(pickSta.getStaNo()); // 婧愮珯 -//// wrkMast.setStaNo(dto.getStaNo()); // 鐩爣绔� -//// wrkMast.setCrnNo(dto.getCrnNo()); -// wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔� -// wrkMast.setLocNo(sourceLocNo); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣� -// wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌� -// wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌� -// wrkMast.setModiTime(new Date()); -// if (wrkMastMapper.updateById(wrkMast) == 0) { -// throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); -// } -// if (wrkMastMapper.setSteEmpty(wrkMast.getWrkNo()) == 0) { -// throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); -// } -// -// // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴� -// LocMast locMast = locMastService.selectById(sourceLocNo); -// locMast.setLocSts("Q"); -// locMast.setModiTime(new Date()); -// if (!locMastService.updateById(locMast)) { -// throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�"); -// } -// barcodeThread.setBarcode("");//娓呯悊鏉$爜 -// -//// try { -//// // 璁块棶 WMS 鑾峰彇鍏ュ簱搴撲綅 -//// LocTypeDto locTypeDto = new LocTypeDto(staProtocol); -//// SearchLocParam param = new SearchLocParam(); -//// param.setWrkNo(wrkMast.getWrkNo()); -//// param.setIoType(wrkMast.getIoType()); -//// param.setSourceStaNo(pickSta.getStaNo()); -////// param.setLocType1(locTypeDto.getLocType1()); -//// String response = new HttpHandler.Builder() -//// .setUri(wmsUrl) -//// .setPath("/rpc/pakin/loc/v1") -//// .setJson(JSON.toJSONString(param)) -//// .build() -//// .doPost(); -//// JSONObject jsonObject = JSON.parseObject(response); -//// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); -//// Integer code = jsonObject.getInteger("code"); -//// if (code.equals(200)) { -//// StartupDto dto = jsonObject.getObject("data", StartupDto.class); -//// -////// // 鑾峰彇鐩爣绔� -////// Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() -////// .eq("type_no", wrkMast.getIoType() - 50) -////// .eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯 -////// .eq("crn_no", dto.getCrnNo()); // 鍫嗗灈鏈哄彿 -////// StaDesc staDesc = staDescService.selectOne(wrapper); -////// if (Cools.isEmpty(staDesc)) { -////// News.error("鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); -////// continue; -////// } -////// // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�) -////// Integer staNo = staDesc.getCrnStn(); -//// -//// // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。 -////// if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { -////// throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触"); -////// } -//// // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� -//// if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { -//// throw new CoolException(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); -//// } -//// -//// String sourceLocNo = wrkMast.getSourceLocNo().trim(); -//// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(sourceLocNo));//鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯 -//// if (liftStaProtocol == null) { -//// continue; -//// } -//// -//// // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� -//// wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57 -//// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 -//// wrkMast.setSourceStaNo(pickSta.getStaNo()); // 婧愮珯 -////// wrkMast.setStaNo(dto.getStaNo()); // 鐩爣绔� -////// wrkMast.setCrnNo(dto.getCrnNo()); -//// wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔� -//// wrkMast.setLocNo(sourceLocNo); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣� -//// wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌� -//// wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌� -//// wrkMast.setModiTime(new Date()); -//// if (wrkMastMapper.updateById(wrkMast) == 0) { -//// throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); -//// } -//// if (wrkMastMapper.setSteEmpty(wrkMast.getWrkNo()) == 0) { -//// throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); -//// } -//// -//// // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴� -//// LocMast locMast = locMastService.selectById(sourceLocNo); -//// locMast.setLocSts("Q"); -//// locMast.setModiTime(new Date()); -//// if (!locMastService.updateById(locMast)) { -//// throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�"); -//// } -//// -////// // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 -////// staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); -////// staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); -////// devpThread.setPakMk(staProtocol.getSiteId(), false); -////// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -////// if (!result) { -////// News.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿{}]", devp.getId()); -////// } -//// -//// barcodeThread.setBarcode("");//娓呯悊鏉$爜 -//// -//// } else if (code == 500){ -//// if (ledThread != null) { -//// String errorMsg = jsonObject.getString("msg"); -//// if (!Cools.isEmpty(errorMsg)) { -//// MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg)); -//// } -//// } -//// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); -//// } else { -////// staProtocol.setWorkNo((short) 32002); -////// staProtocol.setStaNo(pickSta.getBackSta().shortValue()); -////// devpThread.setPakMk(staProtocol.getSiteId(), false); -////// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -//// -//// // led 寮傚父鏄剧ず -//// if (ledThread != null) { -//// String errorMsg = jsonObject.getString("msg"); -////// String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒"; -//// MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg)); -//// } -//// } -//// -//// } catch (Exception e) { -//// e.printStackTrace(); -//// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -//// } -// -// } -// } -// -// } -// } + + } + } + } + /** * 鍒濆鍖栧疄鏃跺湴鍥� */ public synchronized void initRealtimeBasMap() { try { - for (int i = 1; i <= 10; 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.getJsonData(lev, -1, 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, JSON.toJSONString(basMap)); } + } } catch (Exception e) { e.printStackTrace(); } - } - - /** - * 浠巖edis涓噸鍚换鍔� - */ - public synchronized void restartTaskFromRedis() { - HashMap<Object, Object> map = redisUtil.getRedis(); - for (Object key : map.keySet()) { - if (key.toString().contains(RedisKeyType.LIFT.key)) {//鎻愬崌鏈轰换鍔� - LiftRedisCommand redisCommand = JSON.parseObject(map.get(key).toString(), LiftRedisCommand.class); - if (redisCommand == null) { - continue; - } - - Short liftNo = redisCommand.getLiftNo(); - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo.intValue()); - if (liftThread == null) { - continue; - } - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); - if (liftProtocol == null) { - continue; - } - if (!liftProtocol.isIdle()) { - continue; - } - - //鎻愬崌鏈哄浜庣┖闂茬姸鎬侊紝杩涜浠诲姟鐨勬仮澶� - liftProtocol.setTaskNo(redisCommand.getWrkNo());//灏嗘彁鍗囨満绾跨▼鍒嗛厤浠诲姟鍙� - liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//宸ヤ綔鐘舵�� - - }else if(key.toString().contains(RedisKeyType.SHUTTLE.key)){//鍥涘悜绌挎杞︿换鍔� - ShuttleRedisCommand redisCommand = JSON.parseObject(map.get(key).toString(), ShuttleRedisCommand.class); - if (redisCommand == null) { - continue; - } - - Short shuttleNo = redisCommand.getShuttleNo(); - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo.intValue()); - if (shuttleThread == null) { - continue; - } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); - if (shuttleProtocol == null) { - continue; - } - if (!shuttleProtocol.isIdle()) { - continue; - } - - //鍥涘悜绌挎杞﹀浜庣┖闂茬姸鎬侊紝杩涜浠诲姟鐨勬仮澶� - shuttleProtocol.setTaskNo(redisCommand.getWrkNo().intValue());//灏嗗洓鍚戠┛姊溅绾跨▼鍒嗛厤浠诲姟鍙� - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);//宸ヤ綔鐘舵�� - } - } - } /** @@ -866,27 +420,12 @@ */ public synchronized void shuttleInExecute() { try { - List<WrkMast> wrkMasts = wrkMastMapper.selectInStep4(); + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .in("wrk_sts" + , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts + )); 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);//灏忚溅鎼叆搴撲腑 + boolean step1 = this.shuttleInExecuteStep1(wrkMast);//灏忚溅鎼叆搴撲腑 if (!step1) { continue; } @@ -896,119 +435,94 @@ } } -// /** -// * 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙� -// */ -// public synchronized void shuttleInExecute() { -// // 鏍规嵁杈撻�佺嚎plc閬嶅巻 -// for (DevpSlave devp : slaveProperties.getDevp()) { -// // 閬嶅巻鍏ュ簱绔� -// for (DevpSlave.StaRack staRack : devp.getRackInStn()) { -// // 鑾峰彇鍏ュ簱绔欎俊鎭� -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); -// StaProtocol staProtocol = devpThread.getStation().get(staRack.getStaNo()); -// if (staProtocol == null) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// Short workNo = staProtocol.getWorkNo(); -// BasDevp basDevp = basDevpService.selectById(staProtocol.getSiteId()); -// if (basDevp == null) { -// continue;//绔欑偣淇℃伅涓嶅瓨鍦� -// } -// -// // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢锛岃嚜鍔ㄣ�佹湁鐗┿�佸洓鍚戠┛姊溅鍙彇淇″彿 -// if (!(staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isShuttleTakeEnable())) { -// continue; -// } -// -// WrkMast wrkMast = wrkMastMapper.selectRackInStep4(workNo, staProtocol.getSiteId()); -// if (wrkMast == null) { -// continue; -// } -// -// boolean step1 = this.shuttleInExecuteStep1(wrkMast, basDevp);//灏忚溅鎼叆搴撲腑 -// if (!step1) { -// continue; -// } -// -// } -// } -// -// } - /** * 鍏ュ簱-灏忚溅鎼叆搴撲腑 * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ - public boolean shuttleInExecuteStep1(WrkMast wrkMast, LiftStaProtocol liftStaProtocol) { - if (wrkMast.getWrkSts() == 4) { + public 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; + } + if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� - boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� - News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); + boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); return false; } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { return false; } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { return false; } - if (!shuttleProtocol.isIdle()) { - News.info("{}浠诲姟锛寋}灏忚溅蹇欑涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + if (!shuttleThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅蹇欑涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; - } - //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻 - if (shuttleProtocol.getToken() != 0) { - News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 } //鍒ゆ柇灏忚溅鏄惁瀛樺湪绉诲姩浠诲姟 - WrkMast hasMoveWorking = wrkMastMapper.selectShuttleHasMoveWorking(wrkMast.getShuttleNo()); + WrkMast hasMoveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo()); if (hasMoveWorking != null) { - News.info("{}浠诲姟锛寋}灏忚溅锛屽瓨鍦ㄧЩ鍔ㄤ换鍔★紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}鍙峰皬杞︼紝瀛樺湪绉诲姩浠诲姟锛岀姝㈡淳鍙戜换鍔�", wrkMast.getShuttleNo()); return false;//瀛樺湪绉诲姩浠诲姟锛岀姝㈡墽琛屽叆搴撲换鍔� } //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣� - if (!shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) { + if (!shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) { //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃� - shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } - //灏忚溅宸叉姷杈捐緭閫佺珯鐐逛綅缃紝杩涜鎼繍璐х墿 - NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo()); - if (result == null) {//璺緞璁$畻澶辫触 - News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + 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.DFX.id, assignCommand, shuttleThread); + if (commands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } - //鍒涘缓鍒嗛厤鍛戒护 - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ簱妯″紡 - 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)); + 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; @@ -1019,7 +533,11 @@ */ public synchronized void shuttleOutExecute() { try { - for (WrkMast wrkMast : wrkMastMapper.selectBy2125()) { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .in("wrk_sts" + , WrkStsType.NEW_OUTBOUND.sts + )); + for (WrkMast wrkMast : wrkMasts) { boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑 if (!step1) { continue; @@ -1036,66 +554,62 @@ * 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;//鍑哄簱璺緞涓嶅瓨鍦� + //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; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftNo); + if (liftWrkMast != null) { + if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftNo); + return false; + } + } + + wrkMast.setLiftNo(liftNo); + wrkMast.setModiTime(new Date()); + wrkMastService.updateById(wrkMast); + return false; } - //鑾峰彇鍑哄簱绔欑偣 - BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo()); - if (basDevp == null) { - 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 (!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;//娴呭簱浣嶅瓨鍦ㄦ湭鎵ц浠诲姟 + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡嚭搴撴ā寮� + if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡嚭搴撴ā寮忥紝绂佹鍑哄簱", wrkMast.getWrkNo()); + return false; } //鑾峰彇婧愮珯 - LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo())); - if (liftStaProtocol == null) { - return false;//鎵句笉鍒扮珯鐐� + ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo())); + if (liftSta == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo()); + return false; } - if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && !liftStaProtocol.getHasTray())) { - News.info("{}浠诲姟锛寋}鍐呴儴杈撻�佺珯锛屼笉婊¤冻鑷姩銆佺┖闂层�佹棤鎵樼洏鐘舵��", wrkMast.getWrkNo(), liftStaProtocol.getStaNo()); - return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹病鏈夋墭鐩� + if (liftSta.getHasCar()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getStaNo()); + return false; } - if (wrkMast.getStaNo() == 300) { - //鍑�300绔欙紝妫�娴�300绔欎换鍔℃暟閲� - List<WrkMast> wrkMasts = wrkMastMapper.select300Wrk(); - if (wrkMasts.size() >= 20) { - News.info("{}浠诲姟锛岃緭閫佺嚎浠诲姟杩囪浇{}", wrkMast.getWrkNo(), wrkMasts.size()); - return false; - } + if (liftSta.getHasTray()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getStaNo()); + return false; } if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� @@ -1114,64 +628,76 @@ //鏌ヨ妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟鏁伴噺 List<WrkMast> wrkMasts = wrkMastService.selectShuttleOutWrkByLev(lev); if (wrkMasts.size() >= useShuttleCount) { - News.info("{}浠诲姟锛屽綋鍓嶆ゼ灞傚彲鐢ㄥ皬杞}鍙帮紝鍑哄簱浠诲姟宸插垎閰峽}鍙帮紝绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽綋鍓嶆ゼ灞傚彲鐢ㄥ皬杞}鍙帮紝鍑哄簱浠诲姟宸插垎閰峽}鍙帮紝绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size()); return false; } } boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� - News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); return false; } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { return false; } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { return false; } - if (!shuttleProtocol.isIdle()) { - News.info("{}浠诲姟锛寋}灏忚溅锛屽繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + if (!shuttleThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽繖纰屼腑", 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()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } - //灏忚溅宸叉姷杈捐揣鐗╀綅缃紝杩涜鎼繍璐х墿 - NyShuttleOperaResult result = NyShuttleOperaUtils.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());//璺緞鑺傜偣 + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 - wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� + //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠� + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), liftSta.getLocNo(), NavigationMapType.DFX.id, 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.getStaNo()); wrkMast.setModiTime(new Date()); - shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝 - if (wrkMastMapper.updateById(wrkMast) > 0) { + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + if (wrkMastService.updateById(wrkMast)) { //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + 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; } @@ -1185,8 +711,8 @@ try { for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { //鑾峰彇鍥涘悜绌挎杞︿俊鎭� - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId()); - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId()); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { continue; } @@ -1194,93 +720,96 @@ //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭銆佸皬杞﹀浜庣┖闂茬姸鎬� if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id //浠诲姟瀹屾垚绛夊緟纭 && shuttleProtocol.getTaskNo() != 0 - && shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id ) { //灏嗕换鍔℃。鏍囪涓哄畬鎴� - WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo()); + WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo()); if (wrkMast != null) { - 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 102://102.灏忚溅绉诲姩鑷崇珯鐐� ==> 103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� - wrkMast.setWrkSts(103L); - break; - case 104://104.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� - wrkMast.setWrkSts(105L); - shuttleProtocol.setTaskNo(0);//娓呯悊宸ヤ綔鍙� - break; - case 108://108.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� - wrkMast.setWrkSts(109L); - break; - case 110://110.灏忚溅绉诲姩涓� ==> 111.灏忚溅绉诲姩瀹屾垚 - wrkMast.setWrkSts(111L); - shuttleProtocol.setTaskNo(0); - if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { - //閲婃斁灏忚溅浠ょ墝 - shuttleProtocol.setToken(0); - } - break; - default: + if (wrkMast.getWrkSts() == WrkStsType.INBOUND_SHUTTLE_RUN.sts) { + //5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚 + wrkMast.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN.sts) { + //102.灏忚溅鎼繍涓� ==> 103.灏忚溅鎼繍瀹屾垚 + wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE.sts) { + //302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT.sts) { + //304.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_COMPLETE.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT.sts) { + //308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� + if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) { + continue;//灏忚溅鏈埌杈剧洰鏍囧眰 + } + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE.sts) { + //310.灏忚溅绉诲姩涓� ==> 311.灏忚溅绉诲姩瀹屾垚 + wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVE_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_TRANSPORT_LIFT.sts) { + //灏忚溅绉诲姩鑷崇珯鐐� ==> 灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE_TRANSPORT_LIFT.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT_TRANSPORT_LIFT.sts) { + //灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_COMPLETE_TRANSPORT_LIFT.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT_TRANSPORT_LIFT.sts) { + //灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE_TRANSPORT_LIFT.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE_TRANSPORT_LIFT.sts) { + //灏忚溅鏀捐揣涓� ==> 灏忚溅鏀捐揣瀹屾垚 + wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE_TRANSPORT_LIFT.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_TRANSPORT_LIFT_OUT.sts) { + //灏忚溅绉诲姩鑷崇珯鐐� ==> 灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE_TRANSPORT_LIFT_OUT.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT_TRANSPORT_LIFT_OUT.sts) { + //灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_COMPLETE_TRANSPORT_LIFT_OUT.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT_TRANSPORT_LIFT_OUT.sts) { + //灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 灏忚溅鏀捐揣瀹屾垚 + wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE_TRANSPORT_LIFT_OUT.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); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else { + continue; } - if (wrkMastMapper.updateById(wrkMast) > 0) { - if (wrkMast.getWrkSts() == 111) { - // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� - if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) { - log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo()); - } - // 鍒犻櫎宸ヤ綔涓绘。 - if (!wrkMastService.deleteById(wrkMast)) { - log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo()); - } - } - + if (wrkMastService.updateById(wrkMast)) { //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); - //婧愬簱浣嶆竻闆� - shuttleProtocol.setSourceLocNo(null); - //鐩爣搴撲綅娓呴浂 - shuttleProtocol.setLocNo(null); - //浠诲姟鎸囦护娓呴浂 - shuttleProtocol.setAssignCommand(null); + shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE); News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo()); } else { News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); } } else { - ShuttleAssignCommand assignCommand = shuttleProtocol.getAssignCommand(); - if (!assignCommand.getAuto()) { - //鎵嬪姩妯″紡 - //宸ヤ綔鍙锋竻闆� - shuttleProtocol.setTaskNo(0); - //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); - //婧愬簱浣嶆竻闆� - shuttleProtocol.setSourceLocNo(null); - //鐩爣搴撲綅娓呴浂 - shuttleProtocol.setLocNo(null); - //浠诲姟鎸囦护娓呴浂 - shuttleProtocol.setAssignCommand(null); - //娓呴浂浠ょ墝 - shuttleProtocol.setToken(0); - News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo()); + 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()); + } } } - } } @@ -1290,54 +819,26 @@ } /** - * 鎻愬崌鏈轰换鍔� + * 鎵ц绉诲簱浠诲姟 */ - public synchronized void liftIoExecute() { + public synchronized void shuttleLocMoveExecute() { 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) { + //鏌ヨ绉诲簱浠诲姟 + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_LOC_MOVE.sts, WrkStsType.LOC_MOVE_SHUTTLE_TAKE.sts, WrkStsType.LOC_MOVE_SHUTTLE_PUT.sts)); + for (WrkMast wrkMast : wrkMasts) { + boolean stepTake = this.shuttleLocMoveExecuteTake(wrkMast);//绉诲簱浠诲姟-灏忚溅鍙栬揣涓� + if (!stepTake) { continue; } - if (!liftProtocol.isIdle()) { - News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftSlave.getId()); + boolean stepPut = this.shuttleLocMoveExecutePut(wrkMast);//绉诲簱浠诲姟-灏忚溅鍙栬揣涓� + if (!stepPut) { continue; } - //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚﹁鍗犵敤 - if (liftProtocol.getToken() != 0) { - News.info("{}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗�", liftSlave.getId()); + boolean stepComplete = this.shuttleLocMoveComplete(wrkMast);//绉诲簱浠诲姟-浠诲姟瀹屾垚 + if (!stepComplete) { 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; - } } } @@ -1347,269 +848,550 @@ } /** - * 鎻愬崌鏈哄叆搴� + * 绉诲簱浠诲姟-灏忚溅鍙栬揣涓� * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ - private boolean liftIoExecuteStepIn(WrkMast wrkMast) { - //--------------------------------------鎻愬崌鏈哄叆搴�-----------------------------------------// + private boolean shuttleLocMoveExecuteTake(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------// Date now = new Date(); - //2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑 - if (wrkMast.getWrkSts() == 2) { - //鑾峰彇婧愮珯 - BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo()); - if (sourceBasDevp == null) { - return false;//鎵句笉鍒扮珯鐐� - } + //灏忚溅绉诲姩鑷崇珯鐐� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鍙栬揣涓� + if (wrkMast.getWrkSts() == WrkStsType.NEW_LOC_MOVE.sts) { + if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� + boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣 + News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); - 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;//绔欑偣涓嶅彲鍏� + if (result) { + wrkMast.setWrkSts(WrkStsType.LOC_MOVE_SHUTTLE_TAKE.sts);//灏忚溅鎼繍涓� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鍙栬揣涓� + wrkMast.setModiTime(now); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + if (wrkMastService.updateById(wrkMast)) { + 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) { - //--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------// + private boolean shuttleLocMoveExecutePut(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------// Date now = new Date(); - //23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑 - if (wrkMast.getWrkSts() == 23) { - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + //灏忚溅绉诲姩鑷崇珯鐐� 502.灏忚溅鍙栬揣涓� ==> 503.灏忚溅鏀捐揣涓� + if (wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_SHUTTLE_TAKE.sts) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) 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;//鍑哄簱绔欑偣涓嶅瓨鍦� + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + return false; } - //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿) - LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo())); - if (liftStaProtocol == null) { - News.info("{}浠诲姟锛屾壘涓嶅埌绔欑偣锛岀姝㈡淳鍙�", wrkMast.getWrkNo()); - return false;//鎵句笉鍒扮珯鐐� + if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞︽湭鍒拌揪鍙栬揣浣嶇疆", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); + 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()); + boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getLocNo(), wrkMast.getShuttleNo(), "TRANSPORT");//璋冨害灏忚溅鏀捐揣 + News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); + + if (result) { + wrkMast.setWrkSts(WrkStsType.LOC_MOVE_SHUTTLE_PUT.sts);//灏忚溅鎼繍涓� 502.灏忚溅鍙栬揣涓� ==> 503.灏忚溅鏀捐揣涓� + wrkMast.setModiTime(now); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + if (wrkMastService.updateById(wrkMast)) { 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 + */ + private boolean shuttleLocMoveComplete(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------// + Date now = new Date(); + + //灏忚溅绉诲姩鑷崇珯鐐� 503.灏忚溅鏀捐揣涓� ==> 509.绉诲簱瀹屾垚 + if (wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_SHUTTLE_PUT.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 (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞︽湭鍒拌揪鏀捐揣浣嶇疆", wrkMast.getWrkNo()); + return false; + } + + if (shuttleProtocol.getHasLift()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀浜庨《鍗囩姸鎬�", wrkMast.getWrkNo()); + return false; + } + + wrkMast.setWrkSts(WrkStsType.COMPLETE_LOC_MOVE.sts);//灏忚溅鎼繍涓� 503.灏忚溅鏀捐揣涓� ==> 509.绉诲簱瀹屾垚 + wrkMast.setModiTime(now); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + if (wrkMastService.updateById(wrkMast)) { + return false; + } + return false; + } + return true; + } + +// /** +// * 璐у弶鎻愬崌鏈轰换鍔� +// */ +// public synchronized void forkLiftIoExecute() { +// 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) { +// Integer liftNo = wrkMast.getLiftNo(); +// if (liftNo == null) { +// //鏈垎閰嶆彁鍗囨満 +// Integer staNo = wrkMast.getIoType() == WrkIoType.IN.id ? wrkMast.getSourceStaNo() : wrkMast.getStaNo(); +// liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo); +// if(liftNo == null) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo()); +// continue; +// } +// +// ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); +// if (forkLiftThread == null) { +// continue; +// } +// ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); +// if (forkLiftProtocol == null) { +// continue; +// } +// +// if (!forkLiftThread.isIdle()) { +// News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftNo); +// continue; +// } +// +// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 +// WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); +// if (liftWrkMast != null) { +// if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); +// continue;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� +// } +// } +// +// wrkMast.setLiftNo(liftNo); +// wrkMast.setModiTime(new Date()); +// wrkMastService.updateById(wrkMast); +// continue; +// } +// +// ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); +// if (forkLiftThread == null) { +// continue; +// } +// ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); +// if (forkLiftProtocol == null) { +// continue; +// } +// +// if (!forkLiftThread.isIdle()) { +// News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftNo); +// 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(); +// +// //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; +// } +// +// ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftSta.getLiftNo()); +// if (forkLiftThread == null) { +// return false; +// } +// ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); +// if (forkLiftProtocol == null) { +// return false; +// } +// if (!forkLiftThread.isIdle()) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftSta.getLiftNo()); +// return false; +// } +// +// //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡叆搴撴ā寮� +// if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡叆搴撴ā寮忥紝绂佹鍏ュ簱", wrkMast.getWrkNo()); +// return false; +// } +// +// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 +// WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); +// if (liftWrkMast != null) { +// if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); +// 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; +// } +// +// //璇锋眰涓婄骇绯荤粺锛屾槸鍚﹀厑璁稿叆搴� +// boolean inMission = ForkLiftUtils.queryInMission(wrkMast.getSourceStaNo(), liftSta.getLiftNo(), wrkMast.getWmsWrkNo()); +// if (!inMission) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屼笂绾х郴缁熶笉鍏佽鍏ュ簱", wrkMast.getWrkNo()); +// return false; +// } +// +// //鑾峰彇鎻愬崌鏈哄懡浠� +// List<ForkLiftCommand> liftCommands = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getLev()); +// ArrayList<ForkLiftCommand> commands = new ArrayList<>(); +// commands.addAll(liftCommands); +// +// //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 +// LiftAssignCommand assignCommand = new LiftAssignCommand(); +// assignCommand.setCommands(commands); +// assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue()); +// assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); +// assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue()); +// +// wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 1.鐢熸垚鍏ュ簱浠诲姟 ==> 3.鎻愬崌鏈烘惉杩愪腑 +// wrkMast.setSystemMsg("");//娓呯┖娑堟伅 +// wrkMast.setModiTime(now); +// if (wrkMastService.updateById(wrkMast)) { +// //涓嬪彂浠诲姟 +// forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand); +// } +// 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) { +// Integer liftNo = wrkMast.getLiftNo(); +// if (liftNo == null) { +// //鏈垎閰嶆彁鍗囨満 +// Integer staNo = wrkMast.getIoType() == WrkIoType.IN.id ? wrkMast.getSourceStaNo() : wrkMast.getStaNo(); +// liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo); +// if(liftNo == null) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo()); +// continue; +// } +// +// ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); +// if (forkLiftThread == null) { +// continue; +// } +// ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); +// if (forkLiftProtocol == null) { +// continue; +// } +// +// if (!forkLiftThread.isIdle()) { +// News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftNo); +// continue; +// } +// +// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 +// WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); +// if (liftWrkMast != null) { +// if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); +// continue;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� +// } +// } +// +// wrkMast.setLiftNo(liftNo); +// wrkMast.setModiTime(new Date()); +// wrkMastService.updateById(wrkMast); +// continue; +// } +// +// ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); +// if (forkLiftThread == null) { +// continue; +// } +// ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); +// if (forkLiftProtocol == null) { +// continue; +// } +// +// if (!forkLiftThread.isIdle()) { +// News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftNo); +// 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 liftIoExecuteStepOut(WrkMast wrkMast) { +// //--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------// +// //103.灏忚溅鎼繍瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑 +// if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_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; +// } +// +// //鑾峰彇婧愮珯 +// ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); +// if (liftSta == null) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾壘涓嶅埌绔欑偣锛岀姝㈡淳鍙�", wrkMast.getWrkNo()); +// 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; +// } +// } +// +// if (liftSta.getHasCar()) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getStaNo()); +// return false; +// } +// +// if (!liftSta.getHasTray()) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏃犳墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getStaNo()); +// return false; +// } +// +// ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftSta.getLiftNo()); +// if (forkLiftThread == null) { +// return false; +// } +// ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); +// if (forkLiftProtocol == null) { +// return false; +// } +// if (!forkLiftThread.isIdle()) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftSta.getLiftNo()); +// return false; +// } +// +// //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡嚭搴撴ā寮� +// if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡嚭搴撴ā寮忥紝绂佹鍑哄簱", wrkMast.getWrkNo()); +// return false; +// } +// +// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 +// WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); +// if (liftWrkMast != null) { +// if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); +// return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� +// } +// } +// +// //璇锋眰涓婄骇绯荤粺锛屾槸鍚﹀厑璁稿嚭搴� +// boolean outMission = ForkLiftUtils.queryOutMission(wrkMast.getStaNo()); +// if (!outMission) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屼笂绾х郴缁熶笉鍏佽鍑哄簱", wrkMast.getWrkNo()); +// return false; +// } +// +// //鑾峰彇鎻愬崌鏈哄懡浠� +// List<ForkLiftCommand> liftCommands = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), liftSta.getLev(), wrkMast.getStaNo()); +// ArrayList<ForkLiftCommand> commands = new ArrayList<>(); +// commands.addAll(liftCommands); +// +// //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 +// LiftAssignCommand assignCommand = new LiftAssignCommand(); +// assignCommand.setCommands(commands); +// assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue()); +// assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); +// assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue()); +// +// wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 103.鐢熸垚鍏ュ簱浠诲姟 ==> 104.鎻愬崌鏈烘惉杩愪腑 +// wrkMast.setShuttleNo(null);//閲婃斁灏忚溅 +// wrkMast.setSystemMsg("");//娓呯┖娑堟伅 +// wrkMast.setModiTime(new Date()); +// if (wrkMastService.updateById(wrkMast)) { +// //涓嬪彂浠诲姟 +// forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand); +// } +// return false; +// } +// return true; +// } + + /** + * 璐у弶鎻愬崌鏈轰换鍔″畬鎴� + */ + public synchronized void forkLiftFinished() { + try { + for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) { + //鑾峰彇鎻愬崌鏈轰俊鎭� + ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId()); + ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); + if (forkLiftProtocol == null) { + continue; + } + + //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂� + if (forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.WAITING.id + && forkLiftProtocol.getWrkNo() != 0 + ) { + //灏嗕换鍔℃。鏍囪涓哄畬鎴� + WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo()); + if (wrkMast != null) { + if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN.sts) { + //3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴� + wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts); + wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + forkLiftThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_LIFT_RUN.sts) { + //104.鎻愬崌鏈烘惉杩愪腑 ==> 109.鍑哄簱瀹屾垚 + wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts); + wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + forkLiftThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN.sts) { + //306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts); + forkLiftThread.setSyncTaskNo(0); + } + + wrkMast.setModiTime(new Date()); + if (wrkMastService.updateById(wrkMast)) { + forkLiftThread.reset(); + News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo()); + } else { + News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo()); + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } } /** @@ -1617,10 +1399,13 @@ */ public synchronized void liftFinished() { try { - for (LiftSlave liftSlave : slaveProperties.getLift()) { + for (LiftSlave slave : slaveProperties.getLift()) { //鑾峰彇鎻愬崌鏈轰俊鎭� - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId()); - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId()); + if (liftThread == null) { + continue; + } + LiftProtocol liftProtocol = liftThread.getStatus(); if (liftProtocol == null) { continue; } @@ -1628,414 +1413,46 @@ //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂� if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id && liftProtocol.getTaskNo() != 0 - && !liftProtocol.getBusy() ) { - int taskNo = liftProtocol.getTaskNo().intValue(); - if (taskNo >= 20000 && taskNo <= 30000) { - //鎻愬崌鏈鸿澶囧伐浣滃彿锛岄渶瑕佹煡璇㈠搴斾换鍔″彿 - BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(liftProtocol.getTaskNo().toString(), liftSlave.getId()); - if (basLiftOpt != null) { - taskNo = basLiftOpt.getWrkNo(); - } - } - //灏嗕换鍔℃。鏍囪涓哄畬鎴� - WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(taskNo); + 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()); - } - } - - if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) { - //閲婃斁鎻愬崌鏈轰护鐗� - liftProtocol.setToken(0); - } - - break; - case 106://106.鎻愬崌鏈烘惉杩愪腑 ==> 107.鎻愬崌鏈烘惉杩愬畬鎴� - wrkMast.setWrkSts(107L); - 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.OUTBOUND_LIFT_RUN.sts) { + //104.鎻愬崌鏈烘惉杩愪腑 ==> 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 if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_TO_SHUTTLE_TRANSPORT_LIFT.sts) { + //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_SHUTTLE_COMPLETE_TRANSPORT_LIFT.sts); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_TO_TARGET_TRANSPORT_LIFT.sts) { + //鎻愬崌鏈鸿嚦鏀捐揣灞� ==> 鎻愬崌鏈鸿嚦鏀捐揣灞傚畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_TARGET_COMPLETE_TRANSPORT_LIFT.sts); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_TO_SHUTTLE_TRANSPORT_LIFT_OUT.sts) { + //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_SHUTTLE_COMPLETE_TRANSPORT_LIFT_OUT.sts); } - if (wrkMastMapper.updateById(wrkMast) > 0) { - //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵�� - liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); - //浠诲姟鎸囦护娓呴浂 - liftProtocol.setAssignCommand(null); + wrkMast.setModiTime(new Date()); + if (wrkMastService.updateById(wrkMast)) { + liftThread.setSyncTaskNo(0); + liftThread.setProtocolStatus(LiftProtocolStatusType.IDLE); News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo()); } else { News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); } - } else { - LiftAssignCommand assignCommand = liftProtocol.getAssignCommand(); - if (assignCommand != null) { - if (!assignCommand.getAuto()) { - //鎵嬪姩鎿嶄綔 - //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵�� - liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); - //浠诲姟鎸囦护娓呴浂 - liftProtocol.setAssignCommand(null); - News.info("鎻愬崌鏈哄凡纭鎵嬪姩鎿嶄綔銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo()); - } - } } } } } catch (Exception e) { e.printStackTrace(); } - } - - /** - * 搴撲綅绉昏浆 - */ - public synchronized void locToLocExecute() { - try { - //鑾峰彇鍑哄叆搴撳伐浣滄。 -// List<WrkMast> wrkMasts = wrkMastMapper.selectInOutWrkMast(); -// if (wrkMasts.size() > 0) { -// //鏈夊嚭鍏ュ簱浠诲姟锛屽繀椤荤瓑寰呬换鍔℃墽琛屽畬姣曞啀鎵ц搴撲綅绉昏浆 -// return; -// } - - //鏌ヨ搴撲綅绉昏浆宸ヤ綔妗� - List<WrkMast> wrkMasts1 = wrkMastMapper.selectLocToLocWrkMast(); - for (WrkMast wrkMast : wrkMasts1) { - if (Utils.getLev(wrkMast.getSourceLocNo()) == Utils.getLev(wrkMast.getLocNo())) { - boolean step1 = this.locToLocExecuteStep1(wrkMast);//鍚屾ゼ灞傚簱浣嶇Щ杞� - if (!step1) { - continue; - } - } else { - //璺ㄦゼ灞傚簱浣嶇Щ杞� - boolean step2 = this.locToLocExecuteStep2(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鍑哄簱鍙� - if (!step2) { - continue; - } - - boolean step3 = this.locToLocExecuteStep3(wrkMast);//鎻愬崌鏈烘惉杩愯揣鐗� - if (!step3) { - continue; - } - - boolean step4 = this.locToLocExecuteStep4(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鐩爣搴撲綅 - if (!step4) { - continue; - } - - } - - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 鍚屾ゼ灞傚簱浣嶇Щ杞� - * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false - * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue - */ - private boolean locToLocExecuteStep1(WrkMast wrkMast) { - if (wrkMast.getWrkSts() == 21) {//21.鐢熸垚鍑哄簱浠诲姟 - if (wrkMast.getShuttleNo() == null) { - shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 - 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()) { - return false; - } - - //鍒ゆ柇灏忚溅鏄惁鍒拌揪婧愬簱浣� - if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { - //灏忚溅涓嶅湪婧愬簱浣嶄綅缃� - shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 - return false; - } - - //灏忚溅宸叉姷杈炬簮搴撲綅锛岃繘琛屾惉杩愯揣鐗� - NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getLocNo()); - if (result == null) {//璺緞璁$畻澶辫触 - return false; - } - - //鍒涘缓鍒嗛厤鍛戒护 - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ簱妯″紡 - assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) - assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 - assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 - - wrkMast.setWrkSts(5L);//21.鐢熸垚鍑哄簱浠诲姟 => 5.灏忚溅鎼繍涓� - wrkMast.setModiTime(new Date()); - if (wrkMastMapper.updateById(wrkMast) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); - } - - return false; - } - return true; - } - - /** - * 璺ㄦゼ灞傚簱浣嶇Щ杞�-璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鍑哄簱鍙� - * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false - * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue - */ - private boolean locToLocExecuteStep2(WrkMast wrkMast) { - if (wrkMast.getWrkSts() == 21) {//21.鐢熸垚鍑哄簱浠诲姟 - if (wrkMast.getShuttleNo() == null) { - shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 - 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()) { - return false; - } - - //鍒ゆ柇灏忚溅鏄惁鍒拌揪婧愬簱浣� - if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { - //灏忚溅涓嶅湪婧愬簱浣嶄綅缃� - shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒版簮搴撲綅杩涜鍙栬揣 - return false; - } - - //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐� - LiftStaProtocol liftSta = shuttleDispatchUtils.getRecentLiftSta(shuttleThread.getSlave().getId(), Utils.getLev(wrkMast.getLocNo())); - if (liftSta == null) { - return false;//娌℃湁鍙敤涓旂┖闂茬殑杈撻�佺珯鐐� - } - //婧愮珯 - Integer sourceStaNo = liftSta.getStaNo(); - //鎻愬崌鏈哄彿*100+鐩爣妤煎眰=鐩爣绔欑偣 - Integer staNo = liftSta.getLiftNo() * 100 + Utils.getLev(wrkMast.getLocNo());//鐩爣绔� - - //灏忚溅宸叉姷杈炬簮搴撲綅锛屽皢璐х墿鎼繍鍒拌緭閫佺珯鐐� - NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), liftSta.getLocNo()); - if (result == null) {//璺緞璁$畻澶辫触 - return false; - } - - //鍒涘缓鍒嗛厤鍛戒护 - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_LOC_TO_LOC.id.shortValue());//搴撲綅绉昏浆妯″紡 - assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) - assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 - assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 - - wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� - wrkMast.setSourceStaNo(sourceStaNo);//婧愮珯 - wrkMast.setStaNo(staNo);//鐩爣绔� - wrkMast.setModiTime(new Date()); - if (wrkMastMapper.updateById(wrkMast) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); - } - - return false; - } - return true; - } - - /** - * 璺ㄦゼ灞傚簱浣嶇Щ杞�-鎻愬崌鏈烘惉杩愯揣鐗� - * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false - * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue - */ - private boolean locToLocExecuteStep3(WrkMast wrkMast) { - Date now = new Date(); - if (wrkMast.getWrkSts() == 23) {//23.灏忚溅鎼繍瀹屾垚 - //婧愮珯 - Integer sourceStaNo = wrkMast.getSourceStaNo(); - //鐩爣绔� - Integer staNo = wrkMast.getStaNo(); - if (sourceStaNo == null || staNo == null) { - return false;//婧愮珯鎴栫洰鏍囩珯涓虹┖ - } - - int liftNo = staNo / 100;//鑾峰彇鎻愬崌鏈哄彿 - - //鑾峰彇鎻愬崌鏈虹嚎绋� - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo); - if (liftThread == null) { - return false; - } - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); - if (liftProtocol == null) { - return false; - } - - //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� - LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo())); - if (liftStaProtocol == null) { - return false;//鎵句笉鍒扮珯鐐� - } - - if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) { - return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹湁鎵樼洏 - } - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - if (shuttleThread == null) { - return false; - } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); - if (shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) { - //灏忚溅杩樺湪杈撻�佺珯鐐� - //璋冨害灏忚溅閬胯 - boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread); - if (!result) { - return false; - } - } - - if (!liftProtocol.isIdle()) { - return false; - } - - //鎼滅储鏄惁鏈夊叾浠栦换鍔″崰鐢ㄤ簡鎻愬崌鏈猴紝濡傛灉鍗犵敤鎻愬崌鏈虹殑浠诲姟鍜屽綋鍓嶄换鍔$浉鍚岋紝鍒欒繍琛屾墽琛� - WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue()); - if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) { - return false; - } - - //鑾峰彇鎻愬崌鏈哄懡浠� - NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, sourceStaNo, staNo, 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.setShuttleNo(null);//娓呯┖灏忚溅鍙凤紝绛夎揣鐗╂惉杩愬畬鎴愬悗锛屽埌鐩爣妤煎眰閲嶆柊鎼滅储灏忚溅 - wrkMast.setModiTime(now); - 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 locToLocExecuteStep4(WrkMast wrkMast) { - if (wrkMast.getWrkSts() == 4) {//4.鎻愬崌鏈烘惉杩愬畬鎴� - //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� - LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(wrkMast.getLiftNo(), Utils.getLev(wrkMast.getLocNo())); - if (liftStaProtocol == null) { - return false;//鎵句笉鍒扮珯鐐� - } - - if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) { - return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹湁鎵樼洏 - } - - if (wrkMast.getShuttleNo() == null) { - shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐� - 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()) { - return false; - } - - //鍒ゆ柇灏忚溅鏄惁鍒拌揪鐩爣杈撻�佺珯鐐� - if (!shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) { - //灏忚溅涓嶅湪鐩爣杈撻�佺珯鐐� - shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐� - return false; - } - - //灏忚溅宸叉姷杈剧洰鏍囪緭閫佺珯鐐癸紝灏嗚揣鐗╂惉杩愬埌鐩爣搴撲綅 - NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getLocNo()); - if (result == null) {//璺緞璁$畻澶辫触 - return false; - } - - //鍒涘缓鍒嗛厤鍛戒护 - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_LOC_TO_LOC.id.shortValue());//搴撲綅绉昏浆妯″紡 - assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) - assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 - assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 - - wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓� - wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� - wrkMast.setModiTime(new Date()); - if (wrkMastMapper.updateById(wrkMast) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); - } - - return false; - } - return true; } /** @@ -2057,11 +1474,11 @@ Date now = new Date(); for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) { // 鑾峰彇鍥涘悜绌挎杞︿俊鎭� - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId()); + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId()); if (shuttleThread == null) { continue; } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { continue; } @@ -2071,13 +1488,14 @@ BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo()); // 鏈夊紓甯� if (latest == null) { - if (shuttleProtocol.getErrState() != null && shuttleProtocol.getErrState() == 1) { - WrkMast wrkMast = wrkMastMapper.selectById(shuttleProtocol.getTaskNo()); + if (shuttleProtocol.getErrorCode() != null && Integer.parseInt(shuttleProtocol.getErrorCode()) != 0) { + WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo()); if (wrkMast == null) { continue; } - BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode()); - String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName(); + int errorCode = Integer.parseInt(shuttleProtocol.getErrorCode()); + BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(errorCode); + String errName = basShuttleErr == null ? "鏈煡寮傚父" : basShuttleErr.getErrName(); BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog( null, // 缂栧彿 wrkMast.getWrkNo(), // 宸ヤ綔鍙� @@ -2092,7 +1510,7 @@ wrkMast.getSourceStaNo(), // 婧愮珯 wrkMast.getSourceLocNo(), // 婧愬簱浣� wrkMast.getBarcode(), // 鏉$爜 - shuttleProtocol.getErrCode(), // 寮傚父鐮� + errorCode, // 寮傚父鐮� errName, // 寮傚父 1, // 寮傚父鎯呭喌 now, // 娣诲姞鏃堕棿 @@ -2108,7 +1526,7 @@ } } else { // 寮傚父淇 - if (shuttleProtocol.getErrState() == null || shuttleProtocol.getErrState() == 0) { + if (shuttleProtocol.getErrorCode() == null || Integer.parseInt(shuttleProtocol.getErrorCode()) == 0) { latest.setEndTime(now); latest.setUpdateTime(now); latest.setStatus(2); @@ -2117,54 +1535,6 @@ } } } - }else { -// //鏃犱换鍔� -// BasShuttleErrLog latest = basShuttleErrLogService.findLatest(shuttleSlave.getId()); -// // 鏈夊紓甯� -// if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) { -// // 璁板綍鏂板紓甯� -// if (latest == null || (latest.getErrCode() != shuttleProtocol.getStatusErrorCode().intValue())) { -// BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue()); -// String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName(); -// BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog( -// null, // 缂栧彿 -// null, // 宸ヤ綔鍙� -// now, // 鍙戠敓鏃堕棿 -// null, // 缁撴潫鏃堕棿 -// null, // 宸ヤ綔鐘舵�� -// null, // 鍏ュ嚭搴撶被鍨� -// shuttleSlave.getId(), // 鍥涘悜绌挎杞� -// null, // plc -// null, // 鐩爣搴撲綅 -// null, // 鐩爣绔� -// null, // 婧愮珯 -// null, // 婧愬簱浣� -// null, // 鏉$爜 -// (int)shuttleProtocol.getStatusErrorCode(), // 寮傚父鐮� -// errName, // 寮傚父 -// 1, // 寮傚父鎯呭喌 -// now, // 娣诲姞鏃堕棿 -// null, // 娣诲姞浜哄憳 -// now, // 淇敼鏃堕棿 -// null, // 淇敼浜哄憳 -// "鏃犱换鍔″紓甯�" // 澶囨敞 -// ); -// if (!basShuttleErrLogService.insert(basShuttleErrLog)) { -// News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName); -// } -// } -// // 鏃犲紓甯� -// } else { -// // 寮傚父淇 -// if (latest != null && latest.getStatus() == 1) { -// latest.setEndTime(now); -// latest.setUpdateTime(now); -// latest.setStatus(2); -// if (!basShuttleErrLogService.updateById(latest)) { -// News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId()); -// } -// } -// } } } } @@ -2174,42 +1544,30 @@ */ private void recLiftErr() { Date now = new Date(); - for (LiftSlave liftSlave : slaveProperties.getLift()) { + for (LiftSlave slave : slaveProperties.getLift()) { // 鑾峰彇鎻愬崌鏈轰俊鎭� - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId()); + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId()); if (liftThread == null) { continue; } - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + LiftProtocol liftProtocol = liftThread.getStatus(); if (liftProtocol == null) { continue; } if (liftProtocol.getTaskNo() != 0) { //鏈変换鍔� - BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(liftSlave.getId(), liftProtocol.getTaskNo().intValue()); + BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(slave.getId(), liftProtocol.getTaskNo()); // 鏈夊紓甯� if (latest == null) { - if (liftProtocol.getDeviceError() != null && liftProtocol.getDeviceError()) { - WrkMast wrkMast = wrkMastMapper.selectById(liftProtocol.getTaskNo()); + if (liftProtocol.getErrorCode() != null && !liftProtocol.getErrorCode().equals("0")) { + WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo()); if (wrkMast == null) { continue; } - String errName = ""; - if (liftProtocol.getFrontOverrun()) { - errName = "鍓嶈秴闄�"; - } else if (liftProtocol.getBackOverrun()) { - errName = "鍚庤秴闄�"; - } else if (liftProtocol.getLeftOverrun()) { - errName = "宸﹁秴闄�"; - } else if (liftProtocol.getRightOverrun()) { - errName = "鍙宠秴闄�"; - } else if (liftProtocol.getOverHeight()) { - errName = "瓒呴珮"; - } else if (liftProtocol.getOverWeight()) { - errName = "瓒呴噸"; - } + BasLiftErr basLiftErr = basLiftErrService.queryByCode(Integer.parseInt(liftProtocol.getErrorCode())); + String errName = basLiftErr == null ? "鏈煡寮傚父" : basLiftErr.getErrName(); BasLiftErrLog basLiftErrLog = new BasLiftErrLog( null, // 缂栧彿 @@ -2218,7 +1576,7 @@ null, // 缁撴潫鏃堕棿 wrkMast.getWrkSts(), // 宸ヤ綔鐘舵�� wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨� - liftSlave.getId(), // 鎻愬崌鏈� + slave.getId(), // 鎻愬崌鏈� null, // plc wrkMast.getLocNo(), // 鐩爣搴撲綅 wrkMast.getStaNo(), // 鐩爣绔� @@ -2236,352 +1594,21 @@ JSON.toJSONString(liftProtocol) // 绯荤粺鐘舵�佹暟鎹� ); if (!basLiftErrLogService.insert(basLiftErrLog)) { - News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", liftSlave.getId(), errName); + News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", slave.getId(), errName); } } } else { // 寮傚父淇 - if (liftProtocol.getDeviceError() == null || !liftProtocol.getDeviceError()) { + if (liftProtocol.getErrorCode() == null || liftProtocol.getErrorCode().equals("0")) { latest.setEndTime(now); latest.setUpdateTime(now); latest.setStatus(2); if (!basLiftErrLogService.updateById(latest)) { - News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", liftSlave.getId(), latest.getId()); + News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", slave.getId(), latest.getId()); } } } } - } - } - - // ------------------------------------------------------------------------------- - - /** - * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐� - */ - 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.getWorkNo() != 0 && staProtocol.isLoading()) { -// reset = false; -// break; -// } -// } -// // 鑾峰彇led绾跨▼ -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); -// // led鏄剧ず榛樿鍐呭 -// if (reset && !ledThread.isLedMk()) { -// ledThread.setLedMk(true); -// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) { -// News.error(" - {}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); -// } else { -// News.error("{}鍙稬ED鍛戒护涓嬪彂鎴愬姛锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); -// ledThread.setLedMk(false); -// } -// } -// } - 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(); } } @@ -2590,37 +1617,47 @@ */ public synchronized void loopShuttleCharge() { try { + + List<BasShuttleCharge> charges = basShuttleChargeService.selectList(new EntityWrapper<BasShuttleCharge>().orderBy("charge_id", true)); + if (charges.isEmpty()) { + return;//鏃犲厖鐢垫々 + } + for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId()); - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId()); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { continue; } //鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹� - if (!shuttleProtocol.isRequireCharge()) { + if (!shuttleThread.isRequireCharge()) { continue; } - WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttleProtocol.getShuttleNo().intValue()); - if (wrkCharge != null) {//宸叉湁鍏呯數浠诲姟 + WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttleProtocol.getShuttleNo()); + if (wrkMast != null) {//宸叉湁鍏呯數浠诲姟 continue; } //灏忚溅鎵�鍦ㄦゼ灞� 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 (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) { - shuttleCharge = chargeType; + if (wrkMastService.selectChargeWorkingByChargeSta(charge.getChargeId()) == null) { + shuttleCharge = charge; break; } } @@ -2628,17 +1665,22 @@ if (shuttleCharge == null) { //鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗� //灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔� - for (ShuttleChargeType chargeType : ShuttleChargeType.values()) { - if (wrkChargeService.selectWorkingOfCharge(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; } } @@ -2648,17 +1690,18 @@ continue; } - String chargeLocNo = shuttleCharge.locNo; - wrkCharge = new WrkCharge(); - wrkCharge.setShuttleNo(shuttle.getId()); - wrkCharge.setCharge(shuttleCharge.id); - wrkCharge.setWrkNo(commonService.getChargeWorkNo(4)); - wrkCharge.setWrkSts(51L); // 51.鍑嗗鍏呯數 - wrkCharge.setIoPri((double) 10); - wrkCharge.setLocNo(chargeLocNo); - wrkCharge.setMemo("charge"); - wrkCharge.setAppeTime(new Date()); - if (!wrkChargeService.insert(wrkCharge)) { + 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(shuttle.getId()); + wrkMast.setMemo("charge"); + wrkMast.setAppeTime(new Date()); + if (!wrkMastService.insert(wrkMast)) { News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", shuttle.getId()); continue; } @@ -2675,129 +1718,214 @@ */ public synchronized void executeShuttleCharge() { try { + //鏌ヨ灏忚溅鍏呯數浠诲姟 for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { - WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttle.getId()); - if (wrkCharge == null) { + WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttle.getId()); + if (wrkMast == null) { continue; } - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkCharge.getShuttleNo()); - if (shuttleThread == null) { - continue; - } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); - if (shuttleProtocol == null) { + boolean result1 = this.executeShuttleChargeStepGoToChargeSta(wrkMast);//灏忚溅绛夊緟鍏呯數妗� + if (!result1) { continue; } - if (wrkCharge.getWrkSts() == 51) { - if (!shuttleProtocol.isIdleNoCharge()) { - continue; - } - - if (shuttleProtocol.getSuspendState() == 1) { - continue;//绠″埗涓� - } - - if (!shuttleProtocol.getCurrentLocNo().equals(wrkCharge.getLocNo())) { - //灏忚溅涓嶅湪鍏呯數妗╀綅缃� - shuttleDispatchUtils.dispatchShuttle(wrkCharge.getWrkNo(), wrkCharge.getLocNo(), shuttle.getId());//璋冨害灏忚溅鍘诲厖鐢垫々 - continue; - } - - //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝厖鐢靛懡浠� - NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), true); - ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); - commands.add(chargeCommand); - //鍒涘缓鍒嗛厤鍛戒护 - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 - assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡 - assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) - assignCommand.setCommands(commands);//杩愯鍛戒护 - - wrkCharge.setWrkSts(52L);//51.鐢熸垚鍏呯數浠诲姟 => 52.灏忚溅鍘诲厖鐢典腑 - wrkCharge.setModiTime(new Date()); - if (wrkChargeMapper.updateById(wrkCharge) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); - } - } else if (wrkCharge.getWrkSts() == 52) { - //妫�娴嬪皬杞︽槸鍚︽弧鐢� - - //鑾峰彇婊$數闃堝�� - int maxPower = 95; - EntityWrapper<Config> wrapper = new EntityWrapper<>(); - wrapper.eq("code", "chargeMaxValue"); - Config config = configService.selectOne(wrapper); - if (config != null) { - maxPower = Integer.parseInt(config.getValue()); - } - - if (shuttleProtocol.getPowerPercent() < maxPower) { - continue; - } - - //***************鍒ゆ柇鏄惁婊″厖鏍″噯*************** - EntityWrapper<Config> wrapper1 = new EntityWrapper<>(); - wrapper.eq("code", "shuttleMaxPowerVerify"); - Config config1 = configService.selectOne(wrapper1); - if (config1 != null) { - if (config1.getValue().equals("true")) { - if (shuttleProtocol.getVoltage() < 5630) { - continue;//鐢靛帇涓嶅缁х画鍏呯數 - } - } - } - //***************鍒ゆ柇鏄惁婊″厖鏍″噯*************** - - //灏忚溅婊$數锛岀粨鏉熷厖鐢典换鍔� - NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), false); - ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); - commands.add(chargeCommand); - //鍒涘缓鍒嗛厤鍛戒护 - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 - assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡 - assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) - assignCommand.setCommands(commands);//杩愯鍛戒护 - - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); - try { - Thread.sleep(3000); - } catch (Exception e) { - e.printStackTrace(); - } - - wrkCharge.setWrkSts(53L);//52.灏忚溅鍘诲厖鐢典腑 => 53.灏忚溅鍏呯數瀹屾垚 - wrkCharge.setModiTime(new Date()); - if (wrkChargeMapper.updateById(wrkCharge) > 0) { - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE.id); - shuttleProtocol.setTaskNo(0); - shuttleProtocol.setPakMk(false); - } - } else if (wrkCharge.getWrkSts() == 53) { - if (shuttleProtocol.getChargState() == 0) {//灏忚溅澶勪簬鏈厖鐢电姸鎬� - boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkCharge.getLocNo()), shuttleThread.getSlave().getId(), shuttleThread); - if (!result) { - continue; - } - - wrkCharge.setWrkSts(60L);//53.灏忚溅鍏呯數瀹屾垚 => 60.鍏呯數浠诲姟瀹屾垚 - wrkCharge.setModiTime(new Date()); - if (wrkChargeMapper.updateById(wrkCharge) > 0) { - - } - } + 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 (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) { + //灏忚溅鍦ㄥ厖鐢垫々浣嶇疆 + 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 (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) { + 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.id);//鍑哄簱妯″紡 + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + + List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, true); + assignCommand.setCommands(commands);//杩愯鍛戒护 + + wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_WORKING.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_WORKING.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.isChargingCompleted()) { + return false; + } + + //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝仠姝㈠厖鐢靛懡浠� + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id);//鍑哄簱妯″紡 + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + + List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, false); + assignCommand.setCommands(commands);//杩愯鍛戒护 + + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + return false; + } + return true; + } + + //灏忚溅绂诲紑鍏呯數妗� + private synchronized boolean executeShuttleChargeStepLeaveCharge(WrkMast wrkMast) { + if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_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; + } + + //璋冨害灏忚溅鍘诲緟鏈轰綅 + 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; } /** @@ -2806,37 +1934,1237 @@ public synchronized void shuttleMoveExecute() { try { //鏌ヨ灏忚溅绉诲簱浠诲姟 - List<WrkMast> wrkMasts = wrkMastMapper.selectShuttleMoveWrk(); + List<WrkMast> wrkMasts = wrkMastService.selectShuttleMoveWrk(); for (WrkMast wrkMast : wrkMasts) { - boolean stepMoveSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐� - if (!stepMoveSta) { - continue; - } + if ("TRANSPORT_LIFT".equals(wrkMast.getMk())) { + this.shuttleMoveExecuteTransportLift(wrkMast); + } else if ("TRANSPORT_DEVP".equals(wrkMast.getMk())) { - boolean stepIntoLift = this.shuttleMoveExecuteStepIntoLift(wrkMast);//灏忚溅杩佸叆鎻愬崌鏈� - if (!stepIntoLift) { - continue; + } else { + this.shuttleMoveExecuteMove(wrkMast); } - - boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑 - if (!stepLiftMove) { - continue; - } - - boolean stepOutLift = this.shuttleMoveExecuteStepOutLift(wrkMast);//灏忚溅杩佸嚭鎻愬崌鏈� - if (!stepOutLift) { - continue; - } - - boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 - if (!stepMoveLoc) { - continue; - } - } } catch (Exception e) { e.printStackTrace(); } + } + + private void shuttleMoveExecuteMove(WrkMast wrkMast) { + boolean stepMoveSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐� + if (!stepMoveSta) { + return; + } + + boolean stepIntoLift = this.shuttleMoveExecuteStepIntoLift(wrkMast);//灏忚溅杩佸叆鎻愬崌鏈� + if (!stepIntoLift) { + return; + } + + boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑 + if (!stepLiftMove) { + return; + } + + boolean updateShuttleLocation = this.shuttleMoveExecuteStepUpdateShuttleLocation(wrkMast);//鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍� + if (!updateShuttleLocation) { + return; + } + + boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 + if (!stepMoveLoc) { + return; + } + } + + private void shuttleMoveExecuteTransportLift(WrkMast wrkMast) { + LiftThread liftThread = LiftUtils.getRecentLift(wrkMast.getLocNo()); + if (liftThread == null) { + return; + } + + String liftLocNo = liftThread.getLiftLocNo(Utils.getLev(wrkMast.getLocNo())); + if (Utils.getRow(liftLocNo) == Utils.getRow(wrkMast.getSourceLocNo()) && Utils.getBay(liftLocNo) == Utils.getBay(wrkMast.getSourceLocNo())) { + //鍙栬揣浣嶇疆鏄彁鍗囨満 + this.shuttleMoveExecuteTransportLiftTake(wrkMast); + } else { + //鏀捐揣浣嶇疆鏄彁鍗囨満 + this.shuttleMoveExecuteTransportLiftPut(wrkMast); + } + } + + private void shuttleMoveExecuteTransportLiftTake(WrkMast wrkMast) { + boolean stepMoveSta = this.shuttleMoveExecuteTransportLiftStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐� + if (!stepMoveSta) { + return; + } + + boolean stepLiftToShuttleLev = this.shuttleMoveExecuteTransportLiftStepLiftToShuttleLev(wrkMast);//鎻愬崌鏈哄埌灏忚溅灞� + if (!stepLiftToShuttleLev) { + return; + } + + boolean stepIntoLift = this.shuttleMoveExecuteTransportLiftStepIntoLift(wrkMast);//灏忚溅杩佸叆鎻愬崌鏈� + if (!stepIntoLift) { + return; + } + + boolean stepLiftToTargetLev = this.shuttleMoveExecuteTransportLiftStepLiftToTargetLev(wrkMast);//鎻愬崌鏈哄埌鏀捐揣灞� + if (!stepLiftToTargetLev) { + return; + } + + boolean stepOutLift = this.shuttleMoveExecuteTransportLiftStepOutLift(wrkMast);//灏忚溅杩佸嚭鎻愬崌鏈� + if (!stepOutLift) { + return; + } + + boolean stepMoveLoc = this.shuttleMoveExecuteTransportLiftStepMoveLoc(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 + if (!stepMoveLoc) { + return; + } + } + + /** + * 灏忚溅杩佺Щ-鍛煎彨灏忚溅鑷冲彇璐х偣 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteTransportLiftStepCallShuttle(WrkMast wrkMast) { + Date now = new Date(); + //灏忚溅绉诲姩鑷崇珯鐐� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 鍛煎彨灏忚溅鑷冲彇璐х偣 + 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 (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { + //灏忚溅鍦ㄥ彇璐х偣 + wrkMast.setWrkSts(WrkStsType.CALL_SHUTTLE_TO_TAKE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 鍛煎彨灏忚溅鑷冲彇璐х偣 + wrkMast.setModiTime(now); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMastService.updateById(wrkMast); + return false; + } + + boolean dispatchShuttle = shuttleDispatchUtils.shuttleMoveGenerate(wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo(), null, true); + if (!dispatchShuttle) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃皟搴﹁嚦鍙栬揣鐐瑰け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + wrkMast.setWrkSts(WrkStsType.CALL_SHUTTLE_TO_TAKE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 鍛煎彨灏忚溅鑷冲彇璐х偣 + wrkMast.setModiTime(now); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMastService.updateById(wrkMast); + return false; + } + return true; + } + + /** + * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮珯鐐� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteTransportLiftOutStepMoveSta(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------// + Date now = new Date(); + + //灏忚溅绉诲姩鑷崇珯鐐� 鍛煎彨灏忚溅鑷冲彇璐х偣 ==> 灏忚溅绉诲姩鑷崇珯鐐逛腑 + if (wrkMast.getWrkSts() == WrkStsType.CALL_SHUTTLE_TO_TAKE.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.getSourceLocNo())) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪鍙栬揣鐐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満 + LiftThread liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo()); + if (liftThread == null) { + News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂叉彁鍗囨満", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo()); + return false;//娌℃湁鍙敤涓旂┖闂茬殑鎻愬崌鏈� + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } + + //鑾峰彇鎻愬崌鏈哄緟鏈轰綅 + String liftStandByLocNo = liftThread.getLiftStandByLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())); + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + + List<ShuttleCommand> commands = new ArrayList<>(); + Integer mapType = NavigationMapType.DFX.id; + + //鑾峰彇灏忚溅鍒版彁鍗囨満寰呮満浣嶈璧板懡浠� + List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftStandByLocNo, mapType, assignCommand, shuttleThread); + if (moveCommands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false;//璺緞瑙i攣澶辫触 + } + commands.addAll(moveCommands); + + List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); + if (liftCommand == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + commands.addAll(0, liftCommand); + + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_SITE_TRANSPORT_LIFT_OUT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 鍛煎彨灏忚溅鑷冲彇璐х偣 ==> 灏忚溅绉诲姩鑷崇珯鐐逛腑 + wrkMast.setModiTime(now); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + return false; + } + return false; + } + return true; + } + + /** + * 灏忚溅杩佺Щ-鎻愬崌鏈哄埌灏忚溅灞� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteTransportLiftOutStepLiftToShuttleLev(WrkMast wrkMast) { + //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------// + Date now = new Date(); + //灏忚溅绉诲姩鍒版彁鍗囨満涓� 灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 鎻愬崌鏈鸿嚦灏忚溅灞� + if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_COMPLETE_TRANSPORT_LIFT_OUT.sts) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅瀵硅薄涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + LiftThread liftThread = null; + LiftProtocol liftProtocol = null; + if (wrkMast.getLiftNo() == null) { + //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満 + liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo()); + if (liftThread == null) { + News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂叉彁鍗囨満", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo()); + return false;//娌℃湁鍙敤涓旂┖闂茬殑鎻愬崌鏈� + } + + liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo()); + if (liftWrkMast != null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + + wrkMast.setModiTime(now); + wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMastService.updateById(wrkMast); + return false; + } else { + liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + News.info("{}鍙锋彁鍗囨満涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } + + liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", 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;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + + if (!liftThread.isIdle()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.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;//鎻愬崌鏈哄唴鏃犲皬杞� + } + + //鍒ゆ柇鎻愬崌鏈烘ゼ灞� + if (liftProtocol.getLev() == Utils.getLev(shuttleProtocol.getCurrentLocNo())) { + //鎻愬崌鏈哄湪灏忚溅妤煎眰 + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_SHUTTLE_COMPLETE_TRANSPORT_LIFT_OUT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� + wrkMast.setModiTime(now); + wrkMastService.updateById(wrkMast); + return false; + } + + //璋冨害鎻愬崌鏈� + //鑾峰彇鎻愬崌鏈哄懡浠� + List<LiftCommand> liftCommands = liftThread.getMoveCommand(wrkMast.getWrkNo(), liftProtocol.getLev(), Utils.getLev(shuttleProtocol.getCurrentLocNo()), LiftCommandModeType.MOVE); + LiftCommand liftCommand = liftCommands.get(0); + + int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿 + liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙� + + 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(LiftCommandModeType.MOVE.id.shortValue()); + + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_SHUTTLE_TRANSPORT_LIFT_OUT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 鎻愬崌鏈鸿嚦灏忚溅灞� + wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); + return false; + } + return false; + } + + return true; + } + + /** + * 灏忚溅杩佺Щ-灏忚溅杩佸叆鎻愬崌鏈� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteTransportLiftOutStepIntoLift(WrkMast wrkMast) { + //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------// + Date now = new Date(); + //灏忚溅绉诲姩鍒版彁鍗囨満涓� 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� ==> 灏忚溅杩佸叆鎻愬崌鏈轰腑 + if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_TO_SHUTTLE_COMPLETE_TRANSPORT_LIFT_OUT.sts) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅瀵硅薄涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + if (wrkMast.getLiftNo() == null) { + News.info("{}浠诲姟锛屾湭缁戝畾鎻愬崌鏈猴紝绂佹娲惧彂", wrkMast.getWrkNo()); + return false; + } + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + News.info("{}鍙锋彁鍗囨満涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", 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;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + + if (!liftThread.isIdle()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + //灏忚溅澶勪簬绌洪棽鐘舵�� + if (!shuttleThread.isIdle()) { + News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� + if (liftProtocol.getHasCar()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//鎻愬崌鏈哄唴鏃犲皬杞� + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� + if (liftProtocol.getHasTray()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//鎻愬崌鏈哄唴鏃犲皬杞� + } + + //鍒ゆ柇鎻愬崌鏈烘ゼ灞� + if (liftProtocol.getLev() != Utils.getLev(shuttleProtocol.getCurrentLocNo())) { + //鎻愬崌鏈轰笉鍦ㄥ皬杞︽ゼ灞� + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満涓庡皬杞︿笉鍦ㄥ悓涓�灞傦紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//绛夊緟鎻愬崌鏈哄埌灏忚溅妤煎眰 + } + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + + //鑾峰彇灏忚溅鍒版彁鍗囨満琛岃蛋鍛戒护 + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftThread.getLiftLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); + if (commands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false); + if (liftCommand == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + commands.addAll(liftCommand); + + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_TRANSPORT_LIFT_OUT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� ==> 灏忚溅杩佸叆鎻愬崌鏈轰腑 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + return false; + } + return false; + } + + return true; + } + + /** + * 灏忚溅杩佺Щ-灏忚溅杩佸嚭鎻愬崌鏈� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteTransportLiftOutStepOutLift(WrkMast wrkMast) { + //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------// + Date now = new Date(); + //灏忚溅绉诲姩鍒版彁鍗囨満涓� 灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 灏忚溅杩佸嚭鎻愬崌鏈轰腑 + if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT_COMPLETE_TRANSPORT_LIFT_OUT.sts) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅瀵硅薄涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + if (wrkMast.getLiftNo() == null) { + News.info("{}浠诲姟锛屾彁鍗囨満鏈粦瀹氾紝绂佹娲惧彂", wrkMast.getWrkNo()); + 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;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀵硅薄涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + if (!liftThread.isIdle()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + //灏忚溅澶勪簬绌洪棽鐘舵�� + if (!shuttleThread.isIdle()) { + News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� + if (!liftProtocol.getHasCar()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//鎻愬崌鏈哄唴鏃犲皬杞� + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� + if (!liftProtocol.getHasTray()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//鎻愬崌鏈哄唴鏃犲皬杞� + } + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + + //鑾峰彇鎻愬崌鏈哄緟鏈轰綅 + String liftStandByLocNo = liftThread.getLiftStandByLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())); + + //鑾峰彇灏忚溅鍒版彁鍗囨満寰呮満琛岃蛋鍛戒护 + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftStandByLocNo, NavigationMapType.DFX.id, assignCommand, shuttleThread); + if (commands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_TRANSPORT_LIFT_OUT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 鎻愬崌鏈鸿嚦鏀捐揣灞傚畬鎴� ==> 灏忚溅杩佸嚭鎻愬崌鏈轰腑 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + return false; + } + return false; + } + + return true; + } + + private void shuttleMoveExecuteTransportLiftPut(WrkMast wrkMast) { + boolean stepMoveSta = this.shuttleMoveExecuteTransportLiftStepCallShuttle(wrkMast);//鍛煎彨灏忚溅鑷冲彇璐х偣 + if (!stepMoveSta) { + return; + } + + boolean stepTransportLiftOutStepMoveSta = this.shuttleMoveExecuteTransportLiftOutStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐� + if (!stepTransportLiftOutStepMoveSta) { + return; + } + + boolean stepLiftToShuttleLev = this.shuttleMoveExecuteTransportLiftOutStepLiftToShuttleLev(wrkMast);//鎻愬崌鏈哄埌灏忚溅灞� + if (!stepLiftToShuttleLev) { + return; + } + + boolean stepIntoLift = this.shuttleMoveExecuteTransportLiftOutStepIntoLift(wrkMast);//灏忚溅杩佸叆鎻愬崌鏈� + if (!stepIntoLift) { + return; + } + + boolean stepOutLift = this.shuttleMoveExecuteTransportLiftOutStepOutLift(wrkMast);//灏忚溅杩佸嚭鎻愬崌鏈� + if (!stepOutLift) { + return; + } + } + + /** + * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮珯鐐� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteTransportLiftStepMoveSta(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------// + Date now = new Date(); + + //灏忚溅绉诲姩鑷崇珯鐐� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 灏忚溅绉诲姩鑷崇珯鐐逛腑 + 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; + } + + //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満 + LiftThread liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo()); + if (liftThread == null) { + News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂叉彁鍗囨満", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo()); + return false;//娌℃湁鍙敤涓旂┖闂茬殑鎻愬崌鏈� + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } + + //鑾峰彇鎻愬崌鏈哄緟鏈轰綅 + String liftStandByLocNo = liftThread.getLiftStandByLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())); + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + + List<ShuttleCommand> commands = new ArrayList<>(); + Integer mapType = NavigationMapType.NORMAL.id; + + if (shuttleProtocol.getCurrentLocNo().equals(liftStandByLocNo)) { + //灏忚溅鍦ㄥ緟鏈轰綅锛岀洿鎺ョЩ鍔ㄥ畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE_TRANSPORT_LIFT.sts);// 灏忚溅绉诲姩鑷崇珯鐐� ==> 灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� + wrkMast.setModiTime(now); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMastService.updateById(wrkMast); + return false; + } + + if (!liftStandByLocNo.equals(wrkMast.getSourceLocNo())) { + //鑾峰彇灏忚溅鍒版彁鍗囨満寰呮満浣嶈璧板懡浠� + List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftStandByLocNo, mapType, assignCommand, shuttleThread); + if (moveCommands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false;//璺緞瑙i攣澶辫触 + } + commands.addAll(moveCommands); + } + + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_SITE_TRANSPORT_LIFT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 322.灏忚溅绉诲姩鑷崇珯鐐� + 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 shuttleMoveExecuteTransportLiftStepLiftToShuttleLev(WrkMast wrkMast) { + //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------// + Date now = new Date(); + //灏忚溅绉诲姩鍒版彁鍗囨満涓� 灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 鎻愬崌鏈鸿嚦灏忚溅灞� + if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_COMPLETE_TRANSPORT_LIFT.sts) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅瀵硅薄涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + LiftThread liftThread = null; + LiftProtocol liftProtocol = null; + if (wrkMast.getLiftNo() == null) { + //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満 + liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo()); + if (liftThread == null) { + News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂叉彁鍗囨満", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo()); + return false;//娌℃湁鍙敤涓旂┖闂茬殑鎻愬崌鏈� + } + + liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo()); + if (liftWrkMast != null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + + wrkMast.setModiTime(now); + wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMastService.updateById(wrkMast); + return false; + } else { + liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + News.info("{}鍙锋彁鍗囨満涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } + + liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", 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;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + + if (!liftThread.isIdle()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.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;//鎻愬崌鏈哄唴鏃犲皬杞� + } + + //鍒ゆ柇鎻愬崌鏈烘ゼ灞� + if (liftProtocol.getLev() == Utils.getLev(shuttleProtocol.getCurrentLocNo())) { + //鎻愬崌鏈哄湪灏忚溅妤煎眰 + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_SHUTTLE_COMPLETE_TRANSPORT_LIFT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� + wrkMast.setModiTime(now); + wrkMastService.updateById(wrkMast); + return false; + } + + //璋冨害鎻愬崌鏈� + //鑾峰彇鎻愬崌鏈哄懡浠� + List<LiftCommand> liftCommands = liftThread.getMoveCommand(wrkMast.getWrkNo(), liftProtocol.getLev(), Utils.getLev(shuttleProtocol.getCurrentLocNo()), LiftCommandModeType.MOVE); + LiftCommand liftCommand = liftCommands.get(0); + + int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿 + liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙� + + 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(LiftCommandModeType.MOVE.id.shortValue()); + + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_SHUTTLE_TRANSPORT_LIFT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 鎻愬崌鏈鸿嚦灏忚溅灞� + wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); +// //瑙﹀彂閫氱煡 +// notifyUtils.notify(String.valueOf(SlaveType.Lift), liftProtocol.getLiftNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING_IN_LIFT); + return false; + } + return false; + } + + return true; + } + + /** + * 灏忚溅杩佺Щ-灏忚溅杩佸叆鎻愬崌鏈� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteTransportLiftStepIntoLift(WrkMast wrkMast) { + //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------// + Date now = new Date(); + //灏忚溅绉诲姩鍒版彁鍗囨満涓� 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� ==> 灏忚溅杩佸叆鎻愬崌鏈轰腑 + if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_TO_SHUTTLE_COMPLETE_TRANSPORT_LIFT.sts) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅瀵硅薄涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + if (wrkMast.getLiftNo() == null) { + News.info("{}浠诲姟锛屾湭缁戝畾鎻愬崌鏈猴紝绂佹娲惧彂", wrkMast.getWrkNo()); + return false; + } + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + News.info("{}鍙锋彁鍗囨満涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", 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;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + + if (!liftThread.isIdle()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + //灏忚溅澶勪簬绌洪棽鐘舵�� + if (!shuttleThread.isIdle()) { + News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� + if (liftProtocol.getHasCar()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//鎻愬崌鏈哄唴鏃犲皬杞� + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� + if (!liftProtocol.getHasTray()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//鎻愬崌鏈哄唴鏃犲皬杞� + } + + //鍒ゆ柇鎻愬崌鏈烘ゼ灞� + if (liftProtocol.getLev() != Utils.getLev(shuttleProtocol.getCurrentLocNo())) { + //鎻愬崌鏈轰笉鍦ㄥ皬杞︽ゼ灞� + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満涓庡皬杞︿笉鍦ㄥ悓涓�灞傦紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//绛夊緟鎻愬崌鏈哄埌灏忚溅妤煎眰 + } + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + + //鑾峰彇灏忚溅鍒版彁鍗囨満琛岃蛋鍛戒护 + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftThread.getLiftLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); + if (commands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_TRANSPORT_LIFT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� ==> 灏忚溅杩佸叆鎻愬崌鏈轰腑 + wrkMast.setModiTime(now); + 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_IN_LIFT); + return false; + } + return false; + } + + return true; + } + + /** + * 灏忚溅杩佺Щ-鎻愬崌鏈哄埌鏀捐揣灞� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteTransportLiftStepLiftToTargetLev(WrkMast wrkMast) { + //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------// + Date now = new Date(); + //灏忚溅绉诲姩鍒版彁鍗囨満涓� 灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 鎻愬崌鏈鸿嚦鏀捐揣灞� + if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT_COMPLETE_TRANSPORT_LIFT.sts) { + if (wrkMast.getLiftNo() == null) { + News.info("{}浠诲姟鏈粦瀹氭彁鍗囨満", wrkMast.getWrkNo()); + return false; + } + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + News.info("{}鍙锋彁鍗囨満涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", 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;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + + if (!liftThread.isIdle()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.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;//鎻愬崌鏈哄唴鏃犲皬杞� + } + + if (liftProtocol.getLev() == Utils.getLev(wrkMast.getLocNo())) { + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_TARGET_COMPLETE_TRANSPORT_LIFT.sts);// 灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 鎻愬崌鏈鸿嚦鏀捐揣灞傚畬鎴� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + wrkMastService.updateById(wrkMast); + return false; + } + + //璋冨害鎻愬崌鏈� + //鑾峰彇鎻愬崌鏈哄懡浠� + List<LiftCommand> liftCommands = liftThread.getMoveWithShuttleCommand(wrkMast.getWrkNo(), liftProtocol.getLev(), Utils.getLev(wrkMast.getLocNo()), LiftCommandModeType.MOVE); + LiftCommand liftCommand = liftCommands.get(0); + + int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿 + liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙� + + 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(LiftCommandModeType.MOVE.id.shortValue()); + + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_TARGET_TRANSPORT_LIFT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 鎻愬崌鏈鸿嚦鏀捐揣灞� + wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); +// //瑙﹀彂閫氱煡 +// notifyUtils.notify(String.valueOf(SlaveType.Lift), liftProtocol.getLiftNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING_IN_LIFT); + return false; + } + return false; + } + + return true; + } + + /** + * 灏忚溅杩佺Щ-灏忚溅杩佸嚭鎻愬崌鏈� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteTransportLiftStepOutLift(WrkMast wrkMast) { + //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------// + Date now = new Date(); + //灏忚溅绉诲姩鍒版彁鍗囨満涓� 鎻愬崌鏈鸿嚦鏀捐揣灞傚畬鎴� ==> 灏忚溅杩佸嚭鎻愬崌鏈轰腑 + if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_TO_TARGET_COMPLETE_TRANSPORT_LIFT.sts) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅瀵硅薄涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + if (wrkMast.getLiftNo() == null) { + News.info("{}浠诲姟锛屾彁鍗囨満鏈粦瀹氾紝绂佹娲惧彂", wrkMast.getWrkNo()); + 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;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀵硅薄涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + if (!liftThread.isIdle()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + //灏忚溅澶勪簬绌洪棽鐘舵�� + if (!shuttleThread.isIdle()) { + News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� + if (!liftProtocol.getHasCar()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//鎻愬崌鏈哄唴鏃犲皬杞� + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� + if (!liftProtocol.getHasTray()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//鎻愬崌鏈哄唴鏃犲皬杞� + } + + //鍒ゆ柇鎻愬崌鏈烘ゼ灞� + if (liftProtocol.getLev() != Utils.getLev(wrkMast.getLocNo())) { + //鎻愬崌鏈轰笉鍦ㄦ斁璐у眰 + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屼笉鍦ㄦ斁璐у眰锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false; + } + + if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) { + 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); + return false; + } + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + + //鑾峰彇鎻愬崌鏈哄緟鏈轰綅 + String liftStandByLocNo = liftThread.getLiftStandByLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())); + + //鑾峰彇灏忚溅鍒版彁鍗囨満寰呮満琛岃蛋鍛戒护 + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftStandByLocNo, NavigationMapType.DFX.id, 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; + } + commands.addAll(0, liftCommand); + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_TRANSPORT_LIFT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 鎻愬崌鏈鸿嚦鏀捐揣灞傚畬鎴� ==> 灏忚溅杩佸嚭鎻愬崌鏈轰腑 + wrkMast.setModiTime(now); + 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_IN_LIFT); + return false; + } + return false; + } + + return true; + } + + /** + * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteTransportLiftStepMoveLoc(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑-----------------------------------------// + Date now = new Date(); + + //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 灏忚溅鏀捐揣涓� + if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT_COMPLETE_TRANSPORT_LIFT.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; + } + + 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 = new ArrayList<>(); + Integer mapType = NavigationMapType.DFX.id; + + List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), mapType, assignCommand, shuttleThread); + if (moveCommands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false;//璺緞璁$畻澶辫触 + } + commands.addAll(moveCommands); + + List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false); + if (liftCommand == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + commands.addAll(liftCommand); + + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE_TRANSPORT_LIFT.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 灏忚溅鏀捐揣涓� + wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + } + } + return true; } /** @@ -2848,109 +3176,216 @@ //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------// Date now = new Date(); - //灏忚溅绉诲姩鑷崇珯鐐� 101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅绉诲姩鑷崇珯鐐逛腑 - if (wrkMast.getWrkSts() == 101) { + //灏忚溅绉诲姩鑷崇珯鐐� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐逛腑 + if (wrkMast.getWrkSts() == WrkStsType.NEW_MOVE.sts) { //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { return false; } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { return false; } //灏忚溅澶勪簬绌洪棽鐘舵�� - if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) { - News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + if (!shuttleThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } - //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻 - if (shuttleProtocol.getToken() != 0) { - News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 - } - - if (Utils.getLev(wrkMast.getLocNo()) == shuttleProtocol.getPoint().getZ()) { + if (Utils.getLev(wrkMast.getLocNo()) == Utils.getLev(shuttleProtocol.getCurrentLocNo())) { //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛屼笉闇�瑕侀�氳繃鎻愬崌鏈鸿皟搴� - wrkMast.setWrkSts(109L);// 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓� + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);// 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓� wrkMast.setModiTime(now); - shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗� - if (wrkMastMapper.updateById(wrkMast) > 0) { + if (wrkMastService.updateById(wrkMast)) { //涓嬪彂浠诲姟 - return true;//鐩存帴杩涘叆109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓� + return true;//鐩存帴杩涘叆309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓� } return false; } - //鑾峰彇婧愯緭閫佺珯 - LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); - if (liftSta == null) { - return false;//鎵句笉鍒扮珯鐐� + //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満 + LiftThread liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo()); + if (liftThread == null) { + News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂叉彁鍗囨満", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo()); + return false;//娌℃湁鍙敤涓旂┖闂茬殑鎻愬崌鏈� } - //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) - WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftSta.getLiftNo()); - if (liftWrkMast != null) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getLiftNo()); - return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; } - //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** - List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(wrkMast.getStaNo()); - if (targetNodes == null) { - return false;//鏈幏鍙栧埌鑺傜偣 - } - boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(wrkMast.getLocNo()), null); - if (!checkPathIsAvailable) { - News.info("{}浠诲姟锛寋}灏忚溅锛岀洰鏍囩珯鐐硅矾寰勮鍗犵敤锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢� - } - //灏濊瘯閿佸畾鐩爣绔欒矾寰� - boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo().intValue(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - if (!result2) { - News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//璺緞閿佸畾澶辫触 - } - //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** - - //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠� - NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.NORMAL.id); - if (result == null) { - //璺緞鑾峰彇澶辫触锛岄渶瑕佽В閿佷笂闈㈤攣瀹氱殑璺緞 - //灏濊瘯瑙i攣鐩爣绔欒矾寰� - boolean result3 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo().intValue(), targetNodes, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿� - if (!result3) { - News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮В閿佸け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//璺緞瑙i攣澶辫触 - } - News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//璺緞瑙i攣澶辫触 - } - List<NyShuttleHttpCommand> commands = result.getCommands(); + //鑾峰彇鎻愬崌鏈哄緟鏈轰綅 + String liftStandByLocNo = liftThread.getLiftStandByLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())); ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟 - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� assignCommand.setAuto(true);//鑷姩妯″紡 - assignCommand.setCommands(commands); - assignCommand.setNodes(result.getNodes()); - wrkMast.setWrkSts(102L);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅绉诲姩鑷崇珯鐐� + List<ShuttleCommand> commands = new ArrayList<>(); + Integer mapType = NavigationMapType.NORMAL.id; + + if (!liftStandByLocNo.equals(wrkMast.getSourceLocNo())) { + //鑾峰彇灏忚溅鍒版彁鍗囨満寰呮満浣嶈璧板懡浠� + List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftStandByLocNo, mapType, assignCommand, shuttleThread); + if (moveCommands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false;//璺緞瑙i攣澶辫触 + } + commands.addAll(moveCommands); + } else { + //灏忚溅鍦ㄥ緟鏈轰綅锛岀洿鎺ョЩ鍔ㄥ畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);// 302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� + wrkMast.setModiTime(now); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMastService.updateById(wrkMast); + return false; + } + + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_SITE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐� wrkMast.setModiTime(now); - wrkMast.setLiftNo(liftSta.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� - shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗� - if (wrkMastMapper.updateById(wrkMast) > 0) { + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + if (wrkMastService.updateById(wrkMast)) { //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + 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 shuttleMoveExecuteStepMoveSta(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; +// } +// +// //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満 +// LiftThread liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo()); +// if (liftThread == null) { +// News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂叉彁鍗囨満", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo()); +// return false;//娌℃湁鍙敤涓旂┖闂茬殑鎻愬崌鏈� +// } +// +// LiftProtocol liftProtocol = liftThread.getStatus(); +// if (liftProtocol == null) { +// News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", wrkMast.getLiftNo()); +// return false; +// } +// +// //鑾峰彇鎻愬崌鏈轰綅 +// String liftLocNo = liftThread.getLiftLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())); +// //鑾峰彇鎻愬崌鏈哄緟鏈轰綅 +// String liftStandByLocNo = liftThread.getLiftStandByLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())); +// +// if (!liftLocNo.equals(wrkMast.getLocNo()) && !liftLocNo.equals(shuttleProtocol.getCurrentLocNo())) { +// 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; +// } +// } +// +// if (liftLocNo.equals(shuttleProtocol.getCurrentLocNo())) { +// //灏忚溅鍦ㄦ彁鍗囨満鍐� +// wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts);// 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 310.鎻愬崌鏈烘惉杩愬畬鎴� +// wrkMast.setModiTime(now); +// if (wrkMastService.updateById(wrkMast)) { +// //涓嬪彂浠诲姟 +// return true;//鐩存帴杩涘叆309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓� +// } +// return false; +// } +// +// ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); +// assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� +// assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 +// assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� +// assignCommand.setAuto(true);//鑷姩妯″紡 +// +// List<ShuttleCommand> commands = new ArrayList<>(); +// Integer mapType = NavigationMapType.NORMAL.id; +// //鎼繍璐х墿浠诲姟 +// if ("TRANSPORT".equals(wrkMast.getMk())) { +// mapType = NavigationMapType.DFX.id; +// +// List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); +// if (liftCommand == null) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); +// return false; +// } +// commands.addAll(liftCommand); +// } +// +// if (!liftStandByLocNo.equals(wrkMast.getSourceLocNo())) { +// //鑾峰彇灏忚溅鍒版彁鍗囨満寰呮満浣嶈璧板懡浠� +// List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftStandByLocNo, mapType, assignCommand, shuttleThread); +// if (moveCommands == null) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); +// return false;//璺緞瑙i攣澶辫触 +// } +// commands.addAll(moveCommands); +// }else { +// //灏忚溅鍦ㄥ緟鏈轰綅锛岀洿鎺ョЩ鍔ㄥ畬鎴� +// wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);// 302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� +// wrkMast.setModiTime(now); +// wrkMast.setSystemMsg("");//娓呯┖娑堟伅 +// wrkMastService.updateById(wrkMast); +// return false; +// } +// +// assignCommand.setCommands(commands); +// +// wrkMast.setWrkSts(WrkStsType.MOVE_SITE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐� +// 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; +// } /** * 灏忚溅杩佺Щ-灏忚溅杩佸叆鎻愬崌鏈� @@ -2960,167 +3395,156 @@ private boolean shuttleMoveExecuteStepIntoLift(WrkMast wrkMast) { //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------// Date now = new Date(); - - //灏忚溅绉诲姩鍒版彁鍗囨満涓� 103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 104.灏忚溅杩佸叆鎻愬崌鏈轰腑 - if (wrkMast.getWrkSts() == 103) { - //鑾峰彇婧愮珯 - LiftStaProtocol sourceLiftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); - if (sourceLiftSta == null) { - return false;//鎵句笉鍒扮珯鐐� + //灏忚溅绉诲姩鍒版彁鍗囨満涓� 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 304.灏忚溅杩佸叆鎻愬崌鏈轰腑 + if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_COMPLETE.sts) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; } - //鑾峰彇鐩爣杈撻�佺珯 - LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); - if (liftSta == null) { - return false;//鎵句笉鍒扮珯鐐� + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅瀵硅薄涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; } - //鑾峰彇鎻愬崌鏈烘暟鎹� - BasLift basLift = basLiftService.selectById(liftSta.getLiftNo()); - if (basLift == null) { - return false;//娌℃湁鎻愬崌鏈烘暟鎹� - } + LiftThread liftThread = null; + LiftProtocol liftProtocol = null; + if (wrkMast.getLiftNo() == null) { + //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満 + liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo()); + if (liftThread == null) { + News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂叉彁鍗囨満", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo()); + return false;//娌℃湁鍙敤涓旂┖闂茬殑鎻愬崌鏈� + } - if (basLift.getPoint() == null) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾病鏈夋彁鍗囨満鐐逛綅鍧愭爣锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), basLift.getLiftNo()); - return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍� + liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo()); + if (liftWrkMast != null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + + wrkMast.setModiTime(now); + wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMastService.updateById(wrkMast); + return false; + } else { + liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + News.info("{}鍙锋彁鍗囨満涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } + + liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", wrkMast.getLiftNo()); + return false; + } } //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 - WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(basLift.getLiftNo()); + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); if (liftWrkMast != null) { if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), basLift.getLiftNo()); + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� } } - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSta.getLiftNo()); - if (liftThread == null) { - return false; - } - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); - if (liftProtocol == null) { - return false; - } - - if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), basLift.getLiftNo()); - return false; - } - - //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - if (shuttleThread == null) { - return false; - } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); - if (shuttleProtocol == null) { + if (!liftThread.isIdle()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false; } //灏忚溅澶勪簬绌洪棽鐘舵�� - if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) { + if (!shuttleThread.isIdle()) { News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } - //灏忚溅浠ょ墝鏄惁琚换鍔$嫭鍗� - if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { - News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞︿护鐗岃鐙崰锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false; + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� + if (liftProtocol.getHasCar()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//鎻愬崌鏈哄唴鏃犲皬杞� } //鍒ゆ柇鎻愬崌鏈烘ゼ灞� - if (liftProtocol.getLev().intValue() != shuttleProtocol.getPoint().getZ()) { + if (liftProtocol.getLev() != Utils.getLev(shuttleProtocol.getCurrentLocNo())) { //鎻愬崌鏈轰笉鍦ㄥ皬杞︽ゼ灞� //璋冨害鎻愬崌鏈� - if (liftProtocol.getToken() != 0) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満浠ょ墝琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); - return false;//鎻愬崌鏈轰护鐗岃鍗犵敤 - } - - //鑾峰彇鎻愬崌鏈哄懡浠わ紝璋冨害鎻愬崌鏈哄埌婧愮珯浣嶇疆 - NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_CAR.id, sourceLiftSta.getStaNo(), sourceLiftSta.getStaNo(), wrkMast.getWrkNo()); + //鑾峰彇鎻愬崌鏈哄懡浠� + List<LiftCommand> liftCommands = liftThread.getMoveCommand(wrkMast.getWrkNo(), liftProtocol.getLev(), Utils.getLev(shuttleProtocol.getCurrentLocNo()), LiftCommandModeType.MOVE); + LiftCommand liftCommand = liftCommands.get(0); 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);//鏇存崲闅忔満浠诲姟鍙� + liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙� - ArrayList<NyLiftCommand> commands = new ArrayList<>(); + ArrayList<LiftCommand> commands = new ArrayList<>(); commands.add(liftCommand); //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 LiftAssignCommand assignCommand = new LiftAssignCommand(); assignCommand.setCommands(commands); - assignCommand.setLiftNo(liftProtocol.getLiftNo()); + assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue()); assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); - assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_CAR.id.shortValue()); - assignCommand.setAuto(false); + assignCommand.setTaskMode(LiftCommandModeType.MOVE.id.shortValue()); - wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤 - wrkMast.setModiTime(now); - liftProtocol.setToken(wrkMast.getShuttleNo());//鎻愬崌鏈轰护鐗岀粦瀹氬綋鍓嶅皬杞� - if (wrkMastMapper.updateById(wrkMast) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); - } + //涓嬪彂浠诲姟 + liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); return false;//绛夊緟鎻愬崌鏈哄埌灏忚溅妤煎眰 } - if (liftProtocol.getToken() == 0) {//鎻愬崌鏈轰护鐗屾湭琚崰鐢� - //鐙崰鎻愬崌鏈� - liftProtocol.setToken(wrkMast.getShuttleNo()); - return false;//绛夊緟涓嬩竴娆℃墽琛� + //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** + List<NavigateNode> targetNodes = liftThread.getLiftStaNodes(Utils.getLev(wrkMast.getLocNo())); + if (targetNodes == null) { + return false;//鏈幏鍙栧埌鑺傜偣 } - - //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅 - if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満浠ょ墝琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); - return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� + boolean checkPathIsAvailable = navigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo())); + if (!checkPathIsAvailable) { + News.info("{}浠诲姟锛寋}灏忚溅锛岀洰鏍囩珯鐐硅矾寰勮鍗犵敤锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢� } - - //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗� - if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { - 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;//璺緞閿佸畾澶辫触 } - - //绔欑偣鑺傜偣 - NavigateNode staNode = NavigatePositionConvert.locNoToNode(sourceLiftSta.getLocNo()); - - //鎻愬崌鏈鸿妭鐐� - NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY()); - liftNode.setZ(staNode.getZ()); - - //鑾峰彇灏忚溅杩涙彁鍗囨満琛岃蛋鍛戒护 - NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), staNode, liftNode, true); - List<NyShuttleHttpCommand> commands = new ArrayList<>(); - commands.add(moveCommand); - List<NavigateNode> nodes = new ArrayList<>();//琛岃蛋鑺傜偣璺緞 - nodes.add(staNode); - nodes.add(liftNode); + //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟 - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� assignCommand.setAuto(true);//鑷姩妯″紡 - assignCommand.setCommands(commands); - assignCommand.setNodes(nodes); - wrkMast.setWrkSts(104L);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 104.灏忚溅杩佸叆鎻愬崌鏈轰腑 + //鑾峰彇灏忚溅鍒版彁鍗囨満琛岃蛋鍛戒护 + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftThread.getLiftLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); + if (commands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 304.灏忚溅杩佸叆鎻愬崌鏈轰腑 wrkMast.setModiTime(now); - wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤 - liftProtocol.setToken(wrkMast.getShuttleNo());//鎻愬崌鏈轰护鐗岀粦瀹氬綋鍓嶅皬杞� - if (wrkMastMapper.updateById(wrkMast) > 0) { + if (wrkMastService.updateById(wrkMast)) { //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + //瑙﹀彂閫氱煡 + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING_IN_LIFT); return false; } return false; @@ -3128,6 +3552,176 @@ return true; } + +// /** +// * 灏忚溅杩佺Щ-灏忚溅杩佸叆鎻愬崌鏈� +// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false +// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue +// */ +// private boolean shuttleMoveExecuteStepIntoLift(WrkMast wrkMast) { +// //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------// +// Date now = new Date(); +// +// //灏忚溅绉诲姩鍒版彁鍗囨満涓� 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 304.灏忚溅杩佸叆鎻愬崌鏈轰腑 +// if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_COMPLETE.sts) { +// //鑾峰彇鍥涘悜绌挎杞︾嚎绋� +// ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); +// if (shuttleThread == null) { +// News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); +// return false; +// } +// +// ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); +// if (shuttleProtocol == null) { +// News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅瀵硅薄涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); +// return false; +// } +// +// LiftThread liftThread = null; +// LiftProtocol liftProtocol = null; +// if (wrkMast.getLiftNo() == null) { +// //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満 +// liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo()); +// if (liftThread == null) { +// News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂叉彁鍗囨満", shuttleProtocol.getShuttleNo(), shuttleProtocol.getCurrentLocNo()); +// return false;//娌℃湁鍙敤涓旂┖闂茬殑鎻愬崌鏈� +// } +// +// liftProtocol = liftThread.getStatus(); +// if (liftProtocol == null) { +// News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", wrkMast.getLiftNo()); +// return false; +// } +// +// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) +// WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo()); +// if (liftWrkMast != null) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); +// return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� +// } +// +// wrkMast.setModiTime(now); +// wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� +// wrkMast.setSystemMsg("");//娓呯┖娑堟伅 +// wrkMastService.updateById(wrkMast); +// return false; +// }else { +// liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); +// if (liftThread == null) { +// News.info("{}鍙锋彁鍗囨満涓嶅瓨鍦�", wrkMast.getLiftNo()); +// return false; +// } +// +// liftProtocol = liftThread.getStatus(); +// if (liftProtocol == null) { +// News.info("{}鍙锋彁鍗囨満瀵硅薄涓嶅瓨鍦�", 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;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� +// } +// } +// +// if (!liftThread.isIdle()) { +// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); +// return false; +// } +// +// //灏忚溅澶勪簬绌洪棽鐘舵�� +// if (!shuttleThread.isIdle()) { +// News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); +// return false; +// } +// +// //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� +// if (liftProtocol.getHasCar()) { +// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); +// return false;//鎻愬崌鏈哄唴鏃犲皬杞� +// } +// +// //鍒ゆ柇鎻愬崌鏈烘ゼ灞� +// if (liftProtocol.getLev() != Utils.getLev(shuttleProtocol.getCurrentLocNo())) { +// //鎻愬崌鏈轰笉鍦ㄥ皬杞︽ゼ灞� +// //璋冨害鎻愬崌鏈� +// +// //鑾峰彇鎻愬崌鏈哄懡浠� +// List<LiftCommand> liftCommands = liftThread.getMoveCommand(wrkMast.getWrkNo(), liftProtocol.getLev(), Utils.getLev(shuttleProtocol.getCurrentLocNo()), LiftCommandModeType.MOVE); +// LiftCommand liftCommand = liftCommands.get(0); +// +// int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿 +// liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙� +// +// 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(LiftCommandModeType.MOVE.id.shortValue()); +// +// //涓嬪彂浠诲姟 +// liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); +// return false;//绛夊緟鎻愬崌鏈哄埌灏忚溅妤煎眰 +// } +// +// if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) { +// //璺ㄥ眰閿佸畾璺緞 +// //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** +// List<NavigateNode> targetNodes = liftThread.getLiftStaNodes(Utils.getLev(wrkMast.getLocNo())); +// 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;//璺緞閿佸畾澶辫触 +// } +// //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** +// } +// +// ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); +// assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� +// assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 +// assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� +// assignCommand.setAuto(true);//鑷姩妯″紡 +// +// //鑾峰彇灏忚溅鍒版彁鍗囨満琛岃蛋鍛戒护 +// List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftThread.getLiftLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo())), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); +// if (commands == null) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); +// return false; +// } +// +// assignCommand.setCommands(commands); +// +// wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 304.灏忚溅杩佸叆鎻愬崌鏈轰腑 +// wrkMast.setModiTime(now); +// 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_IN_LIFT); +// return false; +// } +// return false; +// } +// +// return true; +// } /** * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愪腑 @@ -3138,34 +3732,32 @@ //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------// Date now = new Date(); - //鎻愬崌鏈烘惉杩愪腑 105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 106.鎻愬崌鏈烘惉杩愪腑 - if (wrkMast.getWrkSts() == 105) { + //鎻愬崌鏈烘惉杩愪腑 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑 + if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT_COMPLETE.sts) { + if (wrkMast.getLiftNo() == null) { + News.info("{}浠诲姟锛屾湭缁戝畾鎻愬崌鏈猴紝鏁版嵁寮傚父锛岀姝㈡淳鍙�", wrkMast.getWrkNo()); + return false; + } LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); if (liftThread == null) { return false; } - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + LiftProtocol liftProtocol = liftThread.getStatus(); if (liftProtocol == null) { return false; } - if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + if (!liftThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false; } //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 - WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); if (liftWrkMast != null) { if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� } - } - - //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅 - if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満浠ょ墝鍜屽綋鍓嶅皬杞︿笉涓�鑷达紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); - return false;//鎻愬崌鏈轰护鐗屽拰褰撳墠灏忚溅涓嶄竴鑷达紝绂佹娲惧彂 } //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� @@ -3175,166 +3767,157 @@ } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false; } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { + News.info("{}浠诲姟锛寋}鍙峰皬杞︼紝灏忚溅瀵硅薄涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false; - } - - //灏忚溅澶勪簬绌洪棽鐘舵�� - if (!shuttleProtocol.isIdleNoCharge()) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); - return false; - } - - //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗� - if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { - News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀綋鍓嶄换鍔℃湭琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false; - } - - //鑾峰彇婧愮珯 - LiftStaProtocol sourceLiftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); - //鑾峰彇鐩爣绔� - LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); - if (sourceLiftSta == null || liftSta == null) { - News.info("{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo()); - return false;//缂哄皯绔欑偣淇℃伅 } //鑾峰彇鎻愬崌鏈哄懡浠� - NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_CAR.id, sourceLiftSta.getStaNo(), liftSta.getStaNo(), wrkMast.getWrkNo()); + List<LiftCommand> liftCommands = liftThread.getMoveCommand(wrkMast.getWrkNo(), Utils.getLev(wrkMast.getSourceLocNo()), Utils.getLev(wrkMast.getLocNo()), LiftCommandModeType.MOVE); + LiftCommand liftCommand = liftCommands.get(0); - ArrayList<NyLiftCommand> commands = new ArrayList<>(); + int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿 + liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙� + + ArrayList<LiftCommand> commands = new ArrayList<>(); commands.add(liftCommand); //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 LiftAssignCommand assignCommand = new LiftAssignCommand(); assignCommand.setCommands(commands); - assignCommand.setLiftNo(liftProtocol.getLiftNo()); + assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue()); assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); - assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_CAR.id.shortValue()); + assignCommand.setTaskMode(LiftCommandModeType.MOVE.id.shortValue()); - wrkMast.setWrkSts(106L);//鎻愬崌鏈烘惉杩愪腑 105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 106.鎻愬崌鏈烘惉杩愪腑 - wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤 + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMast.setModiTime(now); - if (wrkMastMapper.updateById(wrkMast) > 0) { + if (wrkMastService.updateById(wrkMast)) { //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); + liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); + //瑙﹀彂閫氱煡 + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), liftProtocol.getLiftNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.LIFT_MOVE_SHUTTLE); } - } return true; } /** - * 灏忚溅杩佺Щ-灏忚溅杩佸嚭鎻愬崌鏈� + * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍� * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ - private boolean shuttleMoveExecuteStepOutLift(WrkMast wrkMast) { - //--------------------------------------灏忚溅杩佸嚭鎻愬崌鏈�-----------------------------------------// + private boolean shuttleMoveExecuteStepUpdateShuttleLocation(WrkMast wrkMast) { + //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------// Date now = new Date(); - //灏忚溅绉诲姩鍒版彁鍗囨満涓� 107.鎻愬崌鏈烘惉杩愬畬鎴� ==> 108.灏忚溅杩佸嚭鎻愬崌鏈轰腑 - if (wrkMast.getWrkSts() == 107) { + + //鎻愬崌鏈烘惉杩愪腑 307.鎻愬崌鏈烘惉杩愬畬鎴� ==> 308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 + if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts) { + if (wrkMast.getLiftNo() == null) { + News.info("{}浠诲姟锛屾湭缁戝畾鎻愬崌鏈猴紝鏁版嵁寮傚父锛岀姝㈡淳鍙�", wrkMast.getWrkNo()); + return false; + } LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); if (liftThread == null) { return false; } - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + LiftProtocol liftProtocol = liftThread.getStatus(); if (liftProtocol == null) { return false; } - if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); - return false; - } - - //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 - WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); - if (liftWrkMast != null) { - if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); - return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� - } - } - - //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅 - if (!liftProtocol.getToken().equals(wrkMast.getShuttleNo())) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満浠ょ墝鍜屽綋鍓嶅皬杞︿笉涓�鑷达紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); - return false;//鎻愬崌鏈轰护鐗屽拰褰撳墠灏忚溅涓嶄竴鑷达紝绂佹娲惧彂 - } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { return false; } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { return false; } //灏忚溅澶勪簬绌洪棽鐘舵�� - if (!shuttleProtocol.isIdleNoCharge()) { - News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + if (!shuttleThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } - //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗� - if (!shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { - News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞︿护鐗岃鐙崰锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) { + 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); return false; } - //鑾峰彇鐩爣绔� - LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); - if (liftSta == null) { - return false;//鎵句笉鍒扮珯鐐� + //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆 + List<NavigateNode> targetNodes = liftThread.getLiftStaNodes(Utils.getLev(wrkMast.getLocNo())); + + if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) { + return false;//灏忚溅鏈埌杈剧洰鏍囧眰 } - //鑾峰彇鎻愬崌鏈烘暟鎹� - BasLift basLift = basLiftService.selectById(liftProtocol.getLiftNo().intValue()); - if (basLift == null) { - return false;//娌℃湁鎻愬崌鏈烘暟鎹� - } - if (basLift.getPoint() == null) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛岀己灏戞彁鍗囨満鐐逛綅鍧愭爣锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); - return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍� + //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆 + if (targetNodes == null) { + return false;//鏈幏鍙栧埌鑺傜偣 } - NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY()); - liftNode.setZ(liftSta.getLev()); - - List<NyShuttleHttpCommand> commands = new ArrayList<>(); - //鑾峰彇灏忚溅鏇存柊妤煎眰鍛戒护 - NyShuttleHttpCommand updateZCommand = NyHttpUtils.getUpdateZCommand(shuttleThread.getSlave().getId(), liftProtocol.getLev().intValue(), wrkMast.getWrkNo()); - commands.add(updateZCommand); - - //鑾峰彇灏忚溅鍑烘彁鍗囨満琛岃蛋鍛戒护 - NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), liftNode, NavigatePositionConvert.locNoToNode(liftSta.getLocNo()), false); - commands.add(moveCommand);//娣诲姞灏忚溅杩佸嚭鎻愬崌鏈哄懡浠� ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟 - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id); + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� assignCommand.setAuto(true);//鑷姩妯″紡 - assignCommand.setCommands(commands); - assignCommand.setNodes(null); + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣� + assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅 - wrkMast.setWrkSts(108L);//灏忚溅杩佸嚭鎻愬崌鏈轰腑 107.鎻愬崌鏈烘惉杩愬畬鎴� ==> 108.灏忚溅杩佸嚭鎻愬崌鏈轰腑 - wrkMast.setModiTime(now); - if (wrkMastMapper.updateById(wrkMast) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + ArrayList<ShuttleCommand> commands = new ArrayList<>(); + int targetLev = Utils.getLev(wrkMast.getLocNo()); + //璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟 + ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟 + for (NavigateNode node : targetNodes) { + whiteList.add(new int[]{node.getX(), node.getY()}); + } + + //鑾峰彇灏忚溅鍑烘彁鍗囨満琛岃蛋鍛戒护 + List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(liftThread.getLiftLocNo(targetLev), liftThread.getLiftStandByLocNo(targetLev), NavigationMapType.NORMAL.id, whiteList, assignCommand, shuttleThread); + if (moveCommands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } - return false; + + commands.addAll(moveCommands); + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT.sts);//灏忚溅杩佸嚭鎻愬崌鏈轰腑 + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + //瑙﹀彂閫氱煡 + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), liftProtocol.getLiftNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING_OUT_LIFT); + } } return true; } @@ -3348,180 +3931,97 @@ //--------------------------------------灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑-----------------------------------------// Date now = new Date(); - //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓� - if (wrkMast.getWrkSts() == 109) { + //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓� + if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts) { + + List<NavigateNode> targetNodes = null; + if (wrkMast.getLiftNo() != null) { + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); + if (liftWrkMast != null) { + if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + } + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満绾跨▼涓嶅瓨鍦紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + + //灏忚溅鐩爣灏辨槸鎻愬崌鏈轰綅缃紝鐩存帴璁ゅ畾灏忚溅绉诲姩浠诲姟瀹屾垚 + if (liftThread.getLiftLocNo(Utils.getLev(wrkMast.getLocNo())).equals(wrkMast.getLocNo())) { + wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);//311.灏忚溅绉诲姩瀹屾垚 + wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + wrkMast.setModiTime(now); + wrkMastService.updateById(wrkMast); + return false; + } + +// //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆 +// targetNodes = liftThread.getLiftStaNodes(Utils.getLev(wrkMast.getLocNo())); + } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { return false; } - NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { return false; } //灏忚溅澶勪簬绌洪棽鐘舵�� - if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) { - News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + if (!shuttleThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } - - //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔� - if (shuttleProtocol.getToken() != 0 && !shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { - News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞︿护鐗岃鐙崰锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false; - } - -// //璺ㄦゼ灞傜Щ鍔ㄤ换鍔� -// if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) { -// //鑾峰彇鐩爣绔� -// LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); -// if (liftSta == null) { -// return false;//鎵句笉鍒扮珯鐐� -// } -// -// //*************灏濊瘯瑙i攣鐩爣绔欒矾寰�*************** -// List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo()); -// if (targetNodes == null) { -// return false;//鏈幏鍙栧埌鑺傜偣 -// } -// //灏濊瘯瑙i攣鐩爣绔欒矾寰� -// boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿� -// if (!result) { -// return false;//璺緞瑙i攣澶辫触 -// } -// //*************灏濊瘯瑙i攣鐩爣绔欒矾寰�*************** -// } //灏忚溅宸茬粡鍦ㄧ洰鏍囧簱浣嶏紝鐩存帴璁ゅ畾灏忚溅绉诲姩浠诲姟瀹屾垚 if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) { - if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { - //閲婃斁灏忚溅浠ょ墝 - shuttleProtocol.setToken(0); - } - wrkMast.setWrkSts(111L);//111.灏忚溅绉诲姩瀹屾垚 + wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);//311.灏忚溅绉诲姩瀹屾垚 wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� wrkMast.setModiTime(now); - wrkMastMapper.updateById(wrkMast); - - shuttleProtocol.setShuttleNo((short) 0);//閲婃斁灏忚溅 - shuttleProtocol.setToken(0);//閲婃斁灏忚溅 - - if (wrkMast.getWrkSts() == 111) { - // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� - if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) { - log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo()); - } - // 鍒犻櫎宸ヤ綔涓绘。 - if (!wrkMastService.deleteById(wrkMast)) { - log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo()); - } - } + wrkMastService.updateById(wrkMast); return false; } - NyShuttleOperaResult result = 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()}); - } - result = NyShuttleOperaUtils.getStartToTargetCommandsByWhites(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, whiteList); - }else { - //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠� - result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id); - } - - if (result == null) { - return false;//璺緞璁$畻澶辫触 - } - List<NyShuttleHttpCommand> commands = result.getCommands(); - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟 - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� assignCommand.setAuto(true);//鑷姩妯″紡 - assignCommand.setCommands(commands); - assignCommand.setNodes(result.getNodes()); assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣� assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅 - 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().intValue())) { - liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗� - } + List<ShuttleCommand> commands = new ArrayList<>(); + List<ShuttleCommand> liftCommand = null; + Integer mapType = NavigationMapType.NORMAL.id; + + List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), mapType, assignCommand, shuttleThread); + if (moveCommands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false;//璺緞璁$畻澶辫触 } - wrkMast.setWrkSts(110L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓� + commands.addAll(moveCommands); + + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓� wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMast.setModiTime(now); - if (wrkMastMapper.updateById(wrkMast) > 0) { + if (wrkMastService.updateById(wrkMast)) { //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); } } 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