请求zk_wcs接口封装

main
Comair 9 months ago
parent 2e7b9bd899
commit c495e13601
  1. 7
      shkj-admin/src/main/resources/application-yun.yml
  2. 29
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java
  3. 99
      shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java
  4. 65
      shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusBody.java
  5. 21
      shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusDto.java
  6. 60
      shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsIncomingTaskRequestBody.java
  7. 21
      shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsIncomingTaskRequestDto.java

@ -86,6 +86,11 @@ spring:
max-wait: -1ms
third:
# 中科WCS接口
wcsIncomingTrayCheckUrl: http://127.0.0.1:8081/api/toWzWcs/wcsIncomingTrayCheck
queryTaskStatusUrl: http://127.0.0.1:8081/api/toWzWcs/queryTaskStatus
wcsIncomingTaskRequestUrl: http://127.0.0.1:8081/api/toWzWcs/wcsIncomingTaskRequest
uploadWCSTaskStatusUrl: http://127.0.0.1:8081/api/toWzWcs/uploadWCSTaskStatus
# agv接口
agvCreateTaskUrl: http://127.0.0.1:8081/rest/common/createTask
agvStatesUrl: http://127.0.0.1:8081/rest/robots/states
@ -109,3 +114,5 @@ plc:
secondBarcode: DB320.DBD104
thirdBarcode: DB320.DBD12
containerCode: DB320.DBD6

