|  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.JSON; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.mapper.Wrapper; | 
|---|
|  |  |  | import com.core.common.Arith; | 
|---|
|  |  |  | import com.core.common.Cools; | 
|---|
|  |  |  | import com.core.exception.CoolException; | 
|---|
|  |  |  | import com.zy.asrs.entity.*; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 生成工作号 | 
|---|
|  |  |  | * @param wrkMk 0:入库 1 - 3000 ; 1:拣料/并板/盘点 3001 - 6000 ; 2: 出库 6001 -9000 ; 3:其他 9001 -9999 | 
|---|
|  |  |  | * @param wrkMk | 
|---|
|  |  |  | * @return workNo(工作号) | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public int getWorkNo(Integer wrkMk) { | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, int times) { | 
|---|
|  |  |  | whsType = getWhsType(sourceStaNo, times); | 
|---|
|  |  |  | //        whsType = getWhsType(sourceStaNo, times); | 
|---|
|  |  |  | switch (sourceStaNo){ | 
|---|
|  |  |  | case 101: | 
|---|
|  |  |  | case 109: | 
|---|
|  |  |  | case 117: | 
|---|
|  |  |  | whsType=1;  //1-8货架 | 
|---|
|  |  |  | slaveProperties.setDoubleDeep(false); | 
|---|
|  |  |  | slaveProperties.setGroupCount(2); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 201: | 
|---|
|  |  |  | slaveProperties.setDoubleDeep(true); | 
|---|
|  |  |  | slaveProperties.setGroupCount(4); | 
|---|
|  |  |  | whsType=2;  //9-12货架 | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 207: | 
|---|
|  |  |  | whsType=3;  //13-14货架 | 
|---|
|  |  |  | slaveProperties.setDoubleDeep(false); | 
|---|
|  |  |  | slaveProperties.setGroupCount(2); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 213: | 
|---|
|  |  |  | slaveProperties.setDoubleDeep(true); | 
|---|
|  |  |  | slaveProperties.setGroupCount(4); | 
|---|
|  |  |  | whsType=4;  //15-18货架 | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | throw new CoolException("根据入库站获取库位排号分配失败,入库站:" + sourceStaNo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | StartupDto startupDto = new StartupDto(); | 
|---|
|  |  |  | // 生成工作号 | 
|---|
|  |  |  | int workNo = getWorkNo(0); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | RowLastno rowLastno = rowLastnoService.selectById(whsType); | 
|---|
|  |  |  | if (Cools.isEmpty(rowLastno)) { | 
|---|
|  |  |  | throw new CoolException("数据异常,请联系管理员"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 如果没有相近物料,则按规则轮询货架 | 
|---|
|  |  |  | if (null == locMast) { | 
|---|
|  |  |  | Shelves shelves = new Shelves(rowCount, crn_qty); | 
|---|
|  |  |  | if (whsType == 1) { | 
|---|
|  |  |  | for (int i = 0; i < shelves.group; i ++) { | 
|---|
|  |  |  | curRow = shelves.start(curRow); | 
|---|
|  |  |  | if (curRow < 0) { | 
|---|
|  |  |  | throw new CoolException("检索库位失败,请联系管理员"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Integer crnNo1 = shelves.get(curRow); | 
|---|
|  |  |  | if (basCrnpService.checkSiteError(crnNo1, true)) { | 
|---|
|  |  |  | crnNo = crnNo1; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (null == locMast){ | 
|---|
|  |  |  | curRow = getCurRow(curRow); | 
|---|
|  |  |  | if (curRow == 0){ | 
|---|
|  |  |  | crnNo = 0; | 
|---|
|  |  |  | }else if( curRow <= 8 && curRow > 0){ | 
|---|
|  |  |  | crnNo=(curRow+1)/2; | 
|---|
|  |  |  | }else if (curRow <= 12 && curRow >= 9){ | 
|---|
|  |  |  | crnNo=5; | 
|---|
|  |  |  | }else if (curRow <= 14 && curRow >= 13){ | 
|---|
|  |  |  | crnNo=6; | 
|---|
|  |  |  | }else if (curRow <= 18 && curRow >= 15){ | 
|---|
|  |  |  | crnNo=7; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (curRow!=0 && !basCrnpService.checkSiteError(crnNo, true)) { | 
|---|
|  |  |  | crnNo = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        // 如果没有相近物料,则按规则轮询货架 | 
|---|
|  |  |  | //        if (null == locMast) { | 
|---|
|  |  |  | //            Shelves shelves = new Shelves(rowCount, crn_qty); | 
|---|
|  |  |  | //            int divides = (int) Arith.divides(1, curRow - 1, 4); | 
|---|
|  |  |  | //            curRow = (int) Arith.remainder(curRow, 4); | 
|---|
|  |  |  | //            if (curRow == 0) { | 
|---|
|  |  |  | //                curRow = 4; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            for (int i = 0; i < shelves.group; i ++) { | 
|---|
|  |  |  | //                curRow = shelves.start(curRow); | 
|---|
|  |  |  | //                if (curRow < 0) { | 
|---|
|  |  |  | //                    throw new CoolException("检索库位失败,请联系管理员"); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                Integer crnNo1 = shelves.get(curRow); | 
|---|
|  |  |  | //                crnNo1 = crnNo1 + divides*1; | 
|---|
|  |  |  | //                if (basCrnpService.checkSiteError(crnNo1, true)) { | 
|---|
|  |  |  | //                    crnNo = crnNo1; | 
|---|
|  |  |  | //                    curRow = curRow + divides*4; | 
|---|
|  |  |  | //                    break; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (crnNo == 0) { | 
|---|
|  |  |  | throw new CoolException("没有可用的堆垛机"); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!staNo.getAutoing().equals("Y")) { | 
|---|
|  |  |  | throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 更新库位排号 | 
|---|
|  |  |  | rowLastno.setCurrentRow(curRow); | 
|---|
|  |  |  | rowLastnoService.updateById(rowLastno); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String locNo = locMast.getLocNo(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 生成工作号 | 
|---|
|  |  |  | int workNo = getWorkNo(0); | 
|---|
|  |  |  | // 返回dto | 
|---|
|  |  |  | startupDto.setWorkNo(workNo); | 
|---|
|  |  |  | startupDto.setCrnNo(crnNo); | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 根据入库站获取库位排号分配 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private Integer getWhsType(Integer sourceStaNo, int times) { | 
|---|
|  |  |  | if (times >= 16) { | 
|---|
|  |  |  | return 4; | 
|---|
|  |  |  | private Integer getCurRow(Integer curRow) { | 
|---|
|  |  |  | boolean sign=false; | 
|---|
|  |  |  | int count=0; | 
|---|
|  |  |  | while (!sign){ | 
|---|
|  |  |  | count=count+1; | 
|---|
|  |  |  | if (count==5){ | 
|---|
|  |  |  | return 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | switch (curRow){ | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | case 3: | 
|---|
|  |  |  | case 5: | 
|---|
|  |  |  | case 2: | 
|---|
|  |  |  | case 4: | 
|---|
|  |  |  | case 6: | 
|---|
|  |  |  | curRow=curRow+2; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 7: | 
|---|
|  |  |  | curRow=2; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 8: | 
|---|
|  |  |  | curRow=1; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 13: | 
|---|
|  |  |  | return 14; | 
|---|
|  |  |  | case 14: | 
|---|
|  |  |  | return 13; | 
|---|
|  |  |  | case 9: | 
|---|
|  |  |  | return 12; | 
|---|
|  |  |  | case 10: | 
|---|
|  |  |  | return 11; | 
|---|
|  |  |  | case 11: | 
|---|
|  |  |  | return 9; | 
|---|
|  |  |  | case 12: | 
|---|
|  |  |  | return 10; | 
|---|
|  |  |  | case 15: | 
|---|
|  |  |  | return 18; | 
|---|
|  |  |  | case 16: | 
|---|
|  |  |  | return 17; | 
|---|
|  |  |  | case 17: | 
|---|
|  |  |  | return 15; | 
|---|
|  |  |  | case 18: | 
|---|
|  |  |  | return 16; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | throw new CoolException("库位排号异常:排号:"+curRow); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | sign = basCrnpService.checkSiteError((curRow+1)/2, true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | switch (sourceStaNo) { | 
|---|
|  |  |  | case 173: | 
|---|
|  |  |  | case 176: | 
|---|
|  |  |  | case 180: | 
|---|
|  |  |  | case 185: | 
|---|
|  |  |  | return 1; | 
|---|
|  |  |  | case 189: | 
|---|
|  |  |  | case 194: | 
|---|
|  |  |  | case 198: | 
|---|
|  |  |  | case 202: | 
|---|
|  |  |  | return 2; | 
|---|
|  |  |  | case 206: | 
|---|
|  |  |  | //            case 211: | 
|---|
|  |  |  | //            case 215: | 
|---|
|  |  |  | //            case 219: | 
|---|
|  |  |  | //            case 223: | 
|---|
|  |  |  | case 227: | 
|---|
|  |  |  | return 3; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | throw new CoolException("根据入库站获取库位排号分配失败,入库站:" + sourceStaNo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return curRow; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|