#
1
4 天以前 09358392b9c559ebbc9503f1cecea3b7ab3e6c2c
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -83,6 +83,8 @@
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private BasErrLogService basErrLogService;
@@ -146,7 +148,6 @@
                if(!staProtocol.isLoading()){
                    continue;
                }
                if (barcodeThread == null) {
                    continue;
                }
@@ -221,30 +222,29 @@
                        && !staProtocol.isEmptyMk()
                        && staProtocol.isPakMk()
                        && staProtocol.getWorkNo() == 0
                        && !barcode.equals("0")
                        && !Cools.isEmpty(barcode)
                ) {
                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
//                        News.error(JSON.toJSONString(staProtocol));
                        News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
                        // led 异常显示
                        if (ledThread != null) {
                            String errorMsg = "扫码失败,请重试";
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                        }
                        staProtocol.setWorkNo(wrkNo);
                        staProtocol.setErrCode(errMsg);
                        News.info("条码判断{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo);
                        wrkNo++;
                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
                        staProtocol.setBarcode(barcode);
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        log.error("输送线下发1:"+wrkNo+","+inSta.getBackSta());
                        continue;
                    }
                    if(barcode.equals("0")){
                        continue;
                    }
//                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
////                        News.error(JSON.toJSONString(staProtocol));
//                        News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
//                        // led 异常显示
//                        if (ledThread != null) {
//                            String errorMsg = "扫码失败,请重试";
//                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
//                        }
//                        staProtocol.setWorkNo(wrkNo);
//                        staProtocol.setErrCode(errMsg);
//                        News.info("条码判断{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo);
//                        wrkNo++;
//                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
//                        staProtocol.setBarcode(barcode);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
//                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//                        log.error("输送线下发1:"+wrkNo+","+inSta.getBackSta());
//                        continue;
//                    }
//                    if (staProtocol.getSiteId()!= 159){
//                        if( Cools.isEmpty(barcodeMat) || "NG".endsWith(barcodeMat) || "NoRead".equals(barcodeMat) || "00000000".equals(barcodeMat)) {
//                            News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcodeMat(), barcodeMat);
@@ -326,15 +326,6 @@
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            log.error("输送线下发2:"+dto.getWorkNo()+","+dto.getStaNo());
                            if(staProtocol.getSiteId() == 1036){ //1036
                                BasAgvMast basAgvMast = basAgvMastService.selectOne(new EntityWrapper<BasAgvMast>().eq("sta_no", 1037));
                                AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast);
                                agvBindCtnrAndBinParam.setCtnrCode(barcode);
                                ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam);
                                if (resultBind.getCode()!=200){
                                    agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV容器绑定解绑", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false);
                                }
                            }
                            ledThread.errorReset();
                            log.error("组托请求后LED错误清除");
