自动化立体仓库 - WMS系统
zyx
2023-11-14 65219d7a58424495f10b1e3b1d20fd483622f883
agv盘点改动
12个文件已修改
221 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/param/StockOutParam.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/AgvBasDevpService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/LocDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/agvPakStore/locCheckOut.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/agvBasDevpVisualized/basDevp.html 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/StockOutParam.java
@@ -34,8 +34,14 @@
        // 数量
        private Double count;
        //
        private String containerCode;
        //容器码
        private String suppCode;
        //销售订单号
        private String threeCode;
        //销售订单行号
        private String deadTime;
    }
}
src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java
@@ -4,6 +4,7 @@
import com.zy.asrs.entity.AgvBasDevp;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
@@ -18,4 +19,7 @@
    @Select("select dev_no from agv_bas_devp where loc_sts = 'O'")
    List<String> getAvailableEmptyInSite();
    @Select("select station_code from agv_bas_devp where floor = #{floor} and cache_shelves = 'Y' group by station_code")
    List<String> selectCacheShelvesStationCodeByFloor(@Param("floor") int floor);
}
src/main/java/com/zy/asrs/service/AgvBasDevpService.java
@@ -23,4 +23,7 @@
    public AgvBasDevp selectEmptyDevpByStation(String stationCode);
    List<AgvBasDevp> getBasDevpByNoCacheShelves();
    List<String> selectCacheShelvesStationCodeByFloor(int floor);
}
src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
@@ -100,7 +100,8 @@
                    .eq("station_code", stationCode)
                    .like("dev_no", "0" + i + "@");
            if("CS-305".equals(stationCode) || "CS-306".equals(stationCode) || "CS-307".equals(stationCode)){
            List<String> list = this.selectCacheShelvesStationCodeByFloor(3);
            if(list.contains(stationCode)){
                wrapper.orderBy("dev_no",false);
            }
@@ -206,4 +207,10 @@
        return this.selectList(new EntityWrapper<AgvBasDevp>().eq("cache_shelves","N"));
    }
    @Override
    public List<String> selectCacheShelvesStationCodeByFloor(int floor) {
        //Object o = this.selectList(new EntityWrapper<AgvBasDevp>().setSqlSelect("station_code").eq("floor",floor).eq("cache_shelves","Y").groupBy("station_code"));
        return this.baseMapper.selectCacheShelvesStationCodeByFloor(floor);
    }
}
src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java
@@ -77,7 +77,8 @@
                locDto.setContainerCode(agvLocDetl.getSuppCode());
                //当前库位所处楼层
                int floor = Integer.parseInt(agvLocDetl.getLocNo().split("@")[1]);
                locDto.setAgvStaNos(queryAgvStaNosByFloor(floor));
                //locDto.setAgvStaNos(queryAgvStaNosByFloor(floor));
                locDto.setAgvStaNos(agvBasDevpService.selectCacheShelvesStationCodeByFloor(floor));
                locDtoList.add(locDto);
                issued -= anfme;
