自动化立体仓库 - WMS系统
#
LSH
2023-02-13 6ee5f8a9a8cbec6bfe559debfc08ad4b8035add5
src/main/java/com/zy/common/service/CommonService.java
@@ -52,6 +52,7 @@
    /**
     * 生成工作号
     *
     * @param wrkMk 0:入库 1 - 3000 ; 1:拣料/并板/盘点 3001 - 6000 ; 2: 出库 6001 -9000 ; 3:其他 9001 -9999
     * @return workNo(工作号)
     */
@@ -64,17 +65,17 @@
        int workNo = wrkLastno.getWrkNo();
        int sNo = wrkLastno.getSNo();
        int eNo = wrkLastno.getENo();
        workNo = workNo>=eNo ? sNo : workNo+1;
        workNo = workNo >= eNo ? sNo : workNo + 1;
        while (true) {
            WrkMast wrkMast = wrkMastService.selectById(workNo);
            if (null != wrkMast) {
                workNo = workNo>=eNo ? sNo : workNo+1;
                workNo = workNo >= eNo ? sNo : workNo + 1;
            } else {
                break;
            }
        }
        // 修改序号记录
        if (workNo > 0){
        if (workNo > 0) {
            wrkLastno.setWrkNo(workNo);
            wrkLastnoService.updateById(wrkLastno);
        }
@@ -82,7 +83,7 @@
        if (workNo == 0) {
            throw new CoolException("生成工作号失败,请联系管理员");
        } else {
            if (wrkMastService.selectById(workNo)!=null) {
            if (wrkMastService.selectById(workNo) != null) {
                throw new CoolException("生成工作号" + workNo + "在工作档中已存在");
            }
        }
@@ -91,18 +92,22 @@
    /**
     * 检索库位号
     * @param whsType 类型 1:双深式货架
     * @param staDescId 路径工作类型
     *
     * @param whsType     类型 1:双深式货架
     * @param staDescId   路径工作类型
     * @param sourceStaNo 源站
     * @param matNos 商品编号集合
     * @param matNos      商品编号集合
     * @return locNo 检索到的库位号
     */
    @Transactional
    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, int times) {
        if (sourceStaNo.equals(100)){
            whsType=1;
        }else if (sourceStaNo.equals(200)){
            whsType=2;
        if (sourceStaNo.equals(100)) {
            whsType = 1;
            locTypeDto.setLocType1((short) 1);
        } else if (sourceStaNo.equals(200)) {
            whsType = 2;
            locTypeDto.setLocType1((short) 2);
        }
        StartupDto startupDto = new StartupDto();
@@ -122,12 +127,12 @@
        // 目标库位
        LocMast locMast = null;
        if (curRow==3){
            curRow=4;
        }else if (curRow==4){
            curRow=3;
        }else {
            rowCount=0;
        if (curRow == 3) {
            curRow = 4;
        } else if (curRow == 4) {
            curRow = 3;
        } else {
            rowCount = 0;
        }
        if (crnNo == 0) {
@@ -145,26 +150,24 @@
        }
        BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
        if (!staNo.getAutoing().equals("Y")) {
            throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用");
            throw new CoolException("目标站" + staDesc.getCrnStn() + "不可用");
        }
        // 更新库位排号
        rowLastno.setCurrentRow(curRow);
        rowLastnoService.updateById(rowLastno);
        // 开始查找库位 ==============================>>
        if (Cools.isEmpty(locMast)) {
            Integer ruleId = Integer.parseInt(Parameter.get().getFindLocRule());
            if (whsType!=1){
                locMast = locMastService.queryFreeLocMast(curRow, locTypeDto.getLocType1());
            } else if (ruleId == 1){  //按测试设备排序,优先排满单台设备
                locMast = locMastService.queryFreeLocMast1(curRow, locTypeDto.getLocType1() ,channelMax+1);
            } else if (ruleId == 2){  //按通道排序,均匀分配每台设备
                Short locType2 = getLocType2Small(curRow, locTypeDto.getLocType1());
                locMast = locMastService.queryFreeLocMast2(curRow, locTypeDto.getLocType1() ,locType2);
            } else { //默认规则
                locMast = locMastService.queryFreeLocMast2(curRow, locTypeDto.getLocType1(),(short)0);
            }
        // 开始查找库位 ==============================>
        int ruleId = Integer.parseInt(Parameter.get().getFindLocRule());
        if (whsType != 1) {
            locMast = locMastService.queryFreeLocMast(curRow, locTypeDto.getLocType1());
        } else if (ruleId == 1) {  //按测试设备排序,优先排满单台设备
            locMast = locMastService.queryFreeLocMast1(curRow, locTypeDto.getLocType1(), channelMax + 1);
        } else if (ruleId == 2) {  //按通道排序,均匀分配每台设备
            Short locType2 = getLocType2Small(curRow, locTypeDto.getLocType1());
            locMast = locMastService.queryFreeLocMast2(curRow, locTypeDto.getLocType1(), locType2);
        } else { //默认规则
            locMast = locMastService.queryFreeLocMast(curRow, locTypeDto.getLocType1());
        }
        // 2.库位当前所属尺寸无空库位时,调整尺寸参数,向上兼容检索库位
@@ -174,7 +177,6 @@
                times = times + 1;
                return getLocNo(1, staDescId, sourceStaNo, matNos, locTypeDto, times);
            }
            log.error("系统没有空库位!!! 尺寸规格: {}, 轮询次数:{}", JSON.toJSONString(locTypeDto), times);
            throw new CoolException("没有空库位");
        }
@@ -191,17 +193,16 @@
        return startupDto;
    }
    public Short getLocType2Small(Integer curRow,short locType1){
        Integer OCount = locMastService.queryFreeLocMastCount(curRow, locType1, (short)1);
        Short locType2=1;
        for (int i=2;i<equipmentCount+1;i++){
            Integer integer =locMastService.queryFreeLocMastCount(curRow, locType1, (short)i);
            if (OCount<integer){
                OCount=integer;
                locType2=(short)i;
    public Short getLocType2Small(Integer curRow, short locType1) {
        Integer OCount = locMastService.queryFreeLocMastCount(curRow, locType1, (short) 1);
        short locType2 = 1;
        for (int i = 2; i < equipmentCount + 1; i++) {
            Integer integer = locMastService.queryFreeLocMastCount(curRow, locType1, (short) i);
            if (OCount < integer) {
                OCount = integer;
                locType2 = (short) i;
            }
        }
        return locType2;
    }