From 092bbd7dac06816a5880271d66e7a50052159f14 Mon Sep 17 00:00:00 2001 From: Comair <1464848666@qq.com> Date: Mon, 19 May 2025 09:11:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=BF=81=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shkj-admin/pom.xml | 6 + .../src/main/resources/application-yun.yml | 10 +- shkj-admin/src/main/resources/logback.xml | 2 +- shkj-admin/src/test/java/com/shkj/test.java | 77 --- .../com/shkj/common/core/domain/Result.java | 7 + shkj-wms/pom.xml | 23 +- .../java/com/shkj/wcs/bo/AGVFeedbackBo.java | 27 ++ .../main/java/com/shkj/wcs/bo/ExtraData.java | 75 +++ .../controller/busin/AgvTaskContorller.java | 59 ++- .../controller/busin/WcsTaskController.java | 14 +- .../com/shkj/wcs/domain/BusinDataTask.java | 6 + .../com/shkj/wcs/domain/PlcProperties.java | 16 + .../java/com/shkj/wcs/plc/PlcEventTask.java | 439 +++++++++++------- .../main/java/com/shkj/wcs/plc/PlcInit.java | 13 +- .../wcs/service/IBusinDataTaskService.java | 9 + .../impl/BusinDataTaskServiceImpl.java | 147 +++++- .../java/com/shkj/wcs/third/rcs/RCSUtil.java | 9 +- .../wcs/third/rcs/dto/RcsCancelTaskDto.java | 8 +- .../shkj/wcs/third/rcs/vo/RcsResponseVo.java | 51 ++ .../shkj/wcs/third/workbinWcs/WCSUtil.java | 17 +- .../java/com/shkj/wcs/vo/TaskStatusBody.java | 8 + .../com/shkj/wms/enums/BusinTaskTypeEnum.java | 12 +- .../java/com/shkj/wms/enums/TaskTypeEnum.java | 53 +-- 23 files changed, 731 insertions(+), 357 deletions(-) delete mode 100644 shkj-admin/src/test/java/com/shkj/test.java create mode 100644 shkj-wms/src/main/java/com/shkj/wcs/bo/AGVFeedbackBo.java create mode 100644 shkj-wms/src/main/java/com/shkj/wcs/bo/ExtraData.java create mode 100644 shkj-wms/src/main/java/com/shkj/wcs/domain/PlcProperties.java create mode 100644 shkj-wms/src/main/java/com/shkj/wcs/third/rcs/vo/RcsResponseVo.java create mode 100644 shkj-wms/src/main/java/com/shkj/wcs/vo/TaskStatusBody.java diff --git a/shkj-admin/pom.xml b/shkj-admin/pom.xml index fb520ba..2410141 100644 --- a/shkj-admin/pom.xml +++ b/shkj-admin/pom.xml @@ -34,6 +34,12 @@ spring-boot-starter-test + + + org.springframework.boot + spring-boot-starter-validation + + diff --git a/shkj-admin/src/main/resources/application-yun.yml b/shkj-admin/src/main/resources/application-yun.yml index 79ad1ad..fe67a02 100644 --- a/shkj-admin/src/main/resources/application-yun.yml +++ b/shkj-admin/src/main/resources/application-yun.yml @@ -92,9 +92,13 @@ third: wcsIncomingTaskRequestUrl: http://58.214.39.42:5000/api/toWzWcs/wcsIncomingTaskRequest uploadWCSTaskStatusUrl: http://58.214.39.42:5000/api/toWzWcs/uploadWCSTaskStatus # agv接口 - agvCreateTaskUrl: http://127.0.0.1:8081/rest/common/createTask + agvCreateTaskUrl: http://127.0.0.1:8081/rcs/rtas/api/robot/controller/task/submit agvStatesUrl: http://127.0.0.1:8081/api/robot/controller/robot/query - agvCancelTaskUrl: http://127.0.0.1:8081/rest/common/cancelTask + agvCancelTaskUrl: http://127.0.0.1:8081/rcs/rtas/api/robot/controller/task/cancel queryAckByTaskUrl: http://127.0.0.1:8081/rest/common/queryAckByTaskId - +plc: + host: 192.168.1.10 + rack: 0 + slot: 1 + db-number: 5200 diff --git a/shkj-admin/src/main/resources/logback.xml b/shkj-admin/src/main/resources/logback.xml index 3f9e265..9ad18ff 100644 --- a/shkj-admin/src/main/resources/logback.xml +++ b/shkj-admin/src/main/resources/logback.xml @@ -8,7 +8,7 @@ logback - + diff --git a/shkj-admin/src/test/java/com/shkj/test.java b/shkj-admin/src/test/java/com/shkj/test.java deleted file mode 100644 index bb36936..0000000 --- a/shkj-admin/src/test/java/com/shkj/test.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.shkj; - -import com.shkj.plc.sdk.device.PLCReadAndWrite; -import com.shkj.wms.service.IBusinOutInPlanService; -import lombok.extern.slf4j.Slf4j; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import static java.util.concurrent.Executors.newScheduledThreadPool; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = ShkjApplication.class) -@Slf4j -public class test { - @Autowired - IBusinOutInPlanService iBusinOutInPlanService; - - @Autowired - PLCReadAndWrite plcReadAndWrite; - - ScheduledExecutorService executor = newScheduledThreadPool(4); - - @Test - public void test() { - iBusinOutInPlanService.getOrderNoByContainerCode("10000171", "in"); - } - - - - - @Test - public void test2(){ - - executor.scheduleWithFixedDelay(new Runnable() { - - public void run() { - System.out.println("===="); - /* try { - int i = 1 / 0; - } catch (Exception e) { - e.printStackTrace(); - }*/ - - try { - Thread.sleep(10000); - System.out.println("执行完毕"); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - } - }, 1000, 3000, TimeUnit.MILLISECONDS); - } - - - @Test - public void test3(){ - executor.scheduleAtFixedRate(new Runnable() { - - public void run() { - System.out.println("===="); - try { - Thread.sleep(10000);//此地方可以试下把try catch去掉,任务就会停掉 - System.out.println("执行完毕"); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - }, 1000, 3000, TimeUnit.MILLISECONDS); - } -} diff --git a/shkj-common/src/main/java/com/shkj/common/core/domain/Result.java b/shkj-common/src/main/java/com/shkj/common/core/domain/Result.java index 8ef3c9d..330be53 100644 --- a/shkj-common/src/main/java/com/shkj/common/core/domain/Result.java +++ b/shkj-common/src/main/java/com/shkj/common/core/domain/Result.java @@ -117,4 +117,11 @@ public class Result implements Serializable { return false; } + public static Boolean isOk(int code) { + if (code == Result.ok().getCode()) { + return true; + } + return false; + } + } diff --git a/shkj-wms/pom.xml b/shkj-wms/pom.xml index cc1eb7f..a7bfc4a 100644 --- a/shkj-wms/pom.xml +++ b/shkj-wms/pom.xml @@ -6,7 +6,7 @@ shkj com.shkj 3.8.1 - + org.apache.maven.pluginsmaven-compiler-plugin88 4.0.0 shkj-wms @@ -117,6 +117,19 @@ spring-aspects 5.3.23 + + + org.springframework.boot + spring-boot-starter-validation + + + + org.hibernate.validator + hibernate-validator + 6.0.17.Final + compile + + @@ -124,6 +137,14 @@ plc-sdk 1.0-SNAPSHOT + + + com.github.s7connector + s7connector + 2.1 + + + diff --git a/shkj-wms/src/main/java/com/shkj/wcs/bo/AGVFeedbackBo.java b/shkj-wms/src/main/java/com/shkj/wcs/bo/AGVFeedbackBo.java new file mode 100644 index 0000000..41e02b7 --- /dev/null +++ b/shkj-wms/src/main/java/com/shkj/wcs/bo/AGVFeedbackBo.java @@ -0,0 +1,27 @@ +package com.shkj.wcs.bo; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; + +@Data +@NoArgsConstructor +@Accessors(chain = true) +public class AGVFeedbackBo { + + /** + * 任务号 + */ + @NotBlank() + private String robotTaskCode; + + /** + * 当前执行任务的机器人唯一标识 + */ + private String singleRobotCode; + + private ExtraData extra; + +} diff --git a/shkj-wms/src/main/java/com/shkj/wcs/bo/ExtraData.java b/shkj-wms/src/main/java/com/shkj/wcs/bo/ExtraData.java new file mode 100644 index 0000000..c3d3e0f --- /dev/null +++ b/shkj-wms/src/main/java/com/shkj/wcs/bo/ExtraData.java @@ -0,0 +1,75 @@ +package com.shkj.wcs.bo; + +import lombok.Data; + +@Data +public class ExtraData { + + private String async; + private Values values; + + @Data + public static class Values { + /** + * 地图编号 + */ + private String mapCode; + /** + * 上报的方法名 + */ + private String method; + /** + * 载具编号 + */ + private String carrierCode; + /** + * 载具名称 + */ + private String carrierName; + /** + * 载具类型 + */ + private String carrierType; + /** + * 载具种类 + */ + private String carrierCategory; + /** + * 载具角度 + */ + private String carrierDir; + /** + * 当前站点编号 + */ + private String slotCode; + /** + * 站点别名 + */ + private String slotName; + /** + * 存储类型 + */ + private String slotCategory; + /** + * 机器人当前位置x坐标 + */ + private String x; + /** + * 机器人当前位置y坐标 + */ + private String y; + /** + * 机器人种类 + */ + private String amrCategory; + /** + * 机器人类型 + */ + private String amrType; + /** + * 区域编号 + */ + private String zoneCode; + + } +} diff --git a/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/AgvTaskContorller.java b/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/AgvTaskContorller.java index fc4d098..7815341 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/AgvTaskContorller.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/AgvTaskContorller.java @@ -1,35 +1,90 @@ package com.shkj.wcs.controller.busin; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.shkj.common.annotation.Log; import com.shkj.common.annotation.RepeatSubmit; +import com.shkj.common.core.domain.Result; import com.shkj.common.enums.BusinessType; +import com.shkj.common.utils.DateUtils; +import com.shkj.wcs.bo.AGVFeedbackBo; +import com.shkj.wcs.bo.ExtraData; import com.shkj.wcs.bo.WcsRequestBo; +import com.shkj.wcs.domain.BusinDataTask; +import com.shkj.wcs.service.IBusinDataTaskService; +import com.shkj.wcs.third.rcs.RCSUtil; +import com.shkj.wcs.third.rcs.dto.RcsCreateTaskDto; +import com.shkj.wcs.third.rcs.vo.RcsResponseVo; +import com.shkj.wcs.third.workbinWcs.WCSUtil; +import com.shkj.wcs.third.workbinWcs.dto.UploadWCSTaskStatusBody; +import com.shkj.wcs.third.workbinWcs.dto.UploadWCSTaskStatusDto; +import com.shkj.wcs.third.workbinWcs.dto.WcsCreateTaskHeader; import com.shkj.wcs.vo.QueryAreaStatusVo; import com.shkj.wcs.vo.WcsResponseVo; +import com.shkj.wms.enums.TaskStatusEnum; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.exceptions.TooManyResultsException; +import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; +import java.util.Date; import java.util.List; +@Slf4j @RequiredArgsConstructor(onConstructor_ =@Autowired) @RestController @RequestMapping("/agvapi") public class AgvTaskContorller { + @Autowired + private RCSUtil rcsUtil; + + @Autowired + private IBusinDataTaskService iBusinDataTaskService; + @Autowired + private WCSUtil wcsUtil; + /** - * 执行task + * 查询每个库区状态 */ @Log(title = "查询每个库区状态",businessType = BusinessType.UPDATE) @PostMapping("/toKjWcs/queryAreaStatus") @RepeatSubmit - public WcsResponseVo queryAreaStatus(WcsRequestBo wcsRequestBo){ + public WcsResponseVo queryAreaStatus(@RequestBody WcsRequestBo wcsRequestBo){ // 请求agv接口... List areaStatusVos = new ArrayList<>(); return WcsResponseVo.success(areaStatusVos); } + + /** + * 下发任务 + */ + + @Log(title = "下发任务测试接口",businessType = BusinessType.UPDATE) + @PostMapping("/toAgv/rcsCreateTask") + @RepeatSubmit + public Result rcsCreateTask(@RequestBody RcsCreateTaskDto rcsCreateTaskDto){ + // 请求agv接口... + + return rcsUtil.rcsCreateTask(rcsCreateTaskDto); + } + + /** + * 任务执行过程回馈接口 + */ + + @Log(title = "任务执行过程回馈接口",businessType = BusinessType.UPDATE) + @PostMapping("/toKjWcs/rcsFeedbackTask") + @RepeatSubmit + public RcsResponseVo rcsFeedbackTask(@RequestBody AGVFeedbackBo bo){ + return iBusinDataTaskService.rcsFeedbackTask(bo); + } + } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/WcsTaskController.java b/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/WcsTaskController.java index bca9653..e60a7cb 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/WcsTaskController.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/controller/busin/WcsTaskController.java @@ -1,5 +1,6 @@ package com.shkj.wcs.controller.busin; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.shkj.common.annotation.Log; import com.shkj.common.annotation.RepeatSubmit; @@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.validation.Valid; import java.util.ArrayList; import java.util.List; @@ -48,7 +50,7 @@ public class WcsTaskController { */ @PostMapping("/toKjWcs/commonApi") @RepeatSubmit - public WcsResponseVo commonApi(@RequestBody WcsCreateTaskDto bo) { + public WcsResponseVo commonApi(@Valid @RequestBody WcsCreateTaskDto bo) { return iBusinDataTaskService.doTaskGeneratePickTask(bo); } @@ -66,22 +68,18 @@ public class WcsTaskController { @PostMapping("/toKjWcs/queryAreaStatus") @RepeatSubmit public WcsResponseVo queryAreaStatus(@RequestBody WCSQueryAreaStatusDto dto) { - //调用plc接口 暂时不用 - WCSQueryAreaStatusDto wcsQueryAreaStatusDto = new WCSQueryAreaStatusDto(); + //测试使用 List areaStatusBodyList = new ArrayList<>(); String[] areaCodes = {"SC-A2", "SC-B2", "SC-C2", "SC-D2"}; - int[] statusValues = {0, 1, 1, 1}; - for (int i = 0; i < 4; i++) { WCSQueryAreaStatusBody queryAreaStatusBody = new WCSQueryAreaStatusBody(); queryAreaStatusBody.setAreaInLocation(areaCodes[i]); queryAreaStatusBody.setStatus(statusValues[i]); areaStatusBodyList.add(queryAreaStatusBody); } - - wcsQueryAreaStatusDto.setBody(areaStatusBodyList); - return WcsResponseVo.success(wcsQueryAreaStatusDto); + log.info("查询结果及返回结果:"+ JSONObject.toJSONString(areaStatusBodyList)); + return WcsResponseVo.success(areaStatusBodyList); } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/domain/BusinDataTask.java b/shkj-wms/src/main/java/com/shkj/wcs/domain/BusinDataTask.java index e286bc8..cbdd52a 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/domain/BusinDataTask.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/domain/BusinDataTask.java @@ -167,4 +167,10 @@ public class BusinDataTask implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+7") private Date updateTime; + /** + * 实际放货位置 + */ + private String destination; + + } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/domain/PlcProperties.java b/shkj-wms/src/main/java/com/shkj/wcs/domain/PlcProperties.java new file mode 100644 index 0000000..09bae90 --- /dev/null +++ b/shkj-wms/src/main/java/com/shkj/wcs/domain/PlcProperties.java @@ -0,0 +1,16 @@ +package com.shkj.wcs.domain; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "plc") +@Data +public class PlcProperties { + private String host; + private int rack; + private int slot; + private int dbNumber; + +} \ No newline at end of file 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 9bc5c1e..a9a106e 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,6 +1,8 @@ package com.shkj.wcs.plc; import com.shkj.common.constant.RedisConstant; +import com.shkj.common.core.domain.Result; +import com.shkj.common.enums.BusinessType; import com.shkj.plc.sdk.device.PlcOperate; import com.shkj.system.service.ISysParameterService; import com.shkj.wcs.bo.WcsPlcConnectQueryBo; @@ -10,8 +12,16 @@ import com.shkj.wcs.mapper.WcsPlcConnectMapper; import com.shkj.wcs.service.IWcsPlcConnectService; import com.shkj.wcs.service.IWcsPlcPropertyService; import com.shkj.wcs.third.rcs.RCSUtil; +import com.shkj.wcs.third.workbinWcs.WCSUtil; +import com.shkj.wcs.third.workbinWcs.dto.WCSQueryTaskStatusBody; +import com.shkj.wcs.third.workbinWcs.dto.WcsIncomingTaskRequestBody; +import com.shkj.wcs.vo.TaskStatusBody; import com.shkj.wcs.vo.WcsPlcConnectVo; +import com.shkj.wcs.vo.WcsResponseVo; +import com.shkj.wms.enums.BusinTaskTypeEnum; +import com.shkj.wms.enums.TaskTypeEnum; import com.shkj.wms.utils.JsonUtil; +import com.shkj.wms.vo.PlanOrderLocationVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @@ -22,6 +32,7 @@ import java.util.*; import java.util.concurrent.*; import com.shkj.plc.sdk.device.PLCReadAndWrite; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -52,7 +63,10 @@ public class PlcEventTask { @Autowired PlcInit plcInit; - //@Scheduled(fixedDelay = 5000) + @Autowired + WCSUtil wcsUtil; + + @Scheduled(fixedDelay = 5000) public void init() { //查询需要连接的PLC,初始化连接对象 List plcList =(List) redisTemplate.opsForValue().get(RedisConstant.redisPlcListConnect); @@ -74,13 +88,13 @@ public class PlcEventTask { //输送线心跳 - //@Scheduled(fixedDelay = 4000) + @Scheduled(fixedDelay = 4000) public void writePlcheartbeatDps() { //根据连接的plcId获取属性 PlcOperate plcOperate = plcInit.getPlcOperate_dps(); PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite(); Map readPointMap = new HashMap<>(); - String heartbeat = "DB320.0.0"; + String heartbeat = "DB5100"; readPointMap.put(heartbeat, "Boolean"); Map pointMap = plcReadAndWrite.readPlcData(plcOperate, JsonUtil.toJSONString(readPointMap)); @@ -143,8 +157,7 @@ public class PlcEventTask { if (propertyList == null || propertyList.size() == 0) { propertyList = iWcsPlcPropertyService.getWcsPlcPropertyByPlcId(plcId); } - //任务ID - Long taskId = 0L; + // 设备类型:2输送线 1 堆垛机 switch (conn.getDevType()) { //输送线 @@ -159,169 +172,269 @@ public class PlcEventTask { public void dpsRealTimeTask(List propertyList, Map pointMap, PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) { try { - } catch (Exception e) { - log.error("dpsRealTimeTask:" + e.getMessage()); - } - } - - /** - * 输送线请求入库 - * - * @param taskId - * @return - */ - public Boolean dpsTask(Long taskId, Integer reqLayer) { - - //下发任务时,先查询是否有正在执行的入库任务或出库任务,如果有,则不下发入库任务 - Object taskInId = redisTemplate.opsForValue().get(RedisConstant.redisTaskIn); - if (taskInId != null) { - log.info("有入库任务在执行,无法下发入库任务:" + taskInId); - return false; - } + /** + * 请求入库 + */ + //BCR01请求序列号 + String reqInSeria = ""; + + //BCR01条码 + String reqInBarcod = ""; + //BCR01条码数据类型 + + //BCR01外形检测 + String reqInLength = ""; + + //请求入库返回序列号 + String reqInCfmSeria = ""; + String reqInCfmSeriaVt = ""; + + //请求入库返回条码 + String reqInCfmBarcod= ""; + String reqInCfmBarcodVt= ""; + + //返回去向 + String reqInDest = ""; + String reqInDestVt= ""; + + /** + * 空托 + */ + //空托申请 + String reqEmpty = ""; + + //空托确认 + String reqCfm = ""; + String reqCfmVt = ""; + + /** + * 出口上报 + */ + //出口上报请求序列号 + String rptOutSeria = ""; + + //出口上报条码 + String rptOutBarcod = ""; + + //出口上报确认序列号 + String rptOutCfmSeria = ""; + String rptOutCfmSeriaVt = ""; + + //出口上报条码确认 + String rptOutCfmBarcod= ""; + String rptOutCfmBarcodVt= ""; + + //出口上报返回信息 + String retOut = ""; + String retOutVt= ""; + + /** + * 出入库切换 + */ + //出入库切换 + String inOutSwit = ""; + + //出入库切换返回 + String retInOutSwit = ""; + String retInOutSwitVt = ""; + + /** + * 叠盘机 + */ + //叠盘机完成 + String stk = ""; + + //叠盘机返回 + String retStk = ""; + String retStkVt = ""; + + + for (WcsPlcProperty plcProperty : propertyList) { + String pointType = plcProperty.getPointType(); + //请求分配 + if (pointType.equals("reqInSeria")) { + reqInSeria = plcProperty.getAddress(); + } else if (pointType.equals("reqInBarcod")) { + reqInBarcod = plcProperty.getAddress(); + } else if (pointType.equals("reqInLength")) { + reqInLength = plcProperty.getAddress(); + reqInLength = plcProperty.getPointType(); + } else if (pointType.equals("reqInCfmSeria")) { + reqInCfmSeria = plcProperty.getAddress(); + reqInCfmSeriaVt = plcProperty.getPointType(); + } else if (pointType.equals("reqInCfmBarcod")) { + reqInCfmBarcod = plcProperty.getAddress(); + reqInCfmBarcodVt = plcProperty.getPointType(); + } else if (pointType.equals("reqInDest")) { + reqInDest = plcProperty.getAddress(); + reqInDestVt = plcProperty.getPointType(); + + } else if (pointType.equals("reqEmpty")) { + reqEmpty = plcProperty.getAddress(); + } else if (pointType.equals("reqCfm")) { + reqCfm = plcProperty.getAddress(); + reqCfmVt = plcProperty.getPointType(); + } else if (pointType.equals("rptOutSeria")) { + rptOutSeria = plcProperty.getAddress(); + } else if (pointType.equals("rptOutBarcod")) { + rptOutBarcod = plcProperty.getAddress(); + } else if (pointType.equals("rptOutCfmSeria")) { + rptOutCfmSeria = plcProperty.getAddress(); + rptOutCfmSeriaVt = plcProperty.getPointType(); + } else if (pointType.equals("rptOutCfmBarcod")) { + rptOutCfmBarcod = plcProperty.getAddress(); + rptOutCfmBarcodVt = plcProperty.getPointType(); + } else if (pointType.equals("retOut")) { + retOut = plcProperty.getAddress(); + retOutVt = plcProperty.getPointType(); + } else if (pointType.equals("inOutSwit")) { + inOutSwit = plcProperty.getAddress(); + } else if (pointType.equals("retInOutSwit")) { + retInOutSwit = plcProperty.getAddress(); + retInOutSwitVt = plcProperty.getPointType(); + } - Object oneTaskOutId = redisTemplate.opsForValue().get(RedisConstant.redisTaskOutOne); - if (oneTaskOutId != null) { - log.info("1F有出库任务在执行,无法下发入库任务:" + oneTaskOutId); - return false; - } - - Object twoTaskOutId = redisTemplate.opsForValue().get(RedisConstant.redisTaskOutTwo); - if (twoTaskOutId != null) { - log.info("2F有出库任务在执行,无法下发入库任务:" + twoTaskOutId); - return false; - } - - PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite(); - - WcsPlcConnectQueryBo plcConnect = new WcsPlcConnectQueryBo(); - plcConnect.setDevType("1"); - WcsPlcConnectVo wcsPlcConnectVo = wcsPlcConnectMapper.selectPlcConnectBydevType(plcConnect); - Long stkPlcId = wcsPlcConnectVo.getId(); - PlcOperate stkOperate = plcInit.getPlcOperateByIp(wcsPlcConnectVo.getPlcIp()); - String pointTables = wcsPlcConnectVo.getPointTables(); - - Map pointMap = plcReadAndWrite.readPlcData(stkOperate, pointTables); - - List propertyList = iWcsPlcPropertyService.getWcsPlcPropertyByPlcId(stkPlcId); - String plcTaskId = ""; - String taskIdvalueType = ""; - String plcToRow = ""; - String toRowValueType = ""; - String plcToColumn = ""; - String toColumnValueType = ""; - String plcToLayer = ""; - String toLayerValueType = ""; - - String plcPlatform = ""; - String plcPlatformValueType = ""; - - String plcOrderType = ""; - String plcOrderTypeValue = ""; - - //堆垛机完成状态 - String readfinish = ""; - String readfinishValueType = ""; - - String stkAutoManual = ""; - String stkGround = ""; - String stkidle = ""; - String stkRun = ""; - - for (WcsPlcProperty stkProperty : propertyList) { - //获取要堆垛机要写入的点位 - if (stkProperty.getPointType().equals("101")) { - plcTaskId = stkProperty.getAddress(); - taskIdvalueType = stkProperty.getValueType(); - } else if (stkProperty.getPointType().equals("108")) { - plcToRow = stkProperty.getAddress(); - toRowValueType = stkProperty.getValueType(); - } else if (stkProperty.getPointType().equals("109")) { - plcToColumn = stkProperty.getAddress(); - toColumnValueType = stkProperty.getValueType(); - } else if (stkProperty.getPointType().equals("110")) { - plcToLayer = stkProperty.getAddress(); - toLayerValueType = stkProperty.getValueType(); - } else if (stkProperty.getPointType().equals("102")) { - plcOrderType = stkProperty.getAddress(); - plcOrderTypeValue = stkProperty.getValueType(); - } else if (stkProperty.getPointType().equals("103")) { - plcPlatform = stkProperty.getAddress(); - plcPlatformValueType = stkProperty.getValueType(); - } else if (stkProperty.getPointType().equals("4")) { - readfinish = stkProperty.getAddress(); - readfinishValueType = stkProperty.getValueType(); - } else if (stkProperty.getPointType().equals("10")) { - //等于1时堆垛机自动,等于0时堆垛机手动 - stkAutoManual = stkProperty.getAddress(); - } else if (stkProperty.getPointType().equals("11")) { - //等于1时地面柜自动,等于0时地面柜手动 - stkGround = stkProperty.getAddress(); - } else if (stkProperty.getPointType().equals("12")) { - //等于1时堆垛机空闲,等于0时堆垛机正忙 - stkidle = stkProperty.getAddress(); - } else if (stkProperty.getPointType().equals("13")) { - //等于1时堆垛机已激活(运行) - stkRun = stkProperty.getAddress(); } - } - - Boolean stkRunV = false; - if (pointMap.containsKey(stkRun)) { - stkRunV = Boolean.valueOf(pointMap.get(stkRun).toString()); - } - log.info("堆垛机运行状态:" + stkRunV); - if (!stkRunV) { - log.info(taskId + "请求入库时,堆垛机尚未运行"); - return false; - } - - - Boolean stkAutoManualV = null; - if (pointMap.containsKey(stkAutoManual)) { - stkAutoManualV = Boolean.valueOf(pointMap.get(stkAutoManual).toString()); - } - log.info(taskId + "堆垛机自动状态:" + stkAutoManualV); - if (!stkAutoManualV) { - log.info(taskId + "请求入库时,堆垛机手动状态"); - return false; - } - - Boolean stkGroundV = false; - if (pointMap.containsKey(stkGround)) { - stkGroundV = Boolean.valueOf(pointMap.get(stkGround).toString()); - } - log.info(taskId + "地面柜自动状态:" + stkGroundV); - if (!stkGroundV) { - log.info(taskId + "请求入库时,堆垛机地面柜手动状态"); - return false; - } - - Boolean stkidleV = false; - if (pointMap.containsKey(stkidle)) { - stkidleV = Boolean.valueOf(pointMap.get(stkidle).toString()); - } - log.info(taskId + "堆垛机是状态:" + stkidleV); - //1空闲 0繁忙 - if (!stkidleV) { - log.info(taskId + "请求入库时,堆垛机繁忙"); - return false; - } + //扫码处入库申请 + if (pointMap.containsKey(reqInSeria) && Boolean.valueOf(pointMap.get(reqInSeria).toString())) { + //读取请求序列号内容 + Integer bCR01SeriaV = (Integer) pointMap.get(reqInSeria); + //读取托盘条码内容 + String barcodeValueOne = pointMap.get(reqInBarcod).toString(); + log.info("扫码处入库申请时,读取的条码内容:" + barcodeValueOne); + //根据托盘条码返回正在执行的任务号 + WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); + body.setStation(""); + body.setTaskType(TaskTypeEnum.In.getValue()); + body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue()); + body.setTrayCode(barcodeValueOne); + body.setCreateDt(new Date().toString()); + //调用agv接口查询库区状态 + Object[] areaStatus = {}; + body.setAreaStatus(areaStatus); + WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); + log.info("扫码处入库申请wz-wcs返回:" + vo.getHeader()); + Map allMap = new HashMap<>(1); + Map seriaMap = new HashMap<>(1); + seriaMap.put(reqInCfmSeriaVt,bCR01SeriaV ); + allMap.put(reqInCfmSeria, seriaMap); + + Map barcodMap = new HashMap<>(1); + barcodMap.put(reqInCfmBarcodVt, barcodeValueOne); + allMap.put(reqInCfmBarcod, barcodMap); + //成功直行 失败回退 + if (Result.isOk(vo.getHeader().getMsgCode())) { + Map destMap = new HashMap<>(1); + destMap.put(reqInDestVt, 1); + allMap.put(reqInDest, destMap); + } else { + Map destMap = new HashMap<>(1); + destMap.put(reqInDestVt, 2); + allMap.put(reqInDest, destMap); + } + String allMapJson = JsonUtil.toJSONString(allMap); + log.info("扫码处入库申请时,给输送线写命令数据:{}",allMapJson); + Boolean reqInBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); + log.info("扫码处入库申请时,写入的命令返回结果:"+reqInBoolean.toString()); + } + //空托盘申请 + if (pointMap.containsKey(reqEmpty) && Boolean.valueOf(pointMap.get(reqEmpty).toString())) { + WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); + body.setStation("空托处"); + body.setTaskType(TaskTypeEnum.Out.getValue()); + body.setBussinessType(BusinTaskTypeEnum.stockOut.getValue()); + body.setCreateDt(new Date().toString()); + //调用agv接口查询库区状态 + Object[] areaStatus = {}; + body.setAreaStatus(areaStatus); + WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); + log.info("空托申请wz-wcs返回:" + vo.getHeader()); + Map allMap = new HashMap<>(1); + Map reqMap = new HashMap<>(1); + + if (Result.isOk(vo.getHeader().getMsgCode())) { + reqMap.put(retOutVt,1); + } else { + reqMap.put(retOutVt,0); + } + allMap.put(retOut, reqMap); + String allMapJson = JsonUtil.toJSONString(allMap); + log.info("空托申请时,给输送线写命令数据:{}",allMapJson); + Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); + log.info("空托申请时,写入的命令返回结果:"+bCR01Boolean.toString()); + } + //实盘出口上报 + if (pointMap.containsKey(rptOutSeria) && Boolean.valueOf(pointMap.get(rptOutSeria).toString())) { + //读取序列号 + Integer outSeria = (Integer) pointMap.get(rptOutSeria); + //读取托盘条码内容 + String barcodeValueOne = pointMap.get(rptOutBarcod).toString(); + log.info("请求入库时,读取的条码内容:" + barcodeValueOne); + //调用wz-wcs接口 + WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); + body.setStation("出口上报处"); + body.setTaskType(TaskTypeEnum.In.getValue()); + body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue()); + body.setTrayCode(barcodeValueOne); + body.setCreateDt(new Date().toString()); + //调用agv接口查询库区状态 + Object[] areaStatus = {}; + body.setAreaStatus(areaStatus); + WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); + log.info("agv扫码处申请wz-wcs返回:" + vo.getHeader()); + Map allMap = new HashMap<>(1); + Map seriaMap = new HashMap<>(1); + seriaMap.put(rptOutCfmSeriaVt,outSeria ); + allMap.put(rptOutCfmSeria, seriaMap); + + Map barcodMap = new HashMap<>(1); + barcodMap.put(rptOutCfmBarcodVt, barcodeValueOne); + allMap.put(rptOutCfmBarcod, barcodMap); + Map reqMap = new HashMap<>(1); + + if (Result.isOk(vo.getHeader().getMsgCode())) { + reqMap.put(reqCfmVt,1); + } else { + reqMap.put(reqCfmVt,0); + } + allMap.put(reqCfm, reqMap); + String allMapJson = JsonUtil.toJSONString(allMap); + log.info("出口上报时,给输送线写命令数据:{}",allMapJson); + Boolean rptOutBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); + log.info("出口上报时,写入的命令返回结果:"+rptOutBoolean.toString()); + } + //出入库切换 + if (pointMap.containsKey(inOutSwit) && Boolean.valueOf(pointMap.get(inOutSwit).toString())) { + WCSQueryTaskStatusBody body = new WCSQueryTaskStatusBody(); + body.setDestination("叠盘机"); + body.setTaskType("1"); + body.setTrayType("2"); + WcsResponseVo vo = wcsUtil.queryTaskStatus(body); + log.info("扫码处入库申请wz-wcs返回:" + vo.getHeader()); + Map allMap = new HashMap<>(1); + Map reqMap = new HashMap<>(1); + if (Result.isOk(vo.getHeader().getMsgCode())) { + int taskCount = vo.getBody().get(0).getTaskCount(); + if (taskCount == 0){ + reqMap.put(retInOutSwitVt,2); + }else { + reqMap.put(retInOutSwitVt,1); + } + } else { + reqMap.put(retInOutSwitVt,1); + } + allMap.put(retInOutSwit, reqMap); + String allMapJson = JsonUtil.toJSONString(allMap); + log.info("出入库切换时,给输送线写命令数据:{}",allMapJson); + Boolean inOutSwitBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); + log.info("出入库切换时,写入的命令返回结果:"+inOutSwitBoolean.toString()); + } - HashMap allMap = new HashMap(); - log.info(taskId + "请求入库:任务下发之前" + JsonUtil.toJSONString(allMap)); - if (plcReadAndWrite.execWrite(stkOperate, JsonUtil.toJSONString(allMap))) { - log.info(taskId + "请求入库,任务下发成功:"); - redisTemplate.opsForValue().set(RedisConstant.redisTaskIn, taskId); - //请求成功,记录已下发 - redisTemplate.opsForValue().set(RedisConstant.redisReqWare + taskId, taskId, 24, TimeUnit.HOURS); - //请求分配任务ID dps - redisTemplate.delete(RedisConstant.redisContainer + taskId); - return true; - } else { - log.info(taskId + "请求入库任务下发失败"); - return false; + } catch (Exception e) { + log.error("dpsRealTimeTask:" + e.getMessage()); } } + } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java b/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java index 95eceff..2566253 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java @@ -57,21 +57,12 @@ public class PlcInit { plcOperate_stk = plc.getAutomation(); OperateResult connect = plcOperate_stk.connect(); if (connect.IsSuccess){ - log.info(conn.getPlcIp()+"stk连接成功"); + log.info(conn.getPlcIp()+"连接成功"); }else { - log.info(conn.getPlcIp()+"stk连接失败"); + log.info(conn.getPlcIp()+"连接失败"); } } - if (conn.getPlcIp().contains("155.170")){ - plcOperate_dps = plc.getAutomation(); - OperateResult connect = plcOperate_dps.connect(); - if (connect.IsSuccess){ - log.info(conn.getPlcIp()+"dps连接成功"); - }else { - log.info(conn.getPlcIp()+"dps连接失败"); - } - } } } private void reconnect(){ diff --git a/shkj-wms/src/main/java/com/shkj/wcs/service/IBusinDataTaskService.java b/shkj-wms/src/main/java/com/shkj/wcs/service/IBusinDataTaskService.java index 28bbf30..356a77f 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/service/IBusinDataTaskService.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/service/IBusinDataTaskService.java @@ -1,7 +1,9 @@ package com.shkj.wcs.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.shkj.wcs.bo.AGVFeedbackBo; import com.shkj.wcs.domain.BusinDataTask; +import com.shkj.wcs.third.rcs.vo.RcsResponseVo; import com.shkj.wcs.third.workbinWcs.dto.WcsCreateTaskDto; import com.shkj.wcs.vo.WcsResponseVo; @@ -16,6 +18,13 @@ public interface IBusinDataTaskService extends IService { */ WcsResponseVo doTaskGeneratePickTask(WcsCreateTaskDto bo); + /** + * agv任务反馈 + * @param bo + * @return + */ + RcsResponseVo rcsFeedbackTask(AGVFeedbackBo bo); + } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/service/impl/BusinDataTaskServiceImpl.java b/shkj-wms/src/main/java/com/shkj/wcs/service/impl/BusinDataTaskServiceImpl.java index aa7828e..5ae8bee 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/service/impl/BusinDataTaskServiceImpl.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/service/impl/BusinDataTaskServiceImpl.java @@ -1,8 +1,12 @@ package com.shkj.wcs.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shkj.common.core.domain.Result; import com.shkj.common.utils.DateUtils; +import com.shkj.wcs.bo.AGVFeedbackBo; +import com.shkj.wcs.bo.ExtraData; import com.shkj.wcs.bo.WcsPlcPropertyQueryBo; import com.shkj.wcs.domain.BusinDataTask; import com.shkj.wcs.domain.WcsPlcProperty; @@ -10,20 +14,26 @@ import com.shkj.wcs.mapper.BusinDataTaskMapper; import com.shkj.wcs.mapper.WcsPlcPropertyMapper; import com.shkj.wcs.service.IBusinDataTaskService; import com.shkj.wcs.service.IWcsPlcPropertyService; +import com.shkj.wcs.third.rcs.RCSUtil; +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.enums.RCSOperation; import com.shkj.wcs.third.rcs.enums.RCSTaskTypeEnum; -import com.shkj.wcs.third.workbinWcs.dto.WcsCreateTaskBody; -import com.shkj.wcs.third.workbinWcs.dto.WcsCreateTaskDto; +import com.shkj.wcs.third.rcs.vo.RcsResponseVo; +import com.shkj.wcs.third.workbinWcs.WCSUtil; +import com.shkj.wcs.third.workbinWcs.dto.*; import com.shkj.wcs.vo.WcsResponseVo; import com.shkj.wms.enums.TaskStatusEnum; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.exceptions.TooManyResultsException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -34,12 +44,21 @@ import java.util.List; */ @Service @Slf4j +@Transactional(rollbackFor = Exception.class) public class BusinDataTaskServiceImpl extends ServiceImpl implements IBusinDataTaskService { + + @Autowired + private IBusinDataTaskService iBusinDataTaskService; + @Autowired + private WCSUtil wcsUtil; + @Autowired + private RCSUtil rcsUtil; + @Override public WcsResponseVo doTaskGeneratePickTask(WcsCreateTaskDto bo) { - log.info("中科下发任务请求数据:"+bo); if (bo != null) { + log.info("中科下发任务请求数据:" + JSONObject.toJSONString(bo)); List body = bo.getBody(); if (!body.isEmpty()) { for (WcsCreateTaskBody by : body) { @@ -52,7 +71,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl lqwDataTask = new LambdaQueryWrapper() .eq(BusinDataTask::getContainerCode, trayCode) - .in(BusinDataTask::getTaskStatus, TaskStatusEnum.wait_put.getValue(),TaskStatusEnum.wait_callback.getValue() ); + .in(BusinDataTask::getTaskStatus, TaskStatusEnum.wait_put.getValue(), TaskStatusEnum.wait_callback.getValue()); BusinDataTask one = this.getOne(lqwDataTask); if (dataChange.equals("1")) { if (one != null) { @@ -66,7 +85,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl rcsIdLists =new ArrayList<>(); - for (int i = 1;i<=2;i++){ - RcsIdList rcsIdList =new RcsIdList(); - if(i==1){ + List rcsIdLists = new ArrayList<>(); + for (int i = 1; i <= 2; i++) { + RcsIdList rcsIdList = new RcsIdList(); + if (i == 1) { rcsIdList.setType("ZONE"); rcsIdList.setCode(businDataTask.getFromSide()); rcsIdList.setOperation(RCSOperation.OT_COLLECT.getValue()); @@ -92,10 +111,14 @@ public class BusinDataTaskServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper() + .eq(BusinDataTask::getTaskCode, robotTaskCode) + .eq(BusinDataTask::getContainerCode, carrierCode); + BusinDataTask businDataTask; + try { + businDataTask = iBusinDataTaskService.getOne(queryWrapper, true); + } catch (TooManyResultsException e) { + log.error("任务编号 {} 存在重复记录", robotTaskCode); + return RcsResponseVo.error("任务编号存在重复记录"); + } + + if (businDataTask == null) { + log.warn("未找到对应任务,任务号:{}", robotTaskCode); + return RcsResponseVo.error("未找到对应任务"); + } + + String taskType = businDataTask.getTaskType(); + switch (method) { + case "start": + case "outbin": + businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue()); + break; + case "end": + businDataTask.setTaskStatus(TaskStatusEnum.finished.getValue()); + businDataTask.setDestination(slotName); + break; + default: + return RcsResponseVo.error("任务状态未知!"); + } + businDataTask.setUpdateTime(new Date()); + boolean isUpdated = iBusinDataTaskService.updateById(businDataTask); + if (!isUpdated) { + log.error("任务状态更新失败,任务号:{}", robotTaskCode); + return RcsResponseVo.error("任务状态更新失败"); + } + log.info("任务状态更新成功,任务号:{}", robotTaskCode); + UploadWCSTaskStatusDto uploadWCSTaskStatusDto = new UploadWCSTaskStatusDto(); + WcsCreateTaskHeader header = new WcsCreateTaskHeader(); + switch (taskType) { + case "1": + header.setBusinessType("stockOutReturn"); + break; + case "2": + header.setBusinessType("stockInReturn"); + break; + case "3": + header.setBusinessType("transferReturn"); + break; + default: + return RcsResponseVo.error("未知任务类型!"); + } + uploadWCSTaskStatusDto.setHeader(header); + UploadWCSTaskStatusBody body = new UploadWCSTaskStatusBody(); + List bodyList = new ArrayList<>(); + body.setTaskId(businDataTask.getTaskCode()); + body.setTrayCode(carrierCode); + body.setTaskType(taskType); + body.setStatus(businDataTask.getTaskStatus()); + if (businDataTask.getTaskStatus().equals(TaskStatusEnum.finished.getValue())){ + body.setDestination(slotName); + } + body.setMsgCode("200"); + bodyList.add(body); + uploadWCSTaskStatusDto.setBody(bodyList); + log.info("请求zk-wcs参数{}",JSONObject.toJSONString(uploadWCSTaskStatusDto)); + try { + wcsUtil.uploadWCSTaskStatus(uploadWCSTaskStatusDto); + } catch (TooManyResultsException e) { + log.error("WZ-WCS状态上报异常,任务号:{}", robotTaskCode, e); + return RcsResponseVo.error("KJ-WCS状态上报异常"); + } + return RcsResponseVo.success(new JSONObject().fluentPut("data", robotTaskCode)); + } + + } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/RCSUtil.java b/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/RCSUtil.java index 7b87b54..8d0f6c3 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/RCSUtil.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/RCSUtil.java @@ -95,14 +95,15 @@ public class RCSUtil { */ public Result rcsCreateTask(RcsCreateTaskDto dto) { String json = JSONObject.toJSONString(dto); + log.info("向rcs创建任务参数"+json); try { Map headerMap = getHeaderMap(); String res = HttpRequest.post(agvCreateTaskUrl) .addHeaders(headerMap) .body(json) .execute().body(); - Result result = parseThirdRcsResult(res); - return result; + log.info("向rcs创建任务返回:" + res); + return parseThirdRcsResult(res); } catch (Exception e) { e.printStackTrace(); log.error("createTask 方法出错了 = {}", e.getMessage()); @@ -161,14 +162,14 @@ public class RCSUtil { */ public Result rcsTaskCancel(RcsCancelTaskDto dto) { String json = JSONObject.toJSONString(dto); - + log.info("向rcs任务取消参数:" + json); try { Map headerMap = getHeaderMap(); String res = HttpRequest.post(agvCancelTaskUrl) .addHeaders(headerMap) .body(json) .execute().body(); - + log.info("向rcs任务取消返回:" + res); return parseThirdRcsResult(res); } catch (Exception e) { e.printStackTrace(); diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/dto/RcsCancelTaskDto.java b/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/dto/RcsCancelTaskDto.java index 6c7b712..5479700 100644 --- a/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/dto/RcsCancelTaskDto.java +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/dto/RcsCancelTaskDto.java @@ -19,11 +19,11 @@ public class RcsCancelTaskDto implements Serializable { /** - * 地图 id + * 任务号 */ - private Integer mapId; + private String robotTaskCode; /** - * 任务id 任务 id,唯一标识(不能重复) + * 任务取消类型 */ - private String taskId; + private String cancelType; } diff --git a/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/vo/RcsResponseVo.java b/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/vo/RcsResponseVo.java new file mode 100644 index 0000000..59bc749 --- /dev/null +++ b/shkj-wms/src/main/java/com/shkj/wcs/third/rcs/vo/RcsResponseVo.java @@ -0,0 +1,51 @@ +package com.shkj.wcs.third.rcs.vo; + +import lombok.Data; + +import java.util.Collections; +import java.util.List; + +@Data +public class RcsResponseVo { + private String code; + private String message; + private List data; + + + // 成功 + public static RcsResponseVo success(List data) { + RcsResponseVo response = new RcsResponseVo<>(); + response.setCode("SUCCESS"); + response.setMessage("成功"); + response.setData(data != null ? data : Collections.emptyList()); + return response; + } + + // 无数据的成功响应 + public static RcsResponseVo success() { + return success(null); + } + + // 单对象成功响应(非List场景) + public static RcsResponseVo success(T item) { + RcsResponseVo response = new RcsResponseVo<>(); + response.setCode("SUCCESS"); + response.setMessage("成功"); + response.setData(item != null ? + Collections.singletonList(item) : + Collections.emptyList()); + return response; + } + + + + // 错误响应 + public static RcsResponseVo error(String msg) { + RcsResponseVo response = new RcsResponseVo<>(); + response.setCode("ERROR"); + response.setMessage(msg); + response.setData(Collections.emptyList()); + return response; + } + +} \ No newline at end of file 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 0bfcfa3..0410c94 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 @@ -123,16 +123,16 @@ public class WCSUtil { /** * 入库申请 * - * @param dto + * @param * @return */ - public WcsResponseVo wcsIncomingTaskRequest(WcsIncomingTaskRequestBody dto) { + public WcsResponseVo wcsIncomingTaskRequest(WcsIncomingTaskRequestBody body) { JSONObject jsonObject = new JSONObject(); JSONObject header = new JSONObject(); - header.put("businessType","stockIn"); + header.put("businessType",body.getBussinessType()); jsonObject.put("header",header); List incomingTaskRequestBodies = new ArrayList<>(); - incomingTaskRequestBodies.add(dto); + incomingTaskRequestBodies.add(body); jsonObject.put("body",incomingTaskRequestBodies); String json = JSONObject.toJSONString(jsonObject); @@ -158,13 +158,14 @@ public class WCSUtil { * @return */ public WcsResponseVo uploadWCSTaskStatus(UploadWCSTaskStatusDto dto) { - Map headerMap = new HashMap<>(1); - headerMap.put("businessType", dto.getHeader().getBusinessType()); - String json = JSONObject.toJSONString(dto); + JSONObject jsonObject = new JSONObject(); + JSONObject header = new JSONObject(); + jsonObject.put("header",dto.getHeader()); + jsonObject.put("body",dto.getBody()); + String json = JSONObject.toJSONString(jsonObject); log.info("KJ向WZ任务上报参数"+json); try { String res = HttpRequest.post(uploadWCSTaskStatusUrl) - .addHeaders(headerMap) .body(json) .execute().body(); log.info("KJ向WZ任务上报返回:" + res); diff --git a/shkj-wms/src/main/java/com/shkj/wcs/vo/TaskStatusBody.java b/shkj-wms/src/main/java/com/shkj/wcs/vo/TaskStatusBody.java new file mode 100644 index 0000000..93e0635 --- /dev/null +++ b/shkj-wms/src/main/java/com/shkj/wcs/vo/TaskStatusBody.java @@ -0,0 +1,8 @@ +package com.shkj.wcs.vo; + +import lombok.Data; + +@Data +public class TaskStatusBody { + private int taskCount; +} \ No newline at end of file diff --git a/shkj-wms/src/main/java/com/shkj/wms/enums/BusinTaskTypeEnum.java b/shkj-wms/src/main/java/com/shkj/wms/enums/BusinTaskTypeEnum.java index a74ea9a..0731d3f 100644 --- a/shkj-wms/src/main/java/com/shkj/wms/enums/BusinTaskTypeEnum.java +++ b/shkj-wms/src/main/java/com/shkj/wms/enums/BusinTaskTypeEnum.java @@ -13,20 +13,12 @@ public enum BusinTaskTypeEnum { /** * 入库 */ - in("in", "入库"), + stockIn("stockIn", "入库"), /** * 出库 */ - out("out", "出库"), - /** - * 搬运 - */ - move("move", "搬运"), - /** - * 移库 - */ - remove("9","移库"), + stockOut("stockOut", "出库") ; private String value; diff --git a/shkj-wms/src/main/java/com/shkj/wms/enums/TaskTypeEnum.java b/shkj-wms/src/main/java/com/shkj/wms/enums/TaskTypeEnum.java index af67348..3f63a9f 100644 --- a/shkj-wms/src/main/java/com/shkj/wms/enums/TaskTypeEnum.java +++ b/shkj-wms/src/main/java/com/shkj/wms/enums/TaskTypeEnum.java @@ -11,58 +11,9 @@ import lombok.Getter; public enum TaskTypeEnum { //任务类型 0 正常入库 1维修异常 2扫码异常 3入库冲孔 4 正常出库 5紧急出库 6越库出库 7手工入库 8呼叫空治具 - /** - * 正常入库 - */ - normal_in("0", "正常入库"), + Out("1", "出"), + In("2", "入"); - /** - * 1维修异常 - */ - upkeep_err("1", "维修异常"), - /** - * 扫码异常 - */ - scancode_err("2", "扫码异常"), - /** - * 入库冲孔 - */ - putin_punching("3", "入库冲孔"), - - /** - * 正常出库 - */ - normal_out("4", "正常出库"), - - /** - * 5紧急出库 - */ - urgent_out("5", "紧急出库"), - - /** - * 6越库出库 - */ - cross_out("6", "越库出库"), - - /** - * 7手工入库 - */ - byhand_in("7", "手工入库"), - /** - * 8呼叫空治具 - */ - call_container("8", "呼叫空治具"), - - /** - * 9 移库 - */ - relocation("9", "移库"), - - /** - * 10 补货出库 - */ - replenish("10", "补货出库"), - ; private String value; private String desc;