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

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

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

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

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

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

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

@ -27,7 +27,9 @@ import com.shkj.wcs.third.rcs.vo.RcsResponseVo;
import com.shkj.wcs.third.workbinWcs.WCSUtil;
import com.shkj.wcs.third.workbinWcs.dto.*;
import com.shkj.wcs.vo.WcsResponseVo;
import com.shkj.wms.enums.MapEnum;
import com.shkj.wms.enums.TaskStatusEnum;
import com.shkj.wms.enums.TaskTypeEnum;
import com.shkj.wms.utils.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.exceptions.TooManyResultsException;
@ -72,6 +74,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
String taskType = by.getTaskType();
String fromBinCode = by.getFromBinCode();
String toBinCode = by.getToBinCode();
String agvType = by.getAgvType();
String dataChange = by.getDataChange();
String priority = by.getPriority();
LambdaQueryWrapper<BusinDataTask> lqwDataTask = new LambdaQueryWrapper<BusinDataTask>()
@ -86,9 +89,11 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
BusinDataTask businDataTask = new BusinDataTask();
businDataTask.setTaskCode(taskId);
businDataTask.setTaskType(taskType);
businDataTask.setAgvType(agvType);
businDataTask.setContainerCode(trayCode);
businDataTask.setFromSide(fromBinCode);
businDataTask.setToSide(toBinCode);
businDataTask.setTaskPath(toBinCode);
businDataTask.setTaskStatus(TaskStatusEnum.wait_put.getValue());
businDataTask.setCreateTime(DateUtils.getNowDate());
if (!priority.isEmpty()) {
@ -98,52 +103,12 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
if (save) {
//调用下游接口下任务
log.info("任务储存成功!");
RcsCreateTaskDto rcsCreateTaskDto = new RcsCreateTaskDto();
rcsCreateTaskDto.setTaskType("B12");
if(taskType.equals("1")){
rcsCreateTaskDto.setTaskType("B13");
}
rcsCreateTaskDto.setRobotTaskCode(businDataTask.getTaskCode());
if (!businDataTask.getPriority().isEmpty()) {
rcsCreateTaskDto.setInitPriority(Integer.parseInt(businDataTask.getPriority()));
}
List<RcsIdList> rcsIdLists = new ArrayList<>();
for (int i = 1; i <= 2; i++) {
RcsIdList rcsIdList = new RcsIdList();
rcsIdList.setType("SITE");
if (i == 1) {
rcsIdList.setSeq(0);
rcsIdList.setCode(businDataTask.getFromSide());
rcsIdList.setOperation(RCSOperation.OT_COLLECT.getValue());
} else {
rcsIdList.setSeq(1);
String code = businDataTask.getToSide();
if(code.equals("SC-G1-00-00-1002")){
code = "SC-G2-00-00-2002";
}
rcsIdList.setCode(code);
rcsIdList.setOperation(RCSOperation.OT_DELIVERY.getValue());
}
rcsIdList.setAutoStart(1);
rcsIdLists.add(rcsIdList);
}
rcsCreateTaskDto.setTargetRoute(rcsIdLists);
CarrierInfoList carrierInfoList = new CarrierInfoList();
int carrierCode = CounterService.incrementAndGet();
carrierInfoList.setCarrierCode(String.valueOf(carrierCode));
carrierInfoList.setCarrierType("4");
carrierInfoList.setLayer("0");
List<CarrierInfoList> carrierInfoLists = new ArrayList<>();
carrierInfoLists.add(carrierInfoList);
Map<String, Object> extra = new HashMap<>();
extra.put("carrierInfo", carrierInfoLists);
rcsCreateTaskDto.setExtra(extra);
Result result = rcsUtil.rcsCreateTask(rcsCreateTaskDto);
Result result = rcsTaskIssued(businDataTask);
if (!Result.isOk(result)) {
return WcsResponseVo.error(200, "接受成功但给rcs下发任务失败");
}
businDataTask.setTaskStatus(TaskStatusEnum.wait_callback.getValue());
businDataTask.setTaskStarttime(DateUtils.getNowDate());
iBusinDataTaskService.updateById(businDataTask);
if (fromBinCode.equals("SC-G2-00-00-2003")) {
Boolean aBoolean = plcEventTask.plcExecWrite(2);
@ -153,6 +118,7 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
}
}
return WcsResponseVo.error(500, "任务存储失败");
//任务取消
} else if (dataChange.equals("2")) {
if (one == null) {
@ -209,7 +175,16 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
log.warn("未找到对应任务,任务号:{}", robotTaskCode);
return RcsResponseVo.error("未找到对应任务");
}
businDataTask.setAgvTaskStatus(method);
businDataTask.setUpdateTime(new Date());
businDataTask.setAgvNo(bo.getSingleRobotCode());
boolean isUpdated = iBusinDataTaskService.updateById(businDataTask);
if (!isUpdated) {
log.error("任务状态更新失败,任务号:{}", robotTaskCode);
return RcsResponseVo.error("任务状态更新失败");
}
log.info("agv任务状态更新成功,任务号:{}", robotTaskCode);
if(!businDataTask.getTaskType().equals(TaskTypeEnum.Out.getValue())){
switch (method) {
case "start":
businDataTask.setTaskStarttime(new Date());
@ -230,15 +205,12 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
default:
return RcsResponseVo.error("任务状态未知!");
}
businDataTask.setAgvTaskStatus(method);
businDataTask.setUpdateTime(new Date());
businDataTask.setAgvNo(bo.getSingleRobotCode());
boolean isUpdated = iBusinDataTaskService.updateById(businDataTask);
if (!isUpdated) {
log.error("任务状态更新失败,任务号:{}", robotTaskCode);
return RcsResponseVo.error("任务状态更新失败");
boolean bool = iBusinDataTaskService.updateById(businDataTask);
if (!bool) {
log.error("总任务状态更新失败,任务号:{}", robotTaskCode);
return RcsResponseVo.error("总任务状态更新失败");
}
log.info("任务状态更新成功,任务号:{}", robotTaskCode);
log.info("总任务状态更新成功,任务号:{}", robotTaskCode);
UploadWCSTaskStatusDto uploadWCSTaskStatusDto = new UploadWCSTaskStatusDto();
WcsCreateTaskHeader header = new WcsCreateTaskHeader();
String taskType = businDataTask.getTaskType();
@ -263,6 +235,9 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
body.setTaskType(taskType);
body.setStatus(businDataTask.getTaskStatus());
// if (businDataTask.getTaskStatus().equals(TaskStatusEnum.finished.getValue())) {
if(slotName.equals("0187000XY0234215")){
slotName = "SC-G2-00-00-43022";
}
body.setDestination(slotName);
// }
body.setMsgCode("200");
@ -276,8 +251,60 @@ public class BusinDataTaskServiceImpl extends ServiceImpl<BusinDataTaskMapper, B
log.error("WZ-WCS状态上报异常,任务号:{}", robotTaskCode, e);
return RcsResponseVo.error("KJ-WCS状态上报异常");
}
}
return RcsResponseVo.success(new JSONObject().fluentPut("data", robotTaskCode));
}
@Override
public Result rcsTaskIssued(BusinDataTask businDataTask) {
String toSide = businDataTask.getToSide();
RcsCreateTaskDto rcsCreateTaskDto = new RcsCreateTaskDto();
rcsCreateTaskDto.setTaskType(businDataTask.getAgvType());
rcsCreateTaskDto.setRobotTaskCode(businDataTask.getTaskCode());
if (!businDataTask.getPriority().isEmpty()) {
rcsCreateTaskDto.setInitPriority(Integer.parseInt(businDataTask.getPriority()));
}
List<RcsIdList> rcsIdLists = new ArrayList<>();
for (int i = 1; i <= 2; i++) {
RcsIdList rcsIdList = new RcsIdList();
rcsIdList.setType("SITE");
if (i == 1) {
rcsIdList.setSeq(0);
rcsIdList.setCode(businDataTask.getFromSide());
rcsIdList.setOperation(RCSOperation.OT_COLLECT.getValue());
} else {
rcsIdList.setSeq(1);
if(toSide.equals(MapEnum.oneOut.getValue())){
toSide = MapEnum.twoDownIn.getValue();
}
rcsIdList.setCode(toSide);
rcsIdList.setOperation(RCSOperation.OT_DELIVERY.getValue());
}
rcsIdList.setAutoStart(1);
rcsIdLists.add(rcsIdList);
}
rcsCreateTaskDto.setTargetRoute(rcsIdLists);
CarrierInfoList carrierInfoList = new CarrierInfoList();
String substring = toSide.substring(4, 5);
int number = Integer.parseInt(substring);
int carrierCode = 0;
if(number ==2){
carrierCode = CounterService.incrementAndGet(2);
}
carrierInfoList.setCarrierCode(String.valueOf(carrierCode));
carrierInfoList.setCarrierType("4");
carrierInfoList.setLayer("0");
List<CarrierInfoList> carrierInfoLists = new ArrayList<>();
carrierInfoLists.add(carrierInfoList);
Map<String, Object> extra = new HashMap<>();
extra.put("carrierInfo", carrierInfoLists);
rcsCreateTaskDto.setExtra(extra);
return rcsUtil.rcsCreateTask(rcsCreateTaskDto);
}
}

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

@ -136,16 +136,16 @@ public class WCSUtil {
jsonObject.put("body",incomingTaskRequestBodies);
String json = JSONObject.toJSONString(jsonObject);
log.info("KJ向WZ空托申请参数"+json);
log.info("KJ向WZ入库申请参数"+json);
try {
String res = HttpRequest.post(wcsIncomingTaskRequestUrl)
.body(json)
.execute().body();
log.info("KJ向WZ空托请返回:" + res);
log.info("KJ向WZ入库申请返回:" + res);
return parseThirdRcsResult(res);
} catch (Exception e) {
e.printStackTrace();
log.error("KJ向WZ空托申请 方法出错了 = {}", e.getMessage());
log.error("KJ向WZ入库申请 方法出错了 = {}", e.getMessage());
return WcsResponseVo.error(500,e.getMessage());
}
}

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

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

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

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

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

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

Loading…
Cancel
Save