From ac79dfd8d661dbe166553ff80fbdbfee64e8134e Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 28 四月 2026 16:02:20 +0800
Subject: [PATCH] feat(production): 添加工序ID字段支持
---
src/main/java/com/ruoyi/common/utils/StringUtils.java | 278 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 277 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/ruoyi/common/utils/StringUtils.java b/src/main/java/com/ruoyi/common/utils/StringUtils.java
index 8df5617..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闆嗗悎
@@ -322,6 +434,32 @@
}
return list;
+ }
+
+ /**
+ * 鍒ゆ柇缁欏畾鐨刢ollection鍒楄〃涓槸鍚﹀寘鍚暟缁刟rray 鍒ゆ柇缁欏畾鐨勬暟缁刟rray涓槸鍚﹀寘鍚粰瀹氱殑鍏冪礌value
+ *
+ * @param collection 缁欏畾鐨勯泦鍚�
+ * @param array 缁欏畾鐨勬暟缁�
+ * @return boolean 缁撴灉
+ */
+ public static boolean containsAny(Collection<String> collection, String... array)
+ {
+ if (isEmpty(collection) || isEmpty(array))
+ {
+ return false;
+ }
+ else
+ {
+ for (String str : array)
+ {
+ if (collection.contains(str))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
}
/**
@@ -455,13 +593,18 @@
}
/**
- * 椹煎嘲寮忓懡鍚嶆硶 渚嬪锛歶ser_name->userName
+ * 椹煎嘲寮忓懡鍚嶆硶
+ * 渚嬪锛歶ser_name->userName
*/
public static String toCamelCase(String s)
{
if (s == null)
{
return null;
+ }
+ if (s.indexOf(SEPARATOR) == -1)
+ {
+ return s;
}
s = s.toLowerCase();
StringBuilder sb = new StringBuilder(s.length());
@@ -531,4 +674,137 @@
{
return (T) obj;
}
+
+ /**
+ * 鏁板瓧宸﹁竟琛ラ綈0锛屼娇涔嬭揪鍒版寚瀹氶暱搴︺�傛敞鎰忥紝濡傛灉鏁板瓧杞崲涓哄瓧绗︿覆鍚庯紝闀垮害澶т簬size锛屽垯鍙繚鐣� 鏈�鍚巗ize涓瓧绗︺��
+ *
+ * @param num 鏁板瓧瀵硅薄
+ * @param size 瀛楃涓叉寚瀹氶暱搴�
+ * @return 杩斿洖鏁板瓧鐨勫瓧绗︿覆鏍煎紡锛岃瀛楃涓蹭负鎸囧畾闀垮害銆�
+ */
+ public static final String padl(final Number num, final int size)
+ {
+ return padl(num.toString(), size, '0');
+ }
+
+ /**
+ * 瀛楃涓插乏琛ラ綈銆傚鏋滃師濮嬪瓧绗︿覆s闀垮害澶т簬size锛屽垯鍙繚鐣欐渶鍚巗ize涓瓧绗︺��
+ *
+ * @param s 鍘熷瀛楃涓�
+ * @param size 瀛楃涓叉寚瀹氶暱搴�
+ * @param c 鐢ㄤ簬琛ラ綈鐨勫瓧绗�
+ * @return 杩斿洖鎸囧畾闀垮害鐨勫瓧绗︿覆锛岀敱鍘熷瓧绗︿覆宸﹁ˉ榻愭垨鎴彇寰楀埌銆�
+ */
+ public static final String padl(final String s, final int size, final char c)
+ {
+ final StringBuilder sb = new StringBuilder(size);
+ if (s != null)
+ {
+ final int len = s.length();
+ if (s.length() <= size)
+ {
+ for (int i = size - len; i > 0; i--)
+ {
+ sb.append(c);
+ }
+ sb.append(s);
+ }
+ else
+ {
+ return s.substring(len - size, len);
+ }
+ }
+ else
+ {
+ for (int i = size; i > 0; i--)
+ {
+ sb.append(c);
+ }
+ }
+ 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