自动化立体仓库 - WMS系统
#
whycq
2024-06-05 5e1164518df7f1d3fe1870f9c29b073e33048e4a
#
7个文件已修改
107 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoMoveScheduler.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/AgvCommonService.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/home/map2.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
@@ -423,7 +423,7 @@
            throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
        }
        //检索库位,选择合适的库位
        AgvLocMast locMast = agvCommonService.getLocNo(agvLocMast.getLocType1(),floor);
        AgvLocMast locMast = agvCommonService.getLocNo(agvLocMast.getLocType1(),floor,false,true);
        if (Cools.isEmpty(locMast)) {
            throw new CoolException("当前楼层没有空库位");
        }
@@ -556,7 +556,7 @@
        if (agvWrkMast.getCrnNo() != agvBasDevp.getFloor()) {
            throw new CoolException("请移动到->" + agvWrkMast.getCrnNo() + "楼入库点入库");
        }
        AgvLocMast locNo = agvCommonService.getLocNo(3, 1);
        AgvLocMast locNo = agvCommonService.getLocNo(3, 1,false,true);
        //工作状态
        agvWrkMast.setWrkSts(211L);
        //入出库类型
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -91,7 +91,7 @@
            List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("supp_code", agvBasDevp.getBarcode()));
            //检索库位,选择合适的库位
            AgvLocMast agvLocMast = agvCommonService.getLocNo(agvBasDevp.getLocType1(),agvBasDevp.getFloor());
            AgvLocMast agvLocMast = agvCommonService.getLocNo(agvBasDevp.getLocType1(),agvBasDevp.getFloor(),false,false);
            //生成工作档
            AgvWrkMast wrkMast = createWrkMast(1,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),agvBasDevp.getBarcode(),now,userId, agvBasDevp.getLocType2());
            //标记是否为输送线入库
@@ -349,12 +349,13 @@
        }
        //检索库位,选择合适的库位
        AgvLocMast agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor());
        AgvLocMast agvLocMast = new AgvLocMast();
        //查询入库通知档
        List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectByContainerCode(containerCode);
        if(!Cools.isEmpty(agvWaitPakinList)){
            agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false);
            String devNo = agvBasDevp.getDevNo();
            String locNo = agvLocMast.getLocNo();
@@ -370,6 +371,7 @@
            //更新源站点状态
            updateAgvBasDevp(agvBasDevp,"R",containerType);
        }else {
            agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),true,true);
            // 生成工作档 10.空板入库
            createWrkMast(10,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),containerCode,now,userId,containerType);
            //更新源站点状态
src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
@@ -105,7 +105,7 @@
    public int startAllcationIn(AgvWrkMast agvWrkMast) throws IOException {
        AgvBasDevp basDevp = agvBasDevpService.selectByDevNo(agvWrkMast.getSourceLocNo());
        //检索库位,选择合适的库位
        AgvLocMast locMast = agvCommonService.getLocNo(basDevp.getLocType1(),basDevp.getFloor());
        AgvLocMast locMast = agvCommonService.getLocNo(basDevp.getLocType1(),basDevp.getFloor(),false,true);
        agvWrkMast.setLocNo(locMast.getLocNo());
        agvWrkMast.setWrkSts(201L);
        agvWrkMastService.updateById(agvWrkMast);
@@ -221,11 +221,32 @@
            agvWrkMast.setWrkNo(-agvWrkMast.getWrkNo());
        }
        agvTaskCreateParam.setTaskCode(agvWrkMast.getWrkNo().toString());
        if (agvWrkMast.getIoType() == 108 || (agvWrkMast.getIoType() == 109  && agvWrkMast.getWrkSts() == 201) || agvWrkMast.getIoType() == 12) {
        switch (agvWrkMast.getIoType()) {
            case 108:
            case 12:
                agvTaskCreateParam.setTaskTyp("F06");
                break;
            case 109:
                if (agvWrkMast.getWrkSts() == 201) {
            agvTaskCreateParam.setTaskTyp("F06");
        } else  {
            agvTaskCreateParam.setTaskTyp("F01");
        }
                break;
            case 1:
                // 入库任务是只有 接驳位 -- > 库位
                AgvLocMast loc = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvWrkMast.getLocNo()));
                String locSub = loc.getLocNo().substring(loc.getLocNo().length() - 4).substring(0, 2).substring(0, 2);
                if ("02".equals(locSub)) {
                    agvTaskCreateParam.setTaskTyp("F06");
                } else {
                    agvTaskCreateParam.setTaskTyp("F01");
                }
                break;
            default:
                agvTaskCreateParam.setTaskTyp("F01");
                break;
        }
        agvTaskCreateParam.setPositionCodePath(agvTaskParamList);
src/main/java/com/zy/asrs/task/AutoMoveScheduler.java
@@ -203,7 +203,6 @@
     */
    @Scheduled(cron = "0/2 * * * * ? ")
    private void autoEmptyBack4(){
//        if (determineFloorConnection(2)){
            // 查询 不为1楼的空货架
            List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(
                    new EntityWrapper<AgvLocMast>()
@@ -220,7 +219,6 @@
                    log.error("库位号"+agvLocMast.getLocNo()+"空板自动回库 库位-接驳点  库位-吸塑车间,处理失败:===》异常原因:"+e.getMessage());
                }
            }
//        }
    }
    private boolean determineFloorConnection(Integer floor){
src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java
@@ -55,7 +55,7 @@
        doHandMove2(agvWrkMast);
        return SUCCESS;
    }
    //根据库位的loctype值发送任务--弃用
    private ReturnT<String> doAutoMove(AgvLocMast agvLocMast) {
        Date now = new Date();
        //查询工作档
@@ -64,7 +64,7 @@
            throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
        }
        //检索库位,选择合适的库位
        AgvLocMast LocMast = agvCommonService.getLocNo(3,agvLocMast.getLocType3());
        AgvLocMast LocMast = agvCommonService.getLocNo(3,agvLocMast.getLocType3(),false,true);
        //生成工作档
        AgvWrkMast mast = new AgvWrkMast();
        //工作状态
