From d3409e53d656dff668c12a335bcb6f367ca63fdb Mon Sep 17 00:00:00 2001
From: 懒羊羊 <15939171744@163.com>
Date: 星期四, 25 一月 2024 09:03:10 +0800
Subject: [PATCH] opcua迁移

---
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/OpcusConfigInit.java                                            |   48 
 jcdm-ui/src/views/main/da/passingStationCollection/index.vue                                                              |   35 
 jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/mapper/DaTileMatchRulesMapper.java                                |   62 +
 jcdm-main/pom.xml                                                                                                         |   32 
 jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/IDaPassingStationCollectionService.java         |   10 
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/service/impl/DaOpcuaConfigServiceImpl.java                           |   94 +
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/mapper/DaOpcuaConfigMapper.java                                      |   62 +
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/cert/KeyStoreLoader.java                                             |  127 ++
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/service/IDaOpcuaConfigService.java                                   |   62 +
 jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/domain/DaParamCollection.java                                    |   60 
 jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/controller/DaPassingStationCollectionController.java    |   59 
 jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java |   53 
 jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/common/Constants.java                                   |    5 
 jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/service/impl/DaTileMatchRulesServiceImpl.java                     |   97 +
 jcdm-main/src/main/resources/mapper/da/tileMatchRules/DaTileMatchRulesMapper.xml                                          |  129 ++
 jcdm-ui/src/views/main/da/opcuaconfig/index.vue                                                                           |  491 ++++----
 jcdm-ui/src/views/main/da/tileMatchRules/index.vue                                                                        |  483 +++++++
 jcdm-main/src/main/resources/mapper/da/paramCollection/DaParamCollectionMapper.xml                                        |   24 
 jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/service/IDaCollectionParamConfService.java                   |    3 
 jcdm-ui/dist.rar                                                                                                          |    0 
 jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/service/IDaTileMatchRulesService.java                             |   62 +
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/cert/MethodName.java                                                 |   92 +
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/client/ClientHandler.java                                            |  295 ++++
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/domain/DaOpcuaConfig.java                                            |  149 ++
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/BeanUtils.java                                                  |   30 
 jcdm-ui/src/views/main/kb/stationTerminal/index.vue                                                                       |   43 
 jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/controller/DaTileMatchRulesController.java                        |   98 +
 jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/domain/DaTileMatchRules.java                                      |  235 +++
 jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/mapper/DaCollectionParamConfMapper.java                      |    3 
 jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/service/impl/DaParamCollectionServiceImpl.java                   |    3 
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/Properties.java                                                 |   57 
 jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/controller/DaParamCollectionController.java                      |   29 
 jcdm-main/src/main/resources/mapper/da/passingStationCollection/DaPassingStationCollectionMapper.xml                      |    3 
 jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/domain/DaCollectionParamConf.java                            |    4 
 jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/controller/DaCollectionParamConfController.java              |   22 
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/controller/DaOpcuaConfigController.java                              |   98 +
 jcdm-ui/src/views/main/da/paramCollection/index.vue                                                                       |  151 -
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/client/ClientRunner.java                                             |  146 ++
 jcdm-ui/src/views/main/da/collectionParamConf/index.vue                                                                   |    4 
 jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/domain/DaPassingStationCollection.java                  |   32 
 jcdm-main/src/main/resources/mapper/da/opcuaconfig/DaOpcuaConfigMapper.xml                                                |   86 +
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/domain/NodeEntity.java                                               |   19 
 jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/service/impl/DaCollectionParamConfServiceImpl.java           |    9 
 43 files changed, 3,054 insertions(+), 552 deletions(-)

diff --git a/jcdm-main/pom.xml b/jcdm-main/pom.xml
index 655ff30..6c58209 100644
--- a/jcdm-main/pom.xml
+++ b/jcdm-main/pom.xml
@@ -58,6 +58,38 @@
             <artifactId>gson</artifactId>
             <version>2.10.1</version>
         </dependency>
+
+        <!--Server SDK渚濊禆-->
+        <dependency>
+            <groupId>org.eclipse.milo</groupId>
+            <artifactId>sdk-server</artifactId>
+            <version>0.3.6</version>
+        </dependency>
+
+        <!--Client SDK渚濊禆-->
+        <dependency>
+            <groupId>org.eclipse.milo</groupId>
+            <artifactId>sdk-client</artifactId>
+            <version>0.3.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.eclipse.milo</groupId>
+            <artifactId>stack-client</artifactId>
+            <version>0.3.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.eclipse.milo</groupId>
+            <artifactId>stack-client</artifactId>
+            <version>0.3.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.eclipse.milo</groupId>
+            <artifactId>stack-server</artifactId>
+            <version>0.3.6</version>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/controller/DaCollectionParamConfController.java b/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/controller/DaCollectionParamConfController.java
index ae622fe..93dc5c6 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/controller/DaCollectionParamConfController.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/controller/DaCollectionParamConfController.java
@@ -1,25 +1,19 @@
 package com.jcdm.main.da.collectionParamConf.controller;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.jcdm.common.annotation.Log;
 import com.jcdm.common.core.controller.BaseController;
 import com.jcdm.common.core.domain.AjaxResult;
+import com.jcdm.common.core.page.TableDataInfo;
 import com.jcdm.common.enums.BusinessType;
+import com.jcdm.common.utils.poi.ExcelUtil;
 import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf;
 import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService;
