From 62b1f39e60f64ec4e05b21d11af3e36f5891a91a Mon Sep 17 00:00:00 2001 From: zc <zc@123> Date: 星期二, 29 四月 2025 20:10:27 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 3487 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 1,728 insertions(+), 1,759 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 dc1bfb5..3ac2728 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -1,31 +1,48 @@ package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +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.SearchLocParam; import com.zy.common.model.enums.NavigationMapType; import com.zy.common.service.CommonService; import com.zy.common.utils.*; import com.zy.core.News; -import com.zy.core.action.ForkLiftAction; +import com.zy.core.action.LiftAction; import com.zy.core.action.ShuttleAction; +import com.zy.core.cache.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.protocol.*; +import com.zy.core.model.protocol.ForkLiftStaProtocol; +import com.zy.core.model.protocol.LiftProtocol; +import com.zy.core.model.protocol.ShuttleProtocol; +import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; -import com.zy.core.thread.*; +import com.zy.core.thread.DevpThread; +import com.zy.core.thread.LedThread; +import com.zy.core.thread.LiftThread; +import com.zy.core.thread.ShuttleThread; +import com.zy.core.thread.impl.FyDevpThread; +import com.zy.core.thread.impl.NormalLedThread; import com.zy.system.service.ConfigService; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.io.IOException; import java.util.*; /** @@ -36,18 +53,10 @@ @Service("mainService") public class MainServiceImpl { - @Value("${wms.url}") - private String wmsUrl; @Autowired private SlaveProperties slaveProperties; @Autowired private WrkMastService wrkMastService; - @Autowired - private WrkMastLogMapper wrkMastLogMapper; - @Autowired - private LocMastService locMastService; - @Autowired - private BasDevpService basDevpService; @Autowired private BasShuttleErrLogService basShuttleErrLogService; @Autowired @@ -61,491 +70,318 @@ @Autowired private BasMapService basMapService; @Autowired - private BasLiftService basLiftService; - @Autowired private ShuttleDispatchUtils shuttleDispatchUtils; @Autowired private RedisUtil redisUtil; @Autowired - private BasLiftOptService basLiftOptService; - @Autowired private ConfigService configService; @Autowired - private NavigateMapUtils navigateMapUtils; - @Autowired private NavigateMapData navigateMapData; - @Autowired - private NavigateUtils navigateUtils; @Autowired private ShuttleOperaUtils shuttleOperaUtils; @Autowired private ShuttleAction shuttleAction; @Autowired - private ForkLiftAction forkLiftAction; + private NotifyUtils notifyUtils; + @Autowired + private BasShuttleChargeService basShuttleChargeService; + @Autowired + private TransportLiftInServiceImpl transportLiftInService; + @Autowired + private TransportLiftOutServiceImpl transportLiftOutService; + @Autowired + private ShuttleMoveServiceImpl shuttleMoveService; + @Autowired + private NoLiftInServiceImpl noLiftInService; + @Autowired + private NoLiftOutServiceImpl noLiftOutService; + @Autowired + private LiftAction liftAction; + @Autowired + private BasWrkStatusService wrkStatusService; + @Value("${asrs.wmsUrl}") + private String wmsUrl; -// /** -// * 缁勬墭 -// * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2 -// */ -// public void generateStoreWrkFile() { -// try { -// // 鏍规嵁杈撻�佺嚎plc閬嶅巻 -// for (DevpSlave devp : slaveProperties.getDevp()) { -// // 閬嶅巻鍏ュ簱鍙� -// for (DevpSlave.Sta inSta : devp.getInSta()) { -// // 鑾峰彇鍏ュ簱绔欎俊鎭� -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); -// StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); -// if (staProtocol == null) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// Short workNo = staProtocol.getWorkNo(); -// // 灏哄妫�娴嬪紓甯� -// boolean back = false; -// String errMsg = "寮傚父锛�"; -// if (staProtocol.isFrontErr()) { -// errMsg = errMsg + "鍓嶈秴闄愶紱"; -// back = true; -// } -// if (staProtocol.isBackErr()) { -// errMsg = errMsg + "鍚庤秴闄�"; -// back = true; -// } -// if (staProtocol.isHighErr()) { -// errMsg = errMsg + "楂樿秴闄�"; -// back = true; -// } -// if (staProtocol.isLeftErr()) { -// errMsg = errMsg + "宸﹁秴闄�"; -// back = true; -// } -// if (staProtocol.isRightErr()) { -// errMsg = errMsg + "鍙宠秴闄�"; -// back = true; -// } -// if (staProtocol.isWeightErr()) { -// errMsg = errMsg + "瓒呴噸"; -// back = true; -// } -// if (staProtocol.isBarcodeErr()) { -// errMsg = errMsg + "鎵爜澶辫触"; -// back = true; -// } -// // 閫�鍥� -// if (back) { -// // led 寮傚父鏄剧ず -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); -// if (ledThread != null) { -// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); -// } -// continue; -// } -// -// // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 -// if (staProtocol.isAutoing() && staProtocol.isLoading() -// && staProtocol.isInEnable() -// && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) -// ) { -// -// // 鑾峰彇鏉$爜鎵弿浠俊鎭� -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); -// if (barcodeThread == null) { -// continue; -// } -// String barcode = barcodeThread.getBarcode(); -// if (!Cools.isEmpty(barcode)) { -//// News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode); -// if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode) || "00000000".equals(barcode)) { -//// staProtocol.setWorkNo((short) 32002); -//// staProtocol.setStaNo(inSta.getBackSta().shortValue()); -//// devpThread.setPakMk(staProtocol.getSiteId(), false); -//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -// -// // led 寮傚父鏄剧ず -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); -// if (ledThread != null) { -// String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯"; -// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); -// } -// continue; -// } -// } else { -//// staProtocol.setWorkNo((short) 32002); -//// staProtocol.setStaNo(inSta.getBackSta().shortValue()); -//// devpThread.setPakMk(staProtocol.getSiteId(), false); -//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -// -//// // led 寮傚父鏄剧ず -//// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); -//// if (ledThread != null) { -//// String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯"; -//// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); -//// } -// continue; -// } -// -// // 杩囨护鐩樼偣/鎷f枡/骞舵澘浠诲姟 -// WrkMast wrkMast1 = wrkMastMapper.selectPickStepByBarcode(barcode); -// if (null != wrkMast1) { -// continue; -// } -// -// // 鍒ゆ柇閲嶅宸ヤ綔妗� -// WrkMast wrkMast2 = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); -// if (wrkMast2 != null) { -// News.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast2.getWrkNo()); -// continue; -// } -// -// try { -// LocTypeDto locTypeDto = new LocTypeDto(staProtocol); -// SearchLocParam param = new SearchLocParam(); -// param.setBarcode(barcode); -// param.setIoType(1); -// param.setSourceStaNo(inSta.getStaNo()); -// param.setLocType1(locTypeDto.getLocType1()); -// String response = new HttpHandler.Builder() -// .setUri(wmsUrl) -// .setPath("/rpc/pakin/loc/v2") -// .setJson(JSON.toJSONString(param)) -// .build() -// .doPost(); -// JSONObject jsonObject = JSON.parseObject(response); -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); -// Integer code = jsonObject.getInteger("code"); -// if (code.equals(200)) { -// StartupDto dto = jsonObject.getObject("data", StartupDto.class); -// // plc 澶勭悊 -// barcodeThread.setBarcode(""); -//// staProtocol.setWorkNo(dto.getWorkNo().shortValue()); -//// staProtocol.setStaNo(dto.getStaNo().shortValue()); -//// devpThread.setPakMk(staProtocol.getSiteId(), false); -//// -//// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -//// if (!result) { -//// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); -//// } -// -// // 鍒ゆ柇閲嶅宸ヤ綔妗� -// WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo()); -// if (wrkMast == null) { -// continue; -// } -// -// // 鏇存柊宸ヤ綔涓绘。 -// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋 -// wrkMast.setModiTime(new Date()); -// if (wrkMastMapper.updateById(wrkMast) == 0) { -// News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo()); -// } -// -// } else if (code == 500) { -// if (ledThread != null) { -// String errorMsg = jsonObject.getString("msg"); -// if (!Cools.isEmpty(errorMsg)) { -// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); -// ledThread.setLedMk(false); -// } -// } -// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response); -// } else if (code == 700) { -//// staProtocol.setWorkNo((short) 32002); -//// staProtocol.setRollback102(1);//102绔欏洖閫�淇″彿 -//// devpThread.setPakMk(staProtocol.getSiteId(), false); -//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(5, staProtocol)); -// -// // led 寮傚父鏄剧ず -// if (ledThread != null) { -// String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒"; -// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); -// ledThread.setLedMk(false); -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// } -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } + public boolean isInEnable(DevpThread devpThread, Integer staNo) { + if (staNo == null) { + return false; + } + // 鑾峰彇鍏ュ簱绔欎俊鎭� + switch (staNo) { + case 1011: + case 1012: + return devpThread.getStation().get(1012).isInEnable(); + case 1021: + case 1022: + case 1023: + return devpThread.getStation().get(1022).isInEnable(); + case 1031: + case 1032: + return devpThread.getStation().get(1032).isInEnable(); + case 1024: + case 1025: + case 1026: + return devpThread.getStation().get(1025).isInEnable(); + case 1013: + case 1014: + case 1015: + return devpThread.getStation().get(1014).isInEnable(); + } + return false; + } -// /** -// * 鎷f枡銆佸苟鏉垮啀鍏ュ簱 -// */ -// @Transactional -// public synchronized void stnToCrnStnPick(){ -// try { -// for (DevpSlave devp : slaveProperties.getDevp()) { -// // 閬嶅巻鎷f枡鍏ュ簱鍙� -// for (DevpSlave.Sta pickSta : devp.getPickInSta()) { -// // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); -// StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); -// if (staProtocol == null) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// if (staProtocol.isAutoing() -// && staProtocol.isLoading() -// && staProtocol.isInEnable() -//// && (staProtocol.getWorkNo() > 0) -// && staProtocol.isPakMk()) { -// -// // 鑾峰彇鏉$爜鎵弿浠俊鎭� -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); -// if (barcodeThread == null) { -// continue; -// } -// String barcode = barcodeThread.getBarcode(); -// if (Cools.isEmpty(barcode)) { -// continue; -// } -// if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { -// continue; -// } -// -// WrkMast wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode); -// if (wrkMast == null) {//鎵句笉鍒板伐浣滄。 -// continue; -// } -// -// if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104) -// || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { -// continue; -// } -// -//// //*********************鍚屽簱浣嶇粍鏍¢獙********************* -//// boolean flag = false; -//// String th = ""; -//// List<String> innerLoc = Utils.getGroupInnerLoc(wrkMast.getSourceLocNo()); -//// for (String loc : innerLoc) { -//// LocMast locMast = locMastService.selectById(loc); -//// if (locMast == null) { -//// continue; -//// } -//// -//// if (!locMast.getLocSts().equals("F")) { -//// flag = true; -//// th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�"; -//// break; -//// } -//// } -//// if (flag) { -//// News.info(th); -//// continue; -//// } -//// //*********************鍚屽簱浣嶇粍鏍¢獙********************* -// -//// // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� -//// if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { -//// News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); -//// continue; -//// } -// -// try { -// LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());//婧愬簱浣� -// SearchLocParam param = new SearchLocParam(); -// param.setWrkNo(wrkMast.getWrkNo()); -// param.setBarcode(wrkMast.getBarcode()); -// param.setIoType(wrkMast.getIoType()); -// param.setSourceStaNo(pickSta.getStaNo()); -// param.setLiftNo(pickSta.getLiftNo()); -// param.setLocType1(locMast.getLocType1()); -// String response = new HttpHandler.Builder() -// .setUri(wmsUrl) -// .setPath("/rpc/pakin/loc/v2") -// .setJson(JSON.toJSONString(param)) -// .build() -// .doPost(); -// JSONObject jsonObject = JSON.parseObject(response); -// Integer code = jsonObject.getInteger("code"); -// if (code.equals(200)) { -// StartupDto dto = jsonObject.getObject("data", StartupDto.class); -// -//// //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯 -//// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo())); -//// if (liftStaProtocol == null) { -//// News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触"); -//// continue; -//// } -//// -//// // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� -//// wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54 -//// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 -//// wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯 -//// wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔� -//// wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅 -//// wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌� -//// wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌� -//// wrkMast.setModiTime(new Date()); -//// if (wrkMastMapper.updateById(wrkMast) == 0) { -//// News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); -//// continue; -//// } -// } else if (code == 500) { -// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response); -// } -// } catch (Exception e) { -// e.printStackTrace(); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// } -// } -// } -// -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } - -// /** -// * 鐩樼偣鍐嶅叆搴� -// */ -// @Transactional -// public synchronized void stnToCrnStnPlate(){ -// try { -// for (DevpSlave devp : slaveProperties.getDevp()) { -// // 閬嶅巻鎷f枡鍏ュ簱鍙� -// for (DevpSlave.Sta pickSta : devp.getPickInSta()) { -// // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); -// StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); -// if (staProtocol == null) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// if (staProtocol.isAutoing() -// && staProtocol.isLoading() -// && staProtocol.isInEnable() -//// && (staProtocol.getWorkNo() > 0) -// && staProtocol.isPakMk()) { -// -// // 鑾峰彇鏉$爜鎵弿浠俊鎭� -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); -// if (barcodeThread == null) { -// continue; -// } -// String barcode = barcodeThread.getBarcode(); -// if (Cools.isEmpty(barcode)) { -// continue; -// } -// if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { -// continue; -// } -// WrkMast wrkMast = wrkMastMapper.selectByBarcode(barcode); -// if (wrkMast == null) {//鎵句笉鍒板伐浣滄。 -// continue; -// } -// -// if ((wrkMast.getIoType() != 107) -// || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { -// continue; -// } -// -//// // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� -//// if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { -//// News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); -//// continue; -//// } -// -// //鐩樼偣鎵炬柊搴撲綅 -// try { -// LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());//婧愬簱浣� -// SearchLocParam param = new SearchLocParam(); -// param.setWrkNo(wrkMast.getWrkNo()); -// param.setBarcode(wrkMast.getBarcode()); -// param.setIoType(107);//鐩樼偣 -// param.setSourceStaNo(pickSta.getStaNo()); -// param.setLiftNo(pickSta.getLiftNo()); -// param.setLocType1(locMast.getLocType1()); -// String response = new HttpHandler.Builder() -// .setUri(wmsUrl) -// .setPath("/rpc/pakin/loc/v2") -// .setJson(JSON.toJSONString(param)) -// .build() -// .doPost(); -// JSONObject jsonObject = JSON.parseObject(response); -// Integer code = jsonObject.getInteger("code"); -// if (code.equals(200)) { -// StartupDto dto = jsonObject.getObject("data", StartupDto.class); -// -//// //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯 -//// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo())); -//// if (liftStaProtocol == null) { -//// News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触"); -//// continue; -//// } -//// -//// // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� -//// wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 107->57 -//// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 -//// wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯 -//// wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔� -//// wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅 -//// wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌� -//// wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌� -//// wrkMast.setModiTime(new Date()); -//// if (wrkMastMapper.updateById(wrkMast) == 0) { -//// News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); -//// continue; -//// } -// -//// staProtocol.setStaNo(dto.getSourceStaNo().shortValue());//鍐欏叆鐩爣绔� -//// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -// -// } else if (code == 500) { -// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response); -// } -// } catch (Exception e) { -// e.printStackTrace(); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// } -// -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } + public boolean isOutEnable(DevpThread devpThread, Integer staNo) { + if (staNo == null) { + return false; + } + // 鑾峰彇鍏ュ簱绔欎俊鎭� + switch (staNo) { + case 1011: + case 1012: + return devpThread.getStation().get(1012).isOutEnable(); + case 1021: + case 1022: + case 1023: + return devpThread.getStation().get(1022).isOutEnable(); + case 1024: + case 1025: + case 1026: + return devpThread.getStation().get(1025).isOutEnable(); + case 1013: + case 1014: + case 1015: + return devpThread.getStation().get(1014).isOutEnable(); + case 1031: + case 1032: + return devpThread.getStation().get(1032).isOutEnable(); + } + return false; + } /** - * 鍒濆鍖栧疄鏃跺湴鍥� + * 缁勬墭 + * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2 */ - public synchronized void initRealtimeBasMap() { + public synchronized void generateInboundWrk() { try { - for (int i = 1; i <= 4; i++) {//鎬诲叡鍥涘眰妤� - Object data = redisUtil.get(RedisKeyType.MAP.key + i); - if (data == null) {//redis鍦板浘鏁版嵁涓虹┖锛屼粠鏁版嵁搴撲腑鑾峰彇 - BasMap basMap = basMapService.selectLatestMap(i); - if (basMap == null) { - //鏁版嵁搴撲腑涔熶笉瀛樺湪鍦板浘鏁版嵁锛屼粠鍦板浘鏂囦欢涓幏鍙� - //杞藉叆鍦板浘 - List<List<MapNode>> lists = navigateMapData.getJsonData(i, -1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱) - - //瀛樺叆鏁版嵁搴� - basMap = new BasMap(); - basMap.setData(JSON.toJSONString(lists)); - basMap.setCreateTime(new Date()); - basMap.setUpdateTime(new Date()); - basMap.setLev(i); - - if (!basMapService.insert(basMap)) { - log.info("鍦板浘鏁版嵁瀛樺偍澶辫触"); + // 閬嶅巻鍏ュ簱鍙� + for (DevpSlave.Sta inSta : slaveProperties.getDevp().get(0).getInSta()) { + if (inSta.getStaNo() == 1014 || inSta.getStaNo() == 1025) { + // 鑾峰彇鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); + StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + Short workNo = staProtocol.getWorkNo(); + // 灏哄妫�娴嬪紓甯� + boolean back = false; + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); + String errMsg = ""; + if (!back && staProtocol.isBackErr()) { + errMsg = "鍚庤秴闄�"; + back = true; + } + if (!back && staProtocol.isHighErr()) { + errMsg = "瓒呴珮寮傚父"; + back = true; + } + if (!back && staProtocol.isWeightErr()) { + errMsg = "瓒呴噸寮傚父"; + back = true; + } + if (!back && staProtocol.isRightErr()) { + errMsg = "鍙宠秴闄�"; + back = true; + } + if (!back && staProtocol.isLeftErr()) { + errMsg = "宸﹁秴闄�"; + back = true; + } + if (!back && staProtocol.isBarcodeErr()) { + errMsg = "鎵爜寮傚父"; + back = true; + } + // 閫�鍥� + if (back) { + // led 寮傚父鏄剧ず + if (ledThread != null) { + ledThread.error(errMsg); } } - //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis - redisUtil.set(RedisKeyType.MAP.key + i, JSON.toJSONString(basMap)); + // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 + 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) || "?".endsWith(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) { + continue; + } + // 鍒ゆ柇閲嶅宸ヤ綔妗� + WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", inSta.getStaNo()).eq("barcode", barcode)); + if (wrkMast != null && wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) { + News.error("宸ヤ綔妗e凡瀛樺湪,宸ヤ綔鍙�={}", wrkMast.getWrkNo()); + //鍒ゆ柇鏃舵彁鍗囨満渚э紝杩樻槸鏃犳彁鍗囨満娴� + staProtocol.setWorkNo(Short.parseShort(String.valueOf(wrkMast.getWrkNo()))); + staProtocol.setStaNo(Short.parseShort(String.valueOf(inSta.getStaNo() + 1))); + MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); + News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(wrkMast)); + wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts); + wrkMast.setModiTime(new Date()); + wrkMastService.updateById(wrkMast); + } else if (wrkMast != null && wrkMast.getWrkSts() != WrkStsType.NEW_INBOUND.sts) { + continue; + } + try { + SearchLocParam param = new SearchLocParam(); + param.setBarcode(barcode); + param.setIoType(1); + param.setSourceStaNo(inSta.getStaNo()); + param.setLocType1((short) 1); + 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)) { + //StartupDto dto = jsonObject.getObject("data", StartupDto.class); +// 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 { + 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/led/getError") + .setJson(JSON.toJSONString(hashMap)) + .build() + .doPost(); + News.error("鍏ュ簱鐢宠澶辫触锛屼换鍔℃暟鎹�={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject)); + } + } catch (Exception e) { + log.error("璋冪敤wms鎶ラ敊1锛寋}", e.getMessage()); + } + } + } else if (inSta.getStaNo() == 1012 || inSta.getStaNo() == 1022) { + // 鑾峰彇鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); + StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); + String errMsg = ""; + boolean back = false; + if (!back && staProtocol.isBackErr()) { + errMsg = "鍚庤秴闄�"; + back = true; + } + if (!back && staProtocol.isHighErr()) { + errMsg = "瓒呴珮寮傚父"; + back = true; + } + if (!back && staProtocol.isWeightErr()) { + errMsg = "瓒呴噸寮傚父"; + back = true; + } + if (!back && staProtocol.isRightErr()) { + errMsg = "鍙宠秴闄�"; + back = true; + } + if (!back && staProtocol.isLeftErr()) { + errMsg = "宸﹁秴闄�"; + back = true; + } + if (!back && staProtocol.isBarcodeErr()) { + errMsg = "鎵爜寮傚父"; + back = true; + } + // 閫�鍥� + if (back) { + + // led 寮傚父鏄剧ず + if (ledThread != null) { + ledThread.error(errMsg); + } + } + + Short workNo = staProtocol.getWorkNo(); + if (staProtocol.isAutoing() && staProtocol.isLoading() && isInEnable(devpThread, inSta.getStaNo()) && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) && staProtocol.isPakMk()) { + String barcode = staProtocol.getBarcode(); + // 鍒ゆ柇閲嶅宸ヤ綔妗� + WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", inSta.getStaNo()).eq("barcode", barcode)); + if (wrkMast == null) { + try { + SearchLocParam param = new SearchLocParam(); + param.setBarcode(barcode); + param.setIoType(1); + param.setSourceStaNo(inSta.getStaNo()); + param.setLocType1((short) 1); + 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)) { + + } else { + 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/led/getError") + .setJson(JSON.toJSONString(hashMap)) + .build() + .doPost(); + News.error("鍏ュ簱鐢宠澶辫触锛屼换鍔℃暟鎹�={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject)); + } + } catch (Exception e) { + log.error("璋冪敤wms鎶ラ敊2锛寋}", e.getMessage()); + } + } + } } } } catch (Exception e) { @@ -553,123 +389,392 @@ } } -// /** -// * 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙� -// */ -// public synchronized void shuttleInExecute() { -// try { -// List<WrkMast> wrkMasts = wrkMastMapper.selectInStep4(); -// for (WrkMast wrkMast : wrkMasts) { -// //鑾峰彇婧愮珯 -// BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo()); -// if (sourceBasDevp == null) { -// continue;//绔欑偣涓嶅瓨鍦� -// } -// -// //鑾峰彇鐩爣绔� -// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(sourceBasDevp.getLiftNo(), Utils.getLev(wrkMast.getLocNo())); -// if (liftStaProtocol == null) { -// continue;//绔欑偣涓嶅瓨鍦� -// } -// -// // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢锛岃嚜鍔ㄣ�佺┖闂层�佹湁鐗� -// if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) { -// News.info("{}浠诲姟锛岃緭閫佺珯鐐圭姸鎬佷笉婊¤冻鍏ュ簱銆傝緭閫佺珯鐐�:{}", wrkMast.getWrkNo(), JSON.toJSONString(liftStaProtocol)); -// continue; -// } -// -// boolean step1 = this.shuttleInExecuteStep1(wrkMast, liftStaProtocol);//灏忚溅鎼叆搴撲腑 -// if (!step1) { -// continue; -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } + public synchronized void noLiftIn() { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.INBOUND_DEVICE_RUN.sts).in("source_sta_no", 1014, 1025)); + for (WrkMast wrkMast : wrkMasts) { + if (wrkMast.getWrkSts() == WrkStsType.INBOUND_DEVICE_RUN.sts) { + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); + StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getSourceStaNo() + 1); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if ((Utils.getLev(wrkMast.getLocNo()) != 1 && wrkMast.getSourceStaNo() == 1014) || (Utils.getLev(wrkMast.getLocNo()) != 5 && wrkMast.getSourceStaNo() == 1025)) { + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(1, wrkMast.getWrkNo(), wrkMast.getMainWrkNo()); + if (liftWrkMast != null) { + if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), 1); + continue; + } + } + wrkMast.setLiftNo(1); + } + Short finishWorkNo = staProtocol.getFinishWorkNo(); + if (finishWorkNo == null) { + continue; + } -// /** -// * 鍏ュ簱-灏忚溅鎼叆搴撲腑 -// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false -// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue -// */ -// public boolean shuttleInExecuteStep1(WrkMast wrkMast, LiftStaProtocol liftStaProtocol) { -// if (wrkMast.getWrkSts() == 4) { -// if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� -// boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� -// News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); -// return false; -// } -// -// //鑾峰彇鍥涘悜绌挎杞︾嚎绋� -// ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); -// if (shuttleThread == null) { -// return false; -// } -// ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); -// if (shuttleProtocol == null) { -// return false; -// } -// if (!shuttleThread.isIdle()) { -// News.info("{}浠诲姟锛寋}灏忚溅蹇欑涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -//// //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻 -//// if (shuttleProtocol.getToken() != 0) { -//// News.info("{}浠诲姟锛寋}灏忚溅锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -//// return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 -//// } -// -// //鍒ゆ柇灏忚溅鏄惁瀛樺湪绉诲姩浠诲姟 -// WrkMast hasMoveWorking = wrkMastMapper.selectShuttleHasMoveWorking(wrkMast.getShuttleNo()); -// if (hasMoveWorking != null) { -// News.info("{}浠诲姟锛寋}灏忚溅锛屽瓨鍦ㄧЩ鍔ㄤ换鍔★紝绂佹娲惧彂浠诲姟", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false;//瀛樺湪绉诲姩浠诲姟锛岀姝㈡墽琛屽叆搴撲换鍔� -// } -// -// //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣� -// if (!shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) { -// //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃� -// shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� -// News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -// -// //灏忚溅宸叉姷杈捐緭閫佺珯鐐逛綅缃紝杩涜鎼繍璐х墿 -// ShuttleOperaResult result = ShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo()); -// if (result == null) {//璺緞璁$畻澶辫触 -// News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -// -// //鍒涘缓鍒嗛厤鍛戒护 -// ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); -// assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 -// assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� -// assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id);//鍏ュ簱妯″紡 -// assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) -// assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 -// assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 -// -// wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓� -// wrkMast.setModiTime(new Date()); -//// shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝 -// if (wrkMastMapper.updateById(wrkMast) > 0) { -// //涓嬪彂浠诲姟 -// MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); -// } -// -// return false; -// } -// return true; -// } -// /** -// * 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙� -// */ + String locNo = "1200301"; + if (wrkMast.getStaNo() == 1026) { + locNo = "1200305"; + } + //鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + if (liftThread == null) { + continue; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + continue; + } + + if (!liftThread.isIdle()) { + continue; + } + + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� + if (liftProtocol.getHasTray()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + continue; + } + + + boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_DEVP"); + if (!dispatchShuttle) { + News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo()); + continue; + } else { + News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け鎴愬姛", wrkMast.getWrkNo()); + } + wrkMast.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN.sts); + wrkMast.setLiftNo(null); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(new Date()); + if (!wrkMastService.updateById(wrkMast)) { + News.info("{}浠诲姟锛屾洿鏂板伐浣滄。澶辫触", wrkMast.getWrkNo()); + } else { + setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo()); + } + } + } + } + + + public void outFirst() { + DevpSlave devpSlave = slaveProperties.getDevp().get(0); + // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯 + Date now = new Date(); + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId()); + List<WrkMast> wrkSts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.NEW_OUTBOUND.sts).in("sta_no", 1013, 1024)); + for (WrkMast wrkMast : wrkSts) { + if (devpThread == null) { + continue; + } + Map<Integer, StaProtocol> station = devpThread.getStation(); + StaProtocol staProtocol = station.get(wrkMast.getStaNo()); + if (staProtocol == null) { + continue; + } + + if (!staProtocol.isAutoing()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + continue; + } + if (!isOutEnable(devpThread, wrkMast.getStaNo())) { + News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + continue; + } + String locNo = "1200301"; + if (wrkMast.getStaNo() == 1024) { + locNo = "1200305"; + } + + boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_DEVP"); + if (!dispatchShuttle) { + News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo()); + continue; + } + WrkMast wrkMast2 = wrkMastService.selectByMainWrkNo(wrkMast.getWrkNo()); + wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMast2 != null) { + wrkMast.setShuttleNo(wrkMast2.getShuttleNo()); + } + if (!wrkMastService.updateById(wrkMast)) { + News.info("{}浠诲姟锛屾洿鏂板伐浣滄。澶辫触", wrkMast.getWrkNo()); + } else { + WrkMast wrkMast1 = wrkMastService.selectByMainWrkNo(wrkMast.getWrkNo()); + News.info("{}浠诲姟锛岀Щ鍔ㄤ换鍔$敓鎴愭垚鍔熲�斺��1", wrkMast1.getWrkNo()); + } + } + } + + /** + * 鍑哄簱鍒板嚭搴撳彛 + */ + public synchronized void stnToOutStn() { + ShuttleThread shuttleThread1 = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, 1); + ShuttleThread shuttleThread2 = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, 2); + ShuttleProtocol status1 = shuttleThread1.getStatus(); + ShuttleProtocol status2 = shuttleThread2.getStatus(); + List<String> loc = new ArrayList<>(); + if (status1 != null) { + loc.add(status1.getCurrentLocNo()); + } + if (status2 != null) { + loc.add(status2.getCurrentLocNo()); + } + DevpSlave devpSlave = slaveProperties.getDevp().get(0); + // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯 + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId()); + for (DevpSlave.Sta outSta : devpSlave.getOutSta()) { + if (outSta.getStaNo() == 1013 || outSta.getStaNo() == 1024) { + List<WrkMast> wrkSts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts).eq("sta_no", outSta.getStaNo())); + for (WrkMast wrkMast : wrkSts) { + StaProtocol staProtocol = devpThread.getStation().get(outSta.getStaNo() + 2); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + + if (staProtocol.isAutoing() && staProtocol.isLoading()) { + // 鏌ヨ宸ヤ綔妗� + if (wrkMast == null) { + continue; + } + + String sourceLocNo = "1200305"; + String locNo = "1300105"; + if (wrkMast.getStaNo() == 1013) { + sourceLocNo = "1200301"; + locNo = "1300101"; + if (loc.contains(locNo)) { + locNo = "1100101"; + } + } else { + if (loc.contains(locNo)) { + locNo = "1100105"; + } + } + + boolean dispatchShuttle = shuttleDispatchUtils.shuttleMoveGenerate(wrkMast.getWrkNo(), sourceLocNo, locNo, wrkMast.getShuttleNo(), null, false); + if (!dispatchShuttle) { + News.taskInfo(wrkMast.getWrkNo(), "{}灏忚溅锛屾尓杞﹁皟搴﹁嚦鍙栬揣鐐瑰け璐�", wrkMast.getShuttleNo()); + continue; + } + + staProtocol.setWorkNo(Short.parseShort(String.valueOf(wrkMast.getWrkNo()))); + staProtocol.setStaNo(Short.parseShort(String.valueOf(wrkMast.getStaNo()))); + MessageQueue.offer(SlaveType.Devp, devpSlave.getId(), new Task(2, staProtocol)); + News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(wrkMast)); + wrkMast.setWrkSts(WrkStsType.OUTBOUND_DEVP_RUN.sts); + wrkMast.setModiTime(new Date()); + wrkMast.setShuttleNo(null); + wrkMastService.updateById(wrkMast); + setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo()); + } + } + } + } + } + + + private void setLedData(Integer wrkNo, Integer staNo) { + try { + Map<String, Object> param = new HashMap<>(); + param.put("taskNo", wrkNo); + String response = null; + response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/rpc/led/getTask2") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + Integer code = jsonObject.getInteger("code"); + if (code.equals(200)) { + String data = jsonObject.getString("data"); + List<LedCommand> wrkDetls = JSONArray.parseArray(data, LedCommand.class); + redisUtil.set("LED_" + staNo, wrkDetls, 30); + log.info("鐢佃鏈烘暟鎹缃細{},{}", staNo, data); + } else { + log.info("鐢佃鏈烘暟鎹缃紓甯革細{},{}", wrkNo, response); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍒濆鍖栧疄鏃跺湴鍥� + */ + public synchronized void initRealtimeBasMap() { + //鍒濆鍖栭厤缃� +// WrkStsType[] values = WrkStsType.values(); +// for (int i = 0; i < values.length; i++) { +// BasWrkStatus basWrkStatus = wrkStatusService.selectById(values[i].sts); +// if (basWrkStatus == null) { +// basWrkStatus = new BasWrkStatus(); +// basWrkStatus.setWrkDesc(values[i].sts+"."+values[i].desc); +// basWrkStatus.setWrkSts(values[i].sts); +// basWrkStatus.setModiTime(new Date()); +// basWrkStatus.setAppeTime(new Date()); +// basWrkStatus.setAppeUser(9527L); +// basWrkStatus.setModiUser(9527L); +// wrkStatusService.insert(basWrkStatus); +// } +// } + try { + List<BasMap> basMaps = basMapService.selectList(new EntityWrapper<BasMap>().orderBy("lev", true)); + for (BasMap basMap : basMaps) { + Integer lev = basMap.getLev(); + Object data = redisUtil.get(RedisKeyType.MAP.key + lev); + if (data == null) {//redis鍦板浘鏁版嵁涓虹┖ + //杞藉叆鍦板浘 + List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱) + + //瀛樺叆鏁版嵁搴� + basMap.setData(JSON.toJSONString(lists)); + basMap.setCreateTime(new Date()); + basMap.setUpdateTime(new Date()); + if (!basMapService.updateById(basMap)) { + log.info("鍦板浘鏁版嵁瀛樺偍澶辫触"); + } + + //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis + redisUtil.set(RedisKeyType.MAP.key + lev, JSON.toJSONString(basMap)); + } + + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙� + */ + public synchronized void shuttleInExecute() { + try { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts)); + for (WrkMast wrkMast : wrkMasts) { + boolean step1 = this.shuttleInExecuteStep1(wrkMast);//灏忚溅鎼叆搴撲腑 + if (!step1) { + continue; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍏ュ簱-灏忚溅鎼叆搴撲腑 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + 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.searchDispatchShuttle(wrkMast.getWrkNo(), null, liftSta.getLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); + return false; + } + + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + return false; + } + if (!shuttleThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅蹇欑涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + //鍒ゆ柇灏忚溅鏄惁瀛樺湪绉诲姩浠诲姟 + WrkMast hasMoveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo()); + if (hasMoveWorking != null) { + News.taskInfo(wrkMast.getWrkNo(), "{}鍙峰皬杞︼紝瀛樺湪绉诲姩浠诲姟锛岀姝㈡淳鍙戜换鍔�", wrkMast.getShuttleNo()); + return false;//瀛樺湪绉诲姩浠诲姟锛岀姝㈡墽琛屽叆搴撲换鍔� + } + + //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣� + if (!shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) { + //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� + News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + 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; + } + + List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); + if (liftCommand == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + List<ShuttleCommand> liftCommand2 = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false); + if (liftCommand2 == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇涓嬮檷鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + commands.add(0, liftCommand.get(0)); + commands.add(liftCommand2.get(0)); + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓� 4.鎻愬崌鏈烘惉杩愬畬鎴� ==> 5.灏忚溅鎼繍涓� + wrkMast.setModiTime(new Date()); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + //瑙﹀彂閫氱煡 + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_TRANSPORT); + return false; + } + return false; + } + return true; + } + + /** + * 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙� + */ // public synchronized void shuttleOutExecute() { // try { -// 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; @@ -679,64 +784,69 @@ // e.printStackTrace(); // } // } -// -// /** -// * 鍑哄簱-灏忚溅鎼嚭搴撲腑 -// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false -// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue -// */ + + /** + * 鍑哄簱-灏忚溅鎼嚭搴撲腑 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ // public boolean shuttleOutExecuteStep1(WrkMast wrkMast) { -// //21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� -// if (wrkMast.getWrkSts() == 21) { -// EntityWrapper<StaDesc> wrapper = new EntityWrapper<>(); -// wrapper.eq("type_no", wrkMast.getIoType());//璺緞绫诲瀷 -// wrapper.eq("stn_no", wrkMast.getStaNo());//鍑哄簱绔欑偣缂栧彿 -// StaDesc staDesc = staDescService.selectOne(wrapper); -// if (staDesc == null) { -// News.info("{}浠诲姟锛屽嚭搴撹矾寰勪笉瀛樺湪", wrkMast.getWrkNo()); -// return false;//鍑哄簱璺緞涓嶅瓨鍦� +// //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 (liftSta.getHasTray()) { +// News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getStaNo()); +// return false; // } // // if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� @@ -755,69 +865,564 @@ // //鏌ヨ妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟鏁伴噺 // 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 ? "鎴愬姛" : "澶辫触"); +// boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getSourceLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� +// 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; // } // -// //灏忚溅宸叉姷杈捐揣鐗╀綅缃紝杩涜鎼繍璐х墿 -// ShuttleOperaResult result = ShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), liftStaProtocol.getLocNo());//灏嗚揣鐗╂惉杩愯嚦鎻愬崌鏈鸿緭閫佺珯鐐� -// if (result == null) {//鍑哄簱璺緞璁$畻澶辫触 -// News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐ワ紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -// -// //鍒涘缓鍒嗛厤鍛戒护 // ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); -// assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 -// assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� -// assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());//鍑哄簱妯″紡 -// assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) -// assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 -// assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 +// 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; // } // return true; // } + public synchronized void liftInExecute() { + try { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_INBOUND.sts, WrkStsType.INBOUND_DEVICE_RUN.sts, WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts).in("source_sta_no", 1012, 1022, 1031)); + for (WrkMast wrkMast : wrkMasts) { + boolean step0 = this.liftInExecuteStep0(wrkMast);//璁惧涓婅蛋 + if (!step0) { + continue; + } + + boolean step1 = this.liftInExecuteStep1(wrkMast);//鎻愬崌鏈烘惉杩� + if (!step1) { + continue; + } + + boolean step2 = this.liftInExecuteStep2(wrkMast);//瑙﹀彂鎼繍浠诲姟 + if (!step2) { + continue; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private boolean liftInExecuteStep0(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) { + FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + if (devpThread == null) { + return false; + } + + Map<Integer, StaProtocol> station = devpThread.getStation(); + StaProtocol staProtocol = station.get(wrkMast.getSourceStaNo()); + if (staProtocol == null) { + return false; + } + int led = 1; + if (wrkMast.getSourceStaNo() == 1022) { + led = 3; + } else if (wrkMast.getSourceStaNo() == 1031) { + } + // 灏哄妫�娴嬪紓甯� + boolean back = false; + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led); + String errMsg = ""; + if (!back && staProtocol.isBackErr()) { + errMsg = "鍚庤秴闄�"; + back = true; + } + if (!back && staProtocol.isHighErr()) { + errMsg = "瓒呴珮寮傚父"; + back = true; + } + if (!back && staProtocol.isWeightErr()) { + errMsg = "瓒呴噸寮傚父"; + back = true; + } + if (!back && staProtocol.isRightErr()) { + errMsg = "鍙宠秴闄�"; + back = true; + } + if (!back && staProtocol.isLeftErr()) { + errMsg = "宸﹁秴闄�"; + back = true; + } + if (!back && staProtocol.isBarcodeErr()) { + errMsg = "鎵爜寮傚父"; + back = true; + } + // 閫�鍥� + if (back) { + // led 寮傚父鏄剧ず + if (ledThread != null) { + MessageQueue.offer(SlaveType.Led, led, new Task(3, errMsg)); + ledThread.error(errMsg); + } + } + String barcode = staProtocol.getBarcode(); + + + if (!staProtocol.isLoading()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屾棤鎵樼洏", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + if (wrkMast.getSourceStaNo() != 1031) { + if (!staProtocol.isAutoing()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + if (Cools.isEmpty(barcode) || "?".endsWith(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) { + return false; + } + if (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) { + News.info("{}浠诲姟锛寋}绔欑偣锛屾墭鐩樼爜涓嶅尮閰嶏紝绔欑偣鎵樼洏鐮侊細{}锛屼换鍔℃墭鐩樼爜锛歿}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode()); + return false; + } + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(1, wrkMast.getWrkNo(), wrkMast.getMainWrkNo()); + if (liftWrkMast != null) { + if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), 1); + return false; + } + } + + short staNo = 1012; + if (wrkMast.getSourceStaNo() == 1022) { + staNo = 1023; + } else if (wrkMast.getSourceStaNo() == 1031) { + staNo = 1032; + } + + staProtocol = staProtocol.clone(); + staProtocol.setStaNo(staNo); + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); + boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); + + wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo()); + return false; + } + return false; + } + + return true; + } + + private boolean liftInExecuteStep1(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == WrkStsType.INBOUND_DEVICE_RUN.sts) { + //鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + if (liftThread == null) { + return false; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + return false; + } + + if (!liftThread.isIdle()) { + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(liftProtocol.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo()); + if (liftWrkMast != null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", 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; + } + + FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + if (devpThread == null) { + return false; + } + + Map<Integer, StaProtocol> station = devpThread.getStation(); + + Integer sourceStaNo = wrkMast.getSourceStaNo(); + if (wrkMast.getSourceStaNo() == 1022) { + sourceStaNo = 1023; + } else if (wrkMast.getSourceStaNo() == 1031) { + sourceStaNo = 1032; + } + + StaProtocol staProtocol = station.get(sourceStaNo); + if (staProtocol == null) { + return false; + } + + if (!staProtocol.isAutoing()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + + if (!staProtocol.isLoading()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屾棤鎵樼洏", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + if (sourceStaNo == 1023) { + if (staProtocol.getFinishWorkNo().intValue() != wrkMast.getWrkNo()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼换鍔″彿涓嶄竴鑷�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + } else if (sourceStaNo == 1012) { + if (staProtocol.getFinishWorkNo().intValue() != wrkMast.getWrkNo()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼换鍔″彿涓嶄竴鑷�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + } else if (sourceStaNo == 1032) { + if (staProtocol.getFinishWorkNo().intValue() != wrkMast.getWrkNo()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼换鍔″彿涓嶄竴鑷�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + } + + String locNo = "0200305"; + if (wrkMast.getSourceStaNo() == 1012) { + locNo = "0200301"; + } else if (wrkMast.getSourceStaNo() == 1032) { + locNo = "0200308"; + } + boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_LIFT"); + if (!dispatchShuttle) { + News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo()); + return false; + } + + int lev = 101; + if (wrkMast.getSourceStaNo() == 1021) { + lev = 100 + Utils.getLev(wrkMast.getLocNo()); + } else if (wrkMast.getSourceStaNo() == 1031) { + lev = 100 + Utils.getLev(wrkMast.getLocNo()); + } + //鑾峰彇鎻愬崌鏈哄懡浠� + List<LiftCommand> liftCommands = liftThread.getPalletInCommand(wrkMast.getWrkNo(), sourceStaNo, lev); + 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(liftProtocol.getLiftNo().shortValue()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); + assignCommand.setTaskMode(LiftCommandModeType.PALLET_IN.id.shortValue()); + + wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.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; + } + + private boolean liftInExecuteStep2(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) { + //鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + if (liftThread == null) { + return false; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + return false; + } + + if (!liftThread.isIdle()) { + return false; + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� + if (liftProtocol.getHasCar()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� + if (!liftProtocol.getHasTray()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false; + } +// String locNo = "0200305"; +// if (wrkMast.getStaNo() == 1011) { +// locNo = "0200301"; +// } +// boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_LIFT"); +// if (!dispatchShuttle) { +// News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo()); +// return false; +// } + + wrkMast.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN.sts); + // TODO 娴嬭瘯涓彂鐜颁笉鑳借В绂侊紝鍥犱负鎻愬崌鏈洪噷瀛樺湪鎵樼洏锛屽氨涓嶈兘瑙g锛屼笉鐒跺彟涓�杈嗗皬杞﹀彲鑳戒細杩戞彁鍗囨満 + //wrkMast.setLiftNo(null); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + return false; + } + return false; + } + + return true; + } + + public synchronized void liftOutExecute() { + try { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_OUTBOUND.sts, WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts).in("sta_no", 1011, 1021, 1031)); + for (WrkMast wrkMast : wrkMasts) { + boolean step1 = this.liftOutExecuteStep1(wrkMast);//瑙﹀彂鎼繍浠诲姟 + if (!step1) { + continue; + } + + boolean step2 = this.liftOutExecuteStep2(wrkMast);//鎻愬崌鏈烘惉杩� + if (!step2) { + continue; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private boolean liftOutExecuteStep1(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) { + FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + if (devpThread == null) { + return false; + } + + Map<Integer, StaProtocol> station = devpThread.getStation(); + StaProtocol staProtocol = station.get(wrkMast.getStaNo()); + if (staProtocol == null) { + return false; + } + + if (!staProtocol.isAutoing()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + if (wrkMast.getStaNo() == 1031) { +// if (staProtocol.getOutInModel() != 1) { +// News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), staProtocol.getSiteId()); +// return false; +// } + } else { + if (!isOutEnable(devpThread, wrkMast.getStaNo())) { + News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + } + + String locNo = "0200305"; + if (wrkMast.getStaNo() == 1011) { + locNo = "0200301"; + } else if (wrkMast.getStaNo() == 1031) { + locNo = "0200308"; + } + boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_LIFT"); + if (!dispatchShuttle) { + News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo()); + return false; + } else { + News.info("{}浠诲姟锛屾棤鎻愬崌鏈哄璋冨害灏忚溅鎴愬姛", wrkMast.getWrkNo()); + } + + wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + return false; + } + return false; + } + return true; + } + + private boolean liftOutExecuteStep2(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts) { + //鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + if (liftThread == null) { + return false; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + return false; + } + + if (!liftThread.isIdle()) { + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(liftProtocol.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo()); + if (liftWrkMast != null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", 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; + } + + FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + if (devpThread == null) { + return false; + } + + Map<Integer, StaProtocol> station = devpThread.getStation(); + StaProtocol staProtocol = station.get(wrkMast.getStaNo()); + if (staProtocol == null) { + return false; + } + + if (!staProtocol.isAutoing()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + + Integer sourceLev = liftThread.getLevToStaNo(Utils.getLev(wrkMast.getSourceLocNo())); + + //鑾峰彇鎻愬崌鏈哄懡浠� + List<LiftCommand> liftCommands = liftThread.getPalletOutCommand(wrkMast.getWrkNo(), sourceLev, wrkMast.getStaNo()); + LiftCommand liftCommand = liftCommands.get(0); +// if (wrkMast.getMainWrkNo() != null) { + liftCommand.setTaskNo(wrkMast.getWrkNo()); +// } else { +// 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().shortValue()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); + assignCommand.setTaskMode(LiftCommandModeType.PALLET_OUT.id.shortValue()); + + wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts); + wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + + if (wrkMastService.updateById(wrkMast)) { + setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo()); + //涓嬪彂浠诲姟 + liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); + return false; + } + return false; + } + + return true; + } /** * 鍥涘悜绌挎杞︿换鍔″畬鎴� @@ -834,56 +1439,122 @@ //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭銆佸皬杞﹀浜庣┖闂茬姸鎬� if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id //浠诲姟瀹屾垚绛夊緟纭 - && shuttleProtocol.getTaskNo() != 0 - ) { + && shuttleProtocol.getTaskNo() != 0) { //灏嗕换鍔℃。鏍囪涓哄畬鎴� WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo()); if (wrkMast != null) { - if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE.sts) { + 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); - }else { + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } +// else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_1.sts) { +// wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_2.sts); +// shuttleThread.setSyncTaskNo(0); +// notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 +// } + else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_3.sts) { + wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_4.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_7.sts) { + wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_8.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_11.sts) { + wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_12.sts); + wrkMast.setLiftNo(null); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_13.sts) { + wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_14.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_12.sts) { + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_13.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_10.sts) { + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_11.sts); + wrkMast.setLiftNo(null); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_8.sts) { + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_9.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_6.sts) { + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_7.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_4.sts) { + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_5.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_2.sts) { + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_3.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else { continue; } -// switch (wrkMast.getWrkSts().intValue()) { -//// case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚 -//// wrkMast.setWrkSts(9L); -//// shuttleProtocol.setTaskNo(0); -//// if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { -//// //閲婃斁灏忚溅浠ょ墝 -//// shuttleProtocol.setToken(0); -//// } -//// break; -//// case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚 -//// wrkMast.setWrkSts(23L); -//// shuttleProtocol.setTaskNo(0); -//// if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { -//// //閲婃斁灏忚溅浠ょ墝 -//// shuttleProtocol.setToken(0); -//// } -//// break; -// case 302: -// wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts); -// break; -// case WrkStsType.MOVE_SHUTTLE.sts: -// wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts); -// shuttleThread.setSyncTaskNo(0); -// break; -// default: -// } if (wrkMastService.updateById(wrkMast)) { //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� @@ -894,7 +1565,7 @@ } } else { Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo()); - if(object != null){ + if (object != null) { ShuttleAssignCommand assignCommand = JSON.parseObject(object.toString(), ShuttleAssignCommand.class); if (!assignCommand.getAuto()) { //鎵嬪姩妯″紡 @@ -914,385 +1585,255 @@ } } -// /** -// * 鎻愬崌鏈轰换鍔� -// */ -// public synchronized void liftIoExecute() { -// try { -// for (LiftSlave liftSlave : slaveProperties.getLift()) { -// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId()); -// if (liftThread == null) { -// continue; -// } -// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); -// if (liftProtocol == null) { -// continue; -// } -// -// if (!liftProtocol.isIdle()) { -// News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftSlave.getId()); -// continue; -// } -// -// //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚﹁鍗犵敤 -// if (liftProtocol.getToken() != 0) { -// News.info("{}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗�", liftSlave.getId()); -// continue; -// } -// -// //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔� -// List<WrkMast> wrkMasts = wrkMastMapper.selectLiftStep223103(); -// if (wrkMasts.isEmpty()) { -// continue; -// } -// -// for (WrkMast wrkMast : wrkMasts) { -// //鎼滅储鏄惁鏈夊叾浠栦换鍔″崰鐢ㄤ簡鎻愬崌鏈猴紝濡傛灉鍗犵敤鎻愬崌鏈虹殑浠诲姟鍜屽綋鍓嶄换鍔$浉鍚岋紝鍒欒繍琛屾墽琛� -// WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue()); -// if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) { -// News.info("{}鍙锋彁鍗囨満锛岃鍏朵粬浠诲姟{}鍗犵敤涓斿拰褰撳墠浠诲姟{}涓嶇浉鍚岋紝绂佹娲惧彂", liftSlave.getId(), wrkMast1.getWrkNo(), wrkMast.getWrkNo()); -// continue; -// } -// -// boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴� -// if (!stepIn) { -// continue; -// } -// -// boolean stepOut = this.liftIoExecuteStepOut(wrkMast);//鎻愬崌鏈哄嚭搴� -// if (!stepOut) { -// continue; -// } -// } -// -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// -// /** -// * 鎻愬崌鏈哄叆搴� -// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false -// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue -// */ -// private boolean liftIoExecuteStepIn(WrkMast wrkMast) { -// //--------------------------------------鎻愬崌鏈哄叆搴�-----------------------------------------// -// Date now = new Date(); -// -// //2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑 -// if (wrkMast.getWrkSts() == 2) { -// //鑾峰彇婧愮珯 -// BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo()); -// if (sourceBasDevp == null) { -// return false;//鎵句笉鍒扮珯鐐� -// } -// -// if (!sourceBasDevp.getInEnable().equals("Y")) { -// News.info("{}浠诲姟锛寋}婧愮珯锛屾病鏈夊彲鍏ヤ俊鍙�", wrkMast.getWrkNo(), sourceBasDevp.getDevNo()); -// return false;//绔欑偣涓嶅彲鍏� -// } -// -// Integer barcodeId = Utils.getBarcodeIdByStaNo(wrkMast.getSourceStaNo()); -// if (barcodeId == null) { -// News.info("{}浠诲姟锛寋}婧愮珯锛屾壘涓嶅埌鍙敤鏉$爜鍣↖D", wrkMast.getWrkNo(), sourceBasDevp.getDevNo()); -// return false;//绔欑偣涓嶅彲鍏� -// } -// -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId); -// if (barcodeThread == null) { -// News.info("{}浠诲姟锛寋}婧愮珯锛屾潯鐮佸櫒{}绾跨▼涓虹┖", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId); -// return false;//绔欑偣涓嶅彲鍏� -// } -// String barcode = barcodeThread.getBarcode(); -// if(!Cools.isEmpty(barcode)) { -// if(!("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode))) { -// //瀛樺湪鏉$爜鍊硷紝鍒ゆ柇鏄惁鍜屽綋鍓嶅伐浣滄。涓�鑷� -// if (!barcode.equals(wrkMast.getBarcode())) { -// News.info("{}浠诲姟,{}绔欑偣锛屾潯鐮佸櫒{}鍊納}涓庡伐浣滄。鏉$爜鍊納}涓嶄竴鑷达紝绯荤粺璺宠繃鎵ц", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId, barcode,wrkMast.getBarcode()); -// return false;//绔欑偣涓嶅彲鍏� -// } -// } -// }else { -// return false; -// } -// -// //鍒ゆ柇鎻愬崌鏈烘暣涓笁妤兼槸鍚﹂兘澶勪簬鍏ュ簱妯″紡 -// Integer outInModel1 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 1); -// Integer outInModel2 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 5); -// Integer outInModel3 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 8); -// if (outInModel1 == null || outInModel2 == null || outInModel3 == null) { -// News.info("{}浠诲姟锛屾病鏈夊嚭鍏ュ簱妯″紡", wrkMast.getWrkNo()); -// return false;//涓嶅瓨鍦ㄥ嚭鍏ュ簱妯″紡 -// } -// -// if (outInModel1 == 2 || outInModel2 == 2 && outInModel3 == 2) { -// News.info("{}浠诲姟锛屾湁绔欑偣澶勪簬鍑哄簱妯″紡锛岀姝㈠叆搴�", wrkMast.getWrkNo()); -// return false;//鍙鏈変竴涓浜庡嚭搴撴ā寮忥紝绂佹鍏ュ簱 -// } -// -// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, sourceBasDevp.getLiftNo()); -// if (liftThread == null) { -// return false; -// } -// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); -// if (liftProtocol == null) { -// return false; -// } -// if (!liftProtocol.isIdle()) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false; -// } -// //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰� -// if (liftProtocol.getToken() != 0) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� -// } -// -// //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� -// if (liftProtocol.getHasCar()) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呴儴鏈夊皬杞︼紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//鏈夊皬杞︼紝绂佹娲惧彂 -// } -// -// //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� -// if (liftProtocol.getHasTray()) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呴儴鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//鏈夋墭鐩橈紝绂佹娲惧彂 -// } -// -// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 -// WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); -// if (liftWrkMast != null) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽綋鍓嶆彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� -// } -// -// //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿) -// Integer startSta = Integer.parseInt(sourceBasDevp.getQrCodeValue()); -// //鑾峰彇鎻愬崌鏈虹珯鐐� -// LiftStaProtocol targetStaProtocol = NyLiftUtils.getLiftStaByLev(liftThread.getSlave().getId(), Utils.getLev(wrkMast.getLocNo())); -// if (targetStaProtocol == null) { -// return false;//绔欑偣涓嶅瓨鍦� -// } -// -// if (targetStaProtocol.getHasTray()) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛寋}绔欑偣锛屾彁鍗囨満绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo(), targetStaProtocol.getStaNo()); -// return false;//鎻愬崌鏈虹珯鐐规湁鎵樼洏锛岀姝㈡淳鍙� -// } -// -// Integer targetSta = targetStaProtocol.getStaNo(); -// -// //鑾峰彇鎻愬崌鏈哄懡浠� -// NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo()); -// if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) { -// //鎷f枡鍐嶅洖搴擄紝閲嶆柊鍒嗛厤璁惧宸ヤ綔鍙� -// int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿 -// BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(String.valueOf(deviceWrk), liftThread.getSlave().getId()); -// if (basLiftOpt != null) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛岃澶囧伐浣滃彿鍑虹幇閲嶅鎯呭喌锛岃鑱旂郴鎶�鏈汉鍛樻敮鎸併��", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false; -// } -// liftCommand.setTaskNo((short) deviceWrk); -// } -// ArrayList<NyLiftCommand> commands = new ArrayList<>(); -// commands.add(liftCommand); -// -// //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 -// LiftAssignCommand assignCommand = new LiftAssignCommand(); -// assignCommand.setCommands(commands); -// assignCommand.setLiftNo(liftProtocol.getLiftNo()); -// assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); -// assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue()); -// -// wrkMast.setWrkSts(3L);//2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑 -// wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙� -// wrkMast.setModiTime(now); -// liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗� -// if (wrkMastMapper.updateById(wrkMast) > 0) { -// //涓嬪彂浠诲姟 -// MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); -// } -// -// return false; -// } -// return true; -// } -// -// /** -// * 鎻愬崌鏈哄嚭搴� -// * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false -// * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue -// */ -// private boolean liftIoExecuteStepOut(WrkMast wrkMast) { -// //--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------// -// Date now = new Date(); -// -// //23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑 -// if (wrkMast.getWrkSts() == 23) { -// NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); -// if (shuttleThread == null) { -// return false; -// } -// -// //鑾峰彇鍑哄簱绔欑偣(鐩爣绔�) -// BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo()); -// if (basDevp == null) { -// News.info("{}浠诲姟锛屽嚭搴撶珯鐐逛笉瀛樺湪锛岀姝㈡淳鍙�", wrkMast.getWrkNo()); -// return false;//鍑哄簱绔欑偣涓嶅瓨鍦� -// } -// -// //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿) -// LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo())); -// if (liftStaProtocol == null) { -// News.info("{}浠诲姟锛屾壘涓嶅埌绔欑偣锛岀姝㈡淳鍙�", wrkMast.getWrkNo()); -// return false;//鎵句笉鍒扮珯鐐� -// } -// Integer startSta = liftStaProtocol.getStaNo(); -// -// NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); -// if (shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) { -// //灏忚溅杩樺湪杈撻�佺珯鐐� -// //璋冨害灏忚溅閬胯 -// boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread); -// if (!result) { -// News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); -// return false; -// } -// } -// -// if (!basDevp.getAutoing().equals("Y")) { -// News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夎嚜鍔ㄤ俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo()); -// return false;//鍑哄簱绔欑偣涓嶅彲鍑� -// } -// -// if (basDevp.getLoading().equals("Y")) { -// News.info("{}浠诲姟锛寋}绔欑偣锛屽瓨鍦ㄦ湁鐗╀俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo()); -// return false;//鍑哄簱绔欑偣涓嶅彲鍑� -// } -// -// if (!basDevp.getOutEnable().equals("Y")) { -// News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙凤紝绂佹娲惧彂", wrkMast.getWrkNo(), basDevp.getDevNo()); -// return false;//鍑哄簱绔欑偣涓嶅彲鍑� -// } -// -// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basDevp.getLiftNo()); -// if (liftThread == null) { -// return false; -// } -// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); -// if (liftProtocol == null) { -// return false; -// } -// -// if (!liftProtocol.isIdle()) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false; -// } -// //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰� -// if (liftProtocol.getToken() != 0) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屼护鐗屽凡琚嫭鍗狅紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� -// } -// //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 -// WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); -// if (liftWrkMast != null) { -// News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽綋鍓嶆彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); -// return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� -// } -// -// //鑾风洰鏍囩珯婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� -// BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getStaNo()); -// if (targetBasDevp == null) { -// News.info("{}浠诲姟锛寋}绔欑偣锛岀珯鐐逛笉瀛樺湪锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), wrkMast.getStaNo()); -// return false;//绔欑偣涓嶅瓨鍦� -// } -// //鑾峰彇鐗涚溂鎻愬崌鏈虹珯鐐圭紪鍙�(鐩爣缂栧彿) -// Integer targetSta = Integer.parseInt(targetBasDevp.getQrCodeValue()); -// -// //鑾峰彇鎻愬崌鏈哄懡浠� -// NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftThread.getSlave().getId(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo()); -// -// ArrayList<NyLiftCommand> commands = new ArrayList<>(); -// commands.add(liftCommand); -// -// //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 -// LiftAssignCommand assignCommand = new LiftAssignCommand(); -// assignCommand.setCommands(commands); -// assignCommand.setLiftNo(liftProtocol.getLiftNo()); -// assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); -// assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue()); -// -// wrkMast.setWrkSts(24L);//23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑 -// wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙� -// wrkMast.setModiTime(now); -// liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗� -// if (wrkMastMapper.updateById(wrkMast) > 0) { -// //涓嬪彂浠诲姟 -// MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); -// } -// -// return false; -// } -// return true; -// } -// /** - * 璐у弶鎻愬崌鏈轰换鍔″畬鎴� + * 鎵ц绉诲簱浠诲姟 */ - public synchronized void forkLiftFinished() { + public synchronized void shuttleLocMoveExecute() { try { - for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) { + //鏌ヨ绉诲簱浠诲姟 + 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; + } + + boolean stepPut = this.shuttleLocMoveExecutePut(wrkMast);//绉诲簱浠诲姟-灏忚溅鍙栬揣涓� + if (!stepPut) { + continue; + } + + boolean stepComplete = this.shuttleLocMoveComplete(wrkMast);//绉诲簱浠诲姟-浠诲姟瀹屾垚 + if (!stepComplete) { + continue; + } + + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 绉诲簱浠诲姟-灏忚溅鍙栬揣涓� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleLocMoveExecuteTake(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------// + Date now = new Date(); + + //灏忚溅绉诲姩鑷崇珯鐐� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鍙栬揣涓� + if (wrkMast.getWrkSts() == WrkStsType.NEW_LOC_MOVE.sts) { + if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� + boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getSourceLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣 + News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); + + if (result) { + wrkMast.setWrkSts(WrkStsType.LOC_MOVE_SHUTTLE_TAKE.sts);//灏忚溅鎼繍涓� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鍙栬揣涓� + wrkMast.setModiTime(now); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + if (wrkMastService.updateById(wrkMast)) { + return false; + } + } + + return false; + } + } + return true; + } + + /** + * 绉诲簱浠诲姟-灏忚溅鏀捐揣涓� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleLocMoveExecutePut(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------// + Date now = new Date(); + + //灏忚溅绉诲姩鑷崇珯鐐� 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; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + return false; + } + + if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞︽湭鍒拌揪鍙栬揣浣嶇疆", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); + return false; + } + + 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; + } + } + 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 liftFinished() { + try { + for (LiftSlave slave : slaveProperties.getLift()) { //鑾峰彇鎻愬崌鏈轰俊鎭� - ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId()); - ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); - if (forkLiftProtocol == null) { + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId()); + if (liftThread == null) { + continue; + } + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { continue; } //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂� - if (forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.WAITING.id - && forkLiftProtocol.getWrkNo() != 0 - ) { + if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id && liftProtocol.getTaskNo() != 0) { //灏嗕换鍔℃。鏍囪涓哄畬鎴� - WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo()); + WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo()); if (wrkMast != null) { - switch (wrkMast.getWrkSts().intValue()) { -// case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴� -// wrkMast.setWrkSts(4L); -// wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� -// if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) { -// //閲婃斁鎻愬崌鏈轰护鐗� -// liftProtocol.setToken(0); -// } -// break; -// case 24://24.鎻愬崌鏈烘惉杩愪腑 ==> 25.鎻愬崌鏈烘惉杩愬畬鎴� -// wrkMast.setWrkSts(25L); -// if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆 -// wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴� -// } else { -// if (wrkMast.getMk() == null || !wrkMast.getMk().equals("Y")) { -// //涓嶉渶瑕佺敤鍒版満姊拌噦锛岀洿鎺ヨ浆29.鍑哄簱瀹屾垚 -// wrkMast.setWrkSts(29L); -// wrkMast.setShuttleNo(null);//閲婃斁灏忚溅 -// wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� -// wrkMast.setModiTime(new Date()); -// } -// } -// break; - case 306://306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴� - wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts); - forkLiftThread.setSyncTaskNo(0); - break; - default: + if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN.sts) { + //3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴� + wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts); + } else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_LIFT_RUN.sts) { + //104.鎻愬崌鏈烘惉杩愪腑 ==> 109.鍑哄簱瀹屾垚 + if (wrkMast.getStaNo() == 1031) { + wrkMast.setWrkSts(WrkStsType.OUTBOUND_DEVP_RUN_2.sts); + } else { + 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); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_5.sts) { + //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_6.sts); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_9.sts) { + //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_10.sts); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_8.sts) { + //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_9.sts); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_4.sts) { + //鎻愬崌鏈鸿嚦灏忚溅灞� ==> 鎻愬崌鏈鸿嚦灏忚溅灞傚畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_5.sts); } - wrkMast.setModiTime(new Date()); if (wrkMastService.updateById(wrkMast)) { - forkLiftThread.reset(); - News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo()); + liftThread.setSyncTaskNo(0); + liftThread.setProtocolStatus(LiftProtocolStatusType.IDLE); + News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo()); } else { - News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo()); + News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 杈撻�佺嚎浠诲姟瀹屾垚 + */ + public synchronized void devpFinished() { + try { + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); + Map<Integer, StaProtocol> station = devpThread.getStation(); + WrkMast wrkMast = null; + for (StaProtocol staProtocol : station.values()) { + if ((staProtocol.getSiteId() == 1013 || staProtocol.getSiteId() == 1024) && staProtocol.isLoading()) { + wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getFinishWorkNo()).eq("wrk_sts", WrkStsType.OUTBOUND_DEVP_RUN.sts)); + if (wrkMast != null) { + wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts); + wrkMast.setModiTime(new Date()); + if (wrkMastService.updateById(wrkMast)) { + News.info("杈撻�佺嚎宸茬‘璁や笖浠诲姟瀹屾垚鐘舵�併�傝緭閫佺嚎鍙�={},瀹岀粨宸ヤ綔鍙�={}", staProtocol.getSiteId(), staProtocol.getFinishWorkNo()); + } else { + News.error("杈撻�佺嚎宸茬‘璁や笖浠诲姟瀹屾垚鐘舵��,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傝緭閫佺嚎鍙�={}锛屽畬缁撳伐浣滃彿={}", staProtocol.getSiteId(), staProtocol.getFinishWorkNo()); + } + } + } else if (staProtocol.getSiteId() == 1031 && staProtocol.isLoading()) { + wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getFinishWorkNo()).eq("wrk_sts", WrkStsType.OUTBOUND_DEVP_RUN_2.sts)); + if (wrkMast != null) { + staProtocol.setWorkNo(Short.parseShort(String.valueOf(wrkMast.getWrkNo()))); + staProtocol.setStaNo(Short.parseShort(String.valueOf(1135))); + MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); + News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(wrkMast)); + wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts); + wrkMast.setModiTime(new Date()); + if (wrkMastService.updateById(wrkMast)) { + News.info("杈撻�佺嚎宸茬‘璁や笖浠诲姟瀹屾垚鐘舵�併�傝緭閫佺嚎鍙�={},瀹岀粨宸ヤ綔鍙�={}", staProtocol.getSiteId(), staProtocol.getFinishWorkNo()); + } else { + News.error("杈撻�佺嚎宸茬‘璁や笖浠诲姟瀹屾垚鐘舵��,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傝緭閫佺嚎鍙�={}锛屽畬缁撳伐浣滃彿={}", staProtocol.getSiteId(), staProtocol.getFinishWorkNo()); } } } @@ -1309,6 +1850,14 @@ try { this.recShuttleErr(); this.recLiftErr(); + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, 1); + ledThread.errorReset(); + ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, 2); + ledThread.errorReset(); + ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, 3); + ledThread.errorReset(); + ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, 4); + ledThread.errorReset(); } catch (Exception e) { News.error("recErr fail", e); } @@ -1342,9 +1891,8 @@ } int errorCode = Integer.parseInt(shuttleProtocol.getErrorCode()); BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(errorCode); - String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName(); - BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog( - null, // 缂栧彿 + String errName = basShuttleErr == null ? "鏈煡寮傚父" : basShuttleErr.getErrName(); + BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(null, // 缂栧彿 wrkMast.getWrkNo(), // 宸ヤ綔鍙� now, // 鍙戠敓鏃堕棿 null, // 缁撴潫鏃堕棿 @@ -1391,39 +1939,38 @@ */ private void recLiftErr() { Date now = new Date(); - for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) { + for (LiftSlave slave : slaveProperties.getLift()) { // 鑾峰彇鎻愬崌鏈轰俊鎭� - ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId()); - if (forkLiftThread == null) { + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId()); + if (liftThread == null) { continue; } - ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); - if (forkLiftProtocol == null) { + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { continue; } - if (forkLiftProtocol.getTaskNo() != 0) { + if (liftProtocol.getTaskNo() != 0) { //鏈変换鍔� - BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(forkLiftSlave.getId(), forkLiftProtocol.getTaskNo()); + BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(slave.getId(), liftProtocol.getTaskNo()); // 鏈夊紓甯� if (latest == null) { - if (forkLiftProtocol.getErrorCode() != null && forkLiftProtocol.getErrorCode() != 0) { - WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo()); + if (liftProtocol.getErrorCode() != null && !liftProtocol.getErrorCode().equals("0")) { + WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo()); if (wrkMast == null) { continue; } - BasLiftErr basLiftErr = basLiftErrService.queryByCode(forkLiftProtocol.getErrorCode()); - String errName = basLiftErr==null? "鏈煡寮傚父":basLiftErr.getErrName(); + BasLiftErr basLiftErr = basLiftErrService.queryByCode(Integer.parseInt(liftProtocol.getErrorCode())); + String errName = basLiftErr == null ? "鏈煡寮傚父" : basLiftErr.getErrName(); - BasLiftErrLog basLiftErrLog = new BasLiftErrLog( - null, // 缂栧彿 + BasLiftErrLog basLiftErrLog = new BasLiftErrLog(null, // 缂栧彿 wrkMast.getWrkNo(), // 宸ヤ綔鍙� now, // 鍙戠敓鏃堕棿 null, // 缁撴潫鏃堕棿 wrkMast.getWrkSts(), // 宸ヤ綔鐘舵�� wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨� - forkLiftSlave.getId(), // 鎻愬崌鏈� + slave.getId(), // 鎻愬崌鏈� null, // plc wrkMast.getLocNo(), // 鐩爣搴撲綅 wrkMast.getStaNo(), // 鐩爣绔� @@ -1438,20 +1985,20 @@ now, // 淇敼鏃堕棿 null, // 淇敼浜哄憳 "浠诲姟涓紓甯�", // 澶囨敞 - JSON.toJSONString(forkLiftProtocol) // 绯荤粺鐘舵�佹暟鎹� + JSON.toJSONString(liftProtocol) // 绯荤粺鐘舵�佹暟鎹� ); if (!basLiftErrLogService.insert(basLiftErrLog)) { - News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", forkLiftSlave.getId(), errName); + News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", slave.getId(), errName); } } } else { // 寮傚父淇 - if (forkLiftProtocol.getErrorCode() == null || forkLiftProtocol.getErrorCode() == 0) { + 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:{}]", forkLiftSlave.getId(), latest.getId()); + News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", slave.getId(), latest.getId()); } } } @@ -1459,312 +2006,17 @@ } } - // ------------------------------------------------------------------------------- - -// /** -// * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐� -// */ -// public void storeEmptyPlt(){ -// try { -// for (DevpSlave devp : slaveProperties.getDevp()) { -// // 閬嶅巻绌烘澘鍏ュ簱鍙� -// for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) { -// // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭� -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); -// StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo()); -// if (staProtocol == null) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// // 绔欑偣鏉′欢鍒ゆ柇 -// if (staProtocol.isAutoing() -// && staProtocol.isLoading() -// && staProtocol.isInEnable() -// && staProtocol.isEmptyMk() -// && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo() >= 9990 || staProtocol.getWorkNo() <= 9999)) -// && staProtocol.isPakMk()) { -// -// // 鑾峰彇鏉$爜鎵弿浠俊鎭� -// String barcode = null; -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, emptyInSta.getBarcode()); -// if (barcodeThread != null) { -// String barcode0 = barcodeThread.getBarcode(); -// if (!Cools.isEmpty(barcode0)) { -//// News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", emptyInSta.getBarcode(), barcode0); -// if (!"NG".endsWith(barcode0) && !"NoRead".equals(barcode0) && !"empty".equals(barcode0)) { -// barcode = barcode0; -// } -// } -// } -// -// if (!Cools.isEmpty(barcode)) { -// WrkMast wrkMast = wrkMastMapper.selectByBarcode(barcode);//鏉$爜瀛樺湪宸ヤ綔妗� -// if (wrkMast != null) { -// continue; -// } -// } -// -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, emptyInSta.getLed()); -// -// try { -// LocTypeDto locTypeDto = new LocTypeDto(staProtocol); -// -// SearchLocParam param = new SearchLocParam(); -// param.setIoType(10); -// if (!Cools.isEmpty(barcode)) { -// param.setBarcode(barcode); -// } -// param.setSourceStaNo(emptyInSta.getStaNo()); -//// param.setLocType1(locTypeDto.getLocType1()); -// String response = new HttpHandler.Builder() -// .setUri(wmsUrl) -// .setPath("/rpc/pakin/loc/v2") -// .setJson(JSON.toJSONString(param)) -// .build() -// .doPost(); -// JSONObject jsonObject = JSON.parseObject(response); -// Integer code = jsonObject.getInteger("code"); -// if (code.equals(200)) { -// StartupDto dto = jsonObject.getObject("data", StartupDto.class); -// barcodeThread.setBarcode(""); -//// // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 -//// staProtocol.setWorkNo(dto.getWorkNo().shortValue()); -//// staProtocol.setStaNo(dto.getStaNo().shortValue()); -//// devpThread.setPakMk(staProtocol.getSiteId(), false); -//// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -//// if (!result) { -//// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); -//// } -// } else { -// if (ledThread != null) { -// String errorMsg = jsonObject.getString("msg"); -// if (!Cools.isEmpty(errorMsg)) { -// MessageQueue.offer(SlaveType.Led, emptyInSta.getLed(), new Task(3, errorMsg)); -// } -// } -// News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v2", JSON.toJSONString(param), response); -// } -// } catch (Exception e) { -// e.printStackTrace(); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// } -// -// } -// -// -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } - - /** - * 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣� - */ - public void ledExecute() { -// try { -// for (LedSlave led : slaveProperties.getLed()) { -// // 鑾峰彇杈撻�佺嚎plc绾跨▼ -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); -// // 鍛戒护闆嗗悎 -// List<LedCommand> commands = new ArrayList<>(); -// // 宸ヤ綔妗i泦鍚� -// List<WrkMast> wrkMasts = new ArrayList<>(); -// List<WrkMastLog> wrkMastLogs = new ArrayList<>(); -// for (Integer staNo : led.getStaArr()) { -// // 鑾峰彇鍙夎溅绔欑偣 -// StaProtocol staProtocol = devpThread.getStation().get(staNo); -// if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// // 鑾峰彇宸ヤ綔妗f暟鎹� -// WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); -// Integer wrkNo = staProtocol.getWorkNo().intValue(); -// Integer ioType = null; -// String sourceLocNo = null; -// String locNo = null; -// Integer wrkStaNo = null; -// String barcode = null; -// if (wrkMast == null) { -// //鏌ヨ鍘嗗彶妗� -// WrkMastLog wrkMastLog = wrkMastLogMapper.selectLatestByWorkNo(staProtocol.getWorkNo().intValue()); -// if (wrkMastLog == null) { -// continue; -// } -// ioType = wrkMastLog.getIoType(); -// sourceLocNo = wrkMastLog.getSourceLocNo(); -// locNo = wrkMastLog.getLocNo(); -// wrkStaNo = wrkMastLog.getStaNo(); -// barcode = wrkMastLog.getBarcode(); -// wrkMastLogs.add(wrkMastLog); -// }else { -// if (wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { -// continue; -// } -// ioType = wrkMast.getIoType(); -// sourceLocNo = wrkMast.getSourceLocNo(); -// locNo = wrkMast.getLocNo(); -// wrkStaNo = wrkMast.getStaNo(); -// barcode = wrkMast.getBarcode(); -// wrkMasts.add(wrkMast); -// } -// // 缁勮鍛戒护 -// LedCommand ledCommand = new LedCommand(); -// ledCommand.setWorkNo(wrkNo); -// ledCommand.setIoType(ioType); -// // 鍑哄簱妯″紡 -// switch (ioType) { -// case 101: -// ledCommand.setTitle("鍏ㄦ澘鍑哄簱"); -// break; -// case 103: -// ledCommand.setTitle("鎷f枡鍑哄簱"); -// break; -// case 104: -// ledCommand.setTitle("骞舵澘鍑哄簱"); -// break; -// case 107: -// ledCommand.setTitle("鐩樼偣鍑哄簱"); -// break; -// case 110: -// ledCommand.setTitle("绌烘澘鍑哄簱"); -// ledCommand.setEmptyMk(true); -// break; -// default: -// News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkNo, ioType); -// break; -// } -// ledCommand.setSourceLocNo(sourceLocNo); -// ledCommand.setLocNo(locNo); -// ledCommand.setStaNo(wrkStaNo); -// ledCommand.setBarcode(barcode); -// if (ioType != 110 && ioType != 10) { -// List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo)); -// if (!wrkDetls.isEmpty()) { -// wrkDetls.forEach(wrkDetl -> { -// double remainNum = wrkDetl.getStock() - wrkDetl.getAnfme();//鍓╀綑鏁伴噺 -// if (remainNum < 0) { -// remainNum = 0; -// } -// String matnr = wrkDetl.getMatnr(); -// Mat mat = matService.selectByMatnr(wrkDetl.getMatnr()); -// if (mat != null) { -// if (!mat.getMatnr().equals(mat.getMatnr2())) { -// matnr += " - " + mat.getMatnr2(); -// } -// } -// ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetl.getMaktx(), wrkDetl.getAnfme(), remainNum, wrkDetl.getSpecs(), wrkDetl.getSuppCode(), wrkDetl.getOrderNo())); -// }); -// }else { -// List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectLatestByWorkNo(wrkNo, barcode); -// for (WrkDetlLog wrkDetlLog : wrkDetlLogs) { -// double remainNum = wrkDetlLog.getStock() - wrkDetlLog.getAnfme();//鍓╀綑鏁伴噺 -// if (remainNum < 0) { -// remainNum = 0; -// } -// String matnr = wrkDetlLog.getMatnr(); -// Mat mat = matService.selectByMatnr(wrkDetlLog.getMatnr()); -// if (mat != null) { -// if (!mat.getMatnr().equals(mat.getMatnr2())) { -// matnr += " - " + mat.getMatnr2(); -// } -// } -// ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetlLog.getMaktx(), wrkDetlLog.getAnfme(), remainNum, wrkDetlLog.getSpecs(), wrkDetlLog.getSuppCode())); -// } -// } -// commands.add(ledCommand); -// } -// Set<Integer> workNos = null; -// if (!wrkMasts.isEmpty()) { -// workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); -// }else { -// workNos = wrkMastLogs.stream().map(WrkMastLog::getWrkNo).collect(Collectors.toSet()); -// } -// // 鑾峰彇LED绾跨▼ -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); -// // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护 -// if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) { -// continue; -// } -// // 鍛戒护涓嬪彂 ------------------------------------------------------------------------------- -// if (!commands.isEmpty()) { -// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) { -// log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); -// continue; -// } else { -// ledThread.setLedMk(false); -// } -// } -// -// try { -// // 淇敼涓绘。led鏍囪 -// for (WrkMast wrkMast : wrkMasts) { -// wrkMast.setOveMk("Y"); -// wrkMast.setModiTime(new Date()); -// if (wrkMastMapper.updateById(wrkMast) == 0) { -// throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�"); -// } -// } -// -// // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚� -// ledThread.setWorkNos(workNos); -// -// } catch (Exception e) { -// e.printStackTrace(); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// } -// -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } - } - - /** - * 鍏朵粬 ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅 - */ - public void ledReset() { -// try { -// for (LedSlave led : slaveProperties.getLed()) { -// // 鑾峰彇杈撻�佺嚎plc绾跨▼ -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); -// // 鍛戒护闆嗗悎 -// boolean reset = true; -// for (Integer staNo : led.getStaArr()) { -// // 鑾峰彇鍙夎溅绔欑偣 -// StaProtocol staProtocol = devpThread.getStation().get(staNo); -// if (staProtocol == null) { -// continue; -// } -// if (staProtocol.isLoading()) { -// reset = false; -// break; -// } -// } -// // 鑾峰彇led绾跨▼ -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); -// // led鏄剧ず榛樿鍐呭 -// if (reset) { -// ledThread.setLedMk(true); -// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) { -// log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } - } - /** * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數 */ public synchronized void loopShuttleCharge() { try { + + List<BasShuttleCharge> charges = basShuttleChargeService.selectList(new EntityWrapper<BasShuttleCharge>().orderBy("charge_id", true)); + if (charges.isEmpty()) { + return;//鏃犲厖鐢垫々 + } + for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { //鑾峰彇鍥涘悜绌挎杞︾嚎绋� ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId()); @@ -1785,17 +2037,21 @@ //灏忚溅鎵�鍦ㄦゼ灞� int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo()); - ShuttleChargeType shuttleCharge = null; + BasShuttleCharge shuttleCharge = null; //鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗� - for (ShuttleChargeType chargeType : ShuttleChargeType.values()) { - if (lev != Utils.getLev(chargeType.locNo)) { + for (BasShuttleCharge charge : charges) { + if (lev != Utils.getLev(charge.getLocNo())) { continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞� } + if (charge.getStatus() == 0) { + continue;//鍏呯數妗╄绂佺敤 + } + //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞� - if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) { - shuttleCharge = chargeType; + if (wrkMastService.selectChargeWorkingByChargeSta(charge.getChargeId()) == null) { + shuttleCharge = charge; break; } } @@ -1803,17 +2059,22 @@ if (shuttleCharge == null) { //鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗� //灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔� - for (ShuttleChargeType chargeType : ShuttleChargeType.values()) { - if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) { - //鍒ゆ柇褰撳墠鍏呯數妗╂ゼ灞傛槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗� - int chargeLev = Utils.getLev(chargeType.locNo);//鍏呯數妗╂ゼ灞� - boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞� - if (checkLevHasShuttle) { - //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗� + for (BasShuttleCharge charge : charges) { + if (wrkMastService.selectChargeWorkingByChargeSta(charge.getChargeId()) == null) { + //鍒ゆ柇褰撳墠鍏呯數妗╂槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗� + ArrayList<String> locs = new ArrayList<>(); + locs.add(charge.getLocNo()); + Integer checkHasShuttle = Utils.checkGroupLocHasShuttle(locs); + if (checkHasShuttle != null) { + //褰撳墠鍏呯數妗╂湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗� continue; } - shuttleCharge = chargeType; + if (charge.getStatus() == 0) { + continue;//鍏呯數妗╄绂佺敤 + } + + shuttleCharge = charge; break; } } @@ -1823,9 +2084,9 @@ continue; } - String chargeLocNo = shuttleCharge.locNo; + String chargeLocNo = shuttleCharge.getLocNo(); wrkMast = new WrkMast(); - wrkMast.setMk(String.valueOf(shuttleCharge.id)); + wrkMast.setMk(String.valueOf(shuttleCharge.getChargeId())); wrkMast.setWrkNo(commonService.getWorkNo(WrkIoType.SHUTTLE_CHARGE.id)); wrkMast.setWrkSts(WrkStsType.NEW_CHARGE.sts); wrkMast.setIoType(WrkIoType.SHUTTLE_CHARGE.id);//300.鍏呯數 @@ -1854,7 +2115,7 @@ //鏌ヨ灏忚溅鍏呯數浠诲姟 for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttle.getId()); - if(wrkMast == null) { + if (wrkMast == null) { continue; } @@ -1940,7 +2201,7 @@ //鍒ゆ柇鏄惁瀛樺湪鏈畬鎴愮殑绉诲姩浠诲姟 WrkMast moveWrk = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo()); - if(moveWrk != null) { + if (moveWrk != null) { return false; } @@ -1988,6 +2249,8 @@ //涓嬪彂浠诲姟 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_START);//瑙﹀彂閫氱煡 return false; } return true; @@ -2038,13 +2301,13 @@ return false; } - ShuttleChargeType chargeType = ShuttleChargeType.get(Integer.parseInt(wrkMast.getMk())); - if(chargeType == null) { + BasShuttleCharge basShuttleCharge = basShuttleChargeService.selectOne(new EntityWrapper<BasShuttleCharge>().eq("charge_id", wrkMast.getMk())); + if (basShuttleCharge == null) { return false; } //璋冨害灏忚溅鍘诲緟鏈轰綅 - boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), chargeType.waitLocNo, wrkMast.getShuttleNo()); + boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), basShuttleCharge.getWaitLocNo(), wrkMast.getShuttleNo()); if (!dispatched) { return false; } @@ -2067,376 +2330,82 @@ //鏌ヨ灏忚溅绉诲簱浠诲姟 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())) { + this.shuttleMoveExecuteTransportNoLift(wrkMast); + } else { + shuttleMoveService.shuttleMoveExecuteMove(wrkMast); } - - boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑 - if (!stepLiftMove) { - continue; - } - - boolean updateShuttleLocation = this.shuttleMoveExecuteStepUpdateShuttleLocation(wrkMast);//鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍� - if (!updateShuttleLocation) { - continue; - } - - boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 - if (!stepMoveLoc) { - continue; - } - } } catch (Exception e) { e.printStackTrace(); } } - /** - * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮珯鐐� - * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false - * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue - */ - private boolean 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; - } - - 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; - } - - //鑾峰彇婧愯緭閫佺珯 - ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); - if (liftSta == null) { - return false;//鎵句笉鍒扮珯鐐� - } - - //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) - WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftSta.getLiftNo()); - if (liftWrkMast != null) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getLiftNo()); - return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� - } - - //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** - List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo()); - if (targetNodes == null) { - return false;//鏈幏鍙栧埌鑺傜偣 - } - boolean checkPathIsAvailable = navigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo())); - if (!checkPathIsAvailable) { - News.info("{}浠诲姟锛寋}灏忚溅锛岀洰鏍囩珯鐐硅矾寰勮鍗犵敤锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢� - } - //灏濊瘯閿佸畾鐩爣绔欒矾寰� - boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - if (!result2) { - News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//璺緞閿佸畾澶辫触 - } - //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** - - 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(), liftSta.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); - if (commands == null) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - - //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, false); - return false;//璺緞瑙i攣澶辫触 - } - - assignCommand.setCommands(commands); - - wrkMast.setWrkSts(WrkStsType.MOVE_SITE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐� - wrkMast.setModiTime(now); - wrkMast.setLiftNo(liftSta.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� - wrkMast.setSystemMsg("");//娓呯┖娑堟伅 -// shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗� - if (wrkMastService.updateById(wrkMast)) { - //涓嬪彂浠诲姟 - shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); - return false; - } - return false; - } - return true; - } - - /** - * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愪腑 - * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false - * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue - */ - private boolean shuttleMoveExecuteStepLiftMove(WrkMast wrkMast) { - //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------// - Date now = new Date(); - - //鎻愬崌鏈烘惉杩愪腑 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑 - if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_COMPLETE.sts) { - ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, wrkMast.getLiftNo()); - if (forkLiftThread == null) { - return false; - } - ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); - if (forkLiftProtocol == null) { - return false; - } - if (!forkLiftThread.isIdle()) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); - return false; - } - //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 - WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); - if (liftWrkMast != null) { - if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); - return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� - } - } - - //鑾峰彇婧愮珯 - ForkLiftStaProtocol sourceLiftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); - //鑾峰彇鐩爣绔� - ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); - if (sourceLiftSta == null || liftSta == null) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo()); - return false;//缂哄皯绔欑偣淇℃伅 - } - - if (liftSta.getHasTray()) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo()); - return false;//鏈夋墭鐩樿烦杩� - } - - //鑾峰彇鎻愬崌鏈哄懡浠� - List<ForkLiftCommand> liftCommands = forkLiftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), 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.SHUTTLE_SWITCH.id.shortValue()); - - wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑 - wrkMast.setSystemMsg("");//娓呯┖娑堟伅 - wrkMast.setModiTime(now); - if (wrkMastService.updateById(wrkMast)) { - //涓嬪彂浠诲姟 - forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand); + private void shuttleMoveExecuteTransportLift(WrkMast wrkMast) { + WrkMast wrkMast1 = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo()); + LiftThread liftThread; + if (wrkMast1 != null && wrkMast1.getLiftNo() != null) { + liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + } else { + liftThread = LiftUtils.getRecentLift(wrkMast.getLocNo()); + if (liftThread == null) { + return; } } - return true; + //liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast1.getLiftNo()); + String liftLocNo = liftThread.getLiftLocNo(Utils.getLev(wrkMast.getLocNo())); + if (Utils.getRow(liftLocNo) == Utils.getRow(wrkMast.getSourceLocNo()) && Utils.getBay(liftLocNo) == Utils.getBay(wrkMast.getSourceLocNo())) { + //鍙栬揣浣嶇疆鏄彁鍗囨満 + transportLiftInService.shuttleMoveExecuteTransportLiftTake(wrkMast); + } else { + //鏀捐揣浣嶇疆鏄彁鍗囨満 + transportLiftOutService.shuttleMoveExecuteTransportLiftPut(wrkMast); + } } + + private void shuttleMoveExecuteTransportNoLift(WrkMast wrkMast) { + WrkMast mainWrk = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo()); + if (mainWrk != null && mainWrk.getIoType() == 1) { + //鍏ュ簱 + noLiftInService.shuttleMoveExecute(wrkMast, mainWrk.getStaNo(), Utils.getLev(mainWrk.getLocNo())); + } else if (mainWrk != null && mainWrk.getIoType() == 101) { + //鍑哄簱 + noLiftOutService.shuttleMoveExecute(wrkMast, mainWrk.getStaNo(), Utils.getLev(mainWrk.getSourceLocNo())); + } + } + /** - * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍� - * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false - * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + * 鍏ュ嚭搴撴ā寮忓垏鎹㈠嚱鏁� */ - private boolean shuttleMoveExecuteStepUpdateShuttleLocation(WrkMast wrkMast) { - //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------// - Date now = new Date(); - - //鎻愬崌鏈烘惉杩愪腑 307.鎻愬崌鏈烘惉杩愬畬鎴� ==> 308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 - if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts) { - //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - if (shuttleThread == null) { - return false; - } - ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); - if (shuttleProtocol == null) { - return false; - } - - //灏忚溅澶勪簬绌洪棽鐘舵�� - if (!shuttleThread.isIdle()) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false; - } - - 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); - - wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT.sts);//灏忚溅杩佸嚭鎻愬崌鏈轰腑 - wrkMast.setSystemMsg("");//娓呯┖娑堟伅 - wrkMast.setModiTime(now); - - if (wrkMastService.updateById(wrkMast)) { - //涓嬪彂浠诲姟 - shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); - } + public synchronized void ioConvert() { + for (LedSlave led : slaveProperties.getLed()) { + NormalLedThread ledThread = (NormalLedThread) SlaveConnection.get(SlaveType.Led, led.getId()); + ledThread.reset(); } - return true; - } - - /** - * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 - * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false - * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue - */ - private boolean shuttleMoveExecuteStepMoveLoc(WrkMast wrkMast) { - //--------------------------------------灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑-----------------------------------------// - Date now = new Date(); - - //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓� - if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts) { - - //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - if (shuttleThread == null) { - return false; - } - ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); - if (shuttleProtocol == null) { - return false; - } - - //灏忚溅澶勪簬绌洪棽鐘舵�� - if (!shuttleThread.isIdle()) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false; - } - - //灏忚溅宸茬粡鍦ㄧ洰鏍囧簱浣嶏紝鐩存帴璁ゅ畾灏忚溅绉诲姩浠诲姟瀹屾垚 - if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) { - wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);//311.灏忚溅绉诲姩瀹屾垚 - wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� - wrkMast.setModiTime(now); - wrkMastService.updateById(wrkMast); - return false; - } - - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 - assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� - assignCommand.setAuto(true);//鑷姩妯″紡 - assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣� - assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅 - - List<ShuttleCommand> commands = null; - //璺ㄦゼ灞傜Щ鍔ㄤ换鍔� - if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) { - //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆 - List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo()); - if (targetNodes == null) { - return false;//鏈幏鍙栧埌鑺傜偣 + try { + // 鏍规嵁杈撻�佺嚎plc閬嶅巻 + FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + WrkMast pakout = wrkMastService.selectWorkingPakout(1031); + if (pakout != null) { + if (devpThread.ioModeOf2_5 != IoModeType.PAKOUT_MODE) { + // 鍑哄簱鍒囨崲涓� + WrkMast pakin = wrkMastService.selectWorkingPakin(1032); + if (pakin == null && !devpThread.getStation().get(1031).isLoading() + && !devpThread.getStation().get(1032).isLoading()) { + // 鍑哄簱妯″紡 + devpThread.ioModeOf2_5 = IoModeType.PAKOUT_MODE; + } } - - //璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟 - ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟 - for (NavigateNode node : targetNodes) { - whiteList.add(new int[]{node.getX(), node.getY()}); - } - commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, whiteList, assignCommand, shuttleThread); - }else { - //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠� - commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); + } else { + // 鍏ュ簱妯″紡 + devpThread.ioModeOf2_5 = IoModeType.PAKIN_MODE; } - - if (commands == null) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//璺緞璁$畻澶辫触 - } - - assignCommand.setCommands(commands); - - wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓� - wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� - wrkMast.setSystemMsg("");//娓呯┖娑堟伅 - wrkMast.setModiTime(now); - - if (wrkMastService.updateById(wrkMast)) { - //涓嬪彂浠诲姟 - shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); - } + } catch (Exception e) { + e.printStackTrace(); } - 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