From 763863395f8c2174cd754ba04d3561d32e29d066 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期日, 07 四月 2024 08:17:50 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java | 181 ++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 160 insertions(+), 21 deletions(-)
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
index 6f679c5..e97a25f 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
@@ -7,20 +7,26 @@
import com.zy.asrs.framework.common.DateUtils;
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wcs.core.entity.BasShuttle;
import com.zy.asrs.wcs.core.entity.Loc;
import com.zy.asrs.wcs.core.model.NavigateNode;
import com.zy.asrs.wcs.core.model.command.ShuttleCommand;
import com.zy.asrs.wcs.core.model.enums.ShuttleCommandModeType;
import com.zy.asrs.wcs.core.model.enums.ShuttleRunDirection;
+import com.zy.asrs.wcs.core.service.BasShuttleService;
import com.zy.asrs.wcs.core.service.LocService;
import com.zy.asrs.wcs.core.utils.NavigateUtils;
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.rcs.cache.OutputQueue;
+import com.zy.asrs.wcs.rcs.entity.DeviceDataLog;
import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
+import com.zy.asrs.wcs.rcs.service.DeviceDataLogService;
import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
import com.zy.asrs.wcs.core.utils.RedisUtil;
import com.zy.asrs.wcs.rcs.entity.Device;
+import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.text.MessageFormat;
@@ -87,6 +93,9 @@
shuttleProtocol.setShuttleNo(Integer.valueOf(device.getDeviceNo()));
shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
shuttleProtocol.setDevice(device);
+
+ InnerSuhttleExtend extend = new InnerSuhttleExtend();
+ shuttleProtocol.setExtend(extend);
}
//----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
@@ -102,39 +111,46 @@
//鏄惁椤跺崌
shuttleProtocol.setHasLift(data.getInteger("palletStatus") == 1 ? true : false);
//鏄惁鏈夋墭鐩�
- shuttleProtocol.setHasPallet(data.getInteger("hasPallet") != 2 ? true : false);
+ shuttleProtocol.setHasPallet(data.getInteger("hasPallet") == null ? true : data.getInteger("hasPallet") != 2 ? true : false);
//琛岄┒鏂瑰悜
shuttleProtocol.setRunDirection(data.getString("direction") == null ? "none" : data.getString("direction"));
//鏄惁涓哄厖鐢电姸鎬�
shuttleProtocol.setHasCharge((deviceStatus == 5 || deviceStatus == 13) ? true : false);
+ //*********璇诲彇鎵╁睍瀛楁**********
+ InnerSuhttleExtend extend = (InnerSuhttleExtend) shuttleProtocol.getExtend();
+ extend.setMapVersion(data.getString("version"));//鍦板浘鐗堟湰
+ extend.setStatusDescription(data.getString("statusDescription"));//鐘舵�佹弿杩�
+ shuttleProtocol.setExtend(extend);//鎵╁睍瀛楁
+
///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end
-// //灏忚溅澶勪簬蹇欑鐘舵�侊紝灏嗘爣璁扮疆涓簍rue
-// if (shuttleProtocol.getDeviceStatusType() == ShuttleDeviceStatusType.BUSY) {
-// shuttleProtocol.setPakMk(true);
-// }
-//
+ //灏忚溅澶勪簬蹇欑鐘舵�侊紝灏嗘爣璁扮疆涓簍rue
+ if (!shuttleProtocol.getIdle()) {
+ shuttleProtocol.setPakMk(true);
+ }
+
// if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == ShuttleDeviceStatusType.IDLE.id) {
// //灏忚溅绌洪棽鐘舵�併�佸皬杞︿换鍔$姸鎬佷负鏈煡锛岃瀹氭浘绂荤嚎杩囷紝闇�瑕佸浣嶆垚绌洪棽
// shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE);
// }
-// if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) {
-// //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
-// //淇濆瓨鏁版嵁璁板綍
-// DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
-// DeviceDataLog deviceDataLog = new DeviceDataLog();
-// deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result.Content));
-// deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol));
-// deviceDataLog.setType("shuttle");
-// deviceDataLog.setDeviceNo(shuttleProtocol.getShuttleNo().intValue());
-// deviceDataLog.setCreateTime(new Date());
-// deviceDataLogService.insert(deviceDataLog);
-//
-// //鏇存柊閲囬泦鏃堕棿
-// shuttleProtocol.setDeviceDataLog(System.currentTimeMillis());
-// }
+ if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) {
+ //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
+ //淇濆瓨鏁版嵁璁板綍
+ DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
+ DeviceDataLog deviceDataLog = new DeviceDataLog();
+ deviceDataLog.setOriginData(JSON.toJSONString(data));
+ deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol));
+ deviceDataLog.setType(String.valueOf(SlaveType.Shuttle));
+ deviceDataLog.setDeviceNo(String.valueOf(shuttleProtocol.getShuttleNo()));
+ deviceDataLog.setCreateTime(new Date());
+ deviceDataLog.setHostId(device.getHostId());
+ deviceDataLogService.save(deviceDataLog);
+
+ //鏇存柊閲囬泦鏃堕棿
+ shuttleProtocol.setDeviceDataLog(System.currentTimeMillis());
+ }
} else {
OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆憑1}璇诲彇鍥涘悜绌挎杞︾姸鎬佷俊鎭け璐�", DateUtils.convert(new Date()), device.getDeviceNo()));
throw new CoolException(MessageFormat.format("璇诲彇鍥涘悜绌挎杞︾姸鎬佷俊鎭け璐� ===>> [id:{0}] [ip:{1}] [port:{2}]", device.getDeviceNo(), device.getIp(), device.getPort()));
@@ -325,6 +341,82 @@
}
@Override
+ public boolean isIdle() {
+ if (this.shuttleProtocol.getIdle() == null
+ || this.shuttleProtocol.getPakMk() == null
+ || this.shuttleProtocol.getErrorCode() == null
+ || this.shuttleProtocol.getProtocolStatus() == null
+ ) {
+ return false;
+ }
+
+ boolean res = this.shuttleProtocol.getIdle()
+ && this.shuttleProtocol.getPakMk()
+ && this.shuttleProtocol.getErrorCode().equals("0")
+ && this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id
+ ;
+ return res;
+ }
+
+ @Override
+ public boolean isRequireCharge() {
+ if (this.shuttleProtocol.getIdle() == null
+ || this.shuttleProtocol.getPakMk() == null
+ || this.shuttleProtocol.getErrorCode() == null
+ || this.shuttleProtocol.getProtocolStatus() == null
+ ) {
+ return false;
+ }
+
+ boolean res = this.shuttleProtocol.getIdle()
+ && this.shuttleProtocol.getPakMk()
+ && this.shuttleProtocol.getErrorCode().equals("0")
+ && this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id
+ ;
+ if (!res) {
+ return res;
+ } else {
+ // 鐢甸噺灏忎簬闃堝�奸渶瑕佽繘琛屽厖鐢�
+ try {
+ BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class);
+ if (shuttleService == null) {
+ return false;
+ }
+ BasShuttle basShuttle = shuttleService.getById(this.device.getDeviceNo());
+ if (basShuttle == null) {
+ return false;
+ }
+ Integer chargeLine = basShuttle.getChargeLine();
+ if (chargeLine == null) {
+ return false;
+ }
+ return Integer.valueOf(this.shuttleProtocol.getBatteryPower()) < chargeLine;
+ } catch (Exception e) {
+ News.error("fail", e);
+ return false;
+ }
+ }
+ }
+
+ @Override
+ public boolean isCharging() {
+ if (this.shuttleProtocol.getDeviceStatus() == null) {
+ return false;
+ }
+
+ if (this.shuttleProtocol.getDeviceStatus() == 5 || this.shuttleProtocol.getDeviceStatus() == 13) {
+ //鍏呯數涓拰鐢垫睜鍧囪 =銆� 鍏呯數
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean isChargingCompleted() {
+ return false;
+ }
+
+ @Override
public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) {
HashMap<String, Object> body = new HashMap<>();
body.put("messageName", "runOrder");
@@ -351,6 +443,37 @@
return command;
}
+ @Override
+ public ShuttleCommand getLiftCommand(Integer taskNo, Boolean lift) {
+ HashMap<String, Object> body = new HashMap<>();
+ body.put("messageName", "actionOrder");
+ body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
+ body.put("taskId", taskNo);
+ body.put("action", lift ? 1 : 2);
+
+ ShuttleCommand command = new ShuttleCommand();
+ command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
+ command.setBody(JSON.toJSONString(body));
+ command.setMode(lift ? ShuttleCommandModeType.PALLET_LIFT.id : ShuttleCommandModeType.PALLET_DOWN.id);
+ return command;
+ }
+
+ @Override
+ public ShuttleCommand getChargeCommand(Integer taskNo, Boolean charge) {
+ HashMap<String, Object> body = new HashMap<>();
+ body.put("messageName", "runOrder");
+ body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
+ body.put("taskId", taskNo);
+ body.put("action", charge ? 3 : 4);
+
+ ShuttleCommand command = new ShuttleCommand();
+ command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
+ command.setBody(JSON.toJSONString(body));
+ command.setMode(charge ? ShuttleCommandModeType.CHARGE_OPEN.id : ShuttleCommandModeType.CHARGE_CLOSE.id);
+ return command;
+ }
//***************璁惧灞傞�氳-涓嶅悓鍘傚晢璁惧閫氳鏂规涓嶄竴鑷�***************
@@ -410,4 +533,20 @@
}
return null;
}
+
+ @Data
+ private class InnerSuhttleExtend {
+
+ /**
+ * 鍦板浘鐗堟湰
+ */
+ private String mapVersion;
+
+ /**
+ * 鐘舵�佹弿杩�
+ */
+ private String statusDescription;
+
+ }
+
}
--
Gitblit v1.9.1