999
zhangc
2025-04-20 21caf282f3d903a729d72b3398e0dbedab7f244d
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -40,6 +40,7 @@
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.*;
@@ -98,6 +99,8 @@
    private LiftAction liftAction;
    @Autowired
    private BasWrkStatusService wrkStatusService;
    @Value("${asrs.wmsUrl}")
    private String wmsUrl;
    public boolean isInEnable(DevpThread devpThread, Integer staNo) {
@@ -184,8 +187,8 @@
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && isInEnable(devpThread, inSta.getStaNo()) && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) && staProtocol.isPakMk()) {
                        String barcode = staProtocol.getBarcode();
                        // 判断重复工作档
                        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", inSta.getStaNo()).eq("wrk_sts", WrkStsType.NEW_INBOUND.sts).eq("barcode", barcode));
                        if (wrkMast != null) {
                        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", inSta.getStaNo()).eq("barcode", barcode));
                        if (wrkMast != null && wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) {
                            News.error("工作档已存在,工作号={}", wrkMast.getWrkNo());
                            //判断时提升机侧,还是无提升机测
                            staProtocol.setWorkNo(Short.parseShort(String.valueOf(wrkMast.getWrkNo())));
@@ -195,14 +198,15 @@
                            wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts);
                            wrkMast.setModiTime(new Date());
                            wrkMastService.updateById(wrkMast);
                        } else if (wrkMast != null && wrkMast.getWrkSts() != WrkStsType.NEW_INBOUND.sts) {
                            continue;
                        }
                        try {
                            String wmsUrl = "192.168.10.201:8080/fyxcwms";
                            SearchLocParam param = new SearchLocParam();
                            param.setBarcode(barcode);
                            param.setIoType(1);
                            param.setSourceStaNo(inSta.getStaNo());
                            param.setLocType1(staProtocol.getLocType1().shortValue());
                            param.setLocType1((short) 1);
                            String response = new HttpHandler.Builder()
                                    .setUri(wmsUrl)
                                    .setPath("/rpc/pakin/loc/v1")
@@ -257,10 +261,58 @@
                                News.error("入库申请失败,任务数据={},请求响应={}", JSON.toJSON(param), JSON.toJSON(jsonObject));
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                            log.error("调用wms报错1,{}", e.getMessage());
                        }
                    }
                } else if (inSta.getStaNo() == 1012 || inSta.getStaNo() == 1022) {
                    // 获取入库站信息
                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                    StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                    if (staProtocol == null) {
                        continue;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    Short workNo = staProtocol.getWorkNo();
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && isInEnable(devpThread, inSta.getStaNo()) && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) && staProtocol.isPakMk()) {
                        String barcode = staProtocol.getBarcode();
                        // 判断重复工作档
                        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", inSta.getStaNo()).eq("barcode", barcode));
                        if (wrkMast == null) {
                            try {
                                SearchLocParam param = new SearchLocParam();
                                param.setBarcode(barcode);
                                param.setIoType(1);
                                param.setSourceStaNo(inSta.getStaNo());
                                param.setLocType1((short) 1);
                                String response = new HttpHandler.Builder()
                                        .setUri(wmsUrl)
                                        .setPath("/rpc/pakin/loc/v1")
                                        .setJson(JSON.toJSONString(param))
                                        .build()
                                        .doPost();
                                JSONObject jsonObject = JSON.parseObject(response);
                                Integer code = jsonObject.getInteger("code");
                                if (code.equals(200)) {
                                } else {
                                    String msg = jsonObject.getString("msg");
                                    HashMap<String, String> hashMap = new HashMap<>();
                                    hashMap.put("msg", msg);
                                    hashMap.put("sta", inSta.getStaNo().toString());
                                    new HttpHandler.Builder()
                                            .setUri(wmsUrl)
                                            .setPath("/rpc/led/getError")
                                            .setJson(JSON.toJSONString(hashMap))
                                            .build()
                                            .doPost();
                                    News.error("入库申请失败,任务数据={},请求响应={}", JSON.toJSON(param), JSON.toJSON(jsonObject));
                                }
                            } catch (Exception e) {
                                log.error("调用wms报错2,{}", e.getMessage());
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
@@ -300,7 +352,7 @@
                if (wrkMast.getStaNo() == 1026) {
                    locNo = "1200305";
                }
                boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_DEVP");
                boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_DEVP");
                if (!dispatchShuttle) {
                    News.info("{}任务,调度小车失败", wrkMast.getWrkNo());
                    continue;
@@ -347,18 +399,10 @@
            if (wrkMast.getStaNo() == 1024) {
                locNo = "1200305";
            }
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_DEVP");
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_DEVP");
            if (!dispatchShuttle) {
                News.info("{}任务,调度小车失败", wrkMast.getWrkNo());
                continue;
            } else {
                WrkMast wrkMast1 = wrkMastService.selectByMainWrkNo(wrkMast.getWrkNo());
                if (wrkMast1 == null) {
                    News.info("{}任务,调度小车失败,终于发现了", wrkMast.getWrkNo());
                    continue;
                } else {
                    News.info("{}任务,无提升机处调度小车成功", wrkMast.getWrkNo());
                }
            }
            wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts);
@@ -831,6 +875,8 @@
            short staNo = 1012;
            if (wrkMast.getSourceStaNo() == 1022) {
                staNo = 1023;
            } else if ( wrkMast.getSourceStaNo() == 1032) {
                staNo = 1032;
            }
            staProtocol = staProtocol.clone();
@@ -918,17 +964,14 @@
                    News.info("{}任务,{}站点,任务号不一致", wrkMast.getWrkNo(), staProtocol.getSiteId());
                    return false;
                }
                if (!station.get(1022).getBarcode().equals(wrkMast.getBarcode())) {
                    News.info("{}任务,{}站点,托盘码不匹配,站点托盘码:{},任务托盘码:{}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode());
                    return false;
                }
            } else {
            } else if (sourceStaNo == 1012) {
                if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) {
                    News.info("{}任务,{}站点,任务号不一致", wrkMast.getWrkNo(), staProtocol.getSiteId());
                    return false;
                }
                if (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) {
                    News.info("{}任务,{}站点,托盘码不匹配,站点托盘码:{},任务托盘码:{}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode());
            } else if (sourceStaNo == 1032 ) {
                if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) {
                    News.info("{}任务,{}站点,任务号不一致", wrkMast.getWrkNo(), staProtocol.getSiteId());
                    return false;
                }
            }
@@ -936,6 +979,8 @@
            String locNo = "0200305";
            if (wrkMast.getSourceStaNo() == 1012) {
                locNo = "0200301";
            } else if (wrkMast.getSourceStaNo() == 1032 ) {
                locNo = "0200308";
            }
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_LIFT");
            if (!dispatchShuttle) {
@@ -943,9 +988,13 @@
                return false;
            }
            int lev = 105;
            if (wrkMast.getSourceStaNo() == 1012) {
                lev = 101;
            int lev = 101;
            if (wrkMast.getSourceStaNo() == 1021) {
                //TODO
                // lev = 105;
                lev = 1021;
            } else if ( wrkMast.getSourceStaNo() == 1031) {
                lev = 1031;
            }
            //获取提升机命令
            List<LiftCommand> liftCommands = liftThread.getPalletInCommand(wrkMast.getWrkNo(), sourceStaNo, lev);
@@ -1034,7 +1083,7 @@
    public synchronized void liftOutExecute() {
        try {
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_OUTBOUND.sts, WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts).in("sta_no", 1011, 1021));
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_OUTBOUND.sts, WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts).in("sta_no", 1011, 1021, 1031));
            for (WrkMast wrkMast : wrkMasts) {
                boolean step1 = this.liftOutExecuteStep1(wrkMast);//触发搬运任务
                if (!step1) {
@@ -1078,6 +1127,8 @@
            String locNo = "0200305";
            if (wrkMast.getStaNo() == 1011) {
                locNo = "0200301";
            } else if (wrkMast.getStaNo() == 1031) {
                locNo = "0200308";
            }
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_LIFT");
            if (!dispatchShuttle) {
@@ -2095,12 +2146,13 @@
    }
    private void shuttleMoveExecuteTransportNoLift(WrkMast wrkMast) {
        if (12 == Utils.getRow(wrkMast.getSourceLocNo()) && 3 == Utils.getBay(wrkMast.getSourceLocNo())) {
        WrkMast mainWrk = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo());
        if (mainWrk != null && mainWrk.getIoType() == 1) {
            //入库
            noLiftInService.shuttleMoveExecute(wrkMast);
        } else {
            noLiftInService.shuttleMoveExecute(wrkMast, mainWrk.getStaNo(), Utils.getLev(mainWrk.getLocNo()));
        } else if (mainWrk != null && mainWrk.getIoType() == 101) {
            //出库
            noLiftOutService.shuttleMoveExecute(wrkMast);
            noLiftOutService.shuttleMoveExecute(wrkMast, mainWrk.getStaNo(), Utils.getLev(mainWrk.getSourceLocNo()));
        }
    }
@@ -2111,31 +2163,21 @@
    public synchronized void ioConvert() {
        try {
            // 根据输送线plc遍历
            FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
            for (DevpSlave.Sta inSta : devp.getInSta()) {
                WrkMast pakout = wrkMastMapper.selectWorkingPakout(inSta.getBackSta());
                switch (inSta.getBackSta()) {
                    case 116:
                        if (pakout != null) {
                            if (devpThread.ioModeOf1F1 != IoModeType.PAKOUT_MODE) {
                                // 出库切换中
                                devpThread.ioModeOf1F1 = IoModeType.PAKOUT_BOOTING;
                                WrkMast pakin = wrkMastMapper.selectWorkingPakin(inSta.getStaNo());
                                if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading()
                                        && !devpThread.getStation().get(inSta.getBackSta()).isLoading()
                                        && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) {
                                    // 出库模式
                                    devpThread.ioModeOf1F1 = IoModeType.PAKOUT_MODE;
                                }
                            }
                        } else {
                            // 入库模式
                            devpThread.ioModeOf1F1 = IoModeType.PAKIN_MODE;
                        }
                        break;
            FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
            WrkMast pakout = wrkMastService.selectWorkingPakout(1032);
            if (pakout != null) {
                if (devpThread.ioModeOf2_5 != IoModeType.PAKOUT_MODE) {
                    // 出库切换中
                    WrkMast pakin = wrkMastService.selectWorkingPakin(1032);
                    if (pakin == null && !devpThread.getStation().get(1031).isLoading()
                            && !devpThread.getStation().get(1032).isLoading()) {
                        // 出库模式
                        devpThread.ioModeOf2_5 = IoModeType.PAKOUT_MODE;
                    }
                }
            } else {
                // 入库模式
                devpThread.ioModeOf2_5 = IoModeType.PAKIN_MODE;
            }
        } catch (Exception e) {
            e.printStackTrace();