代码迁入

main
Comair 11 months ago
parent efdef5a6fd
commit 092bbd7dac
  1. 6
      shkj-admin/pom.xml
  2. 10
      shkj-admin/src/main/resources/application-yun.yml
  3. 2
      shkj-admin/src/main/resources/logback.xml
  4. 77
      shkj-admin/src/test/java/com/shkj/test.java
  5. 7
      shkj-common/src/main/java/com/shkj/common/core/domain/Result.java
  6. 23
      shkj-wms/pom.xml
  7. 27
      shkj-wms/src/main/java/com/shkj/wcs/bo/AGVFeedbackBo.java
  8. 75
      shkj-wms/src/main/java/com/shkj/wcs/bo/ExtraData.java
  9. 59
      shkj-wms/src/main/java/com/shkj/wcs/controller/busin/AgvTaskContorller.java
  10. 14
      shkj-wms/src/main/java/com/shkj/wcs/controller/busin/WcsTaskController.java
  11. 6
      shkj-wms/src/main/java/com/shkj/wcs/domain/BusinDataTask.java
  12. 16
      shkj-wms/src/main/java/com/shkj/wcs/domain/PlcProperties.java
  13. 439
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java
  14. 13
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java
  15. 9
      shkj-wms/src/main/java/com/shkj/wcs/service/IBusinDataTaskService.java
  16. 147
      shkj-wms/src/main/java/com/shkj/wcs/service/impl/BusinDataTaskServiceImpl.java
  17. 9
      shkj-wms/src/main/java/com/shkj/wcs/third/rcs/RCSUtil.java
  18. 8
      shkj-wms/src/main/java/com/shkj/wcs/third/rcs/dto/RcsCancelTaskDto.java
  19. 51
      shkj-wms/src/main/java/com/shkj/wcs/third/rcs/vo/RcsResponseVo.java
  20. 17
      shkj-wms/src/main/java/com/shkj/wcs/third/workbinWcs/WCSUtil.java
  21. 8
      shkj-wms/src/main/java/com/shkj/wcs/vo/TaskStatusBody.java
  22. 12
      shkj-wms/src/main/java/com/shkj/wms/enums/BusinTaskTypeEnum.java
  23. 53
      shkj-wms/src/main/java/com/shkj/wms/enums/TaskTypeEnum.java

@ -34,6 +34,12 @@
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
</dependency> </dependency>
<!-- Maven依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- swagger3--> <!-- swagger3-->

@ -92,9 +92,13 @@ third:
wcsIncomingTaskRequestUrl: http://58.214.39.42:5000/api/toWzWcs/wcsIncomingTaskRequest wcsIncomingTaskRequestUrl: http://58.214.39.42:5000/api/toWzWcs/wcsIncomingTaskRequest
uploadWCSTaskStatusUrl: http://58.214.39.42:5000/api/toWzWcs/uploadWCSTaskStatus uploadWCSTaskStatusUrl: http://58.214.39.42:5000/api/toWzWcs/uploadWCSTaskStatus
# agv接口 # agv接口
agvCreateTaskUrl: http://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 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 queryAckByTaskUrl: http://127.0.0.1:8081/rest/common/queryAckByTaskId
plc:
host: 192.168.1.10
rack: 0
slot: 1
db-number: 5200

@ -8,7 +8,7 @@
<contextName>logback</contextName> <contextName>logback</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<!-- <property name="log.path" value="/opt/logs/mjk2" />--> <!-- <property name="log.path" value="/opt/logs/mjk2" />-->
<property name="log.path" value="D:/wcs/logs" /> <property name="log.path" value="/opt/logs/sc" />
<!-- 彩色日志 --> <!-- 彩色日志 -->
<!-- 配置格式变量:CONSOLE_LOG_PATTERN 彩色日志格式 --> <!-- 配置格式变量:CONSOLE_LOG_PATTERN 彩色日志格式 -->

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

@ -117,4 +117,11 @@ public class Result<T> implements Serializable {
return false; return false;
} }
public static Boolean isOk(int code) {
if (code == Result.ok().getCode()) {
return true;
}
return false;
}
} }

