Browse Source

add: 添加手持功能

master
yanps 6 months ago
parent
commit
a742539402
  1. 55
      acs/nladmin-system/nlsso-server/pom.xml
  2. 160
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java
  3. 58
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/ItemProtocol.java
  4. 67
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/PlcToAgvDeviceDriver.java
  5. 22
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/config/SwaggerConfig.java
  6. 3
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java
  7. 2
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneServiceImpl.java
  8. 29
      acs/nladmin-ui/src/views/acs/device/driver/plc_to_agv.vue
  9. 12
      acs/nladmin-ui/src/views/system/monitor/device/index.vue
  10. 1
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/region/RegionEnum.java
  11. 50
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
  12. 38
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/controller/HandheldController.java
  13. 21
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/HandheldService.java
  14. 112
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/impl/HandheldServiceImpl.java
  15. 22
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/sorting/service/impl/SortingServiceImpl.java
  16. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml
  17. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java
  18. 19
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java
  19. 60
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java
  20. 7
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java
  21. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/core/TaskStatus.java
  22. 17
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/EmptyCageTask.java
  23. 166
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/MtTask.java
  24. 172
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/RackTask.java
  25. 2
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingCNTTask.java
  26. 9
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingSMTTask.java
  27. 47
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingTwoCNTTask.java

55
acs/nladmin-system/nlsso-server/pom.xml

