|  |  |  | 
|---|
|  |  |  | import com.zy.asrs.service.*; | 
|---|
|  |  |  | import com.zy.asrs.task.AbstractHandler; | 
|---|
|  |  |  | import com.zy.asrs.task.core.ReturnT; | 
|---|
|  |  |  | import com.zy.asrs.utils.CodeDetectionUtil; | 
|---|
|  |  |  | import com.zy.asrs.utils.Utils; | 
|---|
|  |  |  | import com.zy.common.model.enums.WorkNoType; | 
|---|
|  |  |  | import com.zy.common.service.CommonService; | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WorkService workService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public ReturnT<String>  start(Integer staNo) { | 
|---|
|  |  |  | public ReturnT<String>  start(Integer staNo,Integer count) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if (!Cools.isEmpty(wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("sta_no", staNo)))){ | 
|---|
|  |  |  | //            if (!Cools.isEmpty(wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("sta_no", staNo)))){ | 
|---|
|  |  |  | //                return null; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | int wrkCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("sta_no", staNo)); | 
|---|
|  |  |  | if (wrkCount>count){ | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取工作号 | 
|---|
|  |  |  | 
|---|
|  |  |  | crns.add(4); | 
|---|
|  |  |  | crns.add(5); | 
|---|
|  |  |  | crns.add(6); | 
|---|
|  |  |  | crns.add(7); | 
|---|
|  |  |  | boolean sign = true; | 
|---|
|  |  |  | for (Integer crnNo : crns){ | 
|---|
|  |  |  | BasCrnp basCrnp = basCrnpService.selectById(crnNo); | 
|---|
|  |  |  | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public ReturnT<String>  startYx(Integer staNo) { | 
|---|
|  |  |  | public ReturnT<String>  startYx(Integer staNo,Integer count) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | //            if (!Cools.isEmpty(wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("sta_no", staNo)))){ | 
|---|
|  |  |  | //                return null; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | int wrkCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("sta_no", staNo)); | 
|---|
|  |  |  | if (wrkCount>10){ | 
|---|
|  |  |  | if (wrkCount>count){ | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ArrayList<Integer> crns =new ArrayList<>(); | 
|---|
|  |  |  | ArrayList<Integer> crnList =new ArrayList<>(); | 
|---|
|  |  |  | int[] crnCount = new int[7]; | 
|---|
|  |  |  | crns.add(1); | 
|---|
|  |  |  | crns.add(2); | 
|---|
|  |  |  | crns.add(3); | 
|---|
|  |  |  | crns.add(4); | 
|---|
|  |  |  | crns.add(5); | 
|---|
|  |  |  | crns.add(6); | 
|---|
|  |  |  | crns.add(7); | 
|---|
|  |  |  | boolean sign = true; | 
|---|
|  |  |  | for (Integer crnNo : crns){ | 
|---|
|  |  |  | List<String> locNoList = new ArrayList<>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int crnCountD = locMastService.selectCount(new EntityWrapper<LocMast>().eq("loc_sts", "D").eq("crn_no", crnNo)); | 
|---|
|  |  |  | crnCount[crnNo-1] = crnCountD; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | crnList.add(CodeDetectionUtil.crnCodeDetectionMax(new int[]{crnCount[0],crnCount[1]})[0]+1); | 
|---|
|  |  |  | crnList.add(CodeDetectionUtil.crnCodeDetectionMax(new int[]{crnCount[2],crnCount[3],crnCount[4]})[0]+3); | 
|---|
|  |  |  | crnList.add(CodeDetectionUtil.crnCodeDetectionMaxT(new int[]{crnCount[2],crnCount[3],crnCount[4]},crnList.get(1)-3)[0]+3); | 
|---|
|  |  |  | crnList.add(CodeDetectionUtil.crnCodeDetectionMax(new int[]{crnCount[5],crnCount[6]})[0]+6); | 
|---|
|  |  |  | crnList.add(1); | 
|---|
|  |  |  | crnList.add(2); | 
|---|
|  |  |  | crnList.add(3); | 
|---|
|  |  |  | crnList.add(4); | 
|---|
|  |  |  | crnList.add(5); | 
|---|
|  |  |  | crnList.add(6); | 
|---|
|  |  |  | crnList.add(7); | 
|---|
|  |  |  | for (Integer crnNo : crnList){ | 
|---|
|  |  |  | // 检测路径 | 
|---|
|  |  |  | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() | 
|---|
|  |  |  | .eq("type_no", 110) | 
|---|
|  |  |  | .eq("stn_no", staNo) | 
|---|
|  |  |  | .eq("crn_no", crnNo); | 
|---|
|  |  |  | StaDesc staDesc = staDescService.selectOne(wrapper); | 
|---|
|  |  |  | if (Cools.isEmpty(staDesc)){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | BasCrnp basCrnp = basCrnpService.selectById(crnNo); | 
|---|
|  |  |  | if (basCrnp.getCrnSts()!=3 || !basCrnp.getOutEnable().equals("Y")){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | sign = true; | 
|---|
|  |  |  | if (!basCrnpService.checkSiteError(crnNo, false)){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 获取库位 | 
|---|
|  |  |  | LocMast locMastS = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts","D").eq("crn_no",crnNo)); | 
|---|
|  |  |  | List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").eq("crn_no", crnNo).orderBy("lev1",true).orderBy("bay1",true)); | 
|---|
|  |  |  | for (LocMast locMastS : locMasts){ | 
|---|
|  |  |  | List<String> locNoList = new ArrayList<>(); | 
|---|
|  |  |  | sign = true; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Cools.isEmpty(locMastS)) { | 
|---|
|  |  |  | if (Cools.isEmpty(locMastS)) { | 
|---|
|  |  |  | //                    throw new CoolException("库中无空板!!!"); | 
|---|
|  |  |  | log.error(crnNo+"号堆垛机无空板!"); | 
|---|
|  |  |  | sign=false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign && !locMastS.getLocSts().equals("D")){ | 
|---|
|  |  |  | log.error(crnNo+"号堆垛机无空板!"); | 
|---|
|  |  |  | sign=false; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign && !locMastS.getLocSts().equals("D")){ | 
|---|
|  |  |  | //                    throw new CoolException("所选库位存在状态不为D的库位,库位号:"+locMast.getLocNo()+" 、当前状态:"+locMast.getLocSts()+"-"+locMast.getLocSts$()); | 
|---|
|  |  |  | log.error(crnNo+"号堆垛机"+"所选库位存在状态不为D的库位,库位号:"+locMastS.getLocNo()+" 、当前状态:"+locMastS.getLocSts()+"-"+locMastS.getLocSts$()); | 
|---|
|  |  |  | sign=false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | locNoList.add(locMastS.getLocNo()); | 
|---|
|  |  |  | log.error(crnNo+"号堆垛机"+"所选库位存在状态不为D的库位,库位号:"+locMastS.getLocNo()+" 、当前状态:"+locMastS.getLocSts()+"-"+locMastS.getLocSts$()); | 
|---|
|  |  |  | sign=false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | locNoList.add(locMastS.getLocNo()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //小料箱伴生出库 | 
|---|
|  |  |  | if (Utils.getRow(locMastS.getLocNo())<=8){ | 
|---|
|  |  |  | String locNoOther = staNoOther(locMastS.getLocNo()); | 
|---|
|  |  |  | LocMast locMastOther = locMastService.selectById(locNoOther); | 
|---|
|  |  |  | if (locMastOther.getLocSts().equals("D")){ | 
|---|
|  |  |  | locNoList.add(locNoOther); | 
|---|
|  |  |  | //小料箱伴生出库 | 
|---|
|  |  |  | if (sign && Utils.getRow(locMastS.getLocNo())<=8){ | 
|---|
|  |  |  | String locNoOther = staNoOther(locMastS.getLocNo()); | 
|---|
|  |  |  | LocMast locMastOther = locMastService.selectById(locNoOther); | 
|---|
|  |  |  | if (locMastOther.getLocSts().equals("D") || locMastOther.getLocSts().equals("F") ||  locMastOther.getLocSts().equals("R")){ | 
|---|
|  |  |  | if (locMastOther.getLocSts().equals("D")){ | 
|---|
|  |  |  | locNoList.add(locNoOther); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | sign=false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else if (sign && Utils.getRow(locMastS.getLocNo())>=21 && Utils.getRow(locMastS.getLocNo())<=27){ | 
|---|
|  |  |  | String locNoOther = staNoOther(locMastS.getLocNo()); | 
|---|
|  |  |  | LocMast locMastOther = locMastService.selectById(locNoOther); | 
|---|
|  |  |  | if (locMastOther.getLocSts().equals("D") || locMastOther.getLocSts().equals("F") ||  locMastOther.getLocSts().equals("R")){ | 
|---|
|  |  |  | if (locMastOther.getLocSts().equals("D")){ | 
|---|
|  |  |  | locNoList.add(locNoOther); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | sign=false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (sign) { | 
|---|
|  |  |  | EmptyPlateOutParam param = new EmptyPlateOutParam(); | 
|---|
|  |  |  | param.setOutSite(172); | 
|---|
|  |  |  | param.setLocNos(locNoList); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | workService.emptyPlateOut(param, 9999L); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("二楼小料箱自动补空板失败!!异常原因:"+e); | 
|---|
|  |  |  | ArrayList<String> locArrayList = new ArrayList<>(); | 
|---|
|  |  |  | for (String locNo : locNoList){ | 
|---|
|  |  |  | if (!locArrayList.contains(locNo)){ | 
|---|
|  |  |  | locArrayList.add(locNo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | if (sign) { | 
|---|
|  |  |  | EmptyPlateOutParam param = new EmptyPlateOutParam(); | 
|---|
|  |  |  | param.setOutSite(staNo); | 
|---|
|  |  |  | param.setLocNos(locArrayList); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | workService.emptyPlateOut(param, 9999L); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error(staNo+"自动补空板失败!!异常原因:"+e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!sign){ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String staNoOther(String locNo){ | 
|---|
|  |  |  | int row = Utils.getRow(locNo); | 
|---|
|  |  |  | if (row%4==0 || row%4==1){ | 
|---|
|  |  |  | return getDeepLoc2(locNo,row); | 
|---|
|  |  |  | if (row<=8){ | 
|---|
|  |  |  | if (row%4==0 || row%4==1){ | 
|---|
|  |  |  | return getDeepLoc2(locNo,row); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | return getDeepLoc(locNo,row); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else if (row>=21 && row<=27){ | 
|---|
|  |  |  | if (row==21 || row==24 || row==27){ | 
|---|
|  |  |  | return getDeepLoc2(locNo,row); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | return locNo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | return getDeepLoc(locNo,row); | 
|---|
|  |  |  | return locNo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | * 获取 深库位对应的浅库位号 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static String getDeepLoc2(String shallowLoc,int row) { | 
|---|
|  |  |  | if (row == 1 || row == 5) { | 
|---|
|  |  |  | if (row == 1 || row == 5 || row==21) { | 
|---|
|  |  |  | return Utils.zerofill(String.valueOf(row+1), 2) + shallowLoc.substring(2); | 
|---|
|  |  |  | } else if (row == 4 || row == 8) { | 
|---|
|  |  |  | } else if (row == 4 || row == 8 || row == 24 || row == 27) { | 
|---|
|  |  |  | return Utils.zerofill(String.valueOf(row-1), 2) + shallowLoc.substring(2); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | return null; | 
|---|