自动化立体仓库 - WMS系统
#
luxiaotao1123
2023-02-06 c4d9e1eb799a4da88cd4d7ba6053556415f8d8f8
#
3个文件已修改
170 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -9,6 +9,7 @@
import com.zy.asrs.service.RowLastnoService;
import com.zy.asrs.service.WorkService;
import com.zy.asrs.utils.Utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -18,6 +19,7 @@
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service("locMastService")
public class LocMastServiceImpl extends ServiceImpl<LocMastMapper, LocMast> implements LocMastService {
@@ -124,33 +126,46 @@
            rows = locNos.stream().map(item -> Integer.parseInt(item.substring(0, 2))).distinct().collect(Collectors.toList());
        }
//        if (!rows.retainAll(new ArrayList<Integer>() {{ add(1);add(2);add(3);}})
//                || !rows.retainAll(new ArrayList<Integer>() {{ add(8);add(9);add(10);add(11);}})
//                || !rows.retainAll(new ArrayList<Integer>() {{ add(15);add(16);add(17);add(18);}})
//        ) {
//            locNos.sort(Comparator.comparingInt(o -> Integer.parseInt(o.substring(0, 2))));
//        } else if (!rows.retainAll(new ArrayList<Integer>() {{ add(4);add(5);add(6);add(7);}})
//                || !rows.retainAll(new ArrayList<Integer>() {{ add(12);add(13);add(14);}})
//                || !rows.retainAll(new ArrayList<Integer>() {{ add(19);add(20);add(21);}})
//        ) {
//            locNos.sort((o1, o2) -> Integer.parseInt(o2.substring(0, 2)) - Integer.parseInt(o1.substring(0, 2)));
        // plan first
