From 2ce9e4a8509a571745933801f4cb9bda7245c8a1 Mon Sep 17 00:00:00 2001
From: yuxc <yuxc@vci-tech.com>
Date: 星期五, 23 八月 2024 10:08:07 +0800
Subject: [PATCH] 1、对Action管理相关功能上传。 2、对打的包进行上传

---
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PinyinCommon.java                |   89 ++++
 Bin/web/lib/accessors-smart-1.2.jar                                                                   |    0 
 Bin/web/lib/hamcrest-library-1.3.jar                                                                  |    0 
 Bin/web/lib/jgoodies-common-1.8.1.jar                                                                 |    0 
 Bin/web/lib/swingx-1.6.1.jar                                                                          |    0 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionQueryDTO.java             |   45 ++
 Bin/web/lib/plt-clientbase-1.0.RELEASE.jar                                                            |    0 
 Bin/web/lib/protege35-1.0.jar                                                                         |    0 
 Bin/web/lib/skinlf-6.7.jar                                                                            |    0 
 Bin/web/lib/mockito-core-2.23.4.jar                                                                   |    0 
 Bin/web/lib/plt-slice-1.0.RELEASE.jar                                                                 |    0 
 Bin/web/lib/json-smart-2.3.jar                                                                        |    0 
 Bin/web/lib/android-json-0.0.20131108.vaadin1.jar                                                     |    0 
 Bin/web/lib/plt-common-1.0.RELEASE.jar                                                                |    0 
 Bin/web/lib/spring-boot-test-2.1.3.RELEASE.jar                                                        |    0 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsActionServiceImpl.java |  405 +++++++++++++++++++
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionClsDTO.java               |   57 ++
 Bin/lib/service/WFService.jar                                                                         |    0 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsActionServiceI.java         |   68 +++
 Bin/web/lib/pinyin4j-2.5.0.jar                                                                        |    0 
 Bin/web/lib/xmlunit-core-2.6.2.jar                                                                    |    0 
 Bin/web/lib/jackson-databind-2.9.6.jar                                                                |    0 
 Bin/web/lib/swing-worker-1.1.jar                                                                      |    0 
 Bin/web/lib/flatlaf-2.3.jar                                                                           |    0 
 Bin/web/lib/nativeskin-1.0.jar                                                                        |    0 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/IExportLogBean.java             |   19 
 Bin/lib/service/BOFService.jar                                                                        |    0 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsActionController.java    |  160 +++++++
 Bin/web/lib/spring-boot-starter-test-2.1.3.RELEASE.jar                                                |    0 
 Bin/web/lib/spring-test-5.1.5.RELEASE.jar                                                             |    0 
 Bin/web/lib/byte-buddy-agent-1.9.3.jar                                                                |    0 
 Bin/web/lib/assertj-core-3.11.1.jar                                                                   |    0 
 Bin/web/lib/json-path-2.4.0.jar                                                                       |    0 
 Bin/web/lib/byte-buddy-1.9.3.jar                                                                      |    0 
 Bin/web/lib/jsonassert-1.5.0.jar                                                                      |    0 
 Bin/web/lib/plt-poi-2024.1-SNAPSHOT.jar                                                               |    0 
 Bin/web/lib/spring-boot-test-autoconfigure-2.1.3.RELEASE.jar                                          |    0 
 Bin/web/lib/filters-2.0.235.jar                                                                       |    0 
 Bin/web/lib/uitheme-1.3.1.jar                                                                         |    0 
 Bin/web/lib/objenesis-2.6.jar                                                                         |    0 
 Bin/web/lib/swixml-2.0.jar                                                                            |    0 
 Bin/web/lib/jgraphx-3.1.0.0.jar                                                                       |    0 
 Bin/web/lib/junit-4.8.jar                                                                             |    0 
 Bin/web/lib/ice-3.7.10.jar                                                                            |    0 
 Bin/web/lib/icebox-3.7.10.jar                                                                         |    0 
 Bin/web/lib/jgoodies-looks-2.5.3.jar                                                                  |    0 
 Bin/web/lib/asm-5.0.4.jar                                                                             |    0 
 Bin/web/lib/transmittable-thread-local-2.12.6.jar                                                     |    0 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionDTO.java                  |   70 +++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/ExportBeans.java                |  153 +++++++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/ExportActionLogBean.java        |  156 +++++++
 Bin/web/lib/hamcrest-core-1.3.jar                                                                     |    0 
 Bin/web/lib/plt-web-base-2024.1-SNAPSHOT.jar                                                          |    0 
 Bin/web/lib/poi-scratchpad-3.9.jar                                                                    |    0 
 Bin/web/lib/jgraph-3.1.0.0.jar                                                                        |    0 
 Bin/web/lib/plt-starter-2024.1-SNAPSHOT.jar                                                           |    0 
 Bin/web/lib/spring-boot-configuration-processor-2.1.3.RELEASE.jar                                     |    0 
 57 files changed, 1,222 insertions(+), 0 deletions(-)

