cl
2024-07-19 aec7df791002689120dbccc4baefd6a06c68d8de
jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java
@@ -119,17 +119,18 @@
//                                }
                        }
                    }else if(Constants.OP030.equals(device)){
                        Object value1 = miloService.readFromOpcUa(thoroughfare + "." + device + ".Scaner").getValue();
                        Object value1 = miloService.readFromOpcUa(thoroughfare + "." + device + ".Scaner").getValue();//电芯码
                        if (ObjectUtil.isNotNull(value1)){
                            String cellCode = value1.toString();
                            //反馈电芯ocv检测结果
                            boolean b = OCVResultFeedBack(thoroughfare, device,cellCode);//对替换电芯校验
                            scanResult = 11;
                            //反馈电芯ocv检测结果,这里不用再进行检测,只要码没问题就可以了
                            /*boolean b = OCVResultFeedBack(thoroughfare, device,cellCode);//对替换电芯校验
                            //四个电芯的状态
                            if (b){
                                scanResult = 11;
                            }else {
                                scanResult = 12;
                            }
                            }*/
                        }else {
                            scanResult = 12;
                        }
@@ -161,17 +162,27 @@
                        if (ObjectUtil.isNotNull(productTypeObjcet)){
                            String productType = productTypeObjcet.toString();//产品类型
                            String materialCode = Constants.materialMap.get(productType);
                            //调用工厂MES,保存到数据库,并且将工单传给PLC
                            CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> {
                                //调用工厂MES,保存到数据库,并且将工单传给PLC (目前临时用该方法)
                                receivingWorkOrders(thoroughfare, device,materialCode);
                            });
                            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(11).build());
                            log.info("写入到工位{}的RecordDataDone数据:{}",device,11);
                        }else{
                            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(12).build());
                        }
                    }else if (Constants.OP150.contains(device)){//人工工位
                        Object modulCodeObjcet = miloService.readFromOpcUa(thoroughfare + "." + device + ".ModuleCode").getValue();
                        if (ObjectUtil.isNull(modulCodeObjcet)){
                            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(12).build());
                        }else{
                            String productNum = modulCodeObjcet.toString();
                            //将产品SN发送到前台
                            productNum = "productNum,"+ productNum;
                            WebSocketUsers.sendMessageToUserByText(map.get(device), productNum);
                            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(11).build());
                        }
                    }else if (Constants.ModuleList.contains(device)){//有模组码的工位
                        Object modulCodeObjcet = miloService.readFromOpcUa(thoroughfare + "." + device + ".ModuleCode").getValue();
                        if (ObjectUtil.isNull(modulCodeObjcet)){
@@ -194,14 +205,33 @@
                        Integer result = 21;
                        //读取电芯码
                        List<String> cellCodeList = readCellCodeList(thoroughfare, device);
                        if(ObjectUtil.isNull(cellCodeList) || cellCodeList.size() != 4){
                        if(ObjectUtil.isNull(cellCodeList) || cellCodeList.size() != 4 ){
                            result = 23;
                        }else{
                            String cellCode1 = cellCodeList.get(0);
                            String cellCode2 = cellCodeList.get(1);
                            String cellCode3 = cellCodeList.get(2);
                            String cellCode4 = cellCodeList.get(3);
                            if ((!cellCode1.isEmpty() && cellCode2.isEmpty()) || (cellCode1.isEmpty() && !cellCode2.isEmpty())
                            || (!cellCode3.isEmpty() && cellCode4.isEmpty()) || (!cellCode4.isEmpty() && cellCode3.isEmpty())) {
                                result = 23;
                                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build());
                                return;
                            }
                            result = savePassingStation(thoroughfare, device,cellCodeList);//保存过站
                            if(result == 21) {
                                if(Constants.OP030.contains(device)){
                                    daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode1);
                                    daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode2);
                                    daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode3);
                                    daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode4);
                                }
                                result = saveParamCollection(device,cellCodeList);//保存参数,发送工厂MES
                            }
                        }
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build());
                        log.info("写入到工位{}的RecordDataDone数据:{}",device,result);
                    } else if (Constants.OP100_OP150.contains(device)){//人工工位
@@ -236,40 +266,8 @@
            log.error(e.getMessage());
        }
    }