@ -6,7 +6,7 @@
<artifactId>shkj</artifactId> <artifactId>shkj</artifactId>
<groupId>com.shkj</groupId> <groupId>com.shkj</groupId>
<version>3.8.1</version> <version>3.8.1</version>
</parent> </parent><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin></plugins></build>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>shkj-wms</artifactId> <artifactId>shkj-wms</artifactId>
@ -117,6 +117,19 @@
<artifactId>spring-aspects</artifactId> <artifactId>spring-aspects</artifactId>
<version>5.3.23</version> <version>5.3.23</version>
</dependency> </dependency>
<!-- Maven依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- 接口参数校验注解依赖包 -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.17.Final</version>
<scope>compile</scope>
</dependency>
<!-- PLC设备联动--> <!-- PLC设备联动-->
<dependency> <dependency>
@ -124,6 +137,14 @@
<artifactId>plc-sdk</artifactId> <artifactId>plc-sdk</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>com.github.s7connector</groupId>
<artifactId>s7connector</artifactId>
<version>2.1</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

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

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

@ -1,35 +1,90 @@
package com.shkj.wcs.controller.busin; 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.Log;
import com.shkj.common.annotation.RepeatSubmit; import com.shkj.common.annotation.RepeatSubmit;
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.wcs.bo.AGVFeedbackBo;
import com.shkj.wcs.bo.ExtraData;
import com.shkj.wcs.bo.WcsRequestBo; 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.QueryAreaStatusVo;
import com.shkj.wcs.vo.WcsResponseVo; import com.shkj.wcs.vo.WcsResponseVo;
import com.shkj.wms.enums.TaskStatusEnum;
import lombok.RequiredArgsConstructor; 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.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; 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.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
@Slf4j
@RequiredArgsConstructor(onConstructor_ =@Autowired) @RequiredArgsConstructor(onConstructor_ =@Autowired)
@RestController @RestController
@RequestMapping("/agvapi") @RequestMapping("/agvapi")
public class AgvTaskContorller { public class AgvTaskContorller {
@Autowired
private RCSUtil rcsUtil;
@Autowired
private IBusinDataTaskService iBusinDataTaskService;
@Autowired
private WCSUtil wcsUtil;
/** /**
* 执行task * 查询每个库区状态
*/ */
@Log(title = "查询每个库区状态",businessType = BusinessType.UPDATE) @Log(title = "查询每个库区状态",businessType = BusinessType.UPDATE)
@PostMapping("/toKjWcs/queryAreaStatus") @PostMapping("/toKjWcs/queryAreaStatus")
@RepeatSubmit @RepeatSubmit
public WcsResponseVo queryAreaStatus(WcsRequestBo wcsRequestBo){ public WcsResponseVo queryAreaStatus(@RequestBody WcsRequestBo wcsRequestBo){
// 请求agv接口... // 请求agv接口...
List<QueryAreaStatusVo> areaStatusVos = new ArrayList<>(); List<QueryAreaStatusVo> areaStatusVos = new ArrayList<>();
return WcsResponseVo.success(areaStatusVos); 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);
}
} }

@ -1,5 +1,6 @@
package com.shkj.wcs.controller.busin; package com.shkj.wcs.controller.busin;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.shkj.common.annotation.Log; import com.shkj.common.annotation.Log;
import com.shkj.common.annotation.RepeatSubmit; 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.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -48,7 +50,7 @@ public class WcsTaskController {
*/ */
@PostMapping("/toKjWcs/commonApi") @PostMapping("/toKjWcs/commonApi")
@RepeatSubmit @RepeatSubmit
public WcsResponseVo commonApi(@RequestBody WcsCreateTaskDto bo) { public WcsResponseVo commonApi(@Valid @RequestBody WcsCreateTaskDto bo) {
return iBusinDataTaskService.doTaskGeneratePickTask(bo); return iBusinDataTaskService.doTaskGeneratePickTask(bo);
} }
@ -66,22 +68,18 @@ public class WcsTaskController {
@PostMapping("/toKjWcs/queryAreaStatus") @PostMapping("/toKjWcs/queryAreaStatus")
@RepeatSubmit @RepeatSubmit
public WcsResponseVo queryAreaStatus(@RequestBody WCSQueryAreaStatusDto dto) { public WcsResponseVo queryAreaStatus(@RequestBody WCSQueryAreaStatusDto dto) {
//调用plc接口 暂时不用 //测试使用
WCSQueryAreaStatusDto wcsQueryAreaStatusDto = new WCSQueryAreaStatusDto();
List<WCSQueryAreaStatusBody> areaStatusBodyList = new ArrayList<>(); List<WCSQueryAreaStatusBody> areaStatusBodyList = new ArrayList<>();
String[] areaCodes = {"SC-A2", "SC-B2", "SC-C2", "SC-D2"}; String[] areaCodes = {"SC-A2", "SC-B2", "SC-C2", "SC-D2"};
int[] statusValues = {0, 1, 1, 1}; int[] statusValues = {0, 1, 1, 1};
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
WCSQueryAreaStatusBody queryAreaStatusBody = new WCSQueryAreaStatusBody(); WCSQueryAreaStatusBody queryAreaStatusBody = new WCSQueryAreaStatusBody();
queryAreaStatusBody.setAreaInLocation(areaCodes[i]); queryAreaStatusBody.setAreaInLocation(areaCodes[i]);
queryAreaStatusBody.setStatus(statusValues[i]); queryAreaStatusBody.setStatus(statusValues[i]);
areaStatusBodyList.add(queryAreaStatusBody); areaStatusBodyList.add(queryAreaStatusBody);
} }
log.info("查询结果及返回结果:"+ JSONObject.toJSONString(areaStatusBodyList));
wcsQueryAreaStatusDto.setBody(areaStatusBodyList); return WcsResponseVo.success(areaStatusBodyList);
return WcsResponseVo.success(wcsQueryAreaStatusDto);
} }