@@ -182,7 +182,7 @@
    private ReturnT<String> doAutoMove2(AgvWrkMast agvWrkMast) {
        Date now = new Date();
        //检索库位,选择合适的库位
        AgvLocMast locMast = agvCommonService.getLocNo(3,agvWrkMast.getCrnNo());
        AgvLocMast locMast = agvCommonService.getLocNo(3,agvWrkMast.getCrnNo(),false,true);
        if (Cools.isEmpty(locMast)) {
            throw new CoolException("暂无库位");
        }
@@ -274,7 +274,7 @@
        Date now = new Date();
        AgvBasDevp agvBasDevp = agvBasDevpService.selectByDevNo(agvWrkMast.getSourceLocNo());
        //检索空闲接驳位,选择合适的接驳位
        AgvLocMast locMast = agvCommonService.getLocNo(3, 1);
        AgvLocMast locMast = agvCommonService.getLocNo(3, 1,true,true);
        if (Cools.isEmpty(locMast)) {
            throw new CoolException("1楼暂无空库位");
        }
@@ -299,7 +299,7 @@
            throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中");
        }
        //检索库位,选择合适的库位
        AgvLocMast LocMast = agvCommonService.getLocNo(3,1);
        AgvLocMast LocMast = agvCommonService.getLocNo(3,1,true,true);
        //生成工作档
        AgvWrkMast mast = new AgvWrkMast();
        //工作状态
@@ -361,7 +361,7 @@
            ioType = 109;
        } else {
            //检索库位,选择合适的库位
            locMast = agvCommonService.getLocNo(3,1);
            locMast = agvCommonService.getLocNo(3,1,true,true);
            locNo = locMast.getLocNo();
            wrkSts = 201L;
            ioType = 109;
@@ -434,7 +434,7 @@
            //入出库类型
            mast.setIoType(109);
            //检索库位,选择合适的库位
            AgvLocMast locMast = agvCommonService.getLocNo(3,1);
            AgvLocMast locMast = agvCommonService.getLocNo(3,1,true,true);
            mast.setLocNo(locMast.getLocNo());
            updateAgvLocMast(locMast,"S");
        } else {
src/main/java/com/zy/common/service/AgvCommonService.java
@@ -9,6 +9,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
@@ -73,7 +74,7 @@
     * 检索库位号
     * @return locNo 检索到的库位号
     */
    public AgvLocMast getLocNo(int type, int floor) {
    public AgvLocMast getLocNo(int type, int floor,boolean isEmpty,boolean isCurrLev) {
        // 目标库位
        AgvLocMast locMast = null;
//        if(Cools.isEmpty(agvWaitPakinList)){
@@ -113,16 +114,16 @@
        try{
            // 开始查找库位 ==============================>>
            locMast = getLocNoRule(type,floor);
            locMast = getLocNoRule(type,floor,isEmpty,isCurrLev);
            if (locMast != null) {
                return locMast;
            }
        }catch (Exception e){
            throw new CoolException("楼层号:"+floor+";该楼层没有空库位===>"+e.getMessage());
            throw new CoolException(floor+"楼;该楼层没有空库位===>"+e.getMessage());
        }
        //找不到库位,抛出异常
        throw new CoolException("楼层号:"+floor+";该楼层没有空库位");
        throw new CoolException(floor+"楼;该楼层没有空库位");
    }
    /*
@@ -233,12 +234,41 @@
    }
    //随机取一个货位
    private AgvLocMast getLocNoRule(int type,int floor){
    private AgvLocMast getLocNoRule(int type,int floor,boolean isEmpty,boolean isCurrLev){
        Boolean orderBy = false;
        int levCount = 0;
        int times = 1;
        if (floor == 1) {
            orderBy = true;
            levCount = 2;
        } else {
            orderBy = false;
            levCount = 1;
        }
        try{
            List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(new EntityWrapper<AgvLocMast>()
                    .eq("loc_sts", "O")
                    .eq("floor", floor)
                    .eq("loc_type1", type));
            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
            List<AgvLocMast> agvLocMasts = new ArrayList<>();
            //不是空板优先找2层
            if (isEmpty) {
                wrapper.eq("floor", floor).eq("lev1",1);
            } else {
                wrapper.eq("floor", floor).orderBy("lev1",!orderBy);
            }
            //当目标库位是1楼
            if(floor == 1) {
                wrapper.orderBy("loc_no",false);
            }
            agvLocMasts = agvLocMastService.selectList(wrapper);
            //是否当前层
            if (Cools.isEmpty(agvLocMasts) && !isCurrLev) {
                if (times < levCount) {
                    times++;
                    return getLocNoRule(type,floor,isEmpty,isCurrLev);
                }
            }
            for (AgvLocMast agvLocMast : agvLocMasts){
                AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
                if (agvLocMast1.getLocSts().equals("O")){
src/main/webapp/views/home/map2.html
@@ -591,7 +591,6 @@
            currentLev: {
                deep: true,
                handler(val) {
                    console.log(val)
                    this.init()
                    if (this.searchMatnr != ""
                        || this.searchOrderNo != ""
@@ -605,6 +604,11 @@
            currentFloor: {
                deep: true,
                handler(val) {
                    if (val == 1) {
                        this.floorList = [1,2]
                    } else {
                        this.floorList = [1]
                    }
                    this.init()
                    if (this.searchMatnr != ""
                        || this.searchOrderNo != ""