yangys
2024-01-29 3ef1c88e46ba88f46e70377b158062096dd286e0
修改代码错误
已修改6个文件
已删除2个文件
已添加2个文件
560 ■■■■ 文件已修改
mdc-parent/mdc-collect/pom.xml 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/FocasClientTest.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/FocasJavaClientTest.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/MyJNAFocas.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/MyJNAFocasTest.java 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/opcua/MyOpcuaClientTest.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/opcua/MyOpcuaClilent.java 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mdc-parent/mdc-show/pom.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mdc-parent/mdc-show/src/main/java/com/qianwen/mdc/service/MdcDataArchiveService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mdc-parent/mdc-showdb-mysql/src/main/resources/mapper/MachineMaintainMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
mdc-parent/mdc-collect/pom.xml
@@ -20,12 +20,8 @@
        <commons-codec.version>1.10</commons-codec.version>
        <mysql-connector.version>8.0.17</mysql-connector.version>
        <jedis.version>3.1.0</jedis.version>
        <nekohtml.version>1.9.22</nekohtml.version>
        <commons-pool2.version>2.6.2</commons-pool2.version>
        <jna.version>5.14.0</jna.version>
        <poi.version>4.1.2</poi.version>
        <poi-ooxml.version>4.1.2</poi-ooxml.version>
        <poi-ooxml-schemas.version>4.1.2</poi-ooxml-schemas.version>
        <skipTests>false</skipTests>
        
        <localLibPath>D:/yangys/mdm/locallib</localLibPath>
@@ -65,24 +61,12 @@
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <!-- spring boot end -->
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>
        <!--json-->
@@ -96,7 +80,6 @@
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>${commons-codec.version}</version>
        </dependency>
        <!--mysql-->
@@ -110,12 +93,6 @@
        <dependency>
            <groupId>io.github.lmlx66</groupId>
            <artifactId>yitter-idgenerator-spring-boot-starter</artifactId>
        </dependency>
        <!--nekohtml-->
        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            <version>${nekohtml.version}</version>
        </dependency>
        <!-- <dependency>
