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. 512
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java
  11. 82
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java
  12. 111
      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. 32
      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
  25. 2
      shkj-wms/src/main/resources/mapper/wcs/WcsPlcConnectMapper.xml

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

@ -12,11 +12,11 @@ spring:
druid: druid:
# 主库数据源 # 主库数据源
master: 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 #url: jdbc:mysql://120.77.94.227:3306/mjk_wcs_2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root username: root
#password: CTlTwKgIrRVTsEHqxxx #password: CTlTwKgIrRVTsEHqxxx
password: root # password: 123456
# password: Y4yhl9tbf110 # password: Y4yhl9tbf110
# 从库数据源 # 从库数据源
slave: slave:
@ -88,15 +88,27 @@ spring:
# #连接池最大阻塞等待时间(使用负值表示没有限制) # #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms max-wait: -1ms
third: 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接口 # 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 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 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: druid:
# 主库数据源 # 主库数据源
master: 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 username: root
password: root password: Mjk@2024_Kmv2
# 从库数据源 # 从库数据源
slave: slave:
# 从数据源开关/默认关闭 # 从数据源开关/默认关闭
@ -64,7 +64,7 @@ spring:
# redis 配置 # redis 配置
redis: redis:
# 地址 # 地址
host: 127.0.0.1 host: 192.168.155.145
# 端口,默认为6379 # 端口,默认为6379
port: 6379 port: 6379
# 数据库索引 # 数据库索引
@ -84,14 +84,8 @@ spring:
# #连接池最大阻塞等待时间(使用负值表示没有限制) # #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms max-wait: -1ms
third: ZKWJ:
# 中科WCS接口 # 中科wcs接口
wcsIncomingTrayCheckUrl: http://10.0.152.22:5000/api/toWzWcs/wcsIncomingTrayCheck wcsIncomingTrayCheckUrl: http://172.168.61.200:18990/api/toWzWcs/wcsIncomingTrayCheck
queryTaskStatusUrl: http://10.0.152.22:5000/api/toWzWcs/queryTaskStatus wcsCancelTaskUrl: http://172.168.61.200:18990/api/wms/wmsTask/changeTaskStatus
wcsIncomingTaskRequestUrl: http://10.0.152.22:5000/api/toWzWcs/wcsIncomingTaskRequest wcsPushNewPointUrl: http://172.168.61.200:18990/api/wms/stacker/setStackerTaskNewDestination
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

@ -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 wcsIncomingTaskRequestUrl: http://58.214.39.42:5000/api/toWzWcs/wcsIncomingTaskRequest
uploadWCSTaskStatusUrl: http://58.214.39.42:5000/api/toWzWcs/uploadWCSTaskStatus uploadWCSTaskStatusUrl: http://58.214.39.42:5000/api/toWzWcs/uploadWCSTaskStatus
# agv接口 # agv接口
agvCreateTaskUrl: http://10.0.152.12/rcs/rtas/api/robot/controller/task/submit agvCreateTaskUrl: http://127.0.0.1:8081/rcs/rtas/api/robot/controller/task/submit
agvStatesUrl: http://127.0.0.1:8081/rest/robots/states agvStatesUrl: http://127.0.0.1:8081/api/robot/controller/robot/query
agvCancelTaskUrl: http://10.0.152.12/rcs/rtas/api/robot/controller/task/cancel agvCancelTaskUrl: http://127.0.0.1:8081/rcs/rtas/api/robot/controller/task/cancel
queryAckByTaskUrl: http://127.0.0.1:8081/rest/common/queryAckByTaskId 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 basename: i18n/messages
profiles: profiles:
active: dev active: yun
# 文件上传 # 文件上传
servlet: servlet:
multipart: multipart:

