src/main/java/com/zy/asrs/controller/MobileController.java
@@ -610,8 +610,8 @@ .setFullPlt("Y") // 满板:Y .setPicking("N") // 拣料 .setExitMk("N")// 退出 .setStaNo(staNo) .setSourceStaNo(taskNo)//agv取货站点 .setStaNo(taskNo) .setSourceStaNo(sourceStaNo)//agv取货站点 .setEmptyMk("N")// 空板 .setBarcode(staNo)// 托盘码 .setLinkMis("N") @@ -640,9 +640,7 @@ break; } } if (boo) { settle.remove(orderPakin); }else { if (!boo) { list.add(orderPakin.getOrderNo()); } }else { src/main/java/com/zy/asrs/entity/Task.java
@@ -398,10 +398,16 @@ public String getTaskType$(){ if (Cools.isEmpty(this.taskType)){return null;} if (taskType.equals("AGV")) { if (taskType.equals("AGV") || taskType.equals("agv")) { return "AGV任务"; }if(taskType.equals("AGV补空料架")){ return "AGV补空料架任务"; }if(taskType.equals("AGV空料架回缓存区")){ return "AGV空料架回缓存区任务"; }if(taskType.equals("ZX-AGV")){ return "转序搬运任务"; } else { return "堆垛机任务"; return "其他搬运任务"; } } src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java
@@ -9,7 +9,7 @@ public class RcsTaskSubmit { // 任务类型,枚举值:TRANSPORT搬运。 private String taskType = "CS3"; private String taskType = "PP"; // 执行步骤集合。本次任务机器人需要执行的关键路径,序号0代表起点,序号1代表终点。 private List<RcsTaskTargetRoute> targetRoute; // 任务唯一编号,如果为空,系统生成任务号并返回。 src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -239,7 +239,6 @@ newMemo.put("itemdata", list); // 生成订单 OrderPakin orderPakin = new OrderPakin(); orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId())); @@ -260,8 +259,8 @@ // 生成明细 Mat mat = matService.selectByMatnr(mesMatInfo.getItemNo()); if(Cools.isEmpty(mat)){ log.error("该物料编号立库没有="+mesMatInfo.getItemNo()); if (Cools.isEmpty(mat)) { log.error("该物料编号立库没有=" + mesMatInfo.getItemNo()); continue; } OrderDetlPakin orderDetlPakin = new OrderDetlPakin(); @@ -1004,9 +1003,9 @@ } //有多少种不同的配盘号 只有配盘出库单需要知道 if (mesCallOutApply.getTransType().equals("配盘出库单")){ if (mesCallOutApply.getTransType().equals("配盘出库单")) { orderPakout.setPayType(set.size()); String shipCode =mesCallOutApply.getItemdata().get(0).getTrayid().split("-")[2]; String shipCode = mesCallOutApply.getItemdata().get(0).getTrayid().split("-")[2]; orderPakout.setShipCode(shipCode);//区域 是否是特殊托盘 orderPakoutService.updateById(orderPakout); } @@ -1040,11 +1039,11 @@ orderPakin.setPakinPakoutStatus(1); orderPakinService.insert(orderPakin); if (mesCallOutApply.getItemdata() != null && !mesCallOutApply.getItemdata().isEmpty()) { for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()){ for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()) { // 生成明细 Mat mat = matService.selectByMatnr(mesOutApplyItem.getItemno()); if(Cools.isEmpty(mat)){ log.error("该物料编号立库没有="+mesOutApplyItem.getItemno()); if (Cools.isEmpty(mat)) { log.error("该物料编号立库没有=" + mesOutApplyItem.getItemno()); continue; } OrderDetlPakin orderDetlPakin = new OrderDetlPakin(); @@ -1105,73 +1104,37 @@ return result; } // 下发给RCS RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit(); rcsTaskSubmit.setRobotTaskCode(transTask.getTaskno()); rcsTaskSubmit.setInitPriority(10); //默认10 List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>(); RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute(); startRoute.setSeq(0); startRoute.setCode(transTask.getCurStationId()); startRoute.setOperation("COLLECT"); targetRouteList.add(startRoute); RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute(); endRoute.setSeq(1); endRoute.setCode(transTask.getNextStationId()); endRoute.setOperation("DELIVERY"); targetRouteList.add(endRoute); rcsTaskSubmit.setTargetRoute(targetRouteList); int workNo = commonService.getWorkNo(WorkNoType.OTHER.type); Date now = new Date(); Task task = new Task(); task.setWrkNo(workNo); task.setTaskType("ZX-AGV"); task.setWrkSts(301L);//301.AGV任务创建 task.setIoType(3);//3.站到站 task.setIoPri(10.00); task.setWrkDate(now); task.setBarcode(transTask.getBarcode()); task.setSourceStaNo(transTask.getCurStationId()); task.setStaNo(transTask.getNextStationId()); task.setBarcode(transTask.getTuoPanId()); task.setModiUser(defaultUserId); task.setModiTime(now); task.setAppeUser(defaultUserId); task.setAppeTime(now); task.setTaskNo(transTask.getTaskno()); task.setMemo(JSONObject.toJSONString(transTask)); task.setPltType(transTask.getAgvFactory());//华晓AGV task.setPacked(transTask.getRackNumber());//料架号 task.setCtnType(1); // 转发给海康或华晓RCS int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory()); if (success == 1) { int workNo = commonService.getWorkNo(WorkNoType.OTHER.type); Date now = new Date(); Task task = new Task(); task.setWrkNo(workNo); task.setTaskType("ZX-AGV"); task.setWrkSts(302L);//302.AGV任务执行中 task.setIoType(3);//3.站到站 task.setIoPri(10.00); task.setWrkDate(now); task.setBarcode(transTask.getBarcode()); task.setSourceStaNo(transTask.getCurStationId()); task.setStaNo(transTask.getNextStationId()); task.setBarcode(transTask.getTuoPanId()); task.setModiUser(defaultUserId); task.setModiTime(now); task.setAppeUser(defaultUserId); task.setAppeTime(now); task.setTaskNo(transTask.getTaskno()); task.setMemo(JSONObject.toJSONString(transTask)); task.setPltType(transTask.getAgvFactory());//华晓AGV task.setPacked(transTask.getRackNumber());//料架号 if (taskService.insert(task)) { result.put("Success", "1"); result.put("Message", "任务接收成功"); taskService.insert(task); // Mat mat = matService.selectByMatnr(transTask.getItemno()); // TaskDetl taskDetl = new TaskDetl(); // taskDetl.setWrkNo(task.getWrkNo()); // taskDetl.setIoTime(task.getIoTime()); // taskDetl.setMatnr(transTask.getItemno()); // taskDetl.setAnfme(0.0); // taskDetl.setStandby1(String.valueOf(transTask.getQty())); // taskDetl.setMaktx(mat.getMaktx()); // taskDetl.setSpecs(mat.getSpecs()); // taskDetl.setOrderNo(transTask.getOrderNo()); // taskDetl.setZpallet(transTask.getTuoPanId()); // taskDetl.setMemo(JSONObject.toJSONString(transTask.getItemBarcode())); // taskDetl.setModiUser(defaultUserId); // taskDetl.setModiTime(now); // taskDetl.setAppeUser(defaultUserId); // taskDetl.setAppeTime(now); // taskDetlService.insert(taskDetl); result.put("Success", "1"); result.put("Message", "任务接收成功"); } else { }else { result.put("Success", "2"); result.put("Message", "任务下发给RCS失败"); } return result; } src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -22,6 +22,8 @@ import com.zy.common.model.enums.WorkNoType; import com.zy.common.service.CommonService; import com.zy.common.utils.HttpHandler; import com.zy.system.entity.Config; import com.zy.system.service.impl.ConfigServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -114,6 +116,8 @@ private BasStationService basStationService; @Autowired private BasContainerService basContainerService; @Autowired private ConfigServiceImpl configService; @Override @Transactional @@ -741,11 +745,11 @@ Date date = new Date(); String s = ""; if (param.getBarcode().charAt(0) == '3'){ s = "Z-307"; s = "307"; }else if (param.getBarcode().charAt(0) == '4'){ s = "Z-402"; s = "402"; }else if (param.getBarcode().charAt(0) == '5'){ s = "Z-401"; s = "401"; } String TaskNo = param.getBarcode()+"aa"+date.getTime(); task.setWrkNo((int) date.getTime()) @@ -1334,12 +1338,12 @@ //滑块库 if(locMast.getLocType3()==1){ if(locMast.getLocType2()==1){ sta = "Z-402"; sta = "402"; }else if(locMast.getLocType2()==2){ sta = "Z-401"; sta = "401"; } }else if(locMast.getLocType3()==2){ sta="Z-307"; sta="307"; } // 获取路径 src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -447,7 +447,7 @@ String slotCode = values.getString("slotCode"); try { // q3,q8=1 if ("1".equals(carrierType)) { //AGV EntityWrapper<Task> wrapper = new EntityWrapper<>(); wrapper.eq("task_no", robotTaskCode); Task task = taskService.selectOne(wrapper); @@ -563,7 +563,7 @@ } break; } } // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java
@@ -79,7 +79,7 @@ .setPicking("N") // 拣料 .setExitMk("N")// 退出 .setStaNo(wrkMast.getMemo()) .setSourceStaNo("Z-"+wrkMast.getSourceStaNo()) .setSourceStaNo(wrkMast.getSourceStaNo()) .setEmptyMk("N")// 空板 .setBarcode(wrkMast.getBarcode())// 托盘码 .setLinkMis("N") @@ -107,7 +107,7 @@ return; } //查询所有agv待下发任务 List<Task> wrkSts = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 301)); List<Task> wrkSts = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 301).orderBy("appe_time")); if (wrkSts != null && !wrkSts.isEmpty()) { for (Task task : wrkSts) { //查询是否有正在作业的源站和目标站有一样的agv搬运任务 @@ -116,6 +116,7 @@ .eq("wrk_sts", 302) .andNew() .in("source_sta_no", task.getSourceStaNo(), task.getStaNo()) .or() .in("sta_no", task.getStaNo(), task.getSourceStaNo())); Boolean flag = true; if (Cools.isEmpty(task1)) { @@ -123,45 +124,52 @@ //如果是接驳站点则需要判断接驳站点是否有空料架 //如果有空料架需要判断是否有出库任务 //有出库任务则禁止下发本次搬运任务 if (task.getStaNo().equals("Z-401") || task.getStaNo().equals("Z-402") || task.getStaNo().equals("Z-307")) { if (task.getStaNo().equals("401") || task.getStaNo().equals("402") || task.getStaNo().equals("307")) { flag = false; BasDevp basDevp = basDevpService.checkSiteStatus(Integer.parseInt(task.getStaNo())); if (basDevp != null && !Cools.isEmpty(basDevp.getInreq1()) && basDevp.getInreq1().equals("Y")) { if (basDevp != null && !Cools.isEmpty(basDevp.getInreq1()) && basDevp.getInreq1().equals("Y") && basDevp.getLoading().equals("N") && basDevp.getWrkNo()!=9991 && basDevp.getWrkNo()!=9999) { List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() .in("io_type", 101, 110) .eq("sta_no", task1.getStaNo())); flag = false; if (Cools.isEmpty(wrkMasts)) { .le("wrk_sts", 14) .eq("sta_no", task.getStaNo())); List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("io_type", 1).eq("sta_no", task.getStaNo())); if (Cools.isEmpty(wrkMasts)&&Cools.isEmpty(wrkMasts1)) { //判断是否已经生成空料架搬运回空料架补库区 //如果有的话,不在生成任务 Task task2 = taskService.selectOne(new EntityWrapper<Task>().eq("sta_no", task1.getStaNo()).eq("source_sta_no", task1.getSourceStaNo())); Task task2 = taskService.selectOne(new EntityWrapper<Task>().eq("task_type","AGV空料架回缓存区").eq("source_sta_no", task.getStaNo())); //有入库任务搬运,需要生成空料架搬运到空料架缓冲区AGV任务 if (Cools.isEmpty(task2)) { //生成AGV搬运出库任务 // 保存工作档 String SourceStaNo = ""; if (task.getStaNo().equals("Z-401")) { if (task.getStaNo().equals("401")) { //大料架缓冲区 SourceStaNo = "Q-E3"; }else if (task.getStaNo().equals("Z-402")) { }else if (task.getStaNo().equals("402")) { SourceStaNo = "Q-E2"; }else if (task.getStaNo().equals("Z-307")) { }else if (task.getStaNo().equals("307")) { SourceStaNo = "Q-E1"; } Task task3 = new Task(); Date date = new Date(); String TaskNo = task.getTaskNo() + "-" + date.getTime(); String TaskNo = task.getTaskNo() + "bb" + date.getTime(); task3.setWrkNo(999999) .setTaskNo(TaskNo) .setIoTime(date) .setWrkSts(301L) // 工作状态:301.任务下发 .setIoType(4) // 入出库状态: 3.站到站 4.站到区域 .setTaskType("agv") .setTaskType("AGV空料架回缓存区") .setIoPri(10D) .setFullPlt("Y") // 满板:Y .setPicking("N") // 拣料 .setExitMk("N")// 退出 .setStaNo(task.getStaNo()) .setSourceStaNo(SourceStaNo)//空料架缓存区E1 .setStaNo(SourceStaNo) .setSourceStaNo(task.getStaNo())//空料架缓存区E1 .setEmptyMk("N")// 空板 .setBarcode("")// 托盘码 .setLinkMis("N") @@ -169,15 +177,21 @@ .setAppeTime(date) .setModiUser(9945L) .setModiTime(date); if (!taskService.insert(task)) { if (!taskService.insert(task3)) { throw new CoolException("保存工作档失败"); } break; } } }else if(basDevp != null && !Cools.isEmpty(basDevp.getInreq1()) && basDevp.getInreq1().equals("N") && basDevp.getLoading().equals("N") ) { flag = true; } } if (flag) { if (flag || task.getTaskType().equals("AGV空料架回缓存区")) { //AGV任务下发 ReturnT<String> start = AGVTaskReportHandler.start(task); if (!start.isSuccess()) { @@ -188,6 +202,7 @@ if (!taskService.updateById(task)) { log.error("工作档[workNo={}]标记待处理失败", task.getWrkNo()); } break; }else { task.setCtnType(task.getCtnType()+1); task.setModiTime(new Date()); src/main/java/com/zy/asrs/task/handler/AGVTaskReportHandler.java
@@ -37,14 +37,14 @@ }else if(task.getIoType()==5){ SourceStaNoType = "ZONE"; } String taskType = "CS3"; String taskType = "PP"; Boolean flag1 = false; Boolean flag2 = false; if(task.getStaNo().equals("Z-401")|| task.getStaNo().equals("Z-402")|| task.getStaNo().equals("Z-307")){ if(task.getStaNo().equals("401")|| task.getStaNo().equals("402")|| task.getStaNo().equals("307")){ taskType = "YLIN"; flag1 = true; } if (task.getSourceStaNo().equals("Z-401")|| task.getSourceStaNo().equals("Z-402")|| task.getSourceStaNo().equals("Z-307")){ if (task.getSourceStaNo().equals("401")|| task.getSourceStaNo().equals("402")|| task.getSourceStaNo().equals("307")){ taskType = "YLOUT"; flag2 = true; } @@ -59,7 +59,7 @@ StaNo = split[0]+split[1]; } if (task.getSourceStaNo().split("-")[0].equals("Q")) { String[] split = task.getStaNo().split("-"); String[] split = task.getSourceStaNo().split("-"); SourceStaNo = split[0]+split[1]; } src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -246,9 +246,9 @@ for (WrkDetl wrkDetl : wrkDetls53) { LocDetl locDetl = locDetlService.selectItem(locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand() , wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); , null, wrkDetl.getStandby2(), wrkDetl.getStandby3(), wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3()); if (null != locDetl) { if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(), wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3() if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(),null, wrkDetl.getStandby2(), wrkDetl.getStandby3() , wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3())) { // exceptionHandle("拣料入库 ===>> 修改库存明细数量失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo()); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); @@ -612,10 +612,12 @@ //查询是否有关联的WrkMast任务 WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", task.getWrkNo())); if (wrkMast != null) { if (wrkMast.getIoType()==110){ if (wrkMast.getIoType()==110&& wrkMast.getWrkSts()>12){ wrkMast.setWrkSts(32L);//32.等待组托 }else if (wrkMast.getIoType()==101){ wrkMast.setWrkSts(15L);//15.出库更新完成 }else if (wrkMast.getIoType()==103 && wrkMast.getWrkSts()>12){ wrkMast.setWrkSts(20L);//20.等待回库 } wrkMast.setModiTime(new Date()); wrkMastService.updateById(wrkMast); src/main/java/com/zy/common/web/WcsController.java
@@ -89,6 +89,13 @@ return R.error("高低检测信号不能为空"); } //入库时对空板出库任务进行完成 WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", param.getBarcode()).eq("wrk_sts",110)); if (!Cools.isEmpty(wrkMast)) { wrkMast.setWrkSts(15L);//空板出库任务转历史档 wrkMastService.updateById(wrkMast); } // 源站点状态检测 BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true); sourceStaNo.setLocType1(param.getLocType1()); @@ -311,23 +318,31 @@ if (!tasks.isEmpty()){ return R.error("有对堆垛机接驳站点的AGV搬运任务,暂时无法生成AGV搬运任务"); } String sourceStaNo = "Q-"; if(wrkMast.getStaNo().equals("401")){ sourceStaNo = sourceStaNo + "E3"; }else if(wrkMast.getStaNo().equals("402")){ sourceStaNo = sourceStaNo + "E2"; }else if(wrkMast.getStaNo().equals("307")){ sourceStaNo = sourceStaNo + "E1"; } //生成AGV搬运空料架任务 // 保存工作档 Task task = new Task(); Date date = new Date(); String TaskNo = wrkMast.getWrkNo()+"-"+date.getTime(); String TaskNo = wrkMast.getWrkNo()+"aa"+date.getTime(); task.setWrkNo(wrkMast.getWrkNo()) .setTaskNo(TaskNo) .setIoTime(date) .setWrkSts(301L) // 工作状态:301.任务下发 .setIoType(5) // 入出库状态: 5.区域到站 .setTaskType("agv") .setTaskType("AGV补空料架") .setIoPri(10D) .setFullPlt("N") // 满板:Y .setPicking("N") // 拣料 .setExitMk("N")// 退出 .setStaNo(wrkMast.getStaNo()) .setSourceStaNo("E1")//空料架缓存区E1 .setSourceStaNo(sourceStaNo)//空料架缓存区 .setEmptyMk("Y")// 空板 .setBarcode("")// 托盘码 .setLinkMis("N") src/main/resources/application-dev.yml
@@ -135,7 +135,7 @@ #mes对接 mes: url: http://172.26.160.5:80/dev-api/basicmodel/WmsFit/Api/ url: http://192.9.100.173:8088/prod-api/basicmodel/WmsFit/Api/ #默认接口操作人员id defaultUserId: 30 src/main/resources/mapper/WrkMastMapper.xml
@@ -64,7 +64,7 @@ </resultMap> <select id="selectToBeCompleteData" resultMap="BaseResultMap"> select * from asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type != 103 and io_type != 104 and io_type != 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,error_time,io_time,wrk_no select * from asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type != 104 and io_type != 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,error_time,io_time,wrk_no </select> <select id="selectToBeHistoryData" resultMap="BaseResultMap">