@@ -144,30 +145,14 @@
        } else {
            AgvLocDetl agvLocDetl = this.selectOne(wrapper);
            agvLocDetl.setAnfme(anfme);
            //return this.update(agvLocDetl,wrapper);
            //return baseMapper.updateAnfme(anfme, locNo, matnr, batch) > 0;
            return this.baseMapper.updateAnfme(locNo,anfme,matnr,batch,csocode,isocode) > 0;
        }
    }
    private List<String> queryAgvStaNosByFloor(int floor){
        List<String> agvStaNos = new ArrayList<>();
        if(floor == 1){
            agvStaNos.add("CS-101");
            agvStaNos.add("CS-102");
        }else if(floor ==3){
            agvStaNos.add("CS-305");
            agvStaNos.add("CS-306");
            agvStaNos.add("CS-307");
        }
        return agvStaNos;
    }
    private void wapperSetCondition(Wrapper wrapper,String column, String condition){
        if(Cools.isEmpty(condition)){
            wrapper.andNew().eq(column,"").or().isNull(column);
            //wrapper.isNull(column);
        }else {
            wrapper.eq(column,condition);
        }
@@ -183,7 +168,6 @@
        taskDto.getLocDtos().forEach(locDto -> {
            AgvLocDetl agvLocDetl = this.selectByMatnrAndBatchAndCsocodeAndisoCode(locDto.getLocNo(),locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
            //AgvLocDetl agvLocDetl = this.selectLocdetl(locDto.getLocNo(),locDto.getMatnr(),locDto.getBatch(),locDto.getCsocode(),locDto.getIsoseq());
            agvLocDetls.add(agvLocDetl);
        });
        return agvLocDetls;
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -22,6 +22,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@@ -215,32 +216,68 @@
    @Transactional
    public void locCheckOut(StockOutParam param, Long userId) {
        String station = param.getStation();
        List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>()
                .eq("station_code", station)
                .eq("loc_sts","O"));
//        List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>()
//                .eq("station_code", station)
//                .eq("loc_sts","O"));
//
//        if(param.getLocDetls().size() > agvBasDevpList.size()){
//            throw new CoolException("当前站点可用缓存货架数量为" + agvBasDevpList.size() + ",少于需要盘点出库库位数量,请重新选择盘点库位");
//        }
        if(param.getLocDetls().size() > agvBasDevpList.size()){
            throw new CoolException("当前站点可用缓存货架数量为" + agvBasDevpList.size() + ",少于需要盘点出库库位数量,请重新选择盘点库位");
        }
        List<TaskDto> taskDtos = new ArrayList<>();
        param.getLocDetls().forEach(locDetl -> {
            AgvLocMast agvLocMast = agvLocMastService.selectById(locDetl.getLocNo());
            AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", locDetl.getLocNo()));
            AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>()
                    .eq("station_code", station)
                    .eq("loc_sts","O"));
            Date now = new Date();
            //生成工作党
            AgvWrkMast wrkMast = createWrkMast(107, 21L, locDetl.getLocNo(), agvBasDevp.getDevNo(), agvLocDetl.getSuppCode(), now, userId,false);
            //生成工作明细档
            createWrkDetlReWrite(locDetl.getMatnr(),wrkMast.getWrkNo(),null,locDetl.getBatch(),locDetl.getCount(),wrkMast.getBarcode(),now,userId,agvLocDetl.getThreeCode(),agvLocDetl.getDeadTime());
            //修改库位信息
            updateAgvLocMast(agvLocMast,"P");
            //修改站点信息
            updateAgvBasDevp(agvBasDevp,"S");
            LocDto locDto = new LocDto(locDetl.getLocNo(),locDetl.getCount(),locDetl.getMatnr(),locDetl.getBatch(),locDetl.getThreeCode(),locDetl.getDeadTime(),locDetl.getSuppCode());
            TaskDto taskDto = new TaskDto(locDetl.getLocNo(),station,locDto);
            if(TaskDto.has(taskDtos,taskDto)){
                TaskDto.find(taskDtos,taskDto).getLocDtos().add(locDto);
            }else {
                taskDtos.add(taskDto);
            }
        });
        Date now = new Date();
        taskDtos.forEach(taskDto -> {
            //生成工作档
            AgvWrkMast wrkMast = createWrkMast(107, 21L,taskDto.getLocNo(),taskDto.getAgvStaNo(),taskDto.getLocDtos().get(0).getContainerCode(),now,userId,false);
            //生成工作档明细
            taskDto.getLocDtos().forEach(locDto -> {
                //明细档所需参数
                createWrkDetlReWrite(locDto.getMatnr(),
                        wrkMast.getWrkNo(),
                        locDto.getOrderNo(),
                        locDto.getBatch(),
                        locDto.getAnfme(),
                        locDto.getContainerCode(),
                        now,
                        userId,
                        locDto.getCsocode(),
                        locDto.getIsoseq());
            });
            updateAgvLocMast(agvLocMastService.selectById(wrkMast.getSourceLocNo()),"P");
            //更新目标站点状态
            //locSts = ioType == 101 ? "S" : "Q";
            updateAgvBasDevp(agvBasDevpService.selectById(wrkMast.getLocNo()),"S");
        });
//        param.getLocDetls().forEach(locDetl -> {
//            AgvLocMast agvLocMast = agvLocMastService.selectById(locDetl.getLocNo());
//            AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", locDetl.getLocNo()));
//            AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>()
//                    .eq("station_code", station)
//                    .eq("loc_sts","O"));
//            Date now = new Date();
//
//            //生成工作党
//            AgvWrkMast wrkMast = createWrkMast(107, 21L, locDetl.getLocNo(), agvBasDevp.getDevNo(), agvLocDetl.getSuppCode(), now, userId,false);
//            //生成工作明细档
//            createWrkDetlReWrite(locDetl.getMatnr(),wrkMast.getWrkNo(),null,locDetl.getBatch(),locDetl.getCount(),wrkMast.getBarcode(),now,userId,agvLocDetl.getThreeCode(),agvLocDetl.getDeadTime());
//            //修改库位信息
//            updateAgvLocMast(agvLocMast,"P");
//            //修改站点信息
//            updateAgvBasDevp(agvBasDevp,"S");
//
//        });
    }