/*    public void receivingWorkOrders(String thoroughfare ,String device) {
        String paramProductNum = "";
        try {
            List<OmProductionOrdeInfo> orderList = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>()
                    .eq(OmProductionOrdeInfo::getOrderStatus, Constants.ONE));//工单状态
            if (CollUtil.isNotEmpty(orderList)){
                Long id = orderList.get(0).getId();
                String productNum = orderList.get(0).getProductNum();//模组码
                String orderNum = orderList.get(0).getWorkOrderNo();
                //下发产品模组码
                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ModuleCode").value(productNum).build());
                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(orderNum).build());
                //miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordSNDone").value(1).build());
                //更新工单状态为执行中
                OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo();
                omProductionOrdeInfo.setId(id);
                omProductionOrdeInfo.setOrderStatus("3");
                omProductionOrdeInfoService.updateOmProductionOrdeInfo(omProductionOrdeInfo);
                //将产品SN发送到前台
                productNum = "productNum,"+ productNum;
                WebSocketUsers.sendMessageToUserByText(map.get(device), productNum);
            }*//*else{
                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordSNDone").value(2).build());//没有要生产的工单
            }*//*
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }*/
    public void receivingWorkOrders(String thoroughfare ,String device ,String materialCode)
    public synchronized void receivingWorkOrders(String thoroughfare ,String device ,String materialCode)
    {
        String paramProductNum = "";
        try {
@@ -298,12 +296,15 @@
                omProductionOrdeInfo.setCreateUser("工厂MES");
                omProductionOrdeInfoService.save(omProductionOrdeInfo);
                //发送给前台
                WebSocketUsers.sendMessageToUserByText(map.get(device), dataObject.getStr("productNum"));
                String productNum = dataObject.getStr("productNum");
                String orderNum = dataObject.getStr("productionOrderNum");
                //下发产品模组码
                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ModuleCode").value(productNum).build());
                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(orderNum).build());
                //写PLC
                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ModuleCode").value(dataObject.getStr("productNum")).build());
                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(dataObject.getStr("productionOrderNum")).build());
                //将产品SN发送到前台
                productNum = "productNum,"+ productNum;
                WebSocketUsers.sendMessageToUserByText(map.get(device), productNum);
            }
        } catch (Exception e) {
@@ -330,11 +331,11 @@
        try {
            List<ReadWriteEntity> readWriteEntityList = miloService.readFromOpcUa(readList);//电芯码
            for (ReadWriteEntity readWriteEntity : readWriteEntityList) {
                if (ObjectUtil.isNotNull(readWriteEntity.getValue()) && !"".equals(readWriteEntity.getValue().toString().trim())){
                if (ObjectUtil.isNotNull(readWriteEntity.getValue()) && !readWriteEntity.getValue().toString().trim().isEmpty()){
                    cellCodeList.add(readWriteEntity.getValue().toString());//封装电芯码
                }/*else{
                }else{
                    cellCodeList.add("");//封装电芯码
                }*/
                }
            }
        } catch (Exception e) {
@@ -507,9 +508,9 @@
                    //插入参数采集表
                    daParamCollectionService.insertBatch(collectionList);
                    //如果220工位,进行报工
                    //如果220工位,进行报工,因为上层系统只支持6位,所有报工工位修改为M1P220
                    if("M1OP220".equals(device)) {
                        RestfulService.getWorkReportResultFeedback(moduleCode, "M1OP220", format.format(new Date()));
                        getWorkReportResultFeedback(moduleCode, "M1P220", format.format(new Date()));
                    }
                    //上传到工厂mes
@@ -526,7 +527,7 @@
                    parentVO.setProductNum(moduleCode);
                    //添加基础数据
                    List<ChildVO> basicList = getCollectParamBasicData(device);
                    List<ChildVO> basicList = getCollectParamBasicData(device,moduleCode);
                    mesList.addAll(basicList);
                    parentVO.setCheckList(mesList);
@@ -770,7 +771,7 @@
                            }
                            //添加基础数据
                            List<ChildVO> basicList = getCollectParamBasicData(device);
                            List<ChildVO> basicList = getCollectParamBasicData(device,cellCodeList.get(i));
                            mesChildList.addAll(basicList);
                            parentVO.setCheckList(mesChildList);//参数
@@ -800,20 +801,18 @@
        boolean flag = true;
        List<DaTestDeviceInterfaceTemp> list = daTestDeviceInterfaceTempService.list(new LambdaQueryWrapper<DaTestDeviceInterfaceTemp>()
                .eq(DaTestDeviceInterfaceTemp::getStationCode, device)
                .eq(DaTestDeviceInterfaceTemp::getStationCode, "M1OP020")
                .eq(DaTestDeviceInterfaceTemp::getProductNum,cellCode));
        if (CollUtil.isNotEmpty(list)){
            DaTestDeviceInterfaceTemp daTestDeviceInterfaceTemp = list.get(list.size()-1);
            if (Constants.ONE.equals(daTestDeviceInterfaceTemp.getTotalResult())){
                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_1").value(1).build());
                flag = true;
            }else {
                flag = false;
                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_1").value(2).build());
            }
            daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode);
        }else {
            flag = false;
            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_1").value(2).build());
            log.info("读取到工位{},测试设备返回的数据查询不到,电芯码为:{}",device,cellCode);
        }
        return flag;
