From 3909c3583e8fc2057715ca20ac16b14072f32b14 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 28 九月 2023 08:46:56 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java | 5
src/main/java/com/zy/asrs/controller/RobotController.java | 38 +
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 114 +++++
src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java | 4
src/main/resources/mapper/LocMastMapper.xml | 10
src/main/java/com/zy/common/utils/RobotUtils.java | 24
src/main/webapp/views/shuttle2.html | 626 +++++++++++++++++++++++++++++++
src/main/java/com/zy/asrs/utils/Utils.java | 4
src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java | 40 ++
src/main/java/com/zy/asrs/controller/ShuttleController.java | 45 ++
src/main/java/com/zy/asrs/mapper/LocMastMapper.java | 2
src/main/java/com/zy/asrs/domain/param/RobotReportActionStatusParam.java | 2
src/main/java/com/zy/core/thread/NyShuttleThread.java | 90 ++-
src/main/java/com/zy/core/MainProcess.java | 2
src/main/java/com/zy/asrs/service/LocMastService.java | 2
src/main/resources/application.yml | 137 +++++-
16 files changed, 1,066 insertions(+), 79 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/RobotController.java b/src/main/java/com/zy/asrs/controller/RobotController.java
index 49b74fe..bcb5fee 100644
--- a/src/main/java/com/zy/asrs/controller/RobotController.java
+++ b/src/main/java/com/zy/asrs/controller/RobotController.java
@@ -2,7 +2,19 @@
import com.zy.asrs.domain.param.RobotReportActionStatusParam;
import com.zy.asrs.domain.param.ReportExceptionParam;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.common.utils.RobotUtils;
+import com.zy.core.DevpThread;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.DevpSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.protocol.StaProtocol;
+import com.zy.core.properties.SlaveProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@@ -11,6 +23,11 @@
@RestController
public class RobotController {
+
+ @Autowired
+ private WrkMastMapper wrkMastMapper;
+ @Autowired
+ private SlaveProperties slaveProperties;
//鏈烘鎵嬪悜WCS鍥炴姤浠诲姟缁撴灉瀹屾垚
@PostMapping("/request/wcs/report_task_status")
@@ -21,6 +38,17 @@
Integer pickNum = param.getPick_num();
Integer targetNum = param.getTarget_num();
String message = param.getMessage();
+ Integer staNo = param.getFrom_ws();//鐩爣绔�
+
+ //缁欑洰鏍囩珯鍐欏叆鍑哄簱绔�344
+ for (DevpSlave devp : slaveProperties.getDevp()) {
+ // 鑾峰彇鍏ュ簱绔欎俊鎭�
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+ StaProtocol staProtocol = devpThread.getStation().get(staNo);//鏈烘鎵嬭噦鎷f枡绔�
+ staProtocol = staProtocol.clone();
+ staProtocol.setStaNo((short) 344);//绌烘墭鐩樺嚭搴撶珯
+ boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+ }
System.out.println(param);
map.put("error", 0);
@@ -43,4 +71,14 @@
return map;
}
+ @GetMapping("/test")
+ public void test() {
+ boolean systemStatus = RobotUtils.getSystemStatus();
+ }
+
+ @GetMapping("/test2")
+ public void test2() {
+ RobotUtils.sendTask("9994", 4, "317");
+ }
+
}
diff --git a/src/main/java/com/zy/asrs/controller/ShuttleController.java b/src/main/java/com/zy/asrs/controller/ShuttleController.java
index 3c7508f..2135798 100644
--- a/src/main/java/com/zy/asrs/controller/ShuttleController.java
+++ b/src/main/java/com/zy/asrs/controller/ShuttleController.java
@@ -338,6 +338,15 @@
shuttleProtocol.setToken(0);//浠ょ墝娓呯┖
shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);//浠诲姟鐘舵��-绌洪棽
shuttleProtocol.setPakMk(false);//浣滀笟鏍囪澶嶄綅
+
+ shuttleProtocol.setMoveLoc(false);
+ shuttleProtocol.setMoveType(0);
+ shuttleProtocol.setXStart(0);
+ shuttleProtocol.setXTarget(0);
+ shuttleProtocol.setXCurrent(0);
+ shuttleProtocol.setYStart(0);
+ shuttleProtocol.setYTarget(0);
+ shuttleProtocol.setYCurrent(0);
return R.ok();
} else if (shuttleTaskModeType == ShuttleTaskModeType.SHUTTLE_CONTROL) {
//灏忚溅绠″埗
@@ -410,4 +419,40 @@
return R.ok();
}
+ /**
+ * 璺戝簱绋嬪簭
+ */
+ @PostMapping("/moveLoc")
+ @ManagerAuth
+ public R moveLoc(@RequestParam Integer shuttleNo,
+ @RequestParam Integer moveType,
+ @RequestParam Integer xStart,
+ @RequestParam Integer xTarget,
+ @RequestParam Integer yStart,
+ @RequestParam Integer yTarget) {
+ NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
+ if (shuttleThread == null) {
+ return R.error();
+ }
+
+ NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+ if (shuttleProtocol == null) {
+ return R.error();
+ }
+
+ if (!shuttleProtocol.isIdle()) {
+ return R.error("灏忚溅蹇欑涓�");
+ }
+
+ shuttleProtocol.setMoveLoc(true);//寮�鍚窇搴�
+ shuttleProtocol.setMoveType(moveType);
+ shuttleProtocol.setXStart(xStart);
+ shuttleProtocol.setXTarget(xTarget);
+ shuttleProtocol.setXCurrent(xStart);
+ shuttleProtocol.setYStart(yStart);
+ shuttleProtocol.setYTarget(yTarget);
+ shuttleProtocol.setYCurrent(yStart);
+ return R.ok();
+ }
+
}
diff --git a/src/main/java/com/zy/asrs/domain/param/RobotReportActionStatusParam.java b/src/main/java/com/zy/asrs/domain/param/RobotReportActionStatusParam.java
index b4bc5ee..b9c3ade 100644
--- a/src/main/java/com/zy/asrs/domain/param/RobotReportActionStatusParam.java
+++ b/src/main/java/com/zy/asrs/domain/param/RobotReportActionStatusParam.java
@@ -23,4 +23,6 @@
//缁撴灉璁伅
private String message;
+ private Integer from_ws;
+
}
diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
index bdf4e86..7a892c0 100644
--- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -39,4 +39,6 @@
LocMast queryByQrCode(String qrCodeValue);
List<LocMast> selectLocByLev(Integer lev);
+
+ List<LocMast> selectEmptyLocNos(@Param("locNos") List<String> locNos);
}
diff --git a/src/main/java/com/zy/asrs/service/LocMastService.java b/src/main/java/com/zy/asrs/service/LocMastService.java
index 9e814d4..0587f7c 100644
--- a/src/main/java/com/zy/asrs/service/LocMastService.java
+++ b/src/main/java/com/zy/asrs/service/LocMastService.java
@@ -70,4 +70,6 @@
//鏌ヨ鎸囧畾妤煎眰鐨勫簱浣嶆暟鎹�
List<LocMast> selectLocByLev(Integer lev);
+
+ List<LocMast> selectEmptyLocNos(List<String> locNos);
}
diff --git a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
index c50356a..6ba3fab 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -91,4 +91,9 @@
public List<LocMast> selectLocByLev(Integer lev) {
return this.baseMapper.selectLocByLev(lev);
}
+
+ @Override
+ public List<LocMast> selectEmptyLocNos(List<String> locNos) {
+ return this.baseMapper.selectEmptyLocNos(locNos);
+ }
}
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 6becb10..8520b78 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1946,6 +1946,90 @@
}
/**
+ * AGV琛ヨ揣 => 鏈烘鑷傛嫞鏂�
+ */
+ public void agvRestockByRobot() {
+ //妫�娴�300绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗┿�佸伐浣滃彿
+ for (DevpSlave devp : slaveProperties.getDevp()) {
+ // 鑾峰彇鍏ュ簱绔欎俊鎭�
+ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+ StaProtocol staProtocol = devpThread.getStation().get(300);
+ if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() != 0) {
+ //鏌ヨ鏄惁鏈夊伐浣滄。
+ WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue());
+ if (wrkMast == null) {
+ continue;
+ }
+
+ if (wrkMast.getWrkSts() != 25) {//25.鎻愬崌鏈烘惉杩愬畬鎴�
+ continue;
+ }
+
+ if (wrkMast.getMk().equals("Y")) {//鏍囪涓篩琛ㄧず闇�瑕佺敤鍒版満姊拌噦鎷f枡
+ Short targetSta = null;//鐩爣绔�
+ //鍒ゆ柇鏈烘鑷傛嫞鏂欑珯鏄惁绌洪棽
+ StaProtocol staProtocol303 = devpThread.getStation().get(303);
+ StaProtocol staProtocol317 = devpThread.getStation().get(317);
+ if (staProtocol303.isAutoing() && !staProtocol303.isLoading()) {
+ //鑷姩銆佹棤鐗�
+ targetSta = (short) 303;
+ } else if (staProtocol317.isAutoing() && !staProtocol317.isLoading()) {
+ //鑷姩銆佹棤鐗�
+ targetSta = (short) 317;
+ }else {
+ continue;//娌℃湁绌洪棽绔欑偣
+ }
+
+ targetSta = (short) 317;
+
+ //瑕嗙洊宸ヤ綔妗g洰鏍囩珯
+ wrkMast.setStaNo(targetSta.intValue());
+ if (wrkMastMapper.updateById(wrkMast) > 0) {
+ //鍚�300绔欏啓鍏ョ洰鏍囩珯
+ staProtocol = staProtocol.clone();
+ staProtocol.setStaNo(targetSta);//绉诲姩鍒扮洰鏍囩珯
+ boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+ try {
+ Thread.sleep(500);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ continue;
+ }
+ }
+ }
+
+ StaProtocol staProtocol303 = devpThread.getStation().get(303);
+ StaProtocol staProtocol317 = devpThread.getStation().get(317);
+ if (staProtocol303.isAutoing() && staProtocol303.isLoading() && staProtocol303.getWorkNo() != 0) {
+ //璋冨害鏈烘鑷�
+ //鏌ヨ鏄惁鏈夊伐浣滄。
+ WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol303.getWorkNo().intValue());
+ if (wrkMast == null) {
+ continue;
+ }
+ WrkDetl wrkDetl = wrkDetlService.selectById(wrkMast.getWrkNo());
+ if (wrkDetl == null) {
+ continue;
+ }
+ RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetl.getAnfme().intValue(), "303");
+ }else if (staProtocol317.isAutoing() && staProtocol317.isLoading() && staProtocol317.getWorkNo() != 0) {
+ //璋冨害鏈烘鑷�
+ //鏌ヨ鏄惁鏈夊伐浣滄。
+ WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol317.getWorkNo().intValue());
+ if (wrkMast == null) {
+ continue;
+ }
+ WrkDetl wrkDetl = wrkDetlService.selectById(wrkMast.getWrkNo());
+ if (wrkDetl == null) {
+ continue;
+ }
+ RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetl.getAnfme().intValue(), "317");
+ }
+ }
+ }
+
+ /**
* 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
*/
public void ledExecute() {
@@ -2240,7 +2324,7 @@
}
} else if (wrkCharge.getWrkSts() == 52) {
//妫�娴嬪皬杞︽槸鍚︽弧鐢�
- int maxPower = 85;
+ int maxPower = 95;
if (shuttleProtocol.getPowerPercent() < maxPower) {
continue;
}
@@ -2257,22 +2341,32 @@
assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
assignCommand.setCommands(commands);//杩愯鍛戒护
+ //涓嬪彂浠诲姟
+ MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+ try {
+ Thread.sleep(3000);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
wrkCharge.setWrkSts(53L);//52.灏忚溅鍘诲厖鐢典腑 => 53.灏忚溅鍏呯數瀹屾垚
wrkCharge.setModiTime(new Date());
if (wrkChargeMapper.updateById(wrkCharge) > 0) {
- //涓嬪彂浠诲姟
- MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+ shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE.id);
+ shuttleProtocol.setTaskNo(0);
+ shuttleProtocol.setPakMk(false);
}
} else if (wrkCharge.getWrkSts() == 53) {
if (shuttleProtocol.getChargState() == 0) {//灏忚溅澶勪簬鏈厖鐢电姸鎬�
boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkCharge.getLocNo()), shuttleThread.getSlave().getId(), shuttleThread);
- if (result) {
- wrkCharge.setWrkSts(60L);//53.灏忚溅鍏呯數瀹屾垚 => 60.鍏呯數浠诲姟瀹屾垚
- wrkCharge.setModiTime(new Date());
- if (wrkChargeMapper.updateById(wrkCharge) > 0) {
- shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE);
- shuttleProtocol.setTaskNo(0);
- }
+ if (!result) {
+ continue;
+ }
+
+ wrkCharge.setWrkSts(60L);//53.灏忚溅鍏呯數瀹屾垚 => 60.鍏呯數浠诲姟瀹屾垚
+ wrkCharge.setModiTime(new Date());
+ if (wrkChargeMapper.updateById(wrkCharge) > 0) {
+
}
}
}
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index fbfff8e..b5e47fb 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -505,11 +505,11 @@
SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class);
for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
//鑾峰彇鍥涘悜绌挎杞︾嚎绋�
- ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+ NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
if (shuttleThread == null) {
continue;
}
- ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+ NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
if (shuttleProtocol == null) {
continue;
}
diff --git a/src/main/java/com/zy/common/utils/RobotUtils.java b/src/main/java/com/zy/common/utils/RobotUtils.java
index 2db7119..5c3f2b9 100644
--- a/src/main/java/com/zy/common/utils/RobotUtils.java
+++ b/src/main/java/com/zy/common/utils/RobotUtils.java
@@ -23,7 +23,7 @@
try {
String response = new HttpHandler.Builder()
.setUri(robotUrl)
- .setPath("/api/wcs/is_system_ready")
+ .setPath("/adaptor/api/wcs/is_vp_ready")
.setJson(JSON.toJSONString(map))
.build()
.doPost();
@@ -40,9 +40,22 @@
}
//WCS鍚戞満姊拌噦涓嬪彂鍗曟媶浠诲姟
- public static boolean sendTask(String taskId, Map<String, Object> skuInfo, String from, String to) {
+ public static boolean sendTask(String taskId, Integer skuNum, String from) {
Environment environment = SpringUtils.getBean(Environment.class);
String robotUrl = environment.getProperty("robot.url");
+
+ Map<String, Object> skuInfo = new HashMap<>();
+ skuInfo.put("sku_id", "1");
+ skuInfo.put("length", 500);
+ skuInfo.put("width", 350);
+ skuInfo.put("height", 200);
+ skuInfo.put("weight", 1);
+ skuInfo.put("sku_num", skuNum);
+
+ String to = "307";
+ if (from.equals("317")) {
+ to = "310";
+ }
HashMap<String, Object> map = new HashMap<>();
map.put("task_id", taskId);
@@ -52,14 +65,15 @@
try {
String response = new HttpHandler.Builder()
.setUri(robotUrl)
- .setPath("api/wcs/single_class_depal_task")
+ .setPath("/adaptor/api/wcs/task/single_depal")
.setJson(JSON.toJSONString(map))
.build()
.doPost();
JSONObject data = JSON.parseObject(response);
- int error = Integer.parseInt(data.get("error").toString());
- if (error == 0) {
+ int code = Integer.parseInt(data.get("code").toString());
+ String msg = data.get("msg").toString();
+ if (code == 0 && msg.equals("success")) {
return true;//鎴愬姛
}
} catch (IOException e) {
diff --git a/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java b/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
index bcaead1..3d84c4f 100644
--- a/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
@@ -203,6 +203,10 @@
}
}
+ if (wrkCharge.getWrkSts() == 53) {
+ toCharge = true;//鍏呯數缁撴潫锛屽厑璁哥敓鎴愮Щ搴撲换鍔�
+ }
+
if (!toCharge) {
//涓嶆槸鍘诲厖鐢垫々涓斿瓨鍦ㄥ厖鐢典换鍔★紝绂佹鐢熸垚鏂扮殑绉诲姩浠诲姟
return false;
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 3058a36..400fb63 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -70,6 +70,8 @@
mainService.recErr();
// 鍏ュ簱 ===>> 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
mainService.storeEmptyPlt();
+ // AGV琛ヨ揣(鏈烘鑷傛嫞鏂�)
+ mainService.agvRestockByRobot();
// 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
mainService.ledExecute();
// 鍏朵粬 ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
diff --git a/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java b/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java
index 3744f61..ac78e39 100644
--- a/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java
@@ -204,6 +204,46 @@
*/
private Integer token = 0;
+ /**
+ * 璺戝簱鐘舵��
+ */
+ private Boolean moveLoc = false;
+
+ /**
+ * 璺戝簱绫诲瀷锛�0:璺戣建閬擄紝1锛氳窇搴撲綅
+ */
+ private Integer moveType = 0;
+
+ /**
+ * 璺戝簱X璧风偣
+ */
+ private Integer xStart = 0;
+
+ /**
+ * 璺戝簱X缁堢偣
+ */
+ private Integer xTarget = 0;
+
+ /**
+ * 璺戝簱X褰撳墠鐐逛綅
+ */
+ private Integer xCurrent = 0;
+
+ /**
+ * 璺戝簱Y璧风偣
+ */
+ private Integer yStart = 0;
+
+ /**
+ * 璺戝簱Y缁堢偣
+ */
+ private Integer yTarget = 0;
+
+ /**
+ * 璺戝簱Y褰撳墠鐐逛綅
+ */
+ private Integer yCurrent = 0;
+
//鎬婚噷绋嬫暟
@Data
public static class StatusSumClass {
diff --git a/src/main/java/com/zy/core/thread/NyShuttleThread.java b/src/main/java/com/zy/core/thread/NyShuttleThread.java
index f2602a8..e627a9f 100644
--- a/src/main/java/com/zy/core/thread/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -11,6 +11,7 @@
import com.zy.asrs.utils.Utils;
import com.zy.common.model.NavigateNode;
import com.zy.common.model.NyShuttleOperaResult;
+import com.zy.common.service.CommonService;
import com.zy.common.utils.*;
import com.zy.core.News;
import com.zy.core.ThreadHandler;
@@ -28,6 +29,7 @@
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
+import javax.swing.*;
import java.io.IOException;
import java.net.Socket;
import java.text.MessageFormat;
@@ -98,6 +100,11 @@
&& !shuttleProtocol.getPakMk()) {
//鎵ц涓嬩竴姝ユ寚浠�
executeWork(shuttleProtocol.getTaskNo().shortValue());
+ }
+
+ //灏忚溅绌洪棽涓旀湁璺戝簱绋嬪簭
+ if (shuttleProtocol.isIdle() && shuttleProtocol.getMoveLoc()) {
+ moveLoc();
}
} catch (Exception e) {
e.printStackTrace();
@@ -493,37 +500,6 @@
//浠诲姟鏁版嵁淇濆瓨鍒皉edis
redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
-// //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚
-// if (commandStep < commands.size() - 1) {
-// commandStep++;
-// //鏇存柊redis鏁版嵁
-// redisCommand.setCommandStep(commandStep);
-// //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-// redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
-// }else {
-// //宸叉墽琛屽畬鎴�
-//
-// commandStep = commands.size();
-// //鏇存柊redis鏁版嵁
-// redisCommand.setCommandStep(commandStep);
-// //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-// redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
-//// //鏈�鍚庝竴娈靛懡浠や负绉诲姩鍛戒护锛屽垯鏆傜紦鍒犻櫎redis绛夊緟娓呴櫎璺緞鏃朵竴娆℃�у垹闄�
-//// //鏈�鍚庝竴娈靛懡浠や负涓嶆槸绉诲姩鍛戒护锛屽垯鍒犻櫎redis
-//// if (!command.getRequest().getBody().get("requestType").equals("move")) {
-//// //鍒犻櫎redis
-//// redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
-//// }
-////
-//// if (!assignCommand.getCharge()) {
-//// //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
-//// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
-//// }else {
-//// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
-//// }
-//// News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
-// }
-
return true;
}
@@ -711,4 +687,56 @@
return false;//涓嶅彲琛岃蛋
}
+ /**
+ * 璺戝簱绋嬪簭
+ */
+ private void moveLoc() {
+ LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
+ ShuttleDispatchUtils shuttleDispatchUtils = SpringUtils.getBean(ShuttleDispatchUtils.class);
+ CommonService commonService = SpringUtils.getBean(CommonService.class);
+ WrkMastMapper wrkMastMapper = SpringUtils.getBean(WrkMastMapper.class);
+ int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());//灏忚溅褰撳墠妤煎眰
+ if (!shuttleProtocol.isIdle()) {
+ return;
+ }
+
+ WrkMast wrkMast = wrkMastMapper.selectShuttleHasMoveWorking(shuttleProtocol.getShuttleNo().intValue());
+ if (wrkMast != null) {
+ return;
+ }
+
+ if (shuttleProtocol.getMoveType() == 0) {//璺戣建閬�
+ ArrayList<String> locs = new ArrayList<>();
+ for (int i = shuttleProtocol.getXCurrent(); i <= shuttleProtocol.getXTarget(); i++) {
+ String locNo = Utils.getLocNo(i, shuttleProtocol.getYCurrent(), lev);
+ locs.add(locNo);
+ }
+ List<LocMast> locMasts = locMastService.selectEmptyLocNos(locs);
+ if (locMasts.isEmpty()) {
+ //绌哄簱浣�
+ shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
+ return;
+ }
+
+ LocMast start = locMasts.get(0);
+ LocMast target = locMasts.get(locMasts.size() - 1);
+ //鍒ゆ柇灏忚溅鏄惁鍦ㄨ捣鐐逛綅缃�
+ if (!shuttleProtocol.getCurrentLocNo().equals(start.getLocNo())) {//涓嶅湪璧风偣浣嶇疆锛岃皟搴﹀幓璧风偣浣嶇疆
+ shuttleDispatchUtils.dispatchShuttle(commonService.getWorkNo(3), start.getLocNo());
+ }else {
+ //鍦ㄨ捣鐐逛綅缃紝璋冨害鍘荤洰鏍囦綅缃�
+ if (shuttleProtocol.getCurrentLocNo().equals(target.getLocNo())) {
+ shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);//灏忚溅鍜岀洰鏍囦綅缃竴鑷达紝璺宠繃
+ }else {
+ boolean result = shuttleDispatchUtils.dispatchShuttle(commonService.getWorkNo(3), target.getLocNo());
+ if (result) {//璋冨害鎴愬姛
+ shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
+ }
+ }
+ }
+ }else {//璺戝簱浣�
+
+ }
+ }
+
}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index eb9717f..798fa5e 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -8,10 +8,10 @@
name: @pom.build.finalName@
datasource:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
- url: jdbc:sqlserver://192.168.4.15:1433;databasename=tzskasrs
+ url: jdbc:sqlserver://127.0.0.1:1433;databasename=tzskasrs
username: sa
# password: Zoneyung@zy56$
- password: sa@123
+ password: sa
mvc:
static-path-pattern: /**
redis:
@@ -41,7 +41,7 @@
url: localhost:8081/tzskwms
robot:
- url: http://127.0.0.1:9090/tzskwcs
+ url: http://10.10.10.41:7002
erp:
db:
@@ -60,7 +60,7 @@
# 杈撻�佺嚎
devp[0]:
id: 1
- ip: 10.10.10.100
+ ip: 10.10.10.51
port: 102
rack: 0
slot: 0
@@ -74,37 +74,37 @@
inSta[1]:
staNo: 103
backSta: 102
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[1].id}
led: ${wcs-slave.led[0].id}
# 鍏ュ簱鍙�3
inSta[2]:
staNo: 105
backSta: 104
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[2].id}
led: ${wcs-slave.led[0].id}
# 鍏ュ簱鍙�4
inSta[3]:
staNo: 200
backSta: 201
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[3].id}
led: ${wcs-slave.led[0].id}
# 鍏ュ簱鍙�5
inSta[4]:
staNo: 203
backSta: 202
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[4].id}
led: ${wcs-slave.led[0].id}
# 鍏ュ簱鍙�6
inSta[5]:
staNo: 205
backSta: 204
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[5].id}
led: ${wcs-slave.led[0].id}
# 鍏ュ簱鍙�7
inSta[6]:
staNo: 346
backSta: 345
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[8].id}
led: ${wcs-slave.led[0].id}
# 绌烘澘鍏ュ簱鍙�1
emptyInSta[0]:
@@ -116,37 +116,37 @@
emptyInSta[1]:
staNo: 103
backSta: 102
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[1].id}
led: ${wcs-slave.led[0].id}
# 绌烘澘鍏ュ簱鍙�3
emptyInSta[2]:
staNo: 105
backSta: 104
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[2].id}
led: ${wcs-slave.led[0].id}
# 绌烘澘鍏ュ簱鍙�4
emptyInSta[3]:
staNo: 200
backSta: 201
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[3].id}
led: ${wcs-slave.led[0].id}
# 绌烘澘鍏ュ簱鍙�5
emptyInSta[4]:
staNo: 203
backSta: 202
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[4].id}
led: ${wcs-slave.led[0].id}
# 绌烘澘鍏ュ簱鍙�6
emptyInSta[5]:
staNo: 205
backSta: 204
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[5].id}
led: ${wcs-slave.led[0].id}
# 绌烘澘鍏ュ簱鍙�7
emptyInSta[6]:
staNo: 346
backSta: 345
- barcode: ${wcs-slave.barcode[0].id}
+ barcode: ${wcs-slave.barcode[8].id}
led: ${wcs-slave.led[0].id}
# 鍑哄簱鍙�1
outSta[0]:
@@ -248,6 +248,51 @@
id: 1
ip: 10.10.10.102
port: 51236
+ # 鏉$爜鎵弿浠�
+ barcode[1]:
+ id: 2
+ ip: 10.10.10.102
+ port: 51236
+ # 鏉$爜鎵弿浠�
+ barcode[2]:
+ id: 3
+ ip: 10.10.10.102
+ port: 51236
+ # 鏉$爜鎵弿浠�
+ barcode[3]:
+ id: 4
+ ip: 10.10.10.102
+ port: 51236
+ # 鏉$爜鎵弿浠�
+ barcode[4]:
+ id: 5
+ ip: 10.10.10.102
+ port: 51236
+ # 鏉$爜鎵弿浠�
+ barcode[5]:
+ id: 6
+ ip: 10.10.10.102
+ port: 51236
+ # 鏉$爜鎵弿浠�
+ barcode[6]:
+ id: 7
+ ip: 10.10.10.102
+ port: 51236
+ # 鏉$爜鎵弿浠�
+ barcode[7]:
+ id: 8
+ ip: 10.10.10.102
+ port: 51236
+ # 鏉$爜鎵弿浠�
+ barcode[8]:
+ id: 9
+ ip: 10.10.10.102
+ port: 51236
+ # 鏉$爜鎵弿浠�
+ barcode[9]:
+ id: 10
+ ip: 10.10.10.102
+ port: 51236
# LED1
led[0]:
@@ -267,14 +312,14 @@
# 鍥涘悜绌挎杞�1
shuttle[0]:
id: 1
- ip: 127.0.0.1
+ ip: 10.10.10.101
port: 8888
rack: 0
slot: 0
# 鍥涘悜绌挎杞�2
shuttle[1]:
id: 2
- ip: 192.168.4.15
+ ip: 10.10.10.102
port: 8888
rack: 0
slot: 0
@@ -337,111 +382,141 @@
# 鎻愬崌鏈�1
lift[0]:
id: 1
- ip: 192.168.4.250
- port: 502
- row: 18
- bay: 2
+ ip: 10.10.10.131
+ port: 102
+ staRow: 13
+ staBay: 22
sta[0]:
staNo: 101
lev: 1
+ liftNo: ${wcs-slave.lift[0].id}
sta[1]:
staNo: 102
lev: 2
+ liftNo: ${wcs-slave.lift[0].id}
sta[2]:
staNo: 103
lev: 3
+ liftNo: ${wcs-slave.lift[0].id}
sta[3]:
staNo: 104
lev: 4
+ liftNo: ${wcs-slave.lift[0].id}
sta[4]:
staNo: 105
lev: 5
+ liftNo: ${wcs-slave.lift[0].id}
sta[5]:
staNo: 106
lev: 6
+ liftNo: ${wcs-slave.lift[0].id}
sta[6]:
staNo: 107
lev: 7
+ liftNo: ${wcs-slave.lift[0].id}
sta[7]:
staNo: 108
lev: 8
+ liftNo: ${wcs-slave.lift[0].id}
sta[8]:
staNo: 109
lev: 9
+ liftNo: ${wcs-slave.lift[0].id}
sta[9]:
staNo: 110
lev: 10
+ liftNo: ${wcs-slave.lift[0].id}
# 鎻愬崌鏈�2
lift[1]:
id: 2
- ip: 127.0.0.1
- port: 502
- row: 18
- bay: 2
+ ip: 10.10.10.132
+ port: 102
+ staRow: 13
+ staBay: 38
sta[0]:
staNo: 201
lev: 1
+ liftNo: ${wcs-slave.lift[1].id}
sta[1]:
staNo: 202
lev: 2
+ liftNo: ${wcs-slave.lift[1].id}
sta[2]:
staNo: 203
lev: 3
+ liftNo: ${wcs-slave.lift[1].id}
sta[3]:
staNo: 204
lev: 4
+ liftNo: ${wcs-slave.lift[1].id}
sta[4]:
staNo: 205
lev: 5
+ liftNo: ${wcs-slave.lift[1].id}
sta[5]:
staNo: 206
lev: 6
+ liftNo: ${wcs-slave.lift[1].id}
sta[6]:
staNo: 207
lev: 7
+ liftNo: ${wcs-slave.lift[1].id}
sta[7]:
staNo: 208
lev: 8
+ liftNo: ${wcs-slave.lift[1].id}
sta[8]:
staNo: 209
lev: 9
+ liftNo: ${wcs-slave.lift[1].id}
sta[9]:
staNo: 210
lev: 10
+ liftNo: ${wcs-slave.lift[1].id}
# 鎻愬崌鏈�3
lift[2]:
id: 3
- ip: 127.0.0.1
- port: 502
- row: 18
- bay: 2
+ ip: 10.10.10.133
+ port: 102
+ staRow: 13
+ staBay: 57
sta[0]:
staNo: 301
lev: 1
+ liftNo: ${wcs-slave.lift[2].id}
sta[1]:
staNo: 302
lev: 2
+ liftNo: ${wcs-slave.lift[2].id}
sta[2]:
staNo: 303
lev: 3
+ liftNo: ${wcs-slave.lift[2].id}
sta[3]:
staNo: 304
lev: 4
+ liftNo: ${wcs-slave.lift[2].id}
sta[4]:
staNo: 305
lev: 5
+ liftNo: ${wcs-slave.lift[2].id}
sta[5]:
staNo: 306
lev: 6
+ liftNo: ${wcs-slave.lift[2].id}
sta[6]:
staNo: 307
lev: 7
+ liftNo: ${wcs-slave.lift[2].id}
sta[7]:
staNo: 308
lev: 8
+ liftNo: ${wcs-slave.lift[2].id}
sta[8]:
staNo: 309
lev: 9
+ liftNo: ${wcs-slave.lift[2].id}
sta[9]:
staNo: 310
- lev: 10
\ No newline at end of file
+ lev: 10
+ liftNo: ${wcs-slave.lift[2].id}
\ No newline at end of file
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index 7191979..6e96cd2 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -73,4 +73,14 @@
<select id="selectLocByLev" resultMap="BaseResultMap">
SELECT * FROM asr_loc_mast WHERE lev1 = #{lev}
</select>
+
+ <select id="selectEmptyLocNos" resultMap="BaseResultMap">
+ select * from asr_loc_mast
+ where loc_no in
+ <foreach item="loc" collection="locNos" index="index" separator="," open="(" close=")">
+ #{loc}
+ </foreach>
+ and loc_sts = 'O'
+ order by row1
+ </select>
</mapper>
diff --git a/src/main/webapp/views/shuttle2.html b/src/main/webapp/views/shuttle2.html
new file mode 100644
index 0000000..c571991
--- /dev/null
+++ b/src/main/webapp/views/shuttle2.html
@@ -0,0 +1,626 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <title>鍥涘悜绌挎杞︾洃鎺х鐞�</title>
+ <link rel="stylesheet" type="text/css" href="../static/css/normalize.css">
+ <link rel="stylesheet" type="text/css" href="../static/css/common.css">
+ <link rel="stylesheet" type="text/css" href="../static/layui/css/layui.css">
+ <link rel="stylesheet" href="../static/css/shuttle.css">
+ <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
+ <script type="text/javascript" src="../static/js/layer/layer.js"></script>
+ <script type="text/javascript" src="../static/layui/layui.js"></script>
+ <script type="text/javascript" src="../static/js/common.js"></script>
+</head>
+<body>
+ <div style="padding: 10px;height: 100%;float: left;width: 6%">
+ <div class="button-window"></div>
+ </div>
+ <div style="height: 100%;padding-left: 6%">
+ <div style="padding: 10px;height: 100%">
+ <!-- 鏃ュ織鐩戞帶鏉� -->
+ <div class="log-board">
+<!-- <div class="command-log" id="commandLogId" style="width: 5%;">-->
+<!--<!– <div data-shuttleNo="1" class="shuttle-command-item">–>-->
+<!--<!– <label>1#</label>–>-->
+<!--<!– <button class="demoBtn pos-btn">鏁版嵁缁存姢</button>–>-->
+<!--<!– <button id="mode-1" class="demoBtn mode-btn" >璁惧淇℃伅</button>–>-->
+<!--<!– </div>–>-->
+<!-- </div>-->
+ <!-- 鍫嗗灈鏈虹姸鎬佷綅淇℃伅 -->
+ <div class="shuttle-state" style="width: 100%;">
+ <table id="shuttle-state-table">
+ <thead>
+ <tr>
+ <th>鍥涘悜绌挎杞�</th>
+ <th>浠诲姟鐘舵��</th>
+ <th>灏忚溅鐘舵��</th>
+ <th>宸ヤ綔妯″紡</th>
+ <th>瀹為檯搴撲綅</th>
+ <th>瀹為檯鍧愭爣</th>
+ <th>鐢甸噺</th>
+ <th>褰撳墠閫熷害</th>
+ <th>璐熻浇鐘舵��</th>
+ <th>椤跺崌浣嶇疆</th>
+ <th>杩愯鏂瑰悜</th>
+ <th>杩愯鏂瑰悜2</th>
+ <th>鍏呯數鐘舵��</th>
+ <th>鏁呴殰鐘舵��</th>
+ <th>鏁呴殰鐮�</th>
+ <th>绠″埗鐘舵��</th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <!-- 绌挎杞︾姸鎬� -->
+ <div class="shuttle-msg">
+ <table id="shuttle-msg-table">
+ <thead>
+ <tr>
+ <th>鍥涘悜绌挎杞�</th>
+ <th>宸ヤ綔鍙�</th>
+ <th>婧愬簱浣�</th>
+ <th>鐩爣搴撲綅</th>
+ <th>鏈�楂樼數鑺數鍘�</th>
+ <th>鏈�浣庣數鑺數鍘�</th>
+ <th>鐢垫睜鐢靛帇</th>
+ <th>鍏呮斁鐢靛惊鐜鏁�</th>
+ <th>鍓╀綑鐢甸噺</th>
+ <th>鎬荤數閲�</th>
+ <th>鎬婚噷绋嬫暟</th>
+ <th>浣滀笟鏍囪</th>
+ <th>褰撳墠搴撲綅</th>
+ <th>浠ょ墝</th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
+ </div>
+ <!-- 鎵嬪姩鎿嶄綔 -->
+ <div class="shuttle-operation">
+ <!-- 閬僵灞� -->
+ <div class="shuttle-operation-shade">
+ <span class="shuttle-operation-shade-span">
+ WCS 绯荤粺杩愯涓紝璇峰仠姝㈠悗鎿嶄綔
+ </span>
+ </div>
+ <!-- 璁惧浠诲姟閫夋嫨 -->
+ <div class="task-select">
+ <!-- 閫夋嫨 -->
+ <div id="shuttle-select" class="operator-item" style="width: 100%;">
+ <span class="select-title">鍥涘悜绌挎杞﹀彿</span>
+ <div class="select-container" id="shuttleRadioBoxId" style="display: flex;flex-wrap: wrap;justify-content: center;align-items: center;">
+<!-- <label><input type="radio" name="shuttleSelect" value="1" checked> 1鍙风┛姊溅</label>-->
+ </div>
+ </div>
+ </div>
+
+ <!-- 璁惧浠诲姟鎿嶄綔 -->
+ <div class="task-operator">
+ <fieldset style="height: auto;padding-bottom: 20px;">
+ <legend>鎵嬪姩鎿嶄綔</legend>
+ <div style="display: flex;">
+ <div style="width: 30%;">
+ <div class="operator-item" style="height: auto;width: 100%;">
+ <span class="select-title">婧愬簱浣�/鐩爣搴撲綅</span>
+ <div class="select-container" style="height: auto;padding: 30px 10px 20px 10px;">
+ <div class="select-container-item">
+ <span>婧愬簱浣�</span>
+ <label><input id="sourceLocNo" type="text" name="sourceLocNo" /></label>
+ </div>
+ <div class="select-container-item">
+ <span>鐩爣搴撲綅</span>
+ <label><input id="distLocNo" type="text" name="distLocNo" /></label>
+ </div>
+
+ <div style="margin-top: 10px;">
+ <button class="item" onclick="shuttleOperator(18)">鎼繍璐х墿</button>
+ <button class="item" onclick="shuttleOperator(14)">绉诲姩鍒扮洰鏍囧簱浣�</button>
+ <button class="item" onclick="shuttleOperator(23)">绉诲姩鍒扮洰鏍囧簱浣�(浠诲姟)</button>
+<!-- <button class="item" onclick="shuttleOperator(16)">绉诲姩鍒版彁鍗囨満</button>-->
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div style="width: 40%;">
+ <div class="operator-item" style="height: auto;width: 100%;">
+ <span class="select-title">鐩稿叧鎸囦护</span>
+ <div class="select-container" style="height: auto;padding: 30px 10px 10px 10px;">
+ <div class="button-group">
+ <button class="item" onclick="shuttleOperator(3)">鎵樼洏椤跺崌</button>
+ <button class="item" onclick="shuttleOperator(4)">鎵樼洏涓嬮檷</button>
+ <button class="item" onclick="shuttleOperator(15)">鍏呯數寮�鍏�</button>
+ <button class="item" onclick="shuttleOperator(9)">澶嶄綅</button>
+ <button class="item" onclick="shuttleOperator(21)">绠″埗</button>
+ <button class="item" onclick="shuttleOperator(22)">鍙栨秷绠″埗</button>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div style="width: 30%;">
+ <div class="operator-item" style="height: auto;width: 100%;">
+ <span class="select-title">璺戝簱绯荤粺</span>
+ <div class="select-container" style="height: auto;padding: 30px 10px 20px 10px;">
+ <div class="select-container-item">
+ <span>X璧风偣</span>
+ <label><input id="xStart" type="text" name="xStart" /></label>
+ </div>
+ <div class="select-container-item">
+ <span>X缁堢偣</span>
+ <label><input id="xTarget" type="text" name="xTarget" /></label>
+ </div>
+ <div class="select-container-item">
+ <span>Y璧风偣</span>
+ <label><input id="yStart" type="text" name="yStart" /></label>
+ </div>
+ <div class="select-container-item">
+ <span>Y缁堢偣</span>
+ <label><input id="yTarget" type="text" name="yTarget" /></label>
+ </div>
+ <div>
+ <label><input type="radio" name="moveType" value="0"> 璺戣建閬�</label>
+ <label><input type="radio" name="moveType" value="1"> 璺戝簱浣�</label>
+ </div>
+ <div style="margin-top: 10px;">
+ <button class="item" onclick="moveLoc()">璺戝簱</button>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </fieldset>
+ </div>
+
+ </div>
+ <!-- 绌挎杞︽棩蹇楄緭鍑� -->
+ <div class="shuttle-output-board">
+ <textarea id="shuttle-output"></textarea>
+ </div>
+ </div>
+ </div>
+
+ <div id="shuttle-detl" style="display: none">
+ <div>
+ <div class="form-item">
+ <label class="form-label">绌挎杞﹀彿:</label>
+ <div class="form-input">
+ <input id="shuttleNo" name="shuttleNo" class="layui-input" lay-verify="required|number" autocomplete="off" disabled="disabled">
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">宸ヤ綔鍙�:</label>
+ <div class="form-input">
+ <input id="workNo" name="workNo" type="number" class="layui-input" lay-verify="number" autocomplete="off">
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">浣滀笟鏍囪:</label>
+ <div class="form-input">
+ <input id="pakMk" name="pakMk" type="text" class="layui-input" autocomplete="off">
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">浠ょ墝:</label>
+ <div class="form-input">
+ <input id="token" name="token" type="text" class="layui-input" autocomplete="off">
+ </div>
+ </div>
+ <div class="form-item form-button-container">
+ <button class="form-button" id="save">淇濆瓨</button>
+ <button class="form-button" id="cancel" style="background-color: #D0D0D0">鍙栨秷</button>
+ </div>
+ </div>
+ </div>
+</body>
+</html>
+<script>
+ // 绌虹櫧琛屾暟
+ var shuttleStateTableBlankRows = 0;
+ var shuttleMsgTableBlankRows = 0;
+ // 瀹為檯琛屾暟
+ var shuttleStateTableFullRows = 0;
+ var shuttleMsgTableFullRows = 0;
+ // 鍒濆鍖�
+ var shuttleOutputDom = document.getElementById("shuttle-output");
+ $(document).ready(function() {
+ initShuttleStateTable();
+ getShuttleStateInfo();
+ initShuttleMsgTable();
+ getShuttleMsgInfo();
+ operatorBlockShow();
+ setShuttleRadio();
+ });
+
+ setInterval(function () {
+ getShuttleStateInfo()
+ getShuttleMsgInfo();
+ },1000)
+ setInterval(function () {
+ getShuttleOutput();
+ operatorBlockShow();
+ },500);
+
+ // 鍒ゆ柇鎵嬪姩鎿嶄綔妯″潡鏄惁鍙敤
+ function operatorBlockShow() {
+ if (parent.systemRunning) {
+ $('.shuttle-operation').css("opacity", "0.5");
+ $('.shuttle-operation-shade').show();
+ $('.shuttle-operation-shade-span').show();
+ } else {
+ $('.shuttle-operation').css("opacity", "1");
+ $('.shuttle-operation-shade').hide();
+ $('.shuttle-operation-shade-span').hide();
+ }
+ }
+
+ function getColor(res,e){
+ $(e).val(res?"鉁�":"鈥�");
+ if (res){
+ $(e).attr("style", "color: #FD482C;");
+ }else {
+ $(e).attr("style", "color: #00FF00;");
+ }
+ }
+
+ $(document).on('click ','#save', function () {
+ http.post(baseUrl+ "/shuttle/detl/update", {
+ shuttleNo: $('#shuttleNo').val(),
+ workNo: $('#workNo').val(),
+ pakMk: $('#pakMk').val(),
+ token: $('#token').val(),
+ }, function (res) {
+ layer.msg("淇敼鎴愬姛", {icon: 1,});
+ layer.close(layerDetl);
+ })
+ })
+
+ function setShuttleRadio() {
+ $.ajax({
+ url: baseUrl+ "/shuttle/table/shuttle/state",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200){
+ let table = res.data;
+ for (let i=1;i<=table.length;i++){
+ //娓叉煋鍥涘悜绌挎杞﹂�夐」html
+ let shuttleRadioBox = '<label><input type="radio" name="shuttleSelect" ';
+ if (i === 1) {
+ shuttleRadioBox += 'checked '
+ }
+ shuttleRadioBox += 'value="' + table[i - 1].shuttleNo + '"> ' + table[i - 1].shuttleNo + '鍙风┛姊溅</label>'
+ $("#shuttleRadioBoxId").append(shuttleRadioBox)
+
+
+ //娓叉煋鍥涘悜绌挎杞︽暟鎹淮鎶ゅ拰璁惧淇℃伅html
+ let shuttleCommandLogBox = '<div class="shuttle-command-item" data-shuttleNo="' + table[i - 1].shuttleNo + '">\n' +
+ '<label>' + table[i - 1].shuttleNo + '#</label>\n' +
+ // '<button class="demoBtn pos-btn">鏁版嵁缁存姢</button>\n' +
+ // '<button class="demoBtn mode-btn" id="mode-' + table[i - 1].shuttleNo + '">璁惧淇℃伅</button>\n' +
+ '</div>'
+ $("#commandLogId").append(shuttleCommandLogBox);
+ }
+ } else if (res.code === 403){
+ window.location.href = baseUrl+"/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
+ }
+
+ // 鍥涘悜绌挎杞︿俊鎭〃鑾峰彇 ---- 琛ㄤ竴
+ function getShuttleStateInfo() {
+ let tableEl = $('#shuttle-state-table');
+ $.ajax({
+ url: baseUrl+ "/shuttle/table/shuttle/state",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200){
+ let table = res.data;
+ if (table.length > shuttleStateTableBlankRows && table.length !== shuttleStateTableFullRows) {
+ initShuttleStateTable(table.length-shuttleStateTableBlankRows);
+ shuttleStateTableFullRows = table.length;
+ }
+ for (let i=1;i<=table.length;i++){
+ // $("#mode-"+table[i-1].shuttleNo).html(table[i-1].statusVal===0?'鑱旀満':'鑴辨満');
+ let tr = tableEl.find("tr").eq(i);
+ setVal(tr.children("td").eq(0), table[i-1].shuttleNo);
+ setVal(tr.children("td").eq(1), table[i-1].protocolStatus$);
+ setVal(tr.children("td").eq(2), table[i-1].free$);
+ setVal(tr.children("td").eq(3), table[i-1].workingMode$);
+ setVal(tr.children("td").eq(4), table[i-1].point$);
+ setVal(tr.children("td").eq(5), table[i-1].point$$);
+ setVal(tr.children("td").eq(6), table[i-1].powerPercent$);
+ setVal(tr.children("td").eq(7), table[i-1].speed);
+ setVal(tr.children("td").eq(8), table[i-1].loadState$);
+ setVal(tr.children("td").eq(9), table[i-1].liftPosition$);
+ setVal(tr.children("td").eq(10), table[i-1].runDir$);
+ setVal(tr.children("td").eq(11), table[i-1].runDir2$);
+ setVal(tr.children("td").eq(12), table[i-1].chargState$);
+ setVal(tr.children("td").eq(13), table[i-1].errState$);
+ setVal(tr.children("td").eq(14), table[i-1].errCode$);
+ setVal(tr.children("td").eq(15), table[i-1].suspendState$);
+ }
+ } else if (res.code === 403){
+ window.location.href = baseUrl+"/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
+ }
+
+ // 鍥涘悜绌挎杞︽暟鎹〃鑾峰彇 ---- 琛ㄤ簩
+ function getShuttleMsgInfo() {
+ let tableEl = $('#shuttle-msg-table');
+ $.ajax({
+ url: baseUrl+ "/shuttle/table/shuttle/state",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200){
+ var table = res.data;
+ if (table.length > shuttleMsgTableBlankRows && table.length !== shuttleMsgTableFullRows) {
+ initShuttleMsgTable(table.length-shuttleMsgTableBlankRows);
+ shuttleMsgTableFullRows = table.length;
+ }
+ for (var i=1;i<=table.length;i++){
+ var tr = tableEl.find("tr").eq(i);
+ setVal(tr.children("td").eq(0), table[i-1].shuttleNo);
+ setVal(tr.children("td").eq(1), table[i-1].taskNo);
+ setVal(tr.children("td").eq(2), table[i-1].sourceLocNo);
+ setVal(tr.children("td").eq(3), table[i-1].locNo);
+ setVal(tr.children("td").eq(4), table[i-1].maxCellVoltage$);
+ setVal(tr.children("td").eq(5), table[i-1].minCellVoltage$);
+ setVal(tr.children("td").eq(6), table[i-1].voltage$);
+ setVal(tr.children("td").eq(7), table[i-1].chargeCycleTimes);
+ setVal(tr.children("td").eq(8), table[i-1].surplusQuantity);
+ setVal(tr.children("td").eq(9), table[i-1].countQuantity);
+ setVal(tr.children("td").eq(10), table[i-1].statusSum.mileage);
+ setVal(tr.children("td").eq(11), table[i-1].pakMk$);
+ setVal(tr.children("td").eq(12), table[i-1].currentLocNo);
+ setVal(tr.children("td").eq(13), table[i-1].token);
+ if (table[i-1].shuttleNo == parseInt($('input[name="shuttleSelect"]:checked').val())) {
+ $("#runSpeedText").text(table[i-1].runSpeed)
+ $("#chargeLineText").text(table[i-1].chargeLine + "%")
+ }
+ }
+ } else if (res.code === 403){
+ window.location.href = baseUrl+"/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
+ }
+
+ // 绌挎杞︽棩蹇楄緭鍑� -----------------------------------------------------------------------
+ function getShuttleOutput() {
+ $.ajax({
+ url: baseUrl + "/shuttle/output/shuttle",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200) {
+ shuttleOutput(res.data);
+ } else if (res.code === 403) {
+ window.location.href = baseUrl + "/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ })
+ }
+
+ // 浠诲姟鎸囦护涓嬪彂
+ function shuttleOperator(shuttleTaskMode) {
+ http.post(baseUrl+"/shuttle/operator/shuttle", {
+ shuttleNo: $('input[name="shuttleSelect"]:checked').val(),
+ shuttleTaskMode: shuttleTaskMode,
+ sourceLocNo: $("#sourceLocNo").val(),
+ distLocNo: $("#distLocNo").val()
+ }, function (res) {
+ layer.msg(res.msg, {icon: 1});
+ });
+ }
+
+ // 璺戝簱
+ function moveLoc() {
+ $.ajax({
+ url: baseUrl + "/shuttle/moveLoc",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ data: {
+ shuttleNo: $('input[name="shuttleSelect"]:checked').val(),
+ xStart: $("#xStart").val(),
+ xTarget: $("#xTarget").val(),
+ yStart: $("#yStart").val(),
+ yTarget: $("#yTarget").val(),
+ moveType: $('input[name="moveType"]:checked').val()
+ },
+ success: function (res) {
+ if (res.code === 200) {
+ layer.msg(res.msg, {icon: 1});
+ } else if (res.code === 403) {
+ window.location.href = baseUrl + "/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ })
+ }
+
+
+ // ------------------------------------------------------------------------------------------------
+
+ // 鍥涘悜绌挎杞︿俊鎭〃鑾峰彇 ----- 琛ㄤ竴
+ function initShuttleStateTable(row) {
+ let line;
+ if (row === undefined){
+ let one = $('#shuttle-state-table thead').height();
+ let total = $('.shuttle-state').height();
+ let count = total / one;
+ count = parseInt(count) - 1;
+ shuttleStateTableBlankRows = count;
+ line = count;
+ } else {
+ line = row;
+ }
+ let html = "";
+ for (let i = 0; i < line; i ++){
+ html += " <tr>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " </tr>\n";
+ }
+ $('#shuttle-state-table tbody').after(html);
+ }
+
+ // 绌挎杞︽暟鎹〃鑾峰彇 ----- 琛ㄤ簩
+ function initShuttleMsgTable(row) {
+ let line;
+ if (row === undefined){
+ let one = $('#shuttle-msg-table thead').height();
+ let total = $('.shuttle-msg').height();
+ let count = total / one;
+ count = parseInt(count) - 1;
+ shuttleMsgTableBlankRows = count;
+ line = count;
+ } else {
+ line = row;
+ }
+ let html = "";
+ for (let i = 0; i < line; i ++){
+ html += " <tr>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " </tr>\n";
+ }
+ $('#shuttle-msg-table tbody').after(html);
+ }
+
+ // 鏃ュ織杈撳嚭妗�
+ function shuttleOutput(content){
+ shuttleOutputDom.value += content;
+ shuttleOutputDom.scrollTop = shuttleOutputDom.scrollHeight;
+ }
+
+ //鍥涘悜绌挎杞﹂厤缃弬鏁颁繚瀛�
+ function shuttleParamSave() {
+ $.ajax({
+ url: baseUrl+ "/shuttle/runSpeed/" + $('input[name="shuttleSelect"]:checked').val(),
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ data: {
+ runSpeed: $("#runSpeed").val(),
+ chargeLine: $("#chargeLine").val(),
+ },
+ success: function (res) {
+ if (res.code === 200){
+ layer.msg("閰嶇疆宸蹭繚瀛�", {icon: 1,});
+ } else if (res.code === 403){
+ window.location.href = baseUrl+"/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
+ }
+
+ // 璇︽儏鎿嶄綔 -------------------------------------------------------------------------
+ var layerDetl;
+ $(document).on('dblclick ','#shuttle-msg-table tr', function () {
+ var shuttleNo = $(this).children("td").eq(0).html();
+ if (shuttleNo !== null && shuttleNo !== "") {
+ layerDetl = layer.open({
+ type: 1,
+ title: false,
+ shadeClose: true,
+ offset: 'rt',
+ anim: 5,
+ shade: [0],
+ area: ['340px', '255px'],
+ closeBtn: 0,
+ content: $("#shuttle-detl"),
+ success: function(layero, index){
+ $.ajax({
+ url: baseUrl+ "/shuttle/table/shuttle/state",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200){
+ var table = res.data;
+ for (var i=1;i<=table.length;i++){
+ if (shuttleNo == table[i-1].shuttleNo) {
+ $('#shuttleNo').val(shuttleNo);
+ $('#workNo').val(table[i-1].taskNo);
+ $('#pakMk').val(table[i-1].pakMk$);
+ $('#token').val(table[i-1].token);
+ }
+ }
+ } else if (res.code === 403){
+ window.location.href = baseUrl+"/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
+ },
+ end: function () {
+ $('#shuttleNo').val("");
+ $('#workNo').val("");
+ $('#pakMk').val("");
+ $('#token').val("");
+ }
+ })
+ }
+ });
+
+ $(document).on('click ','#cancel', function () {
+ $('#shuttleNo').val("");
+ $('#workNo').val("");
+ $('#pakMk').val("");
+ $('#token').val("");
+ layer.close(layerDetl);
+ })
+
+
+</script>
--
Gitblit v1.9.1