@ -22,10 +22,10 @@
<druid.version>1.1.22</druid.version>
<mapstruct.version>1.2.0.Final</mapstruct.version>
<sa-token.version>1.31.0</sa-token.version>
<hutool.version>5.7.14</hutool.version>
<hutool.version>5.8.22</hutool.version>
<jjwt.version>0.11.1</jjwt.version>
<lucene.version>8.2.0</lucene.version>
<!-- <lucene.version>7.6.0</lucene.version>-->
<!-- <lucene.version>7.6.0</lucene.version>-->
<!-- oshi监控需要指定jna版本, 问题详见 https://github.com/oshi/oshi/issues/1040 -->
<jna.version>5.9.0</jna.version>
<configuration.version>1.9</configuration.version>
@ -48,10 +48,15 @@
<dependency>
<groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-spring-boot-starter-adapter-webserver</artifactId>
<version>1.1.6</version>
<version>1.1.6.1</version>
</dependency>
<!-- Lucence核心包 -->
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>tlog-all-spring-boot-starter</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
@ -88,11 +93,11 @@
<!-- 日志链路追踪 https://tlog.yomahub.com/pages/f62a84/#%E5%90%8C%E6%AD%A5%E6%97%A5%E5%BF%97-->
<dependency>
<!--<dependency>
<groupId>com.yomahub</groupId>
<artifactId>tlog-all-spring-boot-starter</artifactId>
<version>1.5.0</version>
</dependency>
</dependency>-->
<!-- 获取系统信息 -->
<dependency>
@ -184,7 +189,7 @@
</dependency>
<!-- Swagger UI 相关 -->
<dependency>
<!--<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
@ -208,12 +213,12 @@
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.21</version>
</dependency>
<dependency>
</dependency>-->
<!--<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.21</version>
</dependency>
</dependency>-->
<!--Mysql依赖包-->
@ -439,7 +444,7 @@
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.50</version>
<version>1.54</version>
</dependency>
<!--导出CSV相关-->
@ -449,6 +454,36 @@
<version>${commons-csv.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.22</version>
</dependency>
<!--<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.12.0</version>
</dependency>-->
</dependencies>
<build>

160
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java

@ -1,5 +1,6 @@
package org.nl.acs.device_driver.basedriver.agv.ndcone;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@ -41,6 +42,8 @@ import org.nl.system.service.param.ISysParamService;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -155,19 +158,6 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
return;
}
device_code = deviceService.queryDeviceCodeByAddress(agvaddr);
/*if (agvaddr != 0) {
old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr);
if (StrUtil.contains(old_device_code, "-")) {
String[] point = old_device_code.split("-");
device_code = point[0];
} else if (StrUtil.contains(old_device_code, ".")) {
String[] point = old_device_code.split("\\.");
device_code = point[0];
emptyNum = point[1];
} else {
device_code = old_device_code;
}
}*/
if (agvaddr != 0) {
old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr);
@ -188,20 +178,34 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
}
if (device.getDeviceDriver() instanceof PlcToAgvDeviceDriver) {
PlcToAgvDeviceDriver plcToAgvDeviceDriver = (PlcToAgvDeviceDriver) device.getDeviceDriver();
Map<String, Object> extraValue = plcToAgvDeviceDriver.getExtraValue();
if (plcToAgvDeviceDriver.getAGVEnable() != 0) {
if (ObjectUtil.isNotEmpty(plcToAgvDeviceDriver.getExtraValue().get("upper_lower_levels"))) {
Object plc_to_agv = plcToAgvDeviceDriver.getExtraValue().get("upper_lower_levels");
if ("1".equals(plc_to_agv)) {
if (device_code.contains("_01")) {
if (plcToAgvDeviceDriver.getAGVSetOutUpperAllowed() == 1) {
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
}
} else if (device_code.contains("_02")) {
Object plc_to_agv = extraValue.get("upper_lower_levels");
if (ObjectUtil.isNotNull(plc_to_agv) && "1".equals(plc_to_agv)) {
plcToAgvDeviceDriver.writing("AGVSetOutReqUpper", "1");
if (plcToAgvDeviceDriver.getAGVSetOutUpperAllowed() == 1) {
plcToAgvDeviceDriver.writing("AGVInOP", "1");
data = feedBackStatus(data, index, 1, inst, task, 2, false);
}
}
} else if (ObjectUtil.isNotEmpty(extraValue.get("upper_lower_levels"))) {
Object plc_to_agv = extraValue.get("upper_lower_levels");
if ("1".equals(plc_to_agv)) {
plcToAgvDeviceDriver.writing("AGVSetOutReqUpper", "1");
if (plcToAgvDeviceDriver.getAGVSetOutUpperAllowed() == 1) {
plcToAgvDeviceDriver.writing("AGVInOP", "1");
data = feedBackStatus(data, index, 1, inst, task, 2, false);
}
} else if ("2".equals(plc_to_agv)) {
plcToAgvDeviceDriver.writing("AGVSetOutReqLower", "1");
if (plcToAgvDeviceDriver.getAGVSetOutLowerAllowed() == 1) {
data = feedBackStatus(data, index, 1, inst, task, 2, false);
plcToAgvDeviceDriver.writing("AGVInOP", "1");
data = feedBackStatus(data, index, 1, inst, task, 2, false);
}
}
} else {
@ -252,14 +256,49 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
}
if (device.getDeviceDriver() instanceof PlcToAgvDeviceDriver) {
PlcToAgvDeviceDriver plcToAgvDeviceDriver = (PlcToAgvDeviceDriver) device.getDeviceDriver();
if (device_code.contains("_01")) {
try {
plcToAgvDeviceDriver.writing("AGVInOP", "0");
plcToAgvDeviceDriver.writing("AGVSetOutReqUpper", "0");
plcToAgvDeviceDriver.writing("AGVSetOutReqLower", "0");
List list = new ArrayList<>();
Map map = new HashMap();
map.put("code", "AGVInOP");
map.put("value", "0");
Map map1 = new HashMap();
map1.put("code", "AGVSetOutReqUpper");
map1.put("value", "0");
Map map2 = new HashMap();
map2.put("code", "AGVSetOutReqLower");
map2.put("value", "0");
list.add(map);
list.add(map1);
list.add(map2);
plcToAgvDeviceDriver.writing(list);
} catch (Exception e) {
log.info("下发AGVInOP信号:{}失败", "0");
}
data = feedBackStatus(data, index, 2, inst, task, 2, false);
} else if (device_code.contains("_02")) {
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
} else {
try {
List list = new ArrayList<>();
Map map = new HashMap();
map.put("code", "AGVInOP");
map.put("value", "0");
Map map1 = new HashMap();
map1.put("code", "AGVSetOutReqUpper");
map1.put("value", "0");
Map map2 = new HashMap();
map2.put("code", "AGVSetOutReqLower");
map2.put("value", "0");
list.add(map);
list.add(map1);
list.add(map2);
plcToAgvDeviceDriver.writing(list);
} catch (Exception e) {
log.info("下发AGVInOP信号:{}失败", "0");
}
data = feedBackStatus(data, index, 2, inst, task, 2, false);
}
} else if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
try {
data = feedBackStatus(data, index, 2, inst, task, 1, false);
@ -300,19 +339,33 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
if (device.getDeviceDriver() instanceof PlcToAgvDeviceDriver) {
PlcToAgvDeviceDriver plcToAgvDeviceDriver = (PlcToAgvDeviceDriver) device.getDeviceDriver();
if (plcToAgvDeviceDriver.getAGVEnable() != 0) {
if (ObjectUtil.isNotEmpty(plcToAgvDeviceDriver.getExtraValue().get("upper_lower_levels"))) {
Object plc_to_agv = plcToAgvDeviceDriver.getExtraValue().get("upper_lower_levels");
if ("1".equals(plc_to_agv)) {
Map<String, Object> extraValue = plcToAgvDeviceDriver.getExtraValue();
if (device_code.contains("_01")) {
Object plc_to_agv = extraValue.get("upper_lower_levels");
if (ObjectUtil.isNotNull(plc_to_agv) && "1".equals(plc_to_agv)) {
plcToAgvDeviceDriver.writing("AGVSetInReqUpper", "1");
if (plcToAgvDeviceDriver.getAGVSetInUpperAllowed() == 1) {
plcToAgvDeviceDriver.writing("AGVInOP", "1");
data = feedBackStatus(data, index, 3, inst, task, 2, false);
}
}
} else if (device_code.contains("_02")) {
if (plcToAgvDeviceDriver.getAGVSetInUpperAllowed() == 1) {
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
}
} else if (ObjectUtil.isNotEmpty(extraValue.get("upper_lower_levels"))) {
Object plc_to_agv = extraValue.get("upper_lower_levels");
if ("1".equals(plc_to_agv)) {
plcToAgvDeviceDriver.writing("AGVSetInReqUpper", "1");
if (plcToAgvDeviceDriver.getAGVSetInUpperAllowed() == 1) {
plcToAgvDeviceDriver.writing("AGVInOP", "1");
data = feedBackStatus(data, index, 3, inst, task, 2, false);
}
} else if ("2".equals(plc_to_agv)) {
plcToAgvDeviceDriver.writing("AGVSetInReqLower", "1");
if (plcToAgvDeviceDriver.getAGVSetInLowerAllowed() == 1) {
data = feedBackStatus(data, index, 3, inst, task, 2, false);
plcToAgvDeviceDriver.writing("AGVInOP", "1");
data = feedBackStatus(data, index, 3, inst, task, 2, false);
}
}
} else {
@ -347,20 +400,6 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
logServer.deviceExecuteLog(this.device_code, "", "", "agv地址参数有误,phase:" + phase);
return;
}
/*if (agvaddr != 0) {
old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr);
if (StrUtil.contains(old_device_code, "-")) {
String[] point = old_device_code.split("-");
device_code = point[0];
} else if (StrUtil.contains(old_device_code, ".")) {
String[] point = old_device_code.split("\\.");
device_code = point[0];
emptyNum = point[1];
} else {
device_code = old_device_code;
}
}*/
if (agvaddr != 0) {
old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr);
device_code = old_device_code;
@ -383,21 +422,56 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
transportOrder = "";
if (device.getDeviceDriver() instanceof PlcToAgvDeviceDriver) {
PlcToAgvDeviceDriver plcToAgvDeviceDriver = (PlcToAgvDeviceDriver) device.getDeviceDriver();
if (device_code.contains("_01")) {
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
} else if (device_code.contains("_02")) {
try {
plcToAgvDeviceDriver.writing("AGVInOP", "0");
plcToAgvDeviceDriver.writing("AGVSetInReqUpper", "0");
plcToAgvDeviceDriver.writing("AGVSetInReqLower", "0");
List list = new ArrayList<>();
Map map = new HashMap();
map.put("code", "AGVInOP");
map.put("value", "0");
Map map1 = new HashMap();
map1.put("code", "AGVSetInReqUpper");
map1.put("value", "0");
Map map2 = new HashMap();
map2.put("code", "AGVSetInReqLower");
map2.put("value", "0");
list.add(map);
list.add(map1);
list.add(map2);
plcToAgvDeviceDriver.writing(list);
} catch (Exception e) {
log.info("下发AGVInOP信号失败");
log.info("下发AGVInOP信号:{}失败", "0");
}
data = feedBackStatus(data, index, 4, inst, task, 2, false);
} else {
try {
List list = new ArrayList<>();
Map map = new HashMap();
map.put("code", "AGVInOP");
map.put("value", "0");
Map map1 = new HashMap();
map1.put("code", "AGVSetInReqUpper");
map1.put("value", "0");
Map map2 = new HashMap();
map2.put("code", "AGVSetInReqLower");
map2.put("value", "0");
list.add(map);
list.add(map1);
list.add(map2);
plcToAgvDeviceDriver.writing(list);
} catch (Exception e) {
log.info("下发AGVInOP信号:{}失败", "0");
}
data = feedBackStatus(data, index, 4, inst, task, 2, false);
}
} else if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
try {
StandardOrdinarySiteDeviceDriver standar = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver();
Map<String, Object> extraValue = standar.getDevice().getExtraValue();
boolean is_empty = false;
if (ObjectUtil.isNotEmpty(extraValue.get("is_empty"))) {
is_empty = extraValue.get("is_empty").equals("true") ? true : false;
is_empty = extraValue.get("is_empty").equals("true");
}
data = feedBackStatus(data, index, 4, inst, task, 1, is_empty);
} catch (Exception e) {

58
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/ItemProtocol.java

@ -22,6 +22,8 @@ public class ItemProtocol {
public static String item_AGVSetInReqUpper = "AGVSetInReqUpper";
public static String item_AGVSetOutReqUpper = "AGVSetOutReqUpper";
public static String item_AGVInOP = "AGVInOP";
public static String item_Heartbeat = "heartbeat";
public static String item_Heartbeat1 = "heartbeat1";
private PlcToAgvDeviceDriver driver;
@ -31,6 +33,10 @@ public class ItemProtocol {
this.driver = driver;
}
public short getHeartbeat() {
return this.getOpcShortValue(item_Heartbeat);
}
public int getAGVSetInLowerAllowed() {
return this.getOpcIntegerValue(item_AGVSetInLowerAllowed);
}
@ -51,6 +57,26 @@ public class ItemProtocol {
return this.getOpcIntegerValue(item_AGVEnable);
}
public int getAGVInOP() {
return this.getOpcIntegerValue(item_AGVInOP);
}
public int getAGVSetInReqUpper() {
return this.getOpcIntegerValue(item_AGVSetInReqUpper);
}
public int getAGVSetInReqLower() {
return this.getOpcIntegerValue(item_AGVSetInReqLower);
}
public int getAGVSetOutReqUpper() {
return this.getOpcIntegerValue(item_AGVSetOutReqUpper);
}
public int getAGVSetOutReqLower() {
return this.getOpcIntegerValue(item_AGVSetOutReqLower);
}
//是否有货
public int hasGoods(int move) {
@ -59,11 +85,14 @@ public class ItemProtocol {
Boolean isonline;
int last_value = 0;
long date = 0;
private static final long STABILITY_DURATION_MS = 3000; // 稳定时间 3 秒
public int getOpcIntegerValue(String protocol) {
getExends();
Integer value = this.driver.getIntegeregerValue(protocol);
if (value == null) {
// log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!");
setIsonline(false);
} else {
setIsonline(true);
@ -73,9 +102,23 @@ public class ItemProtocol {
}
public void getExends(){
public Short getOpcShortValue(String protocol) {
getExends();
Short value = this.driver.getShortValue(protocol);
if (value == null) {
setIsonline(false);
} else {
setIsonline(true);
return value;
}
return 0;
}
public void getExends() {
Object upper_lower_levels = this.driver.getExtraValue().get("upper_lower_levels");
if(ObjectUtil.isNotEmpty(upper_lower_levels)){
if (ObjectUtil.isNotEmpty(upper_lower_levels)) {
msg = upper_lower_levels;
}
}
@ -83,23 +126,24 @@ public class ItemProtocol {
public static List<ItemDto> getReadableItemDtos() {
ArrayList list = new ArrayList();
if(ObjectUtil.isNotEmpty(msg) && "1".equals(msg)){
if (ObjectUtil.isNotEmpty(msg) && "1".equals(msg)) {
list.add(new ItemDto(item_AGVSetInUpperAllowed, "上层允许上料", "DB600.B3"));
list.add(new ItemDto(item_AGVSetOutUpperAllowed, "上层允许下料", "DB600.B4"));
}else if(ObjectUtil.isNotEmpty(msg) && "2".equals(msg)){
} else if (ObjectUtil.isNotEmpty(msg) && "2".equals(msg)) {
list.add(new ItemDto(item_AGVSetInLowerAllowed, "下层允许上料", "DB600.B0"));
list.add(new ItemDto(item_AGVSetOutLowerAllowed, "下层允许下料", "DB600.B2"));
}
list.add(new ItemDto(item_AGVEnable, "agv动作使能", "DB600.D6"));
list.add(new ItemDto(item_Heartbeat, "心跳", "DB600.D6"));
return list;
}
public static List<ItemDto> getWriteableItemDtos() {
ArrayList list = new ArrayList();
if(ObjectUtil.isNotEmpty(msg) && "1".equals(msg)){
if (ObjectUtil.isNotEmpty(msg) && "1".equals(msg)) {
list.add(new ItemDto(item_AGVSetInReqUpper, "上层上料请求", "DB600.B3"));
list.add(new ItemDto(item_AGVSetOutReqUpper, "上层下料请求", "DB600.B4"));
}else if(ObjectUtil.isNotEmpty(msg) && "2".equals(msg)){
} else if (ObjectUtil.isNotEmpty(msg) && "2".equals(msg)) {
list.add(new ItemDto(item_AGVSetInReqLower, "下层上料请求", "DB600.B0"));
list.add(new ItemDto(item_AGVSetOutReqLower, "下层下料请求", "DB600.B2"));
}

67
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/plc_to_agv/PlcToAgvDeviceDriver.java

@ -36,6 +36,7 @@ import org.nl.system.service.lucene.LuceneExecuteLogService;
import org.nl.system.service.lucene.dto.LuceneLogDto;
import org.openscada.opc.lib.da.Server;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import java.util.*;
@ -69,9 +70,24 @@ public class PlcToAgvDeviceDriver extends AbstractOpcDeviceDriver implements Dev
int AGVSetOutUpperAllowed = 0;
int AGVEnable = 0;
int AGVSetInReqUpper = 0;
int AGVSetInReqLower = 0;
int AGVSetOutReqUpper = 0;
int AGVSetOutReqLower = 0;
int AGVInOP = 0;
Boolean flag = false;
String device_code;
String writing_heartbeat = "0";
private long STABILITY_DURATION_MS = 8000;
int heartbeat = 0;
int last_heartbeat = 0;
private Date instruction_require_time = new Date();
@Override
public Device getDevice() {
return this.device;
@ -88,15 +104,25 @@ public class PlcToAgvDeviceDriver extends AbstractOpcDeviceDriver implements Dev
AGVSetInUpperAllowed = this.itemProtocol.getAGVSetInUpperAllowed();
AGVSetOutUpperAllowed = this.itemProtocol.getAGVSetOutUpperAllowed();
AGVEnable = this.itemProtocol.getAGVEnable();
AGVInOP = this.itemProtocol.getAGVInOP();
AGVSetInReqUpper = this.itemProtocol.getAGVSetInReqUpper();
AGVSetInReqLower = this.itemProtocol.getAGVSetInReqLower();
AGVSetOutReqUpper = this.itemProtocol.getAGVSetOutReqUpper();
AGVSetOutReqLower = this.itemProtocol.getAGVSetOutReqLower();
heartbeat = this.itemProtocol.getHeartbeat();
if (heartbeat == 1) {
writing("heartbeat", writing_heartbeat);
}
} catch (Exception var17) {
log.info("读取信号失败,失败原因:{}", var17.getMessage());
throw new BadRequestException("读取信号失败,失败原因:" + var17.getMessage());
}
last_heartbeat = heartbeat;
}
/**
* 多个信号一起下发电气
*
@ -131,6 +157,7 @@ public class PlcToAgvDeviceDriver extends AbstractOpcDeviceDriver implements Dev
itemMap.put(to_param, Integer.parseInt(value));
try {
Thread.sleep(1000);
this.checkcontrol(itemMap);
} catch (Exception e) {
e.printStackTrace();
@ -143,6 +170,36 @@ public class PlcToAgvDeviceDriver extends AbstractOpcDeviceDriver implements Dev
luceneExecuteLogService.deviceExecuteLog(logDto);
}
public void writing(List list) {
Map<String, Object> itemMap = new HashMap<String, Object>();
for (int i = 0; i < list.size(); i++) {
Object ob = list.get(i);
JSONObject json = (JSONObject) JSONObject.toJSON(ob);
if (!StrUtil.isEmpty(json.getString("value"))) {
String to_param = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code()
+ "." + json.getString("code");
itemMap.put(to_param, json.getString("value"));
}
}
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(device_code)
.content("下发电气信号:" + itemMap)
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
try {
this.checkcontrol(itemMap);
} catch (Exception e) {
e.printStackTrace();
try {
this.checkcontrol(itemMap);
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public String getToParam() {
return this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + ".";
}
@ -172,6 +229,12 @@ public class PlcToAgvDeviceDriver extends AbstractOpcDeviceDriver implements Dev
@Override
public JSONObject getDeviceStatusName() {
JSONObject jo = new JSONObject();
jo.put("signals_are_allowed", AGVSetInLowerAllowed == 1 ? "下层允许上料请求" : AGVSetOutLowerAllowed == 1 ? "下层允许下料请求"
: AGVSetInUpperAllowed == 1 ? "上层允许上料请求" : AGVSetOutUpperAllowed == 1 ? "上层允许下料请求" : "未允许");
jo.put("agv_enable", AGVEnable == 1 ? "启用" : "禁用");
jo.put("request_a_signal",AGVSetInReqUpper == 1 ? "上层上料请求" : AGVSetInReqLower == 1 ? "下层上料请求"
: AGVSetOutReqUpper == 1 ? "上层下料请求" : AGVSetOutReqLower == 1 ? "下层下料请求" : "未请求");
jo.put("agv_inop", AGVInOP == 1 ? "AGV动作中" : "AGV空闲");
return jo;
}

22
acs/nladmin-system/nlsso-server/src/main/java/org/nl/config/SwaggerConfig.java

@ -1,5 +1,4 @@
/*
* Copyright 2019-2020 Zheng Jie
/* * Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -11,8 +10,10 @@
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
* limitations under the License.*//*
package org.nl.config;
import com.fasterxml.classmate.TypeResolver;
@ -40,11 +41,14 @@ import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
import static springfox.documentation.schema.AlternateTypeRules.newRule;
*/
/**
* api页面 /doc.html
* @author Zheng Jie
* @date 2018-11-23
*/
* @date 2018-11-23*//*
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@ -125,9 +129,10 @@ public class SwaggerConfig {
}
}
/**
*
* 将Pageable转换展示在swagger中
*/
@Configuration
class SwaggerDataConfig {
@ -159,3 +164,4 @@ class SwaggerDataConfig {
private List<String> sort;
}
}
*/

3
acs/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java

@ -22,7 +22,9 @@ import org.nl.system.service.param.ISysParamService;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* 自动创建指令
@ -40,6 +42,7 @@ public class AutoCreateInst {
RouteLineService routeLineService = SpringContextHolder.getBean(RouteLineService.class);
ISysParamService acsConfigService = SpringContextHolder.getBean(ISysParamService.class);
List<TaskDto> list = taskserver.queryByStauts("0");
list = list.stream().sorted(Comparator.comparing(TaskDto::getPriority)).collect(Collectors.toList());
DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
for (int i = 0; i < list.size(); i++) {
TaskDto acsTask = list.get(i);

2
acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneServiceImpl.java

@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.NumericDocValuesField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
@ -67,6 +68,7 @@ public class LuceneServiceImpl implements LuceneService {
} else {
endDate = getDate(endDate);
}
TermRangeQuery termRangeQuery = new TermRangeQuery("logTime", new BytesRef(startDate), new BytesRef(endDate), true, true);
booleanQueryBuilder.add(termRangeQuery, BooleanClause.Occur.MUST);
if (whereJson.get("device_code") != null){

29
acs/nladmin-ui/src/views/acs/device/driver/plc_to_agv.vue

@ -71,17 +71,34 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="忽视取货校验" label-width="150px">
<el-switch v-model="form.ignore_pickup_check" />
<el-form-item label="取货校验" label-width="150px">
<el-switch v-model="form.is_wait" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="取货完成校验" label-width="150px">
<el-switch v-model="form.is_wait_finish" />
</el-form-item>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="忽视放货校验" label-width="150px">
<el-switch v-model="form.ignore_release_check" />
</el-form-item>
</el-col> -->
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="放货校验" label-width="150px">
<el-switch v-model="form.is_releases" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="放货完成校验" label-width="150px">
<el-switch v-model="form.is_releases_finish" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="呼叫">
@ -330,7 +347,11 @@ export default {
is_pickup: true,
is_release: true,
link_device_code: [],
address: ''
address: '',
is_wait: true,
is_wait_finish: true,
is_releases: true,
is_releases_finish: true
},
rules: {},
levels: [

12
acs/nladmin-ui/src/views/system/monitor/device/index.vue

@ -597,6 +597,18 @@ export default {
} else if (val === 'task_id') {
const obj = { name: '任务号', value: data[val] }
this.arr.push(obj)
} else if (val === 'signals_are_allowed') {
const obj = { name: '允许信号', value: data[val] }
this.arr.push(obj)
} else if (val === 'agv_enable') {
const obj = { name: '动作使能', value: data[val] }
this.arr.push(obj)
} else if (val === 'request_a_signal') {
const obj = { name: '请求信号', value: data[val] }
this.arr.push(obj)
} else if (val === 'agv_inop') {
const obj = { name: '工位内', value: data[val] }
this.arr.push(obj)
}
}
}

1
lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/enums/region/RegionEnum.java

@ -11,6 +11,7 @@ public enum RegionEnum {
TRUBEND_SHELVES_3_1_1("TruBend 7036货架03-01-01","111-07"),
ZDFJ("分拣工序","111-08"),
DDLK("堆叠笼框工序","111-20"),
NBJG("内部加工区","111-10"),
;
private final String region_name;
private final String region_code;

50
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java

@ -400,8 +400,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONObject json = new JSONObject();
json.put("vehicle_code", schBaseTask.getVehicle_code());
json.put("status", status);
String point_code2 = schBaseTask.getPoint_code2();
if (point_code2.contains("_0")) {
point_code2 = point_code2.substring(0, point_code2.length() - 3);
}
String task_code = schBaseTask.getTask_code();
String substring = task_code.substring(task_code.length() - 1);
if ("A".equals(substring) || "B".equals(substring)) {
task_code = task_code.substring(0, task_code.length() - 1);
}
json.put("device_code", schBaseTask.getPoint_code2());
json.put("task_code", schBaseTask.getTask_code());
json.put("task_code", task_code);
AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json);
}
}
@ -448,8 +457,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONObject json = new JSONObject();
json.put("vehicle_code", vehicle_code);
json.put("status", status);
json.put("device_code", schBaseTask.getPoint_code1());
json.put("task_code", schBaseTask.getTask_code());
String point_code1 = schBaseTask.getPoint_code1();
if (point_code1.contains("_0")) {
point_code1 = point_code1.substring(0, point_code1.length() - 3);
}
json.put("device_code", point_code1);
String task_code = schBaseTask.getTask_code();
String substring = task_code.substring(task_code.length() - 1);
if ("A".equals(substring) || "B".equals(substring)) {
task_code = task_code.substring(0, task_code.length() - 1);
}
json.put("task_code", task_code);
AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json);
}
}
@ -502,8 +520,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONObject json = new JSONObject();
json.put("vehicle_code", schBaseTask.getVehicle_code());
json.put("status", status);
json.put("device_code", schBaseTask.getPoint_code1());
json.put("task_code", schBaseTask.getTask_code());
String point_code1 = schBaseTask.getPoint_code1();
if (point_code1.contains("_0")) {
point_code1 = point_code1.substring(0, point_code1.length() - 3);
}
json.put("device_code", point_code1);
String task_code = schBaseTask.getTask_code();
String substring = task_code.substring(task_code.length() - 1);
if ("A".equals(substring) || "B".equals(substring)) {
task_code = task_code.substring(0, task_code.length() - 1);
}
json.put("task_code", task_code);
boolean flag = true;
AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json);
if (acsResponse.getStatus() != 200 || StringUtils.isNotEmpty(acsResponse.getErrMsg())) {
@ -525,8 +552,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
JSONObject json = new JSONObject();
json.put("vehicle_code", schBaseTask.getVehicle_code());
json.put("status", status);
json.put("device_code", schBaseTask.getPoint_code1());
json.put("task_code", schBaseTask.getTask_code());
String point_code2 = schBaseTask.getPoint_code2();
if (point_code2.contains("_0")) {
point_code2 = point_code2.substring(0, point_code2.length() - 3);
}
json.put("device_code", point_code2);
String task_code = schBaseTask.getTask_code();
String substring = task_code.substring(task_code.length() - 1);
if ("A".equals(substring) || "B".equals(substring)) {
task_code = task_code.substring(0, task_code.length() - 1);
}
json.put("task_code", task_code);
boolean flag = true;
AcsResponse acsResponse = sortingService.feedAgvTaskStatus(json);
if (acsResponse.getStatus() != 200 || StringUtils.isNotEmpty(acsResponse.getErrMsg())) {

38
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/controller/HandheldController.java

@ -28,9 +28,9 @@ public class HandheldController {
@Autowired
private HandheldService handheldService;
@PostMapping("/task")
@Log("手持空料笼入库")
@ApiOperation("手持空料笼入库")
@PostMapping("/cageFrame")
@Log("外协区空笼框送回")
@ApiOperation("外协区空笼框送回")
@SaIgnore
public ResponseEntity<Object> createEmptyCageStorageTask(@RequestBody JSONObject param) {
handheldService.emptyCageStorageTask(param);
@ -38,7 +38,27 @@ public class HandheldController {
}
@PostMapping("/emptyVehicle")
@PostMapping("/rack")
@Log("外协区空料架送回")
@ApiOperation("外协区空料架送回")
@SaIgnore
public ResponseEntity<Object> applyRackSendItBask(@RequestBody JSONObject param) {
handheldService.rackSendItBask(param);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/transhipment")
@Log("物料转运")
@ApiOperation("物料转运")
@SaIgnore
public ResponseEntity<Object> applyMaterialTransfer(@RequestBody JSONObject param) {
handheldService.materialTransfer(param);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/callEmptyRack")
@Log("手持呼叫空料笼")
@ApiOperation("手持呼叫空料笼")
@SaIgnore
@ -65,8 +85,16 @@ public class HandheldController {
return new ResponseEntity<>(handheldService.pointLock(param), HttpStatus.OK);
}
@PostMapping("/pointStatus")
@Log("修改点位货物状态")
@ApiOperation("修改点位货物状态")
@SaIgnore
public ResponseEntity<Object> applyPointStatus(@RequestBody JSONObject param) {
return new ResponseEntity<>(handheldService.pointStatus(param), HttpStatus.OK);
}
@PostMapping("/sourehouse")
@PostMapping("/storehouse")
@Log("补空框")
@ApiOperation("补空框")
@SaIgnore

21
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/HandheldService.java

@ -9,7 +9,7 @@ public interface HandheldService {
/**
* 手持创建空料笼入库任务
* 外协区空料笼送回
* @param param
* @return
*/
@ -40,4 +40,23 @@ public interface HandheldService {
* @param param
*/
void toStorehouse(JSONObject param);
/**
* 外协区空料架送回
* @param param
*/
void rackSendItBask(JSONObject param);
/**
* 物料转运
* @param param
*/
void materialTransfer(JSONObject param);
/**
* 修改点位货物状态
* @param param
* @return
*/
Object pointStatus(JSONObject param);
}

112
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/handheld/service/impl/HandheldServiceImpl.java

@ -8,8 +8,12 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import nl.basjes.shaded.org.springframework.util.Assert;
import org.nl.common.enums.VehicleTypeEnum;
import org.nl.common.enums.region.RegionEnum;
import org.nl.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.database.vehicle.service.IMdBaseVehicleService;
import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle;
import org.nl.wms.ext.handheld.service.HandheldService;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
@ -42,15 +46,19 @@ public class HandheldServiceImpl implements HandheldService {
private ISchBaseVehiclematerialgroupService iSchBaseVehiclematerialgroupService;
@Autowired
private ISchBaseTaskService iSchBaseTaskService;
@Autowired
private IMdBaseVehicleService iMdBaseVehicleService;
@Override
public void emptyCageStorageTask(JSONObject param) {
Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_list")
, param.getString("vehicle_type")}, "参数不能为空!");
}, "参数不能为空!");
JSONArray vehicle_list = param.getJSONArray("vehicle_list");
String device_code = param.getString("device_code");
String vehicle_type = param.getString("vehicle_type");
if (vehicle_list.size() != 2 && vehicle_list.size() != 4) {
throw new BadRequestException("笼框数量不匹配,请确认笼框数量后重新扫码!");
}
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code);
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!");
AbstractTask connectorTask = taskFactory.getTask("EMPTYCAGETask");
@ -61,44 +69,33 @@ public class HandheldServiceImpl implements HandheldService {
jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
jo.put("vehicle_qty", vehicle_list.size());
jo.put("vehicle_code", vehicle_list);
jo.put("vehicle_type", vehicle_type);
jo.put("ext_data", param);
connectorTask.apply(jo);
}
@Override
public Object applyEmptyVehicle(JSONObject param) {
/* Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_type")}, "参数不能为空!");
String device_code = param.getString("device_code");
String vehicle_type = param.getString("vehicle_type");
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code);
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!");
AbstractTask connectorTask = taskFactory.getTask("CALLEMPTYTask");
// 准备参数:设备编码
JSONObject jo = new JSONObject();
jo.put("device_code", device_code);
jo.put("config_code", "CALLEMPTYTask");
jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
jo.put("vehicle_type", vehicle_type);
jo.put("ext_data", param);
connectorTask.apply(jo);*/
return null;
}
@Override
public void cageBlankingTask(JSONObject param) {
Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_code")
, param.getString("material_qty"), param.getString("region_code"), param.getString("order_code")}, "参数不能为空!");
Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("region_code"),}, "当前点位或目的地不能为空!");
if (!param.getString("region_code").equals(RegionEnum.NBJG.getRegion_code())) {
Assert.noNullElements(new Object[]{param.getString("vehicle_code"), param.getString("material_code")
, param.getString("material_qty"), param.getString("order_code")}, "参数不能为空!");
}
String device_code = param.getString("device_code");
String vehicle_code = param.getString("vehicle_code");
String material_qty = param.getString("material_qty");
String material_code = param.getString("material_code");
String region_code = param.getString("region_code");
String order_code = param.getString("order_id");
String order_code = param.getString("order_code");
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code);
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!");
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
.eq(SchBasePoint::getPoint_code, device_code)
.set(SchBasePoint::getIs_lock,true));
.set(SchBasePoint::getIs_lock, true));
AbstractTask connectorTask = taskFactory.getTask("BLANKINGTask");
// 准备参数:设备编码
JSONObject jo = new JSONObject();
@ -114,6 +111,7 @@ public class HandheldServiceImpl implements HandheldService {
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = new SchBaseVehiclematerialgroup();
schBaseVehiclematerialgroup.setVehicle_code(vehicle_code);
schBaseVehiclematerialgroup.setMaterial_qty(Integer.parseInt(material_qty));
schBaseVehiclematerialgroup.setMaterial_code(material_code);
schBaseVehiclematerialgroup.setOrder_code(order_code);
iSchBaseVehiclematerialgroupService.create(schBaseVehiclematerialgroup);
}
@ -126,14 +124,20 @@ public class HandheldServiceImpl implements HandheldService {
SchBaseRegion schBaseRegion = iSchBaseRegionService.getOne(Wrappers.lambdaQuery(SchBaseRegion.class)
.eq(SchBaseRegion::getRegion_code, region_code));
if (ObjectUtil.isEmpty(schBaseRegion)) throw new BadRequestException("该区域不存在!");
List<String> byRegionCode = iSchBasePointService.getByRegionCode(region_code);
List<String> pointCodes = iSchBasePointService.getByRegionCode(region_code);
boolean is_executing = iSchBaseTaskService.selectByPointCodeAndStatus(pointCodes);
if (is_executing) {
return "当前区域有任务正在执行,请等待任务执行完在锁定!";
}
iSchBaseTaskService.selectByPointCodeAndTaskStatus(pointCodes);
if (StrUtil.equals(status, "0")) {
iSchBasePointService.releasePoint(region_code);
iSchBaseTaskService.updateTaskStatusByPointCode(pointCodes);
} else if (StrUtil.equals(status, "1")) {
iSchBasePointService.lockPoint(region_code);
}
if(CollUtil.isNotEmpty(byRegionCode) && byRegionCode.size()>0){
return "当前区域已存在的任务有" + byRegionCode.size() + "个";
if (CollUtil.isNotEmpty(pointCodes) && pointCodes.size() > 0) {
return "当前区域已存在的任务有" + pointCodes.size() + "个";
}
return "操作成功";
}
@ -160,5 +164,65 @@ public class HandheldServiceImpl implements HandheldService {
connectorTask.apply(jo);
}
@Override
public void rackSendItBask(JSONObject param) {
Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_code")}, "参数不能为空!");
String vehicle_code = param.getString("vehicle_code");
String device_code = param.getString("device_code");
MdBaseVehicle mdBaseVehicle = iMdBaseVehicleService.selectByVehicleCode(vehicle_code);
if(ObjectUtil.isEmpty(mdBaseVehicle)) throw new BadRequestException("载具不存在!");
if(!mdBaseVehicle.getVehicle_type().equals(VehicleTypeEnum.RACKS_S04.getVehicleCode())
|| !mdBaseVehicle.getVehicle_type().equals(VehicleTypeEnum.RACKS_S06.getVehicleCode())){
throw new BadRequestException("不是料架,生成搬运任务失败!");
}
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code);
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!");
AbstractTask connectorTask = taskFactory.getTask("RACKTask");
// 准备参数:设备编码
JSONObject jo = new JSONObject();
jo.put("device_code", device_code);
jo.put("config_code", "RACKTask");
jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
jo.put("vehicle_code", vehicle_code);
jo.put("vehicle_type", mdBaseVehicle.getVehicle_type());
jo.put("ext_data", param);
connectorTask.apply(jo);
}
@Override
public void materialTransfer(JSONObject param) {
Assert.noNullElements(new Object[]{param.getString("device_code"), param.getString("vehicle_code")}, "参数不能为空!");
// String vehicle_code = param.getString("vehicle_code");
String device_code = param.getString("device_code");
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(device_code);
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!");
AbstractTask connectorTask = taskFactory.getTask("MTTask");
// 准备参数:设备编码
JSONObject jo = new JSONObject();
jo.put("device_code", device_code);
jo.put("config_code", "MTTask");
jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
/*jo.put("vehicle_code", vehicle_code);
jo.put("vehicle_type", mdBaseVehicle.getVehicle_type());*/
jo.put("ext_data", param);
connectorTask.apply(jo);
}
@Override
public Object pointStatus(JSONObject param) {
Assert.noNullElements(new Object[]{param.getString("point_code"),param.getString("point_status")}, "参数不能为空!");
String point_code = param.getString("point_code");
String point_status = param.getString("point_status");
SchBasePoint schBasePoint = iSchBasePointService.selectByPointCode(point_code);
if (ObjectUtil.isEmpty(schBasePoint)) throw new BadRequestException("设备点位不存在!");
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
.eq(SchBasePoint::getPoint_code,point_code)
.set(SchBasePoint::getPoint_status,point_status)
.set(SchBasePoint::getIs_lock,false)
.set(SchBasePoint::getVehicle_code,null)
);
return null;
}
}

22
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/sorting/service/impl/SortingServiceImpl.java

@ -89,6 +89,7 @@ public class SortingServiceImpl implements SortingService {
.set("remark", task_code)
.eq("point_code", pointCode));
if (SortingEnum.TASK_TYPE_ONE.getValue().equals(task_type) && SortingEnum.IS_EMPTY.getValue().equals(is_empty)) {
taskParam.put("vehicle_type", "G01");
taskParam.put("config_code", "SortingCNTTask");
connectorTask.apply(taskParam);
//TODO:叫料
@ -107,17 +108,30 @@ public class SortingServiceImpl implements SortingService {
} else if ("1".equals(vehicle_type)) {
//TODO:呼叫两个空笼框
if (SortingEnum.TASK_TYPE_ONE.getValue().equals(task_type) && SortingEnum.IS_EMPTY.getValue().equals(is_empty)) {
taskParam.put("device_code", pointCode + "_1");
taskParam.put("device_code", pointCode + "_01");
taskParam.put("task_seq","1");
taskParam.put("config_code", "SortingTwoCNTTask");
taskParam.put("task_code", task_code + "A");
connectorTask.apply(taskParam);
taskParam.put("device_code", pointCode + "_2");
taskParam.put("device_code", pointCode + "_02");
taskParam.put("task_seq","2");
taskParam.put("task_code", task_code + "B");
connectorTask.apply(taskParam);
//TODO:将两个笼框放到线边库
} else if (SortingEnum.TASK_TYPE_TWO.getValue().equals(task_type) && SortingEnum.NOT_EMPTY.getValue().equals(is_empty)) {
if (StrUtil.isEmpty(jsonObject.getString("vehicle_code2"))) {
return MapOf.of("status", 400, "msg", "第二个笼框载具号未传递!");
}
taskParam.put("config_code", "SortingSMTTask");
taskParam.put("device_code", pointCode + "_1");
taskParam.put("task_seq","1");
taskParam.put("vehicle_code", jsonObject.getString("vehicle_code2"));
taskParam.put("device_code", pointCode + "_02");
taskParam.put("task_code", task_code + "B");
connectorTask.apply(taskParam);
taskParam.put("device_code", pointCode + "_2");
taskParam.put("vehicle_code", vehicle_code);
taskParam.put("task_seq","2");
taskParam.put("device_code", pointCode + "_01");
taskParam.put("task_code", task_code + "A");
connectorTask.apply(taskParam);
}
}

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml

@ -54,7 +54,5 @@
sch_base_point sbp
where
sbp.region_code = #{region_code}
and sbp.is_lock = true
and sbp.is_used = true
</select>
</mapper>

3
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java

@ -461,8 +461,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Override
public List<String> getByRegionCode(String region_code) {
List<String> list = pointMapper.selectByRegionCode(region_code);
return list;
return pointMapper.selectByRegionCode(region_code);
}
@Override

19
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java

@ -101,4 +101,23 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
void operation(Map<String, Object> param);
SchBaseTask getByCode(String taskCode);
/**
* 根据设备点位查询是否有执行中的任务
* @param pointCodes
* @return
*/
boolean selectByPointCodeAndStatus(List<String> pointCodes);
/**
* 根据设备查询未执行的任务
* @param pointCodes
*/
boolean selectByPointCodeAndTaskStatus(List<String> pointCodes);
/**
* 根据设备修改任务状态
* @param pointCodes
*/
void updateTaskStatusByPointCode(List<String> pointCodes);
}

60
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java

@ -1,5 +1,6 @@
package org.nl.wms.sch.task.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
@ -9,6 +10,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
@ -261,4 +263,62 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
return this.getOne(lam);
}
@Override
public boolean selectByPointCodeAndStatus(List<String> pointCodes) {
for (String pointCode : pointCodes) {
List<SchBaseTask> schBaseTasks = schBaseTaskMapper.selectList(Wrappers.lambdaQuery(SchBaseTask.class)
.eq(SchBaseTask::getPoint_code1, pointCode)
.or()
.eq(SchBaseTask::getPoint_code2, pointCode)
.in(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()));
if (CollUtil.isNotEmpty(schBaseTasks) && schBaseTasks.size() > 0) {
return true;
}
}
return false;
}
@Override
public boolean selectByPointCodeAndTaskStatus(List<String> pointCodes) {
boolean flag = false;
for (String pointCode : pointCodes) {
List<SchBaseTask> schBaseTasks = schBaseTaskMapper.selectList(Wrappers.lambdaQuery(SchBaseTask.class)
.eq(SchBaseTask::getPoint_code1, pointCode)
.or()
.eq(SchBaseTask::getPoint_code2, pointCode)
.le(SchBaseTask::getTask_status, TaskStatus.ISSUED.getCode()));
if (CollUtil.isNotEmpty(schBaseTasks) && schBaseTasks.size() > 0) {
schBaseTasks.forEach(task -> {
update(Wrappers.lambdaUpdate(SchBaseTask.class)
.eq(SchBaseTask::getTask_code, task.getTask_code())
.set(SchBaseTask::getTask_status, TaskStatus.TIMEOUT.getCode())
.set(SchBaseTask::getHandle_status, task.getTask_status())
);
});
flag = true;
}
}
return flag;
}
@Override
public void updateTaskStatusByPointCode(List<String> pointCodes) {
for (String pointCode : pointCodes) {
List<SchBaseTask> schBaseTasks = schBaseTaskMapper.selectList(Wrappers.lambdaQuery(SchBaseTask.class)
.eq(SchBaseTask::getPoint_code1, pointCode)
.or()
.eq(SchBaseTask::getPoint_code2, pointCode)
.eq(SchBaseTask::getTask_status, TaskStatus.TIMEOUT.getCode()));
if (CollUtil.isNotEmpty(schBaseTasks) && schBaseTasks.size() > 0) {
schBaseTasks.forEach(task -> {
update(Wrappers.lambdaUpdate(SchBaseTask.class)
.eq(SchBaseTask::getTask_code, task.getTask_code())
.set(SchBaseTask::getTask_status, task.getHandle_status())
.set(SchBaseTask::getHandle_status, null)
);
});
}
}
}
}

7
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java

@ -105,8 +105,6 @@ public abstract class AbstractTask {
} else {
taskDto.setNext_device_code(task.getPoint_code2());
}
// taskDto.setStart_wait_code(task.getStart_wait_point());
// taskDto.setNext_wait_code(task.getNext_wait_point());
taskDto.setVehicle_code(task.getVehicle_code());
this.setTask(task.getConfig_code(), taskDto, task);
list.add(taskDto);
@ -127,7 +125,7 @@ public abstract class AbstractTask {
private AcsTaskDto setTask(String config_code, AcsTaskDto taskDto, SchBaseTask task) {
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, config_code));
taskDto.setPriority(taskConfig.getPriority());
taskDto.setPriority(StrUtil.isNotEmpty(task.getAcs_trace_id()) ? task.getAcs_trace_id() : taskConfig.getPriority());
taskDto.setTask_type(StrUtil.isNotEmpty(task.getTask_type()) ? task.getTask_type() : taskConfig.getTask_type());
taskDto.setAgv_task_type(taskConfig.getAcs_task_type());
taskDto.setRoute_plan_code(taskConfig.getRoute_plan_code());
@ -267,7 +265,7 @@ public abstract class AbstractTask {
return;
}
// 2、创建申请任务
task.setAcs_trace_id(requestNo);
//task.setAcs_trace_id(requestNo);
task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr());
task.setTask_code(StrUtil.isNotEmpty(param.getString("task_code")) ? task_code : IdUtil.getSnowflake(1, 1).nextIdStr());
task.setConfig_code(config_code);
@ -282,6 +280,7 @@ public abstract class AbstractTask {
task.setTask_type(StrUtil.isNotEmpty(param.getString("task_type")) ? param.getString("task_type") : taskConfig.getTask_type());
task.setWorkshop_code(taskConfig.getWorkshop_code());
task.setRemark(param.getString("remark"));
task.setAcs_trace_id(param.getString("task_seq"));
// 设置起/终点
this.setTaskPoint(taskConfig, task, apply_point_code);
task.setRequest_param(JSONObject.toJSONString(param.get("ext_data")));

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/core/TaskStatus.java

@ -7,7 +7,9 @@ public enum TaskStatus {
EXECUTING("4", "执行中", "执行中"),
FINISHED("5", "完成", "完成"),
CANCELED("6", "已取消", "已取消"),
UNFINISHED("7", "未完成", "未完成");
UNFINISHED("7", "未完成", "未完成"),
TIMEOUT("8", "暂停", "暂停"),
;
TaskStatus(String code, String name, String desc) {

17
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/EmptyCageTask.java

@ -11,6 +11,8 @@ import org.nl.common.enums.VehicleTypeEnum;
import org.nl.common.enums.region.RegionEnum;
import org.nl.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.database.vehicle.service.IMdBaseVehicleService;
import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.point.service.ISchBasePointService;
@ -50,6 +52,8 @@ public class EmptyCageTask extends AbstractTask {
private ISchBasePointService schBasePointService;
@Autowired
private ISchBaseVehiclematerialgroupService schBaseVehiclematerialgroupService;
@Autowired
private IMdBaseVehicleService iMdBaseVehicleService;
@Override
protected void create() throws BadRequestException {
@ -60,22 +64,23 @@ public class EmptyCageTask extends AbstractTask {
TaskUtils.setUpdateByAcs(task);
// 查询是空料笼还是,空料架
String vehicle_type = task.getVehicle_type();
/*String vehicle_code = task.getVehicle_code();
if(StrUtil.isNotEmpty(vehicle_code)){
String vehicle_code = task.getVehicle_code();
if (StrUtil.isNotEmpty(vehicle_code)) {
JSONArray json = JSONUtil.parseArray(vehicle_code);
String s = json.get(0, String.class);
}*/
MdBaseVehicle mdBaseVehicle = iMdBaseVehicleService.selectByVehicleCode(s);
vehicle_type = mdBaseVehicle.getVehicle_type();
}
SchBasePoint schBasePoint = null;
switch (vehicle_type) {
case "S04":
/*case "S04":
//空料架
schBasePoint = schBasePointService.selectByGroundPoint(null, GoodsEnum.OUT_OF_STOCK.getValue(), task.getVehicle_type(), 1);
break;
case "S06":
//空料架
schBasePoint = schBasePointService.selectByGroundPoint(null, GoodsEnum.OUT_OF_STOCK.getValue(), task.getVehicle_type(), 1);
break;
break;*/
case "R01":
//RO1空料容
schBasePoint = schBasePointService.selectByGroundPoint(RegionEnum.DDLK.getRegion_code(),

166
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/MtTask.java

@ -0,0 +1,166 @@
package org.nl.wms.sch.task_manage.task.tasks.handheld;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.nl.common.enums.GoodsEnum;
import org.nl.common.enums.region.RegionEnum;
import org.nl.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.database.vehicle.service.IMdBaseVehicleService;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author LENOVO
* 手持创建空料笼入库
*/
@Component("MTTask")
public class MtTask extends AbstractTask {
private static final String TASK_CONFIG_CODE = "MTTask";
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISysNoticeService noticeService;
@Autowired
private ISchBasePointService schBasePointService;
@Autowired
private ISchBaseVehiclematerialgroupService schBaseVehiclematerialgroupService;
@Autowired
private IMdBaseVehicleService iMdBaseVehicleService;
@Override
protected void create() throws BadRequestException {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
for (SchBaseTask task : tasks) {
String vehicle_type = task.getVehicle_type();
SchBasePoint schBasePoint = schBasePointService.selectByGroundPoint(RegionEnum.NBJG.getRegion_code(),
GoodsEnum.OUT_OF_STOCK.getValue(),null, 1);
if (ObjectUtil.isEmpty(schBasePoint)) {
task.setRemark("未找到所需点位!");
taskService.updateById(task);
// 消息通知
noticeService.createNotice("未找到所需点位!", TASK_CONFIG_CODE + task.getTask_code(),
NoticeTypeEnum.WARN.getCode());
continue;
}
// 设置终点并修改创建成功状态
task.setPoint_code2(schBasePoint.getPoint_code());
task.setVehicle_type(schBasePoint.getCan_vehicle_type());
task.setRemark("");
task.setTask_status(TaskStatus.CREATED.getCode());
TaskUtils.setUpdateByAcs(task);
taskService.updateById(task);
schBasePoint.setVehicles(task.getVehicle_code());
schBasePoint.setPoint_status(GoodsEnum.IN_STOCK.getValue());
schBasePoint.setIs_lock(true);
PointUtils.setUpdateByAcs(schBasePoint);
pointService.updateById(schBasePoint);
}
}
@Override
protected void updateStatus(String task_code, TaskStatus status) {
//TODO:完成任务的时候将int_task_code的清除
}
@Override
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_CONNECTOR);
}
@Override
public void cancel(String task_code) {
//TODO:取消任务的时候将int_task_code的清除
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_CONNECTOR);
}
@Override
protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) {
}
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String startPoint = taskObj.getPoint_code1();
SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint);
// 起点清空
if (ObjectUtil.isNotEmpty(schBasePoint)) {
PointUtils.updateByIngTaskCode(schBasePoint);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, startPoint)
.set(SchBasePoint::getIs_lock, false));
}
String point_code2 = taskObj.getPoint_code2();
SchBasePoint schBasePoint2 = pointService.selectByPointCode(point_code2);
if (ObjectUtil.isNotEmpty(schBasePoint2)) {
PointUtils.updateByIngTaskCode(schBasePoint2);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2)
.set(SchBasePoint::getIs_lock, false));
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String startPoint = taskObj.getPoint_code1();
SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint);
// 起点清空
if (ObjectUtil.isNotEmpty(schBasePoint)) {
PointUtils.updateByIngTaskCode(schBasePoint);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, startPoint)
.set(SchBasePoint::getIs_lock, false));
}
String point_code2 = taskObj.getPoint_code2();
SchBasePoint schBasePoint2 = pointService.selectByPointCode(point_code2);
if (ObjectUtil.isNotEmpty(schBasePoint2)) {
PointUtils.updateByIngTaskCode(schBasePoint2);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2)
.set(SchBasePoint::getIs_lock, false));
}
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
}

172
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/handheld/RackTask.java

@ -0,0 +1,172 @@
package org.nl.wms.sch.task_manage.task.tasks.handheld;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.nl.common.enums.GoodsEnum;
import org.nl.common.enums.VehicleTypeEnum;
import org.nl.common.enums.region.RegionEnum;
import org.nl.common.exception.BadRequestException;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.wms.database.vehicle.service.IMdBaseVehicleService;
import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle;
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.GeneralDefinition;
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author LENOVO
* 手持创建空料笼入库
*/
@Component("RACKTask")
public class RackTask extends AbstractTask {
private static final String TASK_CONFIG_CODE = "RACKTask";
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISysNoticeService noticeService;
@Autowired
private ISchBasePointService schBasePointService;
@Autowired
private ISchBaseVehiclematerialgroupService schBaseVehiclematerialgroupService;
@Autowired
private IMdBaseVehicleService iMdBaseVehicleService;
@Override
protected void create() throws BadRequestException {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
for (SchBaseTask task : tasks) {
String vehicle_type = task.getVehicle_type();
SchBasePoint schBasePoint = schBasePointService.selectByGroundPoint(null,
GoodsEnum.OUT_OF_STOCK.getValue(),vehicle_type, 1);
if (ObjectUtil.isEmpty(schBasePoint)) {
task.setRemark("未找到所需点位!");
taskService.updateById(task);
// 消息通知
noticeService.createNotice("未找到所需点位!", TASK_CONFIG_CODE + task.getTask_code(),
NoticeTypeEnum.WARN.getCode());
continue;
}
// 设置终点并修改创建成功状态
task.setPoint_code2(schBasePoint.getPoint_code());
task.setVehicle_type(schBasePoint.getCan_vehicle_type());
task.setRemark("");
task.setTask_status(TaskStatus.CREATED.getCode());
TaskUtils.setUpdateByAcs(task);
taskService.updateById(task);
schBasePoint.setVehicles(task.getVehicle_code());
schBasePoint.setPoint_status(GoodsEnum.IN_STOCK.getValue());
schBasePoint.setIs_lock(true);
PointUtils.setUpdateByAcs(schBasePoint);
pointService.updateById(schBasePoint);
}
}
@Override
protected void updateStatus(String task_code, TaskStatus status) {
//TODO:完成任务的时候将int_task_code的清除
}
@Override
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_CONNECTOR);
}
@Override
public void cancel(String task_code) {
//TODO:取消任务的时候将int_task_code的清除
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_CONNECTOR);
}
@Override
protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) {
}
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String startPoint = taskObj.getPoint_code1();
SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint);
// 起点清空
if (ObjectUtil.isNotEmpty(schBasePoint)) {
PointUtils.updateByIngTaskCode(schBasePoint);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, startPoint)
.set(SchBasePoint::getIs_lock, false));
}
String point_code2 = taskObj.getPoint_code2();
SchBasePoint schBasePoint2 = pointService.selectByPointCode(point_code2);
if (ObjectUtil.isNotEmpty(schBasePoint2)) {
PointUtils.updateByIngTaskCode(schBasePoint2);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2)
.set(SchBasePoint::getIs_lock, false));
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String startPoint = taskObj.getPoint_code1();
SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint);
// 起点清空
if (ObjectUtil.isNotEmpty(schBasePoint)) {
PointUtils.updateByIngTaskCode(schBasePoint);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, startPoint)
.set(SchBasePoint::getIs_lock, false));
}
String point_code2 = taskObj.getPoint_code2();
SchBasePoint schBasePoint2 = pointService.selectByPointCode(point_code2);
if (ObjectUtil.isNotEmpty(schBasePoint2)) {
PointUtils.updateByIngTaskCode(schBasePoint2);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2)
.set(SchBasePoint::getIs_lock, false));
}
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
}

2
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingCNTTask.java

@ -59,7 +59,7 @@ public class SortingCNTTask extends AbstractTask {
for (SchBaseTask task : tasks) {
TaskUtils.setUpdateByAcs(task);
// 找起点
SchBasePoint basePoint = schBasePointService.selectEmpVehicleByRegionCode(RegionEnum.ZDFJ.getRegion_code(), Vehicle_Type);
SchBasePoint basePoint = schBasePointService.selectEmpVehicleByRegionCode(RegionEnum.ZDFJ.getRegion_code(), task.getVehicle_type());
if (basePoint==null){
task.setRemark("未找到所需点位!");
taskService.updateById(task);

9
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingSMTTask.java

@ -1,5 +1,6 @@
package org.nl.wms.sch.task_manage.task.tasks.sorting;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@ -61,6 +62,7 @@ public class SortingSMTTask extends AbstractTask {
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
tasks.stream().sorted((task1, task2) -> Long.compare(getTime(task2.getCreate_time()), getTime(task1.getCreate_time())));
for (SchBaseTask task : tasks) {
TaskUtils.setUpdateByAcs(task);
// 找起点
@ -113,6 +115,13 @@ public class SortingSMTTask extends AbstractTask {
}
}
private Long getTime(String dateString){
String pattern = "yyyy-MM-dd HH:mm:ss";
java.util.Date date = DateUtil.parse(dateString, pattern);
long timestamp = date.getTime();
return timestamp;
}
@Override
protected void updateStatus(String task_code, TaskStatus status) {
//TODO:完成任务的时候将int_task_code的清除

47
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/sorting/SortingTwoCNTTask.java

@ -1,9 +1,12 @@
package org.nl.wms.sch.task_manage.task.tasks.sorting;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.unit.DataUnit;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.mysql.cj.util.TimeUtil;
import org.nl.common.enums.GoodsEnum;
import org.nl.common.enums.VehicleEnum;
import org.nl.common.enums.VehicleTypeEnum;
@ -26,6 +29,8 @@ import org.nl.wms.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
@ -54,8 +59,8 @@ public class SortingTwoCNTTask extends AbstractTask {
protected void create() throws BadRequestException {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
tasks.stream().sorted((task1, task2) -> Long.compare(getTime(task2.getCreate_time()), getTime(task1.getCreate_time())));
for (SchBaseTask task : tasks) {
TaskUtils.setUpdateByAcs(task);
// 找起点
SchBasePoint basePoint = schBasePointService.selectByEmptyCage(RegionEnum.DDLK.getRegion_code(),
VehicleTypeEnum.FRAME_R02.getVehicleCode(),GoodsEnum.EMPTY_PALLETS.getValue(),true,task);
@ -64,11 +69,37 @@ public class SortingTwoCNTTask extends AbstractTask {
taskService.updateById(task);
continue;
}
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",TaskStatus.CREATED.getCode())
.set("point_code1",basePoint.getPoint_code())
.set("vehicle_code",basePoint.getVehicle_code())
.eq("task_id",task.getTask_id()));
TaskUtils.setUpdateByAcs(task);
task.setTask_status(TaskStatus.CREATED.getCode());
task.setPoint_code1(basePoint.getPoint_code());
task.setVehicle_code(basePoint.getVehicle_code());
taskService.update(task);
schBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
.eq(SchBasePoint::getPoint_code,basePoint.getPoint_code())
.set(SchBasePoint::getIs_lock,true)
.set(SchBasePoint::getPoint_status,GoodsEnum.OUT_OF_STOCK.getValue()));
}
}
private Long getTime(String dateString){
String pattern = "yyyy-MM-dd HH:mm:ss";
java.util.Date date = DateUtil.parse(dateString, pattern);
long timestamp = date.getTime();
return timestamp;
}
private static int extractLastDigit(String value) {
if (value == null || value.isEmpty()) {
throw new IllegalArgumentException("Value is null or empty");
}
// 提取最后一位字符
char lastChar = value.charAt(value.length() - 1);
// 转换为数字
if (Character.isDigit(lastChar)) {
return Character.getNumericValue(lastChar);
} else {
throw new IllegalArgumentException("Last character is not a digit");
}
}
@ -103,7 +134,7 @@ public class SortingTwoCNTTask extends AbstractTask {
}
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
/*// 获取参数
// 获取参数
String startPoint = taskObj.getPoint_code1();
SchBasePoint schBasePoint = pointService.selectByPointCode(startPoint);
// 起点清空
@ -118,7 +149,7 @@ public class SortingTwoCNTTask extends AbstractTask {
PointUtils.updateByIngTaskCode(schBasePoint2);
pointService.update(Wrappers.lambdaUpdate(SchBasePoint.class).eq(SchBasePoint::getPoint_code, point_code2)
.set(SchBasePoint::getIs_lock, false));
}*/
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_FINISH);

Loading…
Cancel
Save