| | |
| | | List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("supp_code", agvBasDevp.getBarcode())); |
| | | |
| | | //检索库位,选择合适的库位 |
| | | AgvLocMast agvLocMast = agvCommonService.getLocNo(agvBasDevp.getLocType1(), agvBasDevp.getFloor(), false, false, null); |
| | | AgvLocMast agvLocMast = agvCommonService.getLocNo(agvBasDevp.getLocType1(), agvBasDevp.getFloor(), false, false); |
| | | //生成工作档 |
| | | AgvWrkMast wrkMast = createWrkMast(1, 201L, agvBasDevp.getDevNo(), agvLocMast.getLocNo(), agvBasDevp.getBarcode(), now, userId, agvBasDevp.getLocType2(), agvLocMast.getPltType()); |
| | | //标记是否为输送线入库 |
| | |
| | | Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "elevatorTasks")); |
| | | if (Cools.isEmpty(config)) { |
| | | if (isCurrLev.get()) { |
| | | agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true, factory); |
| | | agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true); |
| | | } else { |
| | | agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false, factory); |
| | | agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false); |
| | | } |
| | | } else { |
| | | List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().like("loc_no", "02F1").like("source_loc_no", "F1")); |
| | | if (Integer.parseInt(config.getValue()) <= agvWrkMasts.size()) { |
| | | agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true, factory); |
| | | agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true); |
| | | } else { |
| | | if (isCurrLev.get()) { |
| | | agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true, factory); |
| | | agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true); |
| | | } else { |
| | | agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false, factory); |
| | | agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false); |
| | | } |
| | | //agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false); |
| | | } |
| | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.AgvBasDevp; |
| | | import com.zy.asrs.entity.AgvLocMast; |
| | | import com.zy.asrs.entity.AgvWrkMast; |
| | | import com.zy.asrs.service.AgvBasDevpService; |
| | | import com.zy.asrs.service.AgvLocMastService; |
| | | import com.zy.asrs.service.AgvWrkMastService; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.asrs.task.handler.AutoMoveHandler; |
| | | import com.zy.system.entity.Config; |
| | | import com.zy.system.service.ConfigService; |
| | |
| | | * crnNo :2目标楼层 |
| | | */ |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | private synchronized void execute2(){ |
| | | private synchronized void execute2() { |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 22) |
| | | .andNew().eq("io_type",108) |
| | | .andNew() |
| | | .eq("crn_no",2).or().eq("crn_no",3) |
| | | .orderBy("io_pri",false).orderBy("appe_time",true) |
| | | ); |
| | | .andNew().eq("io_type", 108) |
| | | .andNew() |
| | | .eq("crn_no", 2).or().eq("crn_no", 3) |
| | | .orderBy("io_pri", false).orderBy("appe_time", true) |
| | | ); |
| | | if (agvWrkMastList.isEmpty()) { |
| | | return; |
| | | } |
| | | for (AgvWrkMast agvWrkMast : agvWrkMastList) { |
| | | try{ |
| | | try { |
| | | // TODO 自动回流 |
| | | autoMoveHandler.start2(agvWrkMast); |
| | | } catch (Exception e){ |
| | | } catch (Exception e) { |
| | | //log.error("工作号"+agvWrkMast.getWrkNo()+"调拨出库,处理失败:===》异常原因:"+e.getMessage()); |
| | | } |
| | | } |
| | |
| | | * ioType 111.手动调拨 |
| | | */ |
| | | @Scheduled(cron = "0/2 * * * * ? ") |
| | | private void execute3(){ |
| | | private void execute3() { |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 22) |
| | | .andNew().eq("io_type",111) |
| | | .orderBy("io_pri",false) |
| | | .orderBy("appe_time",true) |
| | | .andNew().eq("io_type", 111) |
| | | .orderBy("io_pri", false) |
| | | .orderBy("appe_time", true) |
| | | ); |
| | | if (agvWrkMastList.isEmpty()) { |
| | | return; |
| | | } |
| | | for (AgvWrkMast agvWrkMast : agvWrkMastList) { |
| | | try{ |
| | | try { |
| | | autoMoveHandler.start3(agvWrkMast); |
| | | } catch (Exception e){ |
| | | } catch (Exception e) { |
| | | //log.error("工作号"+agvWrkMast.getWrkNo()+"调拨出库,处理失败:===》异常原因:"+e.getMessage()); |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | @Scheduled(cron = "0/2 * * * * ? ") |
| | | private void execute4(){ |
| | | private void execute4() { |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 22) |
| | | .andNew().eq("io_type",114) |
| | | .orderBy("io_pri",false) |
| | | .orderBy("appe_time",true) |
| | | .andNew().eq("io_type", 114) |
| | | .orderBy("io_pri", false) |
| | | .orderBy("appe_time", true) |
| | | ); |
| | | if (agvWrkMastList.isEmpty()) { |
| | | return; |
| | | } |
| | | for (AgvWrkMast agvWrkMast : agvWrkMastList) { |
| | | try{ |
| | | try { |
| | | autoMoveHandler.start4(agvWrkMast); |
| | | } catch (Exception e){ |
| | | log.error("工作号"+agvWrkMast.getWrkNo()+"调拨出库,处理失败:===》异常原因:"+e.getMessage()); |
| | | } catch (Exception e) { |
| | | log.error("工作号" + agvWrkMast.getWrkNo() + "调拨出库,处理失败:===》异常原因:" + e.getMessage()); |
| | | } |
| | | } |
| | | |
| | |
| | | * ioType 113.空托盘手动回流 |
| | | */ |
| | | @Scheduled(cron = "0/2 * * * * ? ") |
| | | private void autoEmptyBack3(){ |
| | | private void autoEmptyBack3() { |
| | | // 工作档为201 且 入出库类型为109 |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 214) |
| | | .eq("loc_no","") |
| | | .eq("io_type",113) |
| | | .orderBy("io_pri",false)); |
| | | .eq("loc_no", "") |
| | | .eq("io_type", 113) |
| | | .orderBy("io_pri", false)); |
| | | if (agvWrkMastList.isEmpty()) { |
| | | return; |
| | | } |
| | | for (AgvWrkMast agvWrkMast : agvWrkMastList) { |
| | | try{ |
| | | try { |
| | | autoMoveHandler.autoEmptyBack3(agvWrkMast); |
| | | } catch (Exception e){ |
| | | log.error("工作号"+agvWrkMast.getWrkNo()+"空板自动回库 接驳点 - 1楼库位,处理失败:===》异常原因:"+e.getMessage()); |
| | | } catch (Exception e) { |
| | | log.error("工作号" + agvWrkMast.getWrkNo() + "空板自动回库 接驳点 - 1楼库位,处理失败:===》异常原因:" + e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | |
| | | * 2楼或3楼站点可入信号全部没有,代表走电梯自动搬运模式 |
| | | */ |
| | | @Scheduled(cron = "0/2 * * * * ? ") |
| | | private void autoEmptyBack4(){ |
| | | private void autoEmptyBack4() { |
| | | // 查询 不为1楼的空货架 |
| | | List<AgvLocMast> agvLocMasts = agvLocMastService.selectList( |
| | | new EntityWrapper<AgvLocMast>() |
| | | // TODO 四期 |
| | | .eq("loc_sts", "D") |
| | | .eq("loc_type1", 3) |
| | | .ne("floor", 1) |
| | | .eq("loc_sts","D") |
| | | .eq("loc_type1",3)); |
| | | .ne("lve1", 1)); |
| | | if (agvLocMasts.isEmpty()) { |
| | | return; |
| | | } |
| | | for (AgvLocMast agvLocMast : agvLocMasts) { |
| | | try{ |
| | | try { |
| | | autoMoveHandler.autoEmptyBack4(agvLocMast); |
| | | } catch (Exception e){ |
| | | log.error("库位号"+agvLocMast.getLocNo()+"空板自动回库 库位-接驳点 库位-吸塑车间,处理失败:===》异常原因:"+e.getMessage()); |
| | | } catch (Exception e) { |
| | | log.error("库位号" + agvLocMast.getLocNo() + "空板自动回库 库位-接驳点 库位-吸塑车间,处理失败:===》异常原因:" + e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private boolean determineFloorConnection(Integer floor){ |
| | | try{ |
| | | |
| | | /** |
| | | // TODO 四期 |
| | | */ |
| | | @Scheduled(cron = "0/2 * * * * ? ") |
| | | private void autoEmptyBackSiqi() { |
| | | // 查询 二厂的的半成品箱壳类型的空货架 |
| | | List<AgvLocMast> agvLocMasts = agvLocMastService.selectList( |
| | | new EntityWrapper<AgvLocMast>() |
| | | .eq("loc_sts", "D") |
| | | .eq("loc_type1", 6) |
| | | .eq("floor", 2)); |
| | | if (agvLocMasts.isEmpty()) { |
| | | return; |
| | | } |
| | | for (AgvLocMast agvLocMast : agvLocMasts) { |
| | | try { |
| | | autoMoveHandler.autoEmptyBackSiqi(agvLocMast); |
| | | } catch (Exception e) { |
| | | log.error("库位号" + agvLocMast.getLocNo() + "空板自动回库 库位-接驳点 库位-吸塑车间,处理失败:===》异常原因:" + e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | private boolean determineFloorConnection(Integer floor) { |
| | | try { |
| | | List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().eq("floor", floor).like("dev_no", "DB_")); |
| | | if (!agvBasDevps.isEmpty()){ |
| | | for (AgvBasDevp agvBasDevp:agvBasDevps){ |
| | | if (agvBasDevp.getInEnable().equals("Y")){ |
| | | if (!agvBasDevps.isEmpty()) { |
| | | for (AgvBasDevp agvBasDevp : agvBasDevps) { |
| | | if (agvBasDevp.getInEnable().equals("Y")) { |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("判断当前楼层接驳位是否全部关闭,异常"+e.getMessage()); |
| | | } catch (Exception e) { |
| | | log.error("判断当前楼层接驳位是否全部关闭,异常" + e.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | |
| | | * |
| | | */ |
| | | @Scheduled(cron = "0/2 * * * * ? ") |
| | | private void autoEmptyBack5(){ |
| | | private void autoEmptyBack5() { |
| | | List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>() |
| | | .ne("floor", 1) |
| | | .eq("loc_sts", "F") |
| | |
| | | return; |
| | | } |
| | | for (AgvBasDevp agvBasDevp : agvBasDevps) { |
| | | try{ |
| | | try { |
| | | autoMoveHandler.autoEmptyBack5(agvBasDevp); |
| | | } catch (Exception e){ |
| | | log.error("站点号"+agvBasDevp.getDevNo()+"站点是否自动 优先选择先到接驳位(接驳位可入) 后选择直接回库,处理失败:===》异常原因:"+e.getMessage()); |
| | | } catch (Exception e) { |
| | | log.error("站点号" + agvBasDevp.getDevNo() + "站点是否自动 优先选择先到接驳位(接驳位可入) 后选择直接回库,处理失败:===》异常原因:" + e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | |
| | | * 手动: 生成 113 手动回流 |
| | | */ |
| | | @Scheduled(cron = "0/2 * * * * ? ") |
| | | private void autoEmptyBack6(){ |
| | | private void autoEmptyBack6() { |
| | | List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>() |
| | | .eq("floor", 1) |
| | | .eq("loc_sts", "F") |
| | |
| | | return; |
| | | } |
| | | for (AgvBasDevp agvBasDevp : agvBasDevps) { |
| | | try{ |
| | | try { |
| | | autoMoveHandler.autoEmptyBack6(agvBasDevp); |
| | | } catch (Exception e){ |
| | | log.error("站点号"+agvBasDevp.getDevNo()+"检测1楼接驳点 生成 113 手动回流,处理失败:===》异常原因:"+e.getMessage()); |
| | | } catch (Exception e) { |
| | | log.error("站点号" + agvBasDevp.getDevNo() + "检测1楼接驳点 生成 113 手动回流,处理失败:===》异常原因:" + e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | |
| | | long time3 = time - time1; |
| | | |
| | | |
| | | if (time3 > 0 && time3 < (1000 * 60 * 10)) { |
| | | |
| | | if (time3 > 0 && time3 < (1000* 60 * 10)) { |
| | | |
| | | List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().like("loc_no", "02F1").like("source_loc_no", "F1").eq("io_type",12)); |
| | | if (maxTansk <= agvWrkMasts.size()){ |
| | | List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().like("loc_no", "02F1").like("source_loc_no", "F1").eq("io_type", 12)); |
| | | if (maxTansk <= agvWrkMasts.size()) { |
| | | return; |
| | | } |
| | | |
| | |
| | | new EntityWrapper<AgvLocMast>() |
| | | .eq("floor", 1) |
| | | .eq("lev1", 1) |
| | | .eq("loc_sts","F") |
| | | .eq("loc_type1",3)); |
| | | .eq("loc_sts", "F") |
| | | .eq("loc_type1", 3)); |
| | | if (agvLocMasts.isEmpty()) { |
| | | return; |
| | | } |
| | | for (AgvLocMast agvLocMast : agvLocMasts) { |
| | | try{ |
| | | autoMoveHandler.autoTransfers(agvLocMast,maxTansk); |
| | | } catch (Exception e){ |
| | | log.error("库位号"+agvLocMast.getLocNo()+"定时移库任务 吸塑一楼 --> 吸塑二楼,处理失败:===》异常原因:"+e.getMessage()); |
| | | try { |
| | | autoMoveHandler.autoTransfers(agvLocMast, maxTansk); |
| | | } catch (Exception e) { |
| | | log.error("库位号" + agvLocMast.getLocNo() + "定时移库任务 吸塑一楼 --> 吸塑二楼,处理失败:===》异常原因:" + e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | |
| | | private ReturnT<String> doAutoMove3(AgvWrkMast agvWrkMast) { |
| | | Date now = new Date(); |
| | | //检索库位,选择合适的库位 |
| | | AgvLocMast locMast = agvCommonService.getLocNo(3,agvWrkMast.getCrnNo(),false,false,null); |
| | | AgvLocMast locMast = agvCommonService.getLocNo(3,agvWrkMast.getCrnNo(),false,false); |
| | | if (Cools.isEmpty(locMast)) { |
| | | log.info("暂无库位"); |
| | | return FAIL; |
| | |
| | | Date now = new Date(); |
| | | AgvBasDevp agvBasDevp = agvBasDevpService.selectByDevNo(agvWrkMast.getSourceLocNo()); |
| | | //检索空闲接驳位,选择合适的接驳位 |
| | | AgvLocMast locMast = agvCommonService.getLocNo(3, 1,true,true,null); |
| | | AgvLocMast locMast = agvCommonService.getLocNo(3, 1,true,true); |
| | | if (Cools.isEmpty(locMast)) { |
| | | throw new CoolException("1楼暂无空库位"); |
| | | } |
| | |
| | | ioType = 109; |
| | | } else { |
| | | //检索库位,选择合适的库位 |
| | | locMast = agvCommonService.getLocNo(3,1,true,true,null); |
| | | locMast = agvCommonService.getLocNo(3,1,true,true); |
| | | locNo = locMast.getLocNo(); |
| | | wrkSts = 201L; |
| | | ioType = 109; |
| | |
| | | return SUCCESS; |
| | | } |
| | | |
| | | |
| | | public ReturnT<String> autoEmptyBackSiqi(AgvLocMast agvLocMast) { |
| | | Date now = new Date(); |
| | | //查询工作档 |
| | | AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode()); |
| | | if(!Cools.isEmpty(agvWrkMast)){ |
| | | throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中"); |
| | | } |
| | | String floor = ""; |
| | | String locNo = ""; |
| | | Long wrkSts = 0L; |
| | | Integer ioType = 0; |
| | | AgvLocMast locMast = new AgvLocMast(); |
| | | if (agvLocMast.getFloor() == 3) { |
| | | floor = "F3"; |
| | | } else if(agvLocMast.getFloor() == 2) { |
| | | floor = "F2"; |
| | | } |
| | | List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("io_type", 109).like("source_loc_no", floor).or().eq("io_type", 113)); |
| | | if (agvWrkMasts.size() >= 5) { |
| | | //log.error("暂停回流"); |
| | | return FAIL; |
| | | //throw new CoolException("暂停回流"); |
| | | } |
| | | //检索空闲可入接驳位 没有空闲可入接驳位 直接找库位 |
| | | AgvBasDevp devpNo = agvCommonService.getDevpNo(6, agvLocMast.getFloor(),"Y","Y"); |
| | | if (!Cools.isEmpty(devpNo)) { |
| | | locNo = devpNo.getDevNo(); |
| | | wrkSts = 21L; |
| | | ioType = 109; |
| | | } else { |
| | | //检索库位,选择合适的库位 |
| | | locMast = agvCommonService.getLocNo(6,1,true,true); |
| | | locNo = locMast.getLocNo(); |
| | | wrkSts = 201L; |
| | | ioType = 109; |
| | | } |
| | | |
| | | //生成工作档 |
| | | AgvWrkMast mast = new AgvWrkMast(); |
| | | //工作状态 |
| | | mast.setWrkSts(wrkSts); |
| | | //入出库类型 |
| | | mast.setIoType(ioType); |
| | | mast.setIoTime(now); |
| | | //优先级 |
| | | mast.setIoPri(300.0); |
| | | //源站点 |
| | | mast.setSourceLocNo(agvLocMast.getLocNo()); |
| | | //目标站点 |
| | | mast.setLocNo(locNo); |
| | | //货架编码 |
| | | mast.setBarcode(agvLocMast.getBarcode()); |
| | | //货架类型 |
| | | mast.setWhsType(30); |
| | | |
| | | mast.setAppeUser(9527L); |
| | | mast.setAppeTime(now); |
| | | mast.setModiUser(9527L); |
| | | mast.setModiTime(now); |
| | | mast.setLogErrMemo("autoEmptyBack4"); |
| | | if (!agvWrkMastService.insertByIncrease(mast)) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | |
| | | //更新目标库位状态 |
| | | updateAgvLocMast(agvLocMast,"R"); |
| | | if (wrkSts == 21L) { |
| | | updateAgvBasDevp(devpNo,"S",agvLocMast.getLocType2(),agvLocMast.getBarcode()); |
| | | } else { |
| | | updateAgvLocMast(locMast,"S"); |
| | | } |
| | | |
| | | |
| | | return SUCCESS; |
| | | } |
| | | |
| | | |
| | | public ReturnT<String> autoEmptyBack5(AgvBasDevp agvBasDevp) { |
| | | //查询工作档 |
| | | AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvBasDevp.getBarcode()); |
| | |
| | | //入出库类型 |
| | | mast.setIoType(109); |
| | | //检索库位,选择合适的库位 |
| | | AgvLocMast locMast = agvCommonService.getLocNo(3,1,true,true,null); |
| | | AgvLocMast locMast = agvCommonService.getLocNo(3,1,true,true); |
| | | mast.setLocNo(locMast.getLocNo()); |
| | | updateAgvLocMast(locMast,"S"); |
| | | } else { |
| | |
| | | throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中"); |
| | | } |
| | | //检索库位,选择合适的库位 |
| | | AgvLocMast LocMast = agvCommonService.getLocNo(3,1,false,false,null); |
| | | AgvLocMast LocMast = agvCommonService.getLocNo(3,1,false,false); |
| | | if (LocMast.getLev1() != 2) { |
| | | throw new CoolException("目标楼层不是吸塑二楼"); |
| | | } |