自动化立体仓库 - WMS系统
pang.jiabao
1 天以前 b51e3b3d5bb721cec65952498d1c2c882d1a01d6
src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -4,6 +4,7 @@
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
@@ -272,6 +273,7 @@
     * @param mesOutApply
     * @return 1 成功;-1 订单重复;
     */
    @Transactional
    public int outBoundOrder(MesInApply mesOutApply){
        // docType根据库类型确定
@@ -300,7 +302,7 @@
        orderPakout.setMemo(JSONObject.toJSONString(mesOutApply));
        orderPakout.setPakinPakoutStatus(2);
        if (!orderPakoutService.insert(orderPakout)) {
            log.error("MES保存出库订单主档失败");
            log.error("MES保存出库订单主档失败:{}",orderPakout);
            throw new CoolException("保存出库订单主档失败");
        }
@@ -310,7 +312,7 @@
            OrderDetlPakout orderDetlPakout = new OrderDetlPakout();
            orderDetlPakout.setOrderId(orderPakout.getId());
            orderDetlPakout.setOrderNo(orderPakout.getOrderNo());
            orderDetlPakout.setAnfme(Double.valueOf(item.getAnfme()));
            orderDetlPakout.setAnfme(item.getAnfme());
            orderDetlPakout.setQty(0.0);
            orderDetlPakout.setMatnr(mat.getMatnr());
            orderDetlPakout.setMaktx(mat.getMaktx());
@@ -323,61 +325,37 @@
            orderDetlPakout.setStatus(1);
            orderDetlPakout.setPakinPakoutStatus(2);
            if (!orderDetlPakoutService.insert(orderDetlPakout)) {
                log.error("MES保存出库订单明细档失败");
                log.error("MES保存出库订单明细档失败:{}",orderDetlPakout);
                throw new CoolException("保存出库订单明细档失败");
            }
        }
        // TODO:CTU出库动作
        // todo 呼叫agv产线取空料架
        // TODO:若AGV和输送线没有安全交互,则要保证立库出货完成后再呼叫AGV。
        // 立库生成订单后,自动调度AGV从产线运输空刀架至立库缓存区。
        try {
            if (!StringUtils.isEmpty(mesOutApply.getTaskNo()) && !StringUtils.isEmpty(mesOutApply.getStationId())) {
                TransTask transTask = new TransTask();
                transTask.setTaskno(mesOutApply.getTaskNo());
//                        transTask.setTaskname(mesOutApply.getTaskname());
                transTask.setTaskname(mesOutApply.getTaskname());
                transTask.setOrderNo(mesOutApply.getOrderNo());
                transTask.setTransType("02");    //运回刀架时默认02(下空托) mesOutApply.getTransType()
                transTask.setCurProcess(mesOutApply.getProductLineId());
                transTask.setCurStationId(mesOutApply.getStationId());
//                        transTask.setNextProcess();
                transTask.setNextStationId(WMS_TRANS_START_STATION_1);
                transTask.setNextProcess(mesOutApply.getProductLineId());
                transTask.setNextStationId(mesOutApply.getNextStationId());
//                transTask.setItemno(mesOutApply.getItemNo());
                transTask.setQty(0);
                transTask.setQty(1);
                transTask.setProductLineId(mesOutApply.getProductLineId());
//                        transTask.setItemBarcode(codes);
//                        transTask.setTuoPanId(entry.getKey());
                transTask.setDjNo(mesOutApply.getDjNo());
                transTask.setOperateType(1);
                transTask.setAgvFactory(1);
                JSONObject sendAgvTask = submitTask(transTask);
                if (!"1".equals(sendAgvTask.getString("Success"))) {
                    log.error("出库下发agv运输任务失败", JSONObject.toJSONString(transTask));
                    log.error("出库下发agv运输任务失败:{}", JSONObject.toJSONString(transTask));
                }
//                // 按零件二维码查询有几个托,多托生成多个任务,每托对应零件二维码
////                String barCode = barCodeListToStr(mesOutApply.getItemBarcode());
//                EntityWrapper<MatItemBarcode> matItemBarcodeEntityWrapper = new EntityWrapper<>();
//                matItemBarcodeEntityWrapper.in("item_barcode", barCode);
//                List<MatItemBarcode> barcodes = matItemBarcodeMapper.selectList(matItemBarcodeEntityWrapper);
//                if (barcodes != null) {
//                    Map<String, List<MatItemBarcode>> map = barcodes.stream().collect(Collectors.groupingBy(MatItemBarcode::getZapplet));
//                    for (Map.Entry<String, List<MatItemBarcode>> entry : map.entrySet()) {
//                        List<MatItemBarcode> list = entry.getValue();
//                        List<String> codes = new ArrayList<>();
//                        for (MatItemBarcode zapllet : list) {
//                            codes.add(zapllet.getItemBarcode());
//                        }
//
//
//                    }
//                }
            }
        } catch (Exception e) {
            log.error("下发AGV运输任务失败", e);
        }
        return 1;
    }
