增加plc点位,修改出库任务报完成位置

main
Comair 9 months ago
parent 3f2a907601
commit da24e39974
  1. 4
      shkj-framework/src/main/java/com/shkj/framework/web/service/SysLoginService.java
  2. 2
      shkj-wms/src/main/java/com/shkj/wcs/controller/busin/AgvTaskContorller.java
  3. 52
      shkj-wms/src/main/java/com/shkj/wcs/domain/BusinDataTask.java
  4. 495
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java
  5. 8
      shkj-wms/src/main/java/com/shkj/wcs/service/IBusinDataTaskService.java
  6. 197
      shkj-wms/src/main/java/com/shkj/wcs/service/impl/BusinDataTaskServiceImpl.java
  7. 45
      shkj-wms/src/main/java/com/shkj/wcs/third/rcs/CounterService.java
  8. 6
      shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java
  9. 2
      shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusBody.java
  10. 3
      shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsCreateTaskBody.java
  11. 47
      shkj-wms/src/main/java/com/shkj/wms/enums/MapEnum.java
  12. 2
      shkj-wms/src/main/java/com/shkj/wms/enums/TaskStatusEnum.java
  13. 4
      shkj-wms/src/main/java/com/shkj/wms/enums/TaskTypeEnum.java
  14. 2
      shkj-wms/src/main/java/com/shkj/wms/service/impl/SysThirdExceptionRequestServiceImpl.java

