自动化立体仓库 - WMS系统
pang.jiabao
昨天 fc12e6bbc12d0346076fefe7320e99fd14d13193
src/main/java/com/zy/common/web/WcsController.java
@@ -64,76 +64,57 @@
    @ResponseBody
    public synchronized R getLocNo(@RequestBody SearchLocParam param) {
        log.info("收到WCS入库接口请求====>>入参:{}", param);
//        if (Cools.isEmpty(param.getIoType())) {
//            return R.error("入出库类型不能为空");
//        }
        if (Cools.isEmpty(param.getIoType())) {
            return R.error("入出库类型不能为空");
        }
        if (Cools.isEmpty(param.getSourceStaNo())) {
            return R.error("源站编号不能为空");
        }
        if (param.getRow().length == 0) {
            return R.error("WCS上报无可用设备");
        }
//        //wcs调用此接口向组托表插入一条数据模拟组托
//        WaitPakin waitPakin = new WaitPakin();
//        waitPakin.setZpallet(param.getBarcode());
//        waitPakin.setBatch("20260305002");
//        waitPakin.setAnfme(100.0D);
//        waitPakin.setMatnr("YJ2026030509353203");
//        waitPakin.setMaktx("上拉杆_左前右后毛坯");
//        waitPakin.setSpecs("50001LR-71");
//        waitPakin.setModel("skv");
//        waitPakinService.insert(waitPakin);
//
//        WaitPakin waitPakin2 = new WaitPakin();
//        waitPakin2.setZpallet(param.getBarcode());
//        waitPakin2.setBatch("20260305002");
//        waitPakin2.setAnfme(100.0D);
//        waitPakin2.setMatnr("YJ2026030509494873");
//        waitPakin2.setMaktx("螺杆先");
//        waitPakin2.setSpecs("50001LR-71");
//        waitPakin2.setModel("skv");
//        waitPakinService.insert(waitPakin2);
//        if (param.getRow().length == 0) {
//            return R.error("WCS上报无可用设备");
//        }
        List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
        if (param.getIoType() == 1) {
            if (Cools.isEmpty(param.getBarcode())) {
                return R.error("条码不能为空");
            }
            WrkMast wrkMast1 = wrkMastService.selectByBarcode(param.getBarcode());
            if (wrkMast1 != null) {
                Integer ioType = wrkMast1.getIoType();
                if ((ioType == 103 || ioType == 107) && wrkMast1.getWrkSts() == 14) {
                    // 转换工作档
                    if (!wrkMastLogService.save(wrkMast1.getWrkNo())) {
                        throw new CoolException("保存工作主档历史档失败");
                    }
                    Date now = new Date();
                    // 更新工作档数据状态
                    wrkMast1.setIoType(wrkMast1.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57
                    wrkMast1.setWrkSts(2L); // 工作状态: 2.设备上走
                    wrkMast1.setSourceStaNo(String.valueOf(param.getSourceStaNo())); // 源站
                    wrkMast1.setStaNo("0"); // 目标站
                    wrkMast1.setLocNo(wrkMast1.getSourceLocNo());
                    wrkMast1.setSourceLocNo(""); // 源库位清空
                    wrkMast1.setModiTime(now);
                    if (!wrkMastService.updateById(wrkMast1)) {
                        throw new CoolException("更新工作档数据状态失败");
                    }
                    // 修改库位状态 Q.拣料/盘点/并板再入库
                    LocMast locMast = locMastService.selectById(wrkMast1.getLocNo());
                    locMast.setLocSts("Q");
                    locMast.setModiTime(now);
                    if (!locMastService.updateById(locMast)) {
                        throw new CoolException("修改库位状态失败");
                    }
                }
                StartupDto startupDto = new StartupDto();
                startupDto.setTaskNo(wrkMast1.getWrkNo());
                startupDto.setSourceStaNo(Integer.valueOf(wrkMast1.getSourceStaNo()));
                startupDto.setTaskPri(wrkMast1.getIoPri());
                startupDto.setCrnNo(wrkMast1.getCrnNo());
                startupDto.setLocNo(Utils.locToLocNo(wrkMast1.getLocNo()));
                return R.ok().add(startupDto);
            }
//            WrkMast wrkMast1 = wrkMastService.selectByBarcode(param.getBarcode());
//            if (wrkMast1 != null) {
//                Integer ioType = wrkMast1.getIoType();
//                if ((ioType == 103 || ioType == 107) && wrkMast1.getWrkSts() == 14) {
//                    // 转换工作档
//                    if (!wrkMastLogService.save(wrkMast1.getWrkNo())) {
//                        throw new CoolException("保存工作主档历史档失败");
//                    }
//                    Date now = new Date();
//                    // 更新工作档数据状态
//                    wrkMast1.setIoType(wrkMast1.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57
//                    wrkMast1.setWrkSts(2L); // 工作状态: 2.设备上走
//                    wrkMast1.setSourceStaNo(String.valueOf(param.getSourceStaNo())); // 源站
//                    wrkMast1.setStaNo("0"); // 目标站
//                    wrkMast1.setLocNo(wrkMast1.getSourceLocNo());
//                    wrkMast1.setSourceLocNo(""); // 源库位清空
//                    wrkMast1.setModiTime(now);
//                    if (!wrkMastService.updateById(wrkMast1)) {
//                        throw new CoolException("更新工作档数据状态失败");
//                    }
//                    // 修改库位状态 Q.拣料/盘点/并板再入库
//                    LocMast locMast = locMastService.selectById(wrkMast1.getLocNo());
//                    locMast.setLocSts("Q");
//                    locMast.setModiTime(now);
//                    if (!locMastService.updateById(locMast)) {
//                        throw new CoolException("修改库位状态失败");
//                    }
//                }
//                StartupDto startupDto = new StartupDto();
//                startupDto.setTaskNo(wrkMast1.getWrkNo());
//                startupDto.setSourceStaNo(Integer.valueOf(wrkMast1.getSourceStaNo()));
//                startupDto.setTaskPri(wrkMast1.getIoPri());
//                startupDto.setCrnNo(wrkMast1.getCrnNo());
//                startupDto.setLocNo(Utils.locToLocNo(wrkMast1.getLocNo()));
//                return R.ok().add(startupDto);
//            }
            if (Cools.isEmpty(waitPakins)) {
                WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode());
                if (wrkMast != null && wrkMast.getIoType() == 103) {
@@ -152,15 +133,15 @@
        }
        // 源站点状态检测
//        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
//        sourceStaNo.setLocType1(param.getLocType1());
        LocTypeDto locTypeDto = new LocTypeDto();
        locTypeDto.setLocType1(param.getLocType1());
        if(!waitPakins.isEmpty()) { // 判断是否是空托盘
            if (waitPakins.get(0).getMatnr().equals("1") ) {
                param.setIoType(10);
            }
        }
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
        sourceStaNo.setLocType1(param.getLocType1());
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
//        locTypeDto.setLocType1(param.getLocType1());
//        if(!waitPakins.isEmpty()) { // 判断是否是空托盘
//            if (waitPakins.get(0).getMatnr().equals("1") ) {
//                param.setIoType(10);
//            }
//        }
        StartupDto dto = null;
        switch (param.getIoType()) {
@@ -266,7 +247,7 @@
        Date now = new Date();
        // 获取工作号
        int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
        dto.setTaskNo(workNo);
        dto.setWorkNo(workNo);
        // 保存工作档
        WrkMast wrkMast = new WrkMast();
@@ -353,7 +334,7 @@
        Date now = new Date();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(dto.getTaskNo());
        wrkMast.setWrkNo(dto.getWorkNo());
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(1L);
        wrkMast.setIoPri(13D);
@@ -398,27 +379,28 @@
    @Transactional
    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<WaitPakin> waitPakins, int[] row) {
        // 源站点状态检测
//        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
//        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(waitPakins.get(0));
//        StartupDto dto = commonService.getLocNo(1, devpNo, findLocNoAttributeVo, locTypeDto);
        StartupDto dto = null;
        // 根据库位排映射堆垛机
        for(int i = 0; i < row.length/4 ; i ++) {
            ArrayList<Integer> rows = new ArrayList<>();
            rows.add(row[i * 4]);
            rows.add(row[i * 4 + 1]);
            rows.add(row[i * 4 + 2]);
            rows.add(row[i * 4 + 3]);
            dto = commonService.getLocNoNew(1, devpNo, Integer.valueOf(locTypeDto.getLocType1()),rows);
            if (dto != null) {
                break;
            }
        }
//        StartupDto dto = null;
//        // 根据库位排映射堆垛机
//        for(int i = 0; i < row.length/4 ; i ++) {
//            ArrayList<Integer> rows = new ArrayList<>();
//            rows.add(row[i * 4]);
//            rows.add(row[i * 4 + 1]);
//            rows.add(row[i * 4 + 2]);
//            rows.add(row[i * 4 + 3]);
//            dto = commonService.getLocNoNew(1, devpNo, Integer.valueOf(locTypeDto.getLocType1()),rows);
//            if (dto != null) {
//                break;
//            }
//        }
        StartupDto dto = commonService.getLocNoNew(1, devpNo, Integer.valueOf(locTypeDto.getLocType1()),null);;
        if (dto == null) {
            throw new CoolException("没有匹配到库位,检查可用库位/堆垛机报警");
        }
        int workNo = dto.getTaskNo();
        int workNo = dto.getWorkNo();
        Date now = new Date();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
@@ -468,11 +450,11 @@
            throw new CoolException("更新通知档失败");
        }
        // 更新源站点信息
//        sourceStaNo.setWrkNo(workNo);
//        sourceStaNo.setModiTime(now);
//        if (!basDevpService.updateById(sourceStaNo)) {
//            throw new CoolException("更新源站失败");
//        }
        sourceStaNo.setWrkNo(workNo);
        sourceStaNo.setModiTime(now);
        if (!basDevpService.updateById(sourceStaNo)) {
            throw new CoolException("更新源站失败");
        }
        // 更新目标库位状态
        LocMast locMast = locMastService.selectById(dto.getLocNo());
        if (locMast.getLocSts().equals("O")) {
@@ -484,35 +466,36 @@
        } else {
            throw new CoolException(dto.getLocNo() + "目标库位已被占用");
        }
        dto.setLocNo(Utils.locToLocNo(dto.getLocNo()));
//        dto.setLocNo(Utils.locToLocNo(dto.getLocNo()));
        return dto;
    }
    @Transactional
    public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode, int[] row) {
        // 源站点状态检测
//        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
//        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
//        StartupDto dto = commonService.getLocNo(10, devpNo, findLocNoAttributeVo, locTypeDto);
        StartupDto dto = null;
        // 根据库位排映射堆垛机
        for(int i = 0; i < row.length/4 ; i ++) {
            ArrayList<Integer> rows = new ArrayList<>();
            rows.add(row[i * 4]);
            rows.add(row[i * 4 + 1]);
            rows.add(row[i * 4 + 2]);
            rows.add(row[i * 4 + 3]);
            dto = commonService.getLocNoNew(1, devpNo, Integer.valueOf(locTypeDto.getLocType1()),rows);
            if (dto != null) {
                break;
            }
        }
//        StartupDto dto = null;
//        // 根据库位排映射堆垛机
//        for(int i = 0; i < row.length/4 ; i ++) {
//            ArrayList<Integer> rows = new ArrayList<>();
//            rows.add(row[i * 4]);
//            rows.add(row[i * 4 + 1]);
//            rows.add(row[i * 4 + 2]);
//            rows.add(row[i * 4 + 3]);
//            dto = commonService.getLocNoNew(1, devpNo, Integer.valueOf(locTypeDto.getLocType1()),rows);
//            if (dto != null) {
//                break;
//            }
//        }
        StartupDto dto = commonService.getLocNoNew(10, devpNo, Integer.valueOf(locTypeDto.getLocType1()),null);;
        if (dto == null) {
            throw new CoolException("没有匹配到库位,检查可用库位/堆垛机报警");
        }
        int workNo = dto.getTaskNo();
        int workNo = dto.getWorkNo();
        Date now = new Date();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
@@ -539,15 +522,11 @@
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        // 更新入库通知档 ioStatus ===>> Y
        Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
                .eq("zpallet", barcode);
        WaitPakin setParam = new WaitPakin();
        setParam.setLocNo(dto.getLocNo());
        setParam.setIoStatus("Y");
        setParam.setModiTime(now);
        if (!waitPakinService.update(setParam, wrapper)) {
            throw new CoolException("更新通知档失败");
        // 更新源站点信息
        sourceStaNo.setWrkNo(workNo);
        sourceStaNo.setModiTime(new Date());
        if (!basDevpService.updateById(sourceStaNo)) {
            throw new CoolException("更新源站失败");
        }
        // 更新目标库位状态
        LocMast locMast = locMastService.selectById(dto.getLocNo());
@@ -560,7 +539,7 @@
        } else {
            throw new CoolException(dto.getLocNo() + "目标库位已被占用");
        }
        dto.setLocNo(Utils.locToLocNo(dto.getLocNo()));
//        dto.setLocNo(Utils.locToLocNo(dto.getLocNo()));
        return dto;
    }