From b0bbbf71d1e6ecdbe4abbcc39127f5aac6502f1e Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期三, 20 五月 2026 16:39:25 +0800
Subject: [PATCH] feat(production): 添加产品主记录审核功能

---
 src/main/java/com/ruoyi/common/utils/StringUtils.java |   88 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 88 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/common/utils/StringUtils.java b/src/main/java/com/ruoyi/common/utils/StringUtils.java
index 74eb532..cdba7bb 100644
--- a/src/main/java/com/ruoyi/common/utils/StringUtils.java
+++ b/src/main/java/com/ruoyi/common/utils/StringUtils.java
@@ -1,11 +1,15 @@
 package com.ruoyi.common.utils;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.pinyin.PinyinUtil;
 import org.springframework.util.AntPathMatcher;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.text.StrFormatter;
@@ -719,4 +723,88 @@
         }
         return sb.toString();
     }
+
+    public static String padRight(String str, int length) {
+        if (str == null) str = "";
+        if (str.length() >= length) return str;
+        // 鐢ㄧ┖鏍艰ˉ榻�
+        return String.format("%-" + length + "s", str);
+    }
+
+
+    public static boolean containsChinese(String str) {
+        if (str == null) return false;
+        for (char c : str.toCharArray()) {
+            if (Character.UnicodeScript.of(c) == Character.UnicodeScript.HAN) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static String getProcessNo(String processName) {
+        if (StrUtil.isBlank(processName)) {
+            return "";
+        }
+
+        // 鍒ゆ柇鏄惁鍖呭惈涓枃
+        if (StringUtils.containsChinese(processName)) {
+            // 涓枃锛氭嫾闊抽瀛楁瘝
+            return StrUtil.toUpperCase(PinyinUtil.getFirstLetter(processName, ""));
+        } else {
+            // 鑻辨枃锛氬彇澶у啓瀛楁瘝 鐩墠宸ュ簭鍚嶇О娌℃湁鑻辨枃鐨勫舰寮� 鍙兘澶勭悊ExxxBxxx
+            StringBuilder sb = new StringBuilder();
+            for (char c : processName.toCharArray()) {
+                if (Character.isUpperCase(c)) {
+                    sb.append(c);
+                }
+            }
+            return sb.toString();
+        }
+    }
+
+    public static void fillStringNull(Object obj) {
+        if (obj == null) return;
+
+        Class<?> clazz = obj.getClass();
+
+        // 鍩烘湰绫诲瀷 / 鍖呰绫� / String 涓嶅鐞�
+        if (clazz.isPrimitive() ||
+                clazz == String.class ||
+                Number.class.isAssignableFrom(clazz) ||
+                clazz == Boolean.class ||
+                clazz == Character.class) {
+            return;
+        }
+
+        for (Field field : clazz.getDeclaredFields()) {
+            field.setAccessible(true);
+            try {
+                Object value = field.get(obj);
+
+                // 1锔忊儯 String 绫诲瀷锛歯ull 鈫� ""
+                if (field.getType() == String.class) {
+                    if (value == null) {
+                        field.set(obj, "");
+                    }
+                }
+                // 2锔忊儯 List 閫掑綊澶勭悊
+                else if (value instanceof List) {
+                    for (Object item : (List<?>) value) {
+                        fillStringNull(item);
+                    }
+                }
+                // 3锔忊儯 鍏朵粬瀵硅薄閫掑綊
+                else if (value != null && !isJdkClass(value.getClass())) {
+                    fillStringNull(value);
+                }
+
+            } catch (IllegalAccessException ignored) {}
+        }
+    }
+
+    private static boolean isJdkClass(Class<?> clazz) {
+        return clazz.getPackage() != null &&
+                clazz.getPackage().getName().startsWith("java.");
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3