自动化立体仓库 - WMS系统
#
zjj
2025-03-24 be14e23722db5053f2ac9048629d72abd05dea08
src/main/java/com/zy/common/service/CommonService.java
@@ -19,6 +19,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
@@ -50,6 +51,7 @@
    /**
     * 生成工作号
     *
     * @param wrkMk
     * @return workNo(工作号)
     */
@@ -62,17 +64,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);
        }
@@ -80,7 +82,7 @@
        if (workNo == 0) {
            throw new CoolException("生成工作号失败,请联系管理员");
        } else {
            if (wrkMastService.selectById(workNo)!=null) {
            if (wrkMastService.selectById(workNo) != null) {
                throw new CoolException("生成工作号" + workNo + "在工作档中已存在");
            }
        }
@@ -89,10 +91,10 @@
    /**
     * 检索库位号
     * @param whsType 类型 1:双深式货架
     * @param staDescId 路径工作类型
     *
     * @param whsType     类型 1:双深式货架
     * @param staDescId   路径工作类型
     * @param sourceStaNo 源站
     * @return locNo 检索到的库位号
     */
    @Transactional
@@ -115,14 +117,14 @@
//        }
        // 靠近摆放规则 --- 相同订单号, 同天同规格物料
        locMast = getLocNoStep3(staDescId, matnr, batch, grade, locTypeDto,sourceStaNo);
        locMast = getLocNoStep3(staDescId, matnr, batch, grade, locTypeDto, sourceStaNo);
        if (locMast != null) {
            //找到库位,返回dto
            return getLocNoStep6(staDescId, sourceStaNo, locMast);//返回dto
        }
        //搜索整个空库位组
        locMast = getLocNoStepSingle(locTypeDto,sourceStaNo);
        locMast = getLocNoStepSingle(locTypeDto, sourceStaNo);
        if (locMast != null) {
            //找到库位,返回dto
            return getLocNoStep6(staDescId, sourceStaNo, locMast);//返回dto
@@ -134,43 +136,65 @@
    }
    // 搜索单品(整个库位组)
    private LocMast getLocNoStepSingle(LocTypeDto locTypeDto,Integer sourceStaNo) {
    private LocMast getLocNoStepSingle(LocTypeDto locTypeDto, Integer sourceStaNo) {
        LocMast locMast = null;
        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("type_no", 1).eq("stn_no", sourceStaNo));
        List<StaDesc> staDescs = staDescService.selectList(new EntityWrapper<StaDesc>().eq("type_no", 1).eq("stn_no", sourceStaNo));
        int num = 0;
        int crn_no = 1;
        for (StaDesc staDesc : staDescs) {
            List<LocMast> locMasts = locMastService.selectAreaEmpty(locTypeDto.getLocType1(), staDesc.getCrnNo());//搜索货物
            int temp = locMast == null ? 0 : locMasts.size();
            if (num <= temp) {
                num = temp;
                crn_no = staDesc.getCrnNo();
            }
        }
        //for (StaDesc staDesc : staDescs) {
        //单品
        List<LocMast> locMasts = locMastService.selectAreaEmpty(locTypeDto.getLocType1(),staDesc.getCrnNo());//搜索货物
        List<LocMast> locMasts = locMastService.selectAreaEmpty(locTypeDto.getLocType1(), crn_no);//搜索货物
        for (LocMast mast : locMasts) {
            LocMast tmp = null;
            boolean groupLoc = Utils.isShallowLoc(slaveProperties,mast.getLocNo());
            boolean groupLoc = Utils.isShallowLoc(slaveProperties, mast.getLocNo());
            if (groupLoc) {
                String shallowLoc = Utils.getDeepLoc(slaveProperties, mast.getLocNo());
                LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
                        .eq("loc_no", shallowLoc).eq("loc_sts", "O"));
                        .eq("loc_no", shallowLoc));
                if (!Cools.isEmpty(locMast2)) {
                    tmp = locMast2;
                }else {
                    tmp = mast;
                    if (locMast2.getLocSts().equals("F") || locMast2.getLocSts().equals("D")) {
                        tmp = mast;
                        if (!Cools.isEmpty(mast)) {
                            if (mast.getLocSts().equals("O")) {
                                tmp = mast;
                            }
                        }
                    }
                    //预留空库位
                    if (tmp != null && locMastService.checkEmptyCount(mast, 10)) {
                        locMast = tmp;
                        return locMast;
                    }
                }
            }else {
                if (!Cools.isEmpty(mast)) {
                    tmp = mast;
            } else {
                tmp = mast;
                //预留空库位
                if (tmp != null && locMastService.checkEmptyCount(mast, 10)) {
                    locMast = tmp;
                    return locMast;
                }
            }
            //预留空库位
            if (tmp != null && locMastService.checkEmptyCount(mast, 10)) {
                locMast = tmp;
                break;
            }
            // }
        }
        return locMast;
    }
    // 靠近摆放规则 --- 相同订单号, 同天同规格物料
    private LocMast getLocNoStep3(Integer staDescId, String matnr, String batch, String grade, LocTypeDto locTypeDto,Integer sourceStaNo) {
    private LocMast getLocNoStep3(Integer staDescId, String matnr, String batch, String grade, LocTypeDto
            locTypeDto, Integer sourceStaNo) {
        LocMast locMast = null;
        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("type_no", 1).eq("stn_no", sourceStaNo));
        if (staDescId == 1) {
@@ -179,7 +203,7 @@
            for (WrkMast wrkMast : wrkMasts) {
                LocMast locMast0 = locMastService.findNearloc(wrkMast.getLocNo());
                if (null != locMast0) {
                    if (!staDesc.getCrnNo().equals(locMast0.getCrnNo())){
                    if (!staDesc.getCrnNo().equals(locMast0.getCrnNo())) {
                        continue;
                    }
                    // 浅库位符合尺寸检测
@@ -194,7 +218,7 @@
                for (String locNo : locNos) {
                    LocMast locMast0 = locMastService.findNearloc(locNo);
                    if (null != locMast0) {
                        if (!staDesc.getCrnNo().equals(locMast0.getCrnNo())){
                        if (!staDesc.getCrnNo().equals(locMast0.getCrnNo())) {
                            continue;
                        }
                        // 浅库位符合尺寸检测
@@ -218,7 +242,7 @@
        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                .eq("type_no", staDescId)
                .eq("stn_no", sourceStaNo)
                .eq("crn_no",locMast.getCrnNo());
                .eq("crn_no", locMast.getCrnNo());
        StaDesc staDesc = staDescService.selectOne(wrapper);
        if (Cools.isEmpty(staDesc)) {
            log.error("入库路径不存在, staDescId={}, sourceStaNo={}", staDescId, sourceStaNo);
@@ -259,7 +283,7 @@
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("loc_sts", "O")
                    .eq("crn_no", staDesc.getCrnNo())
                    .eq("loc_type1",locTypeDto.getLocType1())
                    .eq("loc_type1", locTypeDto.getLocType1())
                    .orderBy("lev1,bay1,row1"));
            if (!locMasts.isEmpty()) {
                for (LocMast loc : locMasts) {
@@ -287,7 +311,7 @@
            return msg.substring(0, 16);
        } else {
            StringBuilder msgBuilder = new StringBuilder(msg);
            for(int i = 0; i < count - msg.length(); ++i) {
            for (int i = 0; i < count - msg.length(); ++i) {
                msgBuilder.insert(0, "0");
            }
            return msgBuilder.toString();