-import com.jcdm.common.utils.poi.ExcelUtil;
-import com.jcdm.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 閲囬泦鍙傛暟閰嶇疆Controller
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/domain/DaCollectionParamConf.java b/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/domain/DaCollectionParamConf.java
index 7d9f1e2..5e85836 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/domain/DaCollectionParamConf.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/domain/DaCollectionParamConf.java
@@ -1,9 +1,9 @@
 package com.jcdm.main.da.collectionParamConf.domain;
 
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.jcdm.common.annotation.Excel;
 import com.jcdm.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
 
 /**
  * 閲囬泦鍙傛暟閰嶇疆瀵硅薄 da_collection_param_conf
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/mapper/DaCollectionParamConfMapper.java b/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/mapper/DaCollectionParamConfMapper.java
index 56baedd..eec648d 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/mapper/DaCollectionParamConfMapper.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/mapper/DaCollectionParamConfMapper.java
@@ -1,8 +1,9 @@
 package com.jcdm.main.da.collectionParamConf.mapper;
 
-import java.util.List;
 import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf;
 
+import java.util.List;
+
 /**
  * 閲囬泦鍙傛暟閰嶇疆Mapper鎺ュ彛
  * 
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/service/IDaCollectionParamConfService.java b/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/service/IDaCollectionParamConfService.java
index 0d268b1..8ea5aad 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/service/IDaCollectionParamConfService.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/service/IDaCollectionParamConfService.java
@@ -1,8 +1,9 @@
 package com.jcdm.main.da.collectionParamConf.service;
 
-import java.util.List;
 import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf;
 
+import java.util.List;
+
 /**
  * 閲囬泦鍙傛暟閰嶇疆Service鎺ュ彛
  * 
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/service/impl/DaCollectionParamConfServiceImpl.java b/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/service/impl/DaCollectionParamConfServiceImpl.java
index ffb43c0..fc64873 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/service/impl/DaCollectionParamConfServiceImpl.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/collectionParamConf/service/impl/DaCollectionParamConfServiceImpl.java
@@ -1,12 +1,13 @@
 package com.jcdm.main.da.collectionParamConf.service.impl;
 
-import java.util.List;
 import com.jcdm.common.utils.DateUtils;
+import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf;
+import com.jcdm.main.da.collectionParamConf.mapper.DaCollectionParamConfMapper;
+import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.jcdm.main.da.collectionParamConf.mapper.DaCollectionParamConfMapper;
-import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf;
-import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService;
+
+import java.util.List;
 
 /**
  * 閲囬泦鍙傛暟閰嶇疆Service涓氬姟灞傚鐞�
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/cert/KeyStoreLoader.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/cert/KeyStoreLoader.java
new file mode 100644
index 0000000..9b6a4e0
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/cert/KeyStoreLoader.java
@@ -0,0 +1,127 @@
+package com.jcdm.main.da.opcuaconfig.cert;
+
+import org.eclipse.milo.opcua.sdk.server.util.HostnameUtil;
+import org.eclipse.milo.opcua.stack.core.util.SelfSignedCertificateBuilder;
+import org.eclipse.milo.opcua.stack.core.util.SelfSignedCertificateGenerator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.security.*;
+import java.security.cert.X509Certificate;
+import java.util.regex.Pattern;
+
+/**
+ * @ClassName: KeyStoreLoader
+ * @Description: KeyStoreLoader
+ * @author yyt
+ * @date 2023骞�10鏈�13鏃�
+ */
+@Component
+public class KeyStoreLoader {
+
+	private static final Pattern IP_ADDR_PATTERN = Pattern
+			.compile("^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");
+
+	// 璇佷功鍒悕
+	private static final String CLIENT_ALIAS = "jlclient-ai";
+	// 鑾峰彇绉侀挜鐨勫瘑鐮�
+	private static final char[] PASSWORD = "yyt@8888888888".toCharArray();
+
+	private final Logger logger = LoggerFactory.getLogger(getClass());
+
+	// 璇佷功瀵硅薄
+	private X509Certificate clientCertificate;
+	// 瀵嗛挜瀵瑰璞�
+	private KeyPair clientKeyPair;
+
+	/**
+	 * @MethodName: load
+	 * @Description: load
+	 * @param baseDir
+	 * @return
+	 * @throws Exception
+	 * @CreateTime 2023骞�10鏈�13鏃�
+	 */
+	public KeyStoreLoader load(Path baseDir) throws Exception {
+		// 鍒涘缓涓�涓娇鐢╜PKCS12`鍔犲瘑鏍囧噯鐨凨eyStore銆侹eyStore鍦ㄥ悗闈㈠皢浣滀负璇诲彇鍜岀敓鎴愯瘉涔︾殑瀵硅薄銆�
+		KeyStore keyStore = KeyStore.getInstance("PKCS12");
+
+		// PKCS12鐨勫姞瀵嗘爣鍑嗙殑鏂囦欢鍚庣紑鏄�.pfx锛屽叾涓寘鍚簡鍏挜鍜岀閽ャ��
+		// 鑰屽叾浠栧.der绛夌殑鏍煎紡鍙寘鍚叕閽ワ紝绉侀挜鍦ㄥ彟澶栫殑鏂囦欢涓��
+		Path serverKeyStore = baseDir.resolve("OPCUA-client.pfx");
+
+		logger.info("Loading KeyStore at {}", serverKeyStore);
+
+		// 濡傛灉鏂囦欢涓嶅瓨鍦ㄥ垯鍒涘缓.pfx璇佷功鏂囦欢銆�
+		if (!Files.exists(serverKeyStore)) {
+			keyStore.load(null, PASSWORD);
+
+			// 鐢�2048浣嶇殑RAS绠楁硶銆俙SelfSignedCertificateGenerator`涓篗ilo搴撶殑瀵硅薄銆�
+			KeyPair keyPair = SelfSignedCertificateGenerator.generateRsaKeyPair(2048);
+
+			// `SelfSignedCertificateBuilder`涔熸槸Milo搴撶殑瀵硅薄锛岀敤鏉ョ敓鎴愯瘉涔︺��
+			// 涓棿鎵�璁剧疆鐨勮瘉涔﹀睘鎬у彲浠ヨ嚜琛屼慨鏀广��
+			SelfSignedCertificateBuilder builder = new SelfSignedCertificateBuilder(keyPair)
+					.setCommonName("UaClient@Jellyleo")
+					.setOrganization("JL")
+					.setOrganizationalUnit("per")
+					.setLocalityName("jl")
+					.setStateName("JiangSu")
+					.setCountryCode("CN")
+					.setApplicationUri("urn:Yyt_PC:UnifiedAutomation:UaExpert")
+					.addDnsName("Yyt_PC")
+					.addIpAddress("127.0.0.1");
+
+			// Get as many hostnames and IP addresses as we can listed in the certificate.
+			for (String hostname : HostnameUtil.getHostnames("0.0.0.0")) {
+				if (IP_ADDR_PATTERN.matcher(hostname).matches()) {
+					builder.addIpAddress(hostname);
+				} else {
+					builder.addDnsName(hostname);
+				}
+			}
+			// 鍒涘缓璇佷功
+			X509Certificate certificate = builder.build();
+
+			// 璁剧疆瀵瑰簲绉侀挜鐨勫埆鍚嶏紝瀵嗙爜锛岃瘉涔﹂摼
+			keyStore.setKeyEntry(CLIENT_ALIAS, keyPair.getPrivate(), PASSWORD, new X509Certificate[] { certificate });
+			try (OutputStream out = Files.newOutputStream(serverKeyStore)) {
+				// 淇濆瓨璇佷功鍒拌緭鍑烘祦
+				keyStore.store(out, PASSWORD);
+			}
+		} else {
+			try (InputStream in = Files.newInputStream(serverKeyStore)) {
+				// 濡傛灉鏂囦欢瀛樺湪鍒欒鍙�
+				keyStore.load(in, PASSWORD);
+			}
+		}
+
+		// 鐢ㄥ瘑鐮佽幏鍙栧搴斿埆鍚嶇殑绉侀挜銆�
+		Key serverPrivateKey = keyStore.getKey(CLIENT_ALIAS, PASSWORD);
+		if (serverPrivateKey instanceof PrivateKey) {
+			// 鑾峰彇瀵瑰簲鍒悕鐨勮瘉涔﹀璞°��
+			clientCertificate = (X509Certificate) keyStore.getCertificate(CLIENT_ALIAS);
+			// 鑾峰彇鍏挜
+			PublicKey serverPublicKey = clientCertificate.getPublicKey();
+			// 鍒涘缓Keypair瀵硅薄銆�
+			clientKeyPair = new KeyPair(serverPublicKey, (PrivateKey) serverPrivateKey);
+		}
+
+		return this;
+	}
+
+	// 杩斿洖璇佷功
+	public X509Certificate getClientCertificate() {
+		return clientCertificate;
+	}
+
+	// 杩斿洖瀵嗛挜瀵�
+	public KeyPair getClientKeyPair() {
+		return clientKeyPair;
+	}
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/cert/MethodName.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/cert/MethodName.java
new file mode 100644
index 0000000..2959b26
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/cert/MethodName.java
@@ -0,0 +1,92 @@
+package com.jcdm.main.da.opcuaconfig.cert;
+
+import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf;
+import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService;
+import com.jcdm.main.da.opcuaconfig.client.ClientHandler;
+import com.jcdm.main.da.opcuaconfig.domain.NodeEntity;
+import com.jcdm.main.da.opcuaconfig.init.BeanUtils;
+import com.jcdm.main.da.paramCollection.domain.DaParamCollection;
+import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService;
+import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection;
+import com.jcdm.main.da.passingStationCollection.service.IDaPassingStationCollectionService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
+import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.jcdm.main.da.opcuaconfig.client.ClientHandler.readValues;
+
+@Slf4j
+public class MethodName {
+    private IDaCollectionParamConfService collectionParamConfService = BeanUtils.getBean(IDaCollectionParamConfService.class);
+    private IDaParamCollectionService daParamCollectionService = BeanUtils.getBean(IDaParamCollectionService.class);
+    private IDaPassingStationCollectionService daPassingStationCollectionService = BeanUtils.getBean(IDaPassingStationCollectionService.class);
+    private List<DataValue> s=null;
+    public void getSn(String Node, String value) throws Exception {
+        log.info(Node+":"+value);
+        String[] parts = Node.split("[.]");
+        ClientHandler clientHandler=new ClientHandler();
+        NodeEntity SN_node= NodeEntity.builder().index(2).identifier(parts[0]+"."+parts[1]+".SNCode").value("").type("").build();
+        String SNCode=clientHandler.read(SN_node);
+        log.info("璇诲彇鑺傜偣:{},缁撴灉:{}", SN_node.getIdentifier(),SNCode);
+        switch (value) {
+            case "0":   //鍒濆
+                NodeEntity node= NodeEntity.builder().index(2).identifier(parts[0]+"."+parts[1]+".RecordDataDone").value("0").type("short").build();
+                Boolean out=clientHandler.write(node);
+                log.info("鑺傜偣:{},鍝嶅簲缁撴灉:{}", node.getIdentifier(),out);
+                break;
+            case "1":   //璇锋眰涓嬪彂杩涚珯鐘舵��
+                NodeEntity node1= NodeEntity.builder().index(2).identifier(parts[0]+"."+parts[1]+".RecordDataDone").value("11").type("short").build();
+                Boolean out1=clientHandler.write(node1);
+                DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection();
+                PassingStationCollection.setSfcCode(SNCode);
+                PassingStationCollection.setLocationCode(parts[1]);
+                PassingStationCollection.setInboundTime(new Date());
+                daPassingStationCollectionService.insertDaPassingStationCollection(PassingStationCollection);
+                log.info("鑺傜偣:{},鍝嶅簲缁撴灉:{}", node1.getIdentifier(),out1);
+                break;
+            case "2":   //璇锋眰璁板綍宸ヤ綅鏁版嵁
+                List<DaCollectionParamConf> b;
+                DaCollectionParamConf daCollectionParamConf=new DaCollectionParamConf();
+                daCollectionParamConf.setGatherAddress(parts[0]+"."+parts[1]);
+                b=collectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf);
+
+                List<NodeId> nodeId = b.stream().map(info -> {
+                    NodeId nodeid = new NodeId(2,info.getGatherAddress());
+                    return nodeid;
+                }).collect(Collectors.toList());
+                List<DataValue> s=readValues(nodeId);
+                //淇濆瓨PLC閲囬泦鏁版嵁
+                for(int i=0;i<nodeId.size();i++)
+                {
+                    DaParamCollection Config=new DaParamCollection();
+                    Config.setParamCode(nodeId.get(i).getIdentifier().toString().split("[.]")[2]);
+                    Config.setLocationCode(nodeId.get(i).getIdentifier().toString().split("[.]")[1]);
+                    Config.setParamValue(s.get(i).getValue().getValue().toString());
+                    Config.setSfcCode(SNCode);
+                    Config.setParamName(b.get(i).getGatherAddress());
+                    daParamCollectionService.insertDaParamCollection(Config);
+                }
+                //鏇存柊鍑虹珯鏃堕棿锛岃绠楄妭鎷嶃��
+                DaPassingStationCollection PSC=new DaPassingStationCollection();
+                PSC.setSfcCode(SNCode);
+                List<DaPassingStationCollection> LPSC=daPassingStationCollectionService.selectDaPassingStationCollectionList(PSC);
+                if(LPSC != null && LPSC.size() > 0){
+                    LPSC.get(0).setOutboundTime(new Date());
+                    LPSC.get(0).setCollectionTime(new Date());
+                    LPSC.get(0).setBeatTime(Long.toString(Math.abs(new Date().getTime() - LPSC.get(0).getInboundTime().getTime())));
+                    daPassingStationCollectionService.updateDaPassingStationCollection(LPSC.get(0));
+                }
+                //鏇存柊PLC鑺傜偣鐘舵��
+                NodeEntity node2= NodeEntity.builder().index(2).identifier(parts[0]+"."+parts[1]+".RecordDataDone").value("21").type("short").build();
+                Boolean out2=clientHandler.write(node2);
+                log.info("鑺傜偣:{},鍝嶅簲缁撴灉:{}", node2.getIdentifier(),out2);
+                break;
+            default:
+                break;
+        }
+    }
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/client/ClientHandler.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/client/ClientHandler.java
new file mode 100644
index 0000000..a6e01b5
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/client/ClientHandler.java
@@ -0,0 +1,295 @@
+package com.jcdm.main.da.opcuaconfig.client;
+
+import com.google.common.collect.ImmutableList;
+import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
+import com.jcdm.main.da.opcuaconfig.domain.NodeEntity;
+import com.jcdm.main.da.opcuaconfig.service.IDaOpcuaConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
+import org.eclipse.milo.opcua.sdk.client.api.nodes.VariableNode;
+import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaSubscription;
+import org.eclipse.milo.opcua.stack.core.AttributeId;
+import org.eclipse.milo.opcua.stack.core.BuiltinDataType;
+import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
+import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
+import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode;
+import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
+import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * @ClassName: ClientHandler
+ * @Description: 瀹㈡埛绔鐞�
+ * @author Jellyleo
+ * @date 2019骞�12鏈�12鏃�
+ */
+@Slf4j
+@Service
+public class ClientHandler {
+
+	// 瀹㈡埛绔疄渚�
+	public static OpcUaClient client = null;
+
+	public List<DaOpcuaConfig> b = null;
+
+	@Autowired
+	private ClientRunner clientRunner;
+
+	@Autowired
+	private IDaOpcuaConfigService daOpcuaConfigService;
+
+
+	/**
+	 * 
+	 * @MethodName: connect
+	 * @Description: connect
+	 * @throws Exception
+	 * @CreateTime 2019骞�12鏈�18鏃� 涓婂崍10:41:09
+	 */
+	public String connect() throws Exception {
+
+		if (client != null) {
+			return "瀹㈡埛绔凡鍒涘缓";
+		}
+
+		client = clientRunner.run();
+
+		if (client == null) {
+			return "瀹㈡埛绔厤缃疄渚嬪寲澶辫触";
+		}
+
+		// 鍒涘缓杩炴帴
+		client.connect().get();
+		return "鍒涘缓杩炴帴鎴愬姛";
+	}
+
+	/**
+	 * @MethodName: disconnect
+	 * @Description: 鏂紑杩炴帴
+	 * @return
+	 * @throws Exception
+	 * @CreateTime 2019骞�12鏈�18鏃� 涓婂崍10:45:21
+	 */
+	public String disconnect() throws Exception {
+
+		if (client == null) {
+			return "杩炴帴宸叉柇寮�";
+		}
+
+		// 鏂紑杩炴帴
+		clientRunner.getFuture().complete(client);
+		client = null;
+		return "鏂紑杩炴帴鎴愬姛";
+	}
+
+	/**
+	 * @MethodName: subscribe
+	 * @Description: 璁㈤槄鑺傜偣鍙橀噺
+	 * @throws Exception
+	 * @CreateTime 2019骞�12鏈�18鏃� 涓婂崍10:38:11
+	 */
+	public String subscribe(List<NodeEntity> nodes) throws Exception {
+
+		if (client == null) {
+			return "鎵句笉鍒板鎴风锛屾搷浣滃け璐�";
+		}
+
+		// 鏌ヨ璁㈤槄瀵硅薄锛屾病鏈夊垯鍒涘缓
+		UaSubscription subscription = null;
+		ImmutableList<UaSubscription> subscriptionList = client.getSubscriptionManager().getSubscriptions();
+		if (CollectionUtils.isEmpty(subscriptionList)) {
+			subscription = client.getSubscriptionManager().createSubscription(1000.0).get();
+		} else {
+			subscription = subscriptionList.get(0);
+		}
+
+		// 鐩戞帶椤硅姹傚垪琛�
+		List<MonitoredItemCreateRequest> requests = new ArrayList<>();
+
+		if (!CollectionUtils.isEmpty(nodes)) {
+			for (NodeEntity node : nodes) {
+				// 鍒涘缓鐩戞帶鐨勫弬鏁�
+				MonitoringParameters parameters = new MonitoringParameters(subscription.nextClientHandle(), 1000.0, // sampling
+						// interval
+						null, // filter, null means use default
+						Unsigned.uint(10), // queue size
+						true // discard oldest
+				);
+				// 鍒涘缓璁㈤槄鐨勫彉閲忥紝 鍒涘缓鐩戞帶椤硅 姹�
+				MonitoredItemCreateRequest request = new MonitoredItemCreateRequest(
+						new ReadValueId(new NodeId(node.getIndex(), node.getIdentifier()), AttributeId.Value.uid(),
+								null, null),
+						MonitoringMode.Reporting, parameters);
+				requests.add(request);
+			}
+		}
+
+		// 鍒涘缓鐩戞帶椤癸紝骞朵笖娉ㄥ唽鍙橀噺鍊兼敼鍙樻椂鍊欑殑鍥炶皟鍑芥暟
+		subscription.createMonitoredItems(TimestampsToReturn.Both, requests, (item, id) -> {
+			item.setValueConsumer((i, v) -> {
+				handle(i.getReadValueId().getNodeId(), v.getValue());
+			});
+		}).get();
+
+		return "璁㈤槄鎴愬姛";
+	}
+
+	/**
+	 * * @MethodName: write
+	 * @Description: 鍥炶皟鍑芥暟
+	 * @CreateTime 2023骞�10鏈�13鏃�
+	 */
+	public void handle(NodeId id, Variant value){
+		if (b == null || 0 > b.size()) {
+			DaOpcuaConfig opcuaConfParam=new DaOpcuaConfig();
+		    opcuaConfParam.setSubscribe("Y");
+		    b=daOpcuaConfigService.selectDaOpcuaConfigList(opcuaConfParam);
+		}
+		//浣跨敤Stream API鍦↙ist<T>涓煡鎵惧厓绱�
+		DaOpcuaConfig daOpcuaConfig = b.stream()
+				.filter(customer ->id.getIdentifier().toString().equals(customer.getNode()))
+				.findAny()
+				.orElse(null);
+		try {
+			Class<?> clazz = Class.forName("com.jcdm.main.da.opcuaconfig.cert.MethodName");
+			Method method = clazz.getMethod(daOpcuaConfig.getrFunction(), new Class[] { String.class, String.class });
+			method.invoke(clazz.newInstance(),new Object[] {
+					new String(id.getIdentifier().toString()), new String(value.getValue().toString()) });
+		} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InstantiationException |
+				 InvocationTargetException e) {
+			e.printStackTrace();
+		}
+	}
+
+
+	/**
+	 * @MethodName: write
+	 * @Description: 鍙樿妭鐐归噺鍐欏叆
+	 * @param node
+	 * @throws Exception
+	 * @CreateTime 2019骞�12鏈�18鏃� 涓婂崍9:51:40
+	 */
+	public static Boolean write(NodeEntity node) throws Exception {
+
+		if (client == null) {
+			log.info("鎵句笉鍒板鎴风锛屾搷浣滃け璐�");
+			return false;
+		}
+
+		NodeId nodeId = new NodeId(node.getIndex(), node.getIdentifier());
+		Variant value = null;
+		switch (node.getType()) {
+		case "int":
+			value = new Variant(Integer.parseInt(node.getValue().toString()));
+			break;
+		case "boolean":
+			value = new Variant(Boolean.parseBoolean(node.getValue().toString()));
+			break;
+		case "short":
+			value = new Variant(Short.parseShort(node.getValue().toString()));
+			break;
+		case "long":
+			value = new Variant(Long.parseLong(node.getValue().toString()));
+			break;
+		case "string":
+			value = new Variant(node.getValue().toString());
+			break;
+		case "char":
+			value = new Variant(node.getValue().toString().charAt(0));
+			break;
+		}
+		DataValue dataValue = new DataValue(value, null, null);
+
+		StatusCode statusCode = client.writeValue(nodeId, dataValue).get();
+
+		return statusCode.isGood();
+	}
+
+	/**
+	 * 鏂规硶鎻忚堪: 璇诲彇澶氫釜鐐逛綅鐨勫��
+	 *
+	 * @param nodeIdList 鐐逛綅闆嗗悎
+	 * @return {@link List<DataValue>}
+	 * @throws
+	 */
+	public static List<DataValue> readValues(List<NodeId> nodeIdList){
+		try {
+			List<DataValue> dataValues=client.readValues(0.0, TimestampsToReturn.Both,nodeIdList).get();
+			return dataValues;
+		} catch (InterruptedException | ExecutionException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	/**
+	 * @MethodName: read
+	 * @Description: 璇诲彇
+	 * @param node
+	 * @return
+	 * @throws Exception
+	 * @CreateTime 2019骞�12鏈�19鏃� 涓嬪崍2:40:34
+	 */
+	public String read(NodeEntity node) throws Exception {
+
+		if (client == null) {
+			return "鎵句笉鍒板鎴风锛屾搷浣滃け璐�";
+		}
+
+		NodeId nodeId = new NodeId(node.getIndex(), node.getIdentifier());
+		VariableNode vnode = client.getAddressSpace().createVariableNode(nodeId);
+		DataValue value = vnode.readValue().get();
+		log.info("Value={}", value);
+
+		Variant variant = value.getValue();
+		log.info("Variant={}", variant.getValue());
+
+		log.info("BackingClass={}", BuiltinDataType.getBackingClass(variant.getDataType().get()));
+
+		return variant.getValue().toString();
+	}
+
+
+	/**
+	 * 鏂规硶鎻忚堪:  鍐欏叆澶氫釜鑺傜偣鐨勫��
+	 *
+	 * @param keys  鑺傜偣闆嗗悎
+	 * @param values  鍊奸泦鍚�
+	 * @param client  瀹㈡埛绔�
+	 * @return {@link Object}
+	 * @throws
+	 */
+	public static Object writeValues(Set<String> keys, List<Object> values, OpcUaClient client){
+		List<NodeId> nodeIs=new ArrayList<>(keys.size());
+		keys.forEach(e->{
+			NodeId nodeId = new NodeId(2, e);
+			nodeIs.add(nodeId);
+		});
+		List<DataValue> dataValues=new ArrayList<>(values.size());
+		values.forEach(e->{
+			Variant value=new Variant(Double.parseDouble(e.toString()));
+			DataValue dataValue=new DataValue(value);
+			dataValues.add(dataValue);
+		});
+		try {
+			client.writeValues(nodeIs,dataValues).get();
+		} catch (InterruptedException | ExecutionException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/client/ClientRunner.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/client/ClientRunner.java
new file mode 100644
index 0000000..513a6dd
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/client/ClientRunner.java
@@ -0,0 +1,146 @@
+package com.jcdm.main.da.opcuaconfig.client;
+
+import com.jcdm.main.da.opcuaconfig.cert.KeyStoreLoader;
+import com.jcdm.main.da.opcuaconfig.init.Properties;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
+import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfig;
+import org.eclipse.milo.opcua.sdk.client.api.identity.AnonymousProvider;
+import org.eclipse.milo.opcua.stack.client.DiscoveryClient;
+import org.eclipse.milo.opcua.stack.core.Stack;
+import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
+import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
+import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned;
+import org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.function.Predicate;
+
+/**
+ * @ClassName: ClientRunner
+ * @Description: 瀹㈡埛绔惎鍔ㄧ被
+ * @author yyt
+ * @date 2023骞�10鏈�13鏃�
+ */
+@Slf4j
+@Component
+public class ClientRunner {
+
+	private final CompletableFuture<OpcUaClient> future = new CompletableFuture<>();
+
+	@Autowired
+	private Properties properties;
+
+	@Autowired
+	private KeyStoreLoader keyStoreLoader;
+
+	/**
+	 * @MethodName: run
+	 * @Description: 鍚姩
+	 * @return
+	 * @throws Exception
+	 * @CreateTime 2023骞�10鏈�13鏃�
+	 */
+	public OpcUaClient run() throws Exception {
+
+		OpcUaClient client = createClient();
+
+		future.whenCompleteAsync((c, ex) -> {
+			if (ex != null) {
+				log.error("Error running example: {}", ex.getMessage(), ex);
+			}
+
+			try {
+				c.disconnect().get();
+				Stack.releaseSharedResources();
+			} catch (InterruptedException | ExecutionException e) {
+				log.error("Error disconnecting:", e.getMessage(), e);
+			}
+		});
+
+		return client;
+	}
+
+	/**
+	 * @MethodName: createClient
+	 * @Description: 鍒涘缓瀹㈡埛绔�
+	 * @return
+	 * @throws Exception
+	 * @CreateTime 2023骞�10鏈�13鏃�
+	 */
+	private OpcUaClient createClient() throws Exception {
+
+		Path securityTempDir = Paths.get(properties.getCertPath(), "security");
+		Files.createDirectories(securityTempDir);
+		if (!Files.exists(securityTempDir)) {
+			log.error("unable to create security dir: " + securityTempDir);
+			return null;
+		}
+
+		KeyStoreLoader loader = keyStoreLoader.load(securityTempDir);
+
+		// 鎼滅储OPC鑺傜偣
+		List<EndpointDescription> endpoints = null;
+		try {
+			//鑾峰彇瀹夊叏绛栫暐
+			endpoints = DiscoveryClient.getEndpoints(properties.getEndpointUrl()).get();
+		} catch (Throwable e) {
+			// try the explicit discovery endpoint as well
+			String discoveryUrl = properties.getEndpointUrl();
+
+			if (!discoveryUrl.endsWith("/")) {
+				discoveryUrl += "/";
+			}
+			discoveryUrl += "discovery";
+
+			log.info("Trying explicit discovery URL: {}", discoveryUrl);
+			endpoints = DiscoveryClient.getEndpoints(discoveryUrl).get();
+		}
+
+		EndpointDescription endpoint = endpoints.stream()
+				.filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri())).filter(endpointFilter())
+				.findFirst().orElseThrow(() -> new Exception("no desired endpoints returned"));
+
+		OpcUaClientConfig config = OpcUaClientConfig.builder()
+				// opc ua鑷畾涔夌殑鍚嶇О
+				.setApplicationName(LocalizedText.english("plc"))
+				// 鍦板潃
+				.setApplicationUri(properties.getEndpointUrl())
+				.setCertificate(loader.getClientCertificate()).setKeyPair(loader.getClientKeyPair())
+				// 瀹夊叏绛栫暐绛夐厤缃�
+				//.setEndpoint(endpoint).setIdentityProvider(new UsernameProvider("OPCUA", "yyt@8888888888"))
+				.setEndpoint(endpoint)
+				// 鍖垮悕楠岃瘉
+				.setIdentityProvider(new AnonymousProvider())
+				//绛夊緟鏃堕棿
+				.setRequestTimeout(Unsigned.uint(5000)).build();
+
+		return OpcUaClient.create(config);
+
+	}
+
+	/**
+	 * @MethodName: endpointFilter
+	 * @Description: endpointFilter
+	 * @return
+	 * @CreateTime 2023骞�10鏈�13鏃�
+	 */
+	private Predicate<EndpointDescription> endpointFilter() {
+		return e -> true;
+	}
+
+	/**
+	 * @return the future
+	 */
+	public CompletableFuture<OpcUaClient> getFuture() {
+		return future;
+	}
+
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/controller/DaOpcuaConfigController.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/controller/DaOpcuaConfigController.java
new file mode 100644
index 0000000..b052a20
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/controller/DaOpcuaConfigController.java
@@ -0,0 +1,98 @@
+package com.jcdm.main.da.opcuaconfig.controller;
+
+import com.jcdm.common.annotation.Log;
+import com.jcdm.common.core.controller.BaseController;
+import com.jcdm.common.core.domain.AjaxResult;
+import com.jcdm.common.core.page.TableDataInfo;
+import com.jcdm.common.enums.BusinessType;
+import com.jcdm.common.utils.poi.ExcelUtil;
+import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
+import com.jcdm.main.da.opcuaconfig.service.IDaOpcuaConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 浜や簰淇″彿閰嶇疆Controller
+ * 
+ * @author yyt
+ * @date 2024-01-23
+ */
+@RestController
+@RequestMapping("/da/opcuaconfig")
+public class DaOpcuaConfigController extends BaseController
+{
+    @Autowired
+    private IDaOpcuaConfigService daOpcuaConfigService;
+
+    /**
+     * 鏌ヨ浜や簰淇″彿閰嶇疆鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('da:opcuaconfig:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(DaOpcuaConfig daOpcuaConfig)
+    {
+        startPage();
+        List<DaOpcuaConfig> list = daOpcuaConfigService.selectDaOpcuaConfigList(daOpcuaConfig);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭浜や簰淇″彿閰嶇疆鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('da:opcuaconfig:export')")
+    @Log(title = "浜や簰淇″彿閰嶇疆", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, DaOpcuaConfig daOpcuaConfig)
+    {
+        List<DaOpcuaConfig> list = daOpcuaConfigService.selectDaOpcuaConfigList(daOpcuaConfig);
+        ExcelUtil<DaOpcuaConfig> util = new ExcelUtil<DaOpcuaConfig>(DaOpcuaConfig.class);
+        util.exportExcel(response, list, "浜や簰淇″彿閰嶇疆鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇浜や簰淇″彿閰嶇疆璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('da:opcuaconfig:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(daOpcuaConfigService.selectDaOpcuaConfigById(id));
+    }
+
+    /**
+     * 鏂板浜や簰淇″彿閰嶇疆
+     */
+    @PreAuthorize("@ss.hasPermi('da:opcuaconfig:add')")
+    @Log(title = "浜や簰淇″彿閰嶇疆", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody DaOpcuaConfig daOpcuaConfig)
+    {
+        return toAjax(daOpcuaConfigService.insertDaOpcuaConfig(daOpcuaConfig));
+    }
+
+    /**
+     * 淇敼浜や簰淇″彿閰嶇疆
+     */
+    @PreAuthorize("@ss.hasPermi('da:opcuaconfig:edit')")
+    @Log(title = "浜や簰淇″彿閰嶇疆", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody DaOpcuaConfig daOpcuaConfig)
+    {
+        return toAjax(daOpcuaConfigService.updateDaOpcuaConfig(daOpcuaConfig));
+    }
+
+    /**
+     * 鍒犻櫎浜や簰淇″彿閰嶇疆
+     */
+    @PreAuthorize("@ss.hasPermi('da:opcuaconfig:remove')")
+    @Log(title = "浜や簰淇″彿閰嶇疆", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(daOpcuaConfigService.deleteDaOpcuaConfigByIds(ids));
+    }
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/domain/DaOpcuaConfig.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/domain/DaOpcuaConfig.java
new file mode 100644
index 0000000..f9ea5ac
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/domain/DaOpcuaConfig.java
@@ -0,0 +1,149 @@
+package com.jcdm.main.da.opcuaconfig.domain;
+
+import com.jcdm.common.annotation.Excel;
+import com.jcdm.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 浜や簰淇″彿閰嶇疆瀵硅薄 da_opcua_config
+ * 
+ * @author yyt
+ * @date 2024-01-23
+ */
+public class DaOpcuaConfig extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    private Long id;
+
+    /** 鑺傜偣 */
+    @Excel(name = "鑺傜偣")
+    private String node;
+
+    /** 鏁版嵁绫诲瀷 */
+    @Excel(name = "鏁版嵁绫诲瀷")
+    private String sysTypes;
+
+    /** 鏄惁璁㈤槄 */
+    @Excel(name = "鏄惁璁㈤槄")
+    private String subscribe;
+
+    /** 璁㈤槄绫诲瀷 */
+    @Excel(name = "璁㈤槄绫诲瀷")
+    private String rFunction;
+
+    /** 澶囨敞 */
+    @Excel(name = "澶囨敞")
+    private String remarks;
+
+    /** 宸ュ簭鍚嶇О */
+    @Excel(name = "宸ュ簭鍚嶇О")
+    private String processName;
+
+    /** 宸ュ簭缂栫爜 */
+    @Excel(name = "宸ュ簭缂栫爜")
+    private String process;
+
+    /** 鐘舵�� */
+    @Excel(name = "鐘舵��")
+    private Long state;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setNode(String node) 
+    {
+        this.node = node;
+    }
+
+    public String getNode() 
+    {
+        return node;
+    }
+    public void setSysTypes(String sysTypes) 
+    {
+        this.sysTypes = sysTypes;
+    }
+
+    public String getSysTypes() 
+    {
+        return sysTypes;
+    }
+    public void setSubscribe(String subscribe) 
+    {
+        this.subscribe = subscribe;
+    }
+
+    public String getSubscribe() 
+    {
+        return subscribe;
+    }
+    public void setrFunction(String rFunction) 
+    {
+        this.rFunction = rFunction;
+    }
+
+    public String getrFunction() 
+    {
+        return rFunction;
+    }
+    public void setRemarks(String remarks) 
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks() 
+    {
+        return remarks;
+    }
+    public void setProcessName(String processName) 
+    {
+        this.processName = processName;
+    }
+
+    public String getProcessName() 
+    {
+        return processName;
+    }
+    public void setProcess(String process) 
+    {
+        this.process = process;
+    }
+
+    public String getProcess() 
+    {
+        return process;
+    }
+    public void setState(Long state) 
+    {
+        this.state = state;
+    }
+
+    public Long getState() 
+    {
+        return state;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("node", getNode())
+            .append("sysTypes", getSysTypes())
+            .append("subscribe", getSubscribe())
+            .append("rFunction", getrFunction())
+            .append("remarks", getRemarks())
+            .append("processName", getProcessName())
+            .append("process", getProcess())
+            .append("state", getState())
+            .toString();
+    }
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/domain/NodeEntity.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/domain/NodeEntity.java
new file mode 100644
index 0000000..8d4ba5d
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/domain/NodeEntity.java
@@ -0,0 +1,19 @@
+package com.jcdm.main.da.opcuaconfig.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder(toBuilder = true)
+@AllArgsConstructor
+@NoArgsConstructor
+public class NodeEntity {
+
+	private Integer index;
+	private String identifier;
+	private Object value;
+	private String type;
+	private Integer clientHandle;
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/BeanUtils.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/BeanUtils.java
new file mode 100644
index 0000000..b61e3b5
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/BeanUtils.java
@@ -0,0 +1,30 @@
+package com.jcdm.main.da.opcuaconfig.init;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class BeanUtils implements ApplicationContextAware {
+    protected static ApplicationContext applicationContext ;
+
+    @Override
+    public void setApplicationContext(ApplicationContext arg0) throws BeansException {
+        if (applicationContext == null) {
+            applicationContext = arg0;
+        }
+
+    }
+    public static Object getBean(String name) {
+        //name琛ㄧず鍏朵粬瑕佹敞鍏ョ殑娉ㄨВname鍚�
+        return applicationContext.getBean(name);
+    }
+
+    /**
+     * 鎷垮埌ApplicationContext瀵硅薄瀹炰緥鍚庡氨鍙互鎵嬪姩鑾峰彇Bean鐨勬敞鍏ュ疄渚嬪璞�
+     */
+    public static <T> T getBean(Class<T> clazz) {
+        return applicationContext.getBean(clazz);
+    }
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/OpcusConfigInit.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/OpcusConfigInit.java
new file mode 100644
index 0000000..2404567
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/OpcusConfigInit.java
@@ -0,0 +1,48 @@
+package com.jcdm.main.da.opcuaconfig.init;
+
+import com.google.common.collect.Lists;
+import com.jcdm.main.da.opcuaconfig.client.ClientHandler;
+import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
+import com.jcdm.main.da.opcuaconfig.domain.NodeEntity;
+import com.jcdm.main.da.opcuaconfig.service.IDaOpcuaConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@Slf4j
+public class OpcusConfigInit implements CommandLineRunner {
+
+    @Autowired
+    private ClientHandler clientHandler;
+
+    @Autowired
+    private IDaOpcuaConfigService daOpcuaConfigService;
+
+    @Override
+    public void run(String... args) throws Exception {
+        try {
+            DaOpcuaConfig daOpcuaConfig=new DaOpcuaConfig();
+            daOpcuaConfig.setSubscribe("Y"); //璁剧疆鏌ヨ鏉′欢锛屾槸鍚﹁闃呯姸鎬佷负Y鐨勬墍鏈夋暟鎹�.
+            List<DaOpcuaConfig> nodeslist=daOpcuaConfigService.selectDaOpcuaConfigList(daOpcuaConfig);
+            clientHandler.connect();
+            if (nodeslist != null && nodeslist.size() > 0) {
+                List<NodeEntity> NodeList = Lists.transform(nodeslist, (DaOpcuaConfig) -> {
+                    NodeEntity nodeEntity = new NodeEntity();
+                    nodeEntity.setIndex(2);
+                    nodeEntity.setIdentifier(DaOpcuaConfig.getNode());
+                    return nodeEntity;
+                });
+                clientHandler.subscribe(NodeList);
+                log.info("鍒濆鍖朞PC璁㈤槄" + nodeslist.size() + "鏉★紒");
+            }
+            log.info("绯荤粺鎻愮ず锛孫PCUA璁㈤槄鎴愬姛锛�");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.info("绯荤粺鎻愮ず锛孫PCUA璁㈤槄澶辫触锛�");
+        }
+    }
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/Properties.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/Properties.java
new file mode 100644
index 0000000..fc06c6b
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/init/Properties.java
@@ -0,0 +1,57 @@
+/**
+ * Created by Jellyleo on 2019骞�12鏈�19鏃�
+ * Copyright 漏 2019 jellyleo.com 
+ * All rights reserved. 
+ */
+package com.jcdm.main.da.opcuaconfig.init;
+
+import lombok.Getter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+/**
+ * @ClassName: Properties
+ * @Description: OpcUa鍙傛暟
+ * @author yyt
+ * @date 2023骞�10鏈�13鏃�
+ */
+@Getter
+@Configuration
+@PropertySource("classpath:opcua.properties")
+public class Properties {
+	@Value("${opcua.server.endpoint.url}")
+	private String endpointUrl;
+	@Value("${opcua.server.idp.username}")
+	private String idpUsername;
+	@Value("${opcua.server.idp.password}")
+	private String idpPassword;
+	@Value("${opcua.client.app.name}")
+	private String appName;
+	@Value("${opcua.client.app.uri}")
+	private String appUri;
+	@Value("${opcua.client.cert.path}")
+	private String certPath;
+	@Value("${opcua.client.cert.file}")
+	private String certFile;
+	@Value("${opcua.client.cert.alias}")
+	private String certAlias;
+	@Value("${opcua.client.cert.common.name}")
+	private String commonName;
+	@Value("${opcua.client.cert.organization}")
+	private String organization;
+	@Value("${opcua.client.cert.organization.unit}")
+	private String orgUnit;
+	@Value("${opcua.client.cert.locality.name}")
+	private String localityName;
+	@Value("${opcua.client.cert.state.name}")
+	private String stateName;
+	@Value("${opcua.client.cert.country.code}")
+	private String countryCode;
+	@Value("${opcua.client.cert.dns.name}")
+	private String dnsName;
+	@Value("${opcua.client.cert.ip.address}")
+	private String ipAddress;
+	@Value("${opcua.client.cert.keystore.password}")
+	private String keyPassword;
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/mapper/DaOpcuaConfigMapper.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/mapper/DaOpcuaConfigMapper.java
new file mode 100644
index 0000000..7feb41d
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/mapper/DaOpcuaConfigMapper.java
@@ -0,0 +1,62 @@
+package com.jcdm.main.da.opcuaconfig.mapper;
+
+import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
+
+import java.util.List;
+
+/**
+ * 浜や簰淇″彿閰嶇疆Mapper鎺ュ彛
+ * 
+ * @author yyt
+ * @date 2024-01-23
+ */
+public interface DaOpcuaConfigMapper 
+{
+    /**
+     * 鏌ヨ浜や簰淇″彿閰嶇疆
+     * 
+     * @param id 浜や簰淇″彿閰嶇疆涓婚敭
+     * @return 浜や簰淇″彿閰嶇疆
+     */
+    public DaOpcuaConfig selectDaOpcuaConfigById(Long id);
+
+    /**
+     * 鏌ヨ浜や簰淇″彿閰嶇疆鍒楄〃
+     * 
+     * @param daOpcuaConfig 浜や簰淇″彿閰嶇疆
+     * @return 浜や簰淇″彿閰嶇疆闆嗗悎
+     */
+    public List<DaOpcuaConfig> selectDaOpcuaConfigList(DaOpcuaConfig daOpcuaConfig);
+
+    /**
+     * 鏂板浜や簰淇″彿閰嶇疆
+     * 
+     * @param daOpcuaConfig 浜や簰淇″彿閰嶇疆
+     * @return 缁撴灉
+     */
+    public int insertDaOpcuaConfig(DaOpcuaConfig daOpcuaConfig);
+
+    /**
+     * 淇敼浜や簰淇″彿閰嶇疆
+     * 
+     * @param daOpcuaConfig 浜や簰淇″彿閰嶇疆
+     * @return 缁撴灉
+     */
+    public int updateDaOpcuaConfig(DaOpcuaConfig daOpcuaConfig);
+
+    /**
+     * 鍒犻櫎浜や簰淇″彿閰嶇疆
+     * 
+     * @param id 浜や簰淇″彿閰嶇疆涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteDaOpcuaConfigById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎浜や簰淇″彿閰嶇疆
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteDaOpcuaConfigByIds(Long[] ids);
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/service/IDaOpcuaConfigService.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/service/IDaOpcuaConfigService.java
new file mode 100644
index 0000000..13fbdfa
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/service/IDaOpcuaConfigService.java
@@ -0,0 +1,62 @@
+package com.jcdm.main.da.opcuaconfig.service;
+
+import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
+
+import java.util.List;
+
+/**
+ * 浜や簰淇″彿閰嶇疆Service鎺ュ彛
+ * 
+ * @author yyt
+ * @date 2024-01-23
+ */
+public interface IDaOpcuaConfigService 
+{
+    /**
+     * 鏌ヨ浜や簰淇″彿閰嶇疆
+     * 
+     * @param id 浜や簰淇″彿閰嶇疆涓婚敭
+     * @return 浜や簰淇″彿閰嶇疆
+     */
+    public DaOpcuaConfig selectDaOpcuaConfigById(Long id);
+
+    /**
+     * 鏌ヨ浜や簰淇″彿閰嶇疆鍒楄〃
+     * 
+     * @param daOpcuaConfig 浜や簰淇″彿閰嶇疆
+     * @return 浜や簰淇″彿閰嶇疆闆嗗悎
+     */
+    public List<DaOpcuaConfig> selectDaOpcuaConfigList(DaOpcuaConfig daOpcuaConfig);
+
+    /**
+     * 鏂板浜や簰淇″彿閰嶇疆
+     * 
+     * @param daOpcuaConfig 浜や簰淇″彿閰嶇疆
+     * @return 缁撴灉
+     */
+    public int insertDaOpcuaConfig(DaOpcuaConfig daOpcuaConfig);
+
+    /**
+     * 淇敼浜や簰淇″彿閰嶇疆
+     * 
+     * @param daOpcuaConfig 浜や簰淇″彿閰嶇疆
+     * @return 缁撴灉
+     */
+    public int updateDaOpcuaConfig(DaOpcuaConfig daOpcuaConfig);
+
+    /**
+     * 鎵归噺鍒犻櫎浜や簰淇″彿閰嶇疆
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑浜や簰淇″彿閰嶇疆涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteDaOpcuaConfigByIds(Long[] ids);
+
+    /**
+     * 鍒犻櫎浜や簰淇″彿閰嶇疆淇℃伅
+     * 
+     * @param id 浜や簰淇″彿閰嶇疆涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteDaOpcuaConfigById(Long id);
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/service/impl/DaOpcuaConfigServiceImpl.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/service/impl/DaOpcuaConfigServiceImpl.java
new file mode 100644
index 0000000..02e9c42
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/service/impl/DaOpcuaConfigServiceImpl.java
@@ -0,0 +1,94 @@
+package com.jcdm.main.da.opcuaconfig.service.impl;
+
+import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
+import com.jcdm.main.da.opcuaconfig.mapper.DaOpcuaConfigMapper;
+import com.jcdm.main.da.opcuaconfig.service.IDaOpcuaConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 浜や簰淇″彿閰嶇疆Service涓氬姟灞傚鐞�
+ * 
+ * @author yyt
+ * @date 2024-01-23
+ */
+@Service
+public class DaOpcuaConfigServiceImpl implements IDaOpcuaConfigService
+{
+    @Autowired
+    private DaOpcuaConfigMapper daOpcuaConfigMapper;
+
+    /**
+     * 鏌ヨ浜や簰淇″彿閰嶇疆
+     * 
+     * @param id 浜や簰淇″彿閰嶇疆涓婚敭
+     * @return 浜や簰淇″彿閰嶇疆
+     */
+    @Override
+    public DaOpcuaConfig selectDaOpcuaConfigById(Long id)
+    {
+        return daOpcuaConfigMapper.selectDaOpcuaConfigById(id);
+    }
+
+    /**
+     * 鏌ヨ浜や簰淇″彿閰嶇疆鍒楄〃
+     * 
+     * @param daOpcuaConfig 浜や簰淇″彿閰嶇疆
+     * @return 浜や簰淇″彿閰嶇疆
+     */
+    @Override
+    public List<DaOpcuaConfig> selectDaOpcuaConfigList(DaOpcuaConfig daOpcuaConfig)
+    {
+        return daOpcuaConfigMapper.selectDaOpcuaConfigList(daOpcuaConfig);
+    }
+
+    /**
+     * 鏂板浜や簰淇″彿閰嶇疆
+     * 
+     * @param daOpcuaConfig 浜や簰淇″彿閰嶇疆
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertDaOpcuaConfig(DaOpcuaConfig daOpcuaConfig)
+    {
+        return daOpcuaConfigMapper.insertDaOpcuaConfig(daOpcuaConfig);
+    }
+
+    /**
+     * 淇敼浜や簰淇″彿閰嶇疆
+     * 
+     * @param daOpcuaConfig 浜や簰淇″彿閰嶇疆
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateDaOpcuaConfig(DaOpcuaConfig daOpcuaConfig)
+    {
+        return daOpcuaConfigMapper.updateDaOpcuaConfig(daOpcuaConfig);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎浜や簰淇″彿閰嶇疆
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑浜や簰淇″彿閰嶇疆涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteDaOpcuaConfigByIds(Long[] ids)
+    {
+        return daOpcuaConfigMapper.deleteDaOpcuaConfigByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎浜や簰淇″彿閰嶇疆淇℃伅
+     * 
+     * @param id 浜や簰淇″彿閰嶇疆涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteDaOpcuaConfigById(Long id)
+    {
+        return daOpcuaConfigMapper.deleteDaOpcuaConfigById(id);
+    }
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/controller/DaParamCollectionController.java b/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/controller/DaParamCollectionController.java
index cd73dbd..082011e 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/controller/DaParamCollectionController.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/controller/DaParamCollectionController.java
@@ -1,27 +1,20 @@
 package com.jcdm.main.da.paramCollection.controller;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
-import com.jcdm.common.utils.DateUtils;
-import com.jcdm.main.da.paramCollection.domain.DaParamCollection;
-import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.jcdm.common.annotation.Log;
 import com.jcdm.common.core.controller.BaseController;
 import com.jcdm.common.core.domain.AjaxResult;
-import com.jcdm.common.enums.BusinessType;
-import com.jcdm.common.utils.poi.ExcelUtil;
 import com.jcdm.common.core.page.TableDataInfo;
+import com.jcdm.common.enums.BusinessType;
+import com.jcdm.common.utils.DateUtils;
+import com.jcdm.common.utils.poi.ExcelUtil;
+import com.jcdm.main.da.paramCollection.domain.DaParamCollection;
+import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 璁惧浜у搧杩囩▼鍙傛暟閲囬泦Controller
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/domain/DaParamCollection.java b/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/domain/DaParamCollection.java
index ad11ae4..05d7528 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/domain/DaParamCollection.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/domain/DaParamCollection.java
@@ -1,11 +1,11 @@
 package com.jcdm.main.da.paramCollection.domain;
 
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.jcdm.common.annotation.Excel;
 import com.jcdm.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
 
 /**
  * 璁惧浜у搧杩囩▼鍙傛暟閲囬泦瀵硅薄 da_param_collection
@@ -65,8 +65,7 @@
     private String paramStandard;
 
     /** 閲囬泦鏃堕棿 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "閲囬泦鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    @Excel(name = "閲囬泦鏃堕棿")
     private Date collectionTime;
 
     /** 棰勭暀瀛楁1 */
@@ -96,15 +95,6 @@
     /** 绫诲瀷 */
     @Excel(name = "绫诲瀷")
     private String type;
-    @Excel(name = "鍙傛暟闆嗙紪鐮�")
-    private String parameterSetCode;
-    @Excel(name = "鍙傛暟闆嗗悕绉�")
-    private String parameterSetName;
-    @Excel(name = "宸ュ簭缂栧彿")
-    private String processesCode;
-    @Excel(name = "宸ュ簭鍚嶇О")
-    private String processesName;
-
 
     public void setId(Long id) 
     {
@@ -295,42 +285,6 @@
     {
         return type;
     }
-    public void setParameterSetCode(String parameterSetCode)
-    {
-        this.parameterSetCode = parameterSetCode;
-    }
-
-    public String getParameterSetCode()
-    {
-        return parameterSetCode;
-    }
-    public void setParameterSetName(String parameterSetName)
-    {
-        this.parameterSetName = parameterSetName;
-    }
-
-    public String getParameterSetName()
-    {
-        return parameterSetName;
-    }
-    public void setProcessesCode(String processesCode)
-    {
-        this.processesCode = processesCode;
-    }
-
-    public String getProcessesCode()
-    {
-        return processesCode;
-    }
-    public void setProcessesName(String processesName)
-    {
-        this.processesName = processesName;
-    }
-
-    public String getProcessesName()
-    {
-        return processesName;
-    }
 
     @Override
     public String toString() {
@@ -358,10 +312,6 @@
             .append("paramName", getParamName())
             .append("unit", getUnit())
             .append("type", getType())
-            .append("parameterSetCode", getParameterSetCode())
-            .append("parameterSetName", getParameterSetName())
-            .append("processesCode", getProcessesCode())
-            .append("processesName", getProcessesName())
             .toString();
     }
 }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/service/impl/DaParamCollectionServiceImpl.java b/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/service/impl/DaParamCollectionServiceImpl.java
index 2c3a908..54b40a6 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/service/impl/DaParamCollectionServiceImpl.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/service/impl/DaParamCollectionServiceImpl.java
@@ -1,6 +1,5 @@
 package com.jcdm.main.da.paramCollection.service.impl;
 
-import java.util.List;
 import com.jcdm.common.utils.DateUtils;
 import com.jcdm.main.da.paramCollection.domain.DaParamCollection;
 import com.jcdm.main.da.paramCollection.mapper.DaParamCollectionMapper;
@@ -8,6 +7,8 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 璁惧浜у搧杩囩▼鍙傛暟閲囬泦Service涓氬姟灞傚鐞�
  * 
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/common/Constants.java b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/common/Constants.java
new file mode 100644
index 0000000..5b0d40e
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/common/Constants.java
@@ -0,0 +1,5 @@
+package com.jcdm.main.da.passingStationCollection.common;
+
+public final class Constants {
+
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/controller/DaPassingStationCollectionController.java b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/controller/DaPassingStationCollectionController.java
index 999b8e7..4e655a7 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/controller/DaPassingStationCollectionController.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/controller/DaPassingStationCollectionController.java
@@ -1,27 +1,21 @@
 package com.jcdm.main.da.passingStationCollection.controller;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
-import com.jcdm.common.utils.DateUtils;
-import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection;
-import com.jcdm.main.da.passingStationCollection.service.IDaPassingStationCollectionService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.jcdm.common.annotation.Log;
 import com.jcdm.common.core.controller.BaseController;
 import com.jcdm.common.core.domain.AjaxResult;
-import com.jcdm.common.enums.BusinessType;
-import com.jcdm.common.utils.poi.ExcelUtil;
+import com.jcdm.common.core.domain.R;
 import com.jcdm.common.core.page.TableDataInfo;
+import com.jcdm.common.enums.BusinessType;
+import com.jcdm.common.utils.DateUtils;
+import com.jcdm.common.utils.poi.ExcelUtil;
+import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection;
+import com.jcdm.main.da.passingStationCollection.service.IDaPassingStationCollectionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 浜у搧杩囩珯閲囬泦Controller
@@ -49,6 +43,35 @@
     }
 
     /**
+     * 鏌ヨ浜у搧杩囩珯閲囬泦鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('da:passingStationCollection:list')")
+    @GetMapping("/noPageList")
+    public TableDataInfo noPageList(DaPassingStationCollection daPassingStationCollection)
+    {
+        List<DaPassingStationCollection> list = daPassingStationCollectionService.selectDaPassingStationCollectionList(daPassingStationCollection);
+        return getDataTable(list);
+    }
+
+//    @PreAuthorize("@ss.hasPermi('da:passingStationCollection:list')")
+//    @GetMapping("/getProduceNumToday")
+//    public R getProduceNumToday(String fieldName)
+//    {
+//        Integer num = daPassingStationCollectionService.getProduceNumToday(fieldName);
+//        return R.ok(num);
+//    }
+
+    /**
+     * 鏌ヨ浜у搧杩囩珯閲囬泦鍒楄〃
+     */
+    @GetMapping("/insertRepairRecordByIds")
+    public AjaxResult insertRepairRecordByIds(DaPassingStationCollection daPassingStationCollection)
+    {
+        daPassingStationCollectionService.insertRepairRecordByIds(daPassingStationCollection);
+        return AjaxResult.success();
+    }
+
+    /**
      * 瀵煎嚭浜у搧杩囩珯閲囬泦鍒楄〃
      */
     @PreAuthorize("@ss.hasPermi('da:passingStationCollection:export')")
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/domain/DaPassingStationCollection.java b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/domain/DaPassingStationCollection.java
index faf27ba..f6ce656 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/domain/DaPassingStationCollection.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/domain/DaPassingStationCollection.java
@@ -1,11 +1,11 @@
 package com.jcdm.main.da.passingStationCollection.domain;
 
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.jcdm.common.annotation.Excel;
 import com.jcdm.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
 
 /**
  * 浜у搧杩囩珯閲囬泦瀵硅薄 da_passing_station_collection
@@ -45,13 +45,13 @@
     private String equipmentNo;
 
     /** 鍏ョ珯鏃堕棿 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "鍏ョ珯鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+//    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "鍏ョ珯鏃堕棿")
     private Date inboundTime;
 
     /** 鍑虹珯鏃堕棿 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "鍑虹珯鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+//    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "鍑虹珯鏃堕棿")
     private Date outboundTime;
 
     /** 鍏ョ珯鏄惁鍚堟牸 */
@@ -71,8 +71,8 @@
     private String outMsgSign;
 
     /** 閲囬泦鏃堕棿 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "閲囬泦鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+//    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "閲囬泦鏃堕棿")
     private Date collectionTime;
 
     /** 棰勭暀瀛楁1 */
@@ -91,7 +91,17 @@
     @Excel(name = "鑺傛媿鏃堕棿")
     private String beatTime;
 
-    public void setId(Long id) 
+    private Long[] ids;
+
+    public Long[] getIds() {
+        return ids;
+    }
+
+    public void setIds(Long[] ids) {
+        this.ids = ids;
+    }
+
+    public void setId(Long id)
     {
         this.id = id;
     }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/IDaPassingStationCollectionService.java b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/IDaPassingStationCollectionService.java
index e251e00..f3cd0ca 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/IDaPassingStationCollectionService.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/IDaPassingStationCollectionService.java
@@ -28,6 +28,14 @@
      */
     public List<DaPassingStationCollection> selectDaPassingStationCollectionList(DaPassingStationCollection daPassingStationCollection);
 
+
+//    /**
+//     * 鑾峰彇棣栭〉鍗曟棩绱閲忎骇鏁版嵁
+//     * @param fieldName bs
+//     * @return list
+//     */
+//    public Integer getProduceNumToday(String fieldName);
+
     /**
      * 鏂板浜у搧杩囩珯閲囬泦
      * 
@@ -59,4 +67,6 @@
      * @return 缁撴灉
      */
     public int deleteDaPassingStationCollectionById(Long id);
+
+    void insertRepairRecordByIds(DaPassingStationCollection daPassingStationCollection);
 }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java
index c5d10a9..a45c08e 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java
@@ -1,12 +1,21 @@
 package com.jcdm.main.da.passingStationCollection.service.impl;
 
-import java.util.List;
 import com.jcdm.common.utils.DateUtils;
+//import com.jcdm.main.bs.orderScheduling.domain.BsOrderScheduling;
+//import com.jcdm.main.bs.orderScheduling.mapper.BsOrderSchedulingMapper;
+//import com.jcdm.main.bs.orderScheduling.service.IBsOrderSchedulingService;
 import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection;
 import com.jcdm.main.da.passingStationCollection.mapper.DaPassingStationCollectionMapper;
 import com.jcdm.main.da.passingStationCollection.service.IDaPassingStationCollectionService;
+import com.jcdm.main.rm.repairRecord.domain.RmRepairRecord;
+import com.jcdm.main.rm.repairRecord.mapper.RmRepairRecordMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
 
 /**
  * 浜у搧杩囩珯閲囬泦Service涓氬姟灞傚鐞�
@@ -19,6 +28,15 @@
 {
     @Autowired
     private DaPassingStationCollectionMapper daPassingStationCollectionMapper;
+
+    @Autowired
+    private RmRepairRecordMapper rmRepairRecordMapper;
+
+//    @Autowired
+//    private BsOrderSchedulingMapper bsOrderSchedulingMapper;
+//
+//    @Autowired
+//    private IBsOrderSchedulingService bsOrderSchedulingService;
 
     /**
      * 鏌ヨ浜у搧杩囩珯閲囬泦
@@ -43,6 +61,26 @@
     {
         return daPassingStationCollectionMapper.selectDaPassingStationCollectionList(daPassingStationCollection);
     }
+
+//    /**
+//     * 鑾峰彇棣栭〉鍗曟棩绱閲忎骇鏁版嵁
+//     * @param fieldName bs
+//     * @return list
+//     */
+//    @Override
+//    public Integer getProduceNumToday(String fieldName) {
+//
+//        BsOrderScheduling bsOrderScheduling = new BsOrderScheduling();
+//        bsOrderScheduling.setQueryField(fieldName);
+//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+//        LocalDateTime startTime = LocalDate.now().atStartOfDay();
+//        LocalDateTime endTime = LocalDate.now().plusDays(1).atStartOfDay();
+//        String s1 = startTime.format(formatter);
+//        String s2 = endTime.format(formatter);
+//        bsOrderScheduling.setStartTime(s1);
+//        bsOrderScheduling.setEndTime(s2);
+//        return bsOrderSchedulingMapper.getProduceNumToday(bsOrderScheduling);
+//    }
 
     /**
      * 鏂板浜у搧杩囩珯閲囬泦
@@ -93,4 +131,17 @@
     {
         return daPassingStationCollectionMapper.deleteDaPassingStationCollectionById(id);
     }
+
+    @Override
+    public void insertRepairRecordByIds(DaPassingStationCollection daPassingStationCollection) {
+        Long[] conditions = daPassingStationCollection.getIds();
+        for (int i = 0; i < conditions.length; i++) {
+            DaPassingStationCollection result = daPassingStationCollectionMapper.selectDaPassingStationCollectionById(conditions[i]);
+            RmRepairRecord rmRepairRecord = new RmRepairRecord();
+            rmRepairRecord.setBoxCode(result.getSfcCode());
+            rmRepairRecord.setProcessesCode(result.getLocationCode());
+            rmRepairRecord.setOriginalResult(result.getOutRsSign());
+            rmRepairRecordMapper.insertRmRepairRecord(rmRepairRecord);
+        }
+    }
 }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/controller/DaTileMatchRulesController.java b/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/controller/DaTileMatchRulesController.java
new file mode 100644
index 0000000..bbb88e9
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/controller/DaTileMatchRulesController.java
@@ -0,0 +1,98 @@
+package com.jcdm.main.da.tileMatchRules.controller;
+
+import com.jcdm.common.annotation.Log;
+import com.jcdm.common.core.controller.BaseController;
+import com.jcdm.common.core.domain.AjaxResult;
+import com.jcdm.common.core.page.TableDataInfo;
+import com.jcdm.common.enums.BusinessType;
+import com.jcdm.common.utils.poi.ExcelUtil;
+import com.jcdm.main.da.tileMatchRules.domain.DaTileMatchRules;
+import com.jcdm.main.da.tileMatchRules.service.IDaTileMatchRulesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 閰嶇摝瑙勫垯Controller
+ * 
+ * @author jiang
+ * @date 2024-01-24
+ */
+@RestController
+@RequestMapping("/da/tileMatchRules")
+public class DaTileMatchRulesController extends BaseController
+{
+    @Autowired
+    private IDaTileMatchRulesService daTileMatchRulesService;
+
+    /**
+     * 鏌ヨ閰嶇摝瑙勫垯鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('da:tileMatchRules:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(DaTileMatchRules daTileMatchRules)
+    {
+        startPage();
+        List<DaTileMatchRules> list = daTileMatchRulesService.selectDaTileMatchRulesList(daTileMatchRules);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭閰嶇摝瑙勫垯鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('da:tileMatchRules:export')")
+    @Log(title = "閰嶇摝瑙勫垯", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, DaTileMatchRules daTileMatchRules)
+    {
+        List<DaTileMatchRules> list = daTileMatchRulesService.selectDaTileMatchRulesList(daTileMatchRules);
+        ExcelUtil<DaTileMatchRules> util = new ExcelUtil<DaTileMatchRules>(DaTileMatchRules.class);
+        util.exportExcel(response, list, "閰嶇摝瑙勫垯鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇閰嶇摝瑙勫垯璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('da:tileMatchRules:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(daTileMatchRulesService.selectDaTileMatchRulesById(id));
+    }
+
+    /**
+     * 鏂板閰嶇摝瑙勫垯
+     */
+    @PreAuthorize("@ss.hasPermi('da:tileMatchRules:add')")
+    @Log(title = "閰嶇摝瑙勫垯", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody DaTileMatchRules daTileMatchRules)
+    {
+        return toAjax(daTileMatchRulesService.insertDaTileMatchRules(daTileMatchRules));
+    }
+
+    /**
+     * 淇敼閰嶇摝瑙勫垯
+     */
+    @PreAuthorize("@ss.hasPermi('da:tileMatchRules:edit')")
+    @Log(title = "閰嶇摝瑙勫垯", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody DaTileMatchRules daTileMatchRules)
+    {
+        return toAjax(daTileMatchRulesService.updateDaTileMatchRules(daTileMatchRules));
+    }
+
+    /**
+     * 鍒犻櫎閰嶇摝瑙勫垯
+     */
+    @PreAuthorize("@ss.hasPermi('da:tileMatchRules:remove')")
+    @Log(title = "閰嶇摝瑙勫垯", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(daTileMatchRulesService.deleteDaTileMatchRulesByIds(ids));
+    }
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/domain/DaTileMatchRules.java b/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/domain/DaTileMatchRules.java
new file mode 100644
index 0000000..91822ac
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/domain/DaTileMatchRules.java
@@ -0,0 +1,235 @@
+package com.jcdm.main.da.tileMatchRules.domain;
+
+import com.jcdm.common.annotation.Excel;
+import com.jcdm.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 閰嶇摝瑙勫垯瀵硅薄 da_tile_match_rules
+ * 
+ * @author jiang
+ * @date 2024-01-24
+ */
+public class DaTileMatchRules extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭id */
+    private Long id;
+
+    /** 浜у搧绯诲垪 */
+    @Excel(name = "浜у搧绯诲垪")
+    private String productSeries;
+
+    /** 鎵爜瀵硅薄1 */
+    @Excel(name = "鎵爜瀵硅薄1")
+    private String scanObject1;
+
+    /** 鎵爜瀵硅薄2 */
+    @Excel(name = "鎵爜瀵硅薄2")
+    private String scanObject2;
+
+    /** 杞村悕绉� */
+    @Excel(name = "杞村悕绉�")
+    private String axisName;
+
+    /** 棰堝悕绉� */
+    @Excel(name = "棰堝悕绉�")
+    private String neckName;
+
+    /** 鐡﹀悕绉� */
+    @Excel(name = "鐡﹀悕绉�")
+    private String tileName;
+
+    /** 杞村弬鏁版暟浣嶇疆 */
+    @Excel(name = "杞村弬鏁版暟浣嶇疆")
+    private Long axisParameterNoPosition;
+
+    /** 棰堝弬鏁版暟浣嶇疆 */
+    @Excel(name = "棰堝弬鏁版暟浣嶇疆")
+    private Long neckParameterPosition;
+
+    /** 杞村�� */
+    @Excel(name = "杞村��")
+    private String axisValue;
+
+    /** 棰堝�� */
+    @Excel(name = "棰堝��")
+    private String neckValue;
+
+    /** 鐡﹂鑹� */
+    @Excel(name = "鐡﹂鑹�")
+    private String tileColor;
+
+    /** 鍒涘缓鐢ㄦ埛 */
+    @Excel(name = "鍒涘缓鐢ㄦ埛")
+    private String createUser;
+
+    /** 鏇存敼鐢ㄦ埛 */
+    @Excel(name = "鏇存敼鐢ㄦ埛")
+    private String updateUser;
+
+    /** 鐘舵�侊紙1鍚堟牸銆�2涓嶅悎鏍硷級 */
+    @Excel(name = "鐘舵��", readConverterExp = "1=鍚堟牸銆�2涓嶅悎鏍�")
+    private String state;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setProductSeries(String productSeries) 
+    {
+        this.productSeries = productSeries;
+    }
+
+    public String getProductSeries() 
+    {
+        return productSeries;
+    }
+    public void setScanObject1(String scanObject1) 
+    {
+        this.scanObject1 = scanObject1;
+    }
+
+    public String getScanObject1() 
+    {
+        return scanObject1;
+    }
+    public void setScanObject2(String scanObject2) 
+    {
+        this.scanObject2 = scanObject2;
+    }
+
+    public String getScanObject2() 
+    {
+        return scanObject2;
+    }
+    public void setAxisName(String axisName) 
+    {
+        this.axisName = axisName;
+    }
+
+    public String getAxisName() 
+    {
+        return axisName;
+    }
+    public void setNeckName(String neckName) 
+    {
+        this.neckName = neckName;
+    }
+
+    public String getNeckName() 
+    {
+        return neckName;
+    }
+    public void setTileName(String tileName) 
+    {
+        this.tileName = tileName;
+    }
+
+    public String getTileName() 
+    {
+        return tileName;
+    }
+    public void setAxisParameterNoPosition(Long axisParameterNoPosition) 
+    {
+        this.axisParameterNoPosition = axisParameterNoPosition;
+    }
+
+    public Long getAxisParameterNoPosition() 
+    {
+        return axisParameterNoPosition;
+    }
+    public void setNeckParameterPosition(Long neckParameterPosition) 
+    {
+        this.neckParameterPosition = neckParameterPosition;
+    }
+
+    public Long getNeckParameterPosition() 
+    {
+        return neckParameterPosition;
+    }
+    public void setAxisValue(String axisValue) 
+    {
+        this.axisValue = axisValue;
+    }
+
+    public String getAxisValue() 
+    {
+        return axisValue;
+    }
+    public void setNeckValue(String neckValue) 
+    {
+        this.neckValue = neckValue;
+    }
+
+    public String getNeckValue() 
+    {
+        return neckValue;
+    }
+    public void setTileColor(String tileColor) 
+    {
+        this.tileColor = tileColor;
+    }
+
+    public String getTileColor() 
+    {
+        return tileColor;
+    }
+    public void setCreateUser(String createUser) 
+    {
+        this.createUser = createUser;
+    }
+
+    public String getCreateUser() 
+    {
+        return createUser;
+    }
+    public void setUpdateUser(String updateUser) 
+    {
+        this.updateUser = updateUser;
+    }
+
+    public String getUpdateUser() 
+    {
+        return updateUser;
+    }
+    public void setState(String state) 
+    {
+        this.state = state;
+    }
+
+    public String getState() 
+    {
+        return state;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("productSeries", getProductSeries())
+            .append("scanObject1", getScanObject1())
+            .append("scanObject2", getScanObject2())
+            .append("axisName", getAxisName())
+            .append("neckName", getNeckName())
+            .append("tileName", getTileName())
+            .append("axisParameterNoPosition", getAxisParameterNoPosition())
+            .append("neckParameterPosition", getNeckParameterPosition())
+            .append("axisValue", getAxisValue())
+            .append("neckValue", getNeckValue())
+            .append("tileColor", getTileColor())
+            .append("createUser", getCreateUser())
+            .append("createTime", getCreateTime())
+            .append("updateUser", getUpdateUser())
+            .append("updateTime", getUpdateTime())
+            .append("state", getState())
+            .toString();
+    }
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/mapper/DaTileMatchRulesMapper.java b/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/mapper/DaTileMatchRulesMapper.java
new file mode 100644
index 0000000..0dec29b
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/mapper/DaTileMatchRulesMapper.java
@@ -0,0 +1,62 @@
+package com.jcdm.main.da.tileMatchRules.mapper;
+
+import com.jcdm.main.da.tileMatchRules.domain.DaTileMatchRules;
+
+import java.util.List;
+
+/**
+ * 閰嶇摝瑙勫垯Mapper鎺ュ彛
+ * 
+ * @author jiang
+ * @date 2024-01-24
+ */
+public interface DaTileMatchRulesMapper 
+{
+    /**
+     * 鏌ヨ閰嶇摝瑙勫垯
+     * 
+     * @param id 閰嶇摝瑙勫垯涓婚敭
+     * @return 閰嶇摝瑙勫垯
+     */
+    public DaTileMatchRules selectDaTileMatchRulesById(Long id);
+
+    /**
+     * 鏌ヨ閰嶇摝瑙勫垯鍒楄〃
+     * 
+     * @param daTileMatchRules 閰嶇摝瑙勫垯
+     * @return 閰嶇摝瑙勫垯闆嗗悎
+     */
+    public List<DaTileMatchRules> selectDaTileMatchRulesList(DaTileMatchRules daTileMatchRules);
+
+    /**
+     * 鏂板閰嶇摝瑙勫垯
+     * 
+     * @param daTileMatchRules 閰嶇摝瑙勫垯
+     * @return 缁撴灉
+     */
+    public int insertDaTileMatchRules(DaTileMatchRules daTileMatchRules);
+
+    /**
+     * 淇敼閰嶇摝瑙勫垯
+     * 
+     * @param daTileMatchRules 閰嶇摝瑙勫垯
+     * @return 缁撴灉
+     */
+    public int updateDaTileMatchRules(DaTileMatchRules daTileMatchRules);
+
+    /**
+     * 鍒犻櫎閰嶇摝瑙勫垯
+     * 
+     * @param id 閰嶇摝瑙勫垯涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteDaTileMatchRulesById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎閰嶇摝瑙勫垯
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteDaTileMatchRulesByIds(Long[] ids);
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/service/IDaTileMatchRulesService.java b/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/service/IDaTileMatchRulesService.java
new file mode 100644
index 0000000..63254f1
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/service/IDaTileMatchRulesService.java
@@ -0,0 +1,62 @@
+package com.jcdm.main.da.tileMatchRules.service;
+
+import com.jcdm.main.da.tileMatchRules.domain.DaTileMatchRules;
+
+import java.util.List;
+
+/**
+ * 閰嶇摝瑙勫垯Service鎺ュ彛
+ * 
+ * @author jiang
+ * @date 2024-01-24
+ */
+public interface IDaTileMatchRulesService 
+{
+    /**
+     * 鏌ヨ閰嶇摝瑙勫垯
+     * 
+     * @param id 閰嶇摝瑙勫垯涓婚敭
+     * @return 閰嶇摝瑙勫垯
+     */
+    public DaTileMatchRules selectDaTileMatchRulesById(Long id);
+
+    /**
+     * 鏌ヨ閰嶇摝瑙勫垯鍒楄〃
+     * 
+     * @param daTileMatchRules 閰嶇摝瑙勫垯
+     * @return 閰嶇摝瑙勫垯闆嗗悎
+     */
+    public List<DaTileMatchRules> selectDaTileMatchRulesList(DaTileMatchRules daTileMatchRules);
+
+    /**
+     * 鏂板閰嶇摝瑙勫垯
+     * 
+     * @param daTileMatchRules 閰嶇摝瑙勫垯
+     * @return 缁撴灉
+     */
+    public int insertDaTileMatchRules(DaTileMatchRules daTileMatchRules);
+
+    /**
+     * 淇敼閰嶇摝瑙勫垯
+     * 
+     * @param daTileMatchRules 閰嶇摝瑙勫垯
+     * @return 缁撴灉
+     */
+    public int updateDaTileMatchRules(DaTileMatchRules daTileMatchRules);
+
+    /**
+     * 鎵归噺鍒犻櫎閰嶇摝瑙勫垯
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑閰嶇摝瑙勫垯涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteDaTileMatchRulesByIds(Long[] ids);
+
+    /**
+     * 鍒犻櫎閰嶇摝瑙勫垯淇℃伅
+     * 
+     * @param id 閰嶇摝瑙勫垯涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteDaTileMatchRulesById(Long id);
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/service/impl/DaTileMatchRulesServiceImpl.java b/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/service/impl/DaTileMatchRulesServiceImpl.java
new file mode 100644
index 0000000..862b696
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/tileMatchRules/service/impl/DaTileMatchRulesServiceImpl.java
@@ -0,0 +1,97 @@
+package com.jcdm.main.da.tileMatchRules.service.impl;
+
+import com.jcdm.common.utils.DateUtils;
+import com.jcdm.main.da.tileMatchRules.domain.DaTileMatchRules;
+import com.jcdm.main.da.tileMatchRules.mapper.DaTileMatchRulesMapper;
+import com.jcdm.main.da.tileMatchRules.service.IDaTileMatchRulesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 閰嶇摝瑙勫垯Service涓氬姟灞傚鐞�
+ * 
+ * @author jiang
+ * @date 2024-01-24
+ */
+@Service
+public class DaTileMatchRulesServiceImpl implements IDaTileMatchRulesService 
+{
+    @Autowired
+    private DaTileMatchRulesMapper daTileMatchRulesMapper;
+
+    /**
+     * 鏌ヨ閰嶇摝瑙勫垯
+     * 
+     * @param id 閰嶇摝瑙勫垯涓婚敭
+     * @return 閰嶇摝瑙勫垯
+     */
+    @Override
+    public DaTileMatchRules selectDaTileMatchRulesById(Long id)
+    {
+        return daTileMatchRulesMapper.selectDaTileMatchRulesById(id);
+    }
+
+    /**
+     * 鏌ヨ閰嶇摝瑙勫垯鍒楄〃
+     * 
+     * @param daTileMatchRules 閰嶇摝瑙勫垯
+     * @return 閰嶇摝瑙勫垯
+     */
+    @Override
+    public List<DaTileMatchRules> selectDaTileMatchRulesList(DaTileMatchRules daTileMatchRules)
+    {
+        return daTileMatchRulesMapper.selectDaTileMatchRulesList(daTileMatchRules);
+    }
+
+    /**
+     * 鏂板閰嶇摝瑙勫垯
+     * 
+     * @param daTileMatchRules 閰嶇摝瑙勫垯
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertDaTileMatchRules(DaTileMatchRules daTileMatchRules)
+    {
+        daTileMatchRules.setCreateTime(DateUtils.getNowDate());
+        return daTileMatchRulesMapper.insertDaTileMatchRules(daTileMatchRules);
+    }
+
+    /**
+     * 淇敼閰嶇摝瑙勫垯
+     * 
+     * @param daTileMatchRules 閰嶇摝瑙勫垯
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateDaTileMatchRules(DaTileMatchRules daTileMatchRules)
+    {
+        daTileMatchRules.setUpdateTime(DateUtils.getNowDate());
+        return daTileMatchRulesMapper.updateDaTileMatchRules(daTileMatchRules);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎閰嶇摝瑙勫垯
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑閰嶇摝瑙勫垯涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteDaTileMatchRulesByIds(Long[] ids)
+    {
+        return daTileMatchRulesMapper.deleteDaTileMatchRulesByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎閰嶇摝瑙勫垯淇℃伅
+     * 
+     * @param id 閰嶇摝瑙勫垯涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteDaTileMatchRulesById(Long id)
+    {
+        return daTileMatchRulesMapper.deleteDaTileMatchRulesById(id);
+    }
+}
diff --git a/jcdm-main/src/main/resources/mapper/da/opcuaconfig/DaOpcuaConfigMapper.xml b/jcdm-main/src/main/resources/mapper/da/opcuaconfig/DaOpcuaConfigMapper.xml
new file mode 100644
index 0000000..9832bf4
--- /dev/null
+++ b/jcdm-main/src/main/resources/mapper/da/opcuaconfig/DaOpcuaConfigMapper.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jcdm.main.da.opcuaconfig.mapper.DaOpcuaConfigMapper">
+    <resultMap type="DaOpcuaConfig" id="DaOpcuaConfigResult">
+        <result property="id"    column="id"    />
+        <result property="node"    column="node"    />
+        <result property="sysTypes"    column="sys_types"    />
+        <result property="subscribe"    column="subscribe"    />
+        <result property="rFunction"    column="r_function"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="processName"    column="process_name"    />
+        <result property="process"    column="process"    />
+        <result property="state"    column="state"    />
+    </resultMap>
+
+    <sql id="selectDaOpcuaConfigVo">
+        select id, node, sys_types, subscribe, r_function, remarks, process_name, process, state from da_opcua_config
+    </sql>
+
+    <select id="selectDaOpcuaConfigList" parameterType="DaOpcuaConfig" resultMap="DaOpcuaConfigResult">
+        <include refid="selectDaOpcuaConfigVo"/>
+        <where>  
+            <if test="node != null  and node != ''"> and node = #{node}</if>
+            <if test="rFunction != null  and rFunction != ''"> and r_function = #{rFunction}</if>
+            <if test="process != null  and process != ''"> and process = #{process}</if>
+            <if test="state != null "> and state = #{state}</if>
+        </where>
+    </select>
+    
+    <select id="selectDaOpcuaConfigById" parameterType="Long" resultMap="DaOpcuaConfigResult">
+        <include refid="selectDaOpcuaConfigVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertDaOpcuaConfig" parameterType="DaOpcuaConfig" useGeneratedKeys="true" keyProperty="id">
+        insert into da_opcua_config
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="node != null">node,</if>
+            <if test="sysTypes != null">sys_types,</if>
+            <if test="subscribe != null">subscribe,</if>
+            <if test="rFunction != null">r_function,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="processName != null">process_name,</if>
+            <if test="process != null">process,</if>
+            <if test="state != null">state,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="node != null">#{node},</if>
+            <if test="sysTypes != null">#{sysTypes},</if>
+            <if test="subscribe != null">#{subscribe},</if>
+            <if test="rFunction != null">#{rFunction},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="processName != null">#{processName},</if>
+            <if test="process != null">#{process},</if>
+            <if test="state != null">#{state},</if>
+         </trim>
+    </insert>
+
+    <update id="updateDaOpcuaConfig" parameterType="DaOpcuaConfig">
+        update da_opcua_config
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="node != null">node = #{node},</if>
+            <if test="sysTypes != null">sys_types = #{sysTypes},</if>
+            <if test="subscribe != null">subscribe = #{subscribe},</if>
+            <if test="rFunction != null">r_function = #{rFunction},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="processName != null">process_name = #{processName},</if>
+            <if test="process != null">process = #{process},</if>
+            <if test="state != null">state = #{state},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteDaOpcuaConfigById" parameterType="Long">
+        delete from da_opcua_config where id = #{id}
+    </delete>
+
+    <delete id="deleteDaOpcuaConfigByIds" parameterType="String">
+        delete from da_opcua_config where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/jcdm-main/src/main/resources/mapper/da/paramCollection/DaParamCollectionMapper.xml b/jcdm-main/src/main/resources/mapper/da/paramCollection/DaParamCollectionMapper.xml
index 43adf79..f8bfd29 100644
--- a/jcdm-main/src/main/resources/mapper/da/paramCollection/DaParamCollectionMapper.xml
+++ b/jcdm-main/src/main/resources/mapper/da/paramCollection/DaParamCollectionMapper.xml
@@ -28,27 +28,19 @@
         <result property="paramName"    column="param_name"    />
         <result property="unit"    column="unit"    />
         <result property="type"    column="type"    />
-        <result property="parameterSetCode"    column="parameter_set_code"    />
-        <result property="parameterSetName"    column="parameter_set_name"    />
-        <result property="processesCode"    column="processes_code"    />
-        <result property="processesName"    column="processes_name"    />
-
     </resultMap>
 
     <sql id="selectDaParamCollectionVo">
-        select id, work_order_no, sfc_code,processes_name,processes_code, parameter_set_code ,parameter_set_name, product_code, production_line, location_code, equipment_no, param_code, param_value, param_upper, param_lower, param_standard, collection_time, spare_field_1, spare_field_2, create_user, create_time, update_user, update_time, state, param_name, unit, type from da_param_collection
+        select id, work_order_no, sfc_code, product_code, production_line, location_code, equipment_no, param_code, param_value, param_upper, param_lower, param_standard, collection_time, spare_field_1, spare_field_2, create_user, create_time, update_user, update_time, state, param_name, unit, type from da_param_collection
     </sql>
 
     <select id="selectDaParamCollectionList" parameterType="DaParamCollection" resultMap="DaParamCollectionResult">
         <include refid="selectDaParamCollectionVo"/>
         <where>  
             <if test="workOrderNo != null  and workOrderNo != ''"> and work_order_no = #{workOrderNo}</if>
+            <if test="type != null  and type != ''"> and type = #{type}</if>
             <if test="sfcCode != null  and sfcCode != ''"> and sfc_code = #{sfcCode}</if>
             <if test="productCode != null  and productCode != ''"> and product_code = #{productCode}</if>
-            <if test="parameterSetCode != null  and parameterSetCode != ''"> and parameter_set_code = #{parameterSetCode}</if>
-            <if test="parameterSetName != null  and parameterSetName != ''"> and parameter_set_name = #{parameterSetName}</if>
-            <if test="processesCode != null  and processesCode != ''"> and processes_code = #{processesCode}</if>
-            <if test="processesName != null  and processesName != ''"> and processes_name = #{processesName}</if>
             <if test="productionLine != null  and productionLine != ''"> and production_line = #{productionLine}</if>
             <if test="locationCode != null  and locationCode != ''"> and location_code = #{locationCode}</if>
             <if test="equipmentNo != null  and equipmentNo != ''"> and equipment_no = #{equipmentNo}</if>
@@ -70,10 +62,6 @@
             <if test="productCode != null and productCode != ''">product_code,</if>
             <if test="productionLine != null and productionLine != ''">production_line,</if>
             <if test="locationCode != null and locationCode != ''">location_code,</if>
-            <if test="parameterSetCode != null and parameterSetCode != ''">parameter_set_code,</if>
-            <if test="parameterSetName != null and parameterSetName != ''">parameter_set_name,</if>
-            <if test="processesCode != null and processesCode != ''">processes_code,</if>
-            <if test="processesName != null and processesName != ''">processes_name,</if>
             <if test="equipmentNo != null">equipment_no,</if>
             <if test="paramCode != null and paramCode != ''">param_code,</if>
             <if test="paramValue != null and paramValue != ''">param_value,</if>
@@ -99,10 +87,6 @@
             <if test="productCode != null and productCode != ''">#{productCode},</if>
             <if test="productionLine != null and productionLine != ''">#{productionLine},</if>
             <if test="locationCode != null and locationCode != ''">#{locationCode},</if>
-            <if test="parameterSetCode != null and parameterSetCode != ''">#{parameter_set_code},</if>
-            <if test="parameterSetName != null and parameterSetName != ''">#{parameter_set_name},</if>
-            <if test="processesCode != null and processesCode != ''">#{processes_code},</if>
-            <if test="processesName != null and processesName != ''">#{processes_name},</if>
             <if test="equipmentNo != null">#{equipmentNo},</if>
             <if test="paramCode != null and paramCode != ''">#{paramCode},</if>
             <if test="paramValue != null and paramValue != ''">#{paramValue},</if>
@@ -131,10 +115,6 @@
             <if test="productCode != null and productCode != ''">product_code = #{productCode},</if>
             <if test="productionLine != null and productionLine != ''">production_line = #{productionLine},</if>
             <if test="locationCode != null and locationCode != ''">location_code = #{locationCode},</if>
-            <if test="parameterSetCode != null and parameterSetCode != ''">parameter_set_code = #{parameterSetCode},</if>
-            <if test="parameterSetName != null and parameterSetName != ''">parameter_set_name = #{parameterSetName},</if>
-            <if test="processesCode != null and processesCode != ''">processes_code = #{processesCode},</if>
-            <if test="processesName != null and processesName != ''">processes_name = #{processesName},</if>
             <if test="equipmentNo != null">equipment_no = #{equipmentNo},</if>
             <if test="paramCode != null and paramCode != ''">param_code = #{paramCode},</if>
             <if test="paramValue != null and paramValue != ''">param_value = #{paramValue},</if>
diff --git a/jcdm-main/src/main/resources/mapper/da/passingStationCollection/DaPassingStationCollectionMapper.xml b/jcdm-main/src/main/resources/mapper/da/passingStationCollection/DaPassingStationCollectionMapper.xml
index 3b26b5c..3eca8e2 100644
--- a/jcdm-main/src/main/resources/mapper/da/passingStationCollection/DaPassingStationCollectionMapper.xml
+++ b/jcdm-main/src/main/resources/mapper/da/passingStationCollection/DaPassingStationCollectionMapper.xml
@@ -43,6 +43,9 @@
             <if test="equipmentNo != null  and equipmentNo != ''"> and equipment_no = #{equipmentNo}</if>
             <if test="inboundTime != null "> and inbound_time = #{inboundTime}</if>
             <if test="outboundTime != null "> and outbound_time = #{outboundTime}</if>
+            <if test="outRsSign != null "> and out_rs_sign = #{outRsSign}</if>
+            <if test="outRsSign != null "> and out_rs_sign = #{outRsSign}</if>
+
         </where>
     </select>
     
diff --git a/jcdm-main/src/main/resources/mapper/da/tileMatchRules/DaTileMatchRulesMapper.xml b/jcdm-main/src/main/resources/mapper/da/tileMatchRules/DaTileMatchRulesMapper.xml
new file mode 100644
index 0000000..3de08c8
--- /dev/null
+++ b/jcdm-main/src/main/resources/mapper/da/tileMatchRules/DaTileMatchRulesMapper.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jcdm.main.da.tileMatchRules.mapper.DaTileMatchRulesMapper">
+    
+    <resultMap type="DaTileMatchRules" id="DaTileMatchRulesResult">
+        <result property="id"    column="id"    />
+        <result property="productSeries"    column="product_series"    />
+        <result property="scanObject1"    column="scan_object1"    />
+        <result property="scanObject2"    column="scan_object2"    />
+        <result property="axisName"    column="axis_name"    />
+        <result property="neckName"    column="neck_name"    />
+        <result property="tileName"    column="tile_name"    />
+        <result property="axisParameterNoPosition"    column="axis_parameter_no_position"    />
+        <result property="neckParameterPosition"    column="neck_parameter_position"    />
+        <result property="axisValue"    column="axis_value"    />
+        <result property="neckValue"    column="neck_value"    />
+        <result property="tileColor"    column="tile_color"    />
+        <result property="createUser"    column="create_user"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateUser"    column="update_user"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="state"    column="state"    />
+    </resultMap>
+
+    <sql id="selectDaTileMatchRulesVo">
+        select id, product_series, scan_object1, scan_object2, axis_name, neck_name, tile_name, axis_parameter_no_position, neck_parameter_position, axis_value, neck_value, tile_color, create_user, create_time, update_user, update_time, state from da_tile_match_rules
+    </sql>
+
+    <select id="selectDaTileMatchRulesList" parameterType="DaTileMatchRules" resultMap="DaTileMatchRulesResult">
+        <include refid="selectDaTileMatchRulesVo"/>
+        <where>  
+            <if test="productSeries != null  and productSeries != ''"> and product_series = #{productSeries}</if>
+            <if test="scanObject1 != null  and scanObject1 != ''"> and scan_object1 = #{scanObject1}</if>
+            <if test="scanObject2 != null  and scanObject2 != ''"> and scan_object2 = #{scanObject2}</if>
+            <if test="axisName != null  and axisName != ''"> and axis_name like concat('%', #{axisName}, '%')</if>
+            <if test="neckName != null  and neckName != ''"> and neck_name like concat('%', #{neckName}, '%')</if>
+            <if test="tileName != null  and tileName != ''"> and tile_name like concat('%', #{tileName}, '%')</if>
+            <if test="axisParameterNoPosition != null "> and axis_parameter_no_position = #{axisParameterNoPosition}</if>
+            <if test="neckParameterPosition != null "> and neck_parameter_position = #{neckParameterPosition}</if>
+            <if test="axisValue != null  and axisValue != ''"> and axis_value = #{axisValue}</if>
+            <if test="neckValue != null  and neckValue != ''"> and neck_value = #{neckValue}</if>
+            <if test="tileColor != null  and tileColor != ''"> and tile_color = #{tileColor}</if>
+            <if test="createUser != null  and createUser != ''"> and create_user = #{createUser}</if>
+            <if test="updateUser != null  and updateUser != ''"> and update_user = #{updateUser}</if>
+            <if test="state != null  and state != ''"> and state = #{state}</if>
+        </where>
+    </select>
+    
+    <select id="selectDaTileMatchRulesById" parameterType="Long" resultMap="DaTileMatchRulesResult">
+        <include refid="selectDaTileMatchRulesVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertDaTileMatchRules" parameterType="DaTileMatchRules" useGeneratedKeys="true" keyProperty="id">
+        insert into da_tile_match_rules
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="productSeries != null">product_series,</if>
+            <if test="scanObject1 != null">scan_object1,</if>
+            <if test="scanObject2 != null">scan_object2,</if>
+            <if test="axisName != null">axis_name,</if>
+            <if test="neckName != null">neck_name,</if>
+            <if test="tileName != null">tile_name,</if>
+            <if test="axisParameterNoPosition != null">axis_parameter_no_position,</if>
+            <if test="neckParameterPosition != null">neck_parameter_position,</if>
+            <if test="axisValue != null">axis_value,</if>
+            <if test="neckValue != null">neck_value,</if>
+            <if test="tileColor != null">tile_color,</if>
+            <if test="createUser != null">create_user,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateUser != null">update_user,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="state != null">state,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="productSeries != null">#{productSeries},</if>
+            <if test="scanObject1 != null">#{scanObject1},</if>
+            <if test="scanObject2 != null">#{scanObject2},</if>
+            <if test="axisName != null">#{axisName},</if>
+            <if test="neckName != null">#{neckName},</if>
+            <if test="tileName != null">#{tileName},</if>
+            <if test="axisParameterNoPosition != null">#{axisParameterNoPosition},</if>
+            <if test="neckParameterPosition != null">#{neckParameterPosition},</if>
+            <if test="axisValue != null">#{axisValue},</if>
+            <if test="neckValue != null">#{neckValue},</if>
+            <if test="tileColor != null">#{tileColor},</if>
+            <if test="createUser != null">#{createUser},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateUser != null">#{updateUser},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="state != null">#{state},</if>
+         </trim>
+    </insert>
+
+    <update id="updateDaTileMatchRules" parameterType="DaTileMatchRules">
+        update da_tile_match_rules
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="productSeries != null">product_series = #{productSeries},</if>
+            <if test="scanObject1 != null">scan_object1 = #{scanObject1},</if>
+            <if test="scanObject2 != null">scan_object2 = #{scanObject2},</if>
+            <if test="axisName != null">axis_name = #{axisName},</if>
+            <if test="neckName != null">neck_name = #{neckName},</if>
+            <if test="tileName != null">tile_name = #{tileName},</if>
+            <if test="axisParameterNoPosition != null">axis_parameter_no_position = #{axisParameterNoPosition},</if>
+            <if test="neckParameterPosition != null">neck_parameter_position = #{neckParameterPosition},</if>
+            <if test="axisValue != null">axis_value = #{axisValue},</if>
+            <if test="neckValue != null">neck_value = #{neckValue},</if>
+            <if test="tileColor != null">tile_color = #{tileColor},</if>
+            <if test="createUser != null">create_user = #{createUser},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateUser != null">update_user = #{updateUser},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="state != null">state = #{state},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteDaTileMatchRulesById" parameterType="Long">
+        delete from da_tile_match_rules where id = #{id}
+    </delete>
+
+    <delete id="deleteDaTileMatchRulesByIds" parameterType="String">
+        delete from da_tile_match_rules where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/jcdm-ui/dist.rar b/jcdm-ui/dist.rar
new file mode 100644
index 0000000..fd52725
--- /dev/null
+++ b/jcdm-ui/dist.rar
Binary files differ
diff --git a/jcdm-ui/src/views/main/da/collectionParamConf/index.vue b/jcdm-ui/src/views/main/da/collectionParamConf/index.vue
index 5c342fc..79e1b0e 100644
--- a/jcdm-ui/src/views/main/da/collectionParamConf/index.vue
+++ b/jcdm-ui/src/views/main/da/collectionParamConf/index.vue
@@ -202,12 +202,12 @@
     />
 
     <!-- 娣诲姞鎴栦慨鏀归噰闆嗗弬鏁伴厤缃璇濇 -->
-    <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="700px" append-to-body>
       <span slot="title">
         <i class="el-icon-s-order"></i>
         {{titleName}}
       </span>
-      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+      <el-form ref="form" inline :model="form" :rules="rules" label-width="120px">
         <el-form-item label="宸ュ簭缂栧彿" prop="processesCode">
           <el-input v-model="form.processesCode" placeholder="璇疯緭鍏ュ伐搴忕紪鍙�" />
         </el-form-item>
diff --git a/jcdm-ui/src/views/main/da/opcuaconfig/index.vue b/jcdm-ui/src/views/main/da/opcuaconfig/index.vue
index 6be8c27..17215a4 100644
--- a/jcdm-ui/src/views/main/da/opcuaconfig/index.vue
+++ b/jcdm-ui/src/views/main/da/opcuaconfig/index.vue
@@ -1,206 +1,163 @@
 <template>
   <div class="app-container">
     <el-card class="box-card">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="鎵�灞炴ā鍧�" prop="module">
-        <el-input
-          v-model="queryParams.module"
-          placeholder="璇疯緭鍏ユ墍灞炴ā鍧�"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鑺傜偣" prop="node">
-        <el-input
-          v-model="queryParams.node"
-          placeholder="璇疯緭鍏ヨ妭鐐�"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="闀垮害" prop="length">
-        <el-input
-          v-model="queryParams.length"
-          placeholder="璇疯緭鍏ラ暱搴�"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="绫诲瀷" prop="sysTypes">
-        <el-select v-model="queryParams.sysTypes" placeholder="璇烽�夋嫨绫诲瀷" clearable>
-<!--          <el-option-->
-<!--            v-for="dict in dict.type.${dictType}"-->
-<!--            :key="dict.value"-->
-<!--            :label="dict.label"-->
-<!--            :value="dict.value"-->
-<!--          />-->
-        </el-select>
-      </el-form-item>
-      <el-form-item style="float: right">
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button type="warning" icon="el-icon-copy-document" size="mini" @click="advancedQuery">楂樼骇鏌ヨ</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-    <el-form :model="queryParams" ref="queryParams" size="small" :inline="true" v-show="advancedShowSearch" label-width="68px">
-      <el-form-item label="璁㈤槄鍝嶅簲妯″潡" prop="rModule">
-        <el-input
-          v-model="queryParams.rModule"
-          placeholder="璇疯緭鍏ヨ闃呭搷搴旀ā鍧�"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="璁㈤槄鍝嶅簲鍑芥暟" prop="rFunction">
-        <el-input
-          v-model="queryParams.rFunction"
-          placeholder="璇疯緭鍏ヨ闃呭搷搴斿嚱鏁�"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鍔熻兘璇存槑" prop="functionality">
-        <el-input
-          v-model="queryParams.functionality"
-          placeholder="璇疯緭鍏ュ姛鑳借鏄�"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鏄惁璁㈤槄" prop="subscribe">
-        <el-select v-model="queryParams.subscribe" placeholder="璇烽�夋嫨鏄惁璁㈤槄" clearable>
-          <!--          <el-option-->
-          <!--            v-for="dict in dict.type.${dictType}"-->
-          <!--            :key="dict.value"-->
-          <!--            :label="dict.label"-->
-          <!--            :value="dict.value"-->
-          <!--          />-->
-        </el-select>
-      </el-form-item>
-    </el-form>
+        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+          <el-form-item label="鑺傜偣" prop="node">
+            <el-input
+              v-model="queryParams.node"
+              placeholder="璇疯緭鍏ヨ妭鐐�"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="璁㈤槄绫诲瀷" prop="rFunction">
+            <el-select v-model="queryParams.rFunction" placeholder="璇烽�夋嫨璁㈤槄绫诲瀷" clearable>
+              <el-option
+                v-for="dict in dict.type.subscription_type"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="宸ュ簭缂栫爜" prop="process">
+            <el-input
+              v-model="queryParams.process"
+              placeholder="璇疯緭鍏ュ伐搴忕紪鐮�"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="鐘舵��" prop="state">
+            <el-select v-model="queryParams.state" placeholder="璇烽�夋嫨鐘舵��" clearable>
+              <el-option
+                v-for="dict in dict.type.sys_normal_disable"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item style="float: right">
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+          </el-form-item>
+        </el-form>
     </el-card>
 
     <el-card style="margin-top: 10px" class="box-card">
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['da:opcuaconfig:add']"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['da:opcuaconfig:edit']"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['da:opcuaconfig:remove']"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['da:opcuaconfig:export']"
-        >瀵煎嚭</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
+        <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+            <el-button
+              type="primary"
+              plain
+              icon="el-icon-plus"
+              size="mini"
+              @click="handleAdd"
+              v-hasPermi="['da:opcuaconfig:add']"
+            >鏂板</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="success"
+              plain
+              icon="el-icon-edit"
+              size="mini"
+              :disabled="single"
+              @click="handleUpdate"
+              v-hasPermi="['da:opcuaconfig:edit']"
+            >淇敼</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="danger"
+              plain
+              icon="el-icon-delete"
+              size="mini"
+              :disabled="multiple"
+              @click="handleDelete"
+              v-hasPermi="['da:opcuaconfig:remove']"
+            >鍒犻櫎</el-button>
+          </el-col>
+          <el-col :span="1.5">
+            <el-button
+              type="warning"
+              plain
+              icon="el-icon-download"
+              size="mini"
+              @click="handleExport"
+              v-hasPermi="['main:opcuaconfig:export']"
+            >瀵煎嚭</el-button>
+          </el-col>
+          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+        </el-row>
 
-    <el-table v-loading="loading" border :data="opcuaconfigList" @selection-change="handleSelectionChange" v-if="opcuaconfigList.length > 0">
-      <el-table-column type="selection" width="55" align="center" />
-<!--      <el-table-column label="ID" align="center" prop="id" />-->
-      <el-table-column label="鎵�灞炴ā鍧�" align="center" prop="module">
-<!--        <template slot-scope="scope">-->
-<!--          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.module"/>-->
-<!--        </template>-->
-      </el-table-column>
-      <el-table-column label="鑺傜偣" align="center" prop="node">
-<!--        <template slot-scope="scope">-->
-<!--          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.node"/>-->
-<!--        </template>-->
-      </el-table-column>
-      <el-table-column label="闀垮害" align="center" prop="length">
-<!--        <template slot-scope="scope">-->
-<!--          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.length"/>-->
-<!--        </template>-->
-      </el-table-column>
-      <el-table-column label="绫诲瀷" align="center" prop="sysTypes">
-<!--        <template slot-scope="scope">-->
-<!--          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.sysTypes"/>-->
-<!--        </template>-->
-      </el-table-column>
-      <el-table-column label="鍔熻兘璇存槑" align="center" prop="functionality">
-<!--        <template slot-scope="scope">-->
-<!--          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.functionality"/>-->
-<!--        </template>-->
-      </el-table-column>
-      <el-table-column label="鏄惁璁㈤槄" align="center" prop="subscribe">
-<!--        <template slot-scope="scope">-->
-<!--          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.subscribe"/>-->
-<!--        </template>-->
-      </el-table-column>
-      <el-table-column label="璁㈤槄鍝嶅簲妯″潡" align="center" prop="rModule">
-<!--        <template slot-scope="scope">-->
-<!--          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.rModule"/>-->
-<!--        </template>-->
-      </el-table-column>
-      <el-table-column label="璁㈤槄鍝嶅簲鍑芥暟" align="center" prop="rFunction">
-<!--        <template slot-scope="scope">-->
-<!--          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.rFunction"/>-->
-<!--        </template>-->
-      </el-table-column>
-      <el-table-column label="澶囨敞" align="center" prop="remarks">
-<!--        <template slot-scope="scope">-->
-<!--          <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.remarks"/>-->
-<!--        </template>-->
-      </el-table-column>
-      <el-table-column fixed="right" label="鎿嶄綔" width="200" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="success"
-            plain
-            style="width: 72px"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['da:opcuaconfig:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="danger"
-            plain
-            style="width: 72px"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['da:opcuaconfig:remove']"
-          >鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-      <el-empty v-else>
-        <span slot="description">鏆傛棤鏁版嵁</span>
-      </el-empty>
+        <el-table border v-loading="loading" :data="opcuaconfigList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="center" />
+<!--          <el-table-column label="ID" align="center" prop="id" />-->
+          <el-table-column label="宸ュ簭鍚嶇О" align="center" prop="processName">
+            <!--            <template slot-scope="scope">-->
+            <!--              <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.processName"/>-->
+            <!--            </template>-->
+          </el-table-column>
+          <el-table-column label="宸ュ簭缂栫爜" align="center" prop="process">
+            <!--            <template slot-scope="scope">-->
+            <!--              <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.process"/>-->
+            <!--            </template>-->
+          </el-table-column>
+          <el-table-column label="浜や簰鑺傜偣" align="center" prop="node">
+<!--            <template slot-scope="scope">-->
+<!--              <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.node"/>-->
+<!--            </template>-->
+          </el-table-column>
+          <el-table-column label="鏁版嵁绫诲瀷" align="center" prop="sysTypes">
+            <template slot-scope="scope">
+              <dict-tag :options="dict.type.data_type" :value="scope.row.sysTypes"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="鏄惁璁㈤槄" align="center" prop="subscribe">
+            <template slot-scope="scope">
+              <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.subscribe"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="璁㈤槄绫诲瀷" align="center" prop="rFunction">
+            <template slot-scope="scope">
+              <dict-tag :options="dict.type.subscription_type" :value="scope.row.rFunction"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="鐘舵��" align="center" prop="state">
+            <template slot-scope="scope">
+              <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.state"/>
+            </template>
+          </el-table-column>
+          <el-table-column label="澶囨敞" align="center" prop="remarks">
+            <!--            <template slot-scope="scope">-->
+            <!--              <dict-tag :options="dict.type.${column.dictType}" :value="scope.row.remarks"/>-->
+            <!--            </template>-->
+          </el-table-column>
+          <el-table-column fixed="right" width="200" label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+            <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="success"
+                plain
+                style="width: 72px"
+                icon="el-icon-edit"
+                @click="handleUpdate(scope.row)"
+                v-hasPermi="['main:opcuaconfig:edit']"
+              >淇敼</el-button>
+              <el-button
+                size="mini"
+                type="danger"
+                plain
+                style="width: 72px"
+                icon="el-icon-delete"
+                @click="handleDelete(scope.row)"
+                v-hasPermi="['main:opcuaconfig:remove']"
+              >鍒犻櫎</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
     </el-card>
 
     <pagination
@@ -211,46 +168,74 @@
       @pagination="getList"
     />
 
-    <!-- 娣诲姞鎴栦慨鏀筄PCUA鍙傛暟璁剧疆瀵硅瘽妗� -->
+    <!-- 娣诲姞鎴栦慨鏀逛氦浜掍俊鍙烽厤缃璇濇 -->
     <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="500px" append-to-body>
+      <span slot="title">
+        <i class="el-icon-s-order"></i>
+        {{titleName}}
+      </span>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="鎵�灞炴ā鍧�" prop="module">
-          <el-input v-model="form.module" placeholder="璇疯緭鍏ユ墍灞炴ā鍧�" />
-        </el-form-item>
-        <el-form-item label="鑺傜偣" prop="node">
+        <el-form-item label="浜や簰鑺傜偣" prop="node">
           <el-input v-model="form.node" placeholder="璇疯緭鍏ヨ妭鐐�" />
         </el-form-item>
-        <el-form-item label="闀垮害" prop="length">
-          <el-input v-model="form.length" placeholder="璇疯緭鍏ラ暱搴�" />
-        </el-form-item>
-        <el-form-item label="绫诲瀷" prop="sysTypes">
-          <el-select v-model="form.sysTypes" placeholder="璇烽�夋嫨绫诲瀷">
-<!--            <el-option-->
-<!--              v-for="dict in dict.type.${dictType}"-->
-<!--              :key="dict.value"-->
-<!--              :label="dict.label"-->
-<!--              :value="dict.value"-->
-<!--            ></el-option>-->
+        <el-form-item label="鏁版嵁绫诲瀷" prop="sysTypes">
+          <el-select v-model="form.sysTypes" placeholder="璇烽�夋嫨鏁版嵁绫诲瀷">
+            <el-option
+              v-for="dict in dict.type.data_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
           </el-select>
-        </el-form-item>
-        <el-form-item label="鍔熻兘璇存槑" prop="functionality">
-          <el-input v-model="form.functionality" placeholder="璇疯緭鍏ュ姛鑳借鏄�" />
         </el-form-item>
         <el-form-item label="鏄惁璁㈤槄" prop="subscribe">
           <el-select v-model="form.subscribe" placeholder="璇烽�夋嫨鏄惁璁㈤槄">
-<!--            <el-option-->
-<!--              v-for="dict in dict.type.${dictType}"-->
-<!--              :key="dict.value"-->
-<!--              :label="dict.label"-->
-<!--              :value="parseInt(dict.value)"-->
-<!--            ></el-option>-->
+            <el-option
+              v-for="dict in dict.type.sys_yes_no"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="璁㈤槄鍝嶅簲妯″潡" prop="rModule">
-          <el-input v-model="form.rModule" placeholder="璇疯緭鍏ヨ闃呭搷搴旀ā鍧�" />
+        <el-form-item label="璁㈤槄绫诲瀷" prop="rFunction">
+          <el-select v-model="form.rFunction" placeholder="璇烽�夋嫨璁㈤槄绫诲瀷">
+            <el-option
+              v-for="dict in dict.type.subscription_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
         </el-form-item>
-        <el-form-item label="璁㈤槄鍝嶅簲鍑芥暟" prop="rFunction">
-          <el-input v-model="form.rFunction" placeholder="璇疯緭鍏ヨ闃呭搷搴斿嚱鏁�" />
+<!--        <el-form-item label="宸ュ簭鍚嶇О" prop="processName">-->
+<!--          <el-input v-model="form.processName" placeholder="璇疯緭鍏ュ伐搴忓悕绉�" />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="宸ュ簭缂栫爜" prop="process">-->
+<!--          <el-input v-model="form.process" placeholder="璇疯緭鍏ュ伐搴忕紪鐮�" />-->
+<!--        </el-form-item>-->
+        <el-form-item label="宸ュ簭缂栫爜" prop="process">
+          <el-select style="width: 100%" @change="handleSelectChange(form.process)" v-model="form.process" placeholder="璇烽�夋嫨">
+            <el-option
+              v-for="item in options"
+              :key="item.processesCode"
+              :label="item.processesCode"
+              :value="item.processesCode">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="宸ュ簭鍚嶇О" prop="processName">
+          <el-input disabled v-model="form.processName" placeholder="璇疯緭鍏ュ伐搴忓悕绉�" />
+        </el-form-item>
+        <el-form-item label="鐘舵��" prop="state">
+          <el-select v-model="form.state" placeholder="璇烽�夋嫨鐘舵��">
+            <el-option
+              v-for="dict in dict.type.sys_normal_disable"
+              :key="dict.value"
+              :label="dict.label"
+              :value="parseInt(dict.value)"
+            ></el-option>
+          </el-select>
         </el-form-item>
         <el-form-item label="澶囨敞" prop="remarks">
           <el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" />
@@ -266,13 +251,17 @@
 
 <script>
 import { listOpcuaconfig, getOpcuaconfig, delOpcuaconfig, addOpcuaconfig, updateOpcuaconfig } from "@/api/main/da/opcuaconfig/opcuaconfig";
+import {listProcesses} from "@/api/main/bs/processes/processes";
 
 export default {
   name: "Opcuaconfig",
+  dicts: ['subscription_type', 'sys_yes_no', 'data_type','sys_normal_disable'],
   data() {
     return {
+      options: [],
       // 閬僵灞�
       loading: true,
+      titleName: "",
       // 閫変腑鏁扮粍
       ids: [],
       // 闈炲崟涓鐢�
@@ -283,9 +272,8 @@
       showSearch: true,
       // 鎬绘潯鏁�
       total: 0,
-      // OPCUA鍙傛暟璁剧疆琛ㄦ牸鏁版嵁
+      // 浜や簰淇″彿閰嶇疆琛ㄦ牸鏁版嵁
       opcuaconfigList: [],
-      advancedShowSearch: false,
       // 寮瑰嚭灞傛爣棰�
       title: "",
       // 鏄惁鏄剧ず寮瑰嚭灞�
@@ -294,14 +282,18 @@
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        module: null,
         node: null,
-        length: null,
-        sysTypes: null,
-        functionality: null,
-        subscribe: null,
-        rModule: null,
         rFunction: null,
+        process: null,
+        state: null
+      },
+      ProcessesqueryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        process: null,
+        processName: null,
+        keyProcessesFlag: null,
+        routeCode: undefined,
       },
       // 琛ㄥ崟鍙傛暟
       form: {},
@@ -315,12 +307,24 @@
   },
   created() {
     this.getList();
+    this.getProcessesList();
+
   },
   methods: {
-    advancedQuery(){
-      this.advancedShowSearch = (this.advancedShowSearch) ? this.advancedShowSearch = false : this.advancedShowSearch = true;
+    /** 鏌ヨ宸ュ簭淇℃伅鍒楄〃 */
+    getProcessesList() {
+      this.loading = true;
+      listProcesses(this.queryParams).then(response => {
+        this.options = response.rows;
+      });
     },
-    /** 鏌ヨOPCUA鍙傛暟璁剧疆鍒楄〃 */
+    handleSelectChange(selectedOption) {
+      this.ProcessesqueryParams.process = selectedOption;
+      listProcesses(this.ProcessesqueryParams).then(response => {
+        this.form.processName = response.rows[0].processesName;
+      });
+    },
+    /** 鏌ヨ浜や簰淇″彿閰嶇疆鍒楄〃 */
     getList() {
       this.loading = true;
       listOpcuaconfig(this.queryParams).then(response => {
@@ -338,15 +342,14 @@
     reset() {
       this.form = {
         id: null,
-        module: null,
         node: null,
-        length: null,
         sysTypes: null,
-        functionality: null,
         subscribe: null,
-        rModule: null,
         rFunction: null,
-        remarks: null
+        remarks: null,
+        processName: null,
+        process: null,
+        state: null
       };
       this.resetForm("form");
     },
@@ -370,7 +373,7 @@
     handleAdd() {
       this.reset();
       this.open = true;
-      this.title = "娣诲姞OPCUA鍙傛暟璁剧疆";
+      this.titleName = "娣诲姞浜や簰淇″彿閰嶇疆";
     },
     /** 淇敼鎸夐挳鎿嶄綔 */
     handleUpdate(row) {
@@ -379,7 +382,7 @@
       getOpcuaconfig(id).then(response => {
         this.form = response.data;
         this.open = true;
-        this.title = "淇敼OPCUA鍙傛暟璁剧疆";
+        this.titleName = "淇敼浜や簰淇″彿閰嶇疆";
       });
     },
     /** 鎻愪氦鎸夐挳 */
@@ -405,7 +408,7 @@
     /** 鍒犻櫎鎸夐挳鎿嶄綔 */
     handleDelete(row) {
       const ids = row.id || this.ids;
-      this.$modal.confirm('鏄惁纭鍒犻櫎OPCUA鍙傛暟璁剧疆缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�').then(function() {
+      this.$modal.confirm('鏄惁纭鍒犻櫎浜や簰淇″彿閰嶇疆缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�').then(function() {
         return delOpcuaconfig(ids);
       }).then(() => {
         this.getList();
diff --git a/jcdm-ui/src/views/main/da/paramCollection/index.vue b/jcdm-ui/src/views/main/da/paramCollection/index.vue
index 4c028d8..c4cded5 100644
--- a/jcdm-ui/src/views/main/da/paramCollection/index.vue
+++ b/jcdm-ui/src/views/main/da/paramCollection/index.vue
@@ -1,71 +1,28 @@
 <template>
   <div class="app-container">
     <el-card class="box-card">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
-      <el-form-item label="鎬绘垚搴忓垪鍙�" prop="sfcCode">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="浜у搧缂栫爜" prop="productCode">
         <el-input
-          v-model="queryParams.sfcCode"
-          placeholder="璇疯緭鍏ユ�绘垚搴忓垪鍙�"
+          v-model="queryParams.productCode"
+          placeholder="璇疯緭鍏ヤ骇鍝佺紪鐮�"
           clearable
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="宸ュ崟缂栧彿" prop="workOrderNo">
+      <el-form-item label="浜у搧鍚嶇О" prop="productName">
         <el-input
-          v-model="queryParams.workOrderNo"
-          placeholder="璇疯緭鍏ュ伐鍗曠紪鍙�"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="宸ュ簭缂栧彿" prop="processesCode">
-        <el-input
-          v-model="queryParams.processesCode"
-          placeholder="璇疯緭鍏ュ伐搴忕紪鍙�"
+          v-model="queryParams.productName"
+          placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"
           clearable
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
       <el-form-item style="float: right">
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button type="warning" icon="el-icon-copy-document" size="mini" @click="advancedQuery">楂樼骇鏌ヨ</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
       </el-form-item>
     </el-form>
-      <el-form :model="queryParams" ref="queryParams" size="small" :inline="true" v-show="advancedShowSearch" label-width="100px">
-        <el-form-item label="鍙傛暟闆嗙紪鐮�" prop="parameterSetCode">
-          <el-input
-            v-model="queryParams.parameterSetCode"
-            placeholder="璇疯緭鍏ュ弬鏁伴泦缂栫爜"
-            clearable
-            @keyup.enter.native="handleQuery"
-          />
-        </el-form-item>
-        <el-form-item label="鍙傛暟缂栫爜" prop="paramCode">
-          <el-input
-            v-model="queryParams.paramCode"
-            placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�"
-            clearable
-            @keyup.enter.native="handleQuery"
-          />
-        </el-form-item>
-        <el-form-item label="鍙傛暟绫诲瀷" prop="type">
-          <el-input
-            v-model="queryParams.type"
-            placeholder="璇疯緭鍏ュ弬鏁扮被鍨�"
-            clearable
-            @keyup.enter.native="handleQuery"
-          />
-        </el-form-item>
-        <el-form-item label="閲囬泦鏃堕棿" prop="collectionTime">
-          <el-date-picker clearable
-                          v-model="queryParams.collectionTime"
-                          type="date"
-                          value-format="yyyy-MM-dd"
-                          placeholder="璇烽�夋嫨閲囬泦鏃堕棿">
-          </el-date-picker>
-        </el-form-item>
-      </el-form>
     </el-card>
     <el-card style="margin-top: 10px" class="box-card">
     <el-row :gutter="10" class="mb8">
@@ -116,46 +73,31 @@
 
     <el-table v-loading="loading" border :data="paramCollectionList" @selection-change="handleSelectionChange" v-if="paramCollectionList.length > 0">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="宸ュ崟缂栧彿" align="center" prop="workOrderNo">
-      </el-table-column>
-      <el-table-column label="鎬绘垚搴忓垪鍙�" align="center" width="100" prop="sfcCode">
-      </el-table-column>
-      <el-table-column label="浜у搧缂栧彿" align="center" prop="productCode">
-      </el-table-column>
-      <el-table-column label="浜х嚎缂栧彿" align="center" prop="productionLine">
-      </el-table-column>
-      <el-table-column label="宸ュ簭缂栧彿" align="center" prop="processesCode">
-      </el-table-column>
-      <el-table-column label="璁惧缂栧彿" align="center" prop="equipmentNo">
-      </el-table-column>
-      <el-table-column label="鍙傛暟缂栫爜" align="center" prop="paramCode">
-      </el-table-column>
-      <el-table-column label="鍙傛暟鍊�" align="center" prop="paramValue">
-      </el-table-column>
-      <el-table-column label="鍙傛暟涓婇檺" align="center" prop="paramUpper">
-      </el-table-column>
-      <el-table-column label="鍙傛暟涓嬮檺" align="center" prop="paramLower">
-      </el-table-column>
-      <el-table-column label="鏍囧噯鍊�" align="center" prop="paramStandard">
-      </el-table-column>
-      <el-table-column label="閲囬泦鏃堕棿" align="center" prop="collectionTime" width="180">
+      <el-table-column label="宸ュ崟缂栧彿" align="center" prop="workOrderNo"></el-table-column>
+      <el-table-column label="鎬绘垚搴忓垪鍙�" align="center" width="140" prop="sfcCode" ></el-table-column>
+      <el-table-column label="浜у搧缂栧彿" align="center" prop="productCode"></el-table-column>
+      <el-table-column label="浜х嚎缂栧彿" align="center" prop="productionLine"></el-table-column>
+      <el-table-column label="宸ヤ綅缂栧彿" align="center" prop="locationCode"></el-table-column>
+      <el-table-column label="璁惧缂栧彿" align="center" prop="equipmentNo"></el-table-column>
+      <el-table-column label="鍙傛暟缂栫爜" align="center" prop="paramCode"></el-table-column>
+      <el-table-column label="鍙傛暟鍊�" align="center" prop="paramValue"></el-table-column>
+      <el-table-column label="鍙傛暟涓婇檺" align="center" prop="paramUpper"></el-table-column>
+      <el-table-column label="鍙傛暟涓嬮檺" align="center" prop="paramLower"></el-table-column>
+      <el-table-column label="閲囬泦鏃堕棿" align="center" prop="collectionTime" width="160">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.collectionTime, '{y}-{m}-{d}') }}</span>
+          <span>{{ parseTime(scope.row.collectionTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="鐘舵��" align="center" prop="state">
-      </el-table-column>
-      <el-table-column label="鍙傛暟鍚嶇О" align="center" prop="paramName">
-      </el-table-column>
-      <el-table-column label="鍗曚綅" align="center" prop="unit">
-      </el-table-column>
-      <el-table-column label="鍙傛暟绫诲瀷" align="center" prop="type">
-      </el-table-column>
-      <el-table-column fixed="right" label="鎿嶄綔" width="200" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="鐘舵��" align="center" prop="state"></el-table-column>
+      <el-table-column label="鍙傛暟鍚嶇О" align="center" prop="paramName" width="150" ></el-table-column>
+      <el-table-column label="鍗曚綅" align="center" prop="unit"></el-table-column>
+      <el-table-column label="绫诲瀷" align="center" prop="type"></el-table-column>
+      <el-table-column fixed="right" width="200" label="鎿嶄綔" align="center" class-name="small-padding fixed-width" >
         <template slot-scope="scope">
           <el-button
             size="mini"
             type="success"
+            plain
             style="width: 72px"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
@@ -164,6 +106,7 @@
           <el-button
             size="mini"
             type="danger"
+            plain
             style="width: 72px"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
@@ -186,48 +129,40 @@
     />
 
     <!-- 娣诲姞鎴栦慨鏀硅澶囦骇鍝佽繃绋嬪弬鏁伴噰闆嗗璇濇 -->
-    <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="600px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+    <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="宸ュ崟缂栧彿" prop="workOrderNo">
-          <el-input v-model="form.workOrderNo"  placeholder="璇疯緭鍏ュ伐鍗曠紪鍙�" />
+          <el-input v-model="form.workOrderNo" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
         <el-form-item label="鎬绘垚搴忓垪鍙�" prop="sfcCode">
-          <el-input v-model="form.sfcCode"  placeholder="璇疯緭鍏ユ�绘垚搴忓垪鍙�" />
+          <el-input v-model="form.sfcCode" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
         <el-form-item label="浜у搧缂栧彿" prop="productCode">
-          <el-input v-model="form.productCode"  placeholder="璇疯緭鍏ヤ骇鍝佺紪鍙�" />
+          <el-input v-model="form.productCode" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
         <el-form-item label="浜х嚎缂栧彿" prop="productionLine">
-          <el-input v-model="form.productionLine"  placeholder="璇疯緭鍏ヤ骇绾跨紪鍙�" />
+          <el-input v-model="form.productionLine" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
-        <el-form-item label="宸ュ簭缂栧彿" prop="processesCode">
-          <el-input v-model="form.processesCode"  placeholder="璇疯緭鍏ュ伐搴忕紪鍙�" />
+        <el-form-item label="宸ヤ綅缂栧彿" prop="locationCode">
+          <el-input v-model="form.locationCode" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
         <el-form-item label="璁惧缂栧彿" prop="equipmentNo">
-          <el-input v-model="form.equipmentNo"  placeholder="璇疯緭鍏ヨ澶囩紪鍙�" />
+          <el-input v-model="form.equipmentNo" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
         <el-form-item label="鍙傛暟缂栫爜" prop="paramCode">
-          <el-input v-model="form.paramCode"  placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�" />
+          <el-input v-model="form.paramCode" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
         <el-form-item label="鍙傛暟鍊�" prop="paramValue">
-          <el-input v-model="form.paramValue"  placeholder="璇疯緭鍏ュ弬鏁板��" />
+          <el-input v-model="form.paramValue" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
         <el-form-item label="鍙傛暟涓婇檺" prop="paramUpper">
-          <el-input v-model="form.paramUpper"  placeholder="璇疯緭鍏ュ弬鏁颁笂闄�" />
+          <el-input v-model="form.paramUpper" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
         <el-form-item label="鍙傛暟涓嬮檺" prop="paramLower">
-          <el-input v-model="form.paramLower"  placeholder="璇疯緭鍏ュ弬鏁颁笅闄�" />
+          <el-input v-model="form.paramLower" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
         <el-form-item label="鏍囧噯鍊�" prop="paramStandard">
-          <el-input v-model="form.paramStandard"  placeholder="璇疯緭鍏ユ爣鍑嗗��" />
-        </el-form-item>
-        <el-form-item label="閲囬泦鏃堕棿" prop="collectionTime">
-          <el-date-picker clearable
-            v-model="form.collectionTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="璇烽�夋嫨閲囬泦鏃堕棿">
-          </el-date-picker>
+          <el-input v-model="form.paramStandard" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
         <el-form-item label="鐘舵��" prop="state">
           <el-input v-model="form.state" placeholder="璇疯緭鍏ョ姸鎬�" />
@@ -238,7 +173,7 @@
         <el-form-item label="鍗曚綅" prop="unit">
           <el-input v-model="form.unit" placeholder="璇疯緭鍏ュ崟浣�" />
         </el-form-item>
-        <el-form-item label="鍙傛暟绫诲瀷" prop="type">
+        <el-form-item label="绫诲瀷" prop="type">
           <el-select v-model="form.type" placeholder="璇烽�夋嫨绫诲瀷">
           </el-select>
         </el-form-item>
@@ -272,7 +207,6 @@
       total: 0,
       // 璁惧浜у搧杩囩▼鍙傛暟閲囬泦琛ㄦ牸鏁版嵁
       paramCollectionList: [],
-      advancedShowSearch: false,
       // 寮瑰嚭灞傛爣棰�
       title: "",
       // 鏄惁鏄剧ず寮瑰嚭灞�
@@ -324,9 +258,6 @@
     this.getList();
   },
   methods: {
-    advancedQuery(){
-      this.advancedShowSearch = (this.advancedShowSearch) ? this.advancedShowSearch = false : this.advancedShowSearch = true;
-    },
     /** 鏌ヨ璁惧浜у搧杩囩▼鍙傛暟閲囬泦鍒楄〃 */
     getList() {
       this.loading = true;
diff --git a/jcdm-ui/src/views/main/da/passingStationCollection/index.vue b/jcdm-ui/src/views/main/da/passingStationCollection/index.vue
index d4f1e1e..9918df7 100644
--- a/jcdm-ui/src/views/main/da/passingStationCollection/index.vue
+++ b/jcdm-ui/src/views/main/da/passingStationCollection/index.vue
@@ -83,29 +83,24 @@
       </el-table-column>
       <el-table-column label="宸ヤ綅缂栧彿" align="center" prop="locationCode">
       </el-table-column>
-<!--      <el-table-column label="璁惧缂栧彿" align="center" prop="equipmentNo">
-      </el-table-column>-->
       <el-table-column label="鍏ョ珯鏃堕棿" align="center" prop="inboundTime" width="100">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.inboundTime, '{y}-{m}-{d}') }}</span>
+          <span>{{ parseTime(scope.row.inboundTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
         </template>
       </el-table-column>
       <el-table-column label="鍑虹珯鏃堕棿" align="center" prop="outboundTime" width="100">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.outboundTime, '{y}-{m}-{d}') }}</span>
+          <span>{{ parseTime(scope.row.outboundTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
         </template>
       </el-table-column>
-<!--      <el-table-column label="鍏ョ珯鏄惁鍚堟牸" align="center" prop="inRsSign">
-      </el-table-column>
-      <el-table-column label="鍏ョ珯NG鍘熷洜" align="center" prop="inMsgSign">
-      </el-table-column>-->
+
       <el-table-column label="鏄惁鍚堟牸" align="center" prop="outRsSign">
       </el-table-column>
       <el-table-column label="NG鍘熷洜" align="center" prop="outMsgSign">
       </el-table-column>
       <el-table-column label="閲囬泦鏃堕棿" align="center" prop="collectionTime" width="180">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.collectionTime, '{y}-{m}-{d}') }}</span>
+          <span>{{ parseTime(scope.row.collectionTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
         </template>
       </el-table-column>
       <el-table-column label="鑺傛媿鏃堕棿" align="center" prop="beatTime">
@@ -147,8 +142,8 @@
     />
 
     <!-- 娣诲姞鎴栦慨鏀逛骇鍝佽繃绔欓噰闆嗗璇濇 -->
-    <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+    <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="1000px" append-to-body>
+      <el-form ref="form" inline :model="form" :rules="rules" label-width="120px">
         <el-form-item label="宸ュ崟缂栧彿" prop="workOrderNo">
           <el-input v-model="form.workOrderNo" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
@@ -183,12 +178,6 @@
             placeholder="璇烽�夋嫨鍑虹珯鏃堕棿">
           </el-date-picker>
         </el-form-item>
-<!--        <el-form-item label="鍏ョ珯鏄惁鍚堟牸" prop="inRsSign">
-          <el-input v-model="form.inRsSign" placeholder="璇疯緭鍏ュ叆绔欐槸鍚﹀悎鏍�" />
-        </el-form-item>
-        <el-form-item label="鍏ョ珯NG鍘熷洜" prop="inMsgSign">
-          <el-input v-model="form.inMsgSign" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
-        </el-form-item>-->
         <el-form-item label="鏄惁鍚堟牸" prop="outRsSign">
           <el-input v-model="form.outRsSign" placeholder="璇疯緭鍏ュ嚭绔欐槸鍚﹀悎鏍�" />
         </el-form-item>
@@ -203,18 +192,6 @@
             placeholder="璇烽�夋嫨閲囬泦鏃堕棿">
           </el-date-picker>
         </el-form-item>
-<!--        <el-form-item label="棰勭暀瀛楁1" prop="spareField1">-->
-<!--          <el-input v-model="form.spareField1" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />-->
-<!--        </el-form-item>-->
-<!--        <el-form-item label="棰勭暀瀛楁2" prop="spareField2">-->
-<!--          <el-input v-model="form.spareField2" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />-->
-<!--        </el-form-item>-->
-<!--        <el-form-item label="鍒涘缓鐢ㄦ埛" prop="createUser">-->
-<!--          <el-input v-model="form.createUser" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />-->
-<!--        </el-form-item>-->
-<!--        <el-form-item label="鏇存敼鐢ㄦ埛" prop="updateUser">-->
-<!--          <el-input v-model="form.updateUser" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />-->
-<!--        </el-form-item>-->
         <el-form-item label="鑺傛媿鏃堕棿" prop="beatTime">
           <el-input v-model="form.beatTime" placeholder="璇疯緭鍏ヨ妭鎷嶆椂闂�" />
         </el-form-item>
diff --git a/jcdm-ui/src/views/main/da/tileMatchRules/index.vue b/jcdm-ui/src/views/main/da/tileMatchRules/index.vue
new file mode 100644
index 0000000..e8ec77e
--- /dev/null
+++ b/jcdm-ui/src/views/main/da/tileMatchRules/index.vue
@@ -0,0 +1,483 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card">
+      <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+        <el-form-item label="浜у搧绯诲垪" prop="productSeries">
+          <el-input
+            v-model="queryParams.productSeries"
+            placeholder="璇疯緭鍏ヤ骇鍝佺郴鍒�"
+            clearable
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+<!--        <el-form-item label="鎵爜瀵硅薄1" prop="scanObject1">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.scanObject1"-->
+<!--            placeholder="璇疯緭鍏ユ壂鐮佸璞�1"-->
+<!--            clearable-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="鎵爜瀵硅薄2" prop="scanObject2">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.scanObject2"-->
+<!--            placeholder="璇疯緭鍏ユ壂鐮佸璞�2"-->
+<!--            clearable-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="杞村悕绉�" prop="axisName">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.axisName"-->
+<!--            placeholder="璇疯緭鍏ヨ酱鍚嶇О"-->
+<!--            clearable-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="棰堝悕绉�" prop="neckName">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.neckName"-->
+<!--            placeholder="璇疯緭鍏ラ鍚嶇О"-->
+<!--            clearable-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+        <el-form-item label="鐡﹀悕绉�" prop="tileName">
+          <el-input
+            v-model="queryParams.tileName"
+            placeholder="璇疯緭鍏ョ摝鍚嶇О"
+            clearable
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+<!--        <el-form-item label="杞村弬鏁版暟浣嶇疆" prop="axisParameterNoPosition">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.axisParameterNoPosition"-->
+<!--            placeholder="璇疯緭鍏ヨ酱鍙傛暟鏁颁綅缃�"-->
+<!--            clearable-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="棰堝弬鏁版暟浣嶇疆" prop="neckParameterPosition">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.neckParameterPosition"-->
+<!--            placeholder="璇疯緭鍏ラ鍙傛暟鏁颁綅缃�"-->
+<!--            clearable-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="杞村��" prop="axisValue">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.axisValue"-->
+<!--            placeholder="璇疯緭鍏ヨ酱鍊�"-->
+<!--            clearable-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="棰堝��" prop="neckValue">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.neckValue"-->
+<!--            placeholder="璇疯緭鍏ラ鍊�"-->
+<!--            clearable-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="鐡﹂鑹�" prop="tileColor">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.tileColor"-->
+<!--            placeholder="璇疯緭鍏ョ摝棰滆壊"-->
+<!--            clearable-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="鍒涘缓鐢ㄦ埛" prop="createUser">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.createUser"-->
+<!--            placeholder="璇疯緭鍏ュ垱寤虹敤鎴�"-->
+<!--            clearable-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="鏇存敼鐢ㄦ埛" prop="updateUser">-->
+<!--          <el-input-->
+<!--            v-model="queryParams.updateUser"-->
+<!--            placeholder="璇疯緭鍏ユ洿鏀圭敤鎴�"-->
+<!--            clearable-->
+<!--            @keyup.enter.native="handleQuery"-->
+<!--          />-->
+<!--        </el-form-item>-->
+        <el-form-item label="鐘舵��" prop="state">
+          <el-input
+            v-model="queryParams.state"
+            placeholder="璇疯緭鍏ョ姸鎬�"
+            clearable
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+        <el-form-item style="float: right">
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+        </el-form-item>
+      </el-form>
+    </el-card>
+
+    <el-card style="margin-top: 10px" class="box-card">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button
+            type="primary"
+            plain
+            icon="el-icon-plus"
+            size="mini"
+            @click="handleAdd"
+            v-hasPermi="['da:tileMatchRules:add']"
+          >鏂板</el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="success"
+            plain
+            icon="el-icon-edit"
+            size="mini"
+            :disabled="single"
+            @click="handleUpdate"
+            v-hasPermi="['da:tileMatchRules:edit']"
+          >淇敼</el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="danger"
+            plain
+            icon="el-icon-delete"
+            size="mini"
+            :disabled="multiple"
+            @click="handleDelete"
+            v-hasPermi="['da:tileMatchRules:remove']"
+          >鍒犻櫎</el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="warning"
+            plain
+            icon="el-icon-download"
+            size="mini"
+            @click="handleExport"
+            v-hasPermi="['da:tileMatchRules:export']"
+          >瀵煎嚭</el-button>
+        </el-col>
+        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      </el-row>
+
+      <el-table border v-loading="loading" :data="tileMatchRulesList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+<!--        <el-table-column label="涓婚敭id" align="center" prop="id" />-->
+        <el-table-column label="浜у搧绯诲垪" align="center" prop="productSeries">
+
+        </el-table-column>
+        <el-table-column label="鎵爜瀵硅薄1" align="center" prop="scanObject1" width="100">
+
+        </el-table-column>
+        <el-table-column label="鎵爜瀵硅薄2" align="center" prop="scanObject2" width="100">
+
+        </el-table-column>
+        <el-table-column label="杞村悕绉�" align="center" prop="axisName">
+
+        </el-table-column>
+        <el-table-column label="棰堝悕绉�" align="center" prop="neckName">
+
+        </el-table-column>
+        <el-table-column label="鐡﹀悕绉�" align="center" prop="tileName">
+
+        </el-table-column>
+        <el-table-column label="杞村弬鏁颁綅缃�" align="center" prop="axisParameterNoPosition" width="100">
+
+        </el-table-column>
+        <el-table-column label="棰堝弬鏁颁綅缃�" align="center" prop="neckParameterPosition" width="100">
+
+        </el-table-column>
+        <el-table-column label="杞村��" align="center" prop="axisValue">
+
+        </el-table-column>
+        <el-table-column label="棰堝��" align="center" prop="neckValue">
+
+        </el-table-column>
+        <el-table-column label="鐡﹂鑹�" align="center" prop="tileColor">
+
+        </el-table-column>
+<!--        <el-table-column label="鍒涘缓鐢ㄦ埛" align="center" prop="createUser">-->
+
+<!--        </el-table-column>-->
+<!--        <el-table-column label="鏇存敼鐢ㄦ埛" align="center" prop="updateUser">-->
+
+<!--        </el-table-column>-->
+        <el-table-column label="鐘舵��" align="center" prop="state">
+          <template slot-scope="scope">
+            <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.state"/>
+          </template>
+        </el-table-column>
+        <el-table-column fixed="right" width="200" label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="success"
+              plain
+              style="width: 72px"
+              icon="el-icon-edit"
+              @click="handleUpdate(scope.row)"
+              v-hasPermi="['da:tileMatchRules:edit']"
+            >淇敼</el-button>
+            <el-button
+              size="mini"
+              type="danger"
+              plain
+              style="width: 72px"
+              icon="el-icon-delete"
+              @click="handleDelete(scope.row)"
+              v-hasPermi="['da:tileMatchRules:remove']"
+            >鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-card>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀归厤鐡﹁鍒欏璇濇 -->
+    <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="1000px" append-to-body>
+      <span slot="title">
+        <i class="el-icon-s-order"></i>
+        {{titleName}}
+      </span>
+      <el-form ref="form"  inline :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="浜у搧绯诲垪" prop="productSeries">
+          <el-input v-model="form.productSeries" placeholder="璇疯緭鍏ヤ骇鍝佺郴鍒�" />
+        </el-form-item>
+        <el-form-item label="鎵爜瀵硅薄1" prop="scanObject1">
+          <el-input v-model="form.scanObject1" placeholder="璇疯緭鍏ユ壂鐮佸璞�1" />
+        </el-form-item>
+        <el-form-item label="鎵爜瀵硅薄2" prop="scanObject2">
+          <el-input v-model="form.scanObject2" placeholder="璇疯緭鍏ユ壂鐮佸璞�2" />
+        </el-form-item>
+        <el-form-item label="杞村悕绉�" prop="axisName">
+          <el-input v-model="form.axisName" placeholder="璇疯緭鍏ヨ酱鍚嶇О" />
+        </el-form-item>
+        <el-form-item label="棰堝悕绉�" prop="neckName">
+          <el-input v-model="form.neckName" placeholder="璇疯緭鍏ラ鍚嶇О" />
+        </el-form-item>
+        <el-form-item label="鐡﹀悕绉�" prop="tileName">
+          <el-input v-model="form.tileName" placeholder="璇疯緭鍏ョ摝鍚嶇О" />
+        </el-form-item>
+        <el-form-item label="杞村弬鏁颁綅缃�" prop="axisParameterNoPosition">
+          <el-input v-model="form.axisParameterNoPosition" placeholder="璇疯緭鍏ヨ酱鍙傛暟浣嶇疆" />
+        </el-form-item>
+        <el-form-item label="棰堝弬鏁颁綅缃�" prop="neckParameterPosition">
+          <el-input v-model="form.neckParameterPosition" placeholder="璇疯緭鍏ラ鍙傛暟浣嶇疆" />
+        </el-form-item>
+        <el-form-item label="杞村��" prop="axisValue">
+          <el-input v-model="form.axisValue" placeholder="璇疯緭鍏ヨ酱鍊�" />
+        </el-form-item>
+        <el-form-item label="棰堝��" prop="neckValue">
+          <el-input v-model="form.neckValue" placeholder="璇疯緭鍏ラ鍊�" />
+        </el-form-item>
+        <el-form-item label="鐡﹂鑹�" prop="tileColor">
+          <el-input v-model="form.tileColor" placeholder="璇疯緭鍏ョ摝棰滆壊" />
+        </el-form-item>
+        <el-form-item label="鍒涘缓鐢ㄦ埛" prop="createUser">
+          <el-input v-model="form.createUser" placeholder="璇疯緭鍏ュ垱寤虹敤鎴�" />
+        </el-form-item>
+        <el-form-item label="鏇存敼鐢ㄦ埛" prop="updateUser">
+          <el-input v-model="form.updateUser" placeholder="璇疯緭鍏ユ洿鏀圭敤鎴�" />
+        </el-form-item>
+        <el-form-item label="鐘舵��" prop="state">
+          <el-select v-model="form.state"  placeholder="璇烽�夋嫨鐘舵��" >
+            <el-option
+              v-for="dict in dict.type.sys_normal_disable"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listTileMatchRules, getTileMatchRules, delTileMatchRules, addTileMatchRules, updateTileMatchRules } from "@/api/main/bs/tileMatchRules/tileMatchRules";
+
+export default {
+  name: "TileMatchRules",
+  dicts: ['subscription_type', 'sys_yes_no', 'data_type','sys_normal_disable'],
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      titleName: "",
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 閰嶇摝瑙勫垯琛ㄦ牸鏁版嵁
+      tileMatchRulesList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        productSeries: null,
+        scanObject1: null,
+        scanObject2: null,
+        axisName: null,
+        neckName: null,
+        tileName: null,
+        axisParameterNoPosition: null,
+        neckParameterPosition: null,
+        axisValue: null,
+        neckValue: null,
+        tileColor: null,
+        createUser: null,
+        updateUser: null,
+        state: null
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        id: [
+          { required: true, message: "涓婚敭id涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ閰嶇摝瑙勫垯鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listTileMatchRules(this.queryParams).then(response => {
+        this.tileMatchRulesList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        id: null,
+        productSeries: null,
+        scanObject1: null,
+        scanObject2: null,
+        axisName: null,
+        neckName: null,
+        tileName: null,
+        axisParameterNoPosition: null,
+        neckParameterPosition: null,
+        axisValue: null,
+        neckValue: null,
+        tileColor: null,
+        createUser: null,
+        createTime: null,
+        updateUser: null,
+        updateTime: null,
+        state: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.titleName = "娣诲姞閰嶇摝瑙勫垯";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getTileMatchRules(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.titleName = "淇敼閰嶇摝瑙勫垯";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateTileMatchRules(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addTileMatchRules(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎閰嶇摝瑙勫垯缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�').then(function() {
+        return delTileMatchRules(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('da/tileMatchRules/export', {
+        ...this.queryParams
+      }, `tileMatchRules_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/jcdm-ui/src/views/main/kb/stationTerminal/index.vue b/jcdm-ui/src/views/main/kb/stationTerminal/index.vue
index 87e0d4c..2ea6b1f 100644
--- a/jcdm-ui/src/views/main/kb/stationTerminal/index.vue
+++ b/jcdm-ui/src/views/main/kb/stationTerminal/index.vue
@@ -90,24 +90,14 @@
          <el-tab-pane name="first">
            <span slot="label"> <a class="el-icon-date"></a>棣栭〉</span>
            <el-col :span="8">
-             <el-table>
-               <el-table-column label="搴忓彿" align="center" prop="repairIdentification" width="50px"/>
-               <el-table-column label="鎿嶄綔鍐呭" align="center" prop="boxCode"  width="300px"/>
+             <el-table :data="formulaChildList">
+               <el-table-column label="鎺掑簭" width="60" align="center" prop="stepSort">
+               </el-table-column>
+               <el-table-column label="鎿嶄綔鍐呭" :show-overflow-tooltip='true' align="center" prop="operationSteps">
+               </el-table-column>
              </el-table>
            </el-col>
            <el-col :span="16">
-<!--             <el-input v-model="url" type="text" style="width: 20%" /> &nbsp; &nbsp;-->
-<!--             <el-button @click="join" type="primary">杩炴帴</el-button>-->
-<!--             <el-button @click="exit" type="danger">鏂紑</el-button>-->
-
-<!--             <br />-->
-<!--             <el-input type="textarea" v-model="message" :rows="9" />-->
-<!--             <el-button type="info" @click="send">鍙戦�佹秷鎭�</el-button>-->
-<!--             <br />-->
-<!--             <br />-->
-<!--             <el-input type="textarea" v-model="text_content" :rows="9" /> 杩斿洖鍐呭-->
-<!--             <br />-->
-<!--             <br />-->
              <el-image style="height: 520px;width: 100%" :src="imgSrc"></el-image>
            </el-col>
          </el-tab-pane>
@@ -143,11 +133,20 @@
 <script>
 import {listWorkReport} from "@/api/main/om/workReport/workReport";
 import {listStationConf,getIpv4} from "@/api/main/sc/stationConf";
+import {listFormulaChild} from "@/api/main/bs/formulaChild/formulaChild";
 
 export default {
   name: "stationTerminal",
   data() {
     return {
+      // 鏌ヨ鍙傛暟
+      formulaChildParams: {
+        pageNum: 1,
+        pageSize: 10,
+        productCode: null,
+      },
+      // 閰嶆柟閰嶇疆瀛愪俊鎭〃鏍兼暟鎹�
+      formulaChildList: [],
       ipAddress: '',
       imgSrc: '',
       headContent: {
@@ -188,16 +187,13 @@
       message: "",
       text_content: "",
       ws: null,
+      inputValue: '9'
     }
   },
   beforeDestroy() {
     this.exit();
   },
   created() {
-    this.getStationConfList();
-    this.connectWebsocket();
-
-
     this.initStation();
     // this.getStationConfList();
     // setTimeout(() => {
@@ -208,6 +204,14 @@
 
   },
   methods: {
+    /** 鏌ヨ閰嶆柟閰嶇疆瀛愪俊鎭垪琛� */
+    getListFormulaChild() {
+      this.formulaChildParams.productCode = this.workpieceInformation.productCode
+      listFormulaChild(this.formulaChildParams).then(response => {
+        console.log(this.formulaChildList)
+        this.formulaChildList = response.rows;
+      });
+    },
     changeMenu(tab, event) {
       console.log(tab, event);
     },
@@ -220,6 +224,7 @@
       this.headContent.sfcCode = this.content
       this.queryParams.sfcCode = this.content
       this.getList()
+      this.getListFormulaChild()
       this.cakeLamp.scanFinish = 1
     },
     /** 鏌ヨ鎶ュ伐璁板綍 琛ㄥ垪琛� */

--
Gitblit v1.9.3