@@ -423,6 +401,7 @@
     * @param mesInApply
     * @return 1 成功;-1 入库订单重复;0 部分失败;
     */
    @Transactional
    public int inBoundOrder(MesInApply mesInApply, int check){
        // docType根据库类型确定
@@ -461,7 +440,7 @@
            OrderDetlPakin orderDetlPakin = new OrderDetlPakin();
            orderDetlPakin.setOrderId(orderPakin.getId());
            orderDetlPakin.setOrderNo(orderPakin.getOrderNo());
            orderDetlPakin.setAnfme(Double.valueOf(item.getAnfme()));
            orderDetlPakin.setAnfme(item.getAnfme());
            orderDetlPakin.setQty(0.0);
            orderDetlPakin.setMatnr(mat.getMatnr());
            orderDetlPakin.setMaktx(mat.getMaktx());
@@ -483,6 +462,28 @@
            }
        }
        // 呼叫agv搬运
        if (!StringUtils.isEmpty(mesInApply.getTaskNo())) {
            TransTask transTask = new TransTask();
            transTask.setTaskno(mesInApply.getTaskNo());
            transTask.setTaskname(mesInApply.getTaskNo());
            transTask.setOrderNo(mesInApply.getOrderNo());
            transTask.setTransType(mesInApply.getTransType());
            transTask.setCurProcess(mesInApply.getProductLineId());
            transTask.setCurStationId(mesInApply.getStationId());
            transTask.setNextStationId(WMS_TRANS_START_STATION_1);
//            transTask.setItemno(mesInApply.get());
//            transTask.setQty(mesInApply.getQty());
            transTask.setProductLineId(mesInApply.getProductLineId());
//            transTask.setItemBarcode(itemBarcode);
            transTask.setDjNo(mesInApply.getDjNo());
            transTask.setOperateType(1);
            transTask.setAgvFactory(1);
            JSONObject sendAgvTask = submitTask(transTask);
            if (!"1".equals(sendAgvTask.getString("Success"))) {
                log.error("出库下发agv运输任务失败:{}", JSONObject.toJSONString(transTask));
            }
        }
