From 04e4346f9e05f8df3a40a96a8187c93f9d3d524c Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期六, 11 七月 2026 09:07:11 +0800
Subject: [PATCH] 微信短信消息推送

---
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/MsgUtil.java |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 57 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 34be928..44841bc 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
@@ -5,6 +5,8 @@
 import com.ruoyi.common.core.utils.req.SubmitTempletReq;
 import org.apache.commons.codec.binary.Base64;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.concurrent.ThreadLocalRandom;
 
 public class MsgUtil {
@@ -146,6 +148,34 @@
         return encode;
     }
 
+    /**
+     * VIP充电完成:VIP 用户您好!您在{电站名称}的充电已完成,本次电量{充电度数}度,费用共计{充电费用}元。
+     */
+    public static String vipChargeFinishMsg(String phone, String site, String chargingCapacity, String chargingFee){
+        SubmitTempletReq submitReq = new SubmitTempletReq();
+        String[] paramss = {limitSiteName(site), limitNumber(chargingCapacity), limitNumber(chargingFee)};
+        submitReq.setParams(JSON.toJSONString(paramss));
+        submitReq.setTemplateId(MsgConstants.VIP_CHARGE_FINISH_TEMPLATE_ID);
+        submitReq.setApId(MsgConstants.VIP_CHARGE_FINISH_AP_ID);
+        submitReq.setEcName(ecName);
+        submitReq.setSecretKey(secretKey);
+        submitReq.setMobiles(phone);
+        submitReq.setAddSerial("");
+        submitReq.setSign(sign);
+        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());
+    }
+
     /**  phone  单词可拼接5000个号码
      * 桩故障(自动/手动):检测到【电站1】【编号】号桩设备离线,请及时查看处理!
      * @param phone 手机号
@@ -197,4 +227,31 @@
         return String.valueOf(ThreadLocalRandom.current().nextInt(100000, 999999));
     }
 
+    private static String limitSiteName(String site) {
+        String value = site == null ? "充电站" : site.replaceAll("[^\\u4e00-\\u9fa5\\d,。!?、:;()《》【】]", "");
+        if (value.length() == 0) {
+            value = "充电站";
+        }
+        return value.length() <= 10 ? value : value.substring(0, 10);
+    }
+
+    private static String limitNumber(String value) {
+        if (value == null) {
+            return "0";
+        }
+        String number = value.replaceAll("[^\\d.]", "");
+        if (number.length() == 0) {
+            return "0";
+        }
+        try {
+            number = new BigDecimal(number).setScale(0, RoundingMode.HALF_UP).toPlainString();
+        } catch (NumberFormatException e) {
+            number = number.replaceAll("\\D", "");
+        }
+        if (number.length() == 0) {
+            return "0";
+        }
+        return number.length() <= 5 ? number : number.substring(0, 5);
+    }
+
 }

--
Gitblit v1.7.1