package com.ruoyi.common.core.utils;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.ruoyi.common.core.constant.MsgConstants;
|
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 {
|
|
public final static String ecName= "四川明星新能源科技有限公司";
|
public final static String secretKey= "MX_xny2023?9";
|
public final static String sign= "1PUAVuY2b";
|
|
|
|
/**
|
* 更换手机号:【签名】验证码:XXX,用于更换手机号。请勿转发。
|
* @param phone 手机号
|
* @param code 验证码
|
* @return
|
*/
|
public static String codeMsg(String phone,String code){
|
SubmitTempletReq submitReq = new SubmitTempletReq();
|
String[] paramss = {code};
|
submitReq.setApId(MsgConstants.CODE_AP_ID);
|
submitReq.setEcName(ecName);
|
submitReq.setSecretKey(secretKey);
|
submitReq.setParams(JSON.toJSONString(paramss));
|
submitReq.setMobiles(phone);
|
submitReq.setAddSerial("");
|
submitReq.setSign(sign);
|
submitReq.setTemplateId(MsgConstants.CODE_TEMPLATE_ID);
|
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);
|
//加密
|
String encode = Base64.encodeBase64String(reqText.getBytes());
|
System.err.println(encode);
|
return encode;
|
}
|
|
/**
|
* 更换手机号:【签名】验证码:XXX,用于更换手机号。请勿转发。
|
* @param phone 手机号
|
* @param code 验证码
|
* @return
|
*/
|
public static String applyCodeMsg(String phone,String code){
|
SubmitTempletReq submitReq = new SubmitTempletReq();
|
String[] paramss = {code};
|
submitReq.setApId(MsgConstants.APPLY_AP_ID);
|
submitReq.setEcName(ecName);
|
submitReq.setSecretKey(secretKey);
|
submitReq.setParams(JSON.toJSONString(paramss));
|
submitReq.setMobiles(phone);
|
submitReq.setAddSerial("");
|
submitReq.setSign(sign);
|
submitReq.setTemplateId(MsgConstants.APPLY_TEMPLATE_ID);
|
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);
|
//加密
|
String encode = Base64.encodeBase64String(reqText.getBytes());
|
System.err.println(encode);
|
return encode;
|
}
|
|
|
/**
|
* 停车占位提醒:车辆已在3小时前完成充电,请及时取车,避免长时间占用充电资源。
|
* @param phone 手机号
|
* @return
|
*/
|
public static String stopMsg(String phone){
|
SubmitTempletReq submitReq = new SubmitTempletReq();
|
submitReq.setTemplateId(MsgConstants.STOP_TEMPLATE_ID);
|
submitReq.setApId(MsgConstants.STOP_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);
|
//加密
|
String encode = Base64.encodeBase64String(reqText.getBytes());
|
System.err.println(encode);
|
return encode;
|
}
|
|
/**
|
* 充电结束:车辆充电结束,请及时取车。
|
* @param phone 手机号
|
* @return
|
*/
|
public static String chargeStopMsg(String phone){
|
SubmitTempletReq submitReq = new SubmitTempletReq();
|
submitReq.setTemplateId(MsgConstants.CHARGE_TEMPLATE_ID);
|
submitReq.setApId(MsgConstants.CHARGE_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);
|
//加密
|
String encode = Base64.encodeBase64String(reqText.getBytes());
|
System.err.println(encode);
|
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 手机号
|
* @param site 站点名称
|
* @param chargeGun 桩编号
|
* @return
|
*/
|
|
public static String faultMsg(String phone,String site,String chargeGun){
|
// 去除特殊字符 比如.-/{(等等
|
site = site.replaceAll("[\\p{P}+~$`^=|<>~`$^+=|<>¥×]", "");
|
|
SubmitTempletReq submitReq = new SubmitTempletReq();
|
if(site.length()<=10){
|
String[] paramss = {site,chargeGun};
|
submitReq.setParams(JSON.toJSONString(paramss));
|
}else{
|
String work1 = site.substring(0,10);
|
String[] paramss = {work1,chargeGun};
|
submitReq.setParams(JSON.toJSONString(paramss));
|
}
|
submitReq.setTemplateId(MsgConstants.FAULT_TEMPLATE_ID);
|
submitReq.setApId(MsgConstants.FAULT_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);
|
//加密
|
String encode = Base64.encodeBase64String(reqText.getBytes());
|
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
|
*/
|
public static String createCode(){
|
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);
|
}
|
|
}
|