@@ -934,16 +925,23 @@
     */
    public synchronized void connectWrk(Integer mark) {
        for (DevpSlave devp : slaveProperties.getDevp()) {
            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
            StaProtocol staProtocolIn = devpThread.getStation().get(4001);
            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
            SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
            StaProtocol staProtocolIn = devpThread2.getStation().get(4001);
            if (staProtocolIn == null) {
                continue;
            } else {
                staProtocolIn = staProtocolIn.clone();
            }
            int[] outStaNos = {1015, 2016}; //衔接入库点
            int[] outStaNos = {1015,2016}; //衔接入库点
            for (int outStaNo : outStaNos) {
                StaProtocol staProtocolOut = devpThread.getStation().get(outStaNo);// 盘点出库衔接站点(可能是 1015,也可能是 2016)
                StaProtocol staProtocolOut =null;
                if(outStaNo == 2016){
                    staProtocolOut = devpThread2.getStation().get(outStaNo);
                }else{
                    staProtocolOut = devpThread.getStation().get(outStaNo);
                }
                if (staProtocolOut == null) {
                    continue;
                } else {
@@ -2872,6 +2870,8 @@
    public synchronized void autoEmptyOut() {
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
        List<Integer> list = new ArrayList<>();
        list.add(1108);list.add(2031);
        for (Integer site:list){
@@ -2885,7 +2885,7 @@
            //如果站点可出禁用,则不生成空盘出库任务
            switch (site){
                case 1108:staProtocol = devpThread.getStation().get(site - 2);break;
                case 2031:staProtocol = devpThread.getStation().get(site);break;
                case 2031:staProtocol = devpThread2.getStation().get(site);break;
            }
            if (staProtocol == null) {
                return;
@@ -3753,7 +3753,7 @@
                try{
                    wrkMastSta.setWrkSts(1);
                    wrkMastStaMapper.updateById(wrkMastSta);
                    log.error("更新小车任务成功");
                    log.error("更新小车任务成功{}",wrkMastSta);
                }catch (Exception e){
                    log.error("更新小车任务失败");
                }
@@ -3850,7 +3850,7 @@
                continue;
            }
            if(wrkMastSta != null &&LEFT_POSITION.contains(wrkMastSta.getStaEnd())){
            if( LEFT_POSITION.contains(wrkMastSta.getStaEnd())){
                StaProtocol staProtocolSta = devpThread.getStation().get(wrkMastSta.getStaEnd());
                if (staProtocolSta == null) {
                    News.infoNoLog("" + mark + " - 1" + " - 1" + " - Rgv入库站信息(staProtocol!=null继续执行):staProtocol=" + staProtocol);
@@ -3902,7 +3902,7 @@
                try{
                    wrkMastSta.setWrkSts(1);
                    wrkMastStaMapper.updateById(wrkMastSta);
                    log.error("更新小车任务成功");
                    log.error("更新小车任务成功{}",wrkMastSta);
                }catch (Exception e){
                    log.error("更新小车任务失败");
                }
@@ -4409,6 +4409,111 @@
    /*
     * arm任务完成自动组托
     * */
    public synchronized void  armMissionAccomplished1() {
        try{
            for (DevpSlave devp : slaveProperties.getDevp()) {
                // 遍历拣料入库口
                for (DevpSlave.Sta armSta : devp.getArmStaTwo()) {
                    // 获取站点信息
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                    StaProtocol staProtocol = devpThread.getStation().get(armSta.getStaNo());
                    if (staProtocol == null) {
                        continue;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    String barcode = staProtocol.getBarcode();
                    if(!Cools.isEmpty(barcode)) {
                        if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "0".equals(barcode) || barcode.length()<5) {
                            armTaskAssignmentCallApiLogSave(staProtocol, "托盘条码为空", staProtocol.getSiteId()+"码垛位置,===》托盘条码为空", false);
                            continue;
                        }
                    } else {
                        armTaskAssignmentCallApiLogSave(staProtocol, "托盘条码为空", staProtocol.getSiteId()+"码垛位置,===》托盘条码为空", false);
                        continue;
                    }
                    String[] barcodeList = barcode.split(";");
                    String[][] barcodeArr = new String[barcodeList.length / 2][2];
                    int i = 0;
                    for (String[] barcodes : barcodeArr){
                        barcodes[0]=barcodeList[i];
                        i++;
                        barcodes[1]=barcodeList[i];
                        i++;
                    }
                    ArmBarcodeTwoParam armBarcodeTwoParam = new ArmBarcodeTwoParam(barcodeArr);
                    if (!armBarcodeTwoParam.allBool()){
                        continue;
                    }
                    List<BasArmMast> basArmMastList = basArmMastService.selectList(
                            new EntityWrapper<BasArmMast>()
                                    .eq("arm_no", armSta.getArmNo())
                                    .lt("status", 2)
                    );
                    if (!basArmMastList.isEmpty()){
                        armTaskAssignmentCallApiLogSave(staProtocol, armSta.getArmNo()+"号机械臂存在未完成任务", staProtocol.getSiteId()+"机械臂,===》存在未完成任务", false);
                        continue;
                    }
                    List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().eq("arm_no",armSta.getArmNo()));
                    boolean sign = true;
                    for (BasArm basArm : basArmList){
                        if (basArm.getStaNo()==2){//NG
                            continue;
                        }
                        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", basArm.getStaNoSou()));
                        if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("D")){
                            continue;
                        }
                        List<BasArmMast> basArmMastList2 = basArmMastService.selectList(
                                new EntityWrapper<BasArmMast>()
                                        .eq("arm_no", basArm.getArmNo())
                                        .eq("sorting_line", basArm.getSortingLineSou())
                                        .eq("sta_no", basArm.getStaNoSou())
                                        .eq("status", 2)
                        );
                        if (!basArmMastList2.isEmpty()){
                            BasArmMast basArmMast2 = basArmMastList2.get(0);
                            if (!armBarcodeTwoParam.allBool(basArmMast2)){
                                continue;
                            }
                        }
                        BasArmMast basArmMast = new BasArmMast(armBarcodeTwoParam);
                        basArmMast.setArmNo(basArm.getArmNo());
                        basArmMast.setStaNo(basArm.getStaNoSou());
                        basArmMast.setSortingLine(basArm.getSortingLineSou());
                        basArmMastService.insert(basArmMast);
                        sign = false;
                        break;
                    }
                    if (sign){
                        for (BasArm basArm : basArmList){
                            if (basArm.getStaNo()==2){//NG
                                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", basArm.getStaNoSou()));
                                if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("D")){
                                    continue;
                                }
                                BasArmMast basArmMast = new BasArmMast(armBarcodeTwoParam);
                                basArmMast.setArmNo(basArm.getArmNo());
                                basArmMast.setStaNo(basArm.getStaNoSou());
                                basArmMast.setSortingLine(basArm.getSortingLineSou());
                                basArmMastService.insert(basArmMast);
                                break;
                            }
                        }
                    }
                }
            }
        } catch (Exception e){
            log.error("机械臂抓取任务完成组托失败"+e.getMessage());
        }
    }
    /*
     * arm任务完成自动组托
     * */
    public synchronized void  armMissionAccomplished2() {
        try{
            List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().gt("arm_no",4));
@@ -4425,6 +4530,7 @@
                            new EntityWrapper<BasArmMast>()
                                    .eq("arm_no", basArm.getArmNo())
                                    .eq("sorting_line", basArm.getSortingLineSou())
                                    .eq("sta_no", basArm.getStaNoSou())
                                    .eq("status", 3)
                    );
                    if (basArmMastList.isEmpty()){
@@ -4617,16 +4723,21 @@
                                }
                            }
                            OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getMatnr());
                            if (Cools.isEmpty(orderDetlValueResultUtil)){
                                continue;
                            }
//                            OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getMatnr());
//                            if (Cools.isEmpty(orderDetlValueResultUtil)){
//                                continue;
//                            }
                            OrderDetlValueResultUtil orderDetlValueResultUtil = new OrderDetlValueResultUtil();
                            Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", basArmMast.getMatnr()));
                            orderDetlValueResultUtil.setHeight(mat.getHeight());
                            orderDetlValueResultUtil.setWeight(mat.getWeight());
                            orderDetlValueResultUtil.setLength(mat.getManLength());
                            orderDetlValueResultUtil.setWidth(mat.getWidth());
                            Double anfmeSign = basArmMastService.selectBasArmMastSignValue(basArmMast.getOrderNo(), basArmMast.getMatnr(),basArmMast.getBindingTags());
                            orderDetlValueResultUtil.setAnfme(anfmeSign);
                            //订单下发
                            try{
                                ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArmMast,orderDetlValueResultUtil);
                                ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArm,basArmMast,orderDetlValueResultUtil);
//                                订单下发(SKU+订单)
                                ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取订单(SKU)下发:",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_ADAPTOR, armOrderAssignmentParam);
                                if (result.getCode()!=200){
@@ -4770,7 +4881,7 @@
                        orderDetlValueResultUtil.setWidth(mat.getWidth());
                        //订单下发
                        try{
                            ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArmMast,orderDetlValueResultUtil);
                            ArmOrderAssignmentParam armOrderAssignmentParam = new ArmOrderAssignmentParam(basArm,basArmMast,orderDetlValueResultUtil);
//                                订单下发(SKU+订单)
                            ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取订单(SKU)下发:",ArmConstant.getArmUrl(basArmMast.getArmNo()), ArmConstant.ARM_ADAPTOR, armOrderAssignmentParam);
                            if (result.getCode()!=200){
@@ -4923,6 +5034,7 @@
                            basAgvMast.setTaskNo(wrkMast.getWrkNo());
                            basAgvMast.setSourceStaNo(outStaAgv.getStaNo());
                            basAgvMast.setLocNo(dto.getLocNo());
                            basAgvMast.setBarcode(wrkMast.getBarcode());
                            basAgvMast.setSourceLocNo(wrkMast.getSourceLocNo());
                            basAgvMast.setDevpId(devp.getId());
                            basAgvMast.setIoType(2);
@@ -5018,6 +5130,7 @@
                            basAgvMast.setSourceStaNo(outStaAgv.getStaNo());
                            basAgvMast.setLocNo(dto.getLocNo());
                            basAgvMast.setDevpId(devp.getId());
                            basAgvMast.setBarcode(barcode);
                            basAgvMast.setIoType(2);
                            basAgvMast.setFloorNo(2);
@@ -5060,7 +5173,7 @@
                    // 判断重复工作档
                    List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("sta_no", inStaAgv.getStaNo()));
                    if (!basAgvMastList.isEmpty()) {
                        News.info("{}号站点存在任务执行中,等待任务执行完毕!!!", inStaAgv.getStaNo());
//                        News.info("{}号站点存在任务执行中,等待任务执行完毕!!!", inStaAgv.getStaNo());
                        continue;
                    }
                    // 任务生成区 --------------------------------------------------------------------------
@@ -5098,6 +5211,7 @@
                            basAgvMast.setStaNo(inStaAgv.getStaNo());
                            basAgvMast.setDevpId(devp.getId());
                            basAgvMast.setFloorNo(floorNo);
                            basAgvMast.setBarcode(locMast.getBarcode());
                            basAgvMast.setIoType(0);//AGV库位==》输送线站点  0
                            basAgvMastService.insert(basAgvMast);
                            break;
@@ -5179,12 +5293,7 @@
                    }
                    if (staProtocol.isAutoing()){
                        AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast);
                        agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString());
                        ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam);
                        if (resultBind.getCode()!=200){
                            agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV容器绑定", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false);
                        }
//
                        AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast);
                        //任务下发