@@ -648,46 +685,11 @@
            throw new CoolException("保存工作档失败");
        }
        //暂存位任务+1
        addInQty(locNo);
        wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no",sourceLocNo));
        return wrkMast;
    }
    /*
    生成工作档
     */
    @Deprecated
    private AgvWrkMast createWrkMast(AgvBasDevp agvBasDevp,AgvLocMast agvLocMast, Date now, Long userId){
        AgvWrkMast wrkMast = new AgvWrkMast();
        //生成工作号
        //int workNo = agvCommonService.getWorkNo(0);
        //wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(new Date());
        // 工作状态:201.生成入库任务ID
        wrkMast.setWrkSts(201L);
        // 入出库状态:1.入库
        wrkMast.setIoType(1);
        //生成优先级
        wrkMast.setIoPri(300.0);
        wrkMast.setSourceLocNo(agvBasDevp.getDevNo());
        wrkMast.setLocNo(agvLocMast.getLocNo());
        wrkMast.setBarcode(agvBasDevp.getBarcode());
        // 满板:Y
        wrkMast.setFullPlt("Y");
        // 拣料
        wrkMast.setPicking("N");
        // 退出
        wrkMast.setExitMk("N");
        // 空板
        wrkMast.setEmptyMk("N");
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        if (!agvWrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败");
        }
        return wrkMast;
    }
@@ -750,4 +752,15 @@
        }
    }
    private void addInQty(String devno){
        AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devno);
        if(!Cools.isEmpty(agvBasDevp)){
            if(Cools.isEmpty(agvBasDevp.getInQty())){
                agvBasDevp.setInQty(1);
            }else {
                agvBasDevp.setInQty(agvBasDevp.getInQty() + 1);
            }
        }
    }
}
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -221,7 +221,7 @@
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch(), paramLocDetl.getContainerCode());
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch(), paramLocDetl.getSuppCode());
                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
            }
        }
@@ -698,7 +698,7 @@
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch(),paramLocDetl.getContainerCode());
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getBatch(),paramLocDetl.getSuppCode());
                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
            }
        }
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -201,6 +201,7 @@
                agvWrkMast.setLocNo(agvBasDevp.getDevNo());
                agvWrkMastService.updateById(agvWrkMast);
            }
        });
        return SUCCESS;
src/main/java/com/zy/common/model/LocDto.java
@@ -47,6 +47,16 @@
    public LocDto() {
    }
    public LocDto(String locNo, Double anfme, String matnr, String batch, String csocode, String isoseq, String containerCode) {
        this.locNo = locNo;
        this.anfme = anfme;
        this.matnr = matnr;
        this.batch = batch;
        this.csocode = csocode;
        this.isoseq = isoseq;
        this.containerCode = containerCode;
    }
    public LocDto(String locNo, String matnr, String batch, Double anfme) {
        this.locNo = locNo;
        this.matnr = matnr;
src/main/java/com/zy/common/web/WcsController.java
@@ -349,9 +349,12 @@
        if(Cools.isEmpty(agvBasDevp) || !"O".equals(agvBasDevp.getLocSts())){
            throw new CoolException("当前站点不存在或者站点不为空");
        }
        if(Cools.isEmpty(agvWaitPakinService.selectByContainerCode(containerCode))){
            throw new CoolException("该料箱位组托");
        }
        //去找agv工作档任务
        if(!Cools.isEmpty(agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>()
                .eq("barcode",containerCode)))){
        if(!Cools.isEmpty(agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode",containerCode)))){
            throw new CoolException("该料箱正在入库中");
        }
        //绑定站点
src/main/webapp/static/js/agvPakStore/locCheckOut.js
@@ -156,8 +156,10 @@
    }
    if(data == 3){
        $('#staNoSelect').append("<option value=CS-305>CS-305</option>");
        $('#staNoSelect').append("<option value=CS-306>CS-306</option>")
        $('#staNoSelect').append("<option value=CS-307>CS-307</option>")
        $('#staNoSelect').append("<option value=CS-306>CS-306</option>");
        $('#staNoSelect').append("<option value=CS-307>CS-307</option>");
        $('#staNoSelect').append("<option value=CS-308>CS-308</option>");
        $('#staNoSelect').append("<option value=CS-309>CS-309</option>");
    }
    form.render();
}
src/main/webapp/views/agvBasDevpVisualized/basDevp.html
@@ -150,13 +150,15 @@
            $('#rowSelect').empty();
            if(data.value == 1){
                $('#rowSelect').append("<option value=CS-101>1号</option>");
                $('#rowSelect').append("<option value=CS-102>2号</option>")
                $('#rowSelect').append("<option value=CS-101>101</option>");
                $('#rowSelect').append("<option value=CS-102>102</option>")
            }
            if(data.value == 3){
                $('#rowSelect').append("<option value=CS-305>1号</option>");
                $('#rowSelect').append("<option value=CS-306>2号</option>")
                $('#rowSelect').append("<option value=CS-307>3号</option>")
                $('#rowSelect').append("<option value=CS-305>305</option>");
                $('#rowSelect').append("<option value=CS-306>306</option>");
                $('#rowSelect').append("<option value=CS-307>307</option>");
                $('#rowSelect').append("<option value=CS-308>308</option>")
                $('#rowSelect').append("<option value=CS-309>309</option>")
            }
            form.render();