@ -167,4 +167,10 @@ public class BusinDataTask implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+7") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+7")
private Date updateTime; private Date updateTime;
/**
* 实际放货位置
*/
private String destination;
} }

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

@ -1,6 +1,8 @@
package com.shkj.wcs.plc; package com.shkj.wcs.plc;
import com.shkj.common.constant.RedisConstant; 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.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;
@ -10,8 +12,16 @@ import com.shkj.wcs.mapper.WcsPlcConnectMapper;
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.RCSUtil; 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.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.utils.JsonUtil;
import com.shkj.wms.vo.PlanOrderLocationVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
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;
@ -22,6 +32,7 @@ import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import com.shkj.plc.sdk.device.PLCReadAndWrite; import com.shkj.plc.sdk.device.PLCReadAndWrite;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -52,7 +63,10 @@ public class PlcEventTask {
@Autowired @Autowired
PlcInit plcInit; PlcInit plcInit;
//@Scheduled(fixedDelay = 5000) @Autowired
WCSUtil wcsUtil;
@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);
@ -74,13 +88,13 @@ public class PlcEventTask {
//输送线心跳 //输送线心跳
//@Scheduled(fixedDelay = 4000) @Scheduled(fixedDelay = 4000)
public void writePlcheartbeatDps() { public void writePlcheartbeatDps() {
//根据连接的plcId获取属性 //根据连接的plcId获取属性
PlcOperate plcOperate = plcInit.getPlcOperate_dps(); PlcOperate plcOperate = plcInit.getPlcOperate_dps();
PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite(); PLCReadAndWrite plcReadAndWrite = new PLCReadAndWrite();
Map<String, Object> readPointMap = new HashMap<>(); Map<String, Object> readPointMap = new HashMap<>();
String heartbeat = "DB320.0.0"; String heartbeat = "DB5100";
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));
@ -143,8 +157,7 @@ public class PlcEventTask {
if (propertyList == null || propertyList.size() == 0) { if (propertyList == null || propertyList.size() == 0) {
propertyList = iWcsPlcPropertyService.getWcsPlcPropertyByPlcId(plcId); propertyList = iWcsPlcPropertyService.getWcsPlcPropertyByPlcId(plcId);
} }
//任务ID
Long taskId = 0L;
// 设备类型:2输送线 1 堆垛机 // 设备类型:2输送线 1 堆垛机
switch (conn.getDevType()) { switch (conn.getDevType()) {
//输送线 //输送线
@ -159,169 +172,269 @@ public class PlcEventTask {
public void dpsRealTimeTask(List<WcsPlcProperty> propertyList, Map<String, Object> pointMap, PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) { public void dpsRealTimeTask(List<WcsPlcProperty> propertyList, Map<String, Object> pointMap, PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) {
try { try {
} catch (Exception e) { /**
log.error("dpsRealTimeTask:" + e.getMessage()); * 请求入库
} */
} //BCR01请求序列号
String reqInSeria = "";
/**
* 输送线请求入库 //BCR01条码
* String reqInBarcod = "";
* @param taskId //BCR01条码数据类型
* @return
*/ //BCR01外形检测
public Boolean dpsTask(Long taskId, Integer reqLayer) { String reqInLength = "";
//下发任务时,先查询是否有正在执行的入库任务或出库任务,如果有,则不下发入库任务 //请求入库返回序列号
Object taskInId = redisTemplate.opsForValue().get(RedisConstant.redisTaskIn); String reqInCfmSeria = "";
if (taskInId != null) { String reqInCfmSeriaVt = "";
log.info("有入库任务在执行,无法下发入库任务:" + taskInId);
return false; //请求入库返回条码
} 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<String, Object> pointMap = plcReadAndWrite.readPlcData(stkOperate, pointTables);
List<WcsPlcProperty> 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();
} }
} //扫码处入库申请
if (pointMap.containsKey(reqInSeria) && Boolean.valueOf(pointMap.get(reqInSeria).toString())) {
Boolean stkRunV = false; //读取请求序列号内容
if (pointMap.containsKey(stkRun)) { Integer bCR01SeriaV = (Integer) pointMap.get(reqInSeria);
stkRunV = Boolean.valueOf(pointMap.get(stkRun).toString()); //读取托盘条码内容
} String barcodeValueOne = pointMap.get(reqInBarcod).toString();
log.info("堆垛机运行状态:" + stkRunV); log.info("扫码处入库申请时,读取的条码内容:" + barcodeValueOne);
if (!stkRunV) { //根据托盘条码返回正在执行的任务号
log.info(taskId + "请求入库时,堆垛机尚未运行"); WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody();
return false; body.setStation("");
} body.setTaskType(TaskTypeEnum.In.getValue());
body.setBussinessType(BusinTaskTypeEnum.stockIn.getValue());
body.setTrayCode(barcodeValueOne);
Boolean stkAutoManualV = null; body.setCreateDt(new Date().toString());
if (pointMap.containsKey(stkAutoManual)) { //调用agv接口查询库区状态
stkAutoManualV = Boolean.valueOf(pointMap.get(stkAutoManual).toString()); Object[] areaStatus = {};
} body.setAreaStatus(areaStatus);
log.info(taskId + "堆垛机自动状态:" + stkAutoManualV); WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body);
if (!stkAutoManualV) { log.info("扫码处入库申请wz-wcs返回:" + vo.getHeader());
log.info(taskId + "请求入库时,堆垛机手动状态"); Map<String, Object> allMap = new HashMap<>(1);
return false; Map<String, Integer> seriaMap = new HashMap<>(1);
} seriaMap.put(reqInCfmSeriaVt,bCR01SeriaV );
allMap.put(reqInCfmSeria, seriaMap);
Boolean stkGroundV = false;
if (pointMap.containsKey(stkGround)) { Map<String, String> barcodMap = new HashMap<>(1);
stkGroundV = Boolean.valueOf(pointMap.get(stkGround).toString()); barcodMap.put(reqInCfmBarcodVt, barcodeValueOne);
} allMap.put(reqInCfmBarcod, barcodMap);
log.info(taskId + "地面柜自动状态:" + stkGroundV); //成功直行 失败回退
if (!stkGroundV) { if (Result.isOk(vo.getHeader().getMsgCode())) {
log.info(taskId + "请求入库时,堆垛机地面柜手动状态"); Map<String, Integer> destMap = new HashMap<>(1);
return false; destMap.put(reqInDestVt, 1);
} allMap.put(reqInDest, destMap);
} else {
Boolean stkidleV = false; Map<String, Integer> destMap = new HashMap<>(1);
if (pointMap.containsKey(stkidle)) { destMap.put(reqInDestVt, 2);
stkidleV = Boolean.valueOf(pointMap.get(stkidle).toString()); allMap.put(reqInDest, destMap);
} }
log.info(taskId + "堆垛机是状态:" + stkidleV); String allMapJson = JsonUtil.toJSONString(allMap);
//1空闲 0繁忙 log.info("扫码处入库申请时,给输送线写命令数据:{}",allMapJson);
if (!stkidleV) { Boolean reqInBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson);
log.info(taskId + "请求入库时,堆垛机繁忙"); log.info("扫码处入库申请时,写入的命令返回结果:"+reqInBoolean.toString());
return false; }
} //空托盘申请
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<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> 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<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> seriaMap = new HashMap<>(1);
seriaMap.put(rptOutCfmSeriaVt,outSeria );
allMap.put(rptOutCfmSeria, seriaMap);
Map<String, String> barcodMap = new HashMap<>(1);
barcodMap.put(rptOutCfmBarcodVt, barcodeValueOne);
allMap.put(rptOutCfmBarcod, barcodMap);
Map<String, Integer> 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<TaskStatusBody> vo = wcsUtil.queryTaskStatus(body);
log.info("扫码处入库申请wz-wcs返回:" + vo.getHeader());
Map<String, Object> allMap = new HashMap<>(1);
Map<String, Integer> 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(); } catch (Exception e) {
log.info(taskId + "请求入库:任务下发之前" + JsonUtil.toJSONString(allMap)); log.error("dpsRealTimeTask:" + e.getMessage());
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;
} }
} }
} }