@ -8,7 +8,7 @@
<contextName>logback</contextName> <contextName>logback</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<!-- <property name="log.path" value="/opt/logs/mjk2" />--> <!-- <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 彩色日志格式 --> <!-- 配置格式变量: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.rcs.enums.RCSTaskTypeEnum;
import com.shkj.wcs.third.workbinWcs.WCSUtil; import com.shkj.wcs.third.workbinWcs.WCSUtil;
import com.shkj.wcs.third.workbinWcs.dto.*; import com.shkj.wcs.third.workbinWcs.dto.*;
import com.shkj.wcs.vo.TaskStatusBody;
import com.shkj.wcs.vo.WcsResponseVo; import com.shkj.wcs.vo.WcsResponseVo;
import com.shkj.wcs.domain.BusinDataTask; import com.shkj.wcs.domain.BusinDataTask;
import com.shkj.wms.enums.TaskStatusEnum; import com.shkj.wms.enums.TaskStatusEnum;
@ -59,9 +58,9 @@ public class WcsTaskController {
@Log(title = "查询是否存在出库任务测试接口") @Log(title = "查询是否存在出库任务测试接口")
@PostMapping("/toWzWcs/queryTaskStatus") @PostMapping("/toWzWcs/queryTaskStatus")
@RepeatSubmit @RepeatSubmit
public Integer queryTaskStatus(@RequestBody WcsResponseVo<TaskStatusBody> vo) { public WcsResponseVo queryTaskStatus(@RequestBody WCSQueryTaskStatusBody body) {
Integer taskCount = vo.getBody().get(0).getTaskCount(); WcsResponseVo vo = wcsUtil.queryTaskStatus(body);
return taskCount; return vo;
} }

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

@ -1,7 +1,5 @@
package com.shkj.wcs.plc; 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.constant.RedisConstant;
import com.shkj.common.core.domain.Result; import com.shkj.common.core.domain.Result;
import com.shkj.common.enums.BusinessType; 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.service.IWcsPlcPropertyService;
import com.shkj.wcs.third.rcs.RCSUtil; import com.shkj.wcs.third.rcs.RCSUtil;
import com.shkj.wcs.third.workbinWcs.WCSUtil; 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.WCSQueryTaskStatusBody;
import com.shkj.wcs.third.workbinWcs.dto.WcsIncomingTaskRequestBody; 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.TaskStatusBody;
import com.shkj.wcs.vo.WcsPlcConnectVo; import com.shkj.wcs.vo.WcsPlcConnectVo;
import com.shkj.wcs.vo.WcsResponseVo; import com.shkj.wcs.vo.WcsResponseVo;
@ -70,67 +66,64 @@ public class PlcEventTask {
@Autowired @Autowired
WCSUtil wcsUtil; WCSUtil wcsUtil;
@Scheduled(fixedDelay = 5000) @Scheduled(fixedDelay = 5000)
public void init() { public void init() {
//查询需要连接的PLC,初始化连接对象 //查询需要连接的PLC,初始化连接对象
List<WcsPlcConnectVo> plcList = (List<WcsPlcConnectVo>) redisTemplate.opsForValue().get(RedisConstant.redisPlcListConnect); List<WcsPlcConnectVo> plcList =(List<WcsPlcConnectVo>) redisTemplate.opsForValue().get(RedisConstant.redisPlcListConnect);
if (plcList == null || plcList.size() == 0) { if (plcList == null || plcList.size()==0) {
plcList = iWcsPlcConnectService.selectWcsPlcConnectList(new WcsPlcConnect().setIsActive("1")); plcList = iWcsPlcConnectService.selectWcsPlcConnectList(new WcsPlcConnect().setIsActive("1"));
redisTemplate.opsForValue().set(RedisConstant.redisPlcListConnect, plcList); redisTemplate.opsForValue().set(RedisConstant.redisPlcListConnect,plcList);
} }
for (WcsPlcConnectVo conn : plcList) { for (WcsPlcConnectVo conn : plcList) {
if (conn.getPlcIp().contains("99.151")) { if (conn.getPlcIp().contains("155.180")) {
plcTask(plcInit.getPlcOperate_dps(), conn, conn.getPointTables()); plcTask(plcInit.getPlcOperate_stk(), conn, conn.getPointTables());
} }
if (conn.getPlcIp().contains("99.172")) { if (conn.getPlcIp().contains("155.170")) {
plcTask(plcInit.getPlcOperate_dpj(), conn, conn.getPointTables()); plcTask(plcInit.getPlcOperate_dps(), conn, conn.getPointTables());
} }
} }
} }
//输送线心跳 //输送线心跳
@Scheduled(fixedDelay = 2000) @Scheduled(fixedDelay = 4000)
public void writePlcheartbeatDps() { public void writePlcheartbeatDps() {
//根据连接的plcId获取属性
PlcOperate plcOperate = plcInit.getPlcOperate_dps(); PlcOperate plcOperate = plcInit.getPlcOperate_dps();
if (plcOperate != null) { PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite();
//根据连接的plcId获取属性 Map<String, Object> readPointMap = new HashMap<>();
PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite(); String heartbeat = "DB5100";
Map<String, Object> readPointMap = new HashMap<>(); readPointMap.put(heartbeat, "Boolean");
String heartbeat = "DB5100.0.0"; Map<String, Object> pointMap = plcReadAndWrite.readPlcData(plcOperate, JsonUtil.toJSONString(readPointMap));
readPointMap.put(heartbeat, "Boolean");
Map<String, Object> pointMap = plcReadAndWrite.readPlcData(plcOperate, JsonUtil.toJSONString(readPointMap)); //读取心跳,并判断是写入true还是false;
Boolean heartbeatV = false;
//读取心跳,并判断是写入true还是false;
Boolean heartbeatV = false; if (pointMap.containsKey(heartbeat)) {
heartbeatV = Boolean.valueOf(pointMap.get(heartbeat).toString());
if (pointMap.containsKey(heartbeat)) { }
heartbeatV = Boolean.valueOf(pointMap.get(heartbeat).toString()); heartbeatV = (heartbeatV == true) ? false : true;
} Map<String, Object> writeHbMap = new HashMap<>(1);
//heartbeatV = (heartbeatV == true) ? false : true; writeHbMap.put("Boolean", heartbeatV);
Map<String, Object> writeHbMap = new HashMap<>(1); Map<String, Object> allHbMap = new HashMap<>(1);
writeHbMap.put("Boolean", heartbeatV); allHbMap.put(heartbeat, writeHbMap);
Map<String, Object> allHbMap = new HashMap<>(1); Boolean heartType = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allHbMap));
allHbMap.put("DB5110.0.0", writeHbMap); if (!heartType) {
Boolean heartType = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allHbMap)); log.info("dps心跳写入失败,重连服务器");
if (!heartType) { plcInit.connect();
log.info("dps心跳写入失败,重连服务器");
plcInit.connect();
}
} }
} }
//叠盘机心跳 //堆垛机心跳
@Scheduled(fixedDelay = 2000) //@Scheduled(fixedDelay = 4000)
public void writePlcheartbeatStk() { public void writePlcheartbeatStk() {
//根据连接的plcId获取属性 //根据连接的plcId获取属性
PlcOperate plcOperate = plcInit.getPlcOperate_dpj(); PlcOperate plcOperate = plcInit.getPlcOperate_stk();
if (plcOperate != null) {
PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite(); PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite();
Map<String, Object> readPointMap = new HashMap<>(); Map<String, Object> readPointMap = new HashMap<>();
String heartbeat = "DB5100.0.0"; String heartbeat = "DB20.0.4";
readPointMap.put(heartbeat, "Boolean"); readPointMap.put(heartbeat, "Boolean");
Map<String, Object> pointMap = plcReadAndWrite.readPlcData(plcOperate, JsonUtil.toJSONString(readPointMap)); Map<String, Object> pointMap = plcReadAndWrite.readPlcData(plcOperate, JsonUtil.toJSONString(readPointMap));
@ -144,13 +137,12 @@ public class PlcEventTask {
Map<String, Object> writeHbMap = new HashMap<>(1); Map<String, Object> writeHbMap = new HashMap<>(1);
writeHbMap.put("Boolean", heartbeatV); writeHbMap.put("Boolean", heartbeatV);
Map<String, Object> allHbMap = new HashMap<>(1); 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)); Boolean heartType = plcReadAndWrite.execWrite(plcOperate, JsonUtil.toJSONString(allHbMap));
if (!heartType) { if (!heartType) {
log.info("stk心跳写入失败,重连服务器"); log.info("stk心跳写入失败,重连服务器");
plcInit.connect(); plcInit.connect();
} }
}
} }
public void plcTask(PlcOperate plcOperate, WcsPlcConnectVo conn, String pointTables) { public void plcTask(PlcOperate plcOperate, WcsPlcConnectVo conn, String pointTables) {
@ -159,7 +151,7 @@ public class PlcEventTask {
//根据连接的plcId获取属性 //根据连接的plcId获取属性
PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite(); PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite();
Map<String, Object> pointMap = plcReadAndWrite.readPlcData(plcOperate, pointTables); 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); List<WcsPlcProperty> propertyList = (List<WcsPlcProperty>) redisTemplate.opsForValue().get(RedisConstant.redisPlcProperty + plcId);
if (propertyList == null || propertyList.size() == 0) { if (propertyList == null || propertyList.size() == 0) {
@ -169,17 +161,13 @@ public class PlcEventTask {
// 设备类型:2输送线 1 堆垛机 // 设备类型:2输送线 1 堆垛机
switch (conn.getDevType()) { switch (conn.getDevType()) {
//输送线 //输送线
case "1":
dpsRealTimeTask(propertyList, pointMap, plcReadAndWrite, plcOperate);
break;
case "2": case "2":
dpjRealTimeTask(propertyList, pointMap, plcReadAndWrite, plcOperate); dpsRealTimeTask(propertyList, pointMap, plcReadAndWrite, plcOperate);
break; break;
default: default:
log.info("无匹配的设备类型"); log.info("无匹配的设备类型");
break; break;
} }
} }
public void dpsRealTimeTask(List<WcsPlcProperty> propertyList, Map<String, Object> pointMap, PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) { public void dpsRealTimeTask(List<WcsPlcProperty> propertyList, Map<String, Object> pointMap, PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) {
@ -202,12 +190,12 @@ public class PlcEventTask {
String reqInCfmSeriaVt = ""; String reqInCfmSeriaVt = "";
//请求入库返回条码 //请求入库返回条码
String reqInCfmBarcod = ""; String reqInCfmBarcod= "";
String reqInCfmBarcodVt = ""; String reqInCfmBarcodVt= "";
//返回去向 //返回去向
String reqInDest = ""; String reqInDest = "";
String reqInDestVt = ""; String reqInDestVt= "";
/** /**
* 空托 * 空托
@ -233,33 +221,12 @@ public class PlcEventTask {
String rptOutCfmSeriaVt = ""; String rptOutCfmSeriaVt = "";
//出口上报条码确认 //出口上报条码确认
String rptOutCfmBarcod = ""; String rptOutCfmBarcod= "";
String rptOutCfmBarcodVt = ""; String rptOutCfmBarcodVt= "";
//出口上报返回信息 //出口上报返回信息
String retOut = ""; String retOut = "";
String retOutVt = ""; 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 retInOutSwit = "";
String retInOutSwitVt = ""; String retInOutSwitVt = "";
/**
* 叠盘机
*/
//叠盘机完成
String stk = "";
//叠盘机返回
String retStk = "";
String retStkVt = "";
for (WcsPlcProperty plcProperty : propertyList) { for (WcsPlcProperty plcProperty : propertyList) {
@ -279,91 +254,79 @@ public class PlcEventTask {
//请求分配 //请求分配
if (pointType.equals("reqInSeria")) { if (pointType.equals("reqInSeria")) {
reqInSeria = plcProperty.getAddress(); reqInSeria = plcProperty.getAddress();
} else if (pointType.equals("reqInBarcod")) { } else if (pointType.equals("reqInBarcod")) {
reqInBarcod = plcProperty.getAddress(); reqInBarcod = plcProperty.getAddress();
} else if (pointType.equals("reqInLength")) { } else if (pointType.equals("reqInLength")) {
//外形检测
reqInLength = plcProperty.getAddress(); reqInLength = plcProperty.getAddress();
reqInLength = plcProperty.getValueType(); reqInLength = plcProperty.getPointType();
} else if (pointType.equals("reqInCfmSeria")) { } else if (pointType.equals("reqInCfmSeria")) {
reqInCfmSeria = plcProperty.getAddress(); reqInCfmSeria = plcProperty.getAddress();
reqInCfmSeriaVt = plcProperty.getValueType(); reqInCfmSeriaVt = plcProperty.getPointType();
} else if (pointType.equals("reqInCfmBarcod")) { } else if (pointType.equals("reqInCfmBarcod")) {
reqInCfmBarcod = plcProperty.getAddress(); reqInCfmBarcod = plcProperty.getAddress();
reqInCfmBarcodVt = plcProperty.getValueType(); reqInCfmBarcodVt = plcProperty.getPointType();
} else if (pointType.equals("reqInDest")) { } else if (pointType.equals("reqInDest")) {
reqInDest = plcProperty.getAddress(); reqInDest = plcProperty.getAddress();
reqInDestVt = plcProperty.getValueType(); reqInDestVt = plcProperty.getPointType();
} else if (pointType.equals("reqEmpty")) { } else if (pointType.equals("reqEmpty")) {
reqEmpty = plcProperty.getAddress(); reqEmpty = plcProperty.getAddress();
} else if (pointType.equals("reqCfm")) { } else if (pointType.equals("reqCfm")) {
reqCfm = plcProperty.getAddress(); reqCfm = plcProperty.getAddress();
reqCfmVt = plcProperty.getValueType(); reqCfmVt = plcProperty.getPointType();
} else if (pointType.equals("rptOutSeria")) { } else if (pointType.equals("rptOutSeria")) {
rptOutSeria = plcProperty.getAddress(); rptOutSeria = plcProperty.getAddress();
} else if (pointType.equals("rptOutBarcod")) { } else if (pointType.equals("rptOutBarcod")) {
rptOutBarcod = plcProperty.getAddress(); rptOutBarcod = plcProperty.getAddress();
} else if (pointType.equals("rptOutCfmSeria")) { } else if (pointType.equals("rptOutCfmSeria")) {
rptOutCfmSeria = plcProperty.getAddress(); rptOutCfmSeria = plcProperty.getAddress();
rptOutCfmSeriaVt = plcProperty.getValueType(); rptOutCfmSeriaVt = plcProperty.getPointType();
} else if (pointType.equals("rptOutCfmBarcod")) { } else if (pointType.equals("rptOutCfmBarcod")) {
rptOutCfmBarcod = plcProperty.getAddress(); rptOutCfmBarcod = plcProperty.getAddress();
rptOutCfmBarcodVt = plcProperty.getValueType(); rptOutCfmBarcodVt = plcProperty.getPointType();
} else if (pointType.equals("retOut")) { } else if (pointType.equals("retOut")) {
retOut = plcProperty.getAddress(); retOut = plcProperty.getAddress();
retOutVt = plcProperty.getValueType(); retOutVt = plcProperty.getPointType();
} else if (pointType.equals("inOutSwit")) { } else if (pointType.equals("inOutSwit")) {
inOutSwit = plcProperty.getAddress(); inOutSwit = plcProperty.getAddress();
} else if (pointType.equals("retInOutSwit")) { } else if (pointType.equals("retInOutSwit")) {
retInOutSwit = plcProperty.getAddress(); retInOutSwit = plcProperty.getAddress();
retInOutSwitVt = plcProperty.getValueType(); retInOutSwitVt = plcProperty.getPointType();
} else if (pointType.equals("rptOutSeria1")) { } else if (pointType.equals("stk")) {
rptOutSeria1 = plcProperty.getAddress(); stk = plcProperty.getAddress();
} else if (pointType.equals("rptOutBarcod1")) { } else if (pointType.equals("retStk")) {
rptOutBarcod1 = plcProperty.getAddress(); retStk = plcProperty.getAddress();
} else if (pointType.equals("rptOutCfmSeria1")) { retStkVt = plcProperty.getPointType();
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();
} }
} }
//扫码处入库申请 //扫码处入库申请
//&& Boolean.valueOf(pointMap.get(reqInSeria).toString()) if (pointMap.containsKey(reqInSeria) && Boolean.valueOf(pointMap.get(reqInSeria).toString())) {
if (pointMap.containsKey(reqInSeria) && !pointMap.get(reqInSeria).equals("0")) {
//读取请求序列号内容 //读取请求序列号内容
String bCR01SeriaV1 = Objects.toString(pointMap.get(reqInSeria), ""); Integer bCR01SeriaV = (Integer) pointMap.get(reqInSeria);
Integer bCR01SeriaV = 0;
if(!bCR01SeriaV1.isEmpty()){
bCR01SeriaV = Integer.parseInt(bCR01SeriaV1.toString());
}
//读取托盘条码内容 //读取托盘条码内容
String barcodeValueOne = Objects.toString(pointMap.get(reqInBarcod), ""); String barcodeValueOne = pointMap.get(reqInBarcod).toString();
String s = barcodeValueOne.replaceAll("[^A-Za-z0-9]", ""); log.info("扫码处入库申请时,读取的条码内容:" + barcodeValueOne);
log.info("扫码处入库申请时,读取的条码内容:" + s);
//根据托盘条码返回正在执行的任务号 //根据托盘条码返回正在执行的任务号
WcsIncomingTrayCheckBody body = new WcsIncomingTrayCheckBody(); WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G1-00-00-1001"); body.setStation("");
body.setTaskType(TaskTypeEnum.In.getValue()); body.setTaskType(TaskTypeEnum.In.getValue());
body.setBussinessType(BusinTaskTypeEnum.trayCheck.getValue()); body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue());
body.setTrayCode(s); body.setTrayCode(barcodeValueOne);
body.setCreateDt(new Date().toString()); 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()); log.info("扫码处入库申请wz-wcs返回:" + vo.getHeader());
Map<String, Object> allMap = new HashMap<>(1); Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> seriaMap = new HashMap<>(1); Map<String, Integer> seriaMap = new HashMap<>(1);
seriaMap.put(reqInCfmSeriaVt, bCR01SeriaV); seriaMap.put(reqInCfmSeriaVt,bCR01SeriaV );
allMap.put(reqInCfmSeria, seriaMap); allMap.put(reqInCfmSeria, seriaMap);
// Map<String, String> barcodMap = new HashMap<>(1); Map<String, String> barcodMap = new HashMap<>(1);
// barcodMap.put(reqInCfmBarcod00000Vt, s1); barcodMap.put(reqInCfmBarcodVt, barcodeValueOne);
// allMap.put(reqInCfmBarcod, barcodMap); allMap.put(reqInCfmBarcod, barcodMap);
//成功直行 失败回退 //成功直行 失败回退
if (Result.isOk(vo.getHeader().getMsgCode())) { if (Result.isOk(vo.getHeader().getMsgCode())) {
Map<String, Integer> destMap = new HashMap<>(1); Map<String, Integer> destMap = new HashMap<>(1);
@ -371,40 +334,23 @@ public class PlcEventTask {
allMap.put(reqInDest, destMap); allMap.put(reqInDest, destMap);
} else { } else {
Map<String, Integer> destMap = new HashMap<>(1); Map<String, Integer> destMap = new HashMap<>(1);
destMap.put(reqInDestVt, 1); destMap.put(reqInDestVt, 2);
allMap.put(reqInDest, destMap); allMap.put(reqInDest, destMap);
} }
String allMapJson = JsonUtil.toJSONString(allMap); String allMapJson = JsonUtil.toJSONString(allMap);
log.info("扫码处入库申请时,给输送线写命令数据:{}", allMapJson); log.info("扫码处入库申请时,给输送线写命令数据:{}",allMapJson);
Boolean reqInBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); Boolean reqInBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info("扫码处入库申请时,写入的命令返回结果:" + reqInBoolean.toString()); 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(); WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G1-00-00-1002"); body.setStation("空托处");
body.setTaskType(TaskTypeEnum.Out.getValue()); body.setTaskType(TaskTypeEnum.Out.getValue());
body.setBussinessType(BusinTaskTypeEnum.stockOut.getValue()); body.setBussinessType(BusinTaskTypeEnum.stockOut.getValue());
body.setCreateDt(new Date().toString()); body.setCreateDt(new Date().toString());
//调用agv接口查询库区状态 //调用agv接口查询库区状态
Map<String, Object> map1 = new HashMap<>(); Object[] areaStatus = {};
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));
body.setAreaStatus(areaStatus); body.setAreaStatus(areaStatus);
WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body);
log.info("空托申请wz-wcs返回:" + vo.getHeader()); log.info("空托申请wz-wcs返回:" + vo.getHeader());
@ -412,251 +358,110 @@ public class PlcEventTask {
Map<String, Integer> reqMap = new HashMap<>(1); Map<String, Integer> reqMap = new HashMap<>(1);
if (Result.isOk(vo.getHeader().getMsgCode())) { if (Result.isOk(vo.getHeader().getMsgCode())) {
reqMap.put(reqCfmVt, 1); reqMap.put(retOutVt,1);
} else { } else {
reqMap.put(reqCfmVt, 2); reqMap.put(retOutVt,0);
} }
allMap.put(reqCfm, reqMap); allMap.put(retOut, reqMap);
String allMapJson = JsonUtil.toJSONString(allMap); String allMapJson = JsonUtil.toJSONString(allMap);
log.info("空托申请时,给输送线写命令数据:{}", allMapJson); log.info("空托申请时,给输送线写命令数据:{}",allMapJson);
Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info("空托申请时,写入的命令返回结果:" + bCR01Boolean.toString()); log.info("空托申请时,写入的命令返回结果:"+bCR01Boolean.toString());
} }
//实盘出口上报 //实盘出口上报
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 = (Integer) pointMap.get(rptOutSeria);
Integer outSeria = 0;
if(!IntegeroutSeria.isEmpty()){
outSeria = Integer.parseInt(IntegeroutSeria.toString());
}
//读取托盘条码内容 //读取托盘条码内容
String barcodeValueOne = Objects.toString(pointMap.get(rptOutBarcod), ""); String barcodeValueOne = pointMap.get(rptOutBarcod).toString();
String s = barcodeValueOne.replaceAll("[^A-Za-z0-9]", ""); log.info("实盘出口上报时,读取的条码内容:" + barcodeValueOne);
log.info("实盘出口上报时,读取的条码内容:" + s);
//调用wz-wcs接口 //调用wz-wcs接口
WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G2-00-00-2002"); body.setStation("出口上报处");
body.setTaskType(TaskTypeEnum.In.getValue()); body.setTaskType(TaskTypeEnum.In.getValue());
body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue()); body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue());
body.setTrayCode(s); body.setTrayCode(barcodeValueOne);
body.setCreateDt(new Date().toString()); body.setCreateDt(new Date().toString());
//调用agv接口查询库区状态 //调用agv接口查询库区状态
Map<String, Object> map1 = new HashMap<>(); Object[] areaStatus = {};
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); body.setAreaStatus(areaStatus);
WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body);
log.info("agv扫码处申请wz-wcs返回:" + vo.getHeader()); log.info("agv扫码处申请wz-wcs返回:" + vo.getHeader());
Map<String, Object> allMap = new HashMap<>(1); Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> seriaMap = new HashMap<>(1); Map<String, Integer> seriaMap = new HashMap<>(1);
seriaMap.put(rptOutCfmSeriaVt, outSeria); seriaMap.put(rptOutCfmSeriaVt,outSeria );
allMap.put(rptOutCfmSeria, seriaMap); allMap.put(rptOutCfmSeria, seriaMap);
// Map<String, String> barcodMap = new HashMap<>(1); Map<String, String> barcodMap = new HashMap<>(1);
// barcodMap.put(rptOutCfmBarcodVt, barcodeValueOne); barcodMap.put(rptOutCfmBarcodVt, barcodeValueOne);
// allMap.put(rptOutCfmBarcod, barcodMap); allMap.put(rptOutCfmBarcod, barcodMap);
Map<String, Integer> reqMap = new HashMap<>(1); Map<String, Integer> reqMap = new HashMap<>(1);
if (Result.isOk(vo.getHeader().getMsgCode())) { if (Result.isOk(vo.getHeader().getMsgCode())) {
reqMap.put(retOutVt, 1); reqMap.put(reqCfmVt,1);
} else { } else {
reqMap.put(retOutVt, 1); reqMap.put(reqCfmVt,0);
} }
allMap.put(retOut, 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(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, Integer> reqMap = new HashMap<>(1);
if (Result.isOk(vo.getHeader().getMsgCode())) {
reqMap.put(retOutVt1, 1);
} else {
reqMap.put(retOutVt1, 1);
}
allMap.put(retOut1, reqMap);
String allMapJson = JsonUtil.toJSONString(allMap); String allMapJson = JsonUtil.toJSONString(allMap);
log.info("出口上报时,给输送线写命令数据:{}", allMapJson); log.info("出口上报时,给输送线写命令数据:{}",allMapJson);
Boolean rptOutBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); Boolean rptOutBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info("出口上报时,写入的命令返回结果:" + rptOutBoolean.toString()); 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(); WCSQueryTaskStatusBody body = new WCSQueryTaskStatusBody();
body.setDestination("SC-G1-00-00-1002"); body.setDestination("出入库切换点位");
body.setTaskType("1"); body.setTaskType("1");
body.setTrayType("2"); body.setTrayType("2");
WcsResponseVo<TaskStatusBody> vo = JSON.parseObject( WcsResponseVo<TaskStatusBody> vo = wcsUtil.queryTaskStatus(body);
JSON.toJSONString(wcsUtil.queryTaskStatus(body)), log.info("出入库切换时申请wz-wcs返回:" + vo.getHeader());
new TypeReference<WcsResponseVo<TaskStatusBody>>() {}
);
Integer taskCount = vo.getBody().get(0).getTaskCount();
Map<String, Object> allMap = new HashMap<>(1); Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> reqMap = new HashMap<>(1); Map<String, Integer> reqMap = new HashMap<>(1);
if (Result.isOk(vo.getHeader().getMsgCode())) { if (Result.isOk(vo.getHeader().getMsgCode())) {
if (taskCount == 0) { int taskCount = vo.getBody().get(0).getTaskCount();
reqMap.put(retInOutSwitVt, 2); if (taskCount == 0){
} else { reqMap.put(retInOutSwitVt,2);
reqMap.put(retInOutSwitVt, 1); }else {
reqMap.put(retInOutSwitVt,1);
} }
} else { } else {
reqMap.put(retInOutSwitVt, 1); reqMap.put(retInOutSwitVt,1);
} }
allMap.put(retInOutSwit, reqMap); allMap.put(retInOutSwit, reqMap);
String allMapJson = JsonUtil.toJSONString(allMap); String allMapJson = JsonUtil.toJSONString(allMap);
log.info("出入库切换时,给输送线写命令数据:{}", allMapJson); log.info("出入库切换时,给输送线写命令数据:{}",allMapJson);
Boolean inOutSwitBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); Boolean inOutSwitBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info("出入库切换时,写入的命令返回结果:" + inOutSwitBoolean.toString()); 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(); WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G2-00-00-2003"); body.setStation("叠盘机点位");
body.setTaskType(TaskTypeEnum.In.getValue()); body.setTaskType(TaskTypeEnum.In.getValue());
body.setTrayCode("TP4077566601");
body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue()); body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue());
body.setCreateDt(new Date().toString()); body.setCreateDt(new Date().toString());
//调用agv接口查询库区状态 //调用agv接口查询库区状态
Map<String, Object> map1 = new HashMap<>(); Object[] areaStatus = {};
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));
body.setAreaStatus(areaStatus); body.setAreaStatus(areaStatus);
WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); 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, Object> allMap = new HashMap<>(1);
Map<String, Integer> reqMap = new HashMap<>(1); Map<String, Integer> reqMap = new HashMap<>(1);
if (Result.isOk(vo.getHeader().getMsgCode())) { if (Result.isOk(vo.getHeader().getMsgCode())) {
reqMap.put(retDpjVt, 1); reqMap.put(retStkVt,1);
} else { } else {
reqMap.put(retDpjVt, 2); reqMap.put(retStkVt,0);
} }
allMap.put(retDpj, reqMap); allMap.put(retStk, reqMap);
String allMapJson = JsonUtil.toJSONString(allMap); String allMapJson = JsonUtil.toJSONString(allMap);
log.info("叠盘机叠满上报时,给输送线写命令数据:{}", allMapJson); log.info("叠盘机叠满上报时,给输送线写命令数据:{}",allMapJson);
Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info("叠盘机叠满上报时,写入的命令返回结果:" + bCR01Boolean.toString()); log.info("叠盘机叠满上报时,写入的命令返回结果:"+bCR01Boolean.toString());
} }
} catch (Exception e) { } catch (Exception e) {
@ -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.service.IWcsPlcConnectService;
import com.shkj.wcs.vo.WcsPlcConnectVo; import com.shkj.wcs.vo.WcsPlcConnectVo;
import lombok.extern.slf4j.Slf4j; 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.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -23,10 +20,10 @@ import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
@Component("PlcInit") @Component("PlcInit")
public class PlcInit implements ApplicationListener<ContextRefreshedEvent> { public class PlcInit {
private PlcOperate plcOperate_dps; private PlcOperate plcOperate_dps;
private PlcOperate plcOperate_dpj; private PlcOperate plcOperate_stk;
@Resource @Resource
IWcsPlcConnectService iWcsPlcConnectService; IWcsPlcConnectService iWcsPlcConnectService;
@ -35,64 +32,45 @@ public class PlcInit implements ApplicationListener<ContextRefreshedEvent> {
RedisTemplate redisTemplate; RedisTemplate redisTemplate;
private ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); private ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
// @PostConstruct
@Override public void init(){
public void onApplicationEvent(ContextRefreshedEvent event) { log.info("初始化连接对象");
//root application context 没有parent executorService.scheduleWithFixedDelay(
ApplicationContext context = event.getApplicationContext().getParent(); () -> reconnect(), 200, 200, TimeUnit.SECONDS
if (context == null) { );
log.info("初始化连接对象"); connect();
executorService.scheduleWithFixedDelay(
() -> reconnect(), 20, 20, TimeUnit.SECONDS
);
connect();
}
} }
public void connect() { public void connect(){
//查询需要连接的PLC,初始化连接对象 //查询需要连接的PLC,初始化连接对象
List<WcsPlcConnectVo> plcList = iWcsPlcConnectService.selectWcsPlcConnectList(new WcsPlcConnect().setIsActive("1")); List<WcsPlcConnectVo> plcList = iWcsPlcConnectService.selectWcsPlcConnectList(new WcsPlcConnect().setIsActive("1"));
if (plcList.size() == 0) { if (plcList.size() == 0) {
return; return;
} }
//初始化系統时,把plc点位信息写入Redis //初始化系統时,把plc点位信息写入Redis
redisTemplate.opsForValue().set(RedisConstant.redisPlcListConnect, plcList); redisTemplate.opsForValue().set(RedisConstant.redisPlcListConnect,plcList);
for (WcsPlcConnectVo conn : plcList) { for (WcsPlcConnectVo conn : plcList) {
redisTemplate.opsForValue().set(RedisConstant.redisPlcConnect + conn.getDevCode(), conn); redisTemplate.opsForValue().set(RedisConstant.redisPlcConnect+conn.getDevCode(),conn);
PlcHelper plc = new PlcHelper(conn.getPlcType(), conn.getPlcIp(), conn.getPlcFactory(), conn.getPort()); PlcHelper plc = new PlcHelper(conn.getPlcType(), conn.getPlcIp(), conn.getPlcFactory(), conn.getPort());
if (conn.getPlcIp().contains("99.172")) { if (conn.getPlcIp().contains("155.180")){
plcOperate_dpj = plc.getAutomation(); plcOperate_stk = plc.getAutomation();
if (plcOperate_dpj != null) { OperateResult connect = plcOperate_stk.connect();
OperateResult connect = plcOperate_dpj.connect(); if (connect.IsSuccess){
if (connect.IsSuccess) { log.info(conn.getPlcIp()+"连接成功");
log.info(conn.getPlcIp() + "dpj连接成功"); }else {
} else { log.info(conn.getPlcIp()+"连接失败");
log.info(conn.getPlcIp() + "dpj连接失败");
}
} }
} }
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(){
private void reconnect() { if (!plcOperate_dps.isConnectd()){
if (plcOperate_dps==null||!plcOperate_dps.isConnectd()) { //connect();
connect();
} }
if (plcOperate_dpj==null||!plcOperate_dpj.isConnectd()) { if (!plcOperate_stk.isConnectd()){
connect(); //connect();
} }
} }
@ -100,16 +78,16 @@ public class PlcInit implements ApplicationListener<ContextRefreshedEvent> {
return plcOperate_dps; return plcOperate_dps;
} }
public PlcOperate getPlcOperate_dpj() { public PlcOperate getPlcOperate_stk() {
return plcOperate_dpj; return plcOperate_stk;
} }
public PlcOperate getPlcOperateByIp(String plcIp) { public PlcOperate getPlcOperateByIp(String plcIp){
if (plcIp.contains("99.172")) { if (plcIp.contains("155.180")){
return plcOperate_dpj; return plcOperate_stk;
} }
if (plcIp.contains("99.151")) { if (plcIp.contains("155.170")){
return plcOperate_dps; return plcOperate_dps;
} }
return null; return null;

@ -12,12 +12,9 @@ import com.shkj.wcs.domain.BusinDataTask;
import com.shkj.wcs.domain.WcsPlcProperty; import com.shkj.wcs.domain.WcsPlcProperty;
import com.shkj.wcs.mapper.BusinDataTaskMapper; import com.shkj.wcs.mapper.BusinDataTaskMapper;
import com.shkj.wcs.mapper.WcsPlcPropertyMapper; import com.shkj.wcs.mapper.WcsPlcPropertyMapper;
import com.shkj.wcs.plc.PlcEventTask;
import com.shkj.wcs.service.IBusinDataTaskService; import com.shkj.wcs.service.IBusinDataTaskService;
import com.shkj.wcs.service.IWcsPlcPropertyService; 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.RCSUtil;
import com.shkj.wcs.third.rcs.dto.CarrierInfoList;
import com.shkj.wcs.third.rcs.dto.RcsCancelTaskDto; import com.shkj.wcs.third.rcs.dto.RcsCancelTaskDto;
import com.shkj.wcs.third.rcs.dto.RcsCreateTaskDto; import com.shkj.wcs.third.rcs.dto.RcsCreateTaskDto;
import com.shkj.wcs.third.rcs.dto.RcsIdList; 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.third.workbinWcs.dto.*;
import com.shkj.wcs.vo.WcsResponseVo; import com.shkj.wcs.vo.WcsResponseVo;
import com.shkj.wms.enums.TaskStatusEnum; import com.shkj.wms.enums.TaskStatusEnum;
import com.shkj.wms.utils.JsonUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.exceptions.TooManyResultsException; import org.apache.ibatis.exceptions.TooManyResultsException;
import org.springframework.beans.factory.annotation.Autowired; 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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** /**
* PLC连接属性Service业务层处理 * PLC连接属性Service业务层处理
@ -57,9 +55,6 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
@Autowired @Autowired
private RCSUtil rcsUtil; private RCSUtil rcsUtil;
@Autowired
private PlcEventTask plcEventTask;
@Override @Override
public WcsResponseVo doTaskGeneratePickTask(WcsCreateTaskDto bo) { public WcsResponseVo doTaskGeneratePickTask(WcsCreateTaskDto bo) {
if (bo != null) { if (bo != null) {
@ -80,7 +75,6 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
BusinDataTask one = this.getOne(lqwDataTask); BusinDataTask one = this.getOne(lqwDataTask);
if (dataChange.equals("1")) { if (dataChange.equals("1")) {
if (one != null) { if (one != null) {
log.info("该托盘" + trayCode + "存在未完成的任务");
return WcsResponseVo.error(500, "该托盘" + trayCode + "存在未完成的任务"); return WcsResponseVo.error(500, "该托盘" + trayCode + "存在未完成的任务");
} }
BusinDataTask businDataTask = new BusinDataTask(); BusinDataTask businDataTask = new BusinDataTask();
@ -99,10 +93,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
//调用下游接口下任务 //调用下游接口下任务
log.info("任务储存成功!"); log.info("任务储存成功!");
RcsCreateTaskDto rcsCreateTaskDto = new RcsCreateTaskDto(); RcsCreateTaskDto rcsCreateTaskDto = new RcsCreateTaskDto();
rcsCreateTaskDto.setTaskType("B12"); rcsCreateTaskDto.setTaskType(RCSTaskTypeEnum.PF_LMR_COMMON.getValue());
if(taskType.equals("1")){
rcsCreateTaskDto.setTaskType("B13");
}
rcsCreateTaskDto.setRobotTaskCode(businDataTask.getTaskCode()); rcsCreateTaskDto.setRobotTaskCode(businDataTask.getTaskCode());
if (!businDataTask.getPriority().isEmpty()) { if (!businDataTask.getPriority().isEmpty()) {
rcsCreateTaskDto.setInitPriority(Integer.parseInt(businDataTask.getPriority())); rcsCreateTaskDto.setInitPriority(Integer.parseInt(businDataTask.getPriority()));
@ -110,93 +101,64 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
List<RcsIdList> rcsIdLists = new ArrayList<>(); List<RcsIdList> rcsIdLists = new ArrayList<>();
for (int i = 1; i <= 2; i++) { for (int i = 1; i <= 2; i++) {
RcsIdList rcsIdList = new RcsIdList(); RcsIdList rcsIdList = new RcsIdList();
rcsIdList.setType("SITE");
if (i == 1) { if (i == 1) {
rcsIdList.setSeq(0); rcsIdList.setType("ZONE");
rcsIdList.setCode(businDataTask.getFromSide()); rcsIdList.setCode(businDataTask.getFromSide());
rcsIdList.setOperation(RCSOperation.OT_COLLECT.getValue()); 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.setOperation(RCSOperation.OT_DELIVERY.getValue());
} }
rcsIdList.setAutoStart(1); rcsIdList.setType("ZONE");
rcsIdList.setCode(businDataTask.getToSide());
rcsIdList.setOperation(RCSOperation.OT_DELIVERY.getValue());
rcsIdLists.add(rcsIdList); rcsIdLists.add(rcsIdList);
} }
rcsCreateTaskDto.setTargetRoute(rcsIdLists); 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); Result result = rcsUtil.rcsCreateTask(rcsCreateTaskDto);
if (!Result.isOk(result)) { if (!Result.isOk(result)){
return WcsResponseVo.error(200, "接受成功但给rcs下发任务失败"); 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回传任务失败");
}
}
} }
//任务取消 //任务取消
} else if (dataChange.equals("2")) { } else if (dataChange.equals("2")) {
if (one == null) { if (one == null) {
return WcsResponseVo.error(500, "未查询到该托盘" + trayCode + "存在未完成的任务"); return WcsResponseVo.error(500, "未查询到该托盘" + trayCode + "存在未完成的任务");
} }
one.setTaskStatus("6");
this.updateById(one);
//推送给下游 //推送给下游
RcsCancelTaskDto rcsCancelTaskDto = new RcsCancelTaskDto(); RcsCancelTaskDto rcsCancelTaskDto = new RcsCancelTaskDto();
rcsCancelTaskDto.setRobotTaskCode(taskId); rcsCancelTaskDto.setRobotTaskCode(taskId);
// if (one.getTaskStatus().equals(TaskStatusEnum.wait_put.getValue())) { if(one.getTaskStatus().equals(TaskStatusEnum.wait_put.getValue())){
// //软取消 //软取消
// rcsCancelTaskDto.setCancelType("CANCEL"); rcsCancelTaskDto.setCancelType("CANCEL");
// } else { }else{
//硬取消(人工介入) //硬取消(人工介入)
rcsCancelTaskDto.setCancelType("DROP"); rcsCancelTaskDto.setCancelType("DROP");
}
// }
Result result = rcsUtil.rcsTaskCancel(rcsCancelTaskDto); Result result = rcsUtil.rcsTaskCancel(rcsCancelTaskDto);
if (!Result.isOk(result)) { if (!Result.isOk(result)){
return WcsResponseVo.error(500, "给rcs取消任务失败"); return WcsResponseVo.error(200,"给rcs取消任务失败");
} }
one.setTaskStatus("3");
this.updateById(one);
} }
return WcsResponseVo.success(); return WcsResponseVo.success();
} }
} }
} else { }else{
log.info("中科下发任务请求数据为空"); log.info("中科下发任务请求数据为空");
} }
return WcsResponseVo.error(500, "请求失败请检查参数"); return WcsResponseVo.error(500,"请求失败请检查参数");
} }
@Override @Override
public RcsResponseVo rcsFeedbackTask(AGVFeedbackBo bo) { public RcsResponseVo rcsFeedbackTask(AGVFeedbackBo bo) {
log.info("agv任务执行过程回馈数据:" + JSONObject.toJSONString(bo));
String robotTaskCode = bo.getRobotTaskCode(); String robotTaskCode = bo.getRobotTaskCode();
ExtraData.Values values = bo.getExtra().getValues(); ExtraData.Values values = bo.getExtra().getValues();
String carrierCode = values.getCarrierCode(); String carrierCode = values.getCarrierCode();
String method = values.getMethod(); String method = values.getMethod();
String slotName = values.getSlotName(); String slotName = values.getSlotName();
LambdaQueryWrapper<BusinDataTask> queryWrapper = new LambdaQueryWrapper<BusinDataTask>() LambdaQueryWrapper<BusinDataTask> queryWrapper = new LambdaQueryWrapper<BusinDataTask>()
.eq(BusinDataTask::getTaskCode, robotTaskCode); .eq(BusinDataTask::getTaskCode, robotTaskCode)
// .eq(BusinDataTask::getContainerCode, carrierCode); .eq(BusinDataTask::getContainerCode, carrierCode);
BusinDataTask businDataTask; BusinDataTask businDataTask;
try { try {
businDataTask = iBusinDataTaskService.getOne(queryWrapper, true); businDataTask = iBusinDataTaskService.getOne(queryWrapper, true);
@ -210,30 +172,21 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
return RcsResponseVo.error("未找到对应任务"); return RcsResponseVo.error("未找到对应任务");
} }
String taskType = businDataTask.getTaskType();
switch (method) { switch (method) {
case "start": case "start":
businDataTask.setTaskStarttime(new Date());
businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue());
break;
case "outbin": case "outbin":
businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue()); businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue());
break; break;
case "end": case "end":
businDataTask.setTaskStatus(TaskStatusEnum.finished.getValue()); businDataTask.setTaskStatus(TaskStatusEnum.finished.getValue());
businDataTask.setDestination(slotName); businDataTask.setDestination(slotName);
businDataTask.setTaskEntime(new Date());
break;
case "cancel":
businDataTask.setTaskStatus(TaskStatusEnum.clean.getValue());
businDataTask.setDestination(slotName);
break; break;
default: default:
return RcsResponseVo.error("任务状态未知!"); return RcsResponseVo.error("任务状态未知!");
} }
businDataTask.setAgvTaskStatus(method);
businDataTask.setUpdateTime(new Date()); businDataTask.setUpdateTime(new Date());
businDataTask.setAgvNo(bo.getSingleRobotCode()); boolean isUpdated = iBusinDataTaskService.updateById(businDataTask);
boolean isUpdated = iBusinDataTaskService.updateById(businDataTask);
if (!isUpdated) { if (!isUpdated) {
log.error("任务状态更新失败,任务号:{}", robotTaskCode); log.error("任务状态更新失败,任务号:{}", robotTaskCode);
return RcsResponseVo.error("任务状态更新失败"); return RcsResponseVo.error("任务状态更新失败");
@ -241,7 +194,6 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
log.info("任务状态更新成功,任务号:{}", robotTaskCode); log.info("任务状态更新成功,任务号:{}", robotTaskCode);
UploadWCSTaskStatusDto uploadWCSTaskStatusDto = new UploadWCSTaskStatusDto(); UploadWCSTaskStatusDto uploadWCSTaskStatusDto = new UploadWCSTaskStatusDto();
WcsCreateTaskHeader header = new WcsCreateTaskHeader(); WcsCreateTaskHeader header = new WcsCreateTaskHeader();
String taskType = businDataTask.getTaskType();
switch (taskType) { switch (taskType) {
case "1": case "1":
header.setBusinessType("stockOutReturn"); header.setBusinessType("stockOutReturn");
@ -262,16 +214,15 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
body.setTrayCode(carrierCode); body.setTrayCode(carrierCode);
body.setTaskType(taskType); body.setTaskType(taskType);
body.setStatus(businDataTask.getTaskStatus()); body.setStatus(businDataTask.getTaskStatus());
// if (businDataTask.getTaskStatus().equals(TaskStatusEnum.finished.getValue())) { if (businDataTask.getTaskStatus().equals(TaskStatusEnum.finished.getValue())){
body.setDestination(slotName); body.setDestination(slotName);
// } }
body.setMsgCode("200"); body.setMsgCode("200");
bodyList.add(body); bodyList.add(body);
uploadWCSTaskStatusDto.setBody(bodyList); uploadWCSTaskStatusDto.setBody(bodyList);
log.info("请求zk-wcs参数{}", JSONObject.toJSONString(uploadWCSTaskStatusDto)); log.info("请求zk-wcs参数{}",JSONObject.toJSONString(uploadWCSTaskStatusDto));
try { try {
WcsResponseVo vo = wcsUtil.uploadWCSTaskStatus(uploadWCSTaskStatusDto); wcsUtil.uploadWCSTaskStatus(uploadWCSTaskStatusDto);
log.info("WZ-WCS状态上报反馈:"+ JSONObject.toJSONString(vo));
} catch (TooManyResultsException e) { } catch (TooManyResultsException e) {
log.error("WZ-WCS状态上报异常,任务号:{}", robotTaskCode, e); log.error("WZ-WCS状态上报异常,任务号:{}", robotTaskCode, e);
return RcsResponseVo.error("KJ-WCS状态上报异常"); 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 @Autowired
IWcsPlcPropertyService iWcsPlcPropertyService; IWcsPlcPropertyService iWcsPlcPropertyService;
@Autowired
PLCReadAndWrite plcReadAndWrite;
@Autowired
ISysParameterService isysParameterService;
@Autowired
IWcsPlcConnectService iWcsPlcConnectService;
@Autowired @Autowired
PlcInit plcInit; PlcInit plcInit;
@ -73,26 +82,17 @@ public class RCSUtil {
public Map<String, String> getHeaderMap() { public Map<String, String> getHeaderMap() {
Map<String, String> headerMap = new HashMap<>(1); Map<String, String> headerMap = new HashMap<>(1);
headerMap.put("authorization", "mrbase64 mrrest:YWRtaW4mYWRtaW4="); headerMap.put("authorization", "mrbase64 mrrest:YWRtaW4mYWRtaW4=");
String randomString = usingUUID();
headerMap.put("X-lr-request-id",randomString.substring(0,8));
return headerMap; return headerMap;
} }
static String usingUUID() {
UUID randomUUID = UUID.randomUUID();
return randomUUID.toString().replaceAll("-", "");
}
/**
* 创建任务
/** * wcs系统通过此接口向rcs系统下发创建任务指令
* 创建任务 *
* wcs系统通过此接口向rcs系统下发创建任务指令 * @param dto dto
* * @return {@code Result}
* @param dto dto */
* @return {@code Result}
*/
public Result rcsCreateTask(RcsCreateTaskDto dto) { public Result rcsCreateTask(RcsCreateTaskDto dto) {
String json = JSONObject.toJSONString(dto); String json = JSONObject.toJSONString(dto);
log.info("向rcs创建任务参数"+json); log.info("向rcs创建任务参数"+json);

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

@ -40,6 +40,4 @@ public class RcsIdList implements Serializable {
private String robotType; 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){ if (result == null){
return false; return false;
} }
if (result.getCode().equals("SUCCESS") ) { if (result.getCode() == 0) {
return true; return true;
} }
return false; return false;

@ -20,7 +20,7 @@ public enum RCSTaskTypeEnum {
/* A_TO_B_AND_PUT(23, "从 A 点顶起托盘搬运至 B 点放下"), /* A_TO_B_AND_PUT(23, "从 A 点顶起托盘搬运至 B 点放下"),
A_TO_B_NO_PUT(24, "从 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 移动至目标点并放下"), // A_TO_B_GOODS_MOVE(25, "在负载情况下将 AGV 移动至目标点并放下"),
; ;

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

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

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

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

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

@ -33,7 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="port != null and port != ''"> and port = #{port}</if> <if test="port != null and port != ''"> and port = #{port}</if>
<if test="plcProtocol != null and plcProtocol != ''"> and plc_protocol = #{plcProtocol}</if> <if test="plcProtocol != null and plcProtocol != ''"> and plc_protocol = #{plcProtocol}</if>
<if test="isActive != null and isActive != ''"> and ifnull(plc.is_active, 0) = #{isActive}</if> <if test="isActive != null and isActive != ''"> and ifnull(plc.is_active, 0) = #{isActive}</if>
<!-- <if test="devType != null and devType != ''"> and dev.dev_type = #{devType}</if>--> <!--<if test="devType != null and devType != ''"> and dev.dev_type = #{devType}</if>-->
</where> </where>
</select> </select>

Loading…
Cancel
Save