Junjie
2023-12-12 e6e5c8240df979e71167283b8749adea99fc5160
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -633,10 +633,6 @@
            for (DevpSlave devp : slaveProperties.getDevp()) {
                // 遍历拣料入库口
                for (DevpSlave.Sta pickSta : devp.getPickInSta()) {
//                if (pickSta.getStaNo() == 325 || pickSta.getStaNo() == 331 || pickSta.getStaNo() == 333 || pickSta.getStaNo() == 339) {
//                    continue;
//                }
                    // 获取拣料入库站信息
                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                    StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
@@ -648,10 +644,33 @@
                    if (staProtocol.isAutoing()
                            && staProtocol.isLoading()
                            && staProtocol.isInEnable()
                            && (staProtocol.getWorkNo() > 0)
//                            && (staProtocol.getWorkNo() > 0)
                            && staProtocol.isPakMk()) {
                        WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue());
                        WrkMast wrkMast = null;
                        if (pickSta.getStaNo() == 325 || pickSta.getStaNo() == 331 || pickSta.getStaNo() == 333 || pickSta.getStaNo() == 339) {
                            if (staProtocol.getWorkNo() == 0) {
                                continue;
                            }
                            //根据工作号搜索工作档
                            wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue());
                        }else {
                            //根据托盘码搜索工作档
                            // 获取条码扫描仪信息
                            BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
                            if (barcodeThread == null) {
                                continue;
                            }
                            String barcode = barcodeThread.getBarcode();
                            if (Cools.isEmpty(barcode)) {
                                continue;
                            }
                            if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) {
                                continue;
                            }
                            wrkMast = wrkMastMapper.selectByBarcode(barcode);
                        }
                        if (wrkMast == null) {//找不到工作档
                            continue;
                        }
@@ -660,28 +679,6 @@
                                || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                            continue;
                        }
                        //*********************同库位组校验*********************
                        boolean flag = false;
                        String th = "";
                        List<String> innerLoc = Utils.getGroupInnerLoc(wrkMast.getSourceLocNo());
                        for (String loc : innerLoc) {
                            LocMast locMast = locMastService.selectById(loc);
                            if (locMast == null) {
                                continue;
                            }
                            if (!locMast.getLocSts().equals("F")) {
                                flag = true;
                                th = loc + "库位存在未回库任务";
                                break;
                            }
                        }
                        if (flag) {
                            News.info(th);
                            continue;
                        }
                        //*********************同库位组校验*********************
                        // 保存工作主档历史档
                        if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
@@ -696,7 +693,7 @@
                            param.setWrkNo(wrkMast.getWrkNo());
                            param.setBarcode(wrkMast.getBarcode());
                            param.setIoType(107);//盘点
                            param.setSourceStaNo(wrkMast.getStaNo());
                            param.setSourceStaNo(pickSta.getStaNo());
                            param.setLocType1(locMast.getLocType1());
                            String response = new HttpHandler.Builder()
                                    .setUri(wmsUrl)