@ -69,13 +69,13 @@ public class SysLoginService {
if (username.contains(",")) { if (username.contains(",")) {
throw new ServiceException("账号非法"); throw new ServiceException("账号非法");
} }
String wid = branchId == null ? "" : branchId.toString(); String wid = branchId == null ? "1" : branchId.toString();
// 用户验证 // 用户验证
Authentication authentication = null; Authentication authentication = null;
try { try {
// 该方法会去调用UserDetailsServiceImpl.loadUserByUsername 这里为了简单直接使用用户账号+仓库id 后面在进行分割 // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername 这里为了简单直接使用用户账号+仓库id 后面在进行分割
authentication = authenticationManager authentication = authenticationManager
.authenticate(new UsernamePasswordAuthenticationToken(username + "," + wid, password)); .authenticate(new UsernamePasswordAuthenticationToken(username, password));
} catch (Exception e) { } catch (Exception e) {
if (e instanceof BadCredentialsException) { if (e instanceof BadCredentialsException) {
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));

@ -47,8 +47,6 @@ public class AgvTaskContorller {
@Autowired @Autowired
private IBusinDataTaskService iBusinDataTaskService; private IBusinDataTaskService iBusinDataTaskService;
@Autowired
private WCSUtil wcsUtil;
/** /**

@ -50,49 +50,24 @@ public class BusinDataTask implements Serializable {
private String taskPath; private String taskPath;
/** 是否是置顶 */
@Excel(name = "是否是置顶")
private String isTop;
/** 任务优先级 */ /** 任务优先级 */
@Excel(name = "任务优先级") @Excel(name = "任务优先级")
private String priority; private String priority;
/** 出行 */
@Excel(name = "出行")
private String fromRow;
/** 出高 */
@Excel(name = "出高")
private String fromColumn;
/** 出列 */
@Excel(name = "出列")
private String fromLayer;
/** 出边 */ /** 出边 */
@Excel(name = "出边") @Excel(name = "出边")
private String fromSide; private String fromSide;
/** 入行 */
@Excel(name = "入行")
private String toRow;
/** 入高 */
@Excel(name = "入高")
private String toColumn;
/** 入列 */
@Excel(name = "入列")
private String toLayer;
/** 入边 */ /** 入边 */
@Excel(name = "入边") @Excel(name = "入边")
private String toSide; private String toSide;
/** 巷道 */
@Excel(name = "巷道")
private String tunnel;
/** 设备编号 */ /** 设备编号 */
@Excel(name = "设备编号") @Excel(name = "设备编号")
@ -118,35 +93,15 @@ public class BusinDataTask implements Serializable {
private String agvNo; private String agvNo;
/** 立库输送线 */
@Excel(name = "立库输送线")
private String dpsNoOne;
/** 过点时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+7")
@Excel(name = "过点时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date traverseDate;
/** 治具编号 */ /** 治具编号 */
@Excel(name = "治具编号") @Excel(name = "治具编号")
private String containerCode; private String containerCode;
/** 业务单据 */
@Excel(name = "业务单据")
private String transId;
/** 仓库ID */
@Excel(name = "仓库ID")
private Long branchId;
private String remark; private String remark;
/**AGV点位 */
private String points;
/** AGV形态 */
private String isDown;
/** /**
* 创建时间 * 创建时间
*/ */
@ -166,6 +121,11 @@ public class BusinDataTask implements Serializable {
*/ */
private String destination; private String destination;
/**
* AGV模板
*/
private String agvType;
/** /**
* AGV任务状态 * AGV任务状态
*/ */

@ -1,37 +1,52 @@
package com.shkj.wcs.plc; package com.shkj.wcs.plc;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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;
import com.shkj.common.utils.DateUtils;
import com.shkj.plc.sdk.device.PlcOperate; import com.shkj.plc.sdk.device.PlcOperate;
import com.shkj.system.service.ISysParameterService; import com.shkj.system.service.ISysParameterService;
import com.shkj.wcs.bo.WcsPlcConnectQueryBo; import com.shkj.wcs.bo.WcsPlcConnectQueryBo;
import com.shkj.wcs.domain.BusinDataTask;
import com.shkj.wcs.domain.WcsPlcConnect; import com.shkj.wcs.domain.WcsPlcConnect;
import com.shkj.wcs.domain.WcsPlcProperty; import com.shkj.wcs.domain.WcsPlcProperty;
import com.shkj.wcs.mapper.WcsPlcConnectMapper; import com.shkj.wcs.mapper.WcsPlcConnectMapper;
import com.shkj.wcs.service.IBusinDataTaskService;
import com.shkj.wcs.service.IWcsPlcConnectService; import com.shkj.wcs.service.IWcsPlcConnectService;
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.RcsCreateTaskDto;
import com.shkj.wcs.third.rcs.dto.RcsIdList;
import com.shkj.wcs.third.rcs.enums.RCSOperation;
import com.shkj.wcs.third.rcs.vo.RcsResponseVo;
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.*;
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.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;
import com.shkj.wms.enums.BusinTaskTypeEnum; import com.shkj.wms.enums.BusinTaskTypeEnum;
import com.shkj.wms.enums.MapEnum;
import com.shkj.wms.enums.TaskStatusEnum;
import com.shkj.wms.enums.TaskTypeEnum; import com.shkj.wms.enums.TaskTypeEnum;
import com.shkj.wms.utils.IntIdUtil;
import com.shkj.wms.utils.JsonUtil; import com.shkj.wms.utils.JsonUtil;
import com.shkj.wms.vo.PlanOrderLocationVo; import com.shkj.wms.vo.PlanOrderLocationVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.exceptions.TooManyResultsException;
import org.mvel2.util.Make;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
@ -58,10 +73,7 @@ public class PlcEventTask {
IWcsPlcPropertyService iWcsPlcPropertyService; IWcsPlcPropertyService iWcsPlcPropertyService;
@Autowired @Autowired
ISysParameterService isysParameterService; IBusinDataTaskService iBusinDataTaskService;
@Resource
WcsPlcConnectMapper wcsPlcConnectMapper;
@Autowired @Autowired
@ -70,7 +82,7 @@ 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);
@ -128,28 +140,28 @@ public class PlcEventTask {
//根据连接的plcId获取属性 //根据连接的plcId获取属性
PlcOperate plcOperate = plcInit.getPlcOperate_dpj(); PlcOperate plcOperate = plcInit.getPlcOperate_dpj();
if (plcOperate != null) { 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 = "DB5100.0.0";
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));
//读取心跳,并判断是写入true还是false; //读取心跳,并判断是写入true还是false;
Boolean heartbeatV = false; Boolean heartbeatV = false;
if (pointMap.containsKey(heartbeat)) { if (pointMap.containsKey(heartbeat)) {
heartbeatV = Boolean.valueOf(pointMap.get(heartbeat).toString()); heartbeatV = Boolean.valueOf(pointMap.get(heartbeat).toString());
} }
heartbeatV = (heartbeatV == true) ? false : true; heartbeatV = (heartbeatV == true) ? false : true;
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("DB5110.0.0", 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();
} }
} }
} }
@ -159,7 +171,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) {
@ -272,6 +284,23 @@ public class PlcEventTask {
String retInOutSwitVt = ""; String retInOutSwitVt = "";
//空托上报请求序列号
String rptEySeria = "";
//空托上报条码
String rptEyBarcod = "";
//空托上报确认序列号
String retEyCfmSeria = "";
String retEyCfmSeriaVt = "";
//空托上报条码确认
String retEyCfmBarcod = "";
String retEyCfmBarcodVt = "";
//空托上报返回信息
String retEy = "";
String retEyVt = "";
for (WcsPlcProperty plcProperty : propertyList) { for (WcsPlcProperty plcProperty : propertyList) {
@ -331,16 +360,29 @@ public class PlcEventTask {
} else if (pointType.equals("retOut1")) { } else if (pointType.equals("retOut1")) {
retOut1 = plcProperty.getAddress(); retOut1 = plcProperty.getAddress();
retOutVt1 = plcProperty.getValueType(); retOutVt1 = plcProperty.getValueType();
} else if (pointType.equals("rptEySeria")) {
rptEySeria = plcProperty.getAddress();
} else if (pointType.equals("rptEyBarcod")) {
rptEyBarcod = plcProperty.getAddress();
} else if (pointType.equals("retEyCfmSeria")) {
retEyCfmSeria = plcProperty.getAddress();
retEyCfmSeriaVt = plcProperty.getValueType();
} else if (pointType.equals("retEyCfmBarcod")) {
retEyCfmBarcod = plcProperty.getAddress();
retEyCfmBarcodVt = plcProperty.getValueType();
} else if (pointType.equals("retEy")) {
retEy = plcProperty.getAddress();
retEyVt = plcProperty.getValueType();
} }
} }
//扫码处入库申请 //生产区扫码处入库申请
//&& Boolean.valueOf(pointMap.get(reqInSeria).toString()) //&& Boolean.valueOf(pointMap.get(reqInSeria).toString())
if (pointMap.containsKey(reqInSeria) && !pointMap.get(reqInSeria).equals("0")) { if (pointMap.containsKey(reqInSeria) && !pointMap.get(reqInSeria).equals("0")) {
//读取请求序列号内容 //读取请求序列号内容
String bCR01SeriaV1 = Objects.toString(pointMap.get(reqInSeria), ""); String bCR01SeriaV1 = Objects.toString(pointMap.get(reqInSeria), "");
Integer bCR01SeriaV = 0; Integer bCR01SeriaV = 0;
if(!bCR01SeriaV1.isEmpty()){ if (!bCR01SeriaV1.isEmpty()) {
bCR01SeriaV = Integer.parseInt(bCR01SeriaV1.toString()); bCR01SeriaV = Integer.parseInt(bCR01SeriaV1.toString());
} }
//读取托盘条码内容 //读取托盘条码内容
@ -349,11 +391,11 @@ public class PlcEventTask {
log.info("扫码处入库申请时,读取的条码内容:" + s); log.info("扫码处入库申请时,读取的条码内容:" + s);
//根据托盘条码返回正在执行的任务号 //根据托盘条码返回正在执行的任务号
WcsIncomingTrayCheckBody body = new WcsIncomingTrayCheckBody(); WcsIncomingTrayCheckBody body = new WcsIncomingTrayCheckBody();
body.setStation("SC-G1-00-00-1001"); body.setStation(MapEnum.oneIn.getValue());
body.setTaskType(TaskTypeEnum.In.getValue()); body.setTaskType(TaskTypeEnum.In.getValue());
body.setBussinessType(BusinTaskTypeEnum.trayCheck.getValue()); body.setBussinessType(BusinTaskTypeEnum.trayCheck.getValue());
body.setTrayCode(s); body.setTrayCode(s);
body.setCreateDt(new Date().toString()); body.setCreateDt(getNowDate());
WcsResponseVo vo = wcsUtil.wcsIncomingTrayCheck(body); WcsResponseVo vo = wcsUtil.wcsIncomingTrayCheck(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);
@ -371,7 +413,7 @@ 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);
@ -380,12 +422,12 @@ public class PlcEventTask {
log.info("扫码处入库申请时,写入的命令返回结果:" + reqInBoolean.toString()); log.info("扫码处入库申请时,写入的命令返回结果:" + reqInBoolean.toString());
} }
//空托盘申请 //空托盘申请
if (pointMap.containsKey(reqEmpty) && !pointMap.get(reqEmpty).equals("0")) { if (pointMap.containsKey(reqEmpty) && !pointMap.get(reqEmpty).equals("0")) {
WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G1-00-00-1002"); body.setStation(MapEnum.oneOut.getValue());
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(getNowDate());
//调用agv接口查询库区状态 //调用agv接口查询库区状态
Map<String, Object> map1 = new HashMap<>(); Map<String, Object> map1 = new HashMap<>();
map1.put("areaInLocation", "SC-A2"); map1.put("areaInLocation", "SC-A2");
@ -396,15 +438,15 @@ public class PlcEventTask {
map2.put("status", 1); map2.put("status", 1);
Map<String, Object> map3 = new HashMap<>(); Map<String, Object> map3 = new HashMap<>();
map1.put("areaInLocation", "SC-C2"); map3.put("areaInLocation", "SC-C2");
map1.put("status", 1); map3.put("status", 1);
Map<String, Object> map4 = new HashMap<>(); Map<String, Object> map4 = new HashMap<>();
map2.put("areaInLocation", "SC-D2"); map4.put("areaInLocation", "SC-D2");
map2.put("status", 1); map4.put("status", 1);
Object[] areaStatus = new Object[] { map1,map2,map3,map4}; Object[] areaStatus = new Object[]{map1, map2, map3, map4};
log.info("每个库区的状态:"+Arrays.toString(areaStatus)); 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());
@ -428,7 +470,7 @@ public class PlcEventTask {
//读取序列号 //读取序列号
String IntegeroutSeria = Objects.toString(pointMap.get(rptOutSeria), ""); String IntegeroutSeria = Objects.toString(pointMap.get(rptOutSeria), "");
Integer outSeria = 0; Integer outSeria = 0;
if(!IntegeroutSeria.isEmpty()){ if (!IntegeroutSeria.isEmpty()) {
outSeria = Integer.parseInt(IntegeroutSeria.toString()); outSeria = Integer.parseInt(IntegeroutSeria.toString());
} }
//读取托盘条码内容 //读取托盘条码内容
@ -437,11 +479,11 @@ public class PlcEventTask {
log.info("实盘出口上报时,读取的条码内容:" + s); log.info("实盘出口上报时,读取的条码内容:" + s);
//调用wz-wcs接口 //调用wz-wcs接口
WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G2-00-00-2002"); body.setStation(MapEnum.twoDownIn.getValue());
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(s);
body.setCreateDt(new Date().toString()); body.setCreateDt(getNowDate());
//调用agv接口查询库区状态 //调用agv接口查询库区状态
Map<String, Object> map1 = new HashMap<>(); Map<String, Object> map1 = new HashMap<>();
map1.put("areaInLocation", "SC-A2"); map1.put("areaInLocation", "SC-A2");
@ -459,11 +501,11 @@ public class PlcEventTask {
map4.put("areaInLocation", "SC-D2"); map4.put("areaInLocation", "SC-D2");
map4.put("status", 1); map4.put("status", 1);
Object[] areaStatus = new Object[] { map1,map2,map3,map4}; Object[] areaStatus = new Object[]{map1, map2, map3, map4};
log.info("每个库区的状态:"+Arrays.toString(areaStatus)); 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("实盘出口上报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);
@ -491,7 +533,7 @@ public class PlcEventTask {
//读取序列号 //读取序列号
String IntegeroutSeria = Objects.toString(pointMap.get(rptOutSeria1), ""); String IntegeroutSeria = Objects.toString(pointMap.get(rptOutSeria1), "");
Integer outSeria = 0; Integer outSeria = 0;
if(!IntegeroutSeria.isEmpty()){ if (!IntegeroutSeria.isEmpty()) {
outSeria = Integer.parseInt(IntegeroutSeria); outSeria = Integer.parseInt(IntegeroutSeria);
} }
//读取托盘条码内容 //读取托盘条码内容
@ -501,11 +543,11 @@ public class PlcEventTask {
log.info("实盘出口上报时,读取的条码内容:" + s); log.info("实盘出口上报时,读取的条码内容:" + s);
//调用wz-wcs接口 //调用wz-wcs接口
WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G2-00-00-2001"); body.setStation(MapEnum.twoUpIn.getValue());
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(s);
body.setCreateDt(new Date().toString()); body.setCreateDt(getNowDate());
//调用agv接口查询库区状态 //调用agv接口查询库区状态
Map<String, Object> map1 = new HashMap<>(); Map<String, Object> map1 = new HashMap<>();
map1.put("areaInLocation", "SC-A2"); map1.put("areaInLocation", "SC-A2");
@ -523,8 +565,8 @@ public class PlcEventTask {
map4.put("areaInLocation", "SC-D2"); map4.put("areaInLocation", "SC-D2");
map4.put("status", 1); map4.put("status", 1);
Object[] areaStatus = new Object[] { map1,map2,map3,map4}; Object[] areaStatus = new Object[]{map1, map2, map3, map4};
log.info("每个库区的状态:"+Arrays.toString(areaStatus)); 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());
@ -532,16 +574,12 @@ public class PlcEventTask {
Map<String, Integer> seriaMap = new HashMap<>(1); Map<String, Integer> seriaMap = new HashMap<>(1);
seriaMap.put(rptOutCfmSeriaVt1, outSeria); seriaMap.put(rptOutCfmSeriaVt1, outSeria);
allMap.put(rptOutCfmSeria1, seriaMap); 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); Map<String, Integer> reqMap = new HashMap<>(1);
if (Result.isOk(vo.getHeader().getMsgCode())) { if (Result.isOk(vo.getHeader().getMsgCode())) {
reqMap.put(retOutVt1, 1); reqMap.put(retOutVt1, 1);
} else { } else {
reqMap.put(retOutVt1, 1); reqMap.put(retOutVt1, 2);
} }
allMap.put(retOut1, reqMap); allMap.put(retOut1, reqMap);
String allMapJson = JsonUtil.toJSONString(allMap); String allMapJson = JsonUtil.toJSONString(allMap);
@ -554,12 +592,13 @@ public class PlcEventTask {
//出入库切换 //出入库切换
if (pointMap.containsKey(inOutSwit) && !pointMap.get(inOutSwit).equals("0")) { if (pointMap.containsKey(inOutSwit) && !pointMap.get(inOutSwit).equals("0")) {
WCSQueryTaskStatusBody body = new WCSQueryTaskStatusBody(); WCSQueryTaskStatusBody body = new WCSQueryTaskStatusBody();
body.setDestination("SC-G1-00-00-1002"); body.setDestination(MapEnum.oneOut.getValue());
body.setTaskType("1"); body.setTaskType("1");
body.setTrayType("2"); body.setTrayType("2");
WcsResponseVo<TaskStatusBody> vo = JSON.parseObject( WcsResponseVo<TaskStatusBody> vo = JSON.parseObject(
JSON.toJSONString(wcsUtil.queryTaskStatus(body)), JSON.toJSONString(wcsUtil.queryTaskStatus(body)),
new TypeReference<WcsResponseVo<TaskStatusBody>>() {} new TypeReference<WcsResponseVo<TaskStatusBody>>() {
}
); );
Integer taskCount = vo.getBody().get(0).getTaskCount(); Integer taskCount = vo.getBody().get(0).getTaskCount();
@ -581,6 +620,72 @@ public class PlcEventTask {
log.info("出入库切换时,写入的命令返回结果:" + inOutSwitBoolean.toString()); log.info("出入库切换时,写入的命令返回结果:" + inOutSwitBoolean.toString());
} }
//空托上报完成
if (pointMap.containsKey(rptEySeria) && !pointMap.get(rptEySeria).equals("0")) {
//读取序列号
String IntegeroutSeria = Objects.toString(pointMap.get(rptEySeria), "");
Integer outSeria = 0;
if (!IntegeroutSeria.isEmpty()) {
outSeria = Integer.parseInt(IntegeroutSeria);
}
//读取托盘条码内容
String barcodeValueOne = Objects.toString(pointMap.get(rptEyBarcod), "");
String s = barcodeValueOne.replaceAll("[^A-Za-z0-9]", "");
Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> seriaMap = new HashMap<>(1);
Map<String, Integer> reqMap = new HashMap<>(1);
log.info("空托上报完成时,读取的条码内容:" + s);
if(!s.isEmpty()){
LambdaQueryWrapper<BusinDataTask> lqw = new LambdaQueryWrapper<BusinDataTask>().eq(BusinDataTask::getContainerCode,s)
.eq(BusinDataTask::getTaskStatus,TaskStatusEnum.wait_callback.getValue());
BusinDataTask businDataTask = iBusinDataTaskService.getOne(lqw);
if(businDataTask != null){
log.info("空托报完成任务号:"+ businDataTask.getTaskCode());
businDataTask.setTaskStatus(TaskStatusEnum.finished.getValue());
businDataTask.setDestination(MapEnum.oneOut.getValue());
businDataTask.setTaskEntime(new Date());
iBusinDataTaskService.updateById(businDataTask);
UploadWCSTaskStatusDto uploadWCSTaskStatusDto = new UploadWCSTaskStatusDto();
WcsCreateTaskHeader header = new WcsCreateTaskHeader();
header.setBusinessType("stockOutReturn");
uploadWCSTaskStatusDto.setHeader(header);
UploadWCSTaskStatusBody body = new UploadWCSTaskStatusBody();
List<UploadWCSTaskStatusBody> bodyList = new ArrayList<>();
body.setTaskId(businDataTask.getTaskCode());
body.setTrayCode(businDataTask.getContainerCode());
body.setTaskType(businDataTask.getTaskType());
body.setStatus(businDataTask.getTaskStatus());
body.setDestination(MapEnum.oneOut.getValue());
body.setMsgCode("200");
bodyList.add(body);
uploadWCSTaskStatusDto.setBody(bodyList);
log.info("空托任务状态上报请求zk-wcs参数{}", JSONObject.toJSONString(uploadWCSTaskStatusDto));
WcsResponseVo vo = wcsUtil.uploadWCSTaskStatus(uploadWCSTaskStatusDto);
log.info("空托任务状态上报反馈:"+ JSONObject.toJSONString(vo));
if (Result.isOk(vo.getHeader().getMsgCode())) {
reqMap.put(retEyVt, 1);
} else {
reqMap.put(retEyVt, 2);
}
}else{
log.info("未查询到条码为:"+s+"未完成的任务");
reqMap.put(retEyVt, 2);
}
}else{
reqMap.put(retEyVt, 2);
}
seriaMap.put(retEyCfmSeriaVt, outSeria);
allMap.put(retEy, reqMap);
allMap.put(retEyCfmSeria,seriaMap);
String allMapJson = JsonUtil.toJSONString(allMap);
log.info("空托上报完成时,给输送线写命令数据:{}", allMapJson);
Boolean rptOutBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info("空托上报完成时,写入的命令返回结果:" + rptOutBoolean.toString());
}
} catch (Exception e) { } catch (Exception e) {
log.error("dpsRealTimeTask:" + e.getMessage()); log.error("dpsRealTimeTask:" + e.getMessage());
} }
@ -595,6 +700,22 @@ public class PlcEventTask {
/** /**
* 叠盘机 * 叠盘机
*/ */
//叠盘机请求序列号
String dpjSeria = "";
//叠盘机确认序列号
String retDpjCfmSeria = "";
String retDpjCfmSeriaVt = "";
//叠盘机请求条码
String dpjBarcod = "";
//叠盘机返回条码
String retDpjCfmBarcod = "";
String retDpjCfmBarcodVt = "";
//叠盘机完成 //叠盘机完成
String dpj = ""; String dpj = "";
@ -602,6 +723,31 @@ public class PlcEventTask {
String retDpj = ""; String retDpj = "";
String retDpjVt = ""; String retDpjVt = "";
//叠盘机返回
String retDpj1 = "";
String retDpj1Vt = "";
//请求叠盘工位1
String dpjGw1 = "";
//请求叠盘工位1返回
String retDpjGw1 = "";
String retDpjGw1Vt = "";
//请求叠盘工位2
String dpjGw2 = "";
//请求叠盘工位2返回
String retDpjGw2 = "";
String retDpjGw2Vt = "";
//请求叠盘工位3
String dpjGw3 = "";
//请求叠盘工位3返回
String retDpjGw3 = "";
String retDpjGw3Vt = "";
for (WcsPlcProperty plcProperty : propertyList) { for (WcsPlcProperty plcProperty : propertyList) {
String pointType = plcProperty.getPointType(); String pointType = plcProperty.getPointType();
@ -611,18 +757,54 @@ public class PlcEventTask {
} else if (pointType.equals("retDpj")) { } else if (pointType.equals("retDpj")) {
retDpj = plcProperty.getAddress(); retDpj = plcProperty.getAddress();
retDpjVt = plcProperty.getValueType(); retDpjVt = plcProperty.getValueType();
} else if (pointType.equals("dpjSeria")) {
dpjSeria = plcProperty.getAddress();
} else if (pointType.equals("retDpjCfmSeria")) {
retDpjCfmSeria = plcProperty.getAddress();
retDpjCfmSeriaVt = plcProperty.getValueType();
}else if (pointType.equals("dpjBarcod")) {
dpjBarcod = plcProperty.getAddress();
} else if (pointType.equals("retDpj1")) {
retDpj1 = plcProperty.getAddress();
retDpj1Vt = plcProperty.getValueType();
} else if (pointType.equals("dpjGw1")) {
dpjGw1 = plcProperty.getAddress();
} else if (pointType.equals("retDpjGw1")) {
retDpjGw1 = plcProperty.getAddress();
retDpjGw1Vt = plcProperty.getValueType();
} else if (pointType.equals("dpjGw2")) {
dpjGw2 = plcProperty.getAddress();
} else if (pointType.equals("retDpjGw2")) {
retDpjGw2 = plcProperty.getAddress();
retDpjGw2Vt = plcProperty.getValueType();
} else if (pointType.equals("dpjGw3")) {
dpjGw3 = plcProperty.getAddress();
} else if (pointType.equals("retDpjGw3")) {
retDpjGw3 = plcProperty.getAddress();
retDpjGw3Vt = plcProperty.getValueType();
} }
} }
//叠盘机 //叠盘机
if (pointMap.containsKey(dpj) && !pointMap.get(dpj).equals("0")) { if (pointMap.containsKey(dpjSeria) && !pointMap.get(dpjSeria).equals("0")) {
//读取序列号
String IntegeroutSeria = Objects.toString(pointMap.get(dpjSeria), "");
Integer seria = 0;
if (!IntegeroutSeria.isEmpty()) {
seria = Integer.parseInt(IntegeroutSeria);
}
//读取托盘条码内容
String barcodeValueOne = Objects.toString(pointMap.get(dpjBarcod), "");
String s = barcodeValueOne.replaceAll("[^A-Za-z0-9]", "");
log.info("叠盘机入库请求读取的条码:"+ s);
WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
body.setStation("SC-G2-00-00-2003"); body.setStation(MapEnum.dpj.getValue());
body.setTaskType(TaskTypeEnum.In.getValue()); body.setTaskType(TaskTypeEnum.In.getValue());
body.setTrayCode("TP4077566601"); body.setTrayCode(s);
body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue()); body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue());
body.setCreateDt(new Date().toString()); body.setCreateDt(getNowDate());
//调用agv接口查询库区状态 //调用agv接口查询库区状态
Map<String, Object> map1 = new HashMap<>(); Map<String, Object> map1 = new HashMap<>();
map1.put("areaInLocation", "SC-A2"); map1.put("areaInLocation", "SC-A2");
@ -633,32 +815,193 @@ public class PlcEventTask {
map2.put("status", 1); map2.put("status", 1);
Map<String, Object> map3 = new HashMap<>(); Map<String, Object> map3 = new HashMap<>();
map1.put("areaInLocation", "SC-C2"); map3.put("areaInLocation", "SC-C2");
map1.put("status", 1); map3.put("status", 1);
Map<String, Object> map4 = new HashMap<>(); Map<String, Object> map4 = new HashMap<>();
map2.put("areaInLocation", "SC-D2"); map4.put("areaInLocation", "SC-D2");
map2.put("status", 1); map4.put("status", 1);
Object[] areaStatus = new Object[] { map1,map2,map3,map4}; Object[] areaStatus = new Object[]{map1, map2, map3, map4};
log.info("每个库区的状态:"+Arrays.toString(areaStatus)); 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);
Map<String, Integer> req1Map = new HashMap<>(1);
Map<String, Integer> seriaMap = new HashMap<>(1);
seriaMap.put(retDpjCfmSeriaVt,seria);
if (Result.isOk(vo.getHeader().getMsgCode())) { if (Result.isOk(vo.getHeader().getMsgCode())) {
reqMap.put(retDpjVt, 1); reqMap.put(retDpjVt, 1);
req1Map.put(retDpj1Vt,1);
} else { } else {
reqMap.put(retDpjVt, 2); reqMap.put(retDpjVt, 2);
req1Map.put(retDpj1Vt,2);
} }
allMap.put(retDpj, reqMap); allMap.put(retDpj, reqMap);
allMap.put(retDpj1, req1Map);
allMap.put(retDpjCfmSeria,seriaMap);
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());
} }
//叠盘机搬运1
if (pointMap.containsKey(dpjGw1) && !pointMap.get(dpjGw1).equals("0")) {
BusinDataTask businDataTask;
boolean save = true;
Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> reqMap = new HashMap<>(1);
LambdaQueryWrapper<BusinDataTask> lqwTask = new LambdaQueryWrapper<BusinDataTask>()
.eq(BusinDataTask::getFromSide,MapEnum.dpjGw1.getValue())
.eq(BusinDataTask::getTaskStatus,TaskStatusEnum.wait_put);
businDataTask = iBusinDataTaskService.getOne(lqwTask);
if(businDataTask != null){
log.info("还未下发的任务:"+businDataTask.getTaskCode());
}else{
String taskCode = IntIdUtil.generateIntId().toString();
businDataTask.setTaskCode(taskCode);
businDataTask.setTaskStatus(TaskStatusEnum.wait_put.getValue());
businDataTask.setTaskType(TaskTypeEnum.Carry.getValue());
businDataTask.setTaskPath(MapEnum.dpj.getValue());
businDataTask.setPriority("1");
businDataTask.setFromSide(MapEnum.dpjGw1.getValue());
businDataTask.setToSide(MapEnum.dpj.getValue());
businDataTask.setCreateTime(DateUtils.getNowDate());
businDataTask.setAgvType("B113");
save = iBusinDataTaskService.save(businDataTask);
}
if (!save) {
log.info("叠盘工位1,任务存储失败!");
reqMap.put(retDpjGw1Vt, 2);
allMap.put(retDpjGw1, reqMap);
}else{
Result result = iBusinDataTaskService.rcsTaskIssued(businDataTask);
if (!Result.isOk(result)) {
log.info("叠盘工位1,给rcs下发任务失败!");
reqMap.put(retDpjGw1Vt, 2);
allMap.put(retDpjGw1, reqMap);
}else{
log.info("叠盘工位1,给rcs下发任务成功!");
reqMap.put(retDpjGw1Vt, 1);
allMap.put(retDpjGw1, reqMap);
businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue());
businDataTask.setTaskStarttime(DateUtils.getNowDate());
businDataTask.setUpdateTime(DateUtils.getNowDate());
iBusinDataTaskService.updateById(businDataTask);
}
}
String allMapJson = JsonUtil.toJSONString(allMap);
log.info("叠盘工位1叠盘请求时,给输送线写命令数据:{}", allMapJson);
Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info("叠盘工位1叠盘请求时,写入的命令返回结果:" + bCR01Boolean.toString());
}
//叠盘机搬运2
if (pointMap.containsKey(dpjGw2) && !pointMap.get(dpjGw2).equals("0")) {
BusinDataTask businDataTask;
boolean save = true;
Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> reqMap = new HashMap<>(1);
LambdaQueryWrapper<BusinDataTask> lqwTask = new LambdaQueryWrapper<BusinDataTask>()
.eq(BusinDataTask::getFromSide,MapEnum.dpjGw2.getValue())
.eq(BusinDataTask::getTaskStatus,TaskStatusEnum.wait_put);
businDataTask = iBusinDataTaskService.getOne(lqwTask);
if(businDataTask != null){
log.info("还未下发的任务:"+businDataTask.getTaskCode());
}else{
String taskCode = IntIdUtil.generateIntId().toString();
businDataTask.setTaskCode(taskCode);
businDataTask.setTaskStatus(TaskStatusEnum.wait_put.getValue());
businDataTask.setTaskType(TaskTypeEnum.Carry.getValue());
businDataTask.setTaskPath(MapEnum.dpj.getValue());
businDataTask.setPriority("1");
businDataTask.setFromSide(MapEnum.dpjGw2.getValue());
businDataTask.setToSide(MapEnum.dpj.getValue());
businDataTask.setCreateTime(DateUtils.getNowDate());
businDataTask.setAgvType("B113");
save = iBusinDataTaskService.save(businDataTask);
}
if (!save) {
log.info("叠盘工位2,任务存储失败!");
reqMap.put(retDpjGw2Vt, 2);
allMap.put(retDpjGw2, reqMap);
}else{
Result result = iBusinDataTaskService.rcsTaskIssued(businDataTask);
if (!Result.isOk(result)) {
log.info("叠盘工位2,给rcs下发任务失败!");
reqMap.put(retDpjGw2Vt, 2);
allMap.put(retDpjGw2, reqMap);
}else{
log.info("叠盘工位2,给rcs下发任务成功!");
reqMap.put(retDpjGw2Vt, 1);
allMap.put(retDpjGw2, reqMap);
businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue());
businDataTask.setTaskStarttime(DateUtils.getNowDate());
businDataTask.setUpdateTime(DateUtils.getNowDate());
iBusinDataTaskService.updateById(businDataTask);
}
}
String allMapJson = JsonUtil.toJSONString(allMap);
log.info("叠盘工位2叠盘请求时,给输送线写命令数据:{}", allMapJson);
Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info("叠盘工位2叠盘请求时,写入的命令返回结果:" + bCR01Boolean.toString());
}
//叠盘机搬运3
if (pointMap.containsKey(dpjGw3) && !pointMap.get(dpjGw3).equals("0")) {
BusinDataTask businDataTask;
boolean save = true;
Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> reqMap = new HashMap<>(1);
LambdaQueryWrapper<BusinDataTask> lqwTask = new LambdaQueryWrapper<BusinDataTask>()
.eq(BusinDataTask::getFromSide,MapEnum.dpjGw3.getValue())
.eq(BusinDataTask::getTaskStatus,TaskStatusEnum.wait_put);
businDataTask = iBusinDataTaskService.getOne(lqwTask);
if(businDataTask != null){
log.info("还未下发的任务:"+businDataTask.getTaskCode());
}else{
String taskCode = IntIdUtil.generateIntId().toString();
businDataTask.setTaskCode(taskCode);
businDataTask.setTaskStatus(TaskStatusEnum.wait_put.getValue());
businDataTask.setTaskType(TaskTypeEnum.Carry.getValue());
businDataTask.setTaskPath(MapEnum.dpj.getValue());
businDataTask.setPriority("1");
businDataTask.setFromSide(MapEnum.dpjGw3.getValue());
businDataTask.setToSide(MapEnum.dpj.getValue());
businDataTask.setCreateTime(DateUtils.getNowDate());
businDataTask.setAgvType("B113");
save = iBusinDataTaskService.save(businDataTask);
}
if (!save) {
log.info("叠盘工位3,任务存储失败!");
reqMap.put(retDpjGw3Vt, 2);
allMap.put(retDpjGw3, reqMap);
}else{
Result result = iBusinDataTaskService.rcsTaskIssued(businDataTask);
if (!Result.isOk(result)) {
log.info("叠盘工位3,给rcs下发任务失败!");
reqMap.put(retDpjGw3Vt, 2);
allMap.put(retDpjGw3, reqMap);
}else{
log.info("叠盘工位3,给rcs下发任务成功!");
reqMap.put(retDpjGw3Vt, 1);
allMap.put(retDpjGw3, reqMap);
businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue());
businDataTask.setTaskStarttime(DateUtils.getNowDate());
businDataTask.setUpdateTime(DateUtils.getNowDate());
iBusinDataTaskService.updateById(businDataTask);
}
}
String allMapJson = JsonUtil.toJSONString(allMap);
log.info("叠盘工位3叠盘请求时,给输送线写命令数据:{}", allMapJson);
Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info("叠盘工位3叠盘请求时,写入的命令返回结果:" + bCR01Boolean.toString());
}
} catch (Exception e) { } catch (Exception e) {
log.error("dpsRealTimeTask:" + e.getMessage()); log.error("dpsRealTimeTask:" + e.getMessage());
} }
@ -667,6 +1010,14 @@ public class PlcEventTask {
} }
public static String getNowDate() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
return LocalDateTime.now().format(formatter);
}
/** /**
* 单个的plc写入 * 单个的plc写入
*/ */

@ -1,6 +1,7 @@
package com.shkj.wcs.service; package com.shkj.wcs.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.shkj.common.core.domain.Result;
import com.shkj.wcs.bo.AGVFeedbackBo; import com.shkj.wcs.bo.AGVFeedbackBo;
import com.shkj.wcs.domain.BusinDataTask; import com.shkj.wcs.domain.BusinDataTask;
import com.shkj.wcs.third.rcs.vo.RcsResponseVo; import com.shkj.wcs.third.rcs.vo.RcsResponseVo;
@ -25,6 +26,13 @@ public interface IBusinDataTaskService extends IService<BusinDataTask> {
*/ */
RcsResponseVo rcsFeedbackTask(AGVFeedbackBo bo); RcsResponseVo rcsFeedbackTask(AGVFeedbackBo bo);
/**
* agv任务下发
* @param businDataTask
* @return
*/
Result rcsTaskIssued(BusinDataTask businDataTask);
} }

