//package com.billion.main.plc.sub; // // //import cn.hutool.core.collection.CollUtil; //import cn.hutool.core.util.ObjectUtil; //import cn.hutool.http.HttpRequest; //import cn.hutool.http.HttpResponse; //import cn.hutool.json.JSONUtil; //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; //import com.billion.main.api.domain.StationST180; //import com.billion.main.da.domain.DaParamCollection; //import com.billion.main.da.service.IDaParamCollectionService; //import com.billion.main.da.service.IDaStationCollectionService; //import com.billion.main.plc.constant.Constants; //import com.billion.main.sc.domain.ScCollectionParamConf; //import com.billion.main.sc.service.IScCollectionParamConfService; //import com.kangaroohy.milo.model.ReadWriteEntity; //import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; //import com.kangaroohy.milo.service.MiloService; //import lombok.extern.slf4j.Slf4j; //import org.springframework.stereotype.Component; //import com.alibaba.fastjson.JSONObject; // //import java.text.ParseException; //import java.text.SimpleDateFormat; //import java.util.*; //import java.util.concurrent.CompletableFuture; //import java.util.stream.Collectors; //import java.lang.reflect.Field; // // //@Slf4j //@Component //public class OPCUaSubscription implements SubscriptionCallback { // // public static MiloService miloService; // public static IScCollectionParamConfService collectionParamConfService; // public static IDaParamCollectionService paramCollectionService; // public static IDaStationCollectionService stationCollectionService; // // public OPCUaSubscription(MiloService miloService, IScCollectionParamConfService collectionParamConfService // ,IDaParamCollectionService paramCollectionService,IDaStationCollectionService stationCollectionService) { // OPCUaSubscription.miloService = miloService; // OPCUaSubscription.collectionParamConfService = collectionParamConfService; // OPCUaSubscription.paramCollectionService = paramCollectionService; // OPCUaSubscription.stationCollectionService = stationCollectionService; // } // // @Override // public void onSubscribe(String identifier, Object value) { // log.info("地址:"+identifier+"值:"+value); // try { // if(null != value && !Constants.ZERO.equals(value.toString())) { // String[] nodes = identifier.split("[.]"); // String thoroughfare = nodes[0];//通道 // String device = nodes[1];//设备 // String tab = nodes[2];//标记 // String valueString = value.toString();//地址值 // // CompletableFuture cp1 = CompletableFuture.runAsync(() -> { // subHandle(thoroughfare,device,tab,valueString); // }); // // } // } catch (Exception e) { // log.error(e.getMessage()); // } // } // // public void subHandle(String thoroughfare,String device,String tab,String valueString){ // try{ // //监听recordData // if(tab.equals(Constants.RECORD_DATA)){ // //如果是2做出站处理 // if(valueString.equals(Constants.TWO)){ // Integer result = Constants.INTEGER_TWO_ONE; // result = saveParamCollection(device, "snCode", "stationStatus"); // miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build()); // } // } // }catch (Exception e) { // log.error(e.getMessage()); // } // } // // /** // * 保存过站数据 // * // * @param device 工位 // * @param snCode 产品序列号 // * @return Integer // * @throws Exception e // */ // private static Integer savePassingStation(String device, String snCode,String stationStatus){ // Integer result = 21; // try { // // // } catch (Exception e) { // throw new RuntimeException(e); // } // // return result; // } // // /** // * 保存参数数据和发送工厂MES // * @param device 工位 // * @param snCode 产品SN // * @param stationStatus 站状态 // * @return result // * @throws Exception e // */ // private static Integer saveParamCollection(String device, String snCode, String stationStatus) { // Integer result = Constants.INTEGER_TWO_ONE; // try { // // 查询参数配置表 // List list = collectionParamConfService.list(new LambdaQueryWrapper() // .eq(ScCollectionParamConf::getLocationCode, device) // .eq(ScCollectionParamConf::getSubscribe, Constants.ONE) // .orderByDesc(ScCollectionParamConf::getOrderNum) // ); // // if (CollUtil.isNotEmpty(list)) { // // 获取参数值 // List collect = list.stream() // .map(ScCollectionParamConf::getNode) // .collect(Collectors.toList()); // List readWriteEntityList = miloService.readFromOpcUa(collect); // // // 保存采集数据 // saveCollectionData(device, snCode, list, readWriteEntityList); // // // 创建工位对象并赋值 // Object stationObject = createStationObject(device, list, readWriteEntityList); // if (stationObject != null) { // System.out.println("工位" + device + "对象创建成功:" + stationObject); // // 这里可以对创建的对象进行进一步处理 // // } // } // // } catch (Exception e) { // log.error("保存数据异常", e); // throw new RuntimeException("保存数据发送工厂MES异常"); // } // return result; // } // // /** // * 保存采集数据 // */ // private static void saveCollectionData(String device, String snCode, // List list, List readWriteEntityList) { // ArrayList collectionList = new ArrayList<>(); // for (int i = 0; i < readWriteEntityList.size(); i++) { // DaParamCollection daParamCollection = new DaParamCollection(); // daParamCollection.setSfcCode(snCode); // daParamCollection.setLocationCode(device); // daParamCollection.setParamCode(list.get(i).getParamCode()); // daParamCollection.setParamName(list.get(i).getParamName()); // daParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString()); // daParamCollection.setCollectTime(new Date()); // collectionList.add(daParamCollection); // } // paramCollectionService.insertBatch(collectionList); // } // // /** // * 创建工位对象并赋值 // */ // private static Object createStationObject(String device, // List list, List readWriteEntityList) { // try { // // 构建完整的类名 // String className = "com.billion.main.api.domain.Station" + device; // Class stationClass = Class.forName(className); // Object stationObject = stationClass.newInstance(); // // // 获取所有属性 // Field[] fields = stationClass.getDeclaredFields(); // // // 创建参数值Map,方便查找 // Map paramValueMap = new HashMap<>(); // for (int i = 0; i < list.size(); i++) { // paramValueMap.put(list.get(i).getParamCode(), // readWriteEntityList.get(i).getValue().toString()); // } // // // 按顺序给属性赋值 // for (Field field : fields) { // field.setAccessible(true); // String paramCode = field.getName(); // 假设属性名与参数编码一致 // String value = paramValueMap.get(paramCode); // // if (value != null) { // // 根据字段类型转换值 // Object convertedValue = convertValue(value, field.getType()); // field.set(stationObject, convertedValue); // } // } // // return stationObject; // } catch (Exception e) { // log.error("创建工位对象失败:" + device, e); // return null; // } // } // // /** // * 根据字段类型转换值 // */ // private static Object convertValue(String value, Class type) { // if (type == String.class) { // return value; // } else if (type == Integer.class || type == int.class) { // return Integer.parseInt(value); // } else if (type == Double.class || type == double.class) { // return Double.parseDouble(value); // } else if (type == Float.class || type == float.class) { // return Float.parseFloat(value); // } else if (type == Long.class || type == long.class) { // return Long.parseLong(value); // } else if (type == Boolean.class || type == boolean.class) { // return Boolean.parseBoolean(value); // } else if (type == Date.class) { // try { // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // return sdf.parse(value); // } catch (ParseException e) { // return null; // } // } // return value; // } // //}