From a0e03b646f2c444b0f09687d24e9995112b99017 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 10 十月 2026 17:30:11 +0800
Subject: [PATCH] 修改bug

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

diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/MsgUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/MsgUtil.java
index 44841bc..d09ed0d 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/MsgUtil.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/MsgUtil.java
@@ -220,6 +220,93 @@
         return encode;
     }
     /**
+     * 公司总账户余额不足提醒:尊敬的客户您好!您公司{[公司名称]}总账户余额不足,当前余额{[当前余额]}元,已低于预警线{[预警线]}元。为避免影响车辆正常充电,请及时充值。感谢配合!
+     * @param phone 手机号
+     * @param companyName 公司名称(纯中文,总长度10)
+     * @param balance 当前余额(纯数字,总长度10)
+     * @param warnAmount 预警线(纯数字,总长度10)
+     * @return
+     */
+    public static String companyBalanceWarnMsg(String phone, String companyName, String balance, String warnAmount){
+        return buildBalanceWarnMsg(phone, MsgConstants.COMPANY_BALANCE_WARN_TEMPLATE_ID,
+                new String[]{limitChinese(companyName), limitDecimal(balance), limitDecimal(warnAmount)});
+    }
+
+    /**
+     * 公司子账号余额不足提醒:尊敬的客户您好!您公司{[公司名称]}用户{[用户信息]}子账户余额不足,当前子账户余额{[当前余额]}元,已低于预警线{[预警线]}元。为避免影响车辆正常充电,请及时分配额度。感谢配合!
+     * @param phone 手机号
+     * @param companyName 公司名称(纯中文,总长度10)
+     * @param userInfo 用户信息(中文+字母+数字,总长度10)
+     * @param balance 当前余额(纯数字,总长度10)
+     * @param warnAmount 预警线(纯数字,总长度10)
+     * @return
+     */
+    public static String subBalanceWarnMsg(String phone, String companyName, String userInfo, String balance, String warnAmount){
+        return buildBalanceWarnMsg(phone, MsgConstants.SUB_BALANCE_WARN_TEMPLATE_ID,
+                new String[]{limitChinese(companyName), limitUserInfo(userInfo), limitDecimal(balance), limitDecimal(warnAmount)});
+    }
+
+    /**
+     * 余额预警模板短信组包(公共逻辑)
+     */
+    private static String buildBalanceWarnMsg(String phone, String templateId, String[] params){
+        SubmitTempletReq submitReq = new SubmitTempletReq();
+        submitReq.setApId(MsgConstants.BALANCE_WARN_AP_ID);
+        submitReq.setEcName(ecName);
+        submitReq.setSecretKey(secretKey);
+        submitReq.setParams(JSON.toJSONString(params));
+        submitReq.setMobiles(phone);
+        submitReq.setAddSerial("");
+        submitReq.setSign(sign);
+        submitReq.setTemplateId(templateId);
+        StringBuffer stringBuffer = new StringBuffer();
+        stringBuffer.append(submitReq.getEcName());
+        stringBuffer.append(submitReq.getApId());
+        stringBuffer.append(submitReq.getSecretKey());
+        stringBuffer.append(submitReq.getTemplateId());
+        stringBuffer.append(submitReq.getMobiles());
+        stringBuffer.append(submitReq.getParams());
+        stringBuffer.append(submitReq.getSign());
+        stringBuffer.append(submitReq.getAddSerial());
+        submitReq.setMac(MD5Util.getMD5(stringBuffer.toString()));
+        String reqText = JSON.toJSONString(submitReq);
+        return Base64.encodeBase64String(reqText.getBytes());
+    }
+
+    /**
+     * 公司名称参数约束:纯中文,总长度10;剔除非法字符,空值兜底
+     */
+    private static String limitChinese(String value) {
+        String v = value == null ? "" : value.replaceAll("[^\\u4e00-\\u9fa5]", "");
+        if (v.length() == 0) {
+            v = "公司";
+        }
+        return v.length() <= 10 ? v : v.substring(0, 10);
+    }
+
+    /**
+     * 用户信息参数约束:中文+字母+数字,总长度10;剔除非法字符,空值兜底
+     */
+    private static String limitUserInfo(String value) {
+        String v = value == null ? "" : value.replaceAll("[^\\u4e00-\\u9fa5A-Za-z0-9]", "");
+        if (v.length() == 0) {
+            v = "用户";
+        }
+        return v.length() <= 10 ? v : v.substring(0, 10);
+    }
+
+    /**
+     * 金额参数约束:纯数字(允许小数点),总长度10;剔除非法字符,空值兜底
+     */
+    private static String limitDecimal(String value) {
+        String v = value == null ? "" : value.replaceAll("[^\\d.]", "");
+        if (v.length() == 0) {
+            v = "0";
+        }
+        return v.length() <= 10 ? v : v.substring(0, 10);
+    }
+
+    /**
      * 生成验证码
      * @return
      */

--
Gitblit v1.7.1