@@ -5263,25 +5372,49 @@
                            (basAgvMast.getSourceStaNo().equals(2033))){
                        AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast);
                        if(basAgvMast.getFloorNo()==1 || basAgvMast.getStaNo().equals(2034)) {
                            WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo());
                            AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast);
                            agvBindCtnrAndBinParam.setCtnrCode(wrkMast.getBarcode());
                            agvBindCtnrAndBinParam.setCtnrTyp("1");
                            ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam);
                            if (resultBind.getCode()==200){
                                //任务下发
                                ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                                if (result.getCode()==200){
                                    basAgvMast.setStatus(1);
                                    basAgvMastService.updateById(basAgvMast);
                                } else {
                                    agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV任务下发失败", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false);
                                }
                        if(basAgvMast.getFloorNo()==1) {
//                            WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo());
//                            AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast);
//                            agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString());
//                            agvBindCtnrAndBinParam.setCtnrTyp("1");
//                            ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam);
//                            if (resultBind.getCode()==200){
//                                //任务下发
//                                ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
//                                if (result.getCode()==200){
//                                    basAgvMast.setStatus(1);
//                                    basAgvMastService.updateById(basAgvMast);
//                                } else {
//                                    agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV任务下发失败", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false);
//                                }
//                            } else {
//                                agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV容器绑定解绑", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false);
//                            }
                            //任务下发
                            ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                            if (result.getCode()==200){
                                basAgvMast.setStatus(1);
                                basAgvMastService.updateById(basAgvMast);
                            } else {
                                agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV容器绑定解绑", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false);
                                agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV任务下发失败", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false);
                            }
                        }else{
                            if (!Cools.isEmpty(basAgvMast.getSourceStaNo())){
                                if (basAgvMast.getSourceStaNo().equals(4006)){
                                    AgvBindCtnrAndBinTwoParam agvBindCtnrAndBinTwoParam = new AgvBindCtnrAndBinTwoParam();
                                    agvBindCtnrAndBinTwoParam.setReqCode(String.valueOf(snowflakeIdWorker.nextId()));
                                    agvBindCtnrAndBinTwoParam.setPodcode(basAgvMast.getBarcode());
                                    agvBindCtnrAndBinTwoParam.setPositionCode(basAgvMast.getSourceStaNo().toString());
                                    agvBindCtnrAndBinTwoParam.setIndBind("1");;
                                    ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器绑定解绑",
                                            AgvConstant.AGV_URL+"/"+AgvConstant.AGV_hikRpcService,AgvConstant.getAGVADAPTOR(2), agvBindCtnrAndBinTwoParam);
                                    if (resultBind.getCode()!=200){
                                        basAgvMast.setStatus(4);
                                        basAgvMastService.updateById(basAgvMast);
                                    }
                                }
                            }
                            //任务下发
                            ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                            if (result.getCode()==200){