自动化立体仓库 - WMS系统
#
Junjie
2023-09-09 192ed29c87e221a3aa240e5f003d574fdfb9a9c8
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -5,6 +5,8 @@
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.service.*;
import com.zy.common.model.LocDto;
import com.zy.common.model.OrderDto;
@@ -38,7 +40,7 @@
    @Autowired
    private AgvBasDevpService agvBasDevpService;
    @Autowired
    private AgvLocMastService agvLockMastService;
    private AgvLocMastService agvLocMastService;
    @Autowired
    private AgvLocDetlService agvLocDetlService;
    @Autowired
@@ -104,7 +106,7 @@
        agvTaskDtos.forEach(taskDto -> {
            AgvLocMast agvLocMast = agvLockMastService.selectById(taskDto.getLocNo());
            AgvLocMast agvLocMast = agvLocMastService.selectById(taskDto.getLocNo());
            AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", taskDto.getLocNo()));
            //工作档所需参数
@@ -128,7 +130,7 @@
            modifyOrderDetl(taskDto.getLocDtos().get(0), userId);
            //更新源站点信息
            String locSts = ioType == 101 ? "R" : "P";
            updateAgvLocMast(agvLockMastService.selectById(sourceLocNo),locSts);
            updateAgvLocMast(agvLocMastService.selectById(sourceLocNo),locSts);
            //更新目标站点状态
            //locSts = ioType == 101 ? "S" : "Q";
            updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo),"S");
