|
|
|
|
@ -8,6 +8,7 @@ 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.common.utils.StringUtils; |
|
|
|
|
import com.shkj.plc.sdk.device.PlcOperate; |
|
|
|
|
import com.shkj.system.service.ISysParameterService; |
|
|
|
|
import com.shkj.wcs.bo.AGVFeedbackDepBo; |
|
|
|
|
@ -31,10 +32,7 @@ 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.enums.*; |
|
|
|
|
import com.shkj.wms.utils.IntIdUtil; |
|
|
|
|
import com.shkj.wms.utils.JsonUtil; |
|
|
|
|
import com.shkj.wms.vo.PlanOrderLocationVo; |
|
|
|
|
@ -83,7 +81,7 @@ public class PlcEventTask { |
|
|
|
|
@Autowired |
|
|
|
|
WCSUtil wcsUtil; |
|
|
|
|
|
|
|
|
|
@Scheduled(fixedDelay = 2000) |
|
|
|
|
@Scheduled(fixedDelay = 3000) |
|
|
|
|
public void init() { |
|
|
|
|
//查询需要连接的PLC,初始化连接对象
|
|
|
|
|
List<WcsPlcConnectVo> plcList = (List<WcsPlcConnectVo>) redisTemplate.opsForValue().get(RedisConstant.redisPlcListConnect); |
|
|
|
|
@ -105,7 +103,7 @@ public class PlcEventTask { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//输送线心跳
|
|
|
|
|
@Scheduled(fixedDelay = 2000) |
|
|
|
|
@Scheduled(fixedDelay = 3000) |
|
|
|
|
public void writePlcheartbeatDps() { |
|
|
|
|
PlcOperate plcOperate = plcInit.getPlcOperate_dps(); |
|
|
|
|
if (plcOperate != null) { |
|
|
|
|
@ -136,7 +134,7 @@ public class PlcEventTask { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//叠盘机心跳
|
|
|
|
|
@Scheduled(fixedDelay = 2000) |
|
|
|
|
@Scheduled(fixedDelay = 3000) |
|
|
|
|
public void writePlcheartbeatStk() { |
|
|
|
|
//根据连接的plcId获取属性
|
|
|
|
|
PlcOperate plcOperate = plcInit.getPlcOperate_dpj(); |
|
|
|
|
@ -303,6 +301,14 @@ public class PlcEventTask { |
|
|
|
|
String retEy = ""; |
|
|
|
|
String retEyVt = ""; |
|
|
|
|
|
|
|
|
|
//二楼去一楼申请
|
|
|
|
|
String backToOneSeria = ""; |
|
|
|
|
String backToOneSeriaVt = ""; |
|
|
|
|
|
|
|
|
|
//二楼去一楼申请返回
|
|
|
|
|
String retBackToOneSeria = ""; |
|
|
|
|
String retBackToOneSeriaVt = ""; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (WcsPlcProperty plcProperty : propertyList) { |
|
|
|
|
String pointType = plcProperty.getPointType(); |
|
|
|
|
@ -374,8 +380,15 @@ public class PlcEventTask { |
|
|
|
|
} else if (pointType.equals("retEy")) { |
|
|
|
|
retEy = plcProperty.getAddress(); |
|
|
|
|
retEyVt = plcProperty.getValueType(); |
|
|
|
|
} else if (pointType.equals("backToOneSeria")) { |
|
|
|
|
backToOneSeria = plcProperty.getAddress(); |
|
|
|
|
backToOneSeriaVt = plcProperty.getValueType(); |
|
|
|
|
} else if (pointType.equals("retBackToOneSeria")) { |
|
|
|
|
retBackToOneSeria = plcProperty.getAddress(); |
|
|
|
|
retBackToOneSeriaVt = plcProperty.getValueType(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
//生产区扫码处入库申请
|
|
|
|
|
//&& Boolean.valueOf(pointMap.get(reqInSeria).toString())
|
|
|
|
|
@ -426,26 +439,7 @@ public class PlcEventTask { |
|
|
|
|
body.setBussinessType(BusinTaskTypeEnum.stockOut.getValue()); |
|
|
|
|
body.setCreateDt(getNowDate()); |
|
|
|
|
//调用agv接口查询库区状态
|
|
|
|
|
// Map<String, Object> map1 = new HashMap<>();
|
|
|
|
|
// map1.put("areaInLocation", "SC-A2");
|
|
|
|
|
// map1.put("status", 0);
|
|
|
|
|
//
|
|
|
|
|
// Map<String, Object> map2 = new HashMap<>();
|
|
|
|
|
// map2.put("areaInLocation", "SC-B2");
|
|
|
|
|
// map2.put("status", 1);
|
|
|
|
|
//
|
|
|
|
|
// Map<String, Object> map3 = new HashMap<>();
|
|
|
|
|
// map3.put("areaInLocation", "SC-C2");
|
|
|
|
|
// map3.put("status", 1);
|
|
|
|
|
//
|
|
|
|
|
// Map<String, Object> map4 = new HashMap<>();
|
|
|
|
|
// map4.put("areaInLocation", "SC-D2");
|
|
|
|
|
// map4.put("status", 1);
|
|
|
|
|
//
|
|
|
|
|
// Object[] areaStatus = new Object[]{map1, map2, map3, map4};
|
|
|
|
|
// log.info("每个库区的状态:" + Arrays.toString(areaStatus));
|
|
|
|
|
// body.setAreaStatus(areaStatus);
|
|
|
|
|
log.info("空托申请wz-wcs参数:"+JSONObject.toJSONString(body)); |
|
|
|
|
log.info("空托申请wz-wcs参数:" + JSONObject.toJSONString(body)); |
|
|
|
|
WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); |
|
|
|
|
log.info("空托申请wz-wcs返回:" + vo.getHeader()); |
|
|
|
|
Map<String, Object> allMap = new HashMap<>(1); |
|
|
|
|
@ -486,7 +480,7 @@ public class PlcEventTask { |
|
|
|
|
List<AGVFeedbackDepBo> orInitializeAreaStatus = iBusinDataTaskService.getOrInitializeAreaStatus(); |
|
|
|
|
log.info("每个库区的状态:" + Arrays.toString(orInitializeAreaStatus.toArray())); |
|
|
|
|
body.setAreaStatus(orInitializeAreaStatus.toArray()); |
|
|
|
|
log.info("上层实盘出口入库请求wz-wcs参数:"+JSONObject.toJSONString(body)); |
|
|
|
|
log.info("上层实盘出口入库请求wz-wcs参数:" + JSONObject.toJSONString(body)); |
|
|
|
|
WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); |
|
|
|
|
log.info("上层实盘出口入库请求wz-wcs返回:" + vo.getHeader()); |
|
|
|
|
Map<String, Object> allMap = new HashMap<>(1); |
|
|
|
|
@ -535,7 +529,7 @@ public class PlcEventTask { |
|
|
|
|
List<AGVFeedbackDepBo> orInitializeAreaStatus = iBusinDataTaskService.getOrInitializeAreaStatus(); |
|
|
|
|
log.info("每个库区的状态:" + Arrays.toString(orInitializeAreaStatus.toArray())); |
|
|
|
|
body.setAreaStatus(orInitializeAreaStatus.toArray()); |
|
|
|
|
log.info("下层实盘出口入库请求wz-wcs参数:"+JSONObject.toJSONString(body)); |
|
|
|
|
log.info("下层实盘出口入库请求wz-wcs参数:" + JSONObject.toJSONString(body)); |
|
|
|
|
WcsResponseVo vo = wcsUtil.wcsIncomingTaskRequest(body); |
|
|
|
|
log.info("下层实盘出口入库请求wz-wcs返回:" + vo.getHeader()); |
|
|
|
|
Map<String, Object> allMap = new HashMap<>(1); |
|
|
|
|
@ -547,7 +541,17 @@ public class PlcEventTask { |
|
|
|
|
if (Result.isOk(vo.getHeader().getMsgCode())) { |
|
|
|
|
reqMap.put(retOutVt1, 1); |
|
|
|
|
} else { |
|
|
|
|
reqMap.put(retOutVt1, 2); |
|
|
|
|
String message = vo.getHeader().getMessage(); |
|
|
|
|
if(message.isEmpty()){ |
|
|
|
|
reqMap.put(retOutVt1, 4); |
|
|
|
|
} |
|
|
|
|
if (message.contains(WmsErrorMessage.error1.getDesc())) { |
|
|
|
|
reqMap.put(retOutVt1, 2); |
|
|
|
|
} else if (message.contains(WmsErrorMessage.error2.getDesc())) { |
|
|
|
|
reqMap.put(retOutVt1, 3); |
|
|
|
|
} else { |
|
|
|
|
reqMap.put(retOutVt1, 4); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
allMap.put(retOut1, reqMap); |
|
|
|
|
String allMapJson = JsonUtil.toJSONString(allMap); |
|
|
|
|
@ -605,55 +609,101 @@ public class PlcEventTask { |
|
|
|
|
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()); |
|
|
|
|
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()); |
|
|
|
|
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)); |
|
|
|
|
WcsResponseVo vo = WcsResponseVo.success(); |
|
|
|
|
if(!businDataTask.getFromSide().equals(MapEnum.twoUpIn.getValue())){ |
|
|
|
|
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)); |
|
|
|
|
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+"未完成的任务"); |
|
|
|
|
} else { |
|
|
|
|
log.info("未查询到条码为:" + s + "未完成的任务"); |
|
|
|
|
reqMap.put(retEyVt, 2); |
|
|
|
|
} |
|
|
|
|
}else{ |
|
|
|
|
} else { |
|
|
|
|
reqMap.put(retEyVt, 2); |
|
|
|
|
} |
|
|
|
|
seriaMap.put(retEyCfmSeriaVt, outSeria); |
|
|
|
|
allMap.put(retEy, reqMap); |
|
|
|
|
allMap.put(retEyCfmSeria,seriaMap); |
|
|
|
|
allMap.put(retEyCfmSeria, seriaMap); |
|
|
|
|
String allMapJson = JsonUtil.toJSONString(allMap); |
|
|
|
|
log.info("空托上报完成时,给输送线写命令数据:{}", allMapJson); |
|
|
|
|
Boolean rptOutBoolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); |
|
|
|
|
log.info("空托上报完成时,写入的命令返回结果:" + rptOutBoolean.toString()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//二楼去一楼
|
|
|
|
|
if (pointMap.containsKey(backToOneSeria) && !pointMap.get(backToOneSeria).equals("0")) { |
|
|
|
|
//读取托盘条码内容
|
|
|
|
|
String barcodeValueOne = Objects.toString(pointMap.get(rptOutBarcod1), ""); |
|
|
|
|
String s = barcodeValueOne.replaceAll("[^A-Za-z0-9]", ""); |
|
|
|
|
|
|
|
|
|
log.info("二楼回一楼时,读取的条码内容:" + s); |
|
|
|
|
if (StringUtils.isEmpty(s)) { |
|
|
|
|
handleFailure(retBackToOneSeriaVt, retBackToOneSeria, "条码为空", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
BusinDataTask businDataTask = iBusinDataTaskService.getOne(new LambdaQueryWrapper<BusinDataTask>() |
|
|
|
|
.eq(BusinDataTask::getContainerCode, s) |
|
|
|
|
.ne(BusinDataTask::getTaskStatus, TaskStatusEnum.finished.getValue()) |
|
|
|
|
.ne(BusinDataTask::getTaskStatus, TaskStatusEnum.clean.getValue())); |
|
|
|
|
// 如果托盘存在未完成任务
|
|
|
|
|
if (businDataTask != null) { |
|
|
|
|
log.info("此托盘存在未完成任务,本次无需再再次下发:{}", s); |
|
|
|
|
handleFailure(retBackToOneSeriaVt, retBackToOneSeria, "二楼回一楼时,托盘存在为完成任务,无需再次下发", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BusinDataTask newTask = createNewTask(MapEnum.twoUpIn.getValue(), MapEnum.twoDownIn.getValue()); |
|
|
|
|
newTask.setContainerCode(s); |
|
|
|
|
boolean saveSuccess = iBusinDataTaskService.save(newTask); |
|
|
|
|
if (!saveSuccess) { |
|
|
|
|
log.info("此托盘任务存储失败:{}", s); |
|
|
|
|
handleFailure(retBackToOneSeriaVt, retBackToOneSeria, "二楼回一楼时,任务存储失败!", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 下发任务到RCS
|
|
|
|
|
Result result = iBusinDataTaskService.rcsTaskIssued(newTask); |
|
|
|
|
if (!Result.isOk(result)) { |
|
|
|
|
handleFailure(retBackToOneSeriaVt, retBackToOneSeria, "二楼回一楼时,给rcs下发任务失败!", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 任务下发成功后的处理
|
|
|
|
|
handleSuccess(newTask, retBackToOneSeriaVt, retBackToOneSeria, plcReadAndWrite, plcOperate); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("dpsRealTimeTask:" + e.getMessage()); |
|
|
|
|
} |
|
|
|
|
@ -730,12 +780,12 @@ public class PlcEventTask { |
|
|
|
|
} else if (pointType.equals("retDpjCfmSeria")) { |
|
|
|
|
retDpjCfmSeria = plcProperty.getAddress(); |
|
|
|
|
retDpjCfmSeriaVt = plcProperty.getValueType(); |
|
|
|
|
}else if (pointType.equals("dpjBarcod")) { |
|
|
|
|
} else if (pointType.equals("dpjBarcod")) { |
|
|
|
|
dpjBarcod = plcProperty.getAddress(); |
|
|
|
|
} else if (pointType.equals("retDpj1")) { |
|
|
|
|
retDpj1 = plcProperty.getAddress(); |
|
|
|
|
retDpj1Vt = plcProperty.getValueType(); |
|
|
|
|
} else if (pointType.equals("dpjGw1")) { |
|
|
|
|
} else if (pointType.equals("dpjGw1")) { |
|
|
|
|
dpjGw1 = plcProperty.getAddress(); |
|
|
|
|
} else if (pointType.equals("retDpjGw1")) { |
|
|
|
|
retDpjGw1 = plcProperty.getAddress(); |
|
|
|
|
@ -766,7 +816,7 @@ public class PlcEventTask { |
|
|
|
|
//读取托盘条码内容
|
|
|
|
|
String barcodeValueOne = Objects.toString(pointMap.get(dpjBarcod), ""); |
|
|
|
|
String s = barcodeValueOne.replaceAll("[^A-Za-z0-9]", ""); |
|
|
|
|
log.info("叠盘机入库请求读取的条码:"+ s); |
|
|
|
|
log.info("叠盘机入库请求读取的条码:" + s); |
|
|
|
|
WcsIncomingTaskRequestBody body = new WcsIncomingTaskRequestBody(); |
|
|
|
|
body.setStation(MapEnum.dpj.getValue()); |
|
|
|
|
body.setTaskType(TaskTypeEnum.In.getValue()); |
|
|
|
|
@ -784,17 +834,17 @@ public class PlcEventTask { |
|
|
|
|
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); |
|
|
|
|
seriaMap.put(retDpjCfmSeriaVt, seria); |
|
|
|
|
if (Result.isOk(vo.getHeader().getMsgCode())) { |
|
|
|
|
reqMap.put(retDpjVt, 1); |
|
|
|
|
req1Map.put(retDpj1Vt,1); |
|
|
|
|
req1Map.put(retDpj1Vt, 1); |
|
|
|
|
} else { |
|
|
|
|
reqMap.put(retDpjVt, 2); |
|
|
|
|
req1Map.put(retDpj1Vt,2); |
|
|
|
|
req1Map.put(retDpj1Vt, 2); |
|
|
|
|
} |
|
|
|
|
allMap.put(retDpj, reqMap); |
|
|
|
|
allMap.put(retDpj1, req1Map); |
|
|
|
|
allMap.put(retDpjCfmSeria,seriaMap); |
|
|
|
|
allMap.put(retDpjCfmSeria, seriaMap); |
|
|
|
|
String allMapJson = JsonUtil.toJSONString(allMap); |
|
|
|
|
log.info("叠盘机叠满上报时,给输送线写命令数据:{}", allMapJson); |
|
|
|
|
Boolean bCR01Boolean = plcReadAndWrite.execWrite(plcOperate, allMapJson); |
|
|
|
|
@ -809,29 +859,35 @@ public class PlcEventTask { |
|
|
|
|
// 检查是否有未完成的任务
|
|
|
|
|
BusinDataTask businDataTask = checkExistingTask(MapEnum.dpjGw1.getValue()); |
|
|
|
|
|
|
|
|
|
if (businDataTask != null) { |
|
|
|
|
|
|
|
|
|
log.info("1号工位已经下发给AGV任务,本次无需再再次下发"); |
|
|
|
|
handleFailure(retDpjGw1Vt, retDpjGw1, "1号工位已经下发给AGV任务,本次无需再再次下发", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果没有现有任务,创建新任务
|
|
|
|
|
if (businDataTask == null) { |
|
|
|
|
businDataTask = createNewTask(MapEnum.dpjGw1.getValue()); |
|
|
|
|
boolean saveSuccess = iBusinDataTaskService.save(businDataTask); |
|
|
|
|
if (!saveSuccess) { |
|
|
|
|
handleFailure(retDpjGw1Vt, retDpjGw1, "叠盘工位1,任务存储失败!",plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
BusinDataTask newTask = createNewTask(MapEnum.dpjGw1.getValue(), MapEnum.dpj.getValue()); |
|
|
|
|
boolean saveSuccess = iBusinDataTaskService.save(newTask); |
|
|
|
|
if (!saveSuccess) { |
|
|
|
|
handleFailure(retDpjGw1Vt, retDpjGw1, "叠盘工位1,任务存储失败!", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 下发任务到RCS
|
|
|
|
|
Result result = iBusinDataTaskService.rcsTaskIssued(businDataTask); |
|
|
|
|
Result result = iBusinDataTaskService.rcsTaskIssued(newTask); |
|
|
|
|
if (!Result.isOk(result)) { |
|
|
|
|
handleFailure(retDpjGw1Vt, retDpjGw1, "叠盘工位1,给rcs下发任务失败!",plcReadAndWrite, plcOperate); |
|
|
|
|
handleFailure(retDpjGw1Vt, retDpjGw1, "叠盘工位1,给rcs下发任务失败!", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 任务下发成功后的处理
|
|
|
|
|
handleSuccess(businDataTask, retDpjGw1Vt, retDpjGw1,plcReadAndWrite, plcOperate); |
|
|
|
|
handleSuccess(newTask, retDpjGw1Vt, retDpjGw1, plcReadAndWrite, plcOperate); |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("叠盘工位1处理过程中发生异常", e); |
|
|
|
|
handleFailure(retDpjGw1Vt, retDpjGw1, "叠盘工位1,处理过程中发生异常!",plcReadAndWrite, plcOperate); |
|
|
|
|
handleFailure(retDpjGw1Vt, retDpjGw1, "叠盘工位1,处理过程中发生异常!", plcReadAndWrite, plcOperate); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -844,29 +900,36 @@ public class PlcEventTask { |
|
|
|
|
// 检查是否有未完成的任务
|
|
|
|
|
BusinDataTask businDataTask = checkExistingTask(MapEnum.dpjGw2.getValue()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (businDataTask != null) { |
|
|
|
|
|
|
|
|
|
log.info("2号工位已经下发给AGV任务,本次无需再再次下发"); |
|
|
|
|
handleFailure(retDpjGw2Vt, retDpjGw2, "2号工位已经下发给AGV任务,本次无需再再次下发", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
// 如果没有现有任务,创建新任务
|
|
|
|
|
if (businDataTask == null) { |
|
|
|
|
businDataTask = createNewTask(MapEnum.dpjGw2.getValue()); |
|
|
|
|
boolean saveSuccess = iBusinDataTaskService.save(businDataTask); |
|
|
|
|
if (!saveSuccess) { |
|
|
|
|
handleFailure(retDpjGw2Vt, retDpjGw2, "叠盘工位2,任务存储失败!",plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BusinDataTask newTask = createNewTask(MapEnum.dpjGw2.getValue(), MapEnum.dpj.getValue()); |
|
|
|
|
boolean saveSuccess = iBusinDataTaskService.save(newTask); |
|
|
|
|
if (!saveSuccess) { |
|
|
|
|
handleFailure(retDpjGw2Vt, retDpjGw2, "叠盘工位2,任务存储失败!", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 下发任务到RCS
|
|
|
|
|
Result result = iBusinDataTaskService.rcsTaskIssued(businDataTask); |
|
|
|
|
Result result = iBusinDataTaskService.rcsTaskIssued(newTask); |
|
|
|
|
if (!Result.isOk(result)) { |
|
|
|
|
handleFailure(retDpjGw2Vt, retDpjGw2, "叠盘工位2,给rcs下发任务失败!",plcReadAndWrite, plcOperate); |
|
|
|
|
handleFailure(retDpjGw2Vt, retDpjGw2, "叠盘工位2,给rcs下发任务失败!", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 任务下发成功后的处理
|
|
|
|
|
handleSuccess(businDataTask, retDpjGw2Vt, retDpjGw2,plcReadAndWrite, plcOperate); |
|
|
|
|
handleSuccess(newTask, retDpjGw2Vt, retDpjGw2, plcReadAndWrite, plcOperate); |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("叠盘工位2处理过程中发生异常", e); |
|
|
|
|
handleFailure(retDpjGw2Vt, retDpjGw2, "叠盘工位2,处理过程中发生异常!",plcReadAndWrite, plcOperate); |
|
|
|
|
handleFailure(retDpjGw2Vt, retDpjGw2, "叠盘工位2,处理过程中发生异常!", plcReadAndWrite, plcOperate); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -877,30 +940,35 @@ public class PlcEventTask { |
|
|
|
|
try { |
|
|
|
|
// 检查是否有未完成的任务
|
|
|
|
|
BusinDataTask businDataTask = checkExistingTask(MapEnum.dpjGw3.getValue()); |
|
|
|
|
if (businDataTask != null) { |
|
|
|
|
|
|
|
|
|
log.info("3号工位已经下发给AGV任务,本次无需再再次下发"); |
|
|
|
|
handleFailure(retDpjGw3Vt, retDpjGw3, "3号工位已经下发给AGV任务,本次无需再再次下发", plcReadAndWrite, plcOperate); |
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 如果没有现有任务,创建新任务
|
|
|
|
|
if (businDataTask == null) { |
|
|
|
|
businDataTask = createNewTask(MapEnum.dpjGw3.getValue()); |
|
|
|
|
boolean saveSuccess = iBusinDataTaskService.save(businDataTask); |
|
|
|
|
if (!saveSuccess) { |
|
|
|
|
handleFailure(retDpjGw3Vt, retDpjGw3, "叠盘工位2,任务存储失败!",plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
BusinDataTask newTask = createNewTask(MapEnum.dpjGw3.getValue(), MapEnum.dpj.getValue()); |
|
|
|
|
boolean saveSuccess = iBusinDataTaskService.save(newTask); |
|
|
|
|
if (!saveSuccess) { |
|
|
|
|
handleFailure(retDpjGw3Vt, retDpjGw3, "叠盘工位3,任务存储失败!", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 下发任务到RCS
|
|
|
|
|
Result result = iBusinDataTaskService.rcsTaskIssued(businDataTask); |
|
|
|
|
Result result = iBusinDataTaskService.rcsTaskIssued(newTask); |
|
|
|
|
if (!Result.isOk(result)) { |
|
|
|
|
handleFailure(retDpjGw3Vt, retDpjGw3, "叠盘工位3,给rcs下发任务失败!",plcReadAndWrite, plcOperate); |
|
|
|
|
handleFailure(retDpjGw3Vt, retDpjGw3, "叠盘工位3,给rcs下发任务失败!", plcReadAndWrite, plcOperate); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 任务下发成功后的处理
|
|
|
|
|
handleSuccess(businDataTask, retDpjGw3Vt, retDpjGw3,plcReadAndWrite, plcOperate); |
|
|
|
|
handleSuccess(newTask, retDpjGw3Vt, retDpjGw3, plcReadAndWrite, plcOperate); |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("叠盘工位3处理过程中发生异常", e); |
|
|
|
|
handleFailure(retDpjGw3Vt, retDpjGw3, "叠盘工位3,处理过程中发生异常!",plcReadAndWrite, plcOperate); |
|
|
|
|
handleFailure(retDpjGw3Vt, retDpjGw3, "叠盘工位3,处理过程中发生异常!", plcReadAndWrite, plcOperate); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -915,7 +983,7 @@ public class PlcEventTask { |
|
|
|
|
private BusinDataTask checkExistingTask(String fromSide) { |
|
|
|
|
LambdaQueryWrapper<BusinDataTask> lqwTask = new LambdaQueryWrapper<BusinDataTask>() |
|
|
|
|
.eq(BusinDataTask::getFromSide, fromSide) |
|
|
|
|
.eq(BusinDataTask::getTaskStatus, TaskStatusEnum.wait_put.getValue()); |
|
|
|
|
.in(BusinDataTask::getTaskStatus, TaskStatusEnum.wait_put.getValue(), TaskStatusEnum.wait_callback.getValue()); |
|
|
|
|
BusinDataTask task = iBusinDataTaskService.getOne(lqwTask); |
|
|
|
|
if (task != null) { |
|
|
|
|
log.info("发现未下发的任务,任务编码:{}", task.getTaskCode()); |
|
|
|
|
@ -923,7 +991,7 @@ public class PlcEventTask { |
|
|
|
|
return task; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void handleSuccess(BusinDataTask task, String retVt, String ret,PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) { |
|
|
|
|
private void handleSuccess(BusinDataTask task, String retVt, String ret, PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) { |
|
|
|
|
// 更新任务状态
|
|
|
|
|
task.setTaskStatus(TaskStatusEnum.wait_callback.getValue()); |
|
|
|
|
task.setTaskStarttime(DateUtils.getNowDate()); |
|
|
|
|
@ -936,34 +1004,38 @@ public class PlcEventTask { |
|
|
|
|
reqMap.put(retVt, 1); |
|
|
|
|
allMap.put(ret, reqMap); |
|
|
|
|
|
|
|
|
|
sendToPLC(allMap, "叠盘工位1,给rcs下发任务成功!",plcReadAndWrite,plcOperate); |
|
|
|
|
sendToPLC(allMap, "给rcs下发任务成功!", plcReadAndWrite, plcOperate); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void sendToPLC(Map<String, Object> allMap, String logMsg,PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) { |
|
|
|
|
private void sendToPLC(Map<String, Object> allMap, String logMsg, PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) { |
|
|
|
|
String allMapJson = JsonUtil.toJSONString(allMap); |
|
|
|
|
log.info("{} 给输送线写命令数据:{}", logMsg, allMapJson); |
|
|
|
|
Boolean writeResult = plcReadAndWrite.execWrite(plcOperate, allMapJson); |
|
|
|
|
log.info("写入命令返回结果:{}", writeResult); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private BusinDataTask createNewTask(String fromSide) { |
|
|
|
|
private BusinDataTask createNewTask(String fromSide, String toSide) { |
|
|
|
|
BusinDataTask task = new BusinDataTask(); |
|
|
|
|
String taskCode = IntIdUtil.generateIntId().toString(); |
|
|
|
|
task.setTaskCode(taskCode); |
|
|
|
|
task.setTaskStatus(TaskStatusEnum.wait_put.getValue()); |
|
|
|
|
task.setTaskType(TaskTypeEnum.Carry.getValue()); |
|
|
|
|
task.setTaskPath(MapEnum.dpj.getValue()); |
|
|
|
|
task.setTaskPath(toSide); |
|
|
|
|
task.setPriority("1"); |
|
|
|
|
task.setFromSide(fromSide); |
|
|
|
|
task.setToSide(MapEnum.dpj.getValue()); |
|
|
|
|
task.setToSide(toSide); |
|
|
|
|
task.setCreateTime(DateUtils.getNowDate()); |
|
|
|
|
task.setAgvType("B113"); |
|
|
|
|
String agvType = "B113"; |
|
|
|
|
if (fromSide.equals(MapEnum.twoUpIn.getValue())) { |
|
|
|
|
agvType = "B111"; |
|
|
|
|
} |
|
|
|
|
task.setAgvType(agvType); |
|
|
|
|
log.info("创建新任务,任务编码:{}", taskCode); |
|
|
|
|
return task; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void handleFailure(String retVt, String ret, String errorMsg,PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) { |
|
|
|
|
private void handleFailure(String retVt, String ret, String errorMsg, PLCReadAndWrite plcReadAndWrite, PlcOperate plcOperate) { |
|
|
|
|
log.warn(errorMsg); |
|
|
|
|
|
|
|
|
|
Map<String, Object> allMap = new HashMap<>(); |
|
|
|
|
@ -971,11 +1043,10 @@ public class PlcEventTask { |
|
|
|
|
reqMap.put(retVt, 2); |
|
|
|
|
allMap.put(ret, reqMap); |
|
|
|
|
|
|
|
|
|
sendToPLC(allMap, errorMsg,plcReadAndWrite,plcOperate); |
|
|
|
|
sendToPLC(allMap, errorMsg, plcReadAndWrite, plcOperate); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static String getNowDate() { |
|
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); |
|
|
|
|
return LocalDateTime.now().format(formatter); |
|
|
|
|
|