自动化立体仓库 - WMS系统
#
Junjie
2023-11-17 98ff94c52485dd502e10c061ae267bf24e5d1814
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);
            }
        }
    }
}