@@ -143,7 +145,11 @@
        agvWrkMastList.forEach(agvWrkMast -> {
            //修改工作党
            agvWrkMast.setWrkSts(201L);
            agvWrkMast.setIoType(53);
            //根据出库类型 设置入库类型 53拣料入库 57盘点入库
            int ioType = agvWrkMast.getIoType() == 103 ? 53 : 57;
            agvWrkMast.setIoType(ioType);
            String locNo = agvWrkMast.getLocNo();
            agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo());
            agvWrkMast.setSourceLocNo(locNo);
@@ -151,22 +157,139 @@
            agvWrkMastService.updateById(agvWrkMast);
            AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo()));
            AgvLocMast agvLocMast = agvLockMastService.selectById(agvWrkMast.getLocNo());
            AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getLocNo());
            AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocMast.getLocNo()));
            AgvBasDevp agvBasDevp = agvBasDevpService.selectById(agvWrkMast.getSourceLocNo());
            //修改工作党明细
            agvWrkDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme());
            agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("wrk_no",agvWrkDetl.getWrkNo()));
            //修改库存信息
            agvLocDetl.setAnfme(agvWrkDetl.getAnfme());
            agvLocDetlService.update(agvLocDetl,new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocDetl.getLocNo()));
            //修改库位信息
            agvLocMast.setLocSts("Q");
            agvLockMastService.selectById(agvLocMast);
            //修改站点信息
            agvBasDevp.setLocSts("R");
            agvBasDevpService.updateById(agvBasDevp);
            //拣料入库
            if(ioType == 53){
                //修改工作党明细
                agvWrkDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme());
                agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("wrk_no",agvWrkDetl.getWrkNo()));
                //修改库存信息
                agvLocDetl.setAnfme(agvWrkDetl.getAnfme());
                agvLocDetlService.update(agvLocDetl,new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocDetl.getLocNo()));
            }
            //修改库位信息
            updateAgvLocMast(agvLocMast,"Q");
            //修改站点信息
            updateAgvBasDevp(agvBasDevp,"R");
        });
    }
    /*
    盘点出库
     */
    @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"));
        if(param.getLocDetls().size() > agvBasDevpList.size()){
            throw new CoolException("当前站点可用缓存货架数量为" + agvBasDevpList.size() + ",少于需要盘点出库库位数量,请重新选择盘点库位");
        }
        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.getZpallet(), now, userId);
            //生成工作明细档
            createWrkDetlReWrite(locDetl.getMatnr(),wrkMast.getWrkNo(),null,locDetl.getBatch(),locDetl.getCount(),wrkMast.getBarcode(),now,userId);
            //修改库位信息
            updateAgvLocMast(agvLocMast,"P");
            //修改站点信息
            updateAgvBasDevp(agvBasDevp,"S");
        });
    }
    /*
    库位移转
     */
    @Transactional
    public void locMove(String sourceLocNo, String targetLocNo, Long userId) {
        AgvLocMast sourceLocMast = agvLocMastService.selectById(sourceLocNo);
        AgvLocMast targetLocMast = agvLocMastService.selectById(targetLocNo);
        AgvLocDetl sourceLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", sourceLocMast.getLocNo()));
        if(!sourceLocMast.getLocSts().equals("F")){
            throw new CoolException(sourceLocMast.getLocNo() + "源库位出库失败,状态:"+sourceLocMast.getLocSts$());
        }
        if(!targetLocMast.getLocSts().equals("O")){
            throw new CoolException("移转失败,目标库位状态:"+targetLocMast.getLocSts$());
        }
        Date now = new Date();
        //生成移库工作档
        AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getZpallet(), now, userId);
        //生成工作党明细
        createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId);
        //修改目标库位状态
        updateAgvLocMast(targetLocMast,"S");
        //修改原库位状态
        updateAgvLocMast(sourceLocMast,"R");
    }
    /*
    空板入库
     */
    @Transactional
    public String emptyPlateIn(String sourceStaion, Long userId) {
        Date now = new Date();
        // 源站点状态检测
        AgvBasDevp agvBasDevp = agvBasDevpService.selectById(sourceStaion);
        if(!agvBasDevp.getLocSts().equals("O")){
            throw new CoolException("当前工作位状态为" + agvBasDevp.getLocSts()+",无法进行空板入库");
        }
        // 检索库位
        AgvLocMast locMast = agvCommonService.getLocNo(null, agvBasDevp.getFloor());
        // 生成工作档 10.空板入库
        createWrkMast(10,201L,agvBasDevp.getDevNo(),locMast.getLocNo(),null,now,userId);
        //更新源站点状态
        updateAgvBasDevp(agvBasDevp,"R");
        //更新目标库位状态
        updateAgvLocMast(locMast,"S");
        return locMast.getLocNo();
    }
    /*
    空板出库
     */
    @Transactional
    public void emptyPlateOut(EmptyPlateOutParam param, Long userId) {
        Date now = new Date();
        //判断所选工作站空余工作位数量是否满足出库数量
        List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>()
                .eq("station_code", param.getStationCode())
                .eq("loc_sts","O"));
        if(agvBasDevpList.size() < param.getLocNos().size()){
            throw new CoolException("当前工作站可出库工作位数量为"+ agvBasDevpList.size() + ",小于要出库的库位数量,请重新选择出库库位");
        }
        param.getLocNos().forEach(locNo -> {
            AgvLocMast agvLocMast = agvLocMastService.selectById(locNo);
            if(!agvLocMast.getLocSts().equals("D")){
                throw new CoolException(agvLocMast.getLocNo() + "库位状态已经不为D.空桶/空栈板,请重新选择库位进行空板出库");
            }
            //检索工作位
            AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>()
                    .eq("station_code", param.getStationCode())
                    .eq("loc_sts", "O"));
            //生成工作档
            createWrkMast(110,21L,locNo,agvBasDevp.getDevNo(),null,now,userId);
            //修改源库位状态
            updateAgvLocMast(agvLocMast,"R");
            //修改目标工作位状态
            updateAgvBasDevp(agvBasDevp,"S");
        });
    }
@@ -175,7 +298,7 @@
     */
    private void updateAgvLocMast(AgvLocMast locMast, String locSts){
        locMast.setLocSts(locSts);
        agvLockMastService.updateById(locMast);
        agvLocMastService.updateById(locMast);
    }
    /*