From 7073a4ff0761c05664a0fa5ebc1c51b3bb58c268 Mon Sep 17 00:00:00 2001
From: whycq <10027870+whycq@user.noreply.gitee.com>
Date: 星期六, 03 十二月 2022 13:42:48 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 821 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 704 insertions(+), 117 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 72d06fc..40d0589 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -26,30 +26,26 @@
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.*;
-import com.zy.core.model.CrnSlave;
-import com.zy.core.model.DevpSlave;
-import com.zy.core.model.LedSlave;
-import com.zy.core.model.Task;
+import com.zy.core.model.*;
import com.zy.core.model.command.CrnCommand;
import com.zy.core.model.command.LedCommand;
+import com.zy.core.model.command.RgvCommand;
import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.RgvProtocol;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.BarcodeThread;
import com.zy.core.thread.LedThread;
+import com.zy.core.thread.RgvThread;
import com.zy.core.thread.SiemensDevpThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -80,6 +76,8 @@
@Autowired
private BasCrnpService basCrnpService;
@Autowired
+ private BasRgvService basRgvService;
+ @Autowired
private BasDevpService basDevpService;
@Autowired
private LocDetlService locDetlService;
@@ -106,6 +104,7 @@
continue;
}
String barcode = barcodeThread.getBarcode();
+
if (!Cools.isEmpty(barcode)) {
log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode);
if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
@@ -116,6 +115,7 @@
}
// 鑾峰彇鍏ュ簱绔欎俊鎭�
+// SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
if (staProtocol == null) {
@@ -126,14 +126,16 @@
// 鍏ュ嚭搴撴ā寮忓垽鏂�
// if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; }
- if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
- continue;
- }
+// if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) {
+// continue;
+// }
// 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
- if (staProtocol.isAutoing() && staProtocol.isLoading()
+ if (staProtocol.isAutoing()
+ && staProtocol.isLoading()
&& staProtocol.isInEnable()
- && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990)
+ && !staProtocol.isEmptyMk()
+ && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990)
&& staProtocol.isPakMk()) {// && !Cools.isEmpty(barcode)) {
// if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
@@ -192,64 +194,6 @@
} else {
log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
}
-
-
-// // 妫�绱㈠簱浣�
-// LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-// List<String> matNos = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
-// StartupDto startupDto = commonService.getLocNo(1, 1, inSta.getStaNo(), matNos, locTypeDto, 0);
-// // 宸ヤ綔鍙�
-// int workNo = startupDto.getWorkNo();
-// // 鎻掑叆宸ヤ綔鏄庣粏妗�
-// wrkDetlService.createWorkDetail(workNo, waitPakins, barcode);
-//
-// // 鎻掑叆宸ヤ綔涓绘。
-// wrkMast = new WrkMast();
-// wrkMast.setWrkNo(workNo);
-// wrkMast.setIoTime(new Date());
-// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
-// wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
-// wrkMast.setIoPri(10D); // 浼樺厛绾э細10
-// wrkMast.setCrnNo(startupDto.getCrnNo());
-// wrkMast.setSourceStaNo(startupDto.getSourceStaNo());
-// wrkMast.setStaNo(startupDto.getStaNo());
-// wrkMast.setLocNo(startupDto.getLocNo());
-// wrkMast.setBarcode(barcode); // 鎵樼洏鐮�
-// wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
-// wrkMast.setPicking("N"); // 鎷f枡
-// wrkMast.setExitMk("N"); // 閫�鍑�
-// wrkMast.setEmptyMk("N"); // 绌烘澘
-// wrkMast.setLinkMis("N");
-// // 鎿嶄綔浜哄憳鏁版嵁
-// wrkMast.setAppeTime(new Date());
-// wrkMast.setModiTime(new Date());
-// Integer insert = wrkMastMapper.insert(wrkMast);
-// if (insert == 0) {
-// throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-// }
-// // 鏇存柊鐩爣搴撲綅鐘舵��
-// LocMast locMast = locMastService.selectById(startupDto.getLocNo());
-// locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
-// locMast.setModiTime(new Date());
-// if (!locMastService.updateById(locMast)){
-// throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
-// }
-// // 灏嗗叆搴撻�氱煡妗d慨鏀逛负宸插惎鍔�
-// if (wrkMastMapper.updateWaitPakInStep1(barcode) == 0) {
-// throw new CoolException("淇敼鍏ュ簱閫氱煡妗g姸鎬佷负宸插惎鍔ㄥけ璐�");
-// }
-//
-// // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-//
-// // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-// barcodeThread.setBarcode("");
-// staProtocol.setWorkNo((short) workNo);
-// staProtocol.setStaNo(startupDto.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绔欑偣淇℃伅澶辫触");
-// }
} catch (Exception e) {
e.printStackTrace();
@@ -448,7 +392,6 @@
/**
* 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯
*/
- @Async
public synchronized void crnStnToOutStn() {
for (CrnSlave crnSlave : slaveProperties.getCrn()) {
// 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
@@ -526,14 +469,12 @@
continue;
}
-// //鍫嗗灈鏈哄洖鍘熺偣浠诲姟涓�
-// if(crnThread.isBackHpFlag()){
-// continue;
-// }
-
// 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
- if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
- && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
+ if (crnProtocol.getStatusType() == CrnStatusType.IDLE
+ && crnProtocol.getTaskNo() == 0
+ && crnProtocol.getModeType() == CrnModeType.AUTO
+ && crnProtocol.getLoaded() == 0
+ && crnProtocol.getForkPos() == 0) {
// 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
if (crnProtocol.getLastIo().equals("I")) {
if (basCrnp.getInEnable().equals("Y")) {
@@ -559,6 +500,53 @@
this.locToLoc(crn, crnProtocol);
// this.crnRebackHp(crnProtocol, crnThread);
+ }
+ }
+
+ /**
+ * 鍏ュ嚭搴� ===>> RGV鍏ュ嚭搴撲綔涓氫笅鍙�
+ */
+ public synchronized void rgvIoExecute() {
+ for (RgvSlave rgv : slaveProperties.getRgv()) {
+ // 鑾峰彇RGV淇℃伅
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+ RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+ if (rgvProtocol == null) {
+ continue;
+ }
+ BasRgv basRgv = basRgvService.selectById(rgv.getId());
+ if (basRgv == null) {
+ log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgv.getId());
+ continue;
+ }
+
+ // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�, 骞朵笖鏃犱换鍔°�佹棤鐗╂椂鎵嶇户缁墽琛�
+ if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+ && rgvProtocol.getModeType() == RgvModeType.AUTO
+ && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0
+ && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0
+ ) {
+ // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
+ if (rgvProtocol.getLastIo().equals("I")) {
+ if (basRgv.getInEnable().equals("Y")) {
+ this.rgvInStn(rgv, rgvProtocol); // 鍏ュ簱
+ rgvProtocol.setLastIo("O");
+ } else if (basRgv.getOutEnable().equals("Y")) {
+ this.rgvOutStn(rgv, rgvProtocol); // 鍑哄簱
+ rgvProtocol.setLastIo("I");
+ }
+ }
+ // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
+ else if (rgvProtocol.getLastIo().equals("O")) {
+ if (basRgv.getOutEnable().equals("Y")) {
+ this.rgvOutStn(rgv, rgvProtocol); // 鍑哄簱
+ rgvProtocol.setLastIo("I");
+ } else if (basRgv.getInEnable().equals("Y")) {
+ this.rgvInStn(rgv, rgvProtocol); // 鍏ュ簱
+ rgvProtocol.setLastIo("O");
+ }
+ }
+ }
}
}
@@ -1006,6 +994,637 @@
// }
/**
+ * 鏌ユ壘宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級,涓擱GV鍏ュ簱鎺ラ┏绔欑鍚堢殑鐨勫叆搴撳伐浣滄。锛屾彁鍙栧嚭鏈�澶�2绗�
+ * @param slave
+ * @return
+ */
+ public synchronized List<WrkMast> getRgvInTask(RgvSlave slave){
+ List<WrkMast> wrkMastTask = new ArrayList<>();
+ List<Integer> staNos = new ArrayList<>();
+ for (RgvSlave.RgvStn rgvStn : slave.getRgvInSStn()) {
+ staNos.add(rgvStn.getStaNo());
+ }
+ if(staNos.size() < 1){
+ return null;
+ }
+ List<WrkMast> wrkMasts = wrkMastMapper.selectRgvInStep1(slave.getId(), staNos);
+ for(WrkMast wrkMast : wrkMasts){
+ Integer plcId = 0;
+ for (RgvSlave.RgvStn rgvStn : slave.getRgvInSStn()) {
+ if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){
+ plcId = rgvStn.getDevpPlcId();
+ break;
+ }
+ }
+
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, plcId);
+ //鍒ゆ柇RGV鍏ュ簱婧愮珯鐐癸紝鑷姩銆佹湁鐗╋紝鏈変换鍔″彿锛屽彲鍑�
+ boolean flag1 = false;
+ StaProtocol staProtocol1 = devpThread.getStation().get(wrkMast.getRgvSstaNo());
+ if (staProtocol1 == null) {
+ continue;
+ } else {
+ staProtocol1 = staProtocol1.clone();
+ }
+ // 鏌ヨ绔欑偣璇︾粏淇℃伅
+ BasDevp staDetl1 = basDevpService.selectById(wrkMast.getRgvSstaNo());
+ if (staDetl1 == null) {
+ log.error("RGV鍏ュ簱 ===>> 杈撻�佹満婧愮珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", wrkMast.getRgvSstaNo());
+ continue;
+ }
+ if (staProtocol1.isAutoing() && staProtocol1.isLoading() && staProtocol1.getWorkNo().intValue() == wrkMast.getWrkNo()
+ && staProtocol1.isOutEnable() && staDetl1.getOutEnable() != null && staDetl1.getOutEnable().equals("Y")) {
+ flag1 = true;
+ }
+
+ //鍒ゆ柇RGV鍏ュ簱鐩爣绔欑偣锛岃嚜鍔ㄣ�佹棤鐗╋紝娌℃湁浠诲姟鍙凤紝鍙叆
+ boolean flag2 = false;
+ StaProtocol staProtocol2 = devpThread.getStation().get(wrkMast.getRgvDstaNo());
+ if (staProtocol2 == null) {
+ continue;
+ } else {
+ staProtocol2 = staProtocol2.clone();
+ }
+ // 鏌ヨ绔欑偣璇︾粏淇℃伅
+ BasDevp staDetl2 = basDevpService.selectById(wrkMast.getRgvSstaNo());
+ if (staDetl2 == null) {
+ log.error("RGV鍏ュ簱 ===>> 杈撻�佹満婧愮珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", wrkMast.getRgvSstaNo());
+ continue;
+ }
+ if (staProtocol2.isAutoing() && staProtocol2.isLoading() && staProtocol2.getWorkNo().intValue() == wrkMast.getWrkNo()
+ && staProtocol2.isInEnable() && staDetl2.getCanining() != null && staDetl2.getCanining().equals("Y")) {
+ flag2 = true;
+ }
+
+ if(flag1 && flag2){
+ wrkMastTask.add(wrkMast);
+ if(wrkMastTask.size() >= 2) break;
+ }
+ }
+ return wrkMastTask;
+ }
+
+ /**
+ * 鍏ュ簱 ===>> RGV鍏ュ簱绔欏埌绔�
+ */
+ public synchronized void rgvInStn(RgvSlave slave, RgvProtocol rgvProtocol) {
+ //鏌ユ壘宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級,涓擱GV鍏ュ簱鎺ラ┏绔欑鍚堢殑鐨勫叆搴撳伐浣滄。锛屾彁鍙栧嚭鏈�澶�2绗�
+ List<WrkMast> wrkMastTask = getRgvInTask(slave);
+ if(wrkMastTask.size() <= 0){
+ return;
+ }
+
+ // RGV鎺у埗杩囨护锛� 蹇呴』婊¤冻鑷姩銆佺┖闂诧紝娌℃湁浠诲姟鍙�
+ if (!rgvProtocol.getStatusType().equals(CrnStatusType.IDLE)
+ || rgvProtocol.getModeType() != RgvModeType.AUTO
+ || rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getTaskNo2() != 0) {
+ return;
+ }
+
+ // 宸茬粡瀛樺湪RGV鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+ if(wrkMastMapper.selectRgvInWorking(slave.getId()).size() > 0){
+ return;
+ }
+
+ if(wrkMastTask.size() == 2){
+ //鏈�2绗擱GV寰呭叆搴撲换鍔★紝2涓伐浣嶏紝鍙栬揣銆佹斁璐т换鍔″悓鏃朵笅鍙�
+ WrkMast wrkMast1 = wrkMastTask.get(0);
+ WrkMast wrkMast2 = wrkMastTask.get(1);
+ if(Cools.isEmpty(wrkMast1) || Cools.isEmpty(wrkMast2)){
+ log.error("宸ヤ綔妗GV鍏ュ簱鏁版嵁涓虹┖");
+ return;
+ }
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(slave.getId()); // RGV缂栧彿
+ rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+ rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐�
+ rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐�
+ rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙�
+ rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅2浠诲姟妯″紡: 鍙栨斁璐�
+ rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //宸ヤ綅2婧愮珯鐐�
+ rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //宸ヤ綅2鐩爣绔欑偣
+ rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(2, rgvCommand))) {
+ //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", slave.getId(), JSON.toJSON(rgvCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓�
+ Date now = new Date();
+ wrkMast1.setWrkSts(6L);
+ wrkMast1.setCrnStrTime(now);
+ wrkMast1.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast1) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo());
+ }
+
+ wrkMast2.setWrkSts(6L);
+ wrkMast2.setCrnStrTime(now);
+ wrkMast2.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast2) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast2.getWrkNo());
+ }
+ }
+ } else if(wrkMastTask.size() == 1){
+ //鍙湁1绗擱GV寰呭叆搴撲换鍔★紝鍏堜笅鍙戝彇璐т换鍔★紝鍙栬揣鍚庡啀鍒ゆ柇鏄惁鏈変笅涓�绗斿緟鍏ュ簱浠诲姟
+ WrkMast wrkMast1 = wrkMastTask.get(0);
+ if(Cools.isEmpty(wrkMast1)){
+ log.error("宸ヤ綔妗GV鍏ュ簱鏁版嵁涓虹┖");
+ return;
+ }
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(slave.getId()); // RGV缂栧彿
+ rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+ rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栬揣
+ rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐�
+ rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) {
+ //step=2,宸ヤ綅1銆�2浠诲姟纭锛� step=4锛屽伐浣�1纭锛� step=5锛屽伐浣�2浠诲姟纭
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", slave.getId(), JSON.toJSON(rgvCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓�
+ Date now = new Date();
+ wrkMast1.setWrkSts(6L);
+ wrkMast1.setCrnStrTime(now);
+ wrkMast1.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast1) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo());
+ }
+ }
+ }
+ }
+
+ /**
+ * 鍑哄簱 ===>> RGV鍑哄簱绔欏埌绔�
+ */
+ public synchronized void rgvOutStn(RgvSlave slave, RgvProtocol rgvProtocol) {
+ //鏌ユ壘宸ヤ綔鐘舵�佷负14锛堝嚭搴撳畬鎴愶級,涓擱GV鍑哄簱鎺ラ┏绔欑鍚堢殑鐨勫嚭搴撳伐浣滄。锛屾彁鍙栧嚭鏈�澶�2绗�
+ List<WrkMast> wrkMastTask = getRgvOutTask(slave);
+ if(wrkMastTask.size() <= 0){
+ return;
+ }
+
+ // RGV鎺у埗杩囨护锛� 蹇呴』婊¤冻鑷姩銆佺┖闂诧紝娌℃湁浠诲姟鍙�
+ if (!rgvProtocol.getStatusType().equals(CrnStatusType.IDLE)
+ || rgvProtocol.getModeType() != RgvModeType.AUTO
+ || rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getTaskNo2() != 0) {
+ return;
+ }
+
+ // 宸茬粡瀛樺湪RGV鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+ if(wrkMastMapper.selectRgvOutWorking(slave.getId()).size() > 0){
+ return;
+ }
+
+ if(wrkMastTask.size() == 2){
+ //鏈�2绗擱GV寰呭叆搴撲换鍔★紝2涓伐浣嶏紝鍙栬揣銆佹斁璐т换鍔″悓鏃朵笅鍙�
+ WrkMast wrkMast1 = wrkMastTask.get(0);
+ WrkMast wrkMast2 = wrkMastTask.get(1);
+ if(Cools.isEmpty(wrkMast1) || Cools.isEmpty(wrkMast2)){
+ log.error("宸ヤ綔妗GV鍏ュ簱鏁版嵁涓虹┖");
+ return;
+ }
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(slave.getId()); // RGV缂栧彿
+ rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+ rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐�
+ rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐�
+ rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙�
+ rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅2浠诲姟妯″紡: 鍙栨斁璐�
+ rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //宸ヤ綅2婧愮珯鐐�
+ rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //宸ヤ綅2鐩爣绔欑偣
+ rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(2, rgvCommand))) {
+ //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", slave.getId(), JSON.toJSON(rgvCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 14.鍑哄簱瀹屾垚 => 16.RGV鍑哄簱鍙栬揣涓�
+ Date now = new Date();
+ wrkMast1.setWrkSts(16L);
+ wrkMast1.setCrnStrTime(now);
+ wrkMast1.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast1) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 14.鍑哄簱瀹屾垚 => 16.RGV鍑哄簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo());
+ }
+
+ wrkMast2.setWrkSts(16L);
+ wrkMast2.setCrnStrTime(now);
+ wrkMast2.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast2) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 14.鍑哄簱瀹屾垚 => 16.RGV鍑哄簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast2.getWrkNo());
+ }
+ }
+ } else if(wrkMastTask.size() == 1){
+ //鍙湁1绗擱GV寰呭叆搴撲换鍔★紝鍏堜笅鍙戝彇璐т换鍔★紝鍙栬揣鍚庡啀鍒ゆ柇鏄惁鏈変笅涓�绗斿緟鍏ュ簱浠诲姟
+ WrkMast wrkMast1 = wrkMastTask.get(0);
+ if(Cools.isEmpty(wrkMast1)){
+ log.error("宸ヤ綔妗GV鍏ュ簱鏁版嵁涓虹┖");
+ return;
+ }
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(slave.getId()); // RGV缂栧彿
+ rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+ rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栬揣
+ rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐�
+ rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) {
+ //step=2,宸ヤ綅1銆�2浠诲姟纭锛� step=4锛屽伐浣�1纭锛� step=5锛屽伐浣�2浠诲姟纭
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", slave.getId(), JSON.toJSON(rgvCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 14.鍑哄簱瀹屾垚 => 16.RGV鍑哄簱鍙栬揣涓�
+ Date now = new Date();
+ wrkMast1.setWrkSts(16L);
+ wrkMast1.setCrnStrTime(now);
+ wrkMast1.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast1) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 14.鍑哄簱瀹屾垚 => 16.RGV鍑哄簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo());
+ }
+ }
+ }
+ }
+
+ /**
+ * 鏌ユ壘宸ヤ綔鐘舵�佷负14锛堝嚭搴撳畬鎴愶級,涓擱GV鍑哄簱鎺ラ┏绔欑鍚堢殑鐨勫嚭搴撳伐浣滄。锛屾彁鍙栧嚭鏈�澶�2绗�
+ * @param slave
+ * @return
+ */
+ public synchronized List<WrkMast> getRgvOutTask(RgvSlave slave){
+ List<WrkMast> wrkMastTask = new ArrayList<>();
+ List<Integer> staNos = new ArrayList<>();
+ for (RgvSlave.RgvStn rgvStn : slave.getRgvOutSStn()) {
+ staNos.add(rgvStn.getStaNo());
+ }
+ if(staNos.size() < 1){
+ return null;
+ }
+ List<WrkMast> wrkMasts = wrkMastMapper.selectRgvOutStep1(slave.getId(), staNos);
+ for(WrkMast wrkMast : wrkMasts){
+ Integer plcId = 0;
+ for (RgvSlave.RgvStn rgvStn : slave.getRgvOutSStn()) {
+ if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){
+ plcId = rgvStn.getDevpPlcId();
+ break;
+ }
+ }
+
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, plcId);
+ //鍒ゆ柇RGV鍑哄簱婧愮珯鐐癸紝鑷姩銆佹湁鐗╋紝鏈変换鍔″彿锛屽彲鍑�
+ boolean flag1 = false;
+ StaProtocol staProtocol1 = devpThread.getStation().get(wrkMast.getRgvSstaNo());
+ if (staProtocol1 == null) {
+ continue;
+ } else {
+ staProtocol1 = staProtocol1.clone();
+ }
+ // 鏌ヨ绔欑偣璇︾粏淇℃伅
+ BasDevp staDetl1 = basDevpService.selectById(wrkMast.getRgvSstaNo());
+ if (staDetl1 == null) {
+ log.error("RGV鍑哄簱 ===>> 杈撻�佹満婧愮珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", wrkMast.getRgvSstaNo());
+ continue;
+ }
+ if (staProtocol1.isAutoing() && staProtocol1.isLoading() && staProtocol1.getWorkNo().intValue() == wrkMast.getWrkNo()
+ && staProtocol1.isOutEnable() && staDetl1.getOutEnable() != null && staDetl1.getOutEnable().equals("Y")) {
+ flag1 = true;
+ }
+
+ //鍒ゆ柇RGV鍑哄簱鐩爣绔欑偣锛岃嚜鍔ㄣ�佹棤鐗╋紝娌℃湁浠诲姟鍙凤紝鍙叆
+ boolean flag2 = false;
+ StaProtocol staProtocol2 = devpThread.getStation().get(wrkMast.getRgvDstaNo());
+ if (staProtocol2 == null) {
+ continue;
+ } else {
+ staProtocol2 = staProtocol2.clone();
+ }
+ // 鏌ヨ绔欑偣璇︾粏淇℃伅
+ BasDevp staDetl2 = basDevpService.selectById(wrkMast.getRgvSstaNo());
+ if (staDetl2 == null) {
+ log.error("RGV鍑哄簱 ===>> 杈撻�佹満婧愮珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", wrkMast.getRgvSstaNo());
+ continue;
+ }
+ if (staProtocol2.isAutoing() && staProtocol2.isLoading() && staProtocol2.getWorkNo().intValue() == wrkMast.getWrkNo()
+ && staProtocol2.isInEnable() && staDetl2.getCanining() != null && staDetl2.getCanining().equals("Y")) {
+ flag2 = true;
+ }
+
+ if(flag1 && flag2){
+ wrkMastTask.add(wrkMast);
+ if(wrkMastTask.size() >= 2) break;
+ }
+ }
+ return wrkMastTask;
+ }
+
+ /**
+ * 鏍规嵁RGV瀹屾垚淇″彿锛屾墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屽拰RGV鐨勪换鍔′笅鍙�
+ */
+ public synchronized void rgvFinished() {
+ for (RgvSlave rgv : slaveProperties.getRgv()) {
+ // 鑾峰彇RGV淇℃伅
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+ RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+ if (rgvProtocol == null) {
+ continue;
+ }
+ // 宸ヤ綅1鐘舵�侊細鍙栬揣瀹屾垚绛夊緟纭91 骞朵笖 浠诲姟瀹屾垚浣� = 1
+ if (rgvProtocol.statusType1 == RgvStatusType.FETCHWAITING && rgvProtocol.getTaskNo1() != 0) {
+ //宸ヤ綅1鍙栬揣瀹屾垚鍚庯紝宸ヤ綅2鏄棤璐х┖闂茬姸鎬佹椂锛屽噯澶囩粰宸ヤ綅2鍙戜换鍔★紝纭鏄惁鏈夊緟鎵цRGV浠诲姟
+ if (rgvProtocol.getModeType() == RgvModeType.AUTO
+ && rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskNo2() == 0
+ && rgvProtocol.getLoaded1() > 0 && rgvProtocol.getLoaded2() == 0
+ && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
+ ) {
+ WrkMast wrkMast1 = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo1().intValue());
+ if (wrkMast1 == null) {
+ log.error("RGV宸ヤ綅1澶勪簬绛夊緟纭涓斿彇璐т换鍔″畬鎴愮姸鎬侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�俁GV鍙�={}锛屽伐浣滃彿={}", rgv.getId(), rgvProtocol.getTaskNo1());
+ continue;
+ }
+ List<WrkMast> wrkMastTask = new ArrayList<>();
+ List<WrkMast> list = new ArrayList<>();
+ Integer type = 0;//1鍏ュ簱锛�2鍑哄簱
+ if(wrkMast1.getWrkSts()==6L){
+ wrkMastTask = getRgvInTask(rgv);
+ list = wrkMastMapper.selectRgvInWorking(rgv.getId());
+ type = 1;
+ } else if(wrkMast1.getWrkSts()==16L){
+ wrkMastTask = getRgvOutTask(rgv);
+ list = wrkMastMapper.selectRgvOutWorking(rgv.getId());
+ type = 2;
+ }
+ if(wrkMastTask.size() > 0){//鏈夌户缁墽琛屼换鍔★紝涓嬪彂鍙栬揣浠诲姟缁欏伐浣�2
+ // 宸茬粡瀛樺湪RGV鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+ if (list.size() > 1) {
+ continue;
+ }
+ WrkMast wrkMast2 = wrkMastTask.get(0);
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(rgv.getId()); // RGV缂栧彿
+ rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙�
+ rgvCommand.setTaskMode2(RgvTaskModeType.FETCH); // 宸ヤ綅2浠诲姟妯″紡: 鍙栬揣
+ rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //宸ヤ綅2婧愮珯鐐�
+ rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //宸ヤ綅2鐩爣绔欑偣
+ rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast2.getRgvNo(), new Task(5, rgvCommand))) {
+ //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔�
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgv.getId(), JSON.toJSON(rgvCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓�
+ Date now = new Date();
+ wrkMast2.setWrkSts(type==1 ? 6L : 16L);
+ wrkMast2.setCrnStrTime(now);
+ wrkMast2.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast2) == 0) {
+ log.error("宸ヤ綅2淇敼宸ヤ綔妗g姸鎬� 2/14.璁惧涓婅蛋 => 6/16.RGV鍏ュ簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast2.getWrkNo());
+ }
+ }
+ } else {//娌℃湁缁х画鎵ц浠诲姟锛屼笅鍙戞斁璐т换鍔$粰宸ヤ綅1
+ if(type == 1 && wrkMast1.getWrkSts() != 6L){//RGV鍏ュ簱鍙栬揣涓�
+ continue;
+ }
+ if(type == 2 && wrkMast1.getWrkSts() != 16L){//RGV鍑哄簱鍙栬揣涓�
+ continue;
+ }
+
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(rgv.getId()); // RGV缂栧彿
+ rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+ rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣
+ rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐�
+ rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) {
+ //step=2,宸ヤ綅1銆�2浠诲姟纭锛� step=4锛屽伐浣�1纭锛� step=5锛屽伐浣�2浠诲姟纭
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgv.getId(), JSON.toJSON(rgvCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 6.RGV鍏ュ簱鍙栬揣涓� => 7.RGV鍏ュ簱鏀捐揣涓�
+ Date now = new Date();
+ wrkMast1.setWrkSts(type==1 ? 7L : 17L);
+ wrkMast1.setCrnEndTime(now);
+ wrkMast1.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast1) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 6/16.RGV鍏ュ簱鍙栬揣涓� => 7/17.RGV鍏ュ簱鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo());
+ }
+ log.error("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgv.getId(), JSON.toJSON(rgvCommand));
+ }
+ }
+ } else if (rgvProtocol.getModeType() == RgvModeType.AUTO
+ && rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskNo2() > 0
+ && rgvProtocol.getLoaded1() > 0 && rgvProtocol.getLoaded2() > 0
+ && rgvProtocol.statusType2 == RgvStatusType.FETCHWAITING){
+ // 宸ヤ綅2鐘舵�侊細涔熸槸鍙栬揣瀹屾垚绛夊緟纭91 骞朵笖 浠诲姟瀹屾垚浣� = 1, 宸ヤ綅1銆�2鍚屾椂涓嬪彂鏀捐揣浠诲姟
+ WrkMast wrkMast1 = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo1().intValue());
+ WrkMast wrkMast2 = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo2().intValue());
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ RgvCommand rgvCommand = new RgvCommand();
+ rgvCommand.setRgvNo(rgv.getId()); // RGV缂栧彿
+ rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+ rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣
+ rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐�
+ rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣
+ rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+ rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙�
+ rgvCommand.setTaskMode2(RgvTaskModeType.PUT); // 宸ヤ綅2浠诲姟妯″紡: 鏀捐揣
+ rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //宸ヤ綅2婧愮珯鐐�
+ rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //宸ヤ綅2鐩爣绔欑偣
+ rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(2, rgvCommand))) {
+ //step=2,宸ヤ綅1銆�2浠诲姟纭锛� step=4锛屽伐浣�1纭锛� step=5锛屽伐浣�2浠诲姟纭
+ log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgv.getId(), JSON.toJSON(rgvCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓�
+ Date now = new Date();
+ wrkMast1.setWrkSts(wrkMast1.getWrkSts()==6L ? 7L : 17L);
+ wrkMast1.setCrnStrTime(now);
+ wrkMast1.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast1) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 6/16.RGV鍏ュ簱鍙栬揣涓� => 7/17.RGV鍏ュ簱鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo());
+ }
+
+ wrkMast2.setWrkSts(wrkMast2.getWrkSts()==6L ? 7L : 17L);
+ wrkMast2.setCrnStrTime(now);
+ wrkMast2.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast2) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 6/16.RGV鍏ュ簱鍙栬揣涓� => 7/17.RGV鍏ュ簱鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast2.getWrkNo());
+ }
+ }
+ }
+ }
+
+ }
+ }
+
+ /**
+ * 鍏ュ嚭搴� ===>> RGV鍑哄簱绔欏埌鍫嗗灈鏈哄叆搴撶珯/绯荤粺鍏ュ簱绔�
+ * rgvInDStnToCrnStn
+ */
+ public synchronized void rgvDestStnToCrnStn() {
+ for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+ // 閬嶅巻鍏ュ簱浠诲姟鐨凴GV鍑哄簱绔�
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvDestStn()) {
+ // 鑾峰彇RGV鍑哄簱绔欎俊鎭�
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId());
+ StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo());
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
+ // 鏌ヨ宸ヤ綔妗ist
+// List<WrkMast> wrkMasts = wrkMastMapper.selectRgvInStep2(staProtocol.getSiteId());
+ List<WrkMast> wrkMasts = wrkMastMapper.selectRgvDestStep2(staProtocol.getSiteId());
+ for(WrkMast wrkMast : wrkMasts){
+ // 鍒ゆ柇宸ヤ綔妗f潯浠�
+ if (wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null
+ || wrkMast.getRgvSstaNo() == null || wrkMast.getRgvDstaNo() == null) {
+ continue;
+ }
+
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, wrkMast.getRgvNo());
+ RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+ // 鍒ゆ柇RGV鐘舵�佺瓑寰呯‘璁�,宸ヤ綅1
+ if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())
+ && rgvProtocol.statusType1 == RgvStatusType.WAITING) {
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ // 涓嬪彂绔欑偣淇℃伅
+ staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+ staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+ if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
+ continue;
+ }
+ // 鏇存柊宸ヤ綔妗g姸鎬佷负2,14
+ wrkMast.setWrkSts(wrkMast.getWrkSts()==7L ? 2L : 14L);
+ wrkMast.setOnlineYn("Y");
+ wrkMast.setCrnEndTime(new Date());
+ if (wrkMastMapper.updateById(wrkMast) != 0) {
+ // 澶嶄綅RGV宸ヤ綅1
+ rgvThread.setResetFlag1(true);
+ } else {
+ log.error("RGV宸ヤ綅1鎺ラ┏锛屾洿鏂板伐浣滄。鐨勫伐浣滅姸鎬佷负{}澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkSts()==7L ? 2L : 14L, wrkMast.getWrkNo());
+ }
+ }
+ // 鍒ゆ柇RGV鐘舵�佺瓑寰呯‘璁�,宸ヤ綅2
+ if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo2().equals(wrkMast.getWrkNo().shortValue())
+ && rgvProtocol.statusType2 == RgvStatusType.WAITING) {
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ // 涓嬪彂绔欑偣淇℃伅
+ staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+ staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+ if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
+ continue;
+ }
+ // 鏇存柊宸ヤ綔妗g姸鎬佷负2,14
+ wrkMast.setWrkSts(wrkMast.getWrkSts()==7L ? 2L : 14L);
+ wrkMast.setOnlineYn("Y");
+ wrkMast.setCrnEndTime(new Date());
+ if (wrkMastMapper.updateById(wrkMast) != 0) {
+ // 澶嶄綅RGV宸ヤ綅2
+ rgvThread.setResetFlag2(true);
+ } else {
+ log.error("RGV宸ヤ綅2鎺ラ┏锛屾洿鏂板伐浣滄。鐨勫伐浣滅姸鎬佷负{}澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkSts()==7L ? 2L : 14L, wrkMast.getWrkNo());
+ }
+ }
+ }
+
+ }
+ }
+ }
+ }
+
+ /**
+ * 鍑哄簱 ===>> RGV鍑哄簱绔欏埌绯荤粺鍑哄簱绔�
+ */
+ public synchronized void rgvOutDStnToOutStn() {
+ for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+ // 閬嶅巻鍑哄簱浠诲姟鐨凴GV鍑哄簱绔�
+ for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvDestStn()) {
+ // 鑾峰彇RGV鍑哄簱绔欎俊鎭�
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId());
+ StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo());
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
+ // 鏌ヨ宸ヤ綔妗ist
+ List<WrkMast> wrkMasts = wrkMastMapper.selectRgvOutStep2(staProtocol.getSiteId());
+ for(WrkMast wrkMast : wrkMasts){
+ // 鍒ゆ柇宸ヤ綔妗f潯浠�
+ if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null
+ || wrkMast.getRgvSstaNo() == null || wrkMast.getRgvDstaNo() == null) {
+ continue;
+ }
+
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, wrkMast.getRgvNo());
+ RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+ // 鍒ゆ柇RGV鐘舵�佺瓑寰呯‘璁�,宸ヤ綅1
+ if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue())
+ && rgvProtocol.statusType1 == RgvStatusType.WAITING) {
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ // 涓嬪彂绔欑偣淇℃伅
+ staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+ staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+ if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
+ continue;
+ }
+ // 鏇存柊宸ヤ綔妗g姸鎬佷负14
+ wrkMast.setWrkSts(14L);
+ wrkMast.setOnlineYn("Y"); //鎺у埗WMS灏嗗伐浣滅姸鎬�14杞�15鐨勬椂鏈猴紝鍙湁RGV杩愭惉瀹屾垚鍚庢墠鍙互杞�
+ wrkMast.setCrnEndTime(new Date());
+ if (wrkMastMapper.updateById(wrkMast) != 0) {
+ // 澶嶄綅RGV宸ヤ綅1
+ rgvThread.setResetFlag1(true);
+ } else {
+ log.error("RGV宸ヤ綅1鎺ラ┏锛屾洿鏂板伐浣滄。鐨勫伐浣滅姸鎬佷负2澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+ }
+ }
+ // 鍒ゆ柇RGV鐘舵�佺瓑寰呯‘璁�,宸ヤ綅2
+ if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo2().equals(wrkMast.getWrkNo().shortValue())
+ && rgvProtocol.statusType2 == RgvStatusType.WAITING) {
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ // 涓嬪彂绔欑偣淇℃伅
+ staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+ staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+ if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
+ continue;
+ }
+ // 鏇存柊宸ヤ綔妗g姸鎬佷负14
+ wrkMast.setWrkSts(14L);
+ wrkMast.setOnlineYn("Y"); //鎺у埗WMS灏嗗伐浣滅姸鎬�14杞�15鐨勬椂鏈猴紝鍙湁RGV杩愭惉瀹屾垚鍚庢墠鍙互杞�
+ wrkMast.setCrnEndTime(new Date());
+ if (wrkMastMapper.updateById(wrkMast) != 0) {
+ // 澶嶄綅RGV宸ヤ綅2
+ rgvThread.setResetFlag2(true);
+ } else {
+ log.error("RGV宸ヤ綅2鎺ラ┏锛屾洿鏂板伐浣滄。鐨勫伐浣滅姸鎬佷负2澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+ }
+ }
+ }
+
+ }
+ }
+ }
+ }
+
+ /**
* 搴撲綅绉昏浆
*/
public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol) {
@@ -1076,8 +1695,7 @@
/**
* 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
*/
- @Async
- public void storeFinished() {
+ public synchronized void storeFinished() {
for (CrnSlave crn : slaveProperties.getCrn()) {
// 鑾峰彇鍫嗗灈鏈轰俊鎭�
CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
@@ -1120,8 +1738,7 @@
/**
* 鍫嗗灈鏈哄紓甯镐俊鎭褰�
*/
- @Async
- public void recCrnErr() {
+ public synchronized void recCrnErr() {
Date now = new Date();
for (CrnSlave crn : slaveProperties.getCrn()) {
// 鑾峰彇鍫嗗灈鏈轰俊鎭�
@@ -1242,8 +1859,7 @@
/**
* 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
*/
- @Async
- public void storeEmptyPlt() {
+ public synchronized void storeEmptyPlt() {
for (DevpSlave devp : slaveProperties.getDevp()) {
// 閬嶅巻绌烘澘鍏ュ簱鍙�
for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
@@ -1357,8 +1973,7 @@
/**
* 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
*/
- @Async
- public void ledExecute() {
+ public synchronized void ledExecute() {
for (LedSlave led : slaveProperties.getLed()) {
// 鑾峰彇杈撻�佺嚎plc绾跨▼
DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
@@ -1474,35 +2089,7 @@
/**
* 鍏朵粬 ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
*/
- @Async
- public void ledReset() {
-// 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;
-// } else {
-// staProtocol = staProtocol.clone();
-// }
-// if (staProtocol.getWorkNo() != 0) {
-// reset = false;
-// break;
-// }
-// }
-// // 鑾峰彇led绾跨▼
-// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getDevpPlcId());
-// // led鏄剧ず榛樿鍐呭
-// if (reset) {
-// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
-// log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-// }
-// }
-// }
+ public synchronized void ledReset() {
for (LedSlave led : slaveProperties.getLed()) {
// 鑾峰彇杈撻�佺嚎plc绾跨▼
DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
--
Gitblit v1.9.1