自动化立体仓库 - WMS系统
whycq
2024-05-29 760f94f5aa0a8777ac1fd2351766882f4ff1049f
src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java
@@ -70,24 +70,24 @@
        }
        param.setContainerType(Short.valueOf(param.getBarcode().substring(0,2)));
//        //检查是否已存在相同的托盘条码,存在则抛出异常
//        //检查是否已存在相同的货架条码,存在则抛出异常
//        if (agvWaitPakinService.selectCount(new EntityWrapper<AgvWaitPakin>().eq("supp_code", param.getBarcode())) > 0) {
//            throw new CoolException(param.getBarcode() + "料想码已存在AGV入库通知档中");
//        }
        //检查库存是否有相同料箱,存在则抛出异常
        //检查库存是否有相同货架,存在则抛出异常
        if(!Cools.isEmpty(agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("supp_code",param.getBarcode())))){
            throw new CoolException(param.getBarcode() + "料箱码已存在AGV库存明细中");
            throw new CoolException(param.getBarcode() + "货架码已存在AGV库存明细中");
        }
        //检查库存是否有相同料箱,存在则抛出异常
        //检查库存是否有相同货架,存在则抛出异常
        if(!Cools.isEmpty(agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("barcode",param.getBarcode())))){
            throw new CoolException(param.getBarcode() + "料箱码已存在AGV库存主档中");
            throw new CoolException(param.getBarcode() + "货架码已存在AGV库存主档中");
        }
        //查看工作档是否有相同料箱,存在则抛出异常
        //查看工作档是否有相同货架,存在则抛出异常
        if(!Cools.isEmpty(agvWrkMastService.selectByContainerCode(param.getBarcode()))){
            throw new CoolException(param.getBarcode() + "料箱码已存在AGV工作档中");
            throw new CoolException(param.getBarcode() + "货架码已存在AGV工作档中");
        }
        if (Cools.isEmpty(param.getOrderNo())) {
@@ -130,7 +130,7 @@
                wrkDetl.setOrderNo(pick.getOrderNo());
                wrkDetl.setIoTime(now);
                wrkDetl.setAnfme(pick.getCount()); // 数量
                wrkDetl.setSuppCode(pick.getSuppCode()); // 托盘条码
                wrkDetl.setSuppCode(pick.getSuppCode()); // 货架条码
                wrkDetl.setAppeUser(userId);
                wrkDetl.setAppeTime(now);
                wrkDetl.setModiUser(userId);
@@ -181,7 +181,7 @@
    private void NoOrderComb(CombParam param, Long userId){
        List<DetlDto> detlDtos = mappingDetlDtoByCombMat(param,null);
        //用于统一一个托盘下的入库通知档的生成时间
        //用于统一一个货架下的入库通知档的生成时间
        Date now = new Date();
        detlDtos.forEach(detlDto -> {
            syncWaitPakin(detlDto,"",param.getBarcode(),userId,now);
@@ -205,7 +205,7 @@
        }
        // 用于生成入库通知档所需参数
        List<DetlDto> detlDtos = mappingDetlDtoByCombMat(param,order);
        //用于统一一个托盘下的入库通知档的生成时间
        //用于统一一个货架下的入库通知档的生成时间
        Date now = new Date();
        for (DetlDto detlDto : detlDtos) {
            //同步生成入库通知档
@@ -228,7 +228,7 @@
            }
            DetlDto detlDto = new DetlDto(combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme(), combMat.getCsocode(), combMat.getIsoseq(),combMat.getContainerCode(),param.getLocType());
            //同一托盘下相同物料信息和批号转为一个入库通知档
            //同一货架下相同物料信息和批号转为一个入库通知档
            if (DetlDto.has(detlDtos, detlDto)) {
                DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch(), detlDto.getCsocode(), detlDto.getIsoseq(),detlDto.getContainerCode());
                assert one != null;
@@ -271,8 +271,8 @@
        waitPakin.sync(mat);
        waitPakin.setOrderNo(orderNo);   // 单据编号
        waitPakin.setBatch(detlDto.getBatch());     // 序列码
        //waitPakin.setZpallet(zpallet);   // 托盘码
        waitPakin.setSuppCode(zpallet);   // 托盘码
        //waitPakin.setZpallet(zpallet);   // 货架码
        waitPakin.setSuppCode(zpallet);   // 货架码
        waitPakin.setIoStatus("N");     // 入出状态
        waitPakin.setAnfme(detlDto.getAnfme());  // 数量
        waitPakin.setStatus("Y");    // 状态
@@ -317,7 +317,7 @@
        }
        if(Cools.isEmpty(agvWaitPakinService.selectByContainerCode(barcode))){
            throw new CoolException("该料箱未组托,无法绑定站点");
            throw new CoolException("该货架未组托,无法绑定站点");
        }
        AgvBasDevp agvBasDevp1 = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("barcode", barcode));
@@ -392,7 +392,11 @@
                ioType = 11;
            }
        } else {
            ioType = 12;
            if (agvLocMast.getFloor() != floor) {
                ioType = 12;
            } else {
                ioType = 11;
            }
        }
        Date now = new Date();
        //查询工作档
@@ -418,9 +422,9 @@
        mast.setSourceLocNo(agvLocMast.getLocNo());
        //目标站点
        mast.setLocNo(locMast.getLocNo());
        //容器编码
        //货架编码
        mast.setBarcode(agvLocMast.getBarcode());
        //容器类型
        //货架类型
        mast.setWhsType(30);
        mast.setAppeUser(userId);
@@ -532,9 +536,30 @@
    */
    @Override
    @Transactional
    public String handBack(AgvMobileStartPakin param, Long userId) {
        Date now = new Date();
        AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", param.getDevNo()));
        agvWrkMast.setIoType(113);
        agvWrkMast.setModiUser(userId);
        agvWrkMast.setModiTime(now);
        if (!agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no",agvWrkMast.getWrkNo()))) {
            throw new CoolException("更新工作档失败");
        }
        return "ok";
    }
    /*
     * 站点回退
     */
    @Override
    @Transactional
    public String doBack(AgvMobileStartPakin param, Long userId) {
        Date now = new Date();
        AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", param.getDevNo()));
        AgvWrkMast agvWrkMastSource = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", param.getDevNo()));
        if (!Cools.isEmpty(agvWrkMastSource)) {
            throw new CoolException("当前站点已有退库任务");
        }
        Integer oldWrkNo = agvWrkMast.getWrkNo();
        if (!agvWrkMast.getBarcode().equals(param.getBarcode())) {
            throw new CoolException("回退任务的货架码与当前货架码不一致!");
@@ -599,9 +624,9 @@
        wrkMast.setSourceLocNo(sourceLocNo);
        //目标站点
        wrkMast.setLocNo(locNo);
        //容器编码
        //货架编码
        wrkMast.setBarcode(barcode);
        //容器类型
        //货架类型
        wrkMast.setWhsType(containerType);
        // 目标楼层
        wrkMast.setCrnNo(floor);