自动化立体仓库 - WMS系统
zwl
6 天以前 b6681bc12173c1179d0185805ba461211472ac18
src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -233,7 +233,7 @@
            RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
            if("SUCCESS".equals(rcsReturn.getCode())||"200".equals(rcsReturn.getCode())) {
                JSONObject data = rcsReturn.getData();
                String robotTaskCode = data.getString("RobotTaskCode");
                String robotTaskCode = data.getString("robotTaskCode");
                if (robotTaskCode.equals(rcsTaskSubmit.getRobotTaskCode())){
                    return 1;
                }
@@ -256,7 +256,7 @@
        String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
        if (!StringUtils.isEmpty(response) && response.contains("code")){
            RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
            if("200".equals(rcsReturn.getCode())) {
            if("SUCCESS".equals(rcsReturn.getCode())||"200".equals(rcsReturn.getCode())) {
                return 1;
            }
        }
@@ -327,6 +327,8 @@
        String robotTaskCode = rcsReporterTask.getRobotTaskCode();
        String singleRobotCode = rcsReporterTask.getSingleRobotCode();
        String[] split = robotTaskCode.split("-");
        robotTaskCode = split[0];
        //华晓AGV状态反馈,及申请
        if(Cools.isEmpty(rcsReporterTask.getExtra())){
            if(Cools.isEmpty(rcsReporterTask.getMethod())){
@@ -445,41 +447,41 @@
            String slotCode = values.getString("slotCode");
            try {
                // q3,q8=1
                if ("1".equals(carrierType)) {    //AGV
                    EntityWrapper<Task> wrapper = new EntityWrapper<>();
                    wrapper.eq("task_no", robotTaskCode);
                    Task task = taskService.selectOne(wrapper);
                    if (task == null || !task.getTaskNo().equals(robotTaskCode)) {
                        rcsReturn.setCode("Err_RobotCodeNotMatch");
                        rcsReturn.setMessage("");
                        JSONObject data = new JSONObject();
                        data.put("robotTaskCode", robotTaskCode);
                        rcsReturn.setData(data);
                        return rcsReturn;
                    }
                    JSONObject memo = JSONObject.parseObject(task.getMemo());
                    switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
                        case TASK_START: {
                            task.setWrkSts(302L);   // 301 任务下发、302 任务执行、303 任务中断、304 任务结束
                            task.setModiTime(new Date());
                            task.setModiUser(defaultUserId);
                            taskService.updateById(task);
                        }
                        break;
                        case TASK_OUT_BIN: {
                            // TODO:立库出库一托,AGV开始运输后,给MES发送出库完成(一托发一次)
                EntityWrapper<Task> wrapper = new EntityWrapper<>();
                wrapper.eq("task_no", robotTaskCode);
                Task task = taskService.selectOne(wrapper);
                if (task == null || !task.getTaskNo().equals(robotTaskCode)) {
                    rcsReturn.setCode("Err_RobotCodeNotMatch");
                    rcsReturn.setMessage("");
                    JSONObject data = new JSONObject();
                    data.put("robotTaskCode", robotTaskCode);
                    rcsReturn.setData(data);
                    return rcsReturn;
                }
                JSONObject memo = JSONObject.parseObject(task.getMemo());
                switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
                    case TASK_START: {
                        task.setWrkSts(302L);   // 301 任务下发、302 任务执行、303 任务中断、304 任务结束
                        task.setModiTime(new Date());
                        task.setModiUser(defaultUserId);
                        taskService.updateById(task);
                    }
                    break;
                    case TASK_OUT_BIN: {
                        // TODO:立库出库一托,AGV开始运输后,给MES发送出库完成(一托发一次)
//                        JSONObject taskMemo = JSONObject.parseObject(task.getMemo());
//                        mesService.outFeedbackByTuo(taskMemo.getString("OrderNo"), task);
                        }
                        break;
                        case TASK_END: {
                            // 更新任务状态等内部逻辑
                            task.setWrkSts(304L);   // 301 任务下发、302 任务执行、303 任务中断、304 任务结束
                            task.setModiTime(new Date());
                            task.setModiUser(defaultUserId);
                            taskService.updateById(task);
                            // 任务完成
                    }
                    break;
                    case TASK_END: {
                        // 更新任务状态等内部逻辑
                        task.setWrkSts(304L);   // 301 任务下发、302 任务执行、303 任务中断、304 任务结束
                        task.setModiTime(new Date());
                        task.setModiUser(defaultUserId);
                        taskService.updateById(task);
                        // 任务完成
//                        mesService.reporterTask(rcsReporterTask);
//                    EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>();
@@ -494,74 +496,74 @@
//                    taskService.completeWrkMast();
//                    taskDetlService.
                        }
                        break;
                        case APPLY_IN_STATION:
                        case APPLY_OFF_STATION:
                        case ARRIVE_OFF_STATION: {
                            TransParent apply = new TransParent();
                            apply.setTaskno(robotTaskCode);
                            apply.setTaskname(memo.getString("taskName"));
                            apply.setAgvCode(singleRobotCode);
                            String transType = memo.getString("TransType");
                            apply.setTransType(transType);
                            apply.setProductLineId(memo.getString("ProductLineId"));
                            if (transType.equals("02") || transType.equals("04") || transType.equals("06")) {
                                apply.setStationId(task.getSourceStaNo());
                            } else {
                                apply.setStationId(task.getStaNo());
                            }
                            if (RcsRetMethodEnum.APPLY_IN_STATION.getCode().equals(method)) {
                                mesService.applyInStation(apply);
                            } else if (RcsRetMethodEnum.APPLY_OFF_STATION.getCode().equals(method)) {
                                mesService.applyOutStation(apply);
                            } else if (RcsRetMethodEnum.ARRIVE_OFF_STATION.getCode().equals(method)) {
                                mesService.outStation(apply);
                            }
                        }
                        break;
                        case ARRIVE_ON_STATION: {
                            // TODO: 如果产线是运输起点,则不发送到站完成,暂时调试使用lG,未实现判断
                            if (rcsReporterTask.getCurrentSeq() == 0 && task.getSourceStaNo().startsWith("LG")) {
                                break;
                            }
                            EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>();
                            wapper2.eq("wrk_no", task.getWrkNo())
                                    .eq("matnr", memo.getString("Itemno"))
                                    .eq("order_no", memo.getString("OrderNo"));
                            TaskDetl taskDetl = taskDetlService.selectOne(wapper2);
                            TransArrivalStation arrivalStation = new TransArrivalStation();
                            arrivalStation.setTaskno(robotTaskCode);
                            arrivalStation.setTaskname(memo.getString("taskName"));
                            arrivalStation.setTuoPanId(taskDetl.getZpallet());  // memo.getString("TuoPanId")
                            arrivalStation.setProductLineId(memo.getString("ProductLineId"));
                            String transType = memo.getString("TransType");
                            arrivalStation.setDaotype(transType);
                            if (transType.equals("02") || transType.equals("04") || transType.equals("06")) {
                                arrivalStation.setStationID(task.getSourceStaNo());
                            } else {
                                arrivalStation.setStationID(task.getStaNo());
                            }
                            arrivalStation.setOrderNo(memo.getString("OrderNo"));
                            arrivalStation.setAgvCode(singleRobotCode);
                            arrivalStation.setItemno(memo.getString("Itemno"));
                            String memo2 = taskDetl.getMemo();
                            List<String> itemBarCode = new ArrayList<>();
                            Matcher matcher = Pattern.compile("\"([^\"]*)\"").matcher(memo2);
                            while (matcher.find()) {
                                itemBarCode.add(matcher.group(1));
                            }
                            arrivalStation.setItemBarcode(itemBarCode);
                            mesService.arriveOnStation(arrivalStation);
                        }
                        break;
                        default: {
                        }
                        break;
                    }
                    break;
                    case APPLY_IN_STATION:
                    case APPLY_OFF_STATION:
                    case ARRIVE_OFF_STATION: {
                        TransParent apply = new TransParent();
                        apply.setTaskno(robotTaskCode);
                        apply.setTaskname(memo.getString("taskName"));
                        apply.setAgvCode(singleRobotCode);
                        String transType = memo.getString("TransType");
                        apply.setTransType(transType);
                        apply.setProductLineId(memo.getString("ProductLineId"));
                        if (transType.equals("02") || transType.equals("04") || transType.equals("06")) {
                            apply.setStationId(task.getSourceStaNo());
                        } else {
                            apply.setStationId(task.getStaNo());
                        }
                        if (RcsRetMethodEnum.APPLY_IN_STATION.getCode().equals(method)) {
                            mesService.applyInStation(apply);
                        } else if (RcsRetMethodEnum.APPLY_OFF_STATION.getCode().equals(method)) {
                            mesService.applyOutStation(apply);
                        } else if (RcsRetMethodEnum.ARRIVE_OFF_STATION.getCode().equals(method)) {
                            mesService.outStation(apply);
                        }
                    }
                    break;
                    case ARRIVE_ON_STATION: {
                        // TODO: 如果产线是运输起点,则不发送到站完成,暂时调试使用lG,未实现判断
                        if (rcsReporterTask.getCurrentSeq() == 0 && task.getSourceStaNo().startsWith("LG")) {
                            break;
                        }
                        EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>();
                        wapper2.eq("wrk_no", task.getWrkNo())
                                .eq("matnr", memo.getString("Itemno"))
                                .eq("order_no", memo.getString("OrderNo"));
                        TaskDetl taskDetl = taskDetlService.selectOne(wapper2);
                        TransArrivalStation arrivalStation = new TransArrivalStation();
                        arrivalStation.setTaskno(robotTaskCode);
                        arrivalStation.setTaskname(memo.getString("taskName"));
                        arrivalStation.setTuoPanId(taskDetl.getZpallet());  // memo.getString("TuoPanId")
                        arrivalStation.setProductLineId(memo.getString("ProductLineId"));
                        String transType = memo.getString("TransType");
                        arrivalStation.setDaotype(transType);
                        if (transType.equals("02") || transType.equals("04") || transType.equals("06")) {
                            arrivalStation.setStationID(task.getSourceStaNo());
                        } else {
                            arrivalStation.setStationID(task.getStaNo());
                        }
                        arrivalStation.setOrderNo(memo.getString("OrderNo"));
                        arrivalStation.setAgvCode(singleRobotCode);
                        arrivalStation.setItemno(memo.getString("Itemno"));
                        String memo2 = taskDetl.getMemo();
                        List<String> itemBarCode = new ArrayList<>();
                        Matcher matcher = Pattern.compile("\"([^\"]*)\"").matcher(memo2);
                        while (matcher.find()) {
                            itemBarCode.add(matcher.group(1));
                        }
                        arrivalStation.setItemBarcode(itemBarCode);
                        mesService.arriveOnStation(arrivalStation);
                    }
                    break;
                    default: {
                    }
                    break;
                }
                // 返回RCS
                rcsReturn.setCode("SUCCESS");
                rcsReturn.setMessage("");
@@ -664,44 +666,44 @@
        String robotTaskCode = apply.getTaskno();
        String singleRobotCode = apply.getAgvCode();
        //华晓AGV申请
            if(Cools.isEmpty(apply.getMethod())){
                log.error("华晓AGV上报状态Method为空!");
                rcsReturn.setCode("Err_Internal");
                rcsReturn.setMessage("华晓AGV上报状态Method为空");
                JSONObject data = new JSONObject();
                data.put("robotTaskCode", robotTaskCode);
                rcsReturn.setData(data);
            }else {
                EntityWrapper<Task> wrapper = new EntityWrapper<>();
                wrapper.eq("task_no", robotTaskCode);
                Task task = taskService.selectOne(wrapper);
                String method = apply.getMethod();
                JSONObject memo = Cools.isEmpty(task) ? null : JSONObject.parseObject(task.getMemo());
                switch (method) {
                    case "APPLY_IN_STATION":
                    case "APPLY_OFF_STATION":
                    case "ARRIVE_OFF_STATION": {
                        //agv入站申请
                        if ("APPLY_IN_STATION".equals(method)) {
                            mesService.applyInStation(apply);
                            //agv离站请求
                        } else if ("APPLY_OFF_STATION".equals(method)) {
                            mesService.applyOutStation(apply);
                            //agv离站完成
                        } else {
                            mesService.outStation(apply);
                        }
                    } break;
                    default: {} break;
                }
            }
            // 返回RCS
            rcsReturn.setCode("SUCCESS");
            rcsReturn.setMessage("");
        if(Cools.isEmpty(apply.getMethod())){
            log.error("华晓AGV上报状态Method为空!");
            rcsReturn.setCode("Err_Internal");
            rcsReturn.setMessage("华晓AGV上报状态Method为空");
            JSONObject data = new JSONObject();
            data.put("robotTaskCode", robotTaskCode);
            rcsReturn.setData(data);
            //海康AGV状态反馈,及申请
        }else {
            EntityWrapper<Task> wrapper = new EntityWrapper<>();
            wrapper.eq("task_no", robotTaskCode);
            Task task = taskService.selectOne(wrapper);
            String method = apply.getMethod();
            JSONObject memo = Cools.isEmpty(task) ? null : JSONObject.parseObject(task.getMemo());
            switch (method) {
                case "APPLY_IN_STATION":
                case "APPLY_OFF_STATION":
                case "ARRIVE_OFF_STATION": {
                    //agv入站申请
                    if ("APPLY_IN_STATION".equals(method)) {
                        mesService.applyInStation(apply);
                        //agv离站请求
                    } else if ("APPLY_OFF_STATION".equals(method)) {
                        mesService.applyOutStation(apply);
                        //agv离站完成
                    } else {
                        mesService.outStation(apply);
                    }
                } break;
                default: {} break;
            }
        }
        // 返回RCS
        rcsReturn.setCode("SUCCESS");
        rcsReturn.setMessage("");
        JSONObject data = new JSONObject();
        data.put("robotTaskCode", robotTaskCode);
        rcsReturn.setData(data);
        //海康AGV状态反馈,及申请
        return rcsReturn;
    }
@@ -749,7 +751,7 @@
            {
                result.append(line);
            }
            log.info("recv - {}", result);
            log.info("rec - {}", result);
        }
        catch (ConnectException e)
        {