@ -57,21 +57,12 @@ public class PlcInit {
plcOperate_stk = plc.getAutomation(); plcOperate_stk = plc.getAutomation();
OperateResult connect = plcOperate_stk.connect(); OperateResult connect = plcOperate_stk.connect();
if (connect.IsSuccess){ if (connect.IsSuccess){
log.info(conn.getPlcIp()+"stk连接成功"); log.info(conn.getPlcIp()+"连接成功");
}else { }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(){ private void reconnect(){

@ -1,7 +1,9 @@
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.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.workbinWcs.dto.WcsCreateTaskDto; import com.shkj.wcs.third.workbinWcs.dto.WcsCreateTaskDto;
import com.shkj.wcs.vo.WcsResponseVo; import com.shkj.wcs.vo.WcsResponseVo;
@ -16,6 +18,13 @@ public interface IBusinDataTaskService extends IService<BusinDataTask> {
*/ */
WcsResponseVo doTaskGeneratePickTask(WcsCreateTaskDto bo); WcsResponseVo doTaskGeneratePickTask(WcsCreateTaskDto bo);
/**
* agv任务反馈
* @param bo
* @return
*/
RcsResponseVo rcsFeedbackTask(AGVFeedbackBo bo);
} }

@ -1,8 +1,12 @@
package com.shkj.wcs.service.impl; package com.shkj.wcs.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shkj.common.core.domain.Result;
import com.shkj.common.utils.DateUtils; 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.bo.WcsPlcPropertyQueryBo;
import com.shkj.wcs.domain.BusinDataTask; import com.shkj.wcs.domain.BusinDataTask;
import com.shkj.wcs.domain.WcsPlcProperty; 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.mapper.WcsPlcPropertyMapper;
import com.shkj.wcs.service.IBusinDataTaskService; import com.shkj.wcs.service.IBusinDataTaskService;
import com.shkj.wcs.service.IWcsPlcPropertyService; import com.shkj.wcs.service.IWcsPlcPropertyService;
import com.shkj.wcs.third.rcs.RCSUtil;
import com.shkj.wcs.third.rcs.dto.RcsCancelTaskDto;
import com.shkj.wcs.third.rcs.dto.RcsCreateTaskDto; import com.shkj.wcs.third.rcs.dto.RcsCreateTaskDto;
import com.shkj.wcs.third.rcs.dto.RcsIdList; import com.shkj.wcs.third.rcs.dto.RcsIdList;
import com.shkj.wcs.third.rcs.enums.RCSOperation; import com.shkj.wcs.third.rcs.enums.RCSOperation;
import com.shkj.wcs.third.rcs.enums.RCSTaskTypeEnum; import com.shkj.wcs.third.rcs.enums.RCSTaskTypeEnum;
import com.shkj.wcs.third.workbinWcs.dto.WcsCreateTaskBody; import com.shkj.wcs.third.rcs.vo.RcsResponseVo;
import com.shkj.wcs.third.workbinWcs.dto.WcsCreateTaskDto; import com.shkj.wcs.third.workbinWcs.WCSUtil;
import com.shkj.wcs.third.workbinWcs.dto.*;
import com.shkj.wcs.vo.WcsResponseVo; import com.shkj.wcs.vo.WcsResponseVo;
import com.shkj.wms.enums.TaskStatusEnum; import com.shkj.wms.enums.TaskStatusEnum;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.exceptions.TooManyResultsException;
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.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -34,12 +44,21 @@ import java.util.List;
*/ */
@Service @Service
@Slf4j @Slf4j
@Transactional(rollbackFor = Exception.class)
public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, BusinDataTask> implements IBusinDataTaskService { public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, BusinDataTask> implements IBusinDataTaskService {
@Autowired
private IBusinDataTaskService iBusinDataTaskService;
@Autowired
private WCSUtil wcsUtil;
@Autowired
private RCSUtil rcsUtil;
@Override @Override
public WcsResponseVo doTaskGeneratePickTask(WcsCreateTaskDto bo) { public WcsResponseVo doTaskGeneratePickTask(WcsCreateTaskDto bo) {
log.info("中科下发任务请求数据:"+bo);
if (bo != null) { if (bo != null) {
log.info("中科下发任务请求数据:" + JSONObject.toJSONString(bo));
List<WcsCreateTaskBody> body = bo.getBody(); List<WcsCreateTaskBody> body = bo.getBody();
if (!body.isEmpty()) { if (!body.isEmpty()) {
for (WcsCreateTaskBody by : body) { for (WcsCreateTaskBody by : body) {
@ -52,7 +71,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
String priority = by.getPriority(); String priority = by.getPriority();
LambdaQueryWrapper<BusinDataTask> lqwDataTask = new LambdaQueryWrapper<BusinDataTask>() LambdaQueryWrapper<BusinDataTask> lqwDataTask = new LambdaQueryWrapper<BusinDataTask>()
.eq(BusinDataTask::getContainerCode, trayCode) .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); BusinDataTask one = this.getOne(lqwDataTask);
if (dataChange.equals("1")) { if (dataChange.equals("1")) {
if (one != null) { if (one != null) {
@ -66,7 +85,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
businDataTask.setToSide(toBinCode); businDataTask.setToSide(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()) {
businDataTask.setPriority(priority); businDataTask.setPriority(priority);
} }
boolean save = this.save(businDataTask); boolean save = this.save(businDataTask);
@ -76,13 +95,13 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
RcsCreateTaskDto rcsCreateTaskDto = new RcsCreateTaskDto(); RcsCreateTaskDto rcsCreateTaskDto = new RcsCreateTaskDto();
rcsCreateTaskDto.setTaskType(RCSTaskTypeEnum.PF_LMR_COMMON.getValue()); rcsCreateTaskDto.setTaskType(RCSTaskTypeEnum.PF_LMR_COMMON.getValue());
rcsCreateTaskDto.setRobotTaskCode(businDataTask.getTaskCode()); rcsCreateTaskDto.setRobotTaskCode(businDataTask.getTaskCode());
if(!businDataTask.getPriority().isEmpty()){ if (!businDataTask.getPriority().isEmpty()) {
rcsCreateTaskDto.setInitPriority(Integer.parseInt(businDataTask.getPriority())); rcsCreateTaskDto.setInitPriority(Integer.parseInt(businDataTask.getPriority()));
} }
List<RcsIdList> rcsIdLists =new ArrayList<>(); List<RcsIdList> rcsIdLists = new ArrayList<>();
for (int i = 1;i<=2;i++){ for (int i = 1; i <= 2; i++) {
RcsIdList rcsIdList =new RcsIdList(); RcsIdList rcsIdList = new RcsIdList();
if(i==1){ if (i == 1) {
rcsIdList.setType("ZONE"); rcsIdList.setType("ZONE");
rcsIdList.setCode(businDataTask.getFromSide()); rcsIdList.setCode(businDataTask.getFromSide());
rcsIdList.setOperation(RCSOperation.OT_COLLECT.getValue()); rcsIdList.setOperation(RCSOperation.OT_COLLECT.getValue());
@ -92,10 +111,14 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
rcsIdList.setOperation(RCSOperation.OT_DELIVERY.getValue()); rcsIdList.setOperation(RCSOperation.OT_DELIVERY.getValue());
rcsIdLists.add(rcsIdList); rcsIdLists.add(rcsIdList);
} }
rcsCreateTaskDto.setTargetRoute(rcsIdLists);
//Result result = rcsUtil.rcsCreateTask(rcsCreateTaskDto); Result result = rcsUtil.rcsCreateTask(rcsCreateTaskDto);
if (!Result.isOk(result)){
return WcsResponseVo.error(200,"给rcs下发任务失败");
}
} }
//任务取消
} else if (dataChange.equals("2")) { } else if (dataChange.equals("2")) {
if (one == null) { if (one == null) {
return WcsResponseVo.error(500, "未查询到该托盘" + trayCode + "存在未完成的任务"); return WcsResponseVo.error(500, "未查询到该托盘" + trayCode + "存在未完成的任务");
@ -103,13 +126,109 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
one.setTaskStatus("6"); one.setTaskStatus("6");
this.updateById(one); this.updateById(one);
//推送给下游 //推送给下游
RcsCancelTaskDto rcsCancelTaskDto = new RcsCancelTaskDto();
rcsCancelTaskDto.setRobotTaskCode(taskId);
if(one.getTaskStatus().equals(TaskStatusEnum.wait_put.getValue())){
//软取消
rcsCancelTaskDto.setCancelType("CANCEL");
}else{
//硬取消(人工介入)
rcsCancelTaskDto.setCancelType("DROP");
}
Result result = rcsUtil.rcsTaskCancel(rcsCancelTaskDto);
if (!Result.isOk(result)){
return WcsResponseVo.error(200,"给rcs取消任务失败");
}
} }
return WcsResponseVo.success(); return WcsResponseVo.success();
} }
} }
}else{
log.info("中科下发任务请求数据为空");
} }
return WcsResponseVo.error(500,"请求失败请检查参数"); return WcsResponseVo.error(500,"请求失败请检查参数");
} }
@Override
public RcsResponseVo rcsFeedbackTask(AGVFeedbackBo bo) {
String robotTaskCode = bo.getRobotTaskCode();
ExtraData.Values values = bo.getExtra().getValues();
String carrierCode = values.getCarrierCode();
String method = values.getMethod();
String slotName = values.getSlotName();
LambdaQueryWrapper<BusinDataTask> queryWrapper = new LambdaQueryWrapper<BusinDataTask>()
.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<UploadWCSTaskStatusBody> 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));
}
} }

@ -95,14 +95,15 @@ public class RCSUtil {
*/ */
public Result rcsCreateTask(RcsCreateTaskDto dto) { public Result rcsCreateTask(RcsCreateTaskDto dto) {
String json = JSONObject.toJSONString(dto); String json = JSONObject.toJSONString(dto);
log.info("向rcs创建任务参数"+json);
try { try {
Map<String, String> headerMap = getHeaderMap(); Map<String, String> headerMap = getHeaderMap();
String res = HttpRequest.post(agvCreateTaskUrl) String res = HttpRequest.post(agvCreateTaskUrl)
.addHeaders(headerMap) .addHeaders(headerMap)
.body(json) .body(json)
.execute().body(); .execute().body();
Result result = parseThirdRcsResult(res); log.info("向rcs创建任务返回:" + res);
return result; return parseThirdRcsResult(res);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
log.error("createTask 方法出错了 = {}", e.getMessage()); log.error("createTask 方法出错了 = {}", e.getMessage());
@ -161,14 +162,14 @@ public class RCSUtil {
*/ */
public Result rcsTaskCancel(RcsCancelTaskDto dto) { public Result rcsTaskCancel(RcsCancelTaskDto dto) {
String json = JSONObject.toJSONString(dto); String json = JSONObject.toJSONString(dto);
log.info("向rcs任务取消参数:" + json);
try { try {
Map<String, String> headerMap = getHeaderMap(); Map<String, String> headerMap = getHeaderMap();
String res = HttpRequest.post(agvCancelTaskUrl) String res = HttpRequest.post(agvCancelTaskUrl)
.addHeaders(headerMap) .addHeaders(headerMap)
.body(json) .body(json)
.execute().body(); .execute().body();
log.info("向rcs任务取消返回:" + res);
return parseThirdRcsResult(res); return parseThirdRcsResult(res);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

@ -19,11 +19,11 @@ public class RcsCancelTaskDto implements Serializable {
/** /**
* 地图 id * 任务号
*/ */
private Integer mapId; private String robotTaskCode;
/** /**
* 任务id 任务 id,唯一标识(不能重复) * 任务取消类型
*/ */
private String taskId; private String cancelType;
} }

@ -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<T> {
private String code;
private String message;
private List<T> data;
// 成功
public static <T> RcsResponseVo<T> success(List<T> data) {
RcsResponseVo<T> response = new RcsResponseVo<>();
response.setCode("SUCCESS");
response.setMessage("成功");
response.setData(data != null ? data : Collections.emptyList());
return response;
}
// 无数据的成功响应
public static <T> RcsResponseVo<T> success() {
return success(null);
}
// 单对象成功响应(非List场景)
public static <T> RcsResponseVo<T> success(T item) {
RcsResponseVo<T> response = new RcsResponseVo<>();
response.setCode("SUCCESS");
response.setMessage("成功");
response.setData(item != null ?
Collections.singletonList(item) :
Collections.emptyList());
return response;
}
// 错误响应
public static <T> RcsResponseVo<T> error(String msg) {
RcsResponseVo<T> response = new RcsResponseVo<>();
response.setCode("ERROR");
response.setMessage(msg);
response.setData(Collections.emptyList());
return response;
}
}

@ -123,16 +123,16 @@ public class WCSUtil {
/** /**
* 入库申请 * 入库申请
* *
* @param dto * @param
* @return * @return
*/ */
public WcsResponseVo wcsIncomingTaskRequest(WcsIncomingTaskRequestBody dto) { public WcsResponseVo wcsIncomingTaskRequest(WcsIncomingTaskRequestBody body) {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
JSONObject header = new JSONObject(); JSONObject header = new JSONObject();
header.put("businessType","stockIn"); header.put("businessType",body.getBussinessType());
jsonObject.put("header",header); jsonObject.put("header",header);
List<WcsIncomingTaskRequestBody> incomingTaskRequestBodies = new ArrayList<>(); List<WcsIncomingTaskRequestBody> incomingTaskRequestBodies = new ArrayList<>();
incomingTaskRequestBodies.add(dto); incomingTaskRequestBodies.add(body);
jsonObject.put("body",incomingTaskRequestBodies); jsonObject.put("body",incomingTaskRequestBodies);
String json = JSONObject.toJSONString(jsonObject); String json = JSONObject.toJSONString(jsonObject);
@ -158,13 +158,14 @@ public class WCSUtil {
* @return * @return
*/ */
public WcsResponseVo uploadWCSTaskStatus(UploadWCSTaskStatusDto dto) { public WcsResponseVo uploadWCSTaskStatus(UploadWCSTaskStatusDto dto) {
Map<String, String> headerMap = new HashMap<>(1); JSONObject jsonObject = new JSONObject();
headerMap.put("businessType", dto.getHeader().getBusinessType()); JSONObject header = new JSONObject();
String json = JSONObject.toJSONString(dto); jsonObject.put("header",dto.getHeader());
jsonObject.put("body",dto.getBody());
String json = JSONObject.toJSONString(jsonObject);
log.info("KJ向WZ任务上报参数"+json); log.info("KJ向WZ任务上报参数"+json);
try { try {
String res = HttpRequest.post(uploadWCSTaskStatusUrl) String res = HttpRequest.post(uploadWCSTaskStatusUrl)
.addHeaders(headerMap)
.body(json) .body(json)
.execute().body(); .execute().body();
log.info("KJ向WZ任务上报返回:" + res); log.info("KJ向WZ任务上报返回:" + res);

@ -0,0 +1,8 @@
package com.shkj.wcs.vo;
import lombok.Data;
@Data
public class TaskStatusBody {
private int taskCount;
}

@ -13,20 +13,12 @@ public enum BusinTaskTypeEnum {
/** /**
* 入库 * 入库
*/ */
in("in", "入库"), stockIn("stockIn", "入库"),
/** /**
* 出库 * 出库
*/ */
out("out", "出库"), stockOut("stockOut", "出库")
/**
* 搬运
*/
move("move", "搬运"),
/**
* 移库
*/
remove("9","移库"),
; ;
private String value; private String value;

@ -11,58 +11,9 @@ import lombok.Getter;
public enum TaskTypeEnum { public enum TaskTypeEnum {
//任务类型 0 正常入库 1维修异常 2扫码异常 3入库冲孔 4 正常出库 5紧急出库 6越库出库 7手工入库 8呼叫空治具 //任务类型 0 正常入库 1维修异常 2扫码异常 3入库冲孔 4 正常出库 5紧急出库 6越库出库 7手工入库 8呼叫空治具
/** Out("1", "出"),
* 正常入库 In("2", "入");
*/
normal_in("0", "正常入库"),
/**
* 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 value;
private String desc; private String desc;

Loading…
Cancel
Save