diff --git a/Bin/lib/service/BOFService.jar b/Bin/lib/service/BOFService.jar
index 3fc1d7a..315e7c6 100644
--- a/Bin/lib/service/BOFService.jar
+++ b/Bin/lib/service/BOFService.jar
Binary files differ
diff --git a/Bin/lib/service/WFService.jar b/Bin/lib/service/WFService.jar
index e24eefc..4967e86 100644
--- a/Bin/lib/service/WFService.jar
+++ b/Bin/lib/service/WFService.jar
Binary files differ
diff --git a/Bin/web/lib/accessors-smart-1.2.jar b/Bin/web/lib/accessors-smart-1.2.jar
new file mode 100644
index 0000000..f4505e9
--- /dev/null
+++ b/Bin/web/lib/accessors-smart-1.2.jar
Binary files differ
diff --git a/Bin/web/lib/android-json-0.0.20131108.vaadin1.jar b/Bin/web/lib/android-json-0.0.20131108.vaadin1.jar
new file mode 100644
index 0000000..add495f
--- /dev/null
+++ b/Bin/web/lib/android-json-0.0.20131108.vaadin1.jar
Binary files differ
diff --git a/Bin/web/lib/asm-5.0.4.jar b/Bin/web/lib/asm-5.0.4.jar
new file mode 100644
index 0000000..cdb283d
--- /dev/null
+++ b/Bin/web/lib/asm-5.0.4.jar
Binary files differ
diff --git a/Bin/web/lib/assertj-core-3.11.1.jar b/Bin/web/lib/assertj-core-3.11.1.jar
new file mode 100644
index 0000000..87e5ee3
--- /dev/null
+++ b/Bin/web/lib/assertj-core-3.11.1.jar
Binary files differ
diff --git a/Bin/web/lib/byte-buddy-1.9.3.jar b/Bin/web/lib/byte-buddy-1.9.3.jar
new file mode 100644
index 0000000..c1c2b07
--- /dev/null
+++ b/Bin/web/lib/byte-buddy-1.9.3.jar
Binary files differ
diff --git a/Bin/web/lib/byte-buddy-agent-1.9.3.jar b/Bin/web/lib/byte-buddy-agent-1.9.3.jar
new file mode 100644
index 0000000..51a0bd4
--- /dev/null
+++ b/Bin/web/lib/byte-buddy-agent-1.9.3.jar
Binary files differ
diff --git a/Bin/web/lib/filters-2.0.235.jar b/Bin/web/lib/filters-2.0.235.jar
new file mode 100644
index 0000000..39e4dd5
--- /dev/null
+++ b/Bin/web/lib/filters-2.0.235.jar
Binary files differ
diff --git a/Bin/web/lib/flatlaf-2.3.jar b/Bin/web/lib/flatlaf-2.3.jar
new file mode 100644
index 0000000..9f292d2
--- /dev/null
+++ b/Bin/web/lib/flatlaf-2.3.jar
Binary files differ
diff --git a/Bin/web/lib/hamcrest-core-1.3.jar b/Bin/web/lib/hamcrest-core-1.3.jar
new file mode 100644
index 0000000..9d5fe16
--- /dev/null
+++ b/Bin/web/lib/hamcrest-core-1.3.jar
Binary files differ
diff --git a/Bin/web/lib/hamcrest-library-1.3.jar b/Bin/web/lib/hamcrest-library-1.3.jar
new file mode 100644
index 0000000..9eac80d
--- /dev/null
+++ b/Bin/web/lib/hamcrest-library-1.3.jar
Binary files differ
diff --git a/Bin/web/lib/ice-3.7.10.jar b/Bin/web/lib/ice-3.7.10.jar
new file mode 100644
index 0000000..768c926
--- /dev/null
+++ b/Bin/web/lib/ice-3.7.10.jar
Binary files differ
diff --git a/Bin/web/lib/icebox-3.7.10.jar b/Bin/web/lib/icebox-3.7.10.jar
new file mode 100644
index 0000000..45e41b3
--- /dev/null
+++ b/Bin/web/lib/icebox-3.7.10.jar
Binary files differ
diff --git a/Bin/web/lib/jackson-databind-2.9.6.jar b/Bin/web/lib/jackson-databind-2.9.6.jar
new file mode 100644
index 0000000..e8eb658
--- /dev/null
+++ b/Bin/web/lib/jackson-databind-2.9.6.jar
Binary files differ
diff --git a/Bin/web/lib/jgoodies-common-1.8.1.jar b/Bin/web/lib/jgoodies-common-1.8.1.jar
new file mode 100644
index 0000000..f6a256e
--- /dev/null
+++ b/Bin/web/lib/jgoodies-common-1.8.1.jar
Binary files differ
diff --git a/Bin/web/lib/jgoodies-looks-2.5.3.jar b/Bin/web/lib/jgoodies-looks-2.5.3.jar
new file mode 100644
index 0000000..3339053
--- /dev/null
+++ b/Bin/web/lib/jgoodies-looks-2.5.3.jar
Binary files differ
diff --git a/Bin/web/lib/jgraph-3.1.0.0.jar b/Bin/web/lib/jgraph-3.1.0.0.jar
new file mode 100644
index 0000000..9af266c
--- /dev/null
+++ b/Bin/web/lib/jgraph-3.1.0.0.jar
Binary files differ
diff --git a/Bin/web/lib/jgraphx-3.1.0.0.jar b/Bin/web/lib/jgraphx-3.1.0.0.jar
new file mode 100644
index 0000000..6637aac
--- /dev/null
+++ b/Bin/web/lib/jgraphx-3.1.0.0.jar
Binary files differ
diff --git a/Bin/web/lib/json-path-2.4.0.jar b/Bin/web/lib/json-path-2.4.0.jar
new file mode 100644
index 0000000..6229306
--- /dev/null
+++ b/Bin/web/lib/json-path-2.4.0.jar
Binary files differ
diff --git a/Bin/web/lib/json-smart-2.3.jar b/Bin/web/lib/json-smart-2.3.jar
new file mode 100644
index 0000000..0cd52ea
--- /dev/null
+++ b/Bin/web/lib/json-smart-2.3.jar
Binary files differ
diff --git a/Bin/web/lib/jsonassert-1.5.0.jar b/Bin/web/lib/jsonassert-1.5.0.jar
new file mode 100644
index 0000000..aec04c5
--- /dev/null
+++ b/Bin/web/lib/jsonassert-1.5.0.jar
Binary files differ
diff --git a/Bin/web/lib/junit-4.8.jar b/Bin/web/lib/junit-4.8.jar
new file mode 100644
index 0000000..efdaa58
--- /dev/null
+++ b/Bin/web/lib/junit-4.8.jar
Binary files differ
diff --git a/Bin/web/lib/mockito-core-2.23.4.jar b/Bin/web/lib/mockito-core-2.23.4.jar
new file mode 100644
index 0000000..b259c8c
--- /dev/null
+++ b/Bin/web/lib/mockito-core-2.23.4.jar
Binary files differ
diff --git a/Bin/web/lib/nativeskin-1.0.jar b/Bin/web/lib/nativeskin-1.0.jar
new file mode 100644
index 0000000..acacc56
--- /dev/null
+++ b/Bin/web/lib/nativeskin-1.0.jar
Binary files differ
diff --git a/Bin/web/lib/objenesis-2.6.jar b/Bin/web/lib/objenesis-2.6.jar
new file mode 100644
index 0000000..b4b29d5
--- /dev/null
+++ b/Bin/web/lib/objenesis-2.6.jar
Binary files differ
diff --git a/Bin/web/lib/pinyin4j-2.5.0.jar b/Bin/web/lib/pinyin4j-2.5.0.jar
new file mode 100644
index 0000000..2e1d819
--- /dev/null
+++ b/Bin/web/lib/pinyin4j-2.5.0.jar
Binary files differ
diff --git a/Bin/web/lib/plt-clientbase-1.0.RELEASE.jar b/Bin/web/lib/plt-clientbase-1.0.RELEASE.jar
index 88b1396..c05e09c 100644
--- a/Bin/web/lib/plt-clientbase-1.0.RELEASE.jar
+++ b/Bin/web/lib/plt-clientbase-1.0.RELEASE.jar
Binary files differ
diff --git a/Bin/web/lib/plt-common-1.0.RELEASE.jar b/Bin/web/lib/plt-common-1.0.RELEASE.jar
index ec5d9d9..079294b 100644
--- a/Bin/web/lib/plt-common-1.0.RELEASE.jar
+++ b/Bin/web/lib/plt-common-1.0.RELEASE.jar
Binary files differ
diff --git a/Bin/web/lib/plt-poi-2024.1-SNAPSHOT.jar b/Bin/web/lib/plt-poi-2024.1-SNAPSHOT.jar
new file mode 100644
index 0000000..da1064e
--- /dev/null
+++ b/Bin/web/lib/plt-poi-2024.1-SNAPSHOT.jar
Binary files differ
diff --git a/Bin/web/lib/plt-slice-1.0.RELEASE.jar b/Bin/web/lib/plt-slice-1.0.RELEASE.jar
index e0d1317..b6c28d5 100644
--- a/Bin/web/lib/plt-slice-1.0.RELEASE.jar
+++ b/Bin/web/lib/plt-slice-1.0.RELEASE.jar
Binary files differ
diff --git a/Bin/web/lib/plt-starter-2024.1-SNAPSHOT.jar b/Bin/web/lib/plt-starter-2024.1-SNAPSHOT.jar
new file mode 100644
index 0000000..db3724d
--- /dev/null
+++ b/Bin/web/lib/plt-starter-2024.1-SNAPSHOT.jar
Binary files differ
diff --git a/Bin/web/lib/plt-web-base-2024.1-SNAPSHOT.jar b/Bin/web/lib/plt-web-base-2024.1-SNAPSHOT.jar
new file mode 100644
index 0000000..10018f5
--- /dev/null
+++ b/Bin/web/lib/plt-web-base-2024.1-SNAPSHOT.jar
Binary files differ
diff --git a/Bin/web/lib/poi-scratchpad-3.9.jar b/Bin/web/lib/poi-scratchpad-3.9.jar
new file mode 100644
index 0000000..1520855
--- /dev/null
+++ b/Bin/web/lib/poi-scratchpad-3.9.jar
Binary files differ
diff --git a/Bin/web/lib/protege35-1.0.jar b/Bin/web/lib/protege35-1.0.jar
new file mode 100644
index 0000000..8e99a2e
--- /dev/null
+++ b/Bin/web/lib/protege35-1.0.jar
Binary files differ
diff --git a/Bin/web/lib/skinlf-6.7.jar b/Bin/web/lib/skinlf-6.7.jar
new file mode 100644
index 0000000..9bdb00f
--- /dev/null
+++ b/Bin/web/lib/skinlf-6.7.jar
Binary files differ
diff --git a/Bin/web/lib/spring-boot-configuration-processor-2.1.3.RELEASE.jar b/Bin/web/lib/spring-boot-configuration-processor-2.1.3.RELEASE.jar
new file mode 100644
index 0000000..2f63fdf
--- /dev/null
+++ b/Bin/web/lib/spring-boot-configuration-processor-2.1.3.RELEASE.jar
Binary files differ
diff --git a/Bin/web/lib/spring-boot-starter-test-2.1.3.RELEASE.jar b/Bin/web/lib/spring-boot-starter-test-2.1.3.RELEASE.jar
new file mode 100644
index 0000000..7df4790
--- /dev/null
+++ b/Bin/web/lib/spring-boot-starter-test-2.1.3.RELEASE.jar
Binary files differ
diff --git a/Bin/web/lib/spring-boot-test-2.1.3.RELEASE.jar b/Bin/web/lib/spring-boot-test-2.1.3.RELEASE.jar
new file mode 100644
index 0000000..253c3f1
--- /dev/null
+++ b/Bin/web/lib/spring-boot-test-2.1.3.RELEASE.jar
Binary files differ
diff --git a/Bin/web/lib/spring-boot-test-autoconfigure-2.1.3.RELEASE.jar b/Bin/web/lib/spring-boot-test-autoconfigure-2.1.3.RELEASE.jar
new file mode 100644
index 0000000..98622ad
--- /dev/null
+++ b/Bin/web/lib/spring-boot-test-autoconfigure-2.1.3.RELEASE.jar
Binary files differ
diff --git a/Bin/web/lib/spring-test-5.1.5.RELEASE.jar b/Bin/web/lib/spring-test-5.1.5.RELEASE.jar
new file mode 100644
index 0000000..340a276
--- /dev/null
+++ b/Bin/web/lib/spring-test-5.1.5.RELEASE.jar
Binary files differ
diff --git a/Bin/web/lib/swing-worker-1.1.jar b/Bin/web/lib/swing-worker-1.1.jar
new file mode 100644
index 0000000..3935611
--- /dev/null
+++ b/Bin/web/lib/swing-worker-1.1.jar
Binary files differ
diff --git a/Bin/web/lib/swingx-1.6.1.jar b/Bin/web/lib/swingx-1.6.1.jar
new file mode 100644
index 0000000..b0bcc87
--- /dev/null
+++ b/Bin/web/lib/swingx-1.6.1.jar
Binary files differ
diff --git a/Bin/web/lib/swixml-2.0.jar b/Bin/web/lib/swixml-2.0.jar
new file mode 100644
index 0000000..2f0fa2b
--- /dev/null
+++ b/Bin/web/lib/swixml-2.0.jar
Binary files differ
diff --git a/Bin/web/lib/transmittable-thread-local-2.12.6.jar b/Bin/web/lib/transmittable-thread-local-2.12.6.jar
new file mode 100644
index 0000000..bc6ca55
--- /dev/null
+++ b/Bin/web/lib/transmittable-thread-local-2.12.6.jar
Binary files differ
diff --git a/Bin/web/lib/uitheme-1.3.1.jar b/Bin/web/lib/uitheme-1.3.1.jar
new file mode 100644
index 0000000..caacb71
--- /dev/null
+++ b/Bin/web/lib/uitheme-1.3.1.jar
Binary files differ
diff --git a/Bin/web/lib/xmlunit-core-2.6.2.jar b/Bin/web/lib/xmlunit-core-2.6.2.jar
new file mode 100644
index 0000000..dec8eb5
--- /dev/null
+++ b/Bin/web/lib/xmlunit-core-2.6.2.jar
Binary files differ
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionClsDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionClsDTO.java
new file mode 100644
index 0000000..529491a
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionClsDTO.java
@@ -0,0 +1,57 @@
+package com.vci.dto;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Action鍒嗙被浼犺緭瀵硅薄
+ * @author yuxc
+ * @date 2024/8/16 15:50
+ */
+@Data
+public class PLActionClsDTO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 2009350578651813260L;
+    /**
+     *涓婚敭
+     */
+    public String id;
+    /**
+     *鍒嗙被鍚嶇О
+     */
+    public String name;
+    /**
+     *鐖朵富閿�
+     */
+    public String pid;
+    /**
+     *澶囨敞
+     */
+    public String description;
+    /**
+     *鍒涘缓浜�
+     */
+    public String creator;
+    /**
+     *鍒涘缓鏃堕棿
+     */
+    public long createTime;
+    /**
+     *鍒嗙被搴忓彿
+     */
+    public short serialno;
+    /**
+     * 瀛愯妭鐐�
+     */
+    public List<PLActionClsDTO> childs = new ArrayList<>();
+
+    /**
+     * 褰撳墠鍒嗙被涓嬬殑鎵�鏈塧ction
+     */
+    public List<PLActionDTO> actionChilds = new ArrayList<>();
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionDTO.java
new file mode 100644
index 0000000..a631dd8
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionDTO.java
@@ -0,0 +1,70 @@
+package com.vci.dto;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Action浼犺緭瀵硅薄
+ * @author yuxc
+ * @date 2024/8/20 16:47
+ */
+@Data
+public class PLActionDTO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 2009350578651813260L;
+    /**
+     * 涓婚敭
+     */
+    private String plOId;
+    /**
+     * 缂栧彿
+     */
+    private String plCode;
+    /**
+     * 鍚嶇О
+     */
+    private String plName;
+    /**
+     * B/S鍦板潃锛岀晫闈㈢被璺緞
+     */
+    private String plBSUrl;
+    /**
+     * c/s绫昏矾寰� 鐣岄潰閾炬帴鍦板潃
+     */
+    private String plCSClass;
+    /**
+     * 鎻忚堪
+     */
+    private String plDesc;
+    /**
+     * 绫诲瀷
+     */
+    private String plTypeType;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private long plCreateTime;
+    /**
+     * 鍒涘缓浜�
+     */
+    private String plCreateUser;
+    /**
+     * 淇敼鏃堕棿
+     */
+    private long plModifyTime;
+    /**
+     * 淇敼浜�
+     */
+    private String plModifyUser;
+
+    private String plLicensOrs;
+    /**
+     * 鐖惰妭鐐筰d
+     */
+    private String plActionCls;
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionQueryDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionQueryDTO.java
new file mode 100644
index 0000000..aa6032b
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLActionQueryDTO.java
@@ -0,0 +1,45 @@
+package com.vci.dto;
+
+import lombok.Data;
+/**
+ * Action鏌ヨ浼犺緭瀵硅薄
+ * @author yuxc
+ * @date 2024/8/20 14:45
+ */
+@Data
+public class PLActionQueryDTO implements java.io.Serializable{
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 2009350578651813260L;
+    /**
+     *缂栧彿
+     */
+    private String plcode;
+    /**
+     *鍚嶇О
+     */
+    private String plname;
+    /**
+     *B/S绫昏矾寰�
+     */
+    private String plbsurl;
+    /**
+     *C/S绫昏矾寰�
+     */
+    private String plcsclass;
+    /**
+     *涓氬姟绫诲瀷
+     */
+    private String pltypetype;
+    /**
+     *鎻忚堪
+     */
+    private String pldesc;
+    /**
+     *鍒嗙被ID
+     */
+    private String plactioncls;
+
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsActionController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsActionController.java
new file mode 100644
index 0000000..01b4da8
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsActionController.java
@@ -0,0 +1,160 @@
+package com.vci.web.controller;
+
+import com.vci.corba.common.PLException;
+import com.vci.dto.PLActionClsDTO;
+import com.vci.dto.PLActionDTO;
+import com.vci.dto.PLActionQueryDTO;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.web.service.OsActionServiceI;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Action绠$悊鐨勬帶鍒跺櫒
+ * @author yuxc
+ * @date 2024-8-16
+ */
+@RequestMapping("/actionController")
+@RestController
+public class OsActionController {
+
+    /**
+     * Action鏈嶅姟
+     */
+    @Autowired
+    private OsActionServiceI osActionServiceI;
+
+    /**
+     * 淇濆瓨Action鍒嗙被淇℃伅
+     * @param pLActionCls Action鍒嗙被淇℃伅
+     * @return 淇濆瓨缁撴灉
+     */
+    @PostMapping("/saveActionCls")
+    public BaseResult saveActionCls(@RequestBody PLActionClsDTO pLActionCls){
+        try {
+            return osActionServiceI.saveActionCls(pLActionCls);
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
+
+    /**
+     * 淇敼Action鍒嗙被淇℃伅
+     * @param pLActionCls Action鍒嗙被淇℃伅
+     * @return 淇敼缁撴灉
+     */
+    @PostMapping("/updateActionCls")
+    public BaseResult updateActionCls(@RequestBody PLActionClsDTO pLActionCls){
+        try {
+            return osActionServiceI.updateActionCls(pLActionCls);
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
+
+    /**
+     * 鑾峰彇Action鍒嗙被鏍�
+     * isExp 鏄惁鐢ㄦ埛瀵煎嚭 true鏄紝false鍚�
+     * @return 鏌ヨ缁撴灉
+     */
+    @GetMapping("/getActionTree")
+    public BaseResult getActionTree(boolean isExp){
+        try {
+            return osActionServiceI.getActionTree(isExp);
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
+
+    /**
+     * 鑾峰彇Action琛ㄦ牸鏁版嵁
+     * dto 鏌ヨ鏉′欢
+     * @return 鏌ヨ缁撴灉
+     */
+    @PostMapping("/getActionTableData")
+    public BaseResult getActionTableData(@RequestBody PLActionQueryDTO dto){
+        try {
+            return osActionServiceI.getActionTableData(dto);
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
+
+    /**
+     * 淇濆瓨Action鏁版嵁
+     * dto action浼犺緭瀵硅薄
+     * @return 淇濆瓨缁撴灉
+     */
+    @PostMapping("/saveAction")
+    public BaseResult saveAction(@RequestBody PLActionDTO dto){
+        try {
+            return osActionServiceI.saveAction(dto);
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
+
+    /**
+     * 淇敼Action鏁版嵁
+     * dto action浼犺緭瀵硅薄
+     * @return 淇敼缁撴灉
+     */
+    @PostMapping("/updateAction")
+    public BaseResult updateAction(@RequestBody PLActionDTO dto){
+        try {
+            return osActionServiceI.updateAction(dto);
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
+
+    /**
+     * 鍒犻櫎Action鏁版嵁
+     * dto action浼犺緭瀵硅薄
+     * @return 鍒犻櫎缁撴灉
+     */
+    @DeleteMapping("/deleteAction")
+    public BaseResult deleteAction(@RequestBody PLActionDTO dto){
+        try {
+            return osActionServiceI.deleteAction(dto);
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
+
+    /**
+     * 瀵煎嚭Action
+     * @return
+     */
+    @PostMapping("/exportBeans")
+    public void exportBeans(@RequestBody List<String> actionOid, HttpServletResponse response) throws PLException, IOException {
+        osActionServiceI.exportBeans(actionOid, response);
+    }
+
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/ExportActionLogBean.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/ExportActionLogBean.java
new file mode 100644
index 0000000..231908c
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/ExportActionLogBean.java
@@ -0,0 +1,156 @@
+package com.vci.web.other;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+public class ExportActionLogBean implements IExportLogBean {
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = 10086L;
+	private String no = "1";
+    private static int index = 1;
+    private String exportState = "姝e父";
+    private String coding = "";
+    private String name ="";
+    private String CSRegister = "";
+    private String BSRegister = "";
+    private String type = "";
+    private String description = "";
+    private String category = "";
+    private Date date = null;
+    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ");
+    
+    public ExportActionLogBean() {
+    
+    	   this( "-1", "ExportActionLogBean 瀵硅薄鏋勫缓 浣嗘湭璁剧疆鍊�", "null",
+    				 "null", "null",  "null",  "null",
+    				 "null",  "null" );
+    	   index = 1;
+    
+    }
+    public ExportActionLogBean(String exportState, String coding,
+    		String name, String cSRegister, String bSRegister, String type,
+    		String description, String category) {
+    	  this( ""+index++, exportState, coding,
+    			  name, cSRegister, bSRegister,type,
+    			  description,category);
+    }
+	public ExportActionLogBean(String no, String exportState, String coding,
+			String name, String cSRegister, String bSRegister, String type,
+			String description, String category) {
+		super();
+		this.no = no;
+		if( exportState!=null || !no.equals("-1")){//榛樿鐘舵�佷负姝e父
+			this.exportState = exportState;
+		}
+		
+		this.coding = coding;
+		this.name = name;
+		CSRegister = cSRegister;
+		BSRegister = bSRegister;
+		this.type = type;
+		this.description = description;
+		this.category = category;
+	}
+
+	@Override
+	public Object[] getLogRowObjcets() {
+		Object obj []=  {no,exportState,coding,name,CSRegister,BSRegister,type,description,category};
+		return obj;
+	}
+
+	public Object[] getInportLogRowObjcets() {
+		Object obj []=  {no,exportState,coding,name,CSRegister,BSRegister,type,description};
+		return obj;
+	}
+
+	public String getNo() {
+		return no;
+	}
+
+	public String getExportState() {
+		return exportState;
+	}
+
+
+
+	public String getName() {
+		return name;
+	}
+
+	public String getCSRegister() {
+		return CSRegister;
+	}
+
+	public String getBSRegister() {
+		return BSRegister;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public String getCategory() {
+		return category;
+	}
+
+	public void setNo(String no) {
+		this.no = no;
+	}
+
+	public void setExportState(String exportState) {
+		this.exportState = exportState;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setCSRegister(String cSRegister) {
+		CSRegister = cSRegister;
+	}
+
+	public void setBSRegister(String bSRegister) {
+		BSRegister = bSRegister;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public void setCategory(String category) {
+		this.category = category;
+	}
+
+	@Override
+	public String getLogRowContent() {
+		date = new Date();
+		String info =format.format(date)+"---------";
+		return info+" [搴忓彿=" + no + ", 瀵煎嚭鐘舵��=" + exportState
+				+ ", 缂栧彿=" + coding + ", 鍚嶇О=" + name + ", CS娉ㄥ唽="
+				+ CSRegister + ", BS娉ㄥ唽=" + BSRegister + ", 绫诲瀷=" + type
+				+ ", 鎻忚堪=" + description + ", 鎵�灞炲垎绫�=" + category
+				+ "]";
+	
+	}
+
+	public String getCoding() {
+		return coding;
+	}
+
+	public void setCoding(String coding) {
+		this.coding = coding;
+	}
+
+
+
+ 
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/ExportBeans.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/ExportBeans.java
new file mode 100644
index 0000000..109e2cc
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/ExportBeans.java
@@ -0,0 +1,153 @@
+package com.vci.web.other;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map.Entry;
+import com.vci.corba.portal.data.PLAction;
+import com.vci.corba.portal.data.PLActionCls;
+import com.vci.corba.portal.data.PLActionParam;
+
+
+public class ExportBeans implements Serializable{
+	private static final long serialVersionUID = 10086L;
+	private HashMap<String/*ActionId*/,PLAction>   PLActionBeans = new  HashMap<String,PLAction>();
+	private HashMap<String/*鍒嗙被鍚嶇О*/,String/*id*/> PLActionClsExt = new  HashMap<String,String>();
+	private HashMap<String/*id*/,PLActionCls>   PLActionClsBeans = new  HashMap<String,PLActionCls>();
+	private HashMap<String/*Action缂栫爜*/, ArrayList<PLActionParam> >   PLActionParamBeans = new  HashMap<String, ArrayList<PLActionParam> >();
+	private HashMap<String/*ActionCls缂栫爜*/, ArrayList<PLAction> >   PLActionListsMap = null;
+    private ExportActionLogBean logBean = null;//鏃ュ織鏂囦欢
+     
+	public ExportBeans() { 
+		
+		logBean = new ExportActionLogBean();
+	}
+	public HashMap<String, PLActionCls> getPLActionClsBeans() {
+		return PLActionClsBeans;
+	}
+	public HashMap<String, PLAction> getPLActions() {
+		return PLActionBeans;
+	}
+	
+	public void addPLActionClsBean(PLActionCls pLActionCls){
+		PLActionClsBeans.put(pLActionCls.id, pLActionCls);
+		PLActionClsExt.put(pLActionCls.name,pLActionCls.id);
+		
+	}
+	public PLActionCls getPLActionClsBeanById(String  id){
+		return PLActionClsBeans.get(id);
+	}
+	public PLActionCls getPLActionClsBeanByName(String  name){
+		if(PLActionClsExt.get(name) == null){
+			return null;
+		}
+		return PLActionClsBeans.get(PLActionClsExt.get(name));
+	}
+	/**
+	 * 娣诲姞PLActionBean骞跺悓鏃舵坊鍔燩LActionBean瀵瑰簲鍙傛暟杩涜璁板綍
+	 * @param pLAction
+	 */
+//	public void addPLActionBean(PLAction pLAction){
+//		this.addPLActionBean(pLAction,null);
+//	}
+	/**
+	 * 娣诲姞PLActionBean鍚� logBean瀛樺叆鍊�
+	 * 
+	 */
+	public void setLogBean(ExportActionLogBean logBean) {
+		this.logBean =  logBean;
+	}
+	/**
+	 * 娣诲姞PLActionBean鍚� logBean瀛樺叆鍊�
+	 *
+	 */
+	public ExportActionLogBean getLogBean() {
+		return logBean;
+	}
+
+	public PLAction getPLActionById(String pLActionId){
+		return PLActionBeans.get(pLActionId);
+	}
+	public ArrayList<PLAction> getPLActionByPlActionClsId(String plActionClsId){
+		if( PLActionListsMap == null){
+			PLActionListsMap = new HashMap<String/*ActionCls缂栫爜*/,ArrayList<PLAction>>(); 
+			for (Entry<String, PLAction> PLActionEntry : PLActionBeans.entrySet()) {
+				String PLActionListsMapKey = PLActionEntry.getValue().plActionCls ;
+				if(PLActionListsMapKey.equals("")){
+					PLActionListsMapKey = "when key is null ,change the key to this";
+				}
+				ArrayList<PLAction> actionList = PLActionListsMap.get(PLActionListsMapKey);
+				if( actionList == null){
+					 actionList = 	new ArrayList<PLAction>();
+					actionList.add(PLActionEntry.getValue());
+					PLActionListsMap.put(PLActionListsMapKey,actionList);
+				}else{
+					actionList.add(PLActionEntry.getValue());
+				}
+			
+			}
+		};
+		
+		if(plActionClsId.equals("")){
+			plActionClsId = "when key is null ,change the key to this";
+		}
+		return 	PLActionListsMap.get(plActionClsId);
+	}
+	public void addPLActionParamBean(PLActionParam pLActionParam){
+		if(pLActionParam.action!=null && pLActionParam.action!=""){
+			if(PLActionParamBeans.get(pLActionParam.action) == null){
+				ArrayList<PLActionParam> arraylist = new ArrayList<PLActionParam>();
+				PLActionParamBeans.put(pLActionParam.action, arraylist);
+			}
+			PLActionParamBeans.get(pLActionParam.action).add(pLActionParam);
+		}
+		
+	}
+	 public  PLActionParam[] getPLActionParamArrayByActionId(String paramString){
+		 ArrayList<PLActionParam> pLActionParams = PLActionParamBeans.get(paramString);
+		
+		 if(pLActionParams != null && pLActionParams.size() > 0 ){
+		    PLActionParam[] actionParams = new PLActionParam[pLActionParams.size()];
+			for (int i = 0; i < pLActionParams.size(); i++) {
+				actionParams[i] = pLActionParams.get(i);				
+			}
+			 return  actionParams;
+		 }
+		return null;
+	 }
+//		/**
+//		 * 娣诲姞PLActionBean骞跺悓鏃舵坊鍔燩LActionBean瀵瑰簲鍙傛暟杩涜璁板綍
+//		 * 鑳借繃鏂逛究鑾峰緱category鏃剁敤姝ゆ柟娉�. 鍙互闄嶄綆绯荤粺娑堣��
+//		 * @param pLAction
+//		 */
+//	public void addPLActionBean(PLAction plAction, String category) {
+//		PLActionBeans.put(plAction.plOId, plAction);
+//		PLActionCls[] plActionCls = null;
+//
+//		try {
+//			  if(category == null ){
+//				  plActionCls = UITools.getService().getPLActionClsArray();
+//					for (PLActionCls plActionCls2 : plActionCls) {//鑾峰緱鍒嗙被鍚嶇О
+//						if(plActionCls2.id.equals(plAction.plActionCls)){
+//							category = plActionCls2.name ;
+//						}
+//					}
+//		        }
+//			PLActionParam[] params = UITools.getService().getPLActionParamArrayByActionId(plAction.plOId);
+//			if(params != null && params.length > 0){//濡傛灉鍙傛暟瀛樺湪
+//				for (PLActionParam plActionParam : params) {//娣诲姞action鍙傛暟
+//					this.addPLActionParamBean(plActionParam);
+//				}
+//			}
+//			 logBean = new ExportActionLogBean(ExportActionLogBean.RIGHT_STATE,
+//						plAction.plCode,plAction.plName,plAction.plCSClass,plAction.plBSUrl,
+//						plAction.plTypeType,plAction.plDesc,category);
+//
+//		} catch (PLException e) {
+//			 logBean = new ExportActionLogBean(e.getMessage(),
+//						plAction.plCode,plAction.plName,plAction.plCSClass,plAction.plBSUrl,
+//						plAction.plTypeType,plAction.plDesc,category);			e.printStackTrace();
+//		}
+//	}
+
+}
\ No newline at end of file
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/IExportLogBean.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/IExportLogBean.java
new file mode 100644
index 0000000..d35d27a
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/IExportLogBean.java
@@ -0,0 +1,19 @@
+package com.vci.web.other;
+
+import java.io.Serializable;
+
+public interface IExportLogBean extends Serializable{
+	static final long serialVersionUID = 1L;
+	 static String RIGHT_STATE = "姝e父";
+	/**
+	 * 杩斿洖瀛楃涓叉暟缁勫皢鍐呭鍐欏叆鍒癑Table鏂囦欢涓�
+	 * @return
+	 */
+	public abstract Object[] getLogRowObjcets();
+	/**
+	 * 杩斿洖瀛楃涓插皢鍐呭鍐欏叆鍒發og鏂囦欢涓�
+	 * @return
+	 */
+	public abstract String getLogRowContent();
+
+}
\ No newline at end of file
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsActionServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsActionServiceI.java
new file mode 100644
index 0000000..26e0397
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsActionServiceI.java
@@ -0,0 +1,68 @@
+package com.vci.web.service;
+
+import com.vci.corba.common.PLException;
+import com.vci.dto.PLActionClsDTO;
+import com.vci.dto.PLActionDTO;
+import com.vci.dto.PLActionQueryDTO;
+import com.vci.starter.web.pagemodel.BaseResult;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * Action绠$悊鐨勬湇鍔�
+ * @author yuxc
+ * @date 2024-8-16
+ */
+public interface OsActionServiceI {
+    /**
+     * 淇濆瓨Action鍒嗙被淇℃伅
+     * @param pLActionCls Action鍒嗙被淇℃伅
+     * @return 淇濆瓨缁撴灉
+     */
+    BaseResult saveActionCls(PLActionClsDTO pLActionCls) throws PLException;
+    /**
+     * 淇敼Action鍒嗙被淇℃伅
+     * @param pLActionCls Action鍒嗙被淇℃伅
+     * @return 淇敼缁撴灉
+     */
+    BaseResult updateActionCls(PLActionClsDTO pLActionCls) throws PLException;
+    /**
+     * 鑾峰彇Action鍒嗙被鏍�
+     * isExp 鏄惁鐢ㄦ埛瀵煎嚭 true鏄紝false鍚�
+     * @return 鏌ヨ缁撴灉
+     */
+    BaseResult getActionTree(boolean isExp) throws PLException;
+    /**
+     * 鑾峰彇Action琛ㄦ牸鏁版嵁
+     * dto 鏌ヨ鏉′欢
+     * @return 鏌ヨ缁撴灉
+     */
+    BaseResult getActionTableData(PLActionQueryDTO dto) throws PLException;
+    /**
+     * 淇濆瓨Action鏁版嵁
+     * dto action浼犺緭瀵硅薄
+     * @return 淇濆瓨缁撴灉
+     */
+    BaseResult saveAction(PLActionDTO dto) throws PLException;
+    /**
+     * 淇敼Action鏁版嵁
+     * dto action浼犺緭瀵硅薄
+     * @return 淇敼缁撴灉
+     */
+    BaseResult updateAction(PLActionDTO dto) throws PLException;
+    /**
+     * 鍒犻櫎Action鏁版嵁
+     * dto action浼犺緭瀵硅薄
+     * @return 鍒犻櫎缁撴灉
+     */
+    BaseResult deleteAction(PLActionDTO dto) throws PLException;
+    /**
+     * 瀵煎嚭Action
+     * @return
+     */
+    void exportBeans(List<String> actionOid, HttpServletResponse response) throws PLException, IOException;
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsActionServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsActionServiceImpl.java
new file mode 100644
index 0000000..0ce7bef
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsActionServiceImpl.java
@@ -0,0 +1,405 @@
+package com.vci.web.service.impl;
+import cn.hutool.core.io.FileUtil;
+import com.vci.corba.common.PLException;
+import com.vci.corba.omd.ltm.LinkType;
+import com.vci.corba.omd.qtm.QTInfo;
+import com.vci.corba.portal.data.Constraint;
+import com.vci.corba.portal.data.PLAction;
+import com.vci.corba.portal.data.PLActionCls;
+import com.vci.corba.portal.data.PLActionParam;
+import com.vci.dto.PLActionClsDTO;
+import com.vci.dto.PLActionDTO;
+import com.vci.dto.PLActionQueryDTO;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.util.ControllerUtil;
+import com.vci.starter.web.util.LocalFileUtil;
+import com.vci.web.other.ExportActionLogBean;
+import com.vci.web.other.ExportBeans;
+import com.vci.web.other.LinkQTExportData;
+import com.vci.web.service.*;
+import com.vci.web.util.*;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Action绠$悊鐨勬湇鍔″疄鐜扮被
+ * @author yuxc
+ * @date 2024-8-16
+ */
+@Service
+public class OsActionServiceImpl implements OsActionServiceI {
+
+    @Autowired
+    private PlatformClientUtil platformClientUtil;
+    /**
+     * 淇濆瓨Action鍒嗙被淇℃伅
+     * @param pLActionCls Action鍒嗙被淇℃伅
+     * @return 淇濆瓨缁撴灉
+     */
+    @Override
+    public BaseResult saveActionCls(PLActionClsDTO pLActionCls) throws PLException {
+
+        if (pLActionCls.getName() == null || pLActionCls.getName().trim().equals("")) {
+            throw new PLException("500", new String[]{"鍒嗙被鍚嶇О涓嶈兘涓虹┖!"});
+        }
+        if (pLActionCls.getName().equals("鏈垎绫�")) {
+            throw new PLException("500", new String[]{"鏈垎绫昏妭鐐瑰凡缁忓瓨鍦�!"});
+        }
+        PLActionCls pac = new PLActionCls();
+        pac.id = WebUtil.getSnowflakePk();
+        pac.name = pLActionCls.getName();
+        pac.pid = pLActionCls.getPid();
+        pac.description = pLActionCls.getDescription() == null ? "" : pLActionCls.getDescription();
+        pac.creator = WebUtil.getCurrentUserId();
+        pac.createTime = System.currentTimeMillis();
+        pac.serialno = pLActionCls.getSerialno();
+        // 淇濆瓨鍒嗙被淇℃伅
+        String message = platformClientUtil.getUIService().creaetePLActionCls(pac);
+        if (message.startsWith("0")) {
+            if (message.equals("01")) {
+                message = "鍒嗙被" + pac.name + "宸茬粡瀛樺湪锛�";
+            } else if (message.equals("02")) {
+                message = "鍚屼竴鍒嗙被涓嬪簭鍙蜂笉鑳介噸澶嶏紒";
+            } else {
+                message = "淇濆瓨鍒嗙被鏃跺彂鐢熷紓甯革紒" + message.substring(1);
+            }
+            throw new PLException("500", new String[]{message});
+        }
+        return BaseResult.success("鍒嗙被鍒涘缓鎴愬姛锛�");
+    }
+
+    /**
+     * 淇敼Action鍒嗙被淇℃伅
+     * @param pLActionCls Action鍒嗙被淇℃伅
+     * @return 淇濆瓨缁撴灉
+     */
+    @Override
+    public BaseResult updateActionCls(PLActionClsDTO pLActionCls) throws PLException {
+
+        if (pLActionCls.getName() == null || pLActionCls.getName().trim().equals("")) {
+            throw new PLException("500", new String[]{"鍒嗙被鍚嶇О涓嶈兘涓虹┖!"});
+        }
+        if (pLActionCls.getName().equals("鏈垎绫�")) {
+            throw new PLException("500", new String[]{"鏈垎绫昏妭鐐瑰凡缁忓瓨鍦�!"});
+        }
+        if (pLActionCls.getId() == null || pLActionCls.getId().trim().equals("")) {
+            throw new PLException("500", new String[]{"涓婚敭涓嶈兘涓虹┖!"});
+        }
+        PLActionCls pac = new PLActionCls();
+        pac.name = pLActionCls.getName();
+        pac.pid = pLActionCls.getPid();
+        pac.description = pLActionCls.getDescription() == null ? "" : pLActionCls.getDescription();
+        pac.creator = WebUtil.getCurrentUserId();
+        pac.createTime = System.currentTimeMillis();
+        pac.serialno = pLActionCls.getSerialno();
+        // 淇敼鍒嗙被淇℃伅
+        String message = platformClientUtil.getUIService().editPLActionCls(pac);
+        if (message.startsWith("0")) {
+            if (message.equals("01")) {
+                message = "鍒嗙被" + pac.name + "宸茬粡瀛樺湪锛�";
+            } else if (message.equals("02")) {
+                message = "鍚屼竴鍒嗙被涓嬪簭鍙蜂笉鑳介噸澶嶏紒";
+            } else {
+                message = "淇敼鍒嗙被鏃跺彂鐢熷紓甯革紒" + message.substring(1);
+            }
+            throw new PLException("500", new String[]{message});
+        }
+        return BaseResult.success("鍒嗙被淇敼鎴愬姛锛�");
+    }
+
+    /**
+     * 鑾峰彇Action鍒嗙被鏍�
+     * isExp 鏄惁鐢ㄦ埛瀵煎嚭 true鏄紝false鍚�
+     * @return 鏌ヨ缁撴灉
+     */
+    @Override
+    public BaseResult getActionTree(boolean isExp) throws PLException {
+        PLActionCls[] clses = platformClientUtil.getUIService().getPLActionClsArray();
+        PLActionClsDTO treDto = new PLActionClsDTO();
+        treDto.setName("Action鍒嗙被");
+        Map<String, List<PLActionCls>> allDataMap = Arrays.stream(clses).collect(Collectors.groupingBy(pl -> pl.pid));
+
+        for (PLActionCls cls : clses) {
+            if (StringUtils.isBlank(cls.pid)) {
+                PLActionClsDTO parentDto = new PLActionClsDTO();
+                parentDto.setId(cls.id);
+                parentDto.setName(cls.name);
+                parentDto.setPid(cls.pid);
+                parentDto.setDescription(cls.description);
+                parentDto.setCreator(cls.creator);
+                parentDto.setCreateTime(cls.createTime);
+                parentDto.setSerialno(cls.serialno);
+                //杩欓噷澶勭悊瀵煎嚭鏍戠殑閫昏緫
+                if(isExp){
+                    Constraint[] consArray = new Constraint[1];
+                    consArray[0] =  new Constraint("plactioncls", cls.id);
+                    PLAction[] plActionsByConsArray = platformClientUtil.getUIService().getPLActionsByConsArray(consArray);
+                    if(parentDto.getChilds().isEmpty() && plActionsByConsArray.length == 0){
+                        continue;
+                    }
+                    for (PLAction plAction : plActionsByConsArray) {
+                        PLActionDTO plActionDTO = new PLActionDTO();
+                        plActionDTO.setPlName(plAction.plCode + "/" + plAction.plName);
+                        plActionDTO.setPlCode(plAction.plCode);
+                        plActionDTO.setPlOId(plAction.plOId);
+                        parentDto.getActionChilds().add(plActionDTO);
+                    }
+                }
+                addClsTreeNode(parentDto, allDataMap, isExp);
+                treDto.getChilds().add(parentDto);
+            }
+        }
+        PLActionClsDTO plac = new PLActionClsDTO();
+        plac.setName("鏈垎绫�");
+        if(isExp){
+            Constraint[] consArray = new Constraint[1];
+            consArray[0] =  new Constraint("plactioncls", "");
+            PLAction[] plActionsByConsArray = platformClientUtil.getUIService().getPLActionsByConsArray(consArray);
+            for (PLAction plAction : plActionsByConsArray) {
+                PLActionDTO plActionDTO = new PLActionDTO();
+                plActionDTO.setPlName(plAction.plCode + "/" + plAction.plName);
+                plActionDTO.setPlCode(plAction.plCode);
+                plActionDTO.setPlOId(plAction.plOId);
+                plac.getActionChilds().add(plActionDTO);
+            }
+        }
+        treDto.getChilds().add(plac);
+        return BaseResult.success(treDto);
+    }
+    /**
+     * 鑾峰彇Action琛ㄦ牸鏁版嵁
+     * dto 鏌ヨ鏉′欢
+     * @return 鏌ヨ缁撴灉
+     */
+    @Override
+    public BaseResult getActionTableData(PLActionQueryDTO dto) throws PLException {
+        Constraint[] consArray ;
+        if(StringUtils.isNotBlank(dto.getPlactioncls())){
+            consArray = new Constraint[7];
+            consArray[6] = new Constraint("plactioncls", dto.getPlactioncls());
+        }else {
+            consArray = new Constraint[6];
+        }
+        consArray[0] = new Constraint("plcode", dto.getPlcode());
+        consArray[1] = new Constraint("plname", dto.getPlname());
+        consArray[2] = new Constraint("plbsurl", dto.getPlbsurl());
+        consArray[3] = new Constraint("plcsclass", dto.getPlcsclass());
+        consArray[4] = new Constraint("pltypetype", dto.getPltypetype());
+        consArray[5] = new Constraint("pldesc", dto.getPldesc());
+        PLAction[] plActionsByConsArray = platformClientUtil.getUIService().getPLActionsByConsArray(consArray);
+        Arrays.sort(plActionsByConsArray, new Comparator<PLAction>() {
+            @Override
+            public int compare(PLAction o1, PLAction o2) {
+                String py1 = PinyinCommon.getPingYin(o1.plCode);
+                String py2 = PinyinCommon.getPingYin(o2.plCode);
+                return py1.compareTo(py2);
+            }
+        });
+        return BaseResult.dataList(Arrays.asList(plActionsByConsArray));
+    }
+    /**
+     * 淇濆瓨Action鏁版嵁
+     * dto action浼犺緭瀵硅薄
+     * @return 淇濆瓨缁撴灉
+     */
+    @Override
+    public BaseResult saveAction(PLActionDTO dto) throws PLException {
+        if(StringUtils.isBlank(dto.getPlCode())){
+            throw new PLException("500", new String[]{"璇疯緭鍏ョ紪鍙�"});
+        }
+        PLAction[] actionsInDB= platformClientUtil.getUIService().getAllPLAction();
+        for(int i =0;i<actionsInDB.length;i++){
+            if (dto.getPlCode().equals(actionsInDB[i].plCode)) {
+                throw new PLException("500", new String[]{"鏂板缓Action缂栧彿閲嶅锛岃閲嶆柊杈撳叆缂栧彿"});
+            }
+        }
+        PLAction plAction = new PLAction();
+        plAction.plOId = WebUtil.getSnowflakePk();
+        plAction.plCode = StringUtils.defaultString(dto.getPlCode());
+        plAction.plName = StringUtils.defaultString(dto.getPlName());
+        plAction.plCSClass = StringUtils.defaultString(dto.getPlCSClass());
+        plAction.plBSUrl = StringUtils.defaultString(dto.getPlBSUrl());
+        plAction.plDesc = StringUtils.defaultString(dto.getPlDesc());
+        plAction.plCreateUser = WebUtil.getCurrentUserId();
+        plAction.plModifyUser = WebUtil.getCurrentUserId();
+        plAction.plActionCls = StringUtils.defaultString(dto.getPlActionCls());
+        plAction.plTypeType = StringUtils.defaultString(dto.getPlTypeType());
+        boolean b = platformClientUtil.getUIService().savePLAction(plAction);
+        if(!b){
+            throw new PLException("500", new String[]{"淇濆瓨澶辫触锛侊紒"});
+        }
+        return BaseResult.success("鎿嶄綔鎴愬姛锛�");
+    }
+    /**
+     * 淇敼Action鏁版嵁
+     * dto action浼犺緭瀵硅薄
+     * @return 淇敼缁撴灉
+     */
+    @Override
+    public BaseResult updateAction(PLActionDTO dto) throws PLException {
+        if(StringUtils.isBlank(dto.getPlCode())){
+            throw new PLException("500", new String[]{"缂栧彿涓嶈兘涓虹┖"});
+        }
+        PLAction[] actionsInDB= platformClientUtil.getUIService().getAllPLAction();
+        for(int i =0;i<actionsInDB.length;i++){
+            if (dto.getPlCode().equals(actionsInDB[i].plCode) && !dto.getPlOId().equals(actionsInDB[i].plOId)) {
+                throw new PLException("500", new String[]{"淇敼Action缂栧彿閲嶅锛岃纭缂栧彿"});
+            }
+        }
+        PLAction plAction = new PLAction();
+        plAction.plOId = StringUtils.defaultString(dto.getPlOId());
+        plAction.plCode = StringUtils.defaultString(dto.getPlCode());
+        plAction.plName = StringUtils.defaultString(dto.getPlName());
+        plAction.plCSClass = StringUtils.defaultString(dto.getPlCSClass());
+        plAction.plBSUrl = StringUtils.defaultString(dto.getPlBSUrl());
+        plAction.plDesc = StringUtils.defaultString(dto.getPlDesc());
+        plAction.plCreateUser = dto.getPlCreateUser();
+        plAction.plModifyUser = WebUtil.getCurrentUserId();
+        plAction.plActionCls = StringUtils.defaultString(dto.getPlActionCls());
+        plAction.plTypeType = StringUtils.defaultString(dto.getPlTypeType());
+        boolean b = platformClientUtil.getUIService().updatePLAction(plAction);
+        if(!b){
+            throw new PLException("500", new String[]{"淇敼澶辫触锛侊紒"});
+        }
+        return BaseResult.success("淇敼鎴愬姛锛�");
+    }
+
+    /**
+     * 鍒犻櫎Action鏁版嵁
+     * dto action浼犺緭瀵硅薄
+     * @return 鍒犻櫎缁撴灉
+     */
+    @Override
+    public BaseResult deleteAction(PLActionDTO dto) throws PLException {
+        PLAction plAction = new PLAction();
+        plAction.plOId = StringUtils.defaultString(dto.getPlOId());
+        plAction.plCode = StringUtils.defaultString(dto.getPlCode());
+        plAction.plName = StringUtils.defaultString(dto.getPlName());
+        plAction.plCSClass = StringUtils.defaultString(dto.getPlCSClass());
+        plAction.plBSUrl = StringUtils.defaultString(dto.getPlBSUrl());
+        plAction.plDesc = StringUtils.defaultString(dto.getPlDesc());
+        plAction.plCreateUser = dto.getPlCreateUser();
+        plAction.plModifyUser = WebUtil.getCurrentUserId();
+        plAction.plActionCls = StringUtils.defaultString(dto.getPlActionCls());
+        plAction.plTypeType = StringUtils.defaultString(dto.getPlTypeType());
+        boolean b = platformClientUtil.getUIService().deletePLAction(plAction);
+        if(!b){
+            throw new PLException("500", new String[]{"鍒犻櫎澶辫触锛侊紒"});
+        }
+        return BaseResult.success("鍒犻櫎鎴愬姛锛�");
+    }
+    /**
+     * 瀵煎嚭Action
+     * @return
+     */
+    @Override
+    public void exportBeans(List<String> actionOid, HttpServletResponse response) throws PLException, IOException {
+        String defaultTempFolder = LocalFileUtil.getDefaultTempFolder();
+        String vciqtmfFileName = defaultTempFolder + File.separator + "actionTemplateExp" + new Date().getTime() + ".vciamf";
+        HashMap exportBeans = new HashMap<String, Object>();
+        getExportBeans(actionOid, exportBeans);// 鑾峰緱瀵煎嚭Bean鍚屾椂锛岃褰昹og
+
+        ObjectOutputStream vciamfFileStream = null;
+        try {
+            File vciqtmfFile = new File(vciqtmfFileName);
+            vciamfFileStream = new ObjectOutputStream(new FileOutputStream(vciqtmfFile));
+            vciamfFileStream.writeObject(exportBeans);
+        }finally {
+            try {
+                if (vciamfFileStream != null) {
+                    vciamfFileStream.flush();
+                    vciamfFileStream.close();
+                }
+            } catch (Exception e) {
+                throw new PLException("500",new String[]{"瀵煎嚭娴佸叧闂紓甯革紒"});
+            }
+        }
+        ControllerUtil.writeFileToResponse(response,vciqtmfFileName);
+        FileUtil.del(defaultTempFolder + File.separator);
+    }
+
+    /**
+     * 澶勭悊瀵煎嚭鐨勫璞�
+     * @param actionOid 鐣岄潰閫夋嫨鐨刟ction鍒楄〃鏁版嵁
+     * @param exportBeansMap 瀵煎嚭瀵硅薄
+     * @return
+     * @throws PLException
+     */
+    private void getExportBeans(List<String> actionOid, HashMap exportBeansMap) throws PLException {
+        PLActionCls[] plActionClsArray = platformClientUtil.getUIService().getPLActionClsArray();
+        Map<String, PLActionCls> clsMap = Arrays.stream(plActionClsArray).collect(Collectors.toMap(e -> e.id, e -> e));
+        ExportBeans exportBeans = new ExportBeans();
+        for (String oid : actionOid) {
+            PLAction plAction = platformClientUtil.getUIService().getPLActionById(oid);
+            //鏈夌埗鑺傜偣鍒欒繘琛屽鐞�
+            if(StringUtils.isNotBlank(plAction.plActionCls)){
+                allPLActionClsParent(exportBeans, clsMap.get(plAction.plActionCls), clsMap);
+            }
+            exportBeans.getPLActions().put(plAction.plOId, plAction);
+            PLActionParam[] params = platformClientUtil.getUIService().getPLActionParamArrayByActionId(plAction.plOId);
+            if(params != null && params.length > 0){//濡傛灉鍙傛暟瀛樺湪
+                for (PLActionParam plActionParam : params) {//娣诲姞action鍙傛暟
+                    exportBeans.addPLActionParamBean(plActionParam);
+                }
+            }
+            String category = clsMap.containsKey(plAction.plActionCls) ? clsMap.get(plAction.plActionCls).name : "";
+            exportBeans.setLogBean(new ExportActionLogBean(ExportActionLogBean.RIGHT_STATE,
+                    plAction.plCode,plAction.plName,plAction.plCSClass,plAction.plBSUrl,
+                    plAction.plTypeType,plAction.plDesc,category));
+        }
+        exportBeansMap.put("exportBeans", exportBeans);
+    }
+    //澧炲姞鐖剁被鏁版嵁
+    private void allPLActionClsParent(ExportBeans exportBeans, PLActionCls cls, Map<String, PLActionCls> clsMap) {
+        if(cls.pid != ""){
+            allPLActionClsParent(exportBeans, clsMap.get(cls.pid), clsMap);
+        }
+        exportBeans.addPLActionClsBean(cls);
+    }
+
+    /**
+     * 娣诲姞瀛愯妭鐐�
+     * @param parentDto 鐖惰妭鐐瑰璞�
+     * @param allDataMap 鎵�鏈夊垎缁勫璞�
+     * @param isExp true涓哄鍑哄姛鑳界殑鏍戯紝false涓虹晫闈㈠垎绫绘爲
+     */
+    private void addClsTreeNode(PLActionClsDTO parentDto, Map<String, List<PLActionCls>> allDataMap, Boolean isExp) throws PLException {
+        if(allDataMap.containsKey(parentDto.id)){
+            for (PLActionCls cls : allDataMap.get(parentDto.id)) {
+                PLActionClsDTO childDto = new PLActionClsDTO();
+                childDto.setId(cls.id);
+                childDto.setName(cls.name);
+                childDto.setPid(cls.pid);
+                childDto.setDescription(cls.description);
+                childDto.setCreator(cls.creator);
+                childDto.setCreateTime(cls.createTime);
+                childDto.setSerialno(cls.serialno);
+                if(isExp){
+                    Constraint[] consArray = new Constraint[1];
+                    consArray[0] =  new Constraint("plactioncls", cls.id);
+                    PLAction[] plActionsByConsArray = platformClientUtil.getUIService().getPLActionsByConsArray(consArray);
+                    if(parentDto.getChilds().isEmpty() && plActionsByConsArray.length == 0){
+                        continue;
+                    }
+                    for (PLAction plAction : plActionsByConsArray) {
+                        PLActionDTO plActionDTO = new PLActionDTO();
+                        plActionDTO.setPlName(plAction.plCode + "/" + plAction.plName);
+                        plActionDTO.setPlCode(plAction.plCode);
+                        plActionDTO.setPlOId(plAction.plOId);
+                        parentDto.getActionChilds().add(plActionDTO);
+                    }
+                }
+                addClsTreeNode(childDto, allDataMap, isExp);
+                parentDto.getChilds().add(childDto);
+            }
+        }
+    }
+
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PinyinCommon.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PinyinCommon.java
new file mode 100644
index 0000000..12cefb5
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PinyinCommon.java
@@ -0,0 +1,89 @@
+package com.vci.web.util;
+
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
+import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
+  
+/**  
+ * 
+ 
+ * @author: ligang 
+   
+ * @createtime: 2012-12-26  
+ 
+ * @version:  
+   
+ */
+	public class PinyinCommon {
+	
+	/**
+	 * 寰楀埌 鍏ㄦ嫾
+	 * @param src
+	 * @return
+	 */
+	public static String getPingYin(String src){ 
+	    char[] t1 = null; 
+	    t1=src.toCharArray(); 
+	    String[] t2 = new String[t1.length]; 
+	    HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat(); 
+	    t3.setCaseType(HanyuPinyinCaseType.LOWERCASE); 
+	    t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 
+	    t3.setVCharType(HanyuPinyinVCharType.WITH_V); 
+	    String t4=""; 
+	    int t0=t1.length; 
+	    try { 
+	      for (int i=0;i<t0;i++) { 
+	      //鍒ゆ柇鏄惁涓烘眽瀛楀瓧绗� 
+	         if(Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
+	              t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3); 
+	              t4+=t2[0]; 
+	         } else {
+	        	  t4+= Character.toString(t1[i]);
+	         }
+	      } 
+	      return t4; 
+	    } 
+	    catch (BadHanyuPinyinOutputFormatCombination e1) { 
+	      e1.printStackTrace(); 
+	    } 
+	    return t4; 
+	} 
+
+	/**
+	 * 寰楀埌涓枃棣栧瓧姣�
+	 * @param str
+	 * @return
+	 */
+	public static String getPinYinHeadChar(String str) { 
+
+		String convert = ""; 
+		for (int j = 0; j < str.length(); j++) { 
+			char word = str.charAt(j); 
+			String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word); 
+			if (pinyinArray != null) { 
+				convert += pinyinArray[0].charAt(0); 
+			}else { 
+				convert += word; 
+			} 
+		} 
+		return convert; 
+	} 
+	/**
+	 * 灏嗗瓧绗︿覆杞Щ涓篈SCII鐮� 
+	 * @param cnStr
+	 * @return
+	 */
+	public static String getCnASCII(String cnStr) { 
+		StringBuffer   strBuf   =   new   StringBuffer(); 
+		byte[]   bGBK   =   cnStr.getBytes(); 
+		for(int   i=0;i <bGBK.length;i++){ 
+    		//System.out.println(Integer.toHexString(bGBK[i]&0xff)); 
+            strBuf.append(Integer.toHexString(bGBK[i]&0xff)); 
+        } 
+        return strBuf.toString(); 
+	} 
+
+} 
\ No newline at end of file

--
Gitblit v1.9.3