@ -27,7 +27,9 @@ import com.shkj.wcs.third.rcs.vo.RcsResponseVo;
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.WcsResponseVo; import com.shkj.wcs.vo.WcsResponseVo;
import com.shkj.wms.enums.MapEnum;
import com.shkj.wms.enums.TaskStatusEnum; import com.shkj.wms.enums.TaskStatusEnum;
import com.shkj.wms.enums.TaskTypeEnum;
import com.shkj.wms.utils.JsonUtil; 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;
@ -72,6 +74,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
String taskType = by.getTaskType(); String taskType = by.getTaskType();
String fromBinCode = by.getFromBinCode(); String fromBinCode = by.getFromBinCode();
String toBinCode = by.getToBinCode(); String toBinCode = by.getToBinCode();
String agvType = by.getAgvType();
String dataChange = by.getDataChange(); String dataChange = by.getDataChange();
String priority = by.getPriority(); String priority = by.getPriority();
LambdaQueryWrapper<BusinDataTask> lqwDataTask = new LambdaQueryWrapper<BusinDataTask>() LambdaQueryWrapper<BusinDataTask> lqwDataTask = new LambdaQueryWrapper<BusinDataTask>()
@ -86,9 +89,11 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
BusinDataTask businDataTask = new BusinDataTask(); BusinDataTask businDataTask = new BusinDataTask();
businDataTask.setTaskCode(taskId); businDataTask.setTaskCode(taskId);
businDataTask.setTaskType(taskType); businDataTask.setTaskType(taskType);
businDataTask.setAgvType(agvType);
businDataTask.setContainerCode(trayCode); businDataTask.setContainerCode(trayCode);
businDataTask.setFromSide(fromBinCode); businDataTask.setFromSide(fromBinCode);
businDataTask.setToSide(toBinCode); businDataTask.setToSide(toBinCode);
businDataTask.setTaskPath(toBinCode);
businDataTask.setTaskStatus(TaskStatusEnum.wait_put.getValue()); businDataTask.setTaskStatus(TaskStatusEnum.wait_put.getValue());
businDataTask.setCreateTime(DateUtils.getNowDate()); businDataTask.setCreateTime(DateUtils.getNowDate());
if (!priority.isEmpty()) { if (!priority.isEmpty()) {
@ -98,52 +103,12 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
if (save) { if (save) {
//调用下游接口下任务 //调用下游接口下任务
log.info("任务储存成功!"); log.info("任务储存成功!");
RcsCreateTaskDto rcsCreateTaskDto = new RcsCreateTaskDto(); Result result = rcsTaskIssued(businDataTask);
rcsCreateTaskDto.setTaskType("B12");
if(taskType.equals("1")){
rcsCreateTaskDto.setTaskType("B13");
}
rcsCreateTaskDto.setRobotTaskCode(businDataTask.getTaskCode());
if (!businDataTask.getPriority().isEmpty()) {
rcsCreateTaskDto.setInitPriority(Integer.parseInt(businDataTask.getPriority()));
}
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.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.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)) { if (!Result.isOk(result)) {
return WcsResponseVo.error(200, "接受成功但给rcs下发任务失败"); return WcsResponseVo.error(200, "接受成功但给rcs下发任务失败");
} }
businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue()); businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue());
businDataTask.setTaskStarttime(DateUtils.getNowDate());
iBusinDataTaskService.updateById(businDataTask); iBusinDataTaskService.updateById(businDataTask);
if (fromBinCode.equals("SC-G2-00-00-2003")) { if (fromBinCode.equals("SC-G2-00-00-2003")) {
Boolean aBoolean = plcEventTask.plcExecWrite(2); Boolean aBoolean = plcEventTask.plcExecWrite(2);
@ -153,6 +118,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
} }
} }
return WcsResponseVo.error(500, "任务存储失败");
//任务取消 //任务取消
} else if (dataChange.equals("2")) { } else if (dataChange.equals("2")) {
if (one == null) { if (one == null) {
@ -209,7 +175,16 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
log.warn("未找到对应任务,任务号:{}", robotTaskCode); log.warn("未找到对应任务,任务号:{}", robotTaskCode);
return RcsResponseVo.error("未找到对应任务"); return RcsResponseVo.error("未找到对应任务");
} }
businDataTask.setAgvTaskStatus(method);
businDataTask.setUpdateTime(new Date());
businDataTask.setAgvNo(bo.getSingleRobotCode());
boolean isUpdated = iBusinDataTaskService.updateById(businDataTask);
if (!isUpdated) {
log.error("任务状态更新失败,任务号:{}", robotTaskCode);
return RcsResponseVo.error("任务状态更新失败");
}
log.info("agv任务状态更新成功,任务号:{}", robotTaskCode);
if(!businDataTask.getTaskType().equals(TaskTypeEnum.Out.getValue())){
switch (method) { switch (method) {
case "start": case "start":
businDataTask.setTaskStarttime(new Date()); businDataTask.setTaskStarttime(new Date());
@ -230,54 +205,106 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
default: default:
return RcsResponseVo.error("任务状态未知!"); return RcsResponseVo.error("任务状态未知!");
} }
businDataTask.setAgvTaskStatus(method); boolean bool = iBusinDataTaskService.updateById(businDataTask);
businDataTask.setUpdateTime(new Date()); if (!bool) {
businDataTask.setAgvNo(bo.getSingleRobotCode()); log.error("总任务状态更新失败,任务号:{}", robotTaskCode);
boolean isUpdated = iBusinDataTaskService.updateById(businDataTask); return RcsResponseVo.error("总任务状态更新失败");
if (!isUpdated) { }
log.error("任务状态更新失败,任务号:{}", robotTaskCode); log.info("总任务状态更新成功,任务号:{}", robotTaskCode);
return RcsResponseVo.error("任务状态更新失败"); UploadWCSTaskStatusDto uploadWCSTaskStatusDto = new UploadWCSTaskStatusDto();
} WcsCreateTaskHeader header = new WcsCreateTaskHeader();
log.info("任务状态更新成功,任务号:{}", robotTaskCode); String taskType = businDataTask.getTaskType();
UploadWCSTaskStatusDto uploadWCSTaskStatusDto = new UploadWCSTaskStatusDto(); switch (taskType) {
WcsCreateTaskHeader header = new WcsCreateTaskHeader(); case "1":
String taskType = businDataTask.getTaskType(); header.setBusinessType("stockOutReturn");
switch (taskType) { break;
case "1": case "2":
header.setBusinessType("stockOutReturn"); header.setBusinessType("stockInReturn");
break; break;
case "2": case "3":
header.setBusinessType("stockInReturn"); header.setBusinessType("transferReturn");
break; break;
case "3": default:
header.setBusinessType("transferReturn"); return RcsResponseVo.error("未知任务类型!");
break; }
default: uploadWCSTaskStatusDto.setHeader(header);
return RcsResponseVo.error("未知任务类型!"); UploadWCSTaskStatusBody body = new UploadWCSTaskStatusBody();
} List<UploadWCSTaskStatusBody> bodyList = new ArrayList<>();
uploadWCSTaskStatusDto.setHeader(header); body.setTaskId(businDataTask.getTaskCode());
UploadWCSTaskStatusBody body = new UploadWCSTaskStatusBody(); body.setTrayCode(carrierCode);
List<UploadWCSTaskStatusBody> bodyList = new ArrayList<>(); body.setTaskType(taskType);
body.setTaskId(businDataTask.getTaskCode()); body.setStatus(businDataTask.getTaskStatus());
body.setTrayCode(carrierCode);
body.setTaskType(taskType);
body.setStatus(businDataTask.getTaskStatus());
// if (businDataTask.getTaskStatus().equals(TaskStatusEnum.finished.getValue())) { // if (businDataTask.getTaskStatus().equals(TaskStatusEnum.finished.getValue())) {
if(slotName.equals("0187000XY0234215")){
slotName = "SC-G2-00-00-43022";
}
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); WcsResponseVo vo = wcsUtil.uploadWCSTaskStatus(uploadWCSTaskStatusDto);
log.info("WZ-WCS状态上报反馈:"+ JSONObject.toJSONString(vo)); 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状态上报异常");
}
} }
return RcsResponseVo.success(new JSONObject().fluentPut("data", robotTaskCode)); return RcsResponseVo.success(new JSONObject().fluentPut("data", robotTaskCode));
} }
@Override
public Result rcsTaskIssued(BusinDataTask businDataTask) {
String toSide = businDataTask.getToSide();
RcsCreateTaskDto rcsCreateTaskDto = new RcsCreateTaskDto();
rcsCreateTaskDto.setTaskType(businDataTask.getAgvType());
rcsCreateTaskDto.setRobotTaskCode(businDataTask.getTaskCode());
if (!businDataTask.getPriority().isEmpty()) {
rcsCreateTaskDto.setInitPriority(Integer.parseInt(businDataTask.getPriority()));
}
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.setCode(businDataTask.getFromSide());
rcsIdList.setOperation(RCSOperation.OT_COLLECT.getValue());
} else {
rcsIdList.setSeq(1);
if(toSide.equals(MapEnum.oneOut.getValue())){
toSide = MapEnum.twoDownIn.getValue();
}
rcsIdList.setCode(toSide);
rcsIdList.setOperation(RCSOperation.OT_DELIVERY.getValue());
}
rcsIdList.setAutoStart(1);
rcsIdLists.add(rcsIdList);
}
rcsCreateTaskDto.setTargetRoute(rcsIdLists);
CarrierInfoList carrierInfoList = new CarrierInfoList();
String substring = toSide.substring(4, 5);
int number = Integer.parseInt(substring);
int carrierCode = 0;
if(number ==2){
carrierCode = CounterService.incrementAndGet(2);
}
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);
return rcsUtil.rcsCreateTask(rcsCreateTaskDto);
}
} }

