From aeb7d490c7fa55ae4861a43d256a5a9cf649d39c Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期三, 27 五月 2026 14:15:35 +0800
Subject: [PATCH] feat(ProductionPrintOrder) 工序改为9位

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

diff --git a/src/main/java/com/ruoyi/common/utils/StringUtils.java b/src/main/java/com/ruoyi/common/utils/StringUtils.java
index f2203ae..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;
@@ -22,6 +26,9 @@
 
     /** 涓嬪垝绾� */
     private static final char SEPARATOR = '_';
+
+    /** 鏄熷彿 */
+    private static final char ASTERISK = '*';
 
     /**
      * 鑾峰彇鍙傛暟涓嶄负绌哄��
@@ -164,6 +171,49 @@
     }
 
     /**
+     * 鏇挎崲鎸囧畾瀛楃涓茬殑鎸囧畾鍖洪棿鍐呭瓧绗︿负"*"
+     *
+     * @param str 瀛楃涓�
+     * @param startInclude 寮�濮嬩綅缃紙鍖呭惈锛�
+     * @param endExclude 缁撴潫浣嶇疆锛堜笉鍖呭惈锛�
+     * @return 鏇挎崲鍚庣殑瀛楃涓�
+     */
+    public static String hide(CharSequence str, int startInclude, int endExclude)
+    {
+        if (isEmpty(str))
+        {
+            return NULLSTR;
+        }
+        final int strLength = str.length();
+        if (startInclude > strLength)
+        {
+            return NULLSTR;
+        }
+        if (endExclude > strLength)
+        {
+            endExclude = strLength;
+        }
+        if (startInclude > endExclude)
+        {
+            // 濡傛灉璧峰浣嶇疆澶т簬缁撴潫浣嶇疆锛屼笉鏇挎崲
+            return NULLSTR;
+        }
+        final char[] chars = new char[strLength];
+        for (int i = 0; i < strLength; i++)
+        {
+            if (i >= startInclude && i < endExclude)
+            {
+                chars[i] = ASTERISK;
+            }
+            else
+            {
+                chars[i] = str.charAt(i);
+            }
+        }
+        return new String(chars);
+    }
+
+    /**
      * 鎴彇瀛楃涓�
      * 
      * @param str 瀛楃涓�
@@ -241,6 +291,56 @@
     }
 
     /**
+     * 鍦ㄥ瓧绗︿覆涓煡鎵剧涓�涓嚭鐜扮殑 `open` 鍜屾渶鍚庝竴涓嚭鐜扮殑 `close` 涔嬮棿鐨勫瓙瀛楃涓�
+     * 
+     * @param str 瑕佹埅鍙栫殑瀛楃涓�
+     * @param open 璧峰瀛楃涓�
+     * @param close 缁撴潫瀛楃涓�
+     * @return 鎴彇缁撴灉
+     */
+    public static String substringBetweenLast(final String str, final String open, final String close)
+    {
+        if (isEmpty(str) || isEmpty(open) || isEmpty(close))
+        {
+            return NULLSTR;
+        }
+        final int start = str.indexOf(open);
+        if (start != INDEX_NOT_FOUND)
+        {
+            final int end = str.lastIndexOf(close);
+            if (end != INDEX_NOT_FOUND)
+            {
+                return str.substring(start + open.length(), end);
+            }
+        }
+        return NULLSTR;
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁涓虹┖锛屽苟涓斾笉鏄┖鐧藉瓧绗�
+     * 
+     * @param str 瑕佸垽鏂殑value
+     * @return 缁撴灉
+     */
+    public static boolean hasText(String str)
+    {
+        return (str != null && !str.isEmpty() && containsText(str));
+    }
+
+    private static boolean containsText(CharSequence str)
+    {
+        int strLen = str.length();
+        for (int i = 0; i < strLen; i++)
+        {
+            if (!Character.isWhitespace(str.charAt(i)))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
      * 鏍煎紡鍖栨枃鏈�, {} 琛ㄧず鍗犱綅绗�<br>
      * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗� {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁�<br>
      * 濡傛灉鎯宠緭鍑� {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨� \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲<br>
@@ -290,6 +390,18 @@
      * 
      * @param str 瀛楃涓�
      * @param sep 鍒嗛殧绗�
+     * @return list闆嗗悎
+     */
+    public static final List<String> str2List(String str, String sep)
+    {
+        return str2List(str, sep, true, false);
+    }
+
+    /**
+     * 瀛楃涓茶浆list
+     * 
+     * @param str 瀛楃涓�
+     * @param sep 鍒嗛殧绗�
      * @param filterBlank 杩囨护绾┖鐧�
      * @param trim 鍘绘帀棣栧熬绌虹櫧
      * @return list闆嗗悎
@@ -325,9 +437,9 @@
     }
 
     /**
-     * 鍒ゆ柇缁欏畾鐨剆et鍒楄〃涓槸鍚﹀寘鍚暟缁刟rray 鍒ゆ柇缁欏畾鐨勬暟缁刟rray涓槸鍚﹀寘鍚粰瀹氱殑鍏冪礌value
+     * 鍒ゆ柇缁欏畾鐨刢ollection鍒楄〃涓槸鍚﹀寘鍚暟缁刟rray 鍒ゆ柇缁欏畾鐨勬暟缁刟rray涓槸鍚﹀寘鍚粰瀹氱殑鍏冪礌value
      *
-     * @param set 缁欏畾鐨勯泦鍚�
+     * @param collection 缁欏畾鐨勯泦鍚�
      * @param array 缁欏畾鐨勬暟缁�
      * @return boolean 缁撴灉
      */
@@ -611,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