//        for (int i = 0; i<locNos.size(); i++) {
//            LocMast locMast = this.selectById(locNos.get(i));
//            if (locMast.getLocSts().equals("O")) {
//                if (i == 0) {
//                    return locMast;
//                } else {
//                    LocMast lastLoc = this.selectById(locNos.get(i - 1));
//                    if (lastLoc.getLocSts().equals("F") || lastLoc.getLocSts().equals("D")  || lastLoc.getLocSts().equals("X")) {
//                        return locMast;
//                    } else {
//                        break;
//                    }
//                }
//            }
//        }
        for (int i = 0; i<locNos.size(); i++) {
            LocMast locMast = this.selectById(locNos.get(i));
//        return null;
        // plan second
        LocMast finalRes = null;
        for (String locNo : locNos) {
            LocMast locMast = this.selectById(locNo);
            if (locMast.getLocSts().equals("O")) {
                if (i == 0) {
                    return locMast;
                } else {
                    LocMast lastLoc = this.selectById(locNos.get(i - 1));
                    if (lastLoc.getLocSts().equals("F") || lastLoc.getLocSts().equals("D")  || lastLoc.getLocSts().equals("X")) {
                        return locMast;
                    } else {
                        break;
                    }
                if (finalRes == null) {
                    finalRes = locMast;
                }
            } else {
                if (finalRes != null) {
                    log.error("{}库位异常:{}库位状态为O.空库位,但{}库位状态为{}", finalRes.getLocNo(), finalRes.getLocNo(), locMast.getLocNo(), locMast.getLocSts());
                    finalRes = null;
                    break;
                }
                if (locMast.getLocSts().equals("R") || locMast.getLocSts().equals("P")) {
                    finalRes = null;
                    break;
                }
                finalRes = null;
            }
        }
        return null;
        return finalRes;
    }
    @Override
src/main/java/com/zy/common/service/CommonService.java
@@ -210,8 +210,29 @@
            }
        }
        // 如果没有相近物料,则按规则轮询货架
        // 库区锁定
        LocRule locRule = locRuleService.find(Cools.isEmpty(matNos) ? null : matNos.get(0), null, start, end);
        if (!Cools.isEmpty(locRule)) {
            List<LocMast> locMasts = locMastService.queryFreeLocMast2(locTypeDto.getLocType1()
                    , locRule.getRowBeg(), locRule.getRowEnd(), locRule.getBayBeg(), locRule.getBayEnd(), locRule.getLevBeg(), locRule.getLevEnd());
            for (LocMast one : locMasts) {
                List<String> groupLoc = Utils.getGroupLoc(one.getLocNo());
                LocMast locMast0 = locMastService.findOutMost(groupLoc);
                if (null != locMast0) {
                    // 浅库位符合尺寸检测
                    if (VersionUtils.locMoveCheckLocType(locMast0, locTypeDto)) {
                        // 浅库位对应堆垛机必须可用且无异常
                        if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) {
                            crnNo = locMast0.getCrnNo();
                            locMast = locMast0;
                            break;
                        }
                    }
                }
            }
        }
        // 如果没有相近物料,则按规则轮询货架
        int currentRow = 1;
        if (null == locMast) {
            Shelves shelves = new Shelves(rowCount, crn_qty);
@@ -312,64 +333,18 @@
        // 1.当检索库排为浅库位排时,优先寻找当前库排的深库位排
        if (locMast == null) {
            // 库区锁定
            LocRule locRule = locRuleService.find(Cools.isEmpty(matNos) ? null : matNos.get(0), null, start, end);
            if (!Cools.isEmpty(locRule)) {
                // plan first
//                List<Integer> rows = Utils.getGroupLoc(locRule.getRowBeg());
//                List<LocMast> locMasts = locMastService.queryFreeLocMast1(rows, rows.size(), locTypeDto.getLocType1(), inoutEveryday
//                        , locRule.getRowBeg(), locRule.getRowEnd(), locRule.getBayBeg(), locRule.getBayEnd(), locRule.getLevBeg(), locRule.getLevEnd());
//                if (!Cools.isEmpty(locMasts)) {
//                    Integer innermostRow = Utils.getInnermostRow(locMasts.get(0).getLocNo());
//                    for (LocMast one : locMasts) {
//                        if (one.getRow1().equals(innermostRow)) {
//                            locMast = one;
//                            crnNo = locMast.getCrnNo();
//                            wrapper = new EntityWrapper<StaDesc>()
//                                    .eq("type_no", staDescId)
//                                    .eq("stn_no", sourceStaNo)
//                                    .eq("crn_no", crnNo);
//                            staDesc = staDescService.selectOne(wrapper);
//                            if (Cools.isEmpty(staDesc)) {
//                                log.error("入库路径不存在, staDescId={}, sourceStaNo={}, crnNo={}", staDescId, sourceStaNo, crnNo);
//                                throw new CoolException("入库路径不存在");
//                            }
//                            // 检测目标站
//                            staNo = basDevpService.selectById(staDesc.getCrnStn());
//                            if (!staNo.getAutoing().equals("Y")) {
//                                throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用");
//                            }
//                            break;
//                        }
//                    }
//                }
                // plan second
                List<LocMast> locMasts = locMastService.queryFreeLocMast2(locTypeDto.getLocType1()
                        , locRule.getRowBeg(), locRule.getRowEnd(), locRule.getBayBeg(), locRule.getBayEnd(), locRule.getLevBeg(), locRule.getLevEnd());
            List<Integer> rows = Utils.getGroupLoc(curRow);
            List<LocMast> locMasts = locMastService.queryFreeLocMast0(rows, rows.size(), locTypeDto.getLocType1(), inoutEveryday);
            if (!Cools.isEmpty(locMasts)) {
                Integer innermostRow = Utils.getInnermostRow(locMasts.get(0).getLocNo());
                for (LocMast one : locMasts) {
                }
            }
            if (locMast == null) {
                List<Integer> rows = Utils.getGroupLoc(curRow);
                List<LocMast> locMasts = locMastService.queryFreeLocMast0(rows, rows.size(), locTypeDto.getLocType1(), inoutEveryday);
                if (!Cools.isEmpty(locMasts)) {
                    Integer innermostRow = Utils.getInnermostRow(locMasts.get(0).getLocNo());
                    for (LocMast one : locMasts) {
                        if (one.getRow1().equals(innermostRow)) {
                            locMast = one;
                            break;
                        }
                    if (one.getRow1().equals(innermostRow)) {
                        locMast = one;
                        break;
                    }
                }
            }
//            LocMast locMast0 = locMastService.findOutMost(locMasts.stream().map(LocMast::getLocNo).distinct().collect(Collectors.toList()));
//            if (!Cools.isEmpty(locMast0)) {
//                locMast = locMast0;
//            }
            // 因库位移转、需预留空库位 todo:luxiaotao
//            if (!locMastService.checkEmptyCount(locMast)) {
//                locMast = null;
@@ -377,8 +352,6 @@
        }
        // 2.无库位时,无视区域锁定,重新查找库位
        if (Cools.isEmpty(locMast)) {
            int sign = curRow;
            while (sign != 0 && Cools.isEmpty(locMast)) {
@@ -386,9 +359,25 @@
                for (LocMast loc : locMasts) {
                    // 同库位组对应其钱库位是否为 O.空库位
                    boolean success = true;
                    List<String> outerLoc = Utils.getGroupOuterLoc(loc.getLocNo());
                    for (String outerLocNo : outerLoc) {
                        if (!locMastService.selectById(outerLocNo).getLocSts().equals("O")) {
                    // 浅库位
                    List<String> outerLocList = Utils.getGroupOuterLoc(loc.getLocNo());
                    for (String outerLocNo : outerLocList) {
                        LocMast outerLoc = locMastService.selectById(outerLocNo);
                        if (Cools.isEmpty(outerLoc)) {
                            continue;
                        }
                        if (!outerLoc.getLocSts().equals("O")) {
                            success = false; break;
                        }
                    }
                    // 深库位
                    List<String> insideLocList = Utils.getGroupInsideLoc(loc.getLocNo());
                    for (String insideLocNo : insideLocList) {
                        LocMast insideLoc = locMastService.selectById(insideLocNo);
                        if (Cools.isEmpty(insideLoc)) {
                            continue;
                        }
                        if (insideLoc.getLocSts().equals("R") || insideLoc.getLocSts().equals("P")) {
                            success = false; break;
                        }
                    }
src/main/resources/mapper/LocMastMapper.xml
@@ -237,7 +237,7 @@
    <select id="queryFreeLocMast2" resultMap="BaseResultMap">
        select *
        from asr_loc_mast
        where row1=#{row}
        where 1=1
        and loc_sts='O'
        <if test="locType1 != null">
            and loc_type1 = #{locType1}