From c34375c1f233fbc4cf3e754d2c59e5abc65e87da Mon Sep 17 00:00:00 2001
From: dangsn <dangsn@vci-tech.com>
Date: 星期五, 20 十二月 2024 23:13:41 +0800
Subject: [PATCH] 图标服务功能,以及AES加密

---
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java             |    4 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java       |    8 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLIconGroupVO.java                   |   29 ++
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ClassUtilForVCI.java         |   20 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLIconDTO.java                             |   41 +++
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/annotation/VciLifeCycleTrans.java |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLifeCycleServiceI.java               |    4 
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/Lcm/Func.java                |   12 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebIconServiceImpl.java           |  267 ++++++++++++++++++++++
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/annotation/VciEnum.java           |    2 
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/Lcm/DigestUtil.java          |   32 ++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebIconserviceI.java                   |   66 +++++
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLIconVO.java                        |   46 +++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebIconController.java              |  184 +++++++++++++++
 14 files changed, 692 insertions(+), 25 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLIconDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLIconDTO.java
new file mode 100644
index 0000000..37fab25
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PLIconDTO.java
@@ -0,0 +1,41 @@
+package com.vci.dto;
+
+import lombok.Data;
+
+/**
+ * @Description 鍥炬爣浼犺緭瀵硅薄
+ * @Author dangsn
+ * @Date 2024/12/20 11:35
+ */
+@Data
+public class PLIconDTO implements java.io.Serializable{
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -8274239331362353099L;
+
+    /**
+     * 鍞竴鏍囪瘑
+     */
+    private String oid;
+
+    /**
+     * 鍥炬爣鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鍥炬爣鍐呭
+     */
+    private String content;
+
+    /**
+     * 鍥炬爣绫诲瀷
+     */
+    private String type;
+
+    /**
+     * 鍥炬爣鍒嗙粍
+     */
+    private String groups;
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLIconGroupVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLIconGroupVO.java
new file mode 100644
index 0000000..ea4c674
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLIconGroupVO.java
@@ -0,0 +1,29 @@
+package com.vci.pagemodel;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author dangsn
+ * @Date 2024/12/20 17:35
+ */
+@Data
+public class PLIconGroupVO implements Serializable {
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -2130637697533772413L;
+
+    /**
+     * 鍥炬爣鎵�灞炲簱
+     */
+    private String lable;
+
+    /**
+     * 鍥炬爣
+     */
+    private List<PLIconVO> list;
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLIconVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLIconVO.java
new file mode 100644
index 0000000..fb7352e
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PLIconVO.java
@@ -0,0 +1,46 @@
+package com.vci.pagemodel;
+
+import lombok.Data;
+
+/**
+ * @Description 鍥炬爣鏄剧ず瀵硅薄
+ * @Author dangsn
+ * @Date 2024/12/20 11:37
+ */
+@Data
+public class PLIconVO implements java.io.Serializable{
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = -8797180178702594251L;
+
+    /**
+     * 鍞竴鏍囪瘑
+     */
+    private String oid;
+
+    /**
+     * 鍥炬爣鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鍥炬爣鍐呭
+     */
+    private String content;
+
+    /**
+     * 鍥炬爣绫诲瀷
+     */
+    private String type;
+
+    /**
+     * 鍥炬爣鍒嗙粍
+     */
+    private String groups;
+
+    /**
+     * 鍥炬爣鎵�灞炲簱
+     */
+    private String lable;
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/annotation/VciEnum.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/annotation/VciEnum.java
index fbd0156..29bba35 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/annotation/VciEnum.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/annotation/VciEnum.java
@@ -22,7 +22,7 @@
      * 鍊肩被鍨嬶紝榛樿涓哄瓧绗︿覆
      * @return
      */
-    Class valueType() default java.lang.String.class;
+    Class valueType() default String.class;
 
     /**
      * 鏄剧ず鏂囨湰
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/annotation/VciLifeCycleTrans.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/annotation/VciLifeCycleTrans.java
index 61b4653..cd0ca30 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/annotation/VciLifeCycleTrans.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/annotation/VciLifeCycleTrans.java
@@ -9,7 +9,7 @@
  * 鐢熷懡鍛ㄦ湡鐘舵�佹祦鍚�
  * @author weidy
  */
-@Target({java.lang.annotation.ElementType.TYPE, ElementType.FIELD})
+@Target({ElementType.TYPE, ElementType.FIELD})
 @Retention(RetentionPolicy.RUNTIME)
 public @interface VciLifeCycleTrans {
 
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ClassUtilForVCI.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ClassUtilForVCI.java
index 645458e..384426f 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ClassUtilForVCI.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ClassUtilForVCI.java
@@ -35,16 +35,16 @@
 
     /**
      * 鍒ゆ柇鍩烘湰绫诲瀷
-     * @see     java.lang.String
-     * @see     java.lang.Boolean#TYPE
-     * @see     java.lang.Character#TYPE
-     * @see     java.lang.Byte#TYPE
-     * @see     java.lang.Short#TYPE
-     * @see     java.lang.Integer#TYPE
-     * @see     java.lang.Long#TYPE
-     * @see     java.lang.Float#TYPE
-     * @see     java.lang.Double#TYPE
-     * @see     java.lang.Boolean#TYPE
+     * @see     String
+     * @see     Boolean#TYPE
+     * @see     Character#TYPE
+     * @see     Byte#TYPE
+     * @see     Short#TYPE
+     * @see     Integer#TYPE
+     * @see     Long#TYPE
+     * @see     Float#TYPE
+     * @see     Double#TYPE
+     * @see     Boolean#TYPE
      * @see     byte
      * @see     short
      * @see     int
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/Lcm/DigestUtil.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/Lcm/DigestUtil.java
index b1012e8..ba11a14 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/Lcm/DigestUtil.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/Lcm/DigestUtil.java
@@ -9,6 +9,7 @@
 import javax.crypto.SecretKey;
 import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
 import java.security.InvalidKeyException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
@@ -333,16 +334,16 @@
     /**
      * aes瑙e瘑
      * @param secretKey 绉橀挜
-     * @param encryptedData     Data
+     * @param encryptedData 瀵嗘枃
      * @return digest as a hex string
      */
     public static String decryptAes(String encryptedData, String secretKey) throws Exception {
         // AES 瀵嗛挜闀垮害闇�瑕佹槸 128, 192, 鎴� 256 浣嶏紙16, 24, 鎴� 32 瀛楄妭锛�
-        byte[] keyBytes = secretKey.getBytes("UTF-8");
+        byte[] keyBytes = secretKey.getBytes(StandardCharsets.UTF_8);
         SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
 
         // 鍒濆鍖栧悜閲� IV 涔熼渶瑕佹槸 128 浣嶏紙16 瀛楄妭锛�
-        byte[] ivBytes = secretKey.substring(0, 16).getBytes("UTF-8");
+        byte[] ivBytes = secretKey.substring(0, 16).getBytes(StandardCharsets.UTF_8);
         IvParameterSpec iv = new IvParameterSpec(ivBytes);
 
         // 瑙e瘑
@@ -353,7 +354,30 @@
         byte[] decodedValue = Base64.getDecoder().decode(encryptedData);
         byte[] decryptedBytes = cipher.doFinal(decodedValue);
 
-        return new String(decryptedBytes, "UTF-8");
+        return new String(decryptedBytes, StandardCharsets.UTF_8);
+    }
+
+    /**
+     * aes瑙e瘑
+     * @param secretKey 绉橀挜
+     * @param decryptData 鏄庢枃
+     * @return digest as a hex string
+     */
+    public static String encryptAes(String decryptData, String secretKey) throws Exception{
+        // AES 瀵嗛挜闀垮害闇�瑕佹槸 128, 192, 鎴� 256 浣嶏紙16, 24, 鎴� 32 瀛楄妭锛�
+        byte[] keyBytes = secretKey.getBytes(StandardCharsets.UTF_8);
+        SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
+
+        // 鍒濆鍖栧悜閲� IV 涔熼渶瑕佹槸 128 浣嶏紙16 瀛楄妭锛�
+        byte[] ivBytes = secretKey.substring(0, 16).getBytes(StandardCharsets.UTF_8);
+        IvParameterSpec iv = new IvParameterSpec(ivBytes);
+
+        // 鍔犲瘑
+        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+        cipher.init(Cipher.ENCRYPT_MODE, key, iv);
+
+        byte[] encryptBytes = cipher.doFinal(decryptData.getBytes(StandardCharsets.UTF_8));
+        return Base64.getEncoder().encodeToString(encryptBytes);
     }
 
     /**
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/Lcm/Func.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/Lcm/Func.java
index 6753fe1..500b110 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/Lcm/Func.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/Lcm/Func.java
@@ -395,7 +395,7 @@
      * @param o2 second Object to compare
      * @return whether the given objects are equal
      * @see Object#equals(Object)
-     * @see java.util.Arrays#equals
+     * @see Arrays#equals
      */
     public static boolean equalsSafe(@Nullable Object o1, @Nullable Object o2) {
         return ObjectUtil.nullSafeEquals(o1, o2);
@@ -1243,6 +1243,16 @@
     }
 
     /**
+     * AES 瑙e瘑
+     * @param decryptData
+     * @param secretKey
+     * @return
+     */
+    public static String encryptAes(String decryptData, String secretKey) throws Exception {
+        return DigestUtil.encryptAes(decryptData, secretKey);
+    }
+
+    /**
      * hmacMd5 Hex
      *
      * @param bytes Data to digest
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java
index 3418674..ee58816 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java
@@ -1322,7 +1322,7 @@
         Map<String,Object> map = new HashMap<String,Object>();
         if(o!=null) {
             String jsonString = JSONObject.toJSONStringWithDateFormat(o, VciDateUtil.DateTimeMillFormat, SerializerFeature.WriteDateUseDateFormat);
-            if(org.apache.commons.lang3.StringUtils.isNotBlank(jsonString)) {
+            if(StringUtils.isNotBlank(jsonString)) {
                 JSONObject jsonObject = JSONObject.parseObject(jsonString);
                 if(jsonObject!=null){
                     for(String key : jsonObject.keySet()){
@@ -1343,7 +1343,7 @@
         Map<String,String> map = new HashMap<String,String>();
         if(o!=null) {
             String jsonString = JSONObject.toJSONStringWithDateFormat(o, VciDateUtil.DateTimeMillFormat, SerializerFeature.WriteDateUseDateFormat);
-            if(org.apache.commons.lang3.StringUtils.isNotBlank(jsonString)) {
+            if(StringUtils.isNotBlank(jsonString)) {
                 JSONObject jsonObject = JSONObject.parseObject(jsonString);
                 if(jsonObject!=null){
                     for(String key : jsonObject.keySet()){
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebIconController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebIconController.java
new file mode 100644
index 0000000..a700a6b
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebIconController.java
@@ -0,0 +1,184 @@
+package com.vci.web.controller;
+
+import com.vci.constant.FrameWorkLangCodeConstant;
+import com.vci.dto.PLIconDTO;
+import com.vci.pagemodel.PLIconGroupVO;
+import com.vci.pagemodel.PLIconVO;
+import com.vci.starter.web.annotation.log.VciBusinessLog;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.LocalFileUtil;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.service.WebIconserviceI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.List;
+
+/**
+ * @Description 鍥炬爣鎺у埗鍣�
+ * @Author dangsn
+ * @Date 2024/12/20 10:24
+ */
+@VciBusinessLog(modelName="鍥炬爣鎺у埗鍣�",notStore=true)
+@RestController
+@RequestMapping("/webIconController")
+public class WebIconController {
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 鍥炬爣鏈嶅姟
+     */
+    @Resource
+    private WebIconserviceI iconserviceI;
+
+    /**
+     * 瀵煎叆鍥炬爣
+     * @param file 鍥炬爣鏂囦欢
+     */
+    @PostMapping("/importIcon")
+    @VciBusinessLog(operateName = "瀵煎叆鍥炬爣搴�", description = "瀵煎叆鍥炬爣搴�")
+    public BaseResult importIcon(String type, String groups, MultipartFile file){
+        String fileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename());
+        File iconFile = new File(fileName);
+        try {
+            file.transferTo(iconFile);
+            if (iconFile != null) {
+                iconserviceI.importIcon(type, groups, iconFile);
+                return BaseResult.successMsg("瀵煎叆鎴愬姛锛�");
+            } else {
+                return BaseResult.fail(FrameWorkLangCodeConstant.IMPORT_FAIL, new String[]{"鏃犲鍏ョ殑鏂囦欢"});
+            }
+        }catch (Throwable e) {
+            throw new VciBaseException(VciBaseUtil.getExceptionMessage(e),new String[0],e);
+        }finally {
+            iconFile.delete();
+        }
+    }
+
+    /**
+     * 鏂板鍥炬爣
+     * @param iconDTO 鍥炬爣浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @PostMapping("/addIcon")
+    @VciBusinessLog(operateName = "鏂板鍥炬爣", description = "鏂板鍥炬爣")
+    public BaseResult addIcon(@RequestBody PLIconDTO iconDTO){
+        try {
+            iconserviceI.addIcon(iconDTO);
+            return BaseResult.successMsg("鏂板鍥炬爣鎴愬姛锛�");
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "鏂板鍥炬爣鍑虹幇閿欒锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 淇敼鍥炬爣
+     * @param iconDTO 鍥炬爣浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @PutMapping("/editIcon")
+    @VciBusinessLog(operateName = "淇敼鍥炬爣", description = "淇敼鍥炬爣")
+    public BaseResult editIcon(@RequestBody PLIconDTO iconDTO){
+        try {
+            iconserviceI.editIcon(iconDTO);
+            return BaseResult.successMsg("淇敼鍥炬爣鎴愬姛锛�");
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "淇敼鍥炬爣鍑虹幇閿欒锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 鍒犻櫎鍥炬爣
+     * @param iconDTO 鍥炬爣浼犺緭瀵硅薄
+     * @return 鎵ц缁撴灉
+     */
+    @DeleteMapping("/delIcon")
+    @VciBusinessLog(operateName = "鍒犻櫎鍥炬爣", description = "鍒犻櫎鍥炬爣")
+    public BaseResult delIcon(PLIconDTO iconDTO){
+        try {
+            iconserviceI.delIcon(iconDTO);
+            return BaseResult.successMsg("鍒犻櫎鍥炬爣鎴愬姛锛�");
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "鍒犻櫎鍥炬爣鍑虹幇閿欒锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 鑾峰彇鍥炬爣鍚嶇О
+     * @return 鍥炬爣鍚嶇О
+     */
+    @VciBusinessLog(operateName = "鑾峰彇鍥炬爣鍚嶇О", description = "鑾峰彇鍥炬爣鍚嶇О")
+    @GetMapping("/getIconName")
+    public BaseResult<String> getIconName(){
+        try{
+            List<String> iconNameList = iconserviceI.getIconName();
+            BaseResult baseResult = BaseResult.success();
+            baseResult.setData(iconNameList);
+            return baseResult;
+        }catch (Exception e){
+            e.printStackTrace();
+            String exceptionMessage = "鑾峰彇鍥炬爣鍚嶇О鍑虹幇閿欒锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夊浘鏍囦俊鎭�
+     * @param baseQueryObject 鏌ヨ瀵硅薄
+     * @return 鍥炬爣淇℃伅
+     */
+    @VciBusinessLog(operateName = "鑾峰彇鎵�鏈夊浘鏍�", description = "鑾峰彇鎵�鏈夊浘鏍�")
+    @GetMapping("/getAllIcon")
+    public BaseResult<PLIconGroupVO> getAllIcon(BaseQueryObject baseQueryObject){
+        try{
+            List<PLIconGroupVO> iconList = iconserviceI.getAllIcon(baseQueryObject);
+            BaseResult baseResult = BaseResult.success();
+            baseResult.setData(iconList);
+            return baseResult;
+        }catch (Exception e){
+            e.printStackTrace();
+            String exceptionMessage = "鑾峰彇鍥炬爣鍑虹幇閿欒锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 鑾峰彇鍥炬爣淇℃伅锛屽垎椤�
+     * @param baseQueryObject 鏌ヨ瀵硅薄
+     * @return 鍥炬爣淇℃伅
+     */
+    @VciBusinessLog(operateName = "鑾峰彇鍥炬爣", description = "鑾峰彇鍥炬爣琛ㄦ牸鏁版嵁")
+    @GetMapping("/getGrid")
+    public DataGrid<PLIconVO> getGrid(BaseQueryObject baseQueryObject){
+        try{
+            return iconserviceI.getGrid(baseQueryObject);
+        }catch (Exception e){
+            e.printStackTrace();
+            String exceptionMessage = "鑾峰彇鍥炬爣鍑虹幇閿欒锛屽師鍥狅細" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return new DataGrid<>(exceptionMessage);
+        }
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLifeCycleServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLifeCycleServiceI.java
index eebef67..e3dd04a 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLifeCycleServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLifeCycleServiceI.java
@@ -129,7 +129,7 @@
      * @param releaseStatus 鍙戝竷鐘舵�侊紝濡傛灉鐩爣鐘舵�佹槸鍙戝竷鐘舵�佹椂浼犻�掕繖涓��
      * @throws VciBaseException  璺冭縼鍑洪敊鐨勬槸浼氭姏鍑哄紓甯�
      */
-    void batchTransVo(com.vci.corba.omd.data.BusinessObject[] bos, OsLifeCycleLineVO[] lineVOs,
+    void batchTransVo(BusinessObject[] bos, OsLifeCycleLineVO[] lineVOs,
                       String[] releaseStatus) throws VciBaseException;
 
     /**
@@ -138,7 +138,7 @@
      * @param vos 璺冭縼瀵硅薄
      * @throws VciBaseException 璺冭縼鍑洪敊鐨勬槸浼氭姏鍑哄紓甯�
      */
-    void batchTransVo(com.vci.corba.omd.data.BusinessObject[] bos, OsLifeCycleLineVO[] vos)
+    void batchTransVo(BusinessObject[] bos, OsLifeCycleLineVO[] vos)
             throws VciBaseException;
 
     /**
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebIconserviceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebIconserviceI.java
new file mode 100644
index 0000000..6fb8379
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebIconserviceI.java
@@ -0,0 +1,66 @@
+package com.vci.web.service;
+
+import com.vci.dto.PLIconDTO;
+import com.vci.pagemodel.PLIconGroupVO;
+import com.vci.pagemodel.PLIconVO;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.DataGrid;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * @Description 鍥炬爣鏈嶅姟
+ * @Author dangsn
+ * @Date 2024/12/20 10:26
+ */
+public interface WebIconserviceI {
+
+    /**
+     * 瀵煎叆鍥炬爣
+     *
+     * @param type 鍥炬爣绫诲瀷
+     * @param groups 鍥炬爣鍒嗙粍
+     * @param iconFile 鍥炬爣鏂囦欢
+     * @return 鎵ц缁撴灉
+     */
+    void importIcon(String type, String groups, File iconFile);
+
+    /**
+     * 鏂板鍥炬爣
+     * @param iconDTO 鍥炬爣浼犺緭瀵硅薄
+     */
+    void addIcon(PLIconDTO iconDTO);
+
+    /**
+     * 淇敼鍥炬爣
+     * @param iconDTO 鍥炬爣浼犺緭瀵硅薄
+     */
+    void editIcon(PLIconDTO iconDTO);
+
+    /**
+     * 鍒犻櫎鍥炬爣
+     * @param iconDTO 鍥炬爣浼犺緭瀵硅薄
+     */
+    void delIcon(PLIconDTO iconDTO);
+
+    /**
+     * 鑾峰彇鍥炬爣鍚嶇О
+     * @return 鍥炬爣鍚嶇О
+     */
+    List<String> getIconName();
+
+    /**
+     * 鑾峰彇鍥炬爣
+     * @param baseQueryObject 鏌ヨ瀵硅薄
+     * @return 鍥炬爣淇℃伅
+     */
+    List<PLIconGroupVO> getAllIcon(BaseQueryObject baseQueryObject);
+
+    /**
+     * 鑾峰彇鍥炬爣琛ㄦ牸鏁版嵁
+     * @param baseQueryObject 鏌ヨ瀵硅薄
+     * @return 鍥炬爣淇℃伅
+     */
+    DataGrid<PLIconVO> getGrid(BaseQueryObject baseQueryObject);
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java
index f6e0480..f05c4d7 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java
@@ -129,7 +129,7 @@
 	public void transStatus(List<BusinessObject> boList, String targetStatus)
 			throws VciBaseException {
 		WebUtil.alertNotNull(boList,"涓氬姟鏁版嵁瀵硅薄",targetStatus,"鐩爣瀵硅薄");
-		transStatus(boList.toArray(new com.vci.corba.omd.data.BusinessObject[0]), targetStatus);
+		transStatus(boList.toArray(new BusinessObject[0]), targetStatus);
 	}
 
 	/**
@@ -264,7 +264,7 @@
 					}else {
 						OsLifeCycleLineEventVO[] eventVOs = new OsLifeCycleLineEventVO[route.transitionVOEvents.length];
 						for (int i = 0; i < route.transitionVOEvents.length; i++) {
-							com.vci.corba.omd.lcm.TransitionVOEvent event = route.transitionVOEvents[i];
+							TransitionVOEvent event = route.transitionVOEvents[i];
 							OsLifeCycleLineEventVO eventVO = new OsLifeCycleLineEventVO();
 							eventVO.setOid(event.id);
 							eventVO.setEventFullName(event.name);
@@ -422,7 +422,7 @@
 	 * @return 骞冲彴鐨勮繛鎺ョ嚎瀵硅薄
 	 */
 	private TransitionVO lifeCycleLineVO2DO(OsLifeCycleLineVO lineVO) throws PLException {
-		com.vci.corba.omd.lcm.TransitionVO transitionVO = new com.vci.corba.omd.lcm.TransitionVO();
+		TransitionVO transitionVO = new TransitionVO();
 		transitionVO.id = lineVO.getOid();
 		transitionVO.source = lineVO.getSourceLifeStatus();
 		transitionVO.destination = lineVO.getTargetLifeStatus();
@@ -1095,7 +1095,7 @@
 						releaseStatus[i] = "";
 					}
 				}
-				com.vci.corba.omd.lcm.TransitionVO[] vos = new com.vci.corba.omd.lcm.TransitionVO[lineVOs.length];
+				TransitionVO[] vos = new TransitionVO[lineVOs.length];
 				for(int i = 0 ; i < lineVOs.length; i ++){
 					vos[i] = lifeCycleLineVO2DO(lineVOs[i]);
 				}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebIconServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebIconServiceImpl.java
new file mode 100644
index 0000000..7e9ddda
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebIconServiceImpl.java
@@ -0,0 +1,267 @@
+package com.vci.web.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.vci.corba.portal.PortalServicePrx;
+import com.vci.corba.portal.data.PLIcon;
+import com.vci.dto.PLIconDTO;
+import com.vci.pagemodel.PLIconGroupVO;
+import com.vci.pagemodel.PLIconVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.pagemodel.PageHelper;
+import com.vci.web.service.WebIconserviceI;
+import com.vci.web.util.PlatformClientUtil;
+import com.vci.web.util.WebUtil;
+import edu.stanford.smi.protege.util.HashList;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description 鍥炬爣鏈嶅姟
+ * @Author dangsn
+ * @Date 2024/12/20 10:27
+ */
+@Service
+public class WebIconServiceImpl implements WebIconserviceI {
+
+    /**
+     * 瀹㈡埛绔伐鍏�
+     */
+    @Resource
+    private PlatformClientUtil platformClientUtil;
+
+    /**
+     * 瀵煎叆鍥炬爣
+     *
+     * @param type
+     * @param groups
+     * @param iconFile 鍥炬爣鏂囦欢
+     * @return 鎵ц缁撴灉
+     */
+    @Override
+    public void importIcon(String type, String groups, File iconFile) {
+        try {
+            String fileContent = FileUtils.readFileToString(iconFile, "UTF-8");
+            JSONArray jsonArray = JSON.parseArray(fileContent);
+
+            //鑾峰彇鎵�鏈夌殑鍥炬爣淇℃伅
+            PortalServicePrx portalServicePrx = platformClientUtil.getPortalService();
+            PLIcon[] iconArr = portalServicePrx.getAllPLIcon();
+            List<String> nameList = new ArrayList<>();
+            Map<String, PLIcon> iconMap = new HashMap<>();
+            for(PLIcon icon : iconArr){
+                nameList.add(icon.name);
+                iconMap.put(icon.name, icon);
+            }
+
+            List<PLIcon> addList = new ArrayList<>();
+            List<PLIcon> updateList = new ArrayList<>();
+
+            for(int i = 0; i<jsonArray.size(); i++){
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                String iconContent = jsonObject.getString("svg");
+                String iconName = jsonObject.getString("name").toLowerCase();
+                if(nameList.contains(iconName)){
+                    PLIcon icon = iconMap.get(iconName);
+                    icon.content = iconContent;
+                    icon.type = type;
+                    icon.groups = groups;
+                    updateList.add(icon);
+                }else{
+                    PLIcon icon = new PLIcon();
+                    icon.oid = WebUtil.getPk();
+                    icon.name = iconName;
+                    icon.content = iconContent;
+                    icon.type = type;
+                    icon.groups = groups;
+                    addList.add(icon);
+                }
+            }
+
+            portalServicePrx.batchSavePLIcon(addList.toArray(new PLIcon[0]));
+            portalServicePrx.batchUpdatePLIcon(updateList.toArray(new PLIcon[0]));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 鏂板鍥炬爣
+     *
+     * @param iconDTO 鍥炬爣浼犺緭瀵硅薄
+     */
+    @Override
+    public void addIcon(PLIconDTO iconDTO) {
+        WebUtil.alertNotNull(iconDTO.getName(),"鍥炬爣鍚嶇О", iconDTO.getContent(),"鍥炬爣鍐呭");
+
+        PLIcon plIcon = new PLIcon();
+        plIcon.oid = WebUtil.getPk();
+        plIcon.name = iconDTO.getName().toLowerCase();
+        plIcon.content = iconDTO.getContent();
+        plIcon.type = iconDTO.getType();
+        plIcon.groups = iconDTO.getGroups();
+
+        try {
+            PortalServicePrx portalServicePrx = platformClientUtil.getPortalService();
+            portalServicePrx.savePLIcon(plIcon);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 淇敼鍥炬爣
+     *
+     * @param iconDTO 鍥炬爣浼犺緭瀵硅薄
+     */
+    @Override
+    public void editIcon(PLIconDTO iconDTO) {
+        WebUtil.alertNotNull(iconDTO.getName(),"鍥炬爣鍚嶇О", iconDTO.getContent(),"鍥炬爣鍐呭");
+        try {
+            PortalServicePrx portalServicePrx = platformClientUtil.getPortalService();
+            PLIcon plIcon = portalServicePrx.getPLIconByName(iconDTO.getName().toLowerCase());
+            if(StringUtils.isBlank(plIcon.oid)){
+                throw new VciBaseException("鏈幏鍙栧埌銆�"+iconDTO.getName()+"銆戝浘鏍囦俊鎭紒");
+            }
+            plIcon.content = iconDTO.getContent();
+            plIcon.type = iconDTO.getType();
+            plIcon.groups = iconDTO.getGroups();
+            portalServicePrx.updatePLIcon(plIcon);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 鍒犻櫎鍥炬爣
+     *
+     * @param iconDTO 鍥炬爣浼犺緭瀵硅薄
+     */
+    @Override
+    public void delIcon(PLIconDTO iconDTO) {
+        WebUtil.alertNotNull(iconDTO.getOid(),"鍥炬爣涓婚敭", iconDTO.getName(),"鍥炬爣鍚嶇О");
+        try {
+            PortalServicePrx portalServicePrx = platformClientUtil.getPortalService();
+            portalServicePrx.deletePLIconByName(iconDTO.getName());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 鑾峰彇鍥炬爣鍚嶇О
+     *
+     * @return 鍥炬爣鍚嶇О
+     */
+    @Override
+    public List<String> getIconName() {
+        try {
+            PortalServicePrx portalServicePrx = platformClientUtil.getPortalService();
+            String[] nameArr = portalServicePrx.getPLIconName();
+            return Arrays.asList(nameArr);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * @param baseQueryObject
+     * @return
+     */
+    @Override
+    public List<PLIconGroupVO> getAllIcon(BaseQueryObject baseQueryObject) {
+        Map<String, String> conditionMap = baseQueryObject.getConditionMap();
+        PLIcon plIcon = new PLIcon();
+        String iconName = conditionMap.get("name");
+        if(StringUtils.isNotBlank(iconName)){
+            plIcon.name = iconName.toLowerCase();
+        }
+        plIcon.type = conditionMap.get("type");
+        plIcon.groups = conditionMap.get("groups");
+
+        try {
+            PortalServicePrx portalServicePrx = platformClientUtil.getPortalService();
+            PLIcon[] iconArr = portalServicePrx.getPagePLIcon(plIcon, 0, -1);
+
+            List<PLIconGroupVO> groupVOS = new ArrayList<>();
+            List<PLIconVO> voList = COS2VOS(Arrays.asList(iconArr));
+            Map<String, List<PLIconVO>> voMap = voList.stream().collect(Collectors.groupingBy(PLIconVO::getLable));
+            voMap.forEach((key, value)->{
+                PLIconGroupVO groupVO = new PLIconGroupVO();
+                groupVO.setLable(key);
+                groupVO.setList(value);
+                groupVOS.add(groupVO);
+            });
+
+            return groupVOS;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private List<PLIconVO> COS2VOS(List<PLIcon> iconList){
+        List<PLIconVO> voList = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(iconList)){
+            iconList.forEach(co->{
+                voList.add(CO2VO(co));
+            });
+        }
+        return voList;
+    }
+
+    private PLIconVO CO2VO(PLIcon icon){
+        PLIconVO vo = new PLIconVO();
+        vo.setOid(icon.oid);
+        vo.setName(icon.name);
+        vo.setContent(icon.content);
+        vo.setType(icon.type);
+        vo.setGroups(icon.groups);
+        String[] nameArr = icon.name.split(":");
+        if(nameArr.length > 1){
+            vo.setLable(nameArr[0]);
+        }
+        return vo;
+    }
+
+    /**
+     * 鑾峰彇鍥炬爣琛ㄦ牸鏁版嵁
+     *
+     * @param baseQueryObject 鏌ヨ瀵硅薄
+     * @return 鍥炬爣淇℃伅
+     */
+    @Override
+    public DataGrid<PLIconVO> getGrid(BaseQueryObject baseQueryObject) {
+        Map<String, String> conditionMap = baseQueryObject.getConditionMap();
+        PageHelper pageHelper = baseQueryObject.getPageHelper();
+        PLIcon plIcon = new PLIcon();
+        String iconName = conditionMap.get("name");
+        if(StringUtils.isNotBlank(iconName)){
+            plIcon.name = iconName.toLowerCase();
+        }
+        plIcon.type = conditionMap.get("type");
+        plIcon.groups = conditionMap.get("groups");
+        try {
+            PortalServicePrx portalServicePrx = platformClientUtil.getPortalService();
+            PLIcon[] iconArr = portalServicePrx.getPagePLIcon(plIcon, pageHelper.getPage(), pageHelper.getLimit());
+            List<PLIconVO> voList = COS2VOS(Arrays.asList(iconArr));
+            DataGrid<PLIconVO> dataGrid = new DataGrid<>();
+            dataGrid.setData(voList);
+
+            long count = portalServicePrx.getCountPLIcon(plIcon);
+            dataGrid.setTotal(count);
+            return dataGrid;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

--
Gitblit v1.9.3