From 5a2ec88cf71194456a371efda15f3cab5f6225ae Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期四, 20 六月 2024 20:48:41 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java | 68 ++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasLift.java | 12
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java | 12
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleTaskModeType.java | 1
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java | 62 ++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java | 6
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java | 6
zy-asrs-flow/src/pages/deviceManage/basLift/index.jsx | 122 +++++----
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/dto/BasLiftLevOffsetDto.java | 14 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java | 1
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java | 86 ++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyLiftThread.java | 10
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java | 49 ++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java | 19 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java | 3
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java | 10
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java | 8
zy-asrs-flow/src/pages/deviceConfig/shuttleStandby/index.jsx | 110 ++++----
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java | 7
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java | 32 ++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java | 2
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java | 62 +---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java | 19 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java | 4
zy-asrs-flow/src/pages/deviceManage/basLift/components/edit.jsx | 7
25 files changed, 533 insertions(+), 199 deletions(-)
diff --git a/zy-asrs-flow/src/pages/deviceConfig/shuttleStandby/index.jsx b/zy-asrs-flow/src/pages/deviceConfig/shuttleStandby/index.jsx
index 7c03639..3634eca 100644
--- a/zy-asrs-flow/src/pages/deviceConfig/shuttleStandby/index.jsx
+++ b/zy-asrs-flow/src/pages/deviceConfig/shuttleStandby/index.jsx
@@ -172,60 +172,60 @@
]}
/>,
},
- {
- title: '娣诲姞鏃堕棿',
- dataIndex: 'createTime$',
- valueType: 'text',
- hidden: false,
- width: 140,
- filterDropdown: (props) => <DatetimeRangeFilter
- name='createTime'
- {...props}
- actionRef={actionRef}
- setSearchParam={setSearchParam}
- />,
- },
- {
- title: '娣诲姞浜哄憳',
- dataIndex: 'createBy$',
- valueType: 'text',
- hidden: false,
- width: 140,
- filterDropdown: (props) => <LinkFilter
- name='createBy'
- major='user'
- {...props}
- actionRef={actionRef}
- setSearchParam={setSearchParam}
- />,
- },
- {
- title: '淇敼鏃堕棿',
- dataIndex: 'updateTime$',
- valueType: 'text',
- hidden: false,
- width: 140,
- filterDropdown: (props) => <DatetimeRangeFilter
- name='updateTime'
- {...props}
- actionRef={actionRef}
- setSearchParam={setSearchParam}
- />,
- },
- {
- title: '淇敼浜哄憳',
- dataIndex: 'updateBy$',
- valueType: 'text',
- hidden: false,
- width: 140,
- filterDropdown: (props) => <LinkFilter
- name='updateBy'
- major='user'
- {...props}
- actionRef={actionRef}
- setSearchParam={setSearchParam}
- />,
- },
+ // {
+ // title: '娣诲姞鏃堕棿',
+ // dataIndex: 'createTime$',
+ // valueType: 'text',
+ // hidden: false,
+ // width: 140,
+ // filterDropdown: (props) => <DatetimeRangeFilter
+ // name='createTime'
+ // {...props}
+ // actionRef={actionRef}
+ // setSearchParam={setSearchParam}
+ // />,
+ // },
+ // {
+ // title: '娣诲姞浜哄憳',
+ // dataIndex: 'createBy$',
+ // valueType: 'text',
+ // hidden: false,
+ // width: 140,
+ // filterDropdown: (props) => <LinkFilter
+ // name='createBy'
+ // major='user'
+ // {...props}
+ // actionRef={actionRef}
+ // setSearchParam={setSearchParam}
+ // />,
+ // },
+ // {
+ // title: '淇敼鏃堕棿',
+ // dataIndex: 'updateTime$',
+ // valueType: 'text',
+ // hidden: false,
+ // width: 140,
+ // filterDropdown: (props) => <DatetimeRangeFilter
+ // name='updateTime'
+ // {...props}
+ // actionRef={actionRef}
+ // setSearchParam={setSearchParam}
+ // />,
+ // },
+ // {
+ // title: '淇敼浜哄憳',
+ // dataIndex: 'updateBy$',
+ // valueType: 'text',
+ // hidden: false,
+ // width: 140,
+ // filterDropdown: (props) => <LinkFilter
+ // name='updateBy'
+ // major='user'
+ // {...props}
+ // actionRef={actionRef}
+ // setSearchParam={setSearchParam}
+ // />,
+ // },
{
title: '澶囨敞',
dataIndex: 'memo',
@@ -241,7 +241,7 @@
},
{
title: '璁惧鍙�',
- dataIndex: 'deviceId$',
+ dataIndex: 'deviceId',
valueType: 'text',
hidden: false,
width: 140,
diff --git a/zy-asrs-flow/src/pages/deviceManage/basLift/components/edit.jsx b/zy-asrs-flow/src/pages/deviceManage/basLift/components/edit.jsx
index efabcc4..f57d16a 100644
--- a/zy-asrs-flow/src/pages/deviceManage/basLift/components/edit.jsx
+++ b/zy-asrs-flow/src/pages/deviceManage/basLift/components/edit.jsx
@@ -166,6 +166,13 @@
]}
/>
</ProForm.Group>
+ <ProForm.Group>
+ <ProFormText
+ name="code"
+ label="鎻愬崌鏈烘潯鐮�"
+ colProps={{ md: 12, xl: 12 }}
+ />
+ </ProForm.Group>
</ProForm>
</Modal>
diff --git a/zy-asrs-flow/src/pages/deviceManage/basLift/index.jsx b/zy-asrs-flow/src/pages/deviceManage/basLift/index.jsx
index e382d1c..393ce38 100644
--- a/zy-asrs-flow/src/pages/deviceManage/basLift/index.jsx
+++ b/zy-asrs-flow/src/pages/deviceManage/basLift/index.jsx
@@ -169,60 +169,60 @@
setSearchParam={setSearchParam}
/>,
},
- {
- title: '淇敼浜哄憳',
- dataIndex: 'updateBy$',
- valueType: 'text',
- hidden: false,
- width: 140,
- filterDropdown: (props) => <LinkFilter
- name='updateBy'
- major='user'
- {...props}
- actionRef={actionRef}
- setSearchParam={setSearchParam}
- />,
- },
- {
- title: '鍒涘缓浜哄憳',
- dataIndex: 'createBy$',
- valueType: 'text',
- hidden: false,
- width: 140,
- filterDropdown: (props) => <LinkFilter
- name='createBy'
- major='user'
- {...props}
- actionRef={actionRef}
- setSearchParam={setSearchParam}
- />,
- },
- {
- title: '鍒涘缓鏃堕棿',
- dataIndex: 'createTime$',
- valueType: 'text',
- hidden: false,
- width: 140,
- filterDropdown: (props) => <DatetimeRangeFilter
- name='createTime'
- {...props}
- actionRef={actionRef}
- setSearchParam={setSearchParam}
- />,
- },
- {
- title: '淇敼鏃堕棿',
- dataIndex: 'updateTime$',
- valueType: 'text',
- hidden: false,
- width: 140,
- filterDropdown: (props) => <DatetimeRangeFilter
- name='updateTime'
- {...props}
- actionRef={actionRef}
- setSearchParam={setSearchParam}
- />,
- },
+ // {
+ // title: '淇敼浜哄憳',
+ // dataIndex: 'updateBy$',
+ // valueType: 'text',
+ // hidden: false,
+ // width: 140,
+ // filterDropdown: (props) => <LinkFilter
+ // name='updateBy'
+ // major='user'
+ // {...props}
+ // actionRef={actionRef}
+ // setSearchParam={setSearchParam}
+ // />,
+ // },
+ // {
+ // title: '鍒涘缓浜哄憳',
+ // dataIndex: 'createBy$',
+ // valueType: 'text',
+ // hidden: false,
+ // width: 140,
+ // filterDropdown: (props) => <LinkFilter
+ // name='createBy'
+ // major='user'
+ // {...props}
+ // actionRef={actionRef}
+ // setSearchParam={setSearchParam}
+ // />,
+ // },
+ // {
+ // title: '鍒涘缓鏃堕棿',
+ // dataIndex: 'createTime$',
+ // valueType: 'text',
+ // hidden: false,
+ // width: 140,
+ // filterDropdown: (props) => <DatetimeRangeFilter
+ // name='createTime'
+ // {...props}
+ // actionRef={actionRef}
+ // setSearchParam={setSearchParam}
+ // />,
+ // },
+ // {
+ // title: '淇敼鏃堕棿',
+ // dataIndex: 'updateTime$',
+ // valueType: 'text',
+ // hidden: false,
+ // width: 140,
+ // filterDropdown: (props) => <DatetimeRangeFilter
+ // name='updateTime'
+ // {...props}
+ // actionRef={actionRef}
+ // setSearchParam={setSearchParam}
+ // />,
+ // },
{
title: '澶囨敞',
dataIndex: 'memo',
@@ -255,6 +255,7 @@
valueType: 'text',
hidden: false,
width: 140,
+ ellipsis: true,
filterDropdown: (props) => <TextFilter
name='protocol'
{...props}
@@ -279,6 +280,19 @@
]}
/>,
},
+ {
+ title: '鎻愬崌鏈烘潯鐮�',
+ dataIndex: 'code',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <TextFilter
+ name='code'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
{
title: '鎿嶄綔',
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java
index a7ee026..c66ac21 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java
@@ -101,6 +101,12 @@
} else if (command.getMode() == LiftCommandModeType.RESET.id) {
//澶嶄綅
command.setComplete(true);
+ } else if (command.getMode() == LiftCommandModeType.LOCK.id) {
+ //澶嶄綅
+ command.setComplete(true);
+ } else if (command.getMode() == LiftCommandModeType.UNLOCK.id) {
+ //澶嶄綅
+ command.setComplete(true);
}
// 鏇存柊redis鏁版嵁
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
index 1be358f..8e0c161 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
@@ -641,6 +641,8 @@
result = shuttleThread.charge(command);
} else if (command.getMode() == ShuttleCommandModeType.RESET.id) {//澶嶄綅
result = shuttleThread.reset(command);
+ } else if (command.getMode() == ShuttleCommandModeType.UPDATE_LOCATION.id) {//鏇存柊鍧愭爣
+ result = shuttleThread.updateLocation(command);
}
return result;
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java
index 1fc8368..940edd9 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java
@@ -321,9 +321,9 @@
if (shuttleProtocol == null) {
return R.error("绌挎杞︿笉鍦ㄧ嚎");
}
- if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(param.getDestLoc())) {
- return R.error("绌挎杞﹀拰鐩爣浣嶇疆涓嶅湪鍚屼竴妤煎眰");
- }
+// if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(param.getDestLoc())) {
+// return R.error("绌挎杞﹀拰鐩爣浣嶇疆涓嶅湪鍚屼竴妤煎眰");
+// }
Task one = taskService.getOne(new LambdaQueryWrapper<Task>()
.eq(Task::getTaskCtg, taskCtg.getId())
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/dto/BasLiftLevOffsetDto.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/dto/BasLiftLevOffsetDto.java
new file mode 100644
index 0000000..da8dc35
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/dto/BasLiftLevOffsetDto.java
@@ -0,0 +1,14 @@
+package com.zy.asrs.wcs.core.domain.dto;
+
+import lombok.Data;
+
+@Data
+public class BasLiftLevOffsetDto {
+
+ //閫昏緫灞�
+ private Integer logicLev;
+
+ //瀹為檯灞�
+ private Integer realLev;
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasLift.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasLift.java
index e65a22f..88d2e5f 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasLift.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasLift.java
@@ -142,6 +142,18 @@
@ApiModelProperty(value= "绔欑偣鍒楄〃")
private String sta;
+ /**
+ * 绔欑偣鍒楄〃
+ */
+ @ApiModelProperty(value= "鎻愬崌鏈烘ゼ灞傚亸绉婚噺")
+ private String levOffset;
+
+ /**
+ * 鎻愬崌鏈烘潯鐮�
+ */
+ @ApiModelProperty(value= "鎻愬崌鏈烘潯鐮�")
+ private String code;
+
public BasLift() {}
public BasLift(Long deviceId, Integer liftNo, Integer status, Integer taskNo, Long updateBy, Long createBy, Date createTime, Date updateTime, String memo, Integer pakMk, Integer deleted, Long hostId, String protocol, Integer transfer, Integer row, Integer bay, String sta) {
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
index f6c96a9..5db9b04 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
@@ -899,7 +899,15 @@
}))
));
- // 绌挎杞︽彁鍗囨満寰呮満浣嶈嚦鎻愬崌鏈哄簱浣�
+ // 閿佸畾鎻愬崌鏈�
+ motionList.addAll(kernelService.liftLock(
+ null
+ , MotionDto.build((dto -> {
+ dto.setLiftNo(transferLiftDevice.getId().intValue());
+ }))
+ ));
+
+ // 绌挎杞︽彁鍗囨満寰呮満浣嶈嚦鎻愬崌鏈�
motionList.addAll(kernelService.shuttleMove(
MotionDto.build((dto -> {
dto.setShuttleNo(shuttleDevice.getId().intValue());
@@ -913,6 +921,14 @@
MotionCtgType.SHUTTLE_MOVE_TO_LIFT
));
+ // 瑙i攣鎻愬崌鏈�
+ motionList.addAll(kernelService.liftUnlock(
+ null
+ , MotionDto.build((dto -> {
+ dto.setLiftNo(transferLiftDevice.getId().intValue());
+ }))
+ ));
+
// 鎻愬崌鏈烘惉杞� 鑷� 鍏呯數灞�
motionList.addAll(kernelService.liftMoveShuttle(
MotionDto.build((dto -> {
@@ -922,6 +938,23 @@
MotionDto.build((dto -> {
dto.setLiftNo(transferLiftDevice.getId().intValue());
dto.setLev(Utils.getLev(chargeLocNo));
+ }))
+ ));
+
+ // 閿佸畾鎻愬崌鏈�
+ motionList.addAll(kernelService.liftLock(
+ null
+ , MotionDto.build((dto -> {
+ dto.setLiftNo(transferLiftDevice.getId().intValue());
+ }))
+ ));
+
+ // 鏇存柊灏忚溅鍧愭爣
+ motionList.addAll(kernelService.shuttleUpdateLocation(
+ null
+ , MotionDto.build((dto -> {
+ dto.setShuttleNo(shuttleDevice.getId().intValue());
+ dto.setLocNo(liftLocNoFrom);
}))
));
@@ -937,6 +970,14 @@
dto.setLocNo(standbyLocNoFrom);
})),
MotionCtgType.SHUTTLE_MOVE_FROM_LIFT
+ ));
+
+ // 瑙i攣鎻愬崌鏈�
+ motionList.addAll(kernelService.liftUnlock(
+ null
+ , MotionDto.build((dto -> {
+ dto.setLiftNo(transferLiftDevice.getId().intValue());
+ }))
));
// 绌挎杞︽彁鍗囨満寰呮満浣嶈嚦鍏呯數浣�
@@ -1113,7 +1154,15 @@
}))
));
- // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満搴撲綅
+ // 閿佸畾鎻愬崌鏈�
+ motionList.addAll(kernelService.liftLock(
+ null
+ , MotionDto.build((dto -> {
+ dto.setLiftNo(liftDevice.getId().intValue());
+ }))
+ ));
+
+ // 绌挎杞﹀緟鏈轰綅鑷虫彁鍗囨満
motionList.addAll(kernelService.shuttleMove(
MotionDto.build((dto -> {
dto.setShuttleNo(shuttleDevice.getId().intValue());
@@ -1127,6 +1176,14 @@
MotionCtgType.SHUTTLE_MOVE_TO_LIFT
));
+ // 瑙i攣鎻愬崌鏈�
+ motionList.addAll(kernelService.liftUnlock(
+ null
+ , MotionDto.build((dto -> {
+ dto.setLiftNo(liftDevice.getId().intValue());
+ }))
+ ));
+
// 鎻愬崌鏈烘惉杞� 鑷� 鐩爣浣嶇疆灞�
motionList.addAll(kernelService.liftMoveShuttle(
MotionDto.build((dto -> {
@@ -1136,6 +1193,23 @@
MotionDto.build((dto -> {
dto.setLiftNo(liftDevice.getId().intValue());
dto.setLev(Utils.getLev(locNo));
+ }))
+ ));
+
+ // 閿佸畾鎻愬崌鏈�
+ motionList.addAll(kernelService.liftLock(
+ null
+ , MotionDto.build((dto -> {
+ dto.setLiftNo(liftDevice.getId().intValue());
+ }))
+ ));
+
+ // 鏇存柊灏忚溅鍧愭爣
+ motionList.addAll(kernelService.shuttleUpdateLocation(
+ null
+ , MotionDto.build((dto -> {
+ dto.setShuttleNo(shuttleDevice.getId().intValue());
+ dto.setLocNo(liftLocNoFrom);
}))
));
@@ -1153,6 +1227,14 @@
MotionCtgType.SHUTTLE_MOVE_FROM_LIFT
));
+ // 瑙i攣鎻愬崌鏈�
+ motionList.addAll(kernelService.liftUnlock(
+ null
+ , MotionDto.build((dto -> {
+ dto.setLiftNo(liftDevice.getId().intValue());
+ }))
+ ));
+
// 绌挎杞︽彁鍗囨満寰呮満浣嶈嚦鐩爣浣嶇疆
motionList.addAll(kernelService.shuttleMove(
MotionDto.build((dto -> {
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
index dd04470..cac9b7d 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
@@ -5,6 +5,7 @@
import com.zy.asrs.wcs.core.model.enums.MotionCtgType;
import com.zy.asrs.wcs.core.entity.Motion;
import com.zy.asrs.wcs.core.service.MotionService;
+import com.zy.asrs.wcs.core.utils.LiftDispatcher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -19,7 +20,8 @@
@Autowired
private MotionService motionService;
-
+ @Autowired
+ private LiftDispatcher liftDispatcher;
// agv -----------------------------------------------------------------------------
@Deprecated
@@ -50,9 +52,9 @@
motion.setMotionCtg(MotionCtgType.LIFT_MOVE.val());
if (null != origin) {
- motion.setOrigin(String.valueOf(origin.getLev()));
+ motion.setOrigin(String.valueOf(liftDispatcher.getLiftLevOffset(target.getLiftNo(), origin.getLev())));
}
- motion.setTarget(String.valueOf(target.getLev()));
+ motion.setTarget(String.valueOf(liftDispatcher.getLiftLevOffset(target.getLiftNo(), target.getLev())));
}));
// if (target.getUpdateLiftNo() != null && target.getWrkNo() != null) {
@@ -77,10 +79,10 @@
motion.setMotionCtg(MotionCtgType.LIFT_WITH_GOODS.val());
if (null != origin) {
- motion.setOrigin(String.valueOf(origin.getLev()));
+ motion.setOrigin(String.valueOf(liftDispatcher.getLiftLevOffset(target.getLiftNo(), origin.getLev())));
motion.setOriDrt(origin.getStaNo());//婧愮珯
}
- motion.setTarget(String.valueOf(target.getLev()));
+ motion.setTarget(String.valueOf(liftDispatcher.getLiftLevOffset(target.getLiftNo(), target.getLev())));
motion.setTarDrt(target.getStaNo());//鐩爣绔�
}));
@@ -100,9 +102,9 @@
motion.setMotionCtg(MotionCtgType.LIFT_WITH_SHUTTLE.val());
if (null != origin) {
- motion.setOrigin(String.valueOf(origin.getLev()));
+ motion.setOrigin(String.valueOf(liftDispatcher.getLiftLevOffset(target.getLiftNo(), origin.getLev())));
}
- motion.setTarget(String.valueOf(target.getLev()));
+ motion.setTarget(String.valueOf(liftDispatcher.getLiftLevOffset(target.getLiftNo(), target.getLev())));
}));
return motionList;
@@ -121,9 +123,9 @@
motion.setMotionCtg(MotionCtgType.LIFT_WITH_GOODS_AND_SHUTTLE.val());
if (null != origin) {
- motion.setOrigin(String.valueOf(origin.getLev()));
+ motion.setOrigin(String.valueOf(liftDispatcher.getLiftLevOffset(target.getLiftNo(), origin.getLev())));
}
- motion.setTarget(String.valueOf(target.getLev()));
+ motion.setTarget(String.valueOf(liftDispatcher.getLiftLevOffset(target.getLiftNo(), target.getLev())));
}));
return motionList;
@@ -141,7 +143,7 @@
motion.setMotionCtg(MotionCtgType.LIFT_TRANSPORT_TO_CONVEYOR.val());
- motion.setOrigin(String.valueOf(origin.getLev()));
+ motion.setOrigin(String.valueOf(liftDispatcher.getLiftLevOffset(origin.getLiftNo(), origin.getLev())));
motion.setDockNo(String.valueOf(target.getDevpNo()));
motion.setTarget(String.valueOf(target.getStaNo()));
@@ -150,10 +152,56 @@
return motionList;
}
+ /**
+ * 鎻愬崌鏈洪攣瀹�
+ */
+ public List<Motion> liftLock(MotionDto origin, MotionDto target) {
+ List<Motion> motionList = new ArrayList<>();
+
+ motionList.add(Motion.build(motion -> {
+ motion.setDeviceCtg(DeviceCtgType.LIFT.val());
+ motion.setDevice(String.valueOf(target.getLiftNo()));
+ motion.setMotionCtg(MotionCtgType.LIFT_LOCK.val());
+ }));
+
+ return motionList;
+ }
+
+ /**
+ * 鎻愬崌鏈鸿В閿�
+ */
+ public List<Motion> liftUnlock(MotionDto origin, MotionDto target) {
+ List<Motion> motionList = new ArrayList<>();
+
+ motionList.add(Motion.build(motion -> {
+ motion.setDeviceCtg(DeviceCtgType.LIFT.val());
+ motion.setDevice(String.valueOf(target.getLiftNo()));
+ motion.setMotionCtg(MotionCtgType.LIFT_UNLOCK.val());
+ }));
+
+ return motionList;
+ }
// shuttle -----------------------------------------------------------------------------
/**
+ * 灏忚溅鍧愭爣鏇存柊
+ */
+ public List<Motion> shuttleUpdateLocation(MotionDto origin, MotionDto target) {
+ List<Motion> motionList = new ArrayList<>();
+
+ motionList.add(Motion.build(motion -> {
+ motion.setDeviceCtg(DeviceCtgType.SHUTTLE.val());
+ motion.setDevice(String.valueOf(target.getShuttleNo()));
+ motion.setMotionCtg(MotionCtgType.SHUTTLE_UPDATE_LOCATION.val());
+
+ motion.setTarget(target.getLocNo());
+ }));
+
+ return motionList;
+ }
+
+ /**
* 绌挎杞︾┖杞界Щ鍔�
*/
public List<Motion> shuttleMove(MotionDto origin, MotionDto target, MotionCtgType motionCtgType) {
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
index 3471fbb..5e3a669 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.wcs.core.action.LiftAction;
import com.zy.asrs.wcs.core.entity.Motion;
+import com.zy.asrs.wcs.core.entity.Task;
import com.zy.asrs.wcs.core.model.command.LiftAssignCommand;
import com.zy.asrs.wcs.core.model.command.LiftCommand;
import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
@@ -21,6 +22,7 @@
import org.springframework.stereotype.Service;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -59,6 +61,16 @@
.eq(Motion::getDeviceCtg, DeviceCtgType.LIFT.val())
.eq(Motion::getDevice, motion.getDevice())
.eq(Motion::getMotionSts, MotionStsType.EXECUTING.val())) > 0) {
+ return false;
+ }
+
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, motion.getTaskNo()));
+ if (task == null) {
+ return false;
+ }
+ task.setLiftNo(liftProtocol.getLiftNo());
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
return false;
}
@@ -108,6 +120,16 @@
// return liftThread.assignWork(command);
case LIFT_TRANSPORT_TO_CONVEYOR:
return false;
+ case LIFT_LOCK:
+ //閿佸畾鎻愬崌鏈�
+ command = liftThread.getLockCommand(motion.getTaskNo(), true);//鑾峰彇鎻愬崌鏈洪攣瀹氬懡浠�
+ list.addAll(command);
+ return liftAction.assignWork(liftThread.getDevice(), assignCommand);
+ case LIFT_UNLOCK:
+ //閿佸畾鎻愬崌鏈�
+ command = liftThread.getLockCommand(motion.getTaskNo(), false);//鑾峰彇鎻愬崌鏈鸿В瀹氬懡浠�
+ list.addAll(command);
+ return liftAction.assignWork(liftThread.getDevice(), assignCommand);
default:
break;
@@ -191,6 +213,16 @@
case LIFT_TRANSPORT_TO_CONVEYOR:
break;
+ case LIFT_LOCK:
+ if (!liftThread.isLock(null)) {
+ return false;
+ }
+ break;
+ case LIFT_UNLOCK:
+ if (liftThread.isLock(null)) {
+ return false;
+ }
+ break;
default:
return false;
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
index 402c46e..230f15c 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -61,6 +61,8 @@
private ShuttleAction shuttleAction;
@Autowired
private LiftAction liftAction;
+ @Autowired
+ private LiftDispatcher liftDispatcher;
// 璁$畻
public Boolean accept(Motion motion) {
@@ -141,11 +143,11 @@
}
// 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
- if (!liftThread.isIdle()) {
+ if (!liftThread.isIdle(MotionCtgType.SHUTTLE_MOVE_FROM_LIFT)) {
return false;
}
- if (liftProtocol.getLev() != Utils.getLev(motion.getTarget())) {//鍒ゆ柇鎻愬崌鏈烘槸鍚﹁揪鍒扮洰鏍囧眰
+ if (liftProtocol.getLev() != liftDispatcher.getLiftLevOffset(liftThread.getDevice().getId().intValue(), Utils.getLev(motion.getTarget()))) {//鍒ゆ柇鎻愬崌鏈烘槸鍚﹁揪鍒扮洰鏍囧眰
return false;
}
@@ -156,24 +158,13 @@
return true;
}
})) {
- //閿佸畾鎻愬崌鏈�
- List<LiftCommand> lockCommand = liftThread.getLockCommand(motion.getTaskNo(), true);//鑾峰彇鎻愬崌鏈洪攣瀹氬懡浠�
-
- LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
- liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
- liftAssignCommand.setTaskNo(motion.getTaskNo());
- ArrayList<LiftCommand> list = new ArrayList<>();
- list.addAll(lockCommand);
- liftAssignCommand.setCommands(list);
-
- liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
- return false;//绛夊緟涓嬩竴娆¤疆璇�
- }
-
- //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
- if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
return false;
}
+
+// //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
+// if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
+// return false;
+// }
shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
@@ -189,11 +180,11 @@
return false;
}
// 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
- if (!liftThread.isIdle()) {
+ if (!liftThread.isIdle(MotionCtgType.SHUTTLE_MOVE_TO_LIFT)) {
return false;
}
- if (liftProtocol.getLev() != Utils.getLev(motion.getTarget())) {//鍒ゆ柇鎻愬崌鏈烘槸鍚﹁揪鍒扮洰鏍囧眰
+ if (liftProtocol.getLev() != liftDispatcher.getLiftLevOffset(liftThread.getDevice().getId().intValue(), Utils.getLev(motion.getTarget()))) {//鍒ゆ柇鎻愬崌鏈烘槸鍚﹁揪鍒扮洰鏍囧眰
return false;
}
@@ -204,27 +195,13 @@
return true;
}
})) {
- //閿佸畾鎻愬崌鏈�
- List<LiftCommand> lockCommand = liftThread.getLockCommand(motion.getTaskNo(), true);//鑾峰彇鎻愬崌鏈洪攣瀹氬懡浠�
- if (lockCommand == null) {
- return false;
- }
-
- LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
- liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
- liftAssignCommand.setTaskNo(motion.getTaskNo());
- ArrayList<LiftCommand> list = new ArrayList<>();
- list.addAll(lockCommand);
- liftAssignCommand.setCommands(list);
-
- liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
- return false;//绛夊緟涓嬩竴娆¤疆璇�
- }
-
- //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
- if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
return false;
}
+
+// //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
+// if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
+// return false;
+// }
shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
@@ -246,6 +223,10 @@
case SHUTTLE_PALLET_DOWN://鎵樼洏涓嬮檷
shuttleTaskModeType = ShuttleTaskModeType.PALLET_DOWN;
shuttleCommands.add(shuttleThread.getLiftCommand(motion.getTaskNo(), false));
+ break;
+ case SHUTTLE_UPDATE_LOCATION://灏忚溅鍧愭爣鏇存柊
+ shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_UPDATE_LOCATION;
+ shuttleCommands.add(shuttleThread.getUpdateLocationCommand(motion.getTaskNo(), motion.getTarget()));
break;
default:
throw new CoolException(motion.getMotionCtgEl() + "娌℃湁鎸囧畾浠诲姟浣滀笟娴佺▼锛侊紒锛�");
@@ -363,6 +344,7 @@
list.addAll(signalCommand);
liftAssignCommand.setCommands(list);
liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
+ redisUtil.set(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo(), true, 120);
return false;
}
}
@@ -483,6 +465,8 @@
liftThread.setSyncTaskNo(0);
}
break;
+ case SHUTTLE_UPDATE_LOCATION://灏忚溅鍧愭爣鏇存柊
+ break;
default:
break;
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
index 6374639..d1b3efa 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
@@ -22,14 +22,13 @@
// 鎻愬崌鏈� --------------------------------------------
LIFT_MOVE(LIFT),
-
LIFT_WITH_GOODS(LIFT),
LIFT_WITH_SHUTTLE(LIFT),
LIFT_WITH_GOODS_AND_SHUTTLE(LIFT),
-
LIFT_TRANSPORT_TO_CONVEYOR(LIFT),
-
LIFT_MISSION_COMPLETE(LIFT),
+ LIFT_LOCK(LIFT),
+ LIFT_UNLOCK(LIFT),
// 绌挎杞� --------------------------------------------
SHUTTLE_MOVE(SHUTTLE),
@@ -54,6 +53,8 @@
SHUTTLE_PALLET_LIFT(SHUTTLE),//鎵樼洏椤跺崌
SHUTTLE_PALLET_DOWN(SHUTTLE),//鎵樼洏涓嬮檷
+ SHUTTLE_UPDATE_LOCATION(SHUTTLE),//灏忚溅鍧愭爣鏇存柊
+
// AGV ----------------------------------------------
AGV_TRANSPORT(AGV),
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java
index d374749..4f28817 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleCommandModeType.java
@@ -14,6 +14,7 @@
PALLET_LIFT(6, "鎵樼洏椤跺崌"),
PALLET_DOWN(7, "鎵樼洏涓嬮檷"),
RESET(8, "澶嶄綅"),
+ UPDATE_LOCATION(9, "鏇存柊鍧愭爣"),
;
public Integer id;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleTaskModeType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleTaskModeType.java
index 6bf4461..6068f76 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleTaskModeType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/ShuttleTaskModeType.java
@@ -26,6 +26,7 @@
SHUTTLE_CONTROL(21, "灏忚溅绠″埗"),
SHUTTLE_CANCEL_CONTROL(22, "灏忚溅鍙栨秷绠″埗"),
MOVE_LOC_NO_WRK_MAST(23, "绉诲姩鍒扮洰鏍囧簱浣�(鐢熸垚绉诲姩浠诲姟)"),
+ SHUTTLE_UPDATE_LOCATION(24, "灏忚溅鍧愭爣鏇存柊"),
;
public Integer id;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
index 41fe225..f2ab33f 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
@@ -443,7 +443,7 @@
if (motionList.isEmpty()) {
continue;
}
- motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
// 鏇存柊宸ヤ綔涓绘。
task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 宸ヤ綔鐘舵��
@@ -516,7 +516,7 @@
log.error("鍑哄簱 ===>> 鏆傛椂娌℃湁绌洪棽灏忚溅, 浠诲姟鍙�={}", task.getTaskNo());
continue;
}
- motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
// 鏇存柊宸ヤ綔涓绘。
task.setTaskSts(TaskStsType.ANALYZE_OUTBOUND.sts); // 宸ヤ綔鐘舵��
@@ -550,11 +550,11 @@
}
// generate motion list
- List<Motion> motionList = analyzeService.generateMotion(task);
+ List<Motion> motionList = analyzeService.generateShuttleMoveMotion(task);
if (motionList.isEmpty()) {
continue;
}
- motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
// 鏇存柊宸ヤ綔涓绘。
task.setTaskSts(TaskStsType.ANALYZE_MOVE.sts); // 宸ヤ綔鐘舵��
@@ -697,7 +697,7 @@
News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", device.getDeviceNo());
continue;
}
- motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
task.setTaskSts(TaskStsType.ANALYZE_CHARGE.sts);
if (!taskService.save(task)) {
@@ -792,7 +792,7 @@
News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅杩佺Щ浠诲姟澶辫触!!!", device.getDeviceNo());
continue;
}
- motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
task.setTaskSts(TaskStsType.ANALYZE_MOVE.sts);
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java
index 783237e..947937b 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java
@@ -1,6 +1,9 @@
package com.zy.asrs.wcs.core.utils;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.wcs.core.domain.dto.BasLiftLevOffsetDto;
import com.zy.asrs.wcs.core.entity.BasLift;
import com.zy.asrs.wcs.core.entity.ShuttleStandby;
import com.zy.asrs.wcs.core.model.NavigateNode;
@@ -122,4 +125,20 @@
return liftLocNo;
}
+ public Integer getLiftLevOffset(Integer deviceId,Integer lev) {
+ BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>().eq(BasLift::getDeviceId, deviceId));
+ if (basLift != null) {
+ if(Cools.isEmpty(basLift.getLevOffset())) {
+ return lev;
+ }
+ List<BasLiftLevOffsetDto> levOffsetDtos = JSON.parseArray(basLift.getLevOffset(), BasLiftLevOffsetDto.class);
+ for (BasLiftLevOffsetDto offsetDto : levOffsetDtos) {
+ if(lev == offsetDto.getLogicLev()){
+ return offsetDto.getRealLev();
+ }
+ }
+ }
+ return lev;
+ }
+
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
index 4dbd761..9568d31 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
@@ -152,8 +152,8 @@
}
}
- if (map[x][y] == 0 || map[x][y] == 3 || map[x][y] == 4 || map[x][y] == 5) {
- //瀛愯建鍜屾瘝杞ㄣ�佽緭閫佺嚎銆佸厖鐢垫々鎵嶈兘杩涜宸﹀彸绉诲姩
+ if (map[x][y] == 0 || map[x][y] == 3 || map[x][y] == 4 || map[x][y] == 5 || map[x][y] == 67) {
+ //瀛愯建鍜屾瘝杞ㄣ�佽緭閫佺嚎銆佸厖鐢垫々銆佹彁鍗囨満鎵嶈兘杩涜宸﹀彸绉诲姩
if (is_valid(x, y + 1))
{
NavigateNode node = new NavigateNode(x, y + 1);
@@ -180,8 +180,8 @@
}
}
- if (map[x][y] == 0 || map[x][y] == 3 || map[x][y] == 4 || map[x][y] == 5) {
- //瀛愯建鍜屾瘝杞ㄣ�佽緭閫佺嚎銆佸厖鐢垫々鎵嶈兘杩涜涓婁笅绉诲姩
+ if (map[x][y] == 0 || map[x][y] == 3 || map[x][y] == 4 || map[x][y] == 5 || map[x][y] == 67) {
+ //瀛愯建鍜屾瘝杞ㄣ�佽緭閫佺嚎銆佸厖鐢垫々銆佹彁鍗囨満鎵嶈兘杩涜涓婁笅绉诲姩
if (is_valid(x + 1, y))
{
NavigateNode node = new NavigateNode(x + 1, y);
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
index 388135e..9925d1e 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
@@ -3,16 +3,22 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.wcs.core.entity.BasLift;
import com.zy.asrs.wcs.core.entity.Loc;
+import com.zy.asrs.wcs.core.service.BasLiftService;
import com.zy.asrs.wcs.core.service.LocService;
import com.zy.asrs.wcs.core.utils.RedisUtil;
+import com.zy.asrs.wcs.core.utils.Utils;
+import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
import com.zy.asrs.wcs.rcs.entity.BasShuttleErr;
import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
import com.zy.asrs.wcs.rcs.entity.Device;
import com.zy.asrs.wcs.rcs.entity.ShuttleDeviceStatus;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
import com.zy.asrs.wcs.rcs.service.BasShuttleErrService;
import com.zy.asrs.wcs.rcs.service.ShuttleDeviceStatusService;
+import com.zy.asrs.wcs.rcs.thread.LiftThread;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@@ -257,7 +263,8 @@
//閫氳繃褰撳墠浜岀淮鐮佽幏鍙栧綋鍓嶅簱浣嶅彿
public String getCurrentLocNo() {
LocService locService = SpringUtils.getBean(LocService.class);
- if (locService == null) {
+ BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
+ if (locService == null || basLiftService == null) {
return null;
}
if (this.currentCode == null) {
@@ -270,9 +277,17 @@
.eq(Loc::getHostId, this.device.getHostId());
Loc currentLoc = locService.getOne(wrapper);
if (currentLoc == null) {
+ //鍙兘鏄彁鍗囨満鏉$爜
+ BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>().eq(BasLift::getCode, this.currentCode).eq(BasLift::getStatus, 1));
+ if(basLift != null) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basLift.getDeviceId().intValue());
+ if (liftThread != null) {
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ return Utils.getLocNo(basLift.getRow(), basLift.getBay(), liftProtocol.getLev());
+ }
+ }
return null;
}
-
return currentLoc.getLocNo();
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
index 58ea574..ccd4937 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/LiftThread.java
@@ -4,6 +4,7 @@
import com.zy.asrs.wcs.core.entity.Motion;
import com.zy.asrs.wcs.core.model.command.LiftCommand;
import com.zy.asrs.wcs.core.model.enums.LiftCommandModeType;
+import com.zy.asrs.wcs.core.model.enums.MotionCtgType;
import com.zy.asrs.wcs.rcs.entity.Device;
import com.zy.asrs.wcs.rcs.model.enums.LiftProtocolStatusType;
import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
@@ -28,7 +29,7 @@
boolean isIdle();//鏄惁绌洪棽
- boolean isIdle(ExecuteSupport support);//鏄惁绌洪棽
+ boolean isIdle(MotionCtgType flag);//鏄惁绌洪棽
boolean isDeviceIdle();//璁惧鏄惁绌洪棽
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
index 671e5f7..9a2ceb0 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
@@ -29,6 +29,8 @@
boolean reset(ShuttleCommand command);//澶嶄綅寮�鍏�
+ boolean updateLocation(ShuttleCommand param);//鏇存柊鍧愭爣
+
boolean isIdle();
boolean isIdle(ExecuteSupport support);//鏄惁绌洪棽
@@ -63,4 +65,6 @@
ShuttleCommand getChargeCommand(Integer taskNo, Boolean charge);//鍏呯數寮�鍏冲懡浠� true=>寮� false=>鍏�
+ ShuttleCommand getUpdateLocationCommand(Integer taskNo, String locNo);//鑾峰彇鏇存柊鍧愭爣鍛戒护
+
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyLiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyLiftThread.java
index bdedee3..c40d9f3 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyLiftThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyLiftThread.java
@@ -14,6 +14,7 @@
import com.zy.asrs.wcs.core.entity.BasLift;
import com.zy.asrs.wcs.core.model.command.LiftCommand;
import com.zy.asrs.wcs.core.model.enums.LiftCommandModeType;
+import com.zy.asrs.wcs.core.model.enums.MotionCtgType;
import com.zy.asrs.wcs.core.service.BasLiftService;
import com.zy.asrs.wcs.core.utils.RedisUtil;
import com.zy.asrs.wcs.core.utils.Utils;
@@ -306,14 +307,7 @@
}
@Override
- public boolean isIdle(ExecuteSupport support) {
- if (null != support) {
- Boolean judgement = support.judgement();
- if (judgement != null && !judgement) {
- return true;
- }
- }
-
+ public boolean isIdle(MotionCtgType flag) {
// 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂�
if (this.liftProtocol.getModel()
&& !this.liftProtocol.getRun()
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java
index a8f70d1..d532cc1 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java
@@ -451,6 +451,11 @@
}
@Override
+ public boolean updateLocation(ShuttleCommand param) {
+ return true;//杩樻病绉绘杩囨潵
+ }
+
+ @Override
public boolean isIdle() {
return this.isIdle(null);
}
@@ -790,6 +795,11 @@
return command;
}
+ @Override
+ public ShuttleCommand getUpdateLocationCommand(Integer taskNo, String locNo) {
+ return null;//杩樻病绉绘杩囨潵
+ }
+
//鑾峰彇灏忚溅澶嶄綅鍝嶅簲鍛戒护
public ShuttleCommand getInitCommand(Integer taskNo, Integer code) {
LocService locService = SpringUtils.getBean(LocService.class);
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
index 97c5acf..9a7d6ab 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
@@ -12,6 +12,7 @@
import com.zy.asrs.wcs.core.entity.BasLift;
import com.zy.asrs.wcs.core.model.command.LiftCommand;
import com.zy.asrs.wcs.core.model.enums.LiftCommandModeType;
+import com.zy.asrs.wcs.core.model.enums.MotionCtgType;
import com.zy.asrs.wcs.core.service.BasLiftService;
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.rcs.cache.OutputQueue;
@@ -27,10 +28,7 @@
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
@Slf4j
@SuppressWarnings("all")
@@ -101,7 +99,7 @@
//鏈夋墭鐩�
liftProtocol.setHasTray(data.getString("haveCargo").equals("Y"));
//鏈夊皬杞�
- liftProtocol.setHasCar(data.getString("haveCar").equals("Y"));
+ liftProtocol.setHasCar(data.getInteger("haveCar") == 1);
//鏁呴殰鐮�
liftProtocol.setErrorCode("0");
//灞�
@@ -362,23 +360,50 @@
}
@Override
- public boolean isIdle(ExecuteSupport support) {
- if (null != support) {
- if (!support.judgement()) {
- return false;
+ public boolean isIdle(MotionCtgType flag) {
+ if (flag == null) {
+ InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();//鑾峰彇鎵╁睍瀛楁
+ // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂层�佹湭閿佸畾
+ if (this.liftProtocol.getModel()
+ && !this.liftProtocol.getRun()
+ && this.liftProtocol.getPakMk()
+ && this.liftProtocol.getReady()
+ && this.liftProtocol.getErrorCode().equals("0")
+ && (this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE)
+ || this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.WAITING))
+ && !extend.getLock()
+ ) {
+ return true;
}
+ return false;
}
+
+ switch (Objects.requireNonNull(MotionCtgType.get(String.valueOf(flag)))){
+ case SHUTTLE_MOVE_FROM_LIFT://绌挎杞﹀嚭鎻愬崌鏈�
+ case SHUTTLE_MOVE_TO_LIFT://绌挎杞﹁繘鎻愬崌鏈�
+ return isIdleShuttleMoveToLift();
+ }
+
+ return false;
+ }
+
+ //绌挎杞﹁繘鎻愬崌鏈烘椂-鎻愬崌鏈虹姸鎬佸垽鏂�
+ private boolean isIdleShuttleMoveToLift() {
InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();//鑾峰彇鎵╁睍瀛楁
- // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂层�佹湭閿佸畾
+ // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂�
if (this.liftProtocol.getModel()
&& !this.liftProtocol.getRun()
&& this.liftProtocol.getPakMk()
- && this.liftProtocol.getReady()
&& this.liftProtocol.getErrorCode().equals("0")
&& (this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE)
|| this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.WAITING))
- && !extend.getLock()
) {
+ if (!extend.getLock()) {
+ //鎻愬崌鏈烘湭閿佸畾锛岄渶瑕佸垽鏂槸鍚﹀氨缁�
+ if (!this.liftProtocol.getReady()) {
+ return false;
+ }
+ }
return true;
}
return false;
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 c0adf3c..0b99ab5 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
@@ -11,14 +11,17 @@
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wcs.common.ExecuteSupport;
import com.zy.asrs.wcs.core.domain.param.ShuttleMoveLocParam;
+import com.zy.asrs.wcs.core.entity.BasLift;
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.command.ShuttleRedisCommand;
import com.zy.asrs.wcs.core.model.enums.*;
+import com.zy.asrs.wcs.core.service.BasLiftService;
import com.zy.asrs.wcs.core.service.BasShuttleService;
import com.zy.asrs.wcs.core.service.LocService;
+import com.zy.asrs.wcs.core.utils.LiftDispatcher;
import com.zy.asrs.wcs.core.utils.NavigateUtils;
import com.zy.asrs.wcs.core.utils.Utils;
import com.zy.asrs.wcs.rcs.News;
@@ -433,6 +436,37 @@
}
@Override
+ public boolean updateLocation(ShuttleCommand command) {
+ try {
+ String loginToken = requestLoginToken();
+ if (loginToken == null) {
+ return false;
+ }
+
+ HashMap<String, Object> headers = new HashMap<>();
+ headers.put("Authorization", "Bearer " + loginToken);
+
+ String response = new HttpHandler.Builder()
+ .setUri(API_URL)
+ .setPath("/RDS/changeLocation")
+ .setHeaders(headers)
+ .setJson(command.getBody())
+ .setTimeout(60, TimeUnit.SECONDS)
+ .build()
+ .doPost();
+ JSONObject jsonObject = JSON.parseObject(response);
+ Integer code = jsonObject.getInteger("code");
+ if (code.equals(200)) {
+ this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿
+ return true;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ @Override
public boolean isIdle() {
return this.isIdle(null);
}
@@ -674,6 +708,17 @@
body.put("nodeY", loc.getBay());
body.put("nodeZ", loc.getLev());
+ //妫�娴嬬洰鏍囩偣鏄惁涓烘彁鍗囨満
+ BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
+ BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>().eq(BasLift::getRow, loc.getRow())
+ .eq(BasLift::getBay, loc.getBay())
+ .eq(BasLift::getHostId, this.device.getHostId()));
+ if (basLift != null) {
+ LiftDispatcher liftDispatcher = SpringUtils.getBean(LiftDispatcher.class);
+ Integer realLev = liftDispatcher.getLiftLevOffset(basLift.getDeviceId().intValue(), loc.getLev());
+ body.put("nodeZ", realLev);
+ }
+
ShuttleCommand command = new ShuttleCommand();
command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
command.setBody(JSON.toJSONString(body));
@@ -714,6 +759,23 @@
return command;
}
+ @Override
+ public ShuttleCommand getUpdateLocationCommand(Integer taskNo, String locNo) {
+ 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()));
+
+ String coord = "(" + Utils.getRow(locNo) + "," + Utils.getBay(locNo) + "," + Utils.getLev(locNo) + ")";
+ body.put("coord", coord);
+
+ ShuttleCommand command = new ShuttleCommand();
+ command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo()));
+ command.setBody(JSON.toJSONString(body));
+ command.setMode(ShuttleCommandModeType.UPDATE_LOCATION.id);
+ return command;
+ }
+
//***************璁惧灞傞�氳-涓嶅悓鍘傚晢璁惧閫氳鏂规涓嶄竴鑷�***************
//璇锋眰鐧诲綍
--
Gitblit v1.9.1