@@ -1301,6 +1298,15 @@
            if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && !liftStaProtocol.getHasTray())) {
                News.info("{}任务,{}内部输送站,不满足自动、空闲、无托盘状态", wrkMast.getWrkNo(), liftStaProtocol.getStaNo());
                return false;//站点必须自动、空闲、没有托盘
            }
            if (wrkMast.getStaNo() == 300) {
                //出300站,检测300站任务数量
                List<WrkMast> wrkMasts = wrkMastMapper.select300Wrk();
                if (wrkMasts.size() >= 4) {
                    News.info("{}任务,输送线任务过载{}", wrkMast.getWrkNo(), wrkMasts.size());
                    return false;
                }
            }
            if (wrkMast.getShuttleNo() == null) {//没有绑定小车,进行调度
@@ -2923,8 +2929,7 @@
                            Utils.wapperSetCondition(wrapper, "three_code", locDetl.getThreeCode());
                            Utils.wapperSetCondition(wrapper, "dead_time", locDetl.getDeadTime());
                            Utils.wapperSetCondition(wrapper, "supp_code", locDetl.getSuppCode());//料箱码
                            WrkDetl detl = wrkDetlService.selectOne(wrapper);
                            List<WrkDetl> detl = wrkDetlService.selectList(wrapper);
                            if (Cools.isEmpty(detl)) {
                                String suppCode = "";
                                if (locDetl.getSuppCode() != null) {
@@ -2932,23 +2937,21 @@
                                }
                                ledCommand.getMatDtos().add(new MatDto(locDetl.getMatnr(), locDetl.getMaktx(), 0D, locDetl.getAnfme(), locDetl.getSpecs(), suppCode));
                            } else {
                                String suppCode = "";
                                String orderNo = detl.getOrderNo();
                                if (detl.getSuppCode() != null) {
                                    suppCode = detl.getSuppCode();
                                //出库数量累计
                                Double conut = 0.0;
                                for (WrkDetl wrkDetl : detl) {
                                    conut = conut + wrkDetl.getAnfme();
                                }
                                if (isJson(orderNo)) {
                                    JSONArray orders = JSON.parseArray(orderNo);
                                    for (Object order : orders) {
                                        JSONObject order1 = (JSONObject) order;
                                        ledCommand.getMatDtos().add(new MatDto(detl.getMatnr(), detl.getMaktx(), (Double) order1.get("anfme"), (locDetl.getAnfme() - detl.getAnfme()), detl.getSpecs(), suppCode, (String) order1.get("orderNo")));
                                for (WrkDetl wrkDetl : detl) {
                                    String suppCode = "";
                                    if (wrkDetl.getSuppCode() != null) {
                                        suppCode = wrkDetl.getSuppCode();
                                    }
                                } else {
                                    ledCommand.getMatDtos().add(new MatDto(detl.getMatnr(), detl.getMaktx(), detl.getAnfme(), (locDetl.getAnfme() - detl.getAnfme()), detl.getSpecs(), suppCode, detl.getOrderNo()));
                                    ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), (locDetl.getAnfme() - conut), wrkDetl.getSpecs(), suppCode, wrkDetl.getOrderNo()));
                                }
                            }
                        });
                        if (locDetls.isEmpty()) {
@@ -3956,63 +3959,36 @@
        return true;
    }
    /**
     * 出入库模式切换
     */
    public synchronized void outAndIn() {
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
                for (DevpSlave.Sta inSta : devp.getInSta()) {
                    Thread.sleep(500);
                    boolean a=true,b=true;
                    List<WrkMast> wrkMasts = wrkMastMapper.selectAll(inSta.getStaNo());
                    if (Cools.isEmpty(wrkMasts)){
                        b=false;
                    }else {
                        for (WrkMast wrkMast:wrkMasts){
                            if (wrkMast.getSourceStaNo() > wrkMast.getStaNo()){
                                a=false;
                                break;
                            }
                        }
                    }
                    switch (inSta.getStaNo()) {
                        case 102://1F
                            if (a && b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 11));
                            }else if (b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 12));
                            }else {
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 10));
                            }
                            break;
                        case 202://2F
                            if (a && b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 21));
                            }else if (b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 22));
                            }else {
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 20));
                            }
                            break;
                        case 302://3F
                            if (a && b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 31));
                            }else if (b){
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 32));
                            }else {
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 30));
                            }
                            break;
                    }
                }
    //扫描设备PakMk标记是否超时
    public synchronized void scanDevicePakMk() {
        //扫描小车
        for (ShuttleSlave slave : slaveProperties.getShuttle()) {
            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId());
            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
            if (shuttleProtocol == null) {
                continue;
            }
        } catch (Exception e) {
            e.printStackTrace();
            if ((System.currentTimeMillis() - shuttleProtocol.getSendTime() > (1000*60*5)) && shuttleProtocol.getPakMk()) {
                //设备超过5分钟还没复位标记
                shuttleProtocol.setPakMk(false);//复位标记
            }
        }
    }
        //扫描提升机
        for (LiftSlave slave : slaveProperties.getLift()) {
            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId());
            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
            if (liftProtocol == null) {
                continue;
            }
            if ((System.currentTimeMillis() - liftProtocol.getSendTime() > (1000*60*5)) && liftProtocol.getPakMk()) {
                //设备超过5分钟还没复位标记
                liftProtocol.setPakMk(false);//复位标记
            }
        }
    }
}