src/main/java/com/zy/asrs/controller/CrnController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/controller/OpenController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/TaskLogScheduler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/CrnOperaUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/Utils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -18,9 +18,8 @@ import com.zy.asrs.service.BasCrnpService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.service.impl.MainServiceImpl; import com.zy.asrs.utils.CommandUtils; import com.zy.asrs.utils.VersionUtils; import com.zy.asrs.utils.CrnOperaUtils; import com.zy.core.CrnThread; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; @@ -39,7 +38,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -57,9 +55,6 @@ private String wmsUrl; @Value("${wms.movePath}") private String movePath; @Autowired private SlaveProperties slaveProperties; @Autowired @@ -69,9 +64,9 @@ @Autowired private BasCrnpService basCrnpService; @Autowired private MainServiceImpl mainService; @Autowired private LocMastService locMastService; @Autowired private CrnOperaUtils crnOperaUtils; @ManagerAuth(memo = "进行中的命令") @@ -380,19 +375,10 @@ // if (SystemProperties.WCS_RUNNING_STATUS.get()) { // return R.error("wcs系统状态为开启"); // } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式 command.setSourcePosX(param.getSourceRow()); // 源库位排 command.setSourcePosY(param.getSourceBay()); // 源库位列 command.setSourcePosZ(param.getSourceLev()); // 源库位层 command.setDestinationPosX(param.getRow()); // 目标库位排 command.setDestinationPosY(param.getBay()); // 目标库位列 command.setDestinationPosZ(param.getLev()); // 目标库位层 // command.setCommand((short)1); return crnControl(command)?R.ok():R.error(); boolean result = crnOperaUtils.crnPut(param); return result ? R.ok() : R.error(); } @ManagerAuth(memo = "出库") @@ -402,19 +388,10 @@ // if (SystemProperties.WCS_RUNNING_STATUS.get()) { // return R.error("wcs系统状态为开启"); // } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式 command.setSourcePosX(param.getSourceRow()); // 源库位排 command.setSourcePosY(param.getSourceBay()); // 源库位列 command.setSourcePosZ(param.getSourceLev()); // 源库位层 command.setDestinationPosX(param.getRow()); // 目标库位排 command.setDestinationPosY(param.getBay()); // 目标库位列 command.setDestinationPosZ(param.getLev()); // 目标库位层 // command.setCommand((short)1); return crnControl(command)?R.ok():R.error(); boolean result = crnOperaUtils.crnTake(param); return result ? R.ok() : R.error(); } @ManagerAuth(memo = "库位转移") @@ -424,24 +401,10 @@ // if (SystemProperties.WCS_RUNNING_STATUS.get()) { // return R.error("wcs系统状态为开启"); // } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式 command.setSourcePosZ(param.getSourceRow()); // 源库位排 command.setSourcePosX(param.getSourceBay()); // 源库位列 command.setSourcePosY(param.getSourceLev()); // 源库位层 command.setDestinationPosZ(param.getRow()); // 目标库位排 command.setDestinationPosX(param.getBay()); // 目标库位列 command.setDestinationPosY(param.getLev()); // 目标库位层 // command.setCommand((short)1); LocMast sourceLoc = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", command.getSourcePosX()) .eq("bay1", command.getSourcePosY()).eq("lev1", command.getSourcePosZ())); LocMast loc = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", command.getDestinationPosX()) .eq("bay1", command.getDestinationPosY()).eq("lev1", command.getDestinationPosZ())); VersionUtils.locMoveCheckLocType(sourceLoc, loc); return crnControl(command)?R.ok():R.error(); boolean result = crnOperaUtils.crnStockMove(param); return result ? R.ok() : R.error(); } @ManagerAuth(memo = "站到站") @@ -451,18 +414,9 @@ // if (SystemProperties.WCS_RUNNING_STATUS.get()) { // return R.error("wcs系统状态为开启"); // } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式 command.setSourcePosX(param.getSourceStaNo()); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 1); // 源库位层 command.setDestinationPosX(param.getStaNo()); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 1); // 目标库位层 return crnControl(command)?R.ok():R.error(); boolean result = crnOperaUtils.crnSiteMove(param); return result ? R.ok() : R.error(); } @ManagerAuth(memo = "回原点") @@ -472,18 +426,9 @@ // if (SystemProperties.WCS_RUNNING_STATUS.get()) { // return R.error("wcs系统状态为开启"); // } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 0); // 目标库位层 return crnControl(command)?R.ok():R.error(); boolean result = crnOperaUtils.crnBacOrigin(param); return result ? R.ok() : R.error(); } @ManagerAuth(memo = "反原点") @@ -493,18 +438,9 @@ // if (SystemProperties.WCS_RUNNING_STATUS.get()) { // return R.error("wcs系统状态为开启"); // } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 22); // 目标库位列 command.setDestinationPosZ((short) 1); // 目标库位层 return crnControl(command)?R.ok():R.error(); boolean result = crnOperaUtils.reverseOrigin(param); return result ? R.ok() : R.error(); } // @ManagerAuth(memo = "坐标移动") @@ -532,19 +468,8 @@ // if (SystemProperties.WCS_RUNNING_STATUS.get()) { // return R.error("wcs系统状态为开启"); // } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 1); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.NONE); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 0); // 目标库位层 command.setCommand((short)0); return crnControl(command)?R.ok():R.error(); boolean result = crnOperaUtils.crnTaskComplete(param.getCrnNo()); return result ? R.ok() : R.error(); } // @ManagerAuth(memo = "暂停") @@ -569,18 +494,9 @@ if (param.getCrnNo() == null) { throw new CoolException("请选择堆垛机"); } CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.NONE); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 0); // 目标库位层 return crnControl(command)?R.ok():R.error(); boolean result = crnOperaUtils.crnClearCommand(param); return result ? R.ok() : R.error(); } @ManagerAuth(memo = "手动复位") src/main/java/com/zy/asrs/controller/OpenController.java
@@ -211,7 +211,7 @@ map.put("Msg","任务类型为空!"); return map; } String fusion = Utils.Fusion(param.getOriginalRowNo(), param.getOriginalFloorNo(), param.getOriginalColumnNo()); String fusion = Utils.getLocNo(param.getOriginalRowNo(), param.getOriginalFloorNo(), param.getOriginalColumnNo()); param.setStartPoint(fusion); LocMast locMast = locMastService.selectByLocNo(param.getStartPoint()); if(Cools.isEmpty(locMast)){ @@ -238,7 +238,7 @@ return r; } }else if (param.getStereoscopicTaskType() == 3){ String fusion1 = Utils.Fusion(param.getGoalRowNo(), param.getGoalFloorNo(), param.getGoalColumnNo()); String fusion1 = Utils.getLocNo(param.getGoalRowNo(), param.getGoalFloorNo(), param.getGoalColumnNo()); param.setTerminalNo(fusion1); //移库任务创建 r = openService.taskCreate(new TaskCreateParam(param,locMast.getCrnNo())); src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4,19 +4,16 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.controller.CrnController; import com.zy.asrs.controller.SiteController; import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.domain.enums.WorkNoType; import com.zy.asrs.domain.param.CrnOperatorParam; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.Result; import com.zy.asrs.entity.param.StorageEscalationParam; import com.zy.asrs.mapper.*; import com.zy.asrs.service.*; import com.zy.asrs.utils.CommandUtils; import com.zy.asrs.utils.CrnOperaUtils; import com.zy.asrs.utils.Utils; import com.zy.common.service.CommonService; import com.zy.common.utils.HttpHandler; @@ -80,16 +77,16 @@ private StaDescMapper staDescMapper; @Autowired private CommandInfoService commandInfoService; @Autowired private OpenServiceImpl openServiceImpl; @Autowired private StaDescService staDescService; @Autowired private ApiLogService apiLogService; @Autowired private CommonService commonService; @Autowired private CrnOperaUtils crnOperaUtils; @Value("${wms.count}") private Integer maxCount; @Autowired @@ -102,18 +99,13 @@ private String TaskExecCallback; @Value("${wms.taskStatusFeedbackPath}") private String taskStatusFeedbackPath; @Autowired private CrnController crnController; @Autowired private SiteController siteController; public synchronized void generateStoreWrkFile1() throws IOException, InterruptedException { public synchronized void generateStoreWrkFile1() { try { // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历入库口 for (DevpSlave.Sta inSta : devp.getInSta()) { StorageEscalationParam storageEscalationParam = new StorageEscalationParam(); // 获取入库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); @@ -166,113 +158,90 @@ if (barcodeThread == null) { continue; } String BoxNo = barcodeThread.getBarcode(); TaskWrk taskWrk1 = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", BoxNo)); if (!Cools.isEmpty(taskWrk1)) { log.info("托盘码:" + BoxNo + "任务档存在"); if (taskWrk1.getIoType() == 1 && taskWrk1.getStartPoint().equals(staProtocol.getSiteId().toString())) { StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", taskWrk1.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId())); if (Cools.isEmpty(staDesc)) { return; } else { continue; } } String barcode = barcodeThread.getBarcode(); TaskWrk taskWrk1 = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", barcode)); if (taskWrk1 != null) { log.info("托盘码:" + barcode + "任务档存在"); continue; } HashMap<String, Object> requestParam = new HashMap<>(); requestParam.put("BoxNo", barcode);//托盘码 requestParam.put("TerminalNo", inSta.getStaNo());//入库口 if (back) { storageEscalationParam.setWCSStatus(1); storageEscalationParam.setWCSErrorMessage(storageEscalationParam.getWCSErrorMessage() + errMsg); requestParam.put("WCSStatus", 1);//失败 requestParam.put("WCSErrorMessage", errMsg);//失败原因 }else { requestParam.put("WCSStatus", 0);//成功 } log.info("组托入库={}", storageEscalationParam); storageEscalationParam.setBoxNo(BoxNo); String response = ""; Boolean success = false; try { response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath(inboundTaskApplyPath) .setJson(JSON.toJSONString(storageEscalationParam)) .setJson(JSON.toJSONString(requestParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if(back){ if(staProtocol.getWorkNo()>=9801&&staProtocol.getWorkNo()<=9825){ staProtocol.setStaNo((short)105); } else if (staProtocol.getWorkNo()>=9826&&staProtocol.getWorkNo()<=9850) { staProtocol.setStaNo((short)107); }else if (staProtocol.getWorkNo()>=9851&&staProtocol.getWorkNo()<=9875) { staProtocol.setStaNo((short)109); }else if (staProtocol.getWorkNo()>=9876 && staProtocol.getWorkNo() <= 9900){ staProtocol.setStaNo((short)110); } if (back) { devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); }else{ if (!Cools.isEmpty(response)&&!Cools.isEmpty(jsonObject.get("ReturnStatus"))&&jsonObject.get("ReturnStatus").equals(0) && !Cools.isEmpty(jsonObject.get("Result").toString())) { Result result = JSON.parseObject(jsonObject.get("Result").toString(), Result.class); // 创新一个入库工作档 TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo()); if (Cools.isEmpty(taskWrk)) { taskWrk = createTask1(result, BoxNo); if (Cools.isEmpty(taskWrk)) { log.error("库位异常,库位号:={}", taskWrk.getOriginTargetPoint()); } else { taskWrkService.insert(taskWrk); StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", taskWrk.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId())); staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo(staDesc.getCrnStn().shortValue()); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("TaskNo",taskWrk.getTaskNo()); try { //开始上报,任务开始时,WCS回调WMS response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath(taskStatusFeedbackPath) .setJson(JSON.toJSONString(hashMap)) .build() .doPost(); JSONObject jsonObject1 = JSON.parseObject(response); Boolean bool = false; if(jsonObject1.get("ReturnStatus").equals(0)){ taskWrk.setStatus(2);//派发任务 bool = true; taskWrkService.updateById(taskWrk); } apiLogService.save("wcs开始入库任务上报wms" , wmsUrl + TaskExecCallback , null , "127.0.0.1" , JSON.toJSONString(hashMap) , response , bool ); } catch (Exception e) { continue; } } } } else { // staProtocol.setWorkNo((short) 9991); if(staProtocol.getWorkNo()>=9801&&staProtocol.getWorkNo()<=9825){ staProtocol.setStaNo((short)105); } else if (staProtocol.getWorkNo()>=9826&&staProtocol.getWorkNo()<=9850) { staProtocol.setStaNo((short)107); }else if (staProtocol.getWorkNo()>=9851&&staProtocol.getWorkNo()<=9875) { staProtocol.setStaNo((short)109); }else{ staProtocol.setStaNo((short)110); } devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); int returnStatus = Integer.parseInt(jsonObject.get("ReturnStatus").toString()); if (returnStatus == 0) { Result result = JSON.parseObject(jsonObject.get("Result").toString(), Result.class); // 创新一个入库工作档 TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo()); if(taskWrk != null) { log.info("任务:" + result.getTaskNo() + "已经存在"); continue; } taskWrk = createTask1(result, barcode); if (!taskWrkService.insert(taskWrk)) { log.info("任务:" + result.getTaskNo() + "任务创建失败"); continue; } StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", taskWrk.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId())); staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo(staDesc.getCrnStn().shortValue()); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("TaskNo", taskWrk.getTaskNo()); try { //开始上报,任务开始时,WCS回调WMS response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath(taskStatusFeedbackPath) .setJson(JSON.toJSONString(hashMap)) .build() .doPost(); JSONObject jsonObject1 = JSON.parseObject(response); boolean bool = false; if(jsonObject1.get("ReturnStatus").equals(0)){ taskWrk.setStatus(2);//派发任务 bool = true; taskWrkService.updateById(taskWrk); } apiLogService.save("wcs开始入库任务上报wms" , wmsUrl + TaskExecCallback , null , "127.0.0.1" , JSON.toJSONString(hashMap) , response , bool ); } catch (Exception e) { } else { // staProtocol.setWorkNo((short) 9991); staProtocol.setStaNo(inSta.getBackSta().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); } } } catch (Exception e) { @@ -295,12 +264,12 @@ , wmsUrl + inboundTaskApplyPath , null , "127.0.0.1" , JSON.toJSONString(storageEscalationParam) , JSON.toJSONString(requestParam) , response , success ); } log.info("入库请求参数=" + JSON.toJSONString(BoxNo)); log.info("入库请求参数=" + JSON.toJSONString(barcode)); log.info("入库请求返回参数=" + JSON.toJSONString(response)); } } @@ -767,8 +736,8 @@ try { taskWrkService.updateById(taskWrk); } catch (Exception e) { e.printStackTrace(); log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", taskWrk.getWrkNo()); log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,异常:" + e); } } } @@ -1095,11 +1064,9 @@ continue; } //确认完成信号 CrnOperatorParam crnOperatorParam = new CrnOperatorParam(); crnOperatorParam.setCrnNo(crn.getId()); R r = crnController.crnTaskComplete(crnOperatorParam); boolean result = crnOperaUtils.crnTaskComplete(crn.getId()); Thread.sleep(1000); if(!r.get("code").equals(200)){ if(!result){ return; } if (!Cools.isEmpty(taskWrk)) { @@ -1337,8 +1304,11 @@ } private TaskWrk createTask1(Result result, String barcode) { String locNo = Utils.Fusion(result.getRow(), result.getFloor(), result.getColumn()); String locNo = Utils.getLocNo(result.getRow(), result.getFloor(), result.getColumn()); LocMast locMast = locMastService.selectByLocNo(locNo); if (locMast == null) { throw new CoolException("库位不存在"); } Date now = new Date(); TaskWrk taskWrk = new TaskWrk(); @@ -1350,7 +1320,6 @@ taskWrk.setIoType(1);//任务类型 taskWrk.setIoPri(13);//优先级 taskWrk.setBarcode(barcode);//条码 LocMast locMast = locMastService.selectByLocNo(locNo); taskWrk.setCrnNo(locMast.getCrnNo()); taskWrk.setTargetPoint(locNo); taskWrk.setStartPoint("116"); src/main/java/com/zy/asrs/task/TaskLogScheduler.java
@@ -48,17 +48,21 @@ for (TaskWrk taskWrk : taskWrkService.selectToBeHistoryData()) { HashMap<String, Object> headParam = new HashMap<>(); headParam.put("TaskNo", taskWrk.getTaskNo()); NotifyMsgType notifyMsgType = null; if (taskWrk.getStatus().equals(TaskStatusType.OVER.id) || taskWrk.getStatus() == 7) {//完成 headParam.put("Result", 1);//完成 notifyMsgType = NotifyMsgType.TASK_COMPLETE; } else if (taskWrk.getStatus().equals(TaskStatusType.CANCEL.id)) { headParam.put("Result", 2);//取消 notifyMsgType = NotifyMsgType.TASK_CANCEL; } NotifyCustomDataDto customDataDto = new NotifyCustomDataDto(); customDataDto.setUri(wmsUrl); customDataDto.setPath(TaskExecCallback); customDataDto.setData(JSON.toJSONString(headParam)); notifyUtils.notify("task", 1, String.valueOf(taskWrk.getWrkNo()), taskWrk.getTaskNo(), NotifyMsgType.TASK_COMPLETE, JSON.toJSONString(taskWrk), true, customDataDto); notifyUtils.notify("task", 1, String.valueOf(taskWrk.getWrkNo()), taskWrk.getTaskNo(), notifyMsgType, JSON.toJSONString(taskWrk), true, customDataDto); TaskWrkLog taskWrkLog = new TaskWrkLog(taskWrk); if (!wrkLogService.insert(taskWrkLog)) { src/main/java/com/zy/asrs/utils/CrnOperaUtils.java
New file @@ -0,0 +1,174 @@ package com.zy.asrs.utils; import com.core.exception.CoolException; import com.zy.asrs.domain.param.CrnOperatorParam; import com.zy.core.CrnThread; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.CrnTaskModeType; import com.zy.core.enums.SlaveType; import com.zy.core.model.Task; import com.zy.core.model.command.CrnCommand; import com.zy.core.model.protocol.CrnProtocol; import org.springframework.stereotype.Component; @Component public class CrnOperaUtils { //堆垛机入库 public boolean crnPut(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式 command.setSourcePosX(param.getSourceRow()); // 源库位排 command.setSourcePosY(param.getSourceBay()); // 源库位列 command.setSourcePosZ(param.getSourceLev()); // 源库位层 command.setDestinationPosX(param.getRow()); // 目标库位排 command.setDestinationPosY(param.getBay()); // 目标库位列 command.setDestinationPosZ(param.getLev()); // 目标库位层 return crnControl(command); } //堆垛机出库 public boolean crnTake(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.PAKIN); // 任务模式 command.setSourcePosX(param.getSourceRow()); // 源库位排 command.setSourcePosY(param.getSourceBay()); // 源库位列 command.setSourcePosZ(param.getSourceLev()); // 源库位层 command.setDestinationPosX(param.getRow()); // 目标库位排 command.setDestinationPosY(param.getBay()); // 目标库位列 command.setDestinationPosZ(param.getLev()); // 目标库位层 return crnControl(command); } //库位转移 public boolean crnStockMove(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式 command.setSourcePosZ(param.getSourceRow()); // 源库位排 command.setSourcePosX(param.getSourceBay()); // 源库位列 command.setSourcePosY(param.getSourceLev()); // 源库位层 command.setDestinationPosZ(param.getRow()); // 目标库位排 command.setDestinationPosX(param.getBay()); // 目标库位列 command.setDestinationPosY(param.getLev()); // 目标库位层 return crnControl(command); } //站到站 public boolean crnSiteMove(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式 command.setSourcePosX(param.getSourceStaNo()); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 1); // 源库位层 command.setDestinationPosX(param.getStaNo()); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 1); // 目标库位层 return crnControl(command); } //回原点 public boolean crnBacOrigin(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 0); // 目标库位层 return crnControl(command); } //反原点 public boolean reverseOrigin(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 22); // 目标库位列 command.setDestinationPosZ((short) 1); // 目标库位层 return crnControl(command); } //任务完成 public boolean crnTaskComplete(Integer crnNo) { CrnCommand command = new CrnCommand(); command.setCrnNo(crnNo); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 1); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.NONE); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 0); // 目标库位层 command.setCommand((short)0); return crnControl(command); } //清除命令 public boolean crnClearCommand(CrnOperatorParam param){ CrnCommand command = new CrnCommand(); command.setCrnNo(param.getCrnNo()); // 堆垛机编号 command.setTaskNo((short) 0); // 工作号 command.setAckFinish((short) 0); // 任务完成确认位 command.setTaskMode(CrnTaskModeType.NONE); // 任务模式 command.setSourcePosX((short) 0); // 源库位排 command.setSourcePosY((short) 0); // 源库位列 command.setSourcePosZ((short) 0); // 源库位层 command.setDestinationPosX((short) 0); // 目标库位排 command.setDestinationPosY((short) 0); // 目标库位列 command.setDestinationPosZ((short) 0); // 目标库位层 return crnControl(command); } private boolean crnControl(CrnCommand command) { if (command.getCrnNo() == null) { return false; } CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, command.getCrnNo()); if (crnThread == null) { throw new CoolException("堆垛机不在线"); } CrnProtocol crnProtocol = crnThread.getCrnProtocol(); if (crnProtocol == null) { throw new CoolException("堆垛机不在线"); } if (CommandUtils.offer(SlaveType.Crn, command.getCrnNo(), new Task(2, command), false)) { return true; } else { throw new CoolException("命令下发失败"); } } } src/main/java/com/zy/asrs/utils/Utils.java
@@ -337,20 +337,7 @@ } } public static String Fusion(int x, int y, int z){ String locNo="0"+x; if(z>=10){ locNo=locNo+"0"+z; }else{ locNo=locNo+"00"+z; } if(y>=10){ locNo=locNo+y; }else { locNo=locNo+"0"+y; } return locNo; public static String getLocNo(Number row, Number bay, Number lev) { return zerofill(String.valueOf(row), 2) + zerofill(String.valueOf(bay), 3) + zerofill(String.valueOf(lev), 2); } } src/main/java/com/zy/core/MainProcess.java
@@ -5,7 +5,6 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PreDestroy; @@ -42,8 +41,6 @@ continue; } // 演示 // mainService.crnDemoOfLocMove1(); // 入库 ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档 mainService.generateStoreWrkFile1(); // 组托 // 出库 ===>> 堆垛机出库站到出库站 @@ -61,9 +58,6 @@ // mainService.autoDistribute(); //自动完成任务 // mainService.autoCompleteTask(); //agv取放货完成 // mainService.autoCompleteAGV(); } catch (Exception e) { e.printStackTrace(); }