//        // TODO:是否绑定货物和托盘?
@@ -726,11 +727,32 @@
        List<Task> tasks = taskService.selectList(wrapper);
        if (tasks != null && !tasks.isEmpty()) {
            result.put("Success", "2");
            result.put("Message", "任务重复发送");
            result.put("Message", "任务号重复发送:" + transTask.getTaskno());
            return result;
        }
        try {
        // 下发给RCS
        RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
        // 模板名
        rcsTaskSubmit.setTaskType("CS");
        rcsTaskSubmit.setRobotTaskCode(transTask.getTaskno());
        rcsTaskSubmit.setInitPriority(10);  //默认10
        List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
        RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute();
        startRoute.setSeq(0);
        startRoute.setCode(transTask.getCurStationId());
        startRoute.setOperation("COLLECT");
        targetRouteList.add(startRoute);
        RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute();
        endRoute.setSeq(1);
        endRoute.setCode(transTask.getNextStationId());
        endRoute.setOperation("DELIVERY");
        targetRouteList.add(endRoute);
        rcsTaskSubmit.setTargetRoute(targetRouteList);
        // 转发给海康或华晓RCS
        RcsReturn rcsReturn = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
        if (rcsReturn.getCode().equals("SUCCESS")) {
            int workNo = commonService.getWorkNo(WorkNoType.OTHER.type);
            Date now = new Date();
            Task task = new Task();
@@ -747,87 +769,30 @@
            task.setAppeUser(defaultUserId);
            task.setAppeTime(now);
            task.setTaskNo(transTask.getTaskno());
            task.setBarcode(transTask.getDjNo()); // 刀架号
            task.setMemo(JSONObject.toJSONString(transTask));
            taskService.insert(task);
            if (taskService.insert(task)) {
                Mat mat = matService.selectByMatnr("emptyDj");
                TaskDetl taskDetl = new TaskDetl();
                taskDetl.setWrkNo(task.getWrkNo());
                taskDetl.setIoTime(task.getIoTime());
                taskDetl.setMatnr(mat.getMatnr());
                taskDetl.setAnfme(0.0);
                taskDetl.setStandby1(String.valueOf(transTask.getQty()));
                taskDetl.setMaktx(mat.getMaktx());
                taskDetl.setSpecs(mat.getSpecs());
                taskDetl.setOrderNo(transTask.getOrderNo());
                taskDetl.setModiUser(defaultUserId);
                taskDetl.setModiTime(now);
                taskDetl.setAppeUser(defaultUserId);
                taskDetl.setAppeTime(now);
                taskDetlService.insert(taskDetl);
            Mat mat = matService.selectByMatnr("emptyDj");
            TaskDetl taskDetl = new TaskDetl();
            taskDetl.setWrkNo(task.getWrkNo());
            taskDetl.setIoTime(task.getIoTime());
            taskDetl.setMatnr(mat.getMatnr());
            taskDetl.setAnfme(1.0);
            taskDetl.setMaktx(mat.getMaktx());
            taskDetl.setSpecs(mat.getSpecs());
            taskDetl.setOrderNo(transTask.getOrderNo());
            taskDetl.setModiUser(defaultUserId);
            taskDetl.setModiTime(now);
            taskDetl.setAppeUser(defaultUserId);
            taskDetl.setAppeTime(now);
            taskDetlService.insert(taskDetl);
            result.put("Success", "1");
            result.put("Message", "任务接收成功");
//                EntityWrapper<WaitPakin> wrapper1 = new EntityWrapper<>();
//                wrapper1.eq("order_no", transTask.getTaskno())
//                        .eq("matnr", mat.getMatnr())
//                        .eq("anfme", transTask.getQty());
//                WaitPakin waitPakin = waitPakinService.selectOne(wrapper1);
//                if (waitPakin != null)
//                {
//                    TaskDetl taskDetl = new TaskDetl();
//                    taskDetl.setWrkNo(task.getWrkNo());
//                    taskDetl.setIoTime(task.getIoTime());
//                    taskDetl.setMatnr(transTask.getItemno());
//                taskDetl.setAnfme(Double.valueOf(transTask.getQty()));
//                    taskDetl.setAnfme(0.0);
//                    taskDetl.setStandby1(String.valueOf(transTask.getQty()));
//                    taskDetl.setZpallet(waitPakin.getZpallet());
//                    taskDetl.setMaktx(mat.getMaktx());
//                    taskDetl.setSpecs(mat.getSpecs());
//                    taskDetl.setOrderNo(transTask.getOrderNo());
//                    taskDetl.setModiUser(defaultUserId);
//                    taskDetl.setModiTime(now);
//                    taskDetl.setAppeUser(defaultUserId);
//                    taskDetl.setAppeTime(now);
//                    taskDetlService.insert(taskDetl);
//                }
//                else {
//                    result.put("Success", "2");
//                    result.put("Message", "接收任务失败");
//                    // Throw
//                }
                // 下发给RCS
                RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
                rcsTaskSubmit.setRobotTaskCode(transTask.getTaskno());
                rcsTaskSubmit.setInitPriority(10);  //默认10
                List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
                RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute();
                startRoute.setSeq(0);
                startRoute.setCode(transTask.getCurStationId());
                startRoute.setOperation("COLLECT");
                targetRouteList.add(startRoute);
                RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute();
                endRoute.setSeq(1);
                endRoute.setCode(transTask.getNextStationId());
                endRoute.setOperation("DELIVERY");
                targetRouteList.add(endRoute);
                rcsTaskSubmit.setTargetRoute(targetRouteList);
                // 转发给海康或华晓RCS
                int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
                if (success == 1) {
                    result.put("Success", "1");
                    result.put("Message", "任务接收成功");
                } else {
                    result.put("Success", "2");
                    result.put("Message", "任务下发给RCS失败");
                }
            } else {
                result.put("Success", "2");
                result.put("Message", "接收任务失败");
            }
        } catch (Exception e) {
            log.error("下发运输任务错位 - {}", transTask, e);
        } else {
            result.put("Success", "2");
            result.put("Message", "任务下发给RCS失败");
        }
        return result;
@@ -1061,9 +1026,8 @@
            task.setMemo(JSONObject.toJSONString(transTask));
            taskService.updateById(task);
            // 转发给海康或华晓RCS
            int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
            if (success == 1) {
            RcsReturn rcsReturn = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
            if (rcsReturn.getCode().equals("SUCCESS")) {
                flag = true;
            }
        } catch (Exception e) {