| | |
| | | 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 { |
| | |
| | | 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()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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}; |
| | |
| | | String reqText = JSON.toJSONString(submitReq); |
| | | //加密 |
| | | String encode = Base64.encodeBase64String(reqText.getBytes()); |
| | | System.err.println(encode); |
| | | 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 |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |