Compare commits

..

No commits in common. '3f2a907601a2be3d6befa01d763b56ff605d8732' and 'f0493682f12b0b241f8628475fa4a49570f11497' have entirely different histories.

  1. 2
      shkj-admin/src/main/java/com/shkj/ShkjApplication.java
  2. 32
      shkj-admin/src/main/resources/application-dev.yml
  3. 22
      shkj-admin/src/main/resources/application-pro.yml
  4. 85
      shkj-admin/src/main/resources/application-pro146.yml
  5. 12
      shkj-admin/src/main/resources/application-yun.yml
  6. 2
      shkj-admin/src/main/resources/application.yml
  7. 2
      shkj-admin/src/main/resources/logback.xml
  8. 7
      shkj-wms/src/main/java/com/shkj/wcs/controller/busin/WcsTaskController.java
  9. 11
      shkj-wms/src/main/java/com/shkj/wcs/domain/BusinDataTask.java
  10. 394
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java
  11. 60
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java
  12. 95
      shkj-wms/src/main/java/com/shkj/wcs/service/impl/BusinDataTaskServiceImpl.java
  13. 10
      shkj-wms/src/main/java/com/shkj/wcs/third/rcs/CounterService.java
  14. 18
      shkj-wms/src/main/java/com/shkj/wcs/third/rcs/RCSUtil.java
  15. 23
      shkj-wms/src/main/java/com/shkj/wcs/third/rcs/dto/CarrierInfoList.java
  16. 3
      shkj-wms/src/main/java/com/shkj/wcs/third/rcs/dto/RcsCreateTaskDto.java
  17. 2
      shkj-wms/src/main/java/com/shkj/wcs/third/rcs/dto/RcsIdList.java
  18. 7
      shkj-wms/src/main/java/com/shkj/wcs/third/rcs/dto/RcsThirdResult.java
  19. 2
      shkj-wms/src/main/java/com/shkj/wcs/third/rcs/enums/RCSTaskTypeEnum.java
  20. 6
      shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java
  21. 2
      shkj-wms/src/main/java/com/shkj/wcs/vo/TaskStatusBody.java
  22. 10
      shkj-wms/src/main/java/com/shkj/wms/enums/AGVStatusEnum.java
  23. 9
      shkj-wms/src/main/java/com/shkj/wms/enums/BusinTaskTypeEnum.java
  24. 8
      shkj-wms/src/main/java/com/shkj/wms/enums/TaskStatusEnum.java

@ -13,7 +13,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
* @author lch
*/
@SpringBootApplication(exclude = { SecurityAutoConfiguration.class,DataSourceAutoConfiguration.class, MongoAutoConfiguration.class},scanBasePackages = {"org.jeecg.modules.jmreport", "com.shkj"})
//@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, MongoAutoConfiguration.class},scanBasePackages = {"org.jeecg.modules.jmreport", "com.shkj"})
//@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, MongoAutoConfiguration.class}, scanBasePackages = {"com.shkj"})
@EnableAsync
public class ShkjApplication {
public static void main(String[] args) {

@ -12,11 +12,11 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://127.0.0.1:3306/sc_wcs?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B7
url: jdbc:mysql://127.0.0.1:3306/mjk_pro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B7
#url: jdbc:mysql://120.77.94.227:3306/mjk_wcs_2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
#password: CTlTwKgIrRVTsEHqxxx
password: root
# password: 123456
# password: Y4yhl9tbf110
# 从库数据源
slave:
@ -88,15 +88,27 @@ spring:
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
third:
# 中科WCS接口
wcsIncomingTrayCheckUrl: http://10.0.152.22:5000/api/toWzWcs/wcsIncomingTrayCheck
queryTaskStatusUrl: http://10.0.152.22:5000/api/toWzWcs/queryTaskStatus
wcsIncomingTaskRequestUrl: http://10.0.152.22:5000/api/toWzWcs/wcsIncomingTaskRequest
uploadWCSTaskStatusUrl: http://10.0.152.22:5000/api/toWzWcs/uploadWCSTaskStatus
# agv接口
agvCreateTaskUrl: https://10.0.152.12/rcs/rtas/api/robot/controller/task/submit
agvCreateTaskUrl: http://127.0.0.1:8081/rest/common/createTask
agvStatesUrl: http://127.0.0.1:8081/rest/robots/states
agvCancelTaskUrl: http://10.0.152.12/rcs/rtas/api/robot/controller/task/cancel
agvCancelTaskUrl: http://127.0.0.1:8081/rest/common/cancelTask
queryAckByTaskUrl: http://127.0.0.1:8081/rest/common/queryAckByTaskId
# ess接口
essTaskDistributionUrl: http://210.21.218.14:60354/task/create
essTaskCancelUrl: http://210.21.218.14:60354/task/cancel
# 输送线接口
moveContainerUrl: http://210.21.218.14:60354/conveyor/moveContainer
containerArrivedUrl: http://210.21.218.14:60354/conveyor/containerArrived
# 播种墙 电子标签
tagSendTaskUrl: http://210.21.218.14:60354/PTL/SendDASData
tagPickingDetailsUrl: http://210.21.218.14:60354/PTL/DASPickingDetails
# erp接口
erpU8PuStoreInUrl: http://192.168.1.99:13001/api/U8PuStoreIn/Add
erpU8MaterialOutUrl: http://192.168.1.99:13001/api/U8MaterialOut/Add
plc:
firstBarcode: DB320.DBD82
secondBarcode: DB320.DBD104
thirdBarcode: DB320.DBD12
containerCode: DB320.DBD6

@ -12,9 +12,9 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://127.0.0.1:3306/sc_wcs?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B7
url: jdbc:mysql://192.168.155.145:3306/kmv2_wcs?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B7
username: root
password: root
password: Mjk@2024_Kmv2
# 从库数据源
slave:
# 从数据源开关/默认关闭
@ -64,7 +64,7 @@ spring:
# redis 配置
redis:
# 地址
host: 127.0.0.1
host: 192.168.155.145
# 端口,默认为6379
port: 6379
# 数据库索引
@ -84,14 +84,8 @@ spring:
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
third:
# 中科WCS接口
wcsIncomingTrayCheckUrl: http://10.0.152.22:5000/api/toWzWcs/wcsIncomingTrayCheck
queryTaskStatusUrl: http://10.0.152.22:5000/api/toWzWcs/queryTaskStatus
wcsIncomingTaskRequestUrl: http://10.0.152.22:5000/api/toWzWcs/wcsIncomingTaskRequest
uploadWCSTaskStatusUrl: http://10.0.152.22:5000/api/toWzWcs/uploadWCSTaskStatus
# agv接口
agvCreateTaskUrl: https://10.0.152.12/rcs/rtas/api/robot/controller/task/submit
agvStatesUrl: http://127.0.0.1:8081/rest/robots/states
agvCancelTaskUrl: http://10.0.152.12/rcs/rtas/api/robot/controller/task/cancel
queryAckByTaskUrl: http://127.0.0.1:8081/rest/common/queryAckByTaskId
ZKWJ:
# 中科wcs接口
wcsIncomingTrayCheckUrl: http://172.168.61.200:18990/api/toWzWcs/wcsIncomingTrayCheck
wcsCancelTaskUrl: http://172.168.61.200:18990/api/wms/wmsTask/changeTaskStatus
wcsPushNewPointUrl: http://172.168.61.200:18990/api/wms/stacker/setStackerTaskNewDestination

@ -0,0 +1,85 @@
# 项目相关配置
shkj:
# 文件路径 示例( Windows配置D:/shkj/uploadPath,Linux配置 /home/shkj/uploadPath)
profile: /www/shkj_v2/static
urlPre: http://127.0.0.1:8041
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://192.168.155.146:3306/kmv2_wcs?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B7
username: root
password: Mjk@2024_Kmv2
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: false
url:
username:
password:
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: shkj
login-password: 123456
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
# redis 配置
redis:
# 地址
host: 192.168.155.146
# 端口,默认为6379
port: 6379
# 数据库索引
database: 0
# 密码
password:
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms

@ -92,9 +92,13 @@ third:
wcsIncomingTaskRequestUrl: http://58.214.39.42:5000/api/toWzWcs/wcsIncomingTaskRequest
uploadWCSTaskStatusUrl: http://58.214.39.42:5000/api/toWzWcs/uploadWCSTaskStatus
# agv接口
agvCreateTaskUrl: http://10.0.152.12/rcs/rtas/api/robot/controller/task/submit
agvStatesUrl: http://127.0.0.1:8081/rest/robots/states
agvCancelTaskUrl: http://10.0.152.12/rcs/rtas/api/robot/controller/task/cancel
agvCreateTaskUrl: http://127.0.0.1:8081/rcs/rtas/api/robot/controller/task/submit
agvStatesUrl: http://127.0.0.1:8081/api/robot/controller/robot/query
agvCancelTaskUrl: http://127.0.0.1:8081/rcs/rtas/api/robot/controller/task/cancel
queryAckByTaskUrl: http://127.0.0.1:8081/rest/common/queryAckByTaskId
plc:
host: 192.168.1.10
rack: 0
slot: 1
db-number: 5200

@ -45,7 +45,7 @@ spring:
# 国际化资源文件路径
basename: i18n/messages
profiles:
active: dev
active: yun
# 文件上传
servlet:
multipart:

@ -8,7 +8,7 @@
<contextName>logback</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<!-- <property name="log.path" value="/opt/logs/mjk2" />-->
<property name="log.path" value="D:/logs" />
<property name="log.path" value="/opt/logs/sc" />
<!-- 彩色日志 -->
<!-- 配置格式变量:CONSOLE_LOG_PATTERN 彩色日志格式 -->

@ -14,7 +14,6 @@ import com.shkj.wcs.third.rcs.enums.RCSOperation;
import com.shkj.wcs.third.rcs.enums.RCSTaskTypeEnum;
import com.shkj.wcs.third.workbinWcs.WCSUtil;
import com.shkj.wcs.third.workbinWcs.dto.*;
import com.shkj.wcs.vo.TaskStatusBody;
import com.shkj.wcs.vo.WcsResponseVo;
import com.shkj.wcs.domain.BusinDataTask;
import com.shkj.wms.enums.TaskStatusEnum;
@ -59,9 +58,9 @@ public class WcsTaskController {
@Log(title = "查询是否存在出库任务测试接口")
@PostMapping("/toWzWcs/queryTaskStatus")
@RepeatSubmit
public Integer queryTaskStatus(@RequestBody WcsResponseVo<TaskStatusBody> vo) {
Integer taskCount = vo.getBody().get(0).getTaskCount();
return taskCount;
public WcsResponseVo queryTaskStatus(@RequestBody WCSQueryTaskStatusBody body) {
WcsResponseVo vo = wcsUtil.queryTaskStatus(body);
return vo;
}

@ -117,11 +117,17 @@ public class BusinDataTask implements Serializable {
@Excel(name = "AGV编号")
private String agvNo;
/** 冲孔机编号 */
@Excel(name = "冲孔机编号")
private String punchNo;
/** 立库输送线 */
@Excel(name = "立库输送线")
private String dpsNoOne;
/** 立库输送线 */
@Excel(name = "立库输送线")
private String dpsNoTwo;
/** 过点时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+7")
@ -166,10 +172,5 @@ public class BusinDataTask implements Serializable {
*/
private String destination;
/**
* AGV任务状态
*/
private String agvTaskStatus;
}

@ -1,7 +1,5 @@
package com.shkj.wcs.plc;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.shkj.common.constant.RedisConstant;
import com.shkj.common.core.domain.Result;
import com.shkj.common.enums.BusinessType;
@ -15,10 +13,8 @@ import com.shkj.wcs.service.IWcsPlcConnectService;
import com.shkj.wcs.service.IWcsPlcPropertyService;
import com.shkj.wcs.third.rcs.RCSUtil;
import com.shkj.wcs.third.workbinWcs.WCSUtil;
import com.shkj.wcs.third.workbinWcs.dto.WCSQueryAreaStatusBody;
import com.shkj.wcs.third.workbinWcs.dto.WCSQueryTaskStatusBody;
import com.shkj.wcs.third.workbinWcs.dto.WcsIncomingTaskRequestBody;
import com.shkj.wcs.third.workbinWcs.dto.WcsIncomingTrayCheckBody;
import com.shkj.wcs.vo.TaskStatusBody;
import com.shkj.wcs.vo.WcsPlcConnectVo;
import com.shkj.wcs.vo.WcsResponseVo;
@ -80,26 +76,25 @@ public class PlcEventTask {
}
for (WcsPlcConnectVo conn : plcList) {
if (conn.getPlcIp().contains("99.151")) {
plcTask(plcInit.getPlcOperate_dps(), conn, conn.getPointTables());
if (conn.getPlcIp().contains("155.180")) {
plcTask(plcInit.getPlcOperate_stk(), conn, conn.getPointTables());
}
if (conn.getPlcIp().contains("99.172")) {
plcTask(plcInit.getPlcOperate_dpj(), conn, conn.getPointTables());
if (conn.getPlcIp().contains("155.170")) {
plcTask(plcInit.getPlcOperate_dps(), conn, conn.getPointTables());
}
}
}
//输送线心跳
@Scheduled(fixedDelay = 2000)
@Scheduled(fixedDelay = 4000)
public void writePlcheartbeatDps() {
PlcOperate plcOperate = plcInit.getPlcOperate_dps();
if (plcOperate != null) {
//根据连接的plcId获取属性
PlcOperate plcOperate = plcInit.getPlcOperate_dps();
PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite();
Map<String, Object> readPointMap = new HashMap<>();
String heartbeat = "DB5100.0.0";
String heartbeat = "DB5100";
readPointMap.put(heartbeat, "Boolean");
Map<String, Object> pointMap = plcReadAndWrite.readPlcData(plcOperate, JsonUtil.toJSONString(readPointMap));
@ -109,28 +104,26 @@ public class PlcEventTask {
if (pointMap.containsKey(heartbeat)) {
heartbeatV = Boolean.valueOf(pointMap.get(heartbeat).toString());
}
//heartbeatV = (heartbeatV == true) ? false : true;
heartbeatV = (heartbeatV == true) ? false : true;
Map<String, Object> writeHbMap = new HashMap<>(1);
writeHbMap.put("Boolean", heartbeatV);
Map<String, Object> allHbMap = new HashMap<>(1);
allHbMap.put("DB5110.0.0", writeHbMap);
allHbMap.put(heartbeat, writeHbMap);
Boolean heartType = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allHbMap));
if (!heartType) {
log.info("dps心跳写入失败,重连服务器");
plcInit.connect();
}
}
}
//叠盘机心跳
@Scheduled(fixedDelay = 2000)
//堆垛机心跳
//@Scheduled(fixedDelay = 4000)
public void writePlcheartbeatStk() {
//根据连接的plcId获取属性
PlcOperate plcOperate = plcInit.getPlcOperate_dpj();
if (plcOperate != null) {
PlcOperate plcOperate = plcInit.getPlcOperate_stk();
PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite();
Map<String, Object> readPointMap = new HashMap<>();
String heartbeat = "DB5100.0.0";
String heartbeat = "DB20.0.4";
readPointMap.put(heartbeat, "Boolean");
Map<String, Object> pointMap = plcReadAndWrite.readPlcData(plcOperate, JsonUtil.toJSONString(readPointMap));
@ -144,14 +137,13 @@ public class PlcEventTask {
Map<String, Object> writeHbMap = new HashMap<>(1);
writeHbMap.put("Boolean", heartbeatV);
Map<String, Object> allHbMap = new HashMap<>(1);
allHbMap.put("DB5110.0.0", writeHbMap);
allHbMap.put(heartbeat, writeHbMap);
Boolean heartType = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allHbMap));
if (!heartType) {
log.info("stk心跳写入失败,重连服务器");
plcInit.connect();
}
}
}
public void plcTask(PlcOperate plcOperate, WcsPlcConnectVo conn, String pointTables) {
@ -159,7 +151,7 @@ public class PlcEventTask {
//根据连接的plcId获取属性
PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite();
Map<String, Object> pointMap = plcReadAndWrite.readPlcData(plcOperate, pointTables);
log.info("连接的IP:"+conn.getPlcIp()+":设备:"+conn.getConnectName()+" 读取的点位内容:"+pointMap);
// log.info("连接的IP:"+conn.getPlcIp()+":设备:"+conn.getConnectName()+" 读取的点位内容:"+pointMap);
List<WcsPlcProperty> propertyList = (List<WcsPlcProperty>) redisTemplate.opsForValue().get(RedisConstant.redisPlcProperty + plcId);
if (propertyList == null || propertyList.size() == 0) {
@ -169,17 +161,13 @@ public class PlcEventTask {
// 设备类型:2输送线 1 堆垛机
switch (conn.getDevType()) {
//输送线
case "1":
dpsRealTimeTask(propertyList, pointMap, plcReadAndWrite, plcOperate);
break;
case "2":
dpjRealTimeTask(propertyList, pointMap, plcReadAndWrite, plcOperate);
dpsRealTimeTask(propertyList, pointMap, plcReadAndWrite, plcOperate);
break;
default:
log.info("无匹配的设备类型");
break;
}
}
public void dpsRealTimeTask(List<WcsPlcProperty> propertyList, Map<String, Object> pointMap, PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) {
@ -240,27 +228,6 @@ public class PlcEventTask {
String retOut = "";
String retOutVt= "";
/**
* 出口上报
*/
//出口上报请求序列号
String rptOutSeria1 = "";
//出口上报条码
String rptOutBarcod1 = "";
//出口上报确认序列号
String rptOutCfmSeria1 = "";
String rptOutCfmSeriaVt1 = "";
//出口上报条码确认
String rptOutCfmBarcod1 = "";
String rptOutCfmBarcodVt1 = "";
//出口上报返回信息
String retOut1 = "";
String retOutVt1 = "";
/**
* 出入库切换
*/
@ -271,7 +238,15 @@ public class PlcEventTask {
String retInOutSwit = "";
String retInOutSwitVt = "";
/**
* 叠盘机
*/
//叠盘机完成
String stk = "";
//叠盘机返回
String retStk = "";
String retStkVt = "";
for (WcsPlcProperty plcProperty : propertyList) {
@ -282,88 +257,76 @@ public class PlcEventTask {
} else if (pointType.equals("reqInBarcod")) {
reqInBarcod = plcProperty.getAddress();
} else if (pointType.equals("reqInLength")) {
//外形检测
reqInLength = plcProperty.getAddress();
reqInLength = plcProperty.getValueType();
reqInLength = plcProperty.getPointType();
} else if (pointType.equals("reqInCfmSeria")) {
reqInCfmSeria = plcProperty.getAddress();
reqInCfmSeriaVt = plcProperty.getValueType();
reqInCfmSeriaVt = plcProperty.getPointType();
} else if (pointType.equals("reqInCfmBarcod")) {
reqInCfmBarcod = plcProperty.getAddress();
reqInCfmBarcodVt = plcProperty.getValueType();
reqInCfmBarcodVt = plcProperty.getPointType();
} else if (pointType.equals("reqInDest")) {
reqInDest = plcProperty.getAddress();
reqInDestVt = plcProperty.getValueType();
reqInDestVt = plcProperty.getPointType();
} else if (pointType.equals("reqEmpty")) {
reqEmpty = plcProperty.getAddress();
} else if (pointType.equals("reqCfm")) {
reqCfm = plcProperty.getAddress();
reqCfmVt = plcProperty.getValueType();
reqCfmVt = plcProperty.getPointType();
} else if (pointType.equals("rptOutSeria")) {
rptOutSeria = plcProperty.getAddress();
} else if (pointType.equals("rptOutBarcod")) {
rptOutBarcod = plcProperty.getAddress();
} else if (pointType.equals("rptOutCfmSeria")) {
rptOutCfmSeria = plcProperty.getAddress();
rptOutCfmSeriaVt = plcProperty.getValueType();
rptOutCfmSeriaVt = plcProperty.getPointType();
} else if (pointType.equals("rptOutCfmBarcod")) {
rptOutCfmBarcod = plcProperty.getAddress();
rptOutCfmBarcodVt = plcProperty.getValueType();
rptOutCfmBarcodVt = plcProperty.getPointType();
} else if (pointType.equals("retOut")) {
retOut = plcProperty.getAddress();
retOutVt = plcProperty.getValueType();
retOutVt = plcProperty.getPointType();
} else if (pointType.equals("inOutSwit")) {
inOutSwit = plcProperty.getAddress();
} else if (pointType.equals("retInOutSwit")) {
retInOutSwit = plcProperty.getAddress();
retInOutSwitVt = plcProperty.getValueType();
} else if (pointType.equals("rptOutSeria1")) {
rptOutSeria1 = plcProperty.getAddress();
} else if (pointType.equals("rptOutBarcod1")) {
rptOutBarcod1 = plcProperty.getAddress();
} else if (pointType.equals("rptOutCfmSeria1")) {
rptOutCfmSeria1 = plcProperty.getAddress();
rptOutCfmSeriaVt1 = plcProperty.getValueType();
} else if (pointType.equals("rptOutCfmBarcod1")) {
rptOutCfmBarcod1 = plcProperty.getAddress();
rptOutCfmBarcodVt1 = plcProperty.getValueType();
} else if (pointType.equals("retOut1")) {
retOut1 = plcProperty.getAddress();
retOutVt1 = plcProperty.getValueType();
retInOutSwitVt = plcProperty.getPointType();
} else if (pointType.equals("stk")) {
stk = plcProperty.getAddress();
} else if (pointType.equals("retStk")) {
retStk = plcProperty.getAddress();
retStkVt = plcProperty.getPointType();
}
}
//扫码处入库申请
//&& Boolean.valueOf(pointMap.get(reqInSeria).toString())
if (pointMap.containsKey(reqInSeria) && !pointMap.get(reqInSeria).equals("0")) {
if (pointMap.containsKey(reqInSeria) && Boolean.valueOf(pointMap.get(reqInSeria).toString())) {
//读取请求序列号内容
String bCR01SeriaV1 = Objects.toString(pointMap.get(reqInSeria), "");
Integer bCR01SeriaV = 0;
if(!bCR01SeriaV1.isEmpty()){
bCR01SeriaV = Integer.parseInt(bCR01SeriaV1.toString());
}
Integer bCR01SeriaV = (Integer) pointMap.get(reqInSeria);
//读取托盘条码内容
String barcodeValueOne = Objects.toString(pointMap.get(reqInBarcod), "");
String s = barcodeValueOne.replaceAll("[^A-Za-z0-9]", "");
log.info("扫码处入库申请时,读取的条码内容:" + s);
String barcodeValueOne = pointMap.get(reqInBarcod).toString();
log.info("扫码处入库申请时,读取的条码内容:" + barcodeValueOne);
//根据托盘条码返回正在执行的任务号
WcsIncomingTrayCheckBody body = new WcsIncomingTrayCheckBody();
body.setStation("SC-G1-00-00-1001");
WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("");
body.setTaskType(TaskTypeEnum.In.getValue());
body.setBussinessType(BusinTaskTypeEnum.trayCheck.getValue());
body.setTrayCode(s);
body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue());
body.setTrayCode(barcodeValueOne);
body.setCreateDt(new Date().toString());
WcsResponseVo vo = wcsUtil.wcsIncomingTrayCheck(body);
//调用agv接口查询库区状态
Object[] areaStatus = {};
body.setAreaStatus(areaStatus);
WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body);
log.info("扫码处入库申请wz-wcs返回:" + vo.getHeader());
Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> seriaMap = new HashMap<>(1);
seriaMap.put(reqInCfmSeriaVt,bCR01SeriaV );
allMap.put(reqInCfmSeria, seriaMap);
// Map<String, String> barcodMap = new HashMap<>(1);
// barcodMap.put(reqInCfmBarcod00000Vt, s1);
// allMap.put(reqInCfmBarcod, barcodMap);
Map<String, String> barcodMap = new HashMap<>(1);
barcodMap.put(reqInCfmBarcodVt, barcodeValueOne);
allMap.put(reqInCfmBarcod, barcodMap);
//成功直行 失败回退
if (Result.isOk(vo.getHeader().getMsgCode())) {
Map<String, Integer> destMap = new HashMap<>(1);
@ -371,7 +334,7 @@ public class PlcEventTask {
allMap.put(reqInDest, destMap);
} else {
Map<String, Integer> destMap = new HashMap<>(1);
destMap.put(reqInDestVt, 1);
destMap.put(reqInDestVt, 2);
allMap.put(reqInDest, destMap);
}
String allMapJson = JsonUtil.toJSONString(allMap);
@ -380,31 +343,14 @@ public class PlcEventTask {
log.info("扫码处入库申请时,写入的命令返回结果:"+reqInBoolean.toString());
}
//空托盘申请
if (pointMap.containsKey(reqEmpty) && !pointMap.get(reqEmpty).equals("0")) {
if (pointMap.containsKey(reqEmpty) && Boolean.valueOf(pointMap.get(reqEmpty).toString())) {
WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G1-00-00-1002");
body.setStation("空托处");
body.setTaskType(TaskTypeEnum.Out.getValue());
body.setBussinessType(BusinTaskTypeEnum.stockOut.getValue());
body.setCreateDt(new Date().toString());
//调用agv接口查询库区状态
Map<String, Object> map1 = new HashMap<>();
map1.put("areaInLocation", "SC-A2");
map1.put("status", 0);
Map<String, Object> map2 = new HashMap<>();
map2.put("areaInLocation", "SC-B2");
map2.put("status", 1);
Map<String, Object> map3 = new HashMap<>();
map1.put("areaInLocation", "SC-C2");
map1.put("status", 1);
Map<String, Object> map4 = new HashMap<>();
map2.put("areaInLocation", "SC-D2");
map2.put("status", 1);
Object[] areaStatus = new Object[] { map1,map2,map3,map4};
log.info("每个库区的状态:"+Arrays.toString(areaStatus));
Object[] areaStatus = {};
body.setAreaStatus(areaStatus);
WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body);
log.info("空托申请wz-wcs返回:" + vo.getHeader());
@ -412,11 +358,11 @@ public class PlcEventTask {
Map<String, Integer> reqMap = new HashMap<>(1);
if (Result.isOk(vo.getHeader().getMsgCode())) {
reqMap.put(reqCfmVt, 1);
reqMap.put(retOutVt,1);
} else {
reqMap.put(reqCfmVt, 2);
reqMap.put(retOutVt,0);
}
allMap.put(reqCfm, reqMap);
allMap.put(retOut, reqMap);
String allMapJson = JsonUtil.toJSONString(allMap);
log.info("空托申请时,给输送线写命令数据:{}",allMapJson);
Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
@ -424,43 +370,21 @@ public class PlcEventTask {
}
//实盘出口上报
if (pointMap.containsKey(rptOutSeria) && !pointMap.get(rptOutSeria).equals("0")) {
if (pointMap.containsKey(rptOutSeria) && Boolean.valueOf(pointMap.get(rptOutSeria).toString())) {
//读取序列号
String IntegeroutSeria = Objects.toString(pointMap.get(rptOutSeria), "");
Integer outSeria = 0;
if(!IntegeroutSeria.isEmpty()){
outSeria = Integer.parseInt(IntegeroutSeria.toString());
}
Integer outSeria = (Integer) pointMap.get(rptOutSeria);
//读取托盘条码内容
String barcodeValueOne = Objects.toString(pointMap.get(rptOutBarcod), "");
String s = barcodeValueOne.replaceAll("[^A-Za-z0-9]", "");
log.info("实盘出口上报时,读取的条码内容:" + s);
String barcodeValueOne = pointMap.get(rptOutBarcod).toString();
log.info("实盘出口上报时,读取的条码内容:" + barcodeValueOne);
//调用wz-wcs接口
WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G2-00-00-2002");
body.setStation("出口上报处");
body.setTaskType(TaskTypeEnum.In.getValue());
body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue());
body.setTrayCode(s);
body.setTrayCode(barcodeValueOne);
body.setCreateDt(new Date().toString());
//调用agv接口查询库区状态
Map<String, Object> map1 = new HashMap<>();
map1.put("areaInLocation", "SC-A2");
map1.put("status", 0);
Map<String, Object> map2 = new HashMap<>();
map2.put("areaInLocation", "SC-B2");
map2.put("status", 1);
Map<String, Object> map3 = new HashMap<>();
map3.put("areaInLocation", "SC-C2");
map3.put("status", 1);
Map<String, Object> map4 = new HashMap<>();
map4.put("areaInLocation", "SC-D2");
map4.put("status", 1);
Object[] areaStatus = new Object[] { map1,map2,map3,map4};
log.info("每个库区的状态:"+Arrays.toString(areaStatus));
Object[] areaStatus = {};
body.setAreaStatus(areaStatus);
WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body);
log.info("agv扫码处申请wz-wcs返回:" + vo.getHeader());
@ -469,103 +393,35 @@ public class PlcEventTask {
seriaMap.put(rptOutCfmSeriaVt,outSeria );
allMap.put(rptOutCfmSeria, seriaMap);
// Map<String, String> barcodMap = new HashMap<>(1);
// barcodMap.put(rptOutCfmBarcodVt, barcodeValueOne);
// allMap.put(rptOutCfmBarcod, barcodMap);
Map<String, Integer> reqMap = new HashMap<>(1);
if (Result.isOk(vo.getHeader().getMsgCode())) {
reqMap.put(retOutVt, 1);
} else {
reqMap.put(retOutVt, 1);
}
allMap.put(retOut, reqMap);
String allMapJson = JsonUtil.toJSONString(allMap);
log.info("出口上报时,给输送线写命令数据:{}", allMapJson);
Boolean rptOutBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info("出口上报时,写入的命令返回结果:" + rptOutBoolean.toString());
}
//实盘出口上报
if (pointMap.containsKey(rptOutSeria1) && !pointMap.get(rptOutSeria1).equals("0")) {
//读取序列号
String IntegeroutSeria = Objects.toString(pointMap.get(rptOutSeria1), "");
Integer outSeria = 0;
if(!IntegeroutSeria.isEmpty()){
outSeria = Integer.parseInt(IntegeroutSeria);
}
//读取托盘条码内容
String barcodeValueOne = Objects.toString(pointMap.get(rptOutBarcod1), "");
String s = barcodeValueOne.replaceAll("[^A-Za-z0-9]", "");
log.info("实盘出口上报时,读取的条码内容:" + s);
//调用wz-wcs接口
WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G2-00-00-2001");
body.setTaskType(TaskTypeEnum.In.getValue());
body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue());
body.setTrayCode(s);
body.setCreateDt(new Date().toString());
//调用agv接口查询库区状态
Map<String, Object> map1 = new HashMap<>();
map1.put("areaInLocation", "SC-A2");
map1.put("status", 0);
Map<String, Object> map2 = new HashMap<>();
map2.put("areaInLocation", "SC-B2");
map2.put("status", 1);
Map<String, Object> map3 = new HashMap<>();
map3.put("areaInLocation", "SC-C2");
map3.put("status", 1);
Map<String, Object> map4 = new HashMap<>();
map4.put("areaInLocation", "SC-D2");
map4.put("status", 1);
Object[] areaStatus = new Object[] { map1,map2,map3,map4};
log.info("每个库区的状态:"+Arrays.toString(areaStatus));
body.setAreaStatus(areaStatus);
WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body);
log.info("agv扫码处申请wz-wcs返回:" + vo.getHeader());
Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> seriaMap = new HashMap<>(1);
seriaMap.put(rptOutCfmSeriaVt1, outSeria);
allMap.put(rptOutCfmSeria1, seriaMap);
// Map<String, String> barcodMap = new HashMap<>(1);
// barcodMap.put(rptOutCfmBarcodVt1, s);
// allMap.put(rptOutCfmBarcod1, barcodMap);
Map<String, String> barcodMap = new HashMap<>(1);
barcodMap.put(rptOutCfmBarcodVt, barcodeValueOne);
allMap.put(rptOutCfmBarcod, barcodMap);
Map<String, Integer> reqMap = new HashMap<>(1);
if (Result.isOk(vo.getHeader().getMsgCode())) {
reqMap.put(retOutVt1, 1);
reqMap.put(reqCfmVt,1);
} else {
reqMap.put(retOutVt1, 1);
reqMap.put(reqCfmVt,0);
}
allMap.put(retOut1, reqMap);
allMap.put(reqCfm, reqMap);
String allMapJson = JsonUtil.toJSONString(allMap);
log.info("出口上报时,给输送线写命令数据:{}",allMapJson);
Boolean rptOutBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info("出口上报时,写入的命令返回结果:"+rptOutBoolean.toString());
}
//出入库切换
if (pointMap.containsKey(inOutSwit) && !pointMap.get(inOutSwit).equals("0")) {
if (pointMap.containsKey(inOutSwit) && Boolean.valueOf(pointMap.get(inOutSwit).toString())) {
WCSQueryTaskStatusBody body = new WCSQueryTaskStatusBody();
body.setDestination("SC-G1-00-00-1002");
body.setDestination("出入库切换点位");
body.setTaskType("1");
body.setTrayType("2");
WcsResponseVo<TaskStatusBody> vo = JSON.parseObject(
JSON.toJSONString(wcsUtil.queryTaskStatus(body)),
new TypeReference<WcsResponseVo<TaskStatusBody>>() {}
);
Integer taskCount = vo.getBody().get(0).getTaskCount();
WcsResponseVo<TaskStatusBody> vo = wcsUtil.queryTaskStatus(body);
log.info("出入库切换时申请wz-wcs返回:" + vo.getHeader());
Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> reqMap = new HashMap<>(1);
if (Result.isOk(vo.getHeader().getMsgCode())) {
int taskCount = vo.getBody().get(0).getTaskCount();
if (taskCount == 0){
reqMap.put(retInOutSwitVt,2);
}else {
@ -581,78 +437,27 @@ public class PlcEventTask {
log.info("出入库切换时,写入的命令返回结果:"+inOutSwitBoolean.toString());
}
} catch (Exception e) {
log.error("dpsRealTimeTask:" + e.getMessage());
}
}
public void dpjRealTimeTask(List<WcsPlcProperty> propertyList, Map<String, Object> pointMap, PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) {
try {
/**
* 叠盘机
*/
//叠盘机完成
String dpj = "";
//叠盘机返回
String retDpj = "";
String retDpjVt = "";
for (WcsPlcProperty plcProperty : propertyList) {
String pointType = plcProperty.getPointType();
if (pointType.equals("dpj")) {
dpj = plcProperty.getAddress();
} else if (pointType.equals("retDpj")) {
retDpj = plcProperty.getAddress();
retDpjVt = plcProperty.getValueType();
}
}
//叠盘机
if (pointMap.containsKey(dpj) && !pointMap.get(dpj).equals("0")) {
if (pointMap.containsKey(stk) && Boolean.valueOf(pointMap.get(stk).toString())) {
WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G2-00-00-2003");
body.setStation("叠盘机点位");
body.setTaskType(TaskTypeEnum.In.getValue());
body.setTrayCode("TP4077566601");
body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue());
body.setCreateDt(new Date().toString());
//调用agv接口查询库区状态
Map<String, Object> map1 = new HashMap<>();
map1.put("areaInLocation", "SC-A2");
map1.put("status", 0);
Map<String, Object> map2 = new HashMap<>();
map2.put("areaInLocation", "SC-B2");
map2.put("status", 1);
Map<String, Object> map3 = new HashMap<>();
map1.put("areaInLocation", "SC-C2");
map1.put("status", 1);
Map<String, Object> map4 = new HashMap<>();
map2.put("areaInLocation", "SC-D2");
map2.put("status", 1);
Object[] areaStatus = new Object[] { map1,map2,map3,map4};
log.info("每个库区的状态:"+Arrays.toString(areaStatus));
Object[] areaStatus = {};
body.setAreaStatus(areaStatus);
WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body);
log.info("叠盘机满入库任务申请WZ-WCS返回:" + vo.getHeader());
log.info("空托申请wz-wcs返回:" + vo.getHeader());
Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> reqMap = new HashMap<>(1);
if (Result.isOk(vo.getHeader().getMsgCode())) {
reqMap.put(retDpjVt, 1);
reqMap.put(retStkVt,1);
} else {
reqMap.put(retDpjVt, 2);
reqMap.put(retStkVt,0);
}
allMap.put(retDpj, reqMap);
allMap.put(retStk, reqMap);
String allMapJson = JsonUtil.toJSONString(allMap);
log.info("叠盘机叠满上报时,给输送线写命令数据:{}",allMapJson);
Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
@ -666,31 +471,4 @@ public class PlcEventTask {
}
/**
* 单个的plc写入
*/
public Boolean plcExecWrite(Integer stk) {
PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite();
List<WcsPlcProperty> propertyList = new ArrayList<>();
propertyList = iWcsPlcPropertyService.getWcsPlcPropertyByPlcId(51L);
if (!propertyList.isEmpty()) {
for (WcsPlcProperty wcsPlcProperty : propertyList) {
if (wcsPlcProperty.getPointType().equals("retStk")) {
String valueType = wcsPlcProperty.getValueType();
String address = wcsPlcProperty.getAddress();
Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> reqMap = new HashMap<>(1);
reqMap.put(valueType, stk);
allMap.put(address, reqMap);
String allMapJson = JsonUtil.toJSONString(allMap);
log.info("叠盘机叠满上报时,给输送线写命令数据:{}", allMapJson);
Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcInit.getPlcOperate_dps(), allMapJson);
log.info("叠盘机叠满上报时,写入的命令返回结果:" + bCR01Boolean.toString());
return true;
}
}
}
return false;
}
}

@ -8,9 +8,6 @@ import com.shkj.wcs.domain.WcsPlcConnect;
import com.shkj.wcs.service.IWcsPlcConnectService;
import com.shkj.wcs.vo.WcsPlcConnectVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
@ -23,10 +20,10 @@ import java.util.concurrent.TimeUnit;
@Slf4j
@Component("PlcInit")
public class PlcInit implements ApplicationListener<ContextRefreshedEvent> {
public class PlcInit {
private PlcOperate plcOperate_dps;
private PlcOperate plcOperate_dpj;
private PlcOperate plcOperate_stk;
@Resource
IWcsPlcConnectService iWcsPlcConnectService;
@ -35,19 +32,14 @@ public class PlcInit implements ApplicationListener<ContextRefreshedEvent> {
RedisTemplate redisTemplate;
private ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
//root application context 没有parent
ApplicationContext context = event.getApplicationContext().getParent();
if (context == null) {
// @PostConstruct
public void init(){
log.info("初始化连接对象");
executorService.scheduleWithFixedDelay(
() -> reconnect(), 20, 20, TimeUnit.SECONDS
() -> reconnect(), 200, 200, TimeUnit.SECONDS
);
connect();
}
}
public void connect(){
//查询需要连接的PLC,初始化连接对象
@ -61,38 +53,24 @@ public class PlcInit implements ApplicationListener<ContextRefreshedEvent> {
for (WcsPlcConnectVo conn : plcList) {
redisTemplate.opsForValue().set(RedisConstant.redisPlcConnect+conn.getDevCode(),conn);
PlcHelper plc = new PlcHelper(conn.getPlcType(), conn.getPlcIp(), conn.getPlcFactory(), conn.getPort());
if (conn.getPlcIp().contains("99.172")) {
plcOperate_dpj = plc.getAutomation();
if (plcOperate_dpj != null) {
OperateResult connect = plcOperate_dpj.connect();
if (conn.getPlcIp().contains("155.180")){
plcOperate_stk = plc.getAutomation();
OperateResult connect = plcOperate_stk.connect();
if (connect.IsSuccess){
log.info(conn.getPlcIp() + "dpj连接成功");
log.info(conn.getPlcIp()+"连接成功");
}else {
log.info(conn.getPlcIp() + "dpj连接失败");
}
log.info(conn.getPlcIp()+"连接失败");
}
}
if (conn.getPlcIp().contains("99.151")) {
plcOperate_dps = plc.getAutomation();
if (plcOperate_dps != null) {
OperateResult connect = plcOperate_dps.connect();
if (connect.IsSuccess) {
log.info(conn.getPlcIp() + "dps连接成功");
} else {
log.info(conn.getPlcIp() + "dps连接失败");
}
}
}
}
}
private void reconnect(){
if (plcOperate_dps==null||!plcOperate_dps.isConnectd()) {
connect();
if (!plcOperate_dps.isConnectd()){
//connect();
}
if (plcOperate_dpj==null||!plcOperate_dpj.isConnectd()) {
connect();
if (!plcOperate_stk.isConnectd()){
//connect();
}
}
@ -100,16 +78,16 @@ public class PlcInit implements ApplicationListener<ContextRefreshedEvent> {
return plcOperate_dps;
}
public PlcOperate getPlcOperate_dpj() {
return plcOperate_dpj;
public PlcOperate getPlcOperate_stk() {
return plcOperate_stk;
}
public PlcOperate getPlcOperateByIp(String plcIp){
if (plcIp.contains("99.172")) {
return plcOperate_dpj;
if (plcIp.contains("155.180")){
return plcOperate_stk;
}
if (plcIp.contains("99.151")) {
if (plcIp.contains("155.170")){
return plcOperate_dps;
}
return null;

@ -12,12 +12,9 @@ import com.shkj.wcs.domain.BusinDataTask;
import com.shkj.wcs.domain.WcsPlcProperty;
import com.shkj.wcs.mapper.BusinDataTaskMapper;
import com.shkj.wcs.mapper.WcsPlcPropertyMapper;
import com.shkj.wcs.plc.PlcEventTask;
import com.shkj.wcs.service.IBusinDataTaskService;
import com.shkj.wcs.service.IWcsPlcPropertyService;
import com.shkj.wcs.third.rcs.CounterService;
import com.shkj.wcs.third.rcs.RCSUtil;
import com.shkj.wcs.third.rcs.dto.CarrierInfoList;
import com.shkj.wcs.third.rcs.dto.RcsCancelTaskDto;
import com.shkj.wcs.third.rcs.dto.RcsCreateTaskDto;
import com.shkj.wcs.third.rcs.dto.RcsIdList;
@ -28,7 +25,6 @@ import com.shkj.wcs.third.workbinWcs.WCSUtil;
import com.shkj.wcs.third.workbinWcs.dto.*;
import com.shkj.wcs.vo.WcsResponseVo;
import com.shkj.wms.enums.TaskStatusEnum;
import com.shkj.wms.utils.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.exceptions.TooManyResultsException;
import org.springframework.beans.factory.annotation.Autowired;
@ -36,7 +32,9 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* PLC连接属性Service业务层处理
@ -57,9 +55,6 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
@Autowired
private RCSUtil rcsUtil;
@Autowired
private PlcEventTask plcEventTask;
@Override
public WcsResponseVo doTaskGeneratePickTask(WcsCreateTaskDto bo) {
if (bo != null) {
@ -80,7 +75,6 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
BusinDataTask one = this.getOne(lqwDataTask);
if (dataChange.equals("1")) {
if (one != null) {
log.info("该托盘" + trayCode + "存在未完成的任务");
return WcsResponseVo.error(500, "该托盘" + trayCode + "存在未完成的任务");
}
BusinDataTask businDataTask = new BusinDataTask();
@ -99,10 +93,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
//调用下游接口下任务
log.info("任务储存成功!");
RcsCreateTaskDto rcsCreateTaskDto = new RcsCreateTaskDto();
rcsCreateTaskDto.setTaskType("B12");
if(taskType.equals("1")){
rcsCreateTaskDto.setTaskType("B13");
}
rcsCreateTaskDto.setTaskType(RCSTaskTypeEnum.PF_LMR_COMMON.getValue());
rcsCreateTaskDto.setRobotTaskCode(businDataTask.getTaskCode());
if (!businDataTask.getPriority().isEmpty()) {
rcsCreateTaskDto.setInitPriority(Integer.parseInt(businDataTask.getPriority()));
@ -110,72 +101,44 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
List<RcsIdList> rcsIdLists = new ArrayList<>();
for (int i = 1; i <= 2; i++) {
RcsIdList rcsIdList = new RcsIdList();
rcsIdList.setType("SITE");
if (i == 1) {
rcsIdList.setSeq(0);
rcsIdList.setType("ZONE");
rcsIdList.setCode(businDataTask.getFromSide());
rcsIdList.setOperation(RCSOperation.OT_COLLECT.getValue());
} else {
rcsIdList.setSeq(1);
String code = businDataTask.getToSide();
if(code.equals("SC-G1-00-00-1002")){
code = "SC-G2-00-00-2002";
}
rcsIdList.setCode(code);
rcsIdList.setType("ZONE");
rcsIdList.setCode(businDataTask.getToSide());
rcsIdList.setOperation(RCSOperation.OT_DELIVERY.getValue());
}
rcsIdList.setAutoStart(1);
rcsIdLists.add(rcsIdList);
}
rcsCreateTaskDto.setTargetRoute(rcsIdLists);
CarrierInfoList carrierInfoList = new CarrierInfoList();
int carrierCode = CounterService.incrementAndGet();
carrierInfoList.setCarrierCode(String.valueOf(carrierCode));
carrierInfoList.setCarrierType("4");
carrierInfoList.setLayer("0");
List<CarrierInfoList> carrierInfoLists = new ArrayList<>();
carrierInfoLists.add(carrierInfoList);
Map<String, Object> extra = new HashMap<>();
extra.put("carrierInfo", carrierInfoLists);
rcsCreateTaskDto.setExtra(extra);
Result result = rcsUtil.rcsCreateTask(rcsCreateTaskDto);
if (!Result.isOk(result)){
return WcsResponseVo.error(200, "接受成功但给rcs下发任务失败");
}
businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue());
iBusinDataTaskService.updateById(businDataTask);
if (fromBinCode.equals("SC-G2-00-00-2003")) {
Boolean aBoolean = plcEventTask.plcExecWrite(2);
if (!aBoolean) {
return WcsResponseVo.error(200, "接受成功但给plc回传任务失败");
return WcsResponseVo.error(200,"给rcs下发任务失败");
}
}
}
//任务取消
} else if (dataChange.equals("2")) {
if (one == null) {
return WcsResponseVo.error(500, "未查询到该托盘" + trayCode + "存在未完成的任务");
}
one.setTaskStatus("6");
this.updateById(one);
//推送给下游
RcsCancelTaskDto rcsCancelTaskDto = new RcsCancelTaskDto();
rcsCancelTaskDto.setRobotTaskCode(taskId);
// if (one.getTaskStatus().equals(TaskStatusEnum.wait_put.getValue())) {
// //软取消
// rcsCancelTaskDto.setCancelType("CANCEL");
// } else {
if(one.getTaskStatus().equals(TaskStatusEnum.wait_put.getValue())){
//软取消
rcsCancelTaskDto.setCancelType("CANCEL");
}else{
//硬取消(人工介入)
rcsCancelTaskDto.setCancelType("DROP");
// }
}
Result result = rcsUtil.rcsTaskCancel(rcsCancelTaskDto);
if (!Result.isOk(result)){
return WcsResponseVo.error(500, "给rcs取消任务失败");
return WcsResponseVo.error(200,"给rcs取消任务失败");
}
one.setTaskStatus("3");
this.updateById(one);
}
return WcsResponseVo.success();
}
@ -188,15 +151,14 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
@Override
public RcsResponseVo rcsFeedbackTask(AGVFeedbackBo bo) {
log.info("agv任务执行过程回馈数据:" + JSONObject.toJSONString(bo));
String robotTaskCode = bo.getRobotTaskCode();
ExtraData.Values values = bo.getExtra().getValues();
String carrierCode = values.getCarrierCode();
String method = values.getMethod();
String slotName = values.getSlotName();
LambdaQueryWrapper<BusinDataTask> queryWrapper = new LambdaQueryWrapper<BusinDataTask>()
.eq(BusinDataTask::getTaskCode, robotTaskCode);
// .eq(BusinDataTask::getContainerCode, carrierCode);
.eq(BusinDataTask::getTaskCode, robotTaskCode)
.eq(BusinDataTask::getContainerCode, carrierCode);
BusinDataTask businDataTask;
try {
businDataTask = iBusinDataTaskService.getOne(queryWrapper, true);
@ -210,29 +172,20 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
return RcsResponseVo.error("未找到对应任务");
}
String taskType = businDataTask.getTaskType();
switch (method) {
case "start":
businDataTask.setTaskStarttime(new Date());
businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue());
break;
case "outbin":
businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue());
break;
case "end":
businDataTask.setTaskStatus(TaskStatusEnum.finished.getValue());
businDataTask.setDestination(slotName);
businDataTask.setTaskEntime(new Date());
break;
case "cancel":
businDataTask.setTaskStatus(TaskStatusEnum.clean.getValue());
businDataTask.setDestination(slotName);
break;
default:
return RcsResponseVo.error("任务状态未知!");
}
businDataTask.setAgvTaskStatus(method);
businDataTask.setUpdateTime(new Date());
businDataTask.setAgvNo(bo.getSingleRobotCode());
boolean isUpdated = iBusinDataTaskService.updateById(businDataTask);
if (!isUpdated) {
log.error("任务状态更新失败,任务号:{}", robotTaskCode);
@ -241,7 +194,6 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
log.info("任务状态更新成功,任务号:{}", robotTaskCode);
UploadWCSTaskStatusDto uploadWCSTaskStatusDto = new UploadWCSTaskStatusDto();
WcsCreateTaskHeader header = new WcsCreateTaskHeader();
String taskType = businDataTask.getTaskType();
switch (taskType) {
case "1":
header.setBusinessType("stockOutReturn");
@ -262,16 +214,15 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
body.setTrayCode(carrierCode);
body.setTaskType(taskType);
body.setStatus(businDataTask.getTaskStatus());
// if (businDataTask.getTaskStatus().equals(TaskStatusEnum.finished.getValue())) {
if (businDataTask.getTaskStatus().equals(TaskStatusEnum.finished.getValue())){
body.setDestination(slotName);
// }
}
body.setMsgCode("200");
bodyList.add(body);
uploadWCSTaskStatusDto.setBody(bodyList);
log.info("请求zk-wcs参数{}",JSONObject.toJSONString(uploadWCSTaskStatusDto));
try {
WcsResponseVo vo = wcsUtil.uploadWCSTaskStatus(uploadWCSTaskStatusDto);
log.info("WZ-WCS状态上报反馈:"+ JSONObject.toJSONString(vo));
wcsUtil.uploadWCSTaskStatus(uploadWCSTaskStatusDto);
} catch (TooManyResultsException e) {
log.error("WZ-WCS状态上报异常,任务号:{}", robotTaskCode, e);
return RcsResponseVo.error("KJ-WCS状态上报异常");

@ -1,10 +0,0 @@
package com.shkj.wcs.third.rcs;
public class CounterService {
private static int i = 200000; // 静态变量,全局共享
public static synchronized int incrementAndGet() {
i++;
return i;
}
}

@ -60,6 +60,15 @@ public class RCSUtil {
@Autowired
IWcsPlcPropertyService iWcsPlcPropertyService;
@Autowired
PLCReadAndWrite plcReadAndWrite;
@Autowired
ISysParameterService isysParameterService;
@Autowired
IWcsPlcConnectService iWcsPlcConnectService;
@Autowired
PlcInit plcInit;
@ -73,18 +82,9 @@ public class RCSUtil {
public Map<String, String> getHeaderMap() {
Map<String, String> headerMap = new HashMap<>(1);
headerMap.put("authorization", "mrbase64 mrrest:YWRtaW4mYWRtaW4=");
String randomString = usingUUID();
headerMap.put("X-lr-request-id",randomString.substring(0,8));
return headerMap;
}
static String usingUUID() {
UUID randomUUID = UUID.randomUUID();
return randomUUID.toString().replaceAll("-", "");
}
/**
* 创建任务

@ -1,23 +0,0 @@
package com.shkj.wcs.third.rcs.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class CarrierInfoList {
/**
* 状态码
*/
private String carrierType;
private String carrierCode;
/**
* 返回信息
*/
private String layer;
}

@ -7,7 +7,6 @@ import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 发送任务dto
@ -91,8 +90,6 @@ public class RcsCreateTaskDto implements Serializable {
*/
private List<RcsIdList> targetRoute;
private Map<String,Object> extra;

@ -40,6 +40,4 @@ public class RcsIdList implements Serializable {
private String robotType;
private Integer autoStart;
}

@ -22,12 +22,13 @@ public class RcsThirdResult<T> implements Serializable {
/**
* 状态码
*/
private String code;
private int code;
private Boolean result;
/**
* 返回信息
*/
private String message = "";
private String comment = "";
/**
* 数据对象
@ -39,7 +40,7 @@ public class RcsThirdResult<T> implements Serializable {
if (result == null){
return false;
}
if (result.getCode().equals("SUCCESS") ) {
if (result.getCode() == 0) {
return true;
}
return false;

@ -20,7 +20,7 @@ public enum RCSTaskTypeEnum {
/* A_TO_B_AND_PUT(23, "从 A 点顶起托盘搬运至 B 点放下"),
A_TO_B_NO_PUT(24, "从 A 点顶起托盘搬运至 B 点不放下"),*/
PF_LMR_COMMON("SCS002","搬运,一至数个执行步骤");
PF_LMR_COMMON("PF-LMR-COMMON","搬运,一至数个执行步骤");
// A_TO_B_GOODS_MOVE(25, "在负载情况下将 AGV 移动至目标点并放下"),
;

@ -136,16 +136,16 @@ public class WCSUtil {
jsonObject.put("body",incomingTaskRequestBodies);
String json = JSONObject.toJSONString(jsonObject);
log.info("KJ向WZ空托申请参数"+json);
log.info("KJ向WZ入库申请参数"+json);
try {
String res = HttpRequest.post(wcsIncomingTaskRequestUrl)
.body(json)
.execute().body();
log.info("KJ向WZ空托请返回:" + res);
log.info("KJ向WZ入库申请返回:" + res);
return parseThirdRcsResult(res);
} catch (Exception e) {
e.printStackTrace();
log.error("KJ向WZ空托申请 方法出错了 = {}", e.getMessage());
log.error("KJ向WZ入库申请 方法出错了 = {}", e.getMessage());
return WcsResponseVo.error(500,e.getMessage());
}
}

@ -4,5 +4,5 @@ import lombok.Data;
@Data
public class TaskStatusBody {
private Integer taskCount;
private int taskCount;
}

@ -8,18 +8,18 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
public enum AGVTASKStatusEnum {
public enum AGVStatusEnum {
/**
*
*/
start(0, "任务开始 "),
outbin(1, "走出储位 "),
end(2, "任务完成 "),
init("init", "初始化 "),
call("call", "已呼叫 "),
submit("submit", "已提交 "),
;
private Integer value;
private String value;
private String desc;
}

@ -18,14 +18,7 @@ public enum BusinTaskTypeEnum {
/**
* 出库
*/
stockOut("stockOut", "出库"),
/**
* 出库
*/
trayCheck("trayCheck", "入库校验")
stockOut("stockOut", "出库")
;
private String value;

@ -14,22 +14,22 @@ public enum TaskStatusEnum {
/**
* 未下发
*/
wait_put("1", "未下发"),
wait_put("0", "未下发"),
/**
* 执行中1下发成功
*/
wait_callback("2", "执行中"),
wait_callback("1", "执行中"),
/**
* 完成
*/
finished("3", "完成"),
finished("2", "完成"),
/**
* 异常
*/
err("-1", "异常"),
clean("6","已取消"),
clean("3","已取消"),
;
private String value;

Loading…
Cancel
Save