@ -1,10 +1,47 @@
package com.shkj.wcs.third.rcs; package com.shkj.wcs.third.rcs;
public class CounterService { public class CounterService {
private static int i = 200000; // 静态变量,全局共享 private static int i = 200000; // 2楼
private static int j = 300000; // 3楼
public static synchronized int incrementAndGet() { public static synchronized int incrementAndGet(int code) {
i++; if (code == 2) {
return i; return handleIncrement(i, 200000);
} else if (code == 3) {
return handleIncrement(j, 300000);
} else {
throw new IllegalArgumentException("Invalid code: " + code + "楼层错误");
}
}
private static int handleIncrement(int current, int base) {
int next = current + 1;
int lastThreeDigits = next % 1000;
if (lastThreeDigits > 500) {
next = base + 1;
}
// 更新对应的计数器
if (base == 200000) {
i = next;
} else {
j = next;
}
return next;
}
public static void main(String[] args) {
String toSide = "SC-G3-00-00-2001";
String substring = toSide.substring(4, 5);
int number = Integer.parseInt(substring);
int carrierCode = 0;
if(number ==2){
carrierCode = incrementAndGet(2);
}else if(number ==3){
carrierCode = incrementAndGet(3);
}
System.out.println(carrierCode);
} }
} }

@ -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());
} }
} }