@@ -830,28 +829,34 @@
        if (ObjectUtil.isNotNull(value1)){
            String cellCode = value1.toString();
            List<DaTestDeviceInterfaceTemp> list = daTestDeviceInterfaceTempService.list(new LambdaQueryWrapper<DaTestDeviceInterfaceTemp>()
                    .eq(DaTestDeviceInterfaceTemp::getStationCode, device)
                    .eq(DaTestDeviceInterfaceTemp::getProductNum,cellCode));
                    //.eq(DaTestDeviceInterfaceTemp::getStationCode, "M1OP020")
                    .eq(DaTestDeviceInterfaceTemp::getProductNum,cellCode)
                    .orderByDesc(DaTestDeviceInterfaceTemp::getCreateTime)
            );
            if (CollUtil.isNotEmpty(list)){
                DaTestDeviceInterfaceTemp daTestDeviceInterfaceTemp = list.get(list.size()-1);
                DaTestDeviceInterfaceTemp daTestDeviceInterfaceTemp = list.get(0);
                if (Constants.ONE.equals(daTestDeviceInterfaceTemp.getTotalResult())){
                    miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_1").value(1).build());
                }else {
                    flag = false;
                    miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_1").value(2).build());
                }
                daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode);
                //daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode);
            }else {
                flag = false;
                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_1").value(5).build());
                log.info("读取到工位{},OP020工位没有给测试结果",device);
            }
        }else {
            flag = false;
            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_1").value(2).build());
            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_1").value(5).build());
            log.info("读取到工位{},PLC没有给电芯码",device);
        }
        Object value2 = miloService.readFromOpcUa(thoroughfare + "." + device + ".CellCode_2").getValue();
        if (ObjectUtil.isNotNull(value2)){
            String cellCode = value2.toString();
            List<DaTestDeviceInterfaceTemp> list = daTestDeviceInterfaceTempService.list(new LambdaQueryWrapper<DaTestDeviceInterfaceTemp>()
                    .eq(DaTestDeviceInterfaceTemp::getStationCode, device)
                    //.eq(DaTestDeviceInterfaceTemp::getStationCode, "M1OP020")
                    .eq(DaTestDeviceInterfaceTemp::getProductNum,cellCode));
            if (CollUtil.isNotEmpty(list)){
                DaTestDeviceInterfaceTemp daTestDeviceInterfaceTemp = list.get(list.size()-1);
@@ -861,11 +866,15 @@
                    flag = false;
                    miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_2").value(2).build());
                }
                daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode);
                //daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode);
            }else {
                flag = false;
                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_2").value(5).build());
                log.info("读取到工位{},OP020工位没有给测试结果",device);
            }
        }else {
            flag = false;
            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_2").value(2).build());
            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_2").value(5).build());
            log.info("读取到工位{},PLC没有给电芯码",device);
        }
