//package com.billion.main.plc.sub; // // //import cn.hutool.core.collection.CollUtil; //import cn.hutool.core.util.ObjectUtil; //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; //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 java.util.ArrayList; //import java.util.Date; //import java.util.List; //import java.util.concurrent.CompletableFuture; //import java.util.stream.Collectors; // // //@Slf4j //public class OPCUaSubscriptionTemp implements SubscriptionCallback { // // public static MiloService miloService; // public static IScCollectionParamConfService collectionParamConfService; // public static IDaParamCollectionService paramCollectionService; // public static IDaStationCollectionService stationCollectionService; // // public OPCUaSubscriptionTemp(MiloService miloService, IScCollectionParamConfService collectionParamConfService // , IDaParamCollectionService paramCollectionService, IDaStationCollectionService stationCollectionService) { // OPCUaSubscriptionTemp.miloService = miloService; // OPCUaSubscriptionTemp.collectionParamConfService = collectionParamConfService; // OPCUaSubscriptionTemp.paramCollectionService = paramCollectionService; // OPCUaSubscriptionTemp.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)){ // //如果是1做进站处理 // if(valueString.equals(Constants.ONE)){ // Object sfcCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".sfcCode").getValue(); // if(ObjectUtil.isNotNull(sfcCodeObject)){ // miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_ONE_ONE).build()); // }else { // miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_ONE_TWO).build()); // } // //如果是2做出站处理处理 // }else if(valueString.equals(Constants.TWO)){ // String result = Constants.STRING_TWO_ONE; // //读变速箱总成码 // Object sfcCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".sfcCode").getValue(); // //为空时,返回5 // if (ObjectUtil.isNull(sfcCodeObject)){ // miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_TWO_FIVE).build()); // }else { // String snCode = sfcCodeObject.toString().trim();//产品SN // Object stationStatusObjcet = miloService.readFromOpcUa(thoroughfare + "." + device + ".StationStatus").getValue();//站状态地址 // String stationStatus = stationStatusObjcet.toString(); // if (ObjectUtil.isNotNull(stationStatusObjcet)) { // //保存参数,发送工厂MES // result = saveParamCollection(device, snCode, stationStatus); // //保存过站记录 // savePassingStation(device,snCode,stationStatus); // }else { // result = Constants.STRING_TWO_THREE; // log.info("读取到工位{}StationStatus数据:{},返回RecordDataDone的值为{}", device, "IS NULL!", result); // } // } // miloService.writeToOpcUa(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 String saveParamCollection(String device,String snCode,String stationStatus){ // String result = Constants.STRING_TWO_ONE;//返回结果 // try { // //查询参数配置表 // List list = collectionParamConfService.list(new LambdaQueryWrapper() // .eq(ScCollectionParamConf::getLocationCode, device)//工位 // .eq(ScCollectionParamConf::getSubscribe, Constants.ONE)//是否采集 // ); // if (CollUtil.isNotEmpty(list)){ // List collect = list.stream() // .map(ScCollectionParamConf::getNode).collect(Collectors.toList()); // List readWriteEntityList = miloService.readFromOpcUa(collect); // 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.saveBatch(collectionList); // } // // }catch (Exception e) { // throw new RuntimeException("保存数据发送工厂MES异常"); // } // return result; // } // // //}