@@ -135,22 +112,6 @@
            <version>${jna.version}</version>
        </dependency>
        <!--poi-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>${poi.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>${poi-ooxml.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>${poi-ooxml-schemas.version}</version>
        </dependency>
        
        <dependency>
            <groupId>com.github.zengfr</groupId>
@@ -225,7 +186,7 @@
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.qianwen.mdc.MdcApplication</mainClass>
                    <mainClass>com.qianwen.mdc.MdcCollectApplication</mainClass>
                    <layout>ZIP</layout>
                    <includes>
                        <!-- æ‰“包时包含核心模块依赖包,需手动指定 -->
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/FocasClientTest.java
@@ -1,11 +1,12 @@
package com.qianwen.mdc.service.focas;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import com.alibaba.fastjson.JSONObject;
import com.sun.jna.Native;
import com.sun.jna.ptr.ShortByReference;
@Disabled
public class FocasClientTest {
    public static String IP = "192.168.1.8";
    public static short port = 8193;
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/FocasJavaClientTest.java
@@ -2,12 +2,13 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import com.qianwen.mdc.service.focas.types.ODBST;
import com.sun.jna.Platform;
import com.sun.jna.ptr.ShortByReference;
@Disabled
public class FocasJavaClientTest {
    public static String IP = "192.168.1.8";
    public static short port = 8193;
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/MyJNAFocas.java
ÎļþÒÑɾ³ý
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/MyJNAFocasTest.java
ÎļþÒÑɾ³ý
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/opcua/MyOpcuaClientTest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.qianwen.mdc.service.opcua;
import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem;
import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem.ValueConsumer;
import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
import org.junit.jupiter.api.Test;
public class MyOpcuaClientTest {
    @Test
    public void t() {
        ValueConsumer vc = new ValueConsumer() {
            @Override
            public void onValueArrived(UaMonitoredItem item, DataValue value) {
                //处理数据
                System.out.println(value);
            }
        };
        MyOpcuaClilent mc = new MyOpcuaClilent();
        try {
            OpcUaClient client = mc.connect("yangys-HW", 53530, "/OPCUA/SimulationServer");
            mc.setValueConsumer(vc);
            //mc.subscribe("1001");
            //Object val = mc.readValue(3, 1001);
            //System.out.println(val);
            NodeId nodeId = new NodeId(3, "abcd");
            mc.readNodeValue(client,nodeId);
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/opcua/MyOpcuaClilent.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,238 @@
package com.qianwen.mdc.service.opcua;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
import java.nio.file.Files;
import java.nio.file.Path;
import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
import org.eclipse.milo.opcua.sdk.client.api.identity.AnonymousProvider;
import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem.ValueConsumer;
import org.eclipse.milo.opcua.sdk.client.subscriptions.ManagedDataItem;
import org.eclipse.milo.opcua.sdk.client.subscriptions.ManagedDataItem.DataValueListener;
import org.eclipse.milo.opcua.sdk.client.subscriptions.ManagedSubscription;
import org.eclipse.milo.opcua.stack.core.AttributeId;
import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger;
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UShort;
import org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode;
import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn;
import org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemCreateRequest;
import org.eclipse.milo.opcua.stack.core.types.structured.MonitoringParameters;
import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyOpcuaClilent {
    /**
     * namespace
     */
    private int ns = 3;
    private static AtomicInteger atomic = new AtomicInteger(1);
    private OpcUaClient client;
    // æ‰¹é‡è®¢é˜…namespaceIndex默认为2
    private int batchNamespaceIndex = 2;
    // æ‰¹é‡è®¢é˜…æ—¶çš„identifiers
    private List<String> batchIdentifiers;
    private ValueConsumer valueConsumer;
    DataValueListener valueListener;
    public ValueConsumer getValueConsumer() {
        return valueConsumer;
    }
    public void setValueConsumer(ValueConsumer valueConsumer) {
        this.valueConsumer = valueConsumer;
    }
    private static final Logger logger = LoggerFactory.getLogger(MyOpcuaClilent.class);
    /**
     * è¿žæŽ¥opcua服务器
     * @param ip
     * @param port
     * @param suffix
     * @return
     * @throws Exception
     */
    public OpcUaClient connect(String ip, int port, String suffix) throws Exception {
        String endPointUrl = "opc.tcp://" + ip + ":" + port + suffix;
        Path securityTempDir = Paths.get(System.getProperty("java.io.tmpdir"), "security");
        Files.createDirectories(securityTempDir);
        if (!Files.exists(securityTempDir)) {
            throw new RuntimeException("创建 security å¤±è´¥: " + securityTempDir);
        }
        OpcUaClient opcUaClient = OpcUaClient.create(endPointUrl,
                endpoints ->
                        endpoints.stream()
                                .filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri()))
                                .findFirst(),
                configBuilder ->
                        configBuilder
                                .setApplicationName(LocalizedText.english("eclipse milo opc-ua client"))
                                .setApplicationUri("urn:eclipse:milo:examples:client")
                                //访问方式:匿名
                                .setIdentityProvider(new AnonymousProvider())
                                .setRequestTimeout(UInteger.valueOf(5000))
                                .build()
        );
        opcUaClient.connect().get();
        Thread.sleep(2000); // çº¿ç¨‹ä¼‘眠一下再返回对象,给创建过程一个时间。
        this.client = opcUaClient;
        return opcUaClient;
    }
    /**
     * è¯»å–节点数据
     * @param client
     * @param namespaceIndex
     * @param identifier
     * @throws Exception
     */
    public Object readValue(int ns, int identifier) throws Exception {
        //节点
        NodeId nodeId = new NodeId(ns, identifier);
        try {
            //读取节点数据
            DataValue value = client.readValue(0.0, TimestampsToReturn.Neither, nodeId).get();
            Object  val = value.getValue().getValue();
            // çŠ¶æ€
            System.out.println("Status: " + value.getStatusCode());
            if (val instanceof UShort) {
                val = ((UShort) val).intValue();
            } else if (val instanceof Boolean) {
                if (val.equals(true)) {
                    val = 1;
                } else {
                    val = 0;
                }
            }
            return val;
            //标识符
            //String id = String.valueOf(nodeId.getIdentifier());
            //System.out.println(id + ": " + value.getValue().getValue());
        }catch(Exception e) {
            logger.info("读取节点数据异常 identifier: {}", identifier,e);
            return null;
        }
    }
    public void readNodeValue(OpcUaClient client, NodeId nodeId) throws Exception {
        //读取节点数据
        DataValue value = client.readValue(0.0, TimestampsToReturn.Neither, nodeId).get();
        // çŠ¶æ€
        System.out.println("Status: " + value.getStatusCode());
        //标识符
        String id = String.valueOf(nodeId.getIdentifier());
        System.out.println(id + ": " + value.getValue().getValue());
    }
    /**
     * è®¢é˜…
     * @param identifier
     */
    public void subscribe(String identifier) {
        try {
            client
            .getSubscriptionManager()
            .createSubscription(1000.0)
            .thenAccept(t -> {
                NodeId nodeId = new NodeId(this.ns, identifier);
                ReadValueId readValueId = new ReadValueId(nodeId, AttributeId.Value.uid(), null, null);
                //创建监控的参数
                MonitoringParameters parameters = new MonitoringParameters(UInteger.valueOf(atomic.getAndIncrement()), 1000.0, null, UInteger.valueOf(10), true);
                //创建监控项请求
                //该请求最后用于创建订阅。
                MonitoredItemCreateRequest request = new MonitoredItemCreateRequest(readValueId, MonitoringMode.Reporting, parameters);
                List<MonitoredItemCreateRequest> requests = new ArrayList<>();
                requests.add(request);
                //创建监控项,并且注册变量值改变时候的回调函数。
                t.createMonitoredItems(
                        TimestampsToReturn.Both,
                        requests,
                        (item, id) -> item.setValueConsumer(valueConsumer)
                );
            }).get();
            //持续订阅
            Thread.sleep(Long.MAX_VALUE);
        }catch(Exception e) {
        }
    }
    /**
     * æ‰¹é‡è®¢é˜…
     *
     * @param client
     * @throws Exception
     */
    public void subscribeBatch(OpcUaClient client) throws Exception {
        final CountDownLatch eventLatch = new CountDownLatch(1);
        //处理订阅业务
        handlerMultipleNode();
        //持续监听
        eventLatch.await();
    }
    /**
     * å¤„理订阅业务
     *
     * @param client OPC UA客户端
     */
    private void handlerMultipleNode() {
        try {
            //创建订阅
            ManagedSubscription subscription = ManagedSubscription.create(client);
            List<NodeId> nodeIdList = new ArrayList<>();
            for (String id : batchIdentifiers) {
                nodeIdList.add(new NodeId(batchNamespaceIndex, id));
            }
            //监听
            List<ManagedDataItem> dataItemList = subscription.createDataItems(nodeIdList);
            for (ManagedDataItem managedDataItem : dataItemList) {
                DataValueListener l;
                managedDataItem.addDataValueListener(valueListener);
                /*
                managedDataItem.addDataValueListener((t) -> {
                    System.out.println(managedDataItem.getNodeId().getIdentifier().toString() + ":" + t.getValue().getValue().toString());
                });
                */
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public int getBatchNamespaceIndex() {
        return batchNamespaceIndex;
    }
    public void setBatchNamespaceIndex(int batchNamespaceIndex) {
        this.batchNamespaceIndex = batchNamespaceIndex;
    }
    public List<String> getBatchIdentifiers() {
        return batchIdentifiers;
    }
    public void setBatchIdentifiers(List<String> batchIdentifiers) {
        this.batchIdentifiers = batchIdentifiers;
    }
    public void setValueListener(DataValueListener valueListener) {
        this.valueListener = valueListener;
    }
}
mdc-parent/mdc-show/pom.xml
@@ -22,7 +22,6 @@
        <commons-codec.version>1.10</commons-codec.version>
        <jedis.version>3.1.0</jedis.version>
        <nekohtml.version>1.9.22</nekohtml.version>
        <commons-pool2.version>2.6.2</commons-pool2.version>
        <poi.version>4.1.2</poi.version>
        <poi-ooxml.version>4.1.2</poi-ooxml.version>
@@ -88,12 +87,6 @@
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- commons-io -->
        <dependency>
@@ -135,12 +128,7 @@
            <version>${pagehelper.version}</version>
        </dependency>
        -->
        <!--nekohtml-->
        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            <version>${nekohtml.version}</version>
        </dependency>
        <!-- <dependency>
            <groupId>org.opcfoundation</groupId>
mdc-parent/mdc-show/src/main/java/com/qianwen/mdc/service/MdcDataArchiveService.java
@@ -29,12 +29,10 @@
import com.qianwen.mdc.mapper.WorkshopMapper;
import com.qianwen.mdc.utils.TimestampUtil;
import lombok.extern.slf4j.Slf4j;
/**
 * æ•°æ®å½’档服务,将 machine_status æ•°æ®å¯¼å…¥machine_status_history表,并加入最新的machine_status数据
 */
@Slf4j
@Component
@Async
public class MdcDataArchiveService {
mdc-parent/mdc-showdb-mysql/src/main/resources/mapper/MachineMaintainMapper.xml
@@ -46,7 +46,7 @@
  
  <select id="queryPage" resultMap="FullResultMap">
      SELECT mm.id,mm.machine_id,ma.machine_name,mm.user_id,u.name user_name,style,mm.department,ud.name department_name,ma.uuid,ma.type,
      ma.specification
      ma.specification,
      start_date_from,start_date_to,complete_date_from,complete_date_to,is_qualified,mm.status,mm.detail
      FROM machine_maintain mm left join machine m on mm.machine_id=m.id left join sys_account u on mm.user_id=u.id
      left join machine_account ma on m.id=ma.machine_id