@@ -873,7 +882,7 @@
        if (ObjectUtil.isNotNull(value3)){
            String cellCode = value3.toString();
            List<DaTestDeviceInterfaceTemp> list = daTestDeviceInterfaceTempService.list(new LambdaQueryWrapper<DaTestDeviceInterfaceTemp>()
                    .eq(DaTestDeviceInterfaceTemp::getStationCode, device)
                    //.eq(DaTestDeviceInterfaceTemp::getStationCode, "M1OP020")
                    .eq(DaTestDeviceInterfaceTemp::getProductNum,cellCode));
            if (CollUtil.isNotEmpty(list)){
                DaTestDeviceInterfaceTemp daTestDeviceInterfaceTemp = list.get(list.size()-1);
@@ -883,11 +892,15 @@
                    flag = false;
                    miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_3").value(2).build());
                }
                daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode);
                //daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode);
            }else {
                flag = false;
                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_3").value(5).build());
                log.info("读取到工位{},OP020工位没有给测试结果",device);
            }
        }else {
            flag = false;
            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_3").value(2).build());
            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_3").value(5).build());
            log.info("读取到工位{},PLC没有给电芯码",device);
        }
@@ -895,7 +908,7 @@
        if (ObjectUtil.isNotNull(value4)){
            String cellCode = value4.toString();
            List<DaTestDeviceInterfaceTemp> list = daTestDeviceInterfaceTempService.list(new LambdaQueryWrapper<DaTestDeviceInterfaceTemp>()
                    .eq(DaTestDeviceInterfaceTemp::getStationCode, device)
                    //.eq(DaTestDeviceInterfaceTemp::getStationCode, "M1OP020")
                    .eq(DaTestDeviceInterfaceTemp::getProductNum,cellCode));
            if (CollUtil.isNotEmpty(list)){
                DaTestDeviceInterfaceTemp daTestDeviceInterfaceTemp = list.get(list.size()-1);
@@ -905,11 +918,15 @@
                    flag = false;
                    miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_4").value(2).build());
                }
                daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode);
                //daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempByProductNum(cellCode);
            }else {
                flag = false;
                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_4").value(5).build());
                log.info("读取到工位{},OP020工位没有给测试结果",device);
            }
        }else {
            flag = false;
            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_4").value(2).build());
            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_4").value(5).build());
            log.info("读取到工位{},PLC没有给电芯码",device);
        }
@@ -943,10 +960,12 @@
    /**
     * 获取采集参数基础数据
     * @param stationCode
     * @param sfcCode
     * @return list
     */
    public static List<ChildVO> getCollectParamBasicData(String stationCode) {
    public static List<ChildVO> getCollectParamBasicData(String stationCode,String sfcCode) {
        List<ChildVO> basicList = new ArrayList<>();
        List<DaParamCollection> collectionList = new ArrayList<>();
        try {
            //查询参数配置表
            List<DaCollectionParamConf> list = collectionParamConfService.list(new LambdaQueryWrapper<DaCollectionParamConf>()
@@ -963,7 +982,18 @@
                    childVO.setCheckResult("1");
                    childVO.setCheckTime(format.format(new Date()));
                    basicList.add(childVO);
                    DaParamCollection daParamCollection = new DaParamCollection();
                    daParamCollection.setSfcCode(sfcCode);//模组码
                    daParamCollection.setParamCode(conf.getCollectParameterId());//参数编码
                    daParamCollection.setParamName(conf.getCollectParameterName());//参数名称
                    daParamCollection.setParamValue(conf.getParamCentral());//参数值
                    daParamCollection.setLocationCode(stationCode);//工位
                    daParamCollection.setCollectionTime(new Date());//采集时间
                    collectionList.add(daParamCollection);//封装参数采集list
                }
                daParamCollectionService.insertBatch(collectionList);
            }
            return basicList;
        }catch (Exception e) {