@ -59,7 +59,7 @@ public class UploadWCSTaskStatusBody implements Serializable {
/** /**
* 新增1 * 新增1
*/ */
private String bussinessType ="trayCheck"; private String bussinessType;
} }

@ -56,6 +56,9 @@ public class WcsCreateTaskBody implements Serializable {
@NotBlank(message = "数据类型不得为空") @NotBlank(message = "数据类型不得为空")
private String dataChange; private String dataChange;
@NotBlank(message = "agv模板不得为空")
private String agvType;
/** /**
* 优先级 * 优先级
*/ */

@ -0,0 +1,47 @@
package com.shkj.wms.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum MapEnum {
/**
* 一楼生产车间入库工作站
*/
oneIn("SC-G1-00-00-1001", "一楼生产车间入库工作站"),
/**
* 一楼生产车间出库工作站
*/
oneOut("SC-G1-00-00-1002", "一楼生产车间出库工作站"),
/**
* 二楼连廊入库扫码工作站上面
*/
twoUpIn("SC-G2-00-00-2001", "二楼连廊入库扫码工作站(上面)"),
/**
* 二楼连廊入库扫码工作站下面
*/
twoDownIn("SC-G2-00-00-2002", "二楼连廊入库扫码工作站(下面)"),
/**
* 叠盘机工作站
*/
dpj("SC-G2-00-00-2003", "叠盘机工作站"),
/**
* 叠盘机工位1
*/
dpjGw1("SC-E2-00-34-01", "叠盘机工位1"),
/**
* 叠盘机工位2
*/
dpjGw2("SC-E2-00-34-02", "叠盘机工位2"),
/**
* 叠盘机工位3
*/
dpjGw3("SC-E2-00-34-03", "叠盘机工位3"),
;
private String value;
private String desc;
}

@ -27,7 +27,7 @@ public enum TaskStatusEnum {
/** /**
* 异常 * 异常
*/ */
err("-1", "异常"), err("-1", "AGV下发异常"),
clean("6","已取消"), clean("6","已取消"),
; ;

@ -12,7 +12,9 @@ public enum TaskTypeEnum {
//任务类型 0 正常入库 1维修异常 2扫码异常 3入库冲孔 4 正常出库 5紧急出库 6越库出库 7手工入库 8呼叫空治具 //任务类型 0 正常入库 1维修异常 2扫码异常 3入库冲孔 4 正常出库 5紧急出库 6越库出库 7手工入库 8呼叫空治具
Out("1", "出"), Out("1", "出"),
In("2", "入"); In("2", "入"),
Carry("3", "搬运");
private String value; private String value;

@ -117,7 +117,7 @@ public class SysThirdExceptionRequestServiceImpl extends ServiceImpl<SysThirdExc
* 做任务 定时任务 * 做任务 定时任务
*/ */
@Override @Override
@Scheduled(fixedDelay = 10000) //@Scheduled(fixedDelay = 10000)
public void doTask() { public void doTask() {
LambdaQueryWrapper<SysThirdExceptionRequest> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysThirdExceptionRequest> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysThirdExceptionRequest::getStatus, ThirdApiStatusEnum.fail.getValue()); wrapper.eq(SysThirdExceptionRequest::getStatus, ThirdApiStatusEnum.fail.getValue());

Loading…
Cancel
Save