@ -1,5 +1,6 @@
package com.shkj.wcs.plc;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.shkj.common.constant.RedisConstant;
import com.shkj.common.core.domain.Result;
import com.shkj.common.utils.DateUtils;
@ -7,9 +8,11 @@ import com.shkj.common.utils.MessageUtils;
import com.shkj.plc.sdk.device.PlcOperate;
import com.shkj.system.service.ISysParameterService;
import com.shkj.wcs.bo.WcsPlcConnectQueryBo;
import com.shkj.wcs.domain.BusinDataTask;
import com.shkj.wcs.domain.WcsPlcConnect;
import com.shkj.wcs.domain.WcsPlcProperty;
import com.shkj.wcs.mapper.WcsPlcConnectMapper;
import com.shkj.wcs.service.IBusinDataTaskService;
import com.shkj.wcs.service.IWcsPlcConnectService;
import com.shkj.wcs.service.IWcsPlcPropertyService;
import com.shkj.wcs.third.rcs.RCSUtil;
@ -22,6 +25,7 @@ import com.shkj.wms.domain.BusinOutInPlan;
import com.shkj.wms.domain.BusinPlcException;
import com.shkj.wms.domain.BusinPlcStatus;
import com.shkj.wms.enums.PlanStatusEnum;
import com.shkj.wms.enums.TaskStatusEnum;
import com.shkj.wms.service.IBusinOutInPlanService;
import com.shkj.wms.service.IBusinPlcExceptionService;
import com.shkj.wms.utils.JsonUtil;
@ -78,6 +82,8 @@ public class PlcEventTask {
@Autowired
PlcInit plcInit;
@Autowired
IBusinDataTaskService iBusinDataTaskService;
@Scheduled(fixedDelay = 5000)
public void init() {
@ -424,21 +430,16 @@ public class PlcEventTask {
// }
//调取WZ-WCS
//读取托盘条码内容
String barcodeValueOne = pointMap.get(onePalletAddress).toString();
log.info("1楼请求入库时,读取的条码内容:" + barcodeValueOne);
//根据托盘条码返回正在执行的任务号
Result<PlanOrderLocationVo> orderResult = iBusinOutInPlanService.getOrderNoByContainerCode(barcodeValueOne, "in");
log.info("1楼根据条码获取的任务信息:" + orderResult.getData());
if (Result.isOk(orderResult)) {
PlanOrderLocationVo data = orderResult.getData();
taskIdOne = data.getOrderNo();
cargoHeight = data.getType();//获取托盘或模具类型
} else {
redisTemplate.opsForValue().set(RedisConstant.redisPutInExeMsg + orderResult.getMsg(), orderResult.getMsg());
log.info("1楼获取任务信息失败:" + orderResult.getMsg() + "托盘条码:" + barcodeValueOne);
BusinDataTask dataTask = iBusinDataTaskService.getOne(new LambdaQueryWrapper<BusinDataTask>()
.eq(BusinDataTask::getContainerId, barcodeValueOne)
.notIn(BusinDataTask::getTaskStatus, TaskStatusEnum.finished, TaskStatusEnum.clean.getValue()));
if (dataTask != null) {
log.info("该托盘存在未完成任务,入库请求失败: 托盘条码:" + barcodeValueOne);
//出库拣货尚未拣货时写入异常给plc
Map<String, Object> allMap = new HashMap<>(1);
@ -457,8 +458,6 @@ public class PlcEventTask {
log.info("1楼获取单号入库失败,写入点位失败{}", allMap);
}
}
log.info("1楼入库分配任务ID:" + taskIdOne + "条码号:" + barcodeValueOne);
log.info("1楼入库分配货位类型:" + cargoHeight);
String redisBarcodeOne = String.valueOf(redisTemplate.opsForValue().get(RedisConstant.redisContainer + taskIdOne));
//根据扫码的托盘,判断是否已经下任务了
@ -491,7 +490,7 @@ public class PlcEventTask {
}
}
//2楼是否请求分配
if (pointMap.containsKey(twoAllotAddress) && Boolean.valueOf(pointMap.get(twoAllotAddress).toString())) {
/* if (pointMap.containsKey(twoAllotAddress) && Boolean.valueOf(pointMap.get(twoAllotAddress).toString())) {
Long taskIdTwo = 0L;
//请求入库分配时,判断是否有正在执行的出库任务,如果有则返回
// Object oneTaskOutId = redisTemplate.opsForValue().get(RedisConstant.redisTaskOutOne);
@ -566,7 +565,7 @@ public class PlcEventTask {
//改为入库ID
redisTemplate.opsForValue().set(RedisConstant.redisContainer, taskIdTwo, 10, TimeUnit.SECONDS);
}
}
}*/
//获取1楼入库失败的内容 前超长 后超长
if (pointMap.containsKey(oneBoverlength)) {
oneBoverlengthV = Boolean.valueOf(pointMap.get(oneBoverlength).toString());

@ -18,8 +18,7 @@ import com.shkj.wcs.third.rcs.dto.RcsCancelTaskDto;
import com.shkj.wcs.third.rcs.dto.RcsCreateTaskDto;
import com.shkj.wcs.third.rcs.dto.RcsIdList;
import com.shkj.wcs.third.rcs.dto.RcsThirdResult;
import com.shkj.wcs.third.workbinWcs.dto.WcsIncomingCheckDto;
import com.shkj.wcs.third.workbinWcs.dto.WcsIncomingTrayCheckBody;
import com.shkj.wcs.third.workbinWcs.dto.*;
import com.shkj.wcs.vo.WcsResponseVo;
import com.shkj.wms.bo.AGVMoveBo;
import lombok.extern.slf4j.Slf4j;
@ -44,19 +43,53 @@ import java.util.Map;
@Component
public class WCSUtil {
@Value("${ZKWZ.wcsIncomingTrayCheckUrl:}")
@Value("${third.queryTaskStatusUrl}")
private String queryTaskStatusUrl;
@Value("${third.wcsIncomingTrayCheckUrl}")
private String wcsIncomingTrayCheckUrl;
@Value("${third.wcsIncomingTaskRequestUrl}")
private String wcsIncomingTaskRequestUrl;
@Value("${third.uploadWCSTaskStatusUrl}")
private String uploadWCSTaskStatusUrl;
/**
* WMS向WCS推送新的目的地
* 请求是否存在生产区空托出库任务
*
* @param dto
* @return
*/
public WcsResponseVo wcsPushNewPoint(WcsIncomingTrayCheckBody dto) {
public WcsResponseVo queryTaskStatus(WcsIncomingTrayCheckBody dto) {
Map<String, String> headerMap = new HashMap<>(1);
headerMap.put("businessType", "trayCheck");
String json = JSONObject.toJSONString(dto);
log.info("KJ向WZ请求是否存在生产区空托出库任务参数"+json);
try {
String res = HttpRequest.post(queryTaskStatusUrl)
.addHeaders(headerMap)
.body(json)
.execute().body();
log.info("KJ向WZ请求是否存在生产区空托出库任务返回:" + res);
return parseThirdRcsResult(res);
} catch (Exception e) {
e.printStackTrace();
log.error("KJ向WZ请求是否存在生产区空托出库任务 方法出错了 = {}", e.getMessage());
return WcsResponseVo.error(500,e.getMessage());
}
}
/**
* 生产区入库托盘码校验
*
* @param dto
* @return
*/
public WcsResponseVo wcsIncomingTrayCheck(WcsIncomingTrayCheckBody dto) {
Map<String, String> headerMap = new HashMap<>(1);
headerMap.put("businessType", "trayCheck");
String json = JSONObject.toJSONString(dto);
@ -67,8 +100,7 @@ public class WCSUtil {
.body(json)
.execute().body();
log.info("KJ向WZ请求生产区入库托盘码校验返回:" + res);
WcsResponseVo wcsThirdResult = parseThirdRcsResult(res);
return wcsThirdResult;
return parseThirdRcsResult(res);
} catch (Exception e) {
e.printStackTrace();
log.error("KJ向WZ请求生产区入库托盘码校验 方法出错了 = {}", e.getMessage());
@ -76,6 +108,59 @@ public class WCSUtil {
}
}
/**
* 入库申请
*
* @param dto
* @return
*/
public WcsResponseVo wcsIncomingTaskRequest(WcsIncomingTaskRequestDto dto) {
Map<String, String> headerMap = new HashMap<>(1);
headerMap.put("businessType", dto.getHeader().getBusinessType());
String json = JSONObject.toJSONString(dto);
log.info("KJ向WZ入库申请参数"+json);
try {
String res = HttpRequest.post(wcsIncomingTaskRequestUrl)
.addHeaders(headerMap)
.body(json)
.execute().body();
log.info("KJ向WZ入库申请返回:" + res);
return parseThirdRcsResult(res);
} catch (Exception e) {
e.printStackTrace();
log.error("KJ向WZ入库申请 方法出错了 = {}", e.getMessage());
return WcsResponseVo.error(500,e.getMessage());
}
}
/**
* 任务上报
*
* @param dto
* @return
*/
public WcsResponseVo uploadWCSTaskStatus(UploadWCSTaskStatusDto dto) {
Map<String, String> headerMap = new HashMap<>(1);
headerMap.put("businessType", dto.getHeader().getBusinessType());
String json = JSONObject.toJSONString(dto);
log.info("KJ向WZ任务上报参数"+json);
try {
String res = HttpRequest.post(uploadWCSTaskStatusUrl)
.addHeaders(headerMap)
.body(json)
.execute().body();
log.info("KJ向WZ任务上报返回:" + res);
return parseThirdRcsResult(res);
} catch (Exception e) {
e.printStackTrace();
log.error("KJ向WZ任务上报 方法出错了 = {}", e.getMessage());
return WcsResponseVo.error(500,e.getMessage());
}
}
public WcsResponseVo parseThirdRcsResult(String res) {
try {
res = res.trim();

@ -0,0 +1,65 @@
package com.shkj.wcs.third.workbinWcs.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class UploadWCSTaskStatusBody implements Serializable {
/**
* 任务号
*/
private String taskId;
/**
* 托盘码
*/
@NotBlank(message = "托盘码不得为空")
private String trayCode;
/**
* 任务类型
* 出库1
* 入库2
* 同层同巷道移库3
*/
@NotBlank(message = "任务类型不得为空")
private String taskType;
/**
* 状态
*/
private String status;
/**
* 最终的坐标
*/
private String destination;
/**
* 状态码
*/
private String msgCode;
/**
* 附加信息
*/
private String message;
/**
* 新增1
*/
private String bussinessType ="trayCheck";
}

@ -0,0 +1,21 @@
package com.shkj.wcs.third.workbinWcs.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
*生产区入库校验实体
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class UploadWCSTaskStatusDto implements Serializable {
private WcsCreateTaskHeader header;
private List<UploadWCSTaskStatusBody> body;
}

@ -0,0 +1,60 @@
package com.shkj.wcs.third.workbinWcs.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class WcsIncomingTaskRequestBody implements Serializable {
/**
* 站点编号
*/
private String station;
/**
* 托盘码
*/
@NotBlank(message = "托盘码不得为空")
private String trayCode;
/**
* 任务类型
* 退回0
* 出库1
* 入库2
* 同层同巷道移库3
*/
@NotBlank(message = "任务类型不得为空")
private String taskType;
/**
* 状态
*/
private String status;
/**
* 时间
*/
private String createDt;
/**
* 新增1
*/
private String bussinessType;
/**
* 库区的状态
*/
private Object[] areaStatus;
}

@ -0,0 +1,21 @@
package com.shkj.wcs.third.workbinWcs.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
*生产区入库校验实体
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class WcsIncomingTaskRequestDto implements Serializable {
private WcsCreateTaskHeader header;
private List<WcsIncomingTaskRequestBody> body;
}
Loading…
Cancel
Save