hdy
2025-03-25 287ef80679ed099cfb4f49dfc2b776375a4ce67f
billion-main/src/main/java/com/billion/main/plcServer/sub/OPCUaSubscription.java
@@ -2,7 +2,9 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.billion.main.bs.domain.BsBomChildInfo;
import com.billion.main.bs.domain.BsLineInfo;
import com.billion.main.bs.service.IBsBomChildInfoService;
import com.billion.main.bs.service.IBsLineInfoService;
import com.billion.main.constant.Constants;
import com.billion.main.da.domain.DaCollectionParamConf;
import com.billion.main.da.domain.DaMaterialCollection;
@@ -45,6 +47,7 @@
    public IDaCollectionParamConfService daCollectionParamConfService;
    public IDaMaterialCollectionService daMaterialCollectionService;
    public ISysCountService sysCountService;
    public IBsLineInfoService bsLineInfoService;
    public OPCUaSubscription(MiloService miloService,
@@ -55,7 +58,8 @@
                             IBsBomChildInfoService bsBomChildInfoService,
                             IDaCollectionParamConfService daCollectionParamConfService,
                             IDaMaterialCollectionService daMaterialCollectionService,
                             ISysCountService sysCountService
                             ISysCountService sysCountService,
                             IBsLineInfoService bsLineInfoService
                             ) {
        OPCUaSubscription.miloService = miloService;
        this.daParamCollectionService = daParamCollectionService;
@@ -66,6 +70,7 @@
        this.daCollectionParamConfService = daCollectionParamConfService;
        this.daMaterialCollectionService = daMaterialCollectionService;
        this.sysCountService = sysCountService;
        this.bsLineInfoService = bsLineInfoService;
    }
    @Override
@@ -102,6 +107,7 @@
                    }
                    //1.2//除首工站所有工站
                    else if(
                            Constants.TEST.contains(device) ||
                            Constants.PLC1.contains(device) ||
                            Constants.PLC2.contains(device) ||
                            Constants.PLC3.contains(device) ||
@@ -123,6 +129,45 @@
                                    String SerialNumber = SFCCode.toString().substring(EngineType.length());
                                    miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(EngineType).build());
                                    miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SerialNumber").value(SerialNumber).build());
                                }
                                //9L发动机涂胶轨迹下发
                                else if(Constants.OP080.equals(device) && Constants.PLC_4.equals(thoroughfare)){
                                    // 1. 初始化工单对象并查询工单信息
                                    String workOrderNo = resultList.get(0).getWorkOrderNo();
                                    OmProductionOrderInfo queryOrder = new OmProductionOrderInfo();
                                    queryOrder.setWorkOrderNo(workOrderNo);
                                    List<OmProductionOrderInfo> orderList = omProductionOrderInfoService.selectOmProductionOrderInfoList(queryOrder);
                                    // 2. 判断类型分支逻辑
                                    String engineName = orderList.get(0).getEngineName();
                                    if (!"9L".equals(engineName)) {
                                        // 非9L直接写0
                                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".GlueType").value(0).build());
                                    } else {
                                        // 3. 查询产线配置的两条预置数据
                                        BsLineInfo lineQuery = new BsLineInfo();
                                        lineQuery.setLineCode(engineName);  // 假设通过lineCode=9L获取两条数据
                                        List<BsLineInfo> configuredLines = bsLineInfoService.selectBsLineInfoList(lineQuery);
                                            // 第一条配置数据的校验
                                            BsLineInfo firstLine = configuredLines.get(0);
                                            BsBomChildInfo checkFirst  = new BsBomChildInfo();
                                            checkFirst.setMaterialCode(firstLine.getLineName());
                                            checkFirst.setBomCode(workOrderNo);
                                            List<BsBomChildInfo> firstCheckList = bsBomChildInfoService.selectBsBomChildInfoList(checkFirst);
                                            if (firstCheckList.size() == 1) {
                                                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".GlueType").value(1).build());
                                            } else {
                                                // 第二条配置数据的校验
                                                BsLineInfo secondLine = configuredLines.get(1);
                                                BsBomChildInfo checkSecond  = new BsBomChildInfo();
                                                checkSecond.setMaterialCode(secondLine.getLineName());
                                                checkSecond.setBomCode(workOrderNo);
                                                List<BsBomChildInfo> secondCheckList = bsBomChildInfoService.selectBsBomChildInfoList(checkSecond);
                                                if (secondCheckList.size() == 1) {
                                                    miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".GlueType").value(2).build());
                                                }
                                            }
                                    }
                                }
                                String getWorkOrderNo = resultList.get(0).getWorkOrderNo();
                                BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
@@ -237,6 +282,55 @@
                        if (Objects.equals(nowQty, getPreOrder2.getPlanQty().toString())){
                            omProductionOrderInfoService.updatePreStatus2();
                        }
                    }else if (Constants.OP020.equals(device)){
                        final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        // 遍历 MaterialCode35 到 MaterialCode40 共6组数据
                        for (int i = 35; i <= 40; i++) {  // 修改循环范围
                                // 构建OPC UA节点地址(例如:PLC1.OP020.MaterialCode35)
                                String nodeId = "PLC1." + device + ".MaterialCode" + i;
                                // 创建采集对象
                                DaMaterialCollection materialCollection = new DaMaterialCollection();
                                materialCollection.setSfcCode(SFCCode.toString());
                                materialCollection.setLocationCode(device);
                                // 设置参数名称(活塞1到活塞6)
                                int pistonNumber = i - 34;  // 35→1, 36→2...40→6
                                materialCollection.setParamName("活塞" + pistonNumber);
                                // 通过OPC UA读取参数值
                                ReadWriteEntity dataRead = miloService.readFromOpcUa(nodeId);
                                if (dataRead != null && dataRead.getValue() != null) {
                                    materialCollection.setParamValue(dataRead.getValue().toString());
                                } else {
                                    materialCollection.setParamValue("N/A");  // 处理空值情况
                                }
                                Date collectTime = new Date();
                                ReadWriteEntity collectTimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime");//进站时间
                                collectTime = format.parse(TimeUtil.test(TimeUtil.stringProcessing(collectTimeRead.getValue().toString())));
                                materialCollection.setCollectTime( collectTime);
                                // 插入数据库
                                daMaterialCollectionService.insertDaMaterialCollection(materialCollection);
                        }
                    }else if (Constants.OP130.equals(device)){
                        final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        // 遍历 MaterialCode35 到 MaterialCode40 共6组数据
                            String nodeId = "PLC1." + device + ".MaterialCode35" ;
                            // 创建采集对象
                            DaMaterialCollection materialCollection = new DaMaterialCollection();
                            materialCollection.setSfcCode(SFCCode.toString());
                            materialCollection.setLocationCode(device);
                            materialCollection.setParamName("缸盖码");
                            // 通过OPC UA读取参数值
                            ReadWriteEntity dataRead = miloService.readFromOpcUa(nodeId);
                            if (dataRead != null && dataRead.getValue() != null) {
                                materialCollection.setParamValue(dataRead.getValue().toString());
                            } else {
                                materialCollection.setParamValue("N/A");  // 处理空值情况
                            }
                            Date collectTime = new Date();
                            ReadWriteEntity collectTimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime");//进站时间
                            collectTime = format.parse(TimeUtil.test(TimeUtil.stringProcessing(collectTimeRead.getValue().toString())));
                            materialCollection.setCollectTime( collectTime);
                            // 插入数据库
                            daMaterialCollectionService.insertDaMaterialCollection(materialCollection);
                    }
                    //出站保存
                    DaStationCollection daStationCollection = new DaStationCollection();