| | |
| | | private AgvLocRuleService agvLocRuleService; |
| | | @Autowired |
| | | private AgvLocMastService agvLocMastService; |
| | | @Autowired |
| | | private MatService matService; |
| | | @Autowired |
| | | private LocRuleService locRuleService; |
| | | |
| | | public int getWorkNo(Integer wrkMk) { |
| | | AgvWrkLastno wrkLastno = agvWrkLastnoService.selectById(wrkMk); |
| | |
| | | * 检索库位号 |
| | | * @return locNo 检索到的库位号 |
| | | */ |
| | | public AgvLocMast getLocNo(List<AgvWaitPakin> agvWaitPakinList, int floor) { |
| | | public AgvLocMast getLocNo(int type) { |
| | | // 目标库位 |
| | | AgvLocMast locMast = null; |
| | | // if(Cools.isEmpty(agvWaitPakinList)){ |
| | | // return getLocNoRule(type); // 1. 随机库位 |
| | | // } |
| | | |
| | | //库位规则 |
| | | locMast = getLocByLocRule(agvWaitPakinList.get(0),floor); |
| | | if(!Cools.isEmpty(locMast)){ |
| | | return locMast; |
| | | } |
| | | |
| | | // 靠近摆放规则 --- 相同订单号, 同天同规格物料 |
| | | locMast = getLocByProximityRule(); |
| | | if (locMast != null) { |
| | | //找到库位,返回dto |
| | | //return getLocNoStep6(staDescId, sourceStaNo, locMast);//返回dto |
| | | } |
| | | // |
| | | // // 靠近摆放规则 --- 空托 |
| | | // locMast = getLocNoStep4(staDescId, locTypeDto); |
| | | // if (locMast != null) { |
| | | // //找到库位,返回dto |
| | | // return getLocNoStep6(staDescId, sourceStaNo, locMast);//返回dto |
| | | // //库位规则 |
| | | // locMast = getLocByLocRule(agvWaitPakinList.get(0),floor); // 2. 按库位规则搜索 |
| | | // if(!Cools.isEmpty(locMast)){ |
| | | // return locMast; |
| | | // } |
| | | // |
| | | // // 如果没有相近物料,则按规则轮询货架 |
| | | // |
| | | // //库位编码规则 |
| | | // locMast = getLocByLocCodeRule(agvWaitPakinList.get(0),floor); |
| | | // if(!Cools.isEmpty(locMast)){ |
| | | // return locMast; |
| | | // } |
| | | // |
| | | // // 靠近摆放规则 --- 相同订单号, 同天同规格物料 |
| | | // locMast = getLocByProximityRule(); |
| | | // if (locMast != null) { |
| | | // //找到库位,返回dto |
| | | // //return getLocNoStep6(staDescId, sourceStaNo, locMast);//返回dto |
| | | // } |
| | | // |
| | | // //根据物料频率搜索库位,频率高则搜索离缓存货架最近库位,频率低则搜索最远库位 |
| | | // Mat mat = matService.selectByMatnr(agvWaitPakinList.get(0).getMatnr()); |
| | | // if(Cools.isEmpty(mat.getBeBatch())){ |
| | | // mat.setBeBatch(0); |
| | | // } |
| | | // locMast = getLocByFre(mat.getBeBatch(), floor); |
| | | // if (locMast != null) { |
| | | // return locMast; |
| | | // } |
| | | |
| | | |
| | | // 开始查找库位 ==============================>> |
| | | locMast = getLocNoRule(floor); |
| | | locMast = getLocNoRule(type); |
| | | if (locMast != null) { |
| | | return locMast; |
| | | } |
| | |
| | | } |
| | | |
| | | /* |
| | | 库位规则查找 |
| | | */ |
| | | private AgvLocMast getLocByLocCodeRule(AgvWaitPakin agvWaitPakin, int floor) { |
| | | /*if(Cools.isEmpty(agvWaitPakin.getBrand())){ |
| | | return null; |
| | | } |
| | | |
| | | //库区 |
| | | String other = "agv-" + floor; |
| | | List<LocRule> locRules = locRuleService.findCode(agvWaitPakin.getMatnr(), other); |
| | | if(Cools.isEmpty(locRules)){ |
| | | return null; |
| | | } |
| | | |
| | | for (LocRule agvLocRule : locRules) { |
| | | EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>(); |
| | | wrapper.between("row1",agvLocRule.getRowBeg(),agvLocRule.getRowEnd()) |
| | | .between("bay1",agvLocRule.getBayBeg(),agvLocRule.getBayEnd()) |
| | | .between("lev1",agvLocRule.getLevBeg(),agvLocRule.getLevEnd()) |
| | | .eq("floor",floor) |
| | | .eq("loc_sts","O"); |
| | | AgvLocMast agvLocMast = agvLocMastService.selectOne(wrapper); |
| | | if(!Cools.isEmpty(agvLocMast)){ |
| | | return agvLocMast; |
| | | } |
| | | }*/ |
| | | |
| | | return null; |
| | | } |
| | | |
| | | /* |
| | | 靠近摆放规则 |
| | | */ |
| | | |
| | | private AgvLocMast getLocByProximityRule(){ |
| | | //to do |
| | | return null; |
| | | } |
| | | |
| | | /* |
| | | 根据物料频率查找 |
| | | */ |
| | | private AgvLocMast getLocByFre(int fre, int floor){ |
| | | if(floor == 1){ |
| | | if(fre == 1){ |
| | | return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>() |
| | | .eq("floor",floor) |
| | | .eq("loc_sts","O") |
| | | .orderBy("bay1",false)); |
| | | }else{ |
| | | return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>() |
| | | .eq("floor",floor) |
| | | .eq("loc_sts","O") |
| | | .orderBy("bay1")); |
| | | } |
| | | } |
| | | if(floor == 3){ |
| | | if(fre == 1){ |
| | | return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>() |
| | | .eq("floor",floor) |
| | | .eq("loc_sts","O") |
| | | .orderBy("row1",false)); |
| | | }else{ |
| | | return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>() |
| | | .eq("floor",floor) |
| | | .eq("loc_sts","O") |
| | | .orderBy("row1")); |
| | | } |
| | | } |
| | | |
| | | throw new CoolException("搜索库位时,楼层出错。"); |
| | | } |
| | | |
| | | //随机取一个货位 |
| | | private AgvLocMast getLocNoRule(int floor){ |
| | | private AgvLocMast getLocNoRule(int type){ |
| | | return agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>() |
| | | .eq("floor",floor) |
| | | .eq("loc_sts","O") |
| | | .eq(false,"loc_type2",1)); |
| | | .eq("loc_type1",type)); |
| | | } |
| | | |
| | | |