自动化立体仓库 - WMS系统
pang.jiabao
5 天以前 d18505cc87fa30a5b202057bbcc4236986efc80a
src/main/java/com/zy/common/service/CommonService.java
@@ -7,6 +7,7 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.result.FindLocNoAttributeVo;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.asrs.utils.VersionUtils;
@@ -18,7 +19,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
/**
 * 货架核心功能
@@ -445,7 +448,7 @@
        // 生成工作号
        int workNo = getWorkNo(0);
        // 返回dto
        startupDto.setWorkNo(workNo);
        startupDto.setTaskNo(workNo);
        startupDto.setCrnNo(crnNo);
        startupDto.setSourceStaNo(sourceStaNo);
        startupDto.setLocNo(locNo);
@@ -890,7 +893,7 @@
        // 生成工作号
        int workNo = getWorkNo(0);
        // 返回dto
        startupDto.setWorkNo(workNo);
        startupDto.setTaskNo(workNo);
        startupDto.setCrnNo(crnNo);
        startupDto.setSourceStaNo(sourceStaNo);
        startupDto.setLocNo(locNo);
@@ -1003,7 +1006,7 @@
        // 生成工作号
        int workNo = getWorkNo(0);
        // 返回dto
        startupDto.setWorkNo(workNo);
        startupDto.setTaskNo(workNo);
        startupDto.setCrnNo(crnNo);
        startupDto.setSourceStaNo(sourceStaNo);
        startupDto.setLocNo(locNo);
@@ -1024,4 +1027,66 @@
        }
    }
    @Resource
    private LocMastMapper locMastMapper;
    public StartupDto getLocNoNew(int ioType, Integer sourceStaNo, Integer locType, List<Integer> rows) {
        // 寻找到的库位
        LocMast locMast = null;
        // 按库位类型获取库位
        List<LocMast> locMasts = locMastMapper.selectLocByTypeAndRowsToList(locType,rows);
        // todo 如果当前类型库位剩余不多,是一直放满,还是兼容到下一种库位类型
        // 考虑移库需要同类型库位,这里限制不能放满,兼容下一种库位类型
        if (locMasts.size() <= 4) {
            switch (locType) {
                case 0:
                    return getLocNoNew(ioType, sourceStaNo, 1,rows);
                case 1:
                    return getLocNoNew(ioType, sourceStaNo, 2,rows);
                case 2:
                    return getLocNoNew(ioType, sourceStaNo, 3,rows);
                case 3:
                    log.warn("当前库位排:{},剩余{}个用于移库,无法占用",rows,locMasts.size());
                    return null;
                default:
            }
        }
        // 先取深库位
        Optional<LocMast> first = locMasts.stream().filter(o -> o.getRow1() == 1 || o.getRow1() == 4 || o.getRow1() == 5 || o.getRow1() == 8|| o.getRow1() == 9 || o.getRow1() == 12).findFirst();
        if (first.isPresent()) {
            locMast = first.get();
        } else {
            // 深库位里面没有从浅库位里面取
            Optional<LocMast> first2 = locMasts.stream().filter(o -> o.getRow1() == 2 || o.getRow1() == 3 || o.getRow1() == 6 || o.getRow1() == 7 || o.getRow1() == 10 || o.getRow1() == 11).findFirst();
            if(first2.isPresent()) {
                locMast = first2.get();
            }
        }
        if (locMast == null) {
            return null;
        }
        // 根据入库类型和源站点获取工作路径
//        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("type_no", ioType).eq("stn_no", sourceStaNo).eq("crn_no",locMast.getCrnNo()));
//        if (staDesc == null) {
//            log.error("获取工作路径异常,类型:{},源站点:{},库位:{}",ioType,sourceStaNo,locMast.getLocNo());
//            return null;
//        }
        // 生成工作号
        int workNo = getWorkNo(0);
        // 返回dto
        StartupDto startupDto = new StartupDto();
        startupDto.setTaskNo(workNo);
        startupDto.setCrnNo(locMast.getCrnNo());
        startupDto.setSourceStaNo(sourceStaNo);
        startupDto.setStaNo(0);
        startupDto.setLocNo(locMast.getLocNo());
        startupDto.setTaskPri(13D);
        return startupDto;
    }
}