diff --git a/shkj-admin/src/main/resources/application-yun.yml b/shkj-admin/src/main/resources/application-yun.yml index 37aee8a..422f7c2 100644 --- a/shkj-admin/src/main/resources/application-yun.yml +++ b/shkj-admin/src/main/resources/application-yun.yml @@ -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 + + diff --git a/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java b/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java index 709beb7..4a206f1 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java @@ -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 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() + .eq(BusinDataTask::getContainerId, barcodeValueOne) + .notIn(BusinDataTask::getTaskStatus, TaskStatusEnum.finished, TaskStatusEnum.clean.getValue())); + if (dataTask != null) { + log.info("该托盘存在未完成任务,入库请求失败: 托盘条码:" + barcodeValueOne); //出库拣货尚未拣货时写入异常给plc Map 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()); diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java index 93763c2..4c543a1 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java @@ -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 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 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 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 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(); diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusBody.java b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusBody.java new file mode 100644 index 0000000..07d5895 --- /dev/null +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusBody.java @@ -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"; + + +} diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusDto.java b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusDto.java new file mode 100644 index 0000000..c7eab1c --- /dev/null +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/UploadWCSTaskStatusDto.java @@ -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 body; +} diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsIncomingTaskRequestBody.java b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsIncomingTaskRequestBody.java new file mode 100644 index 0000000..c6fa61c --- /dev/null +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsIncomingTaskRequestBody.java @@ -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; + + +} diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsIncomingTaskRequestDto.java b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsIncomingTaskRequestDto.java new file mode 100644 index 0000000..122ab38 --- /dev/null +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/dto/WcsIncomingTaskRequestDto.java @@ -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 body; +}