You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
294 lines
16 KiB
294 lines
16 KiB
package com.fr.plugin.third.party.jsdjdda; |
|
|
|
import com.fanruan.api.log.LogKit; |
|
import com.fanruan.api.util.StringKit; |
|
import com.fr.json.JSONArray; |
|
import com.fr.json.JSONObject; |
|
import com.fr.plugin.third.party.jsdjdda.config.CustomDataConfig; |
|
import com.fr.stable.fun.impl.AbstractSMSServiceProvider; |
|
|
|
import java.util.ArrayList; |
|
import java.util.HashMap; |
|
import java.util.List; |
|
import java.util.Map; |
|
|
|
public class CustomSMSService extends AbstractSMSServiceProvider { |
|
private static Map<String, String> BUILD_IN_TEMPLATE_MAP = new HashMap<>(); |
|
private static Map<String, String> BUILD_IN_TEMPLATE_ID_MAP = new HashMap<>(); |
|
|
|
static { |
|
BUILD_IN_TEMPLATE_MAP.put("10", "尊敬的管理员,#taskname#于#time#运行失败,请知晓。"); |
|
BUILD_IN_TEMPLATE_MAP.put("11", "尊敬的#name#,您有一个工单号为:#order_number#的待处理工单,请您及时处理!"); |
|
BUILD_IN_TEMPLATE_MAP.put("13", "您好,#webname#系统内存持续#m#分钟内存高于#n#,可能存在宕机风险,请及时关注。"); |
|
BUILD_IN_TEMPLATE_MAP.put("14", "尊敬的管理员,#taskname#于#time#运行失败,请知晓。"); |
|
BUILD_IN_TEMPLATE_MAP.put("15", "您好,#taskname#于#time#运行成功。"); |
|
BUILD_IN_TEMPLATE_MAP.put("16", "您的手机验证码为#Verifiecode#,请于10分钟内正确输入。"); |
|
BUILD_IN_TEMPLATE_MAP.put("17", "您好,#webname#系统内存持续#m#分钟内存高于#n#,可能存在宕机风险,请及时关注。"); |
|
BUILD_IN_TEMPLATE_MAP.put("18", "恭喜!您的短信服务已经配置成功。"); |
|
BUILD_IN_TEMPLATE_MAP.put("20", "您的手机验证码为#verifiecode#,请于10分钟内正确输入。"); |
|
BUILD_IN_TEMPLATE_MAP.put("49", "您好,#webname#系统日志文件已大于#logsize#M,请及时登录平台进行日志清理。"); |
|
BUILD_IN_TEMPLATE_MAP.put("50", "您好,#webname#系统#clustername#内存持续#m#分钟内存高于#n#,可能存在宕机风险,请及时关注。"); |
|
BUILD_IN_TEMPLATE_MAP.put("51", "你好,#task#出错,请及时处理。该任务开始执行时间:#time#"); |
|
BUILD_IN_TEMPLATE_MAP.put("53", "上报任务 #task#,已经到您这里#time#,请尽快处理!"); |
|
BUILD_IN_TEMPLATE_MAP.put("54", "#name#您好,上报任务#task#已经发起,请尽快处理!"); |
|
BUILD_IN_TEMPLATE_MAP.put("63", "节点#nodename2#,与节点#nodename1#系统时间相差超过#time_different#秒,为避免影响用户使用,请及时调整使各节点时间保持一致。"); |
|
BUILD_IN_TEMPLATE_MAP.put("64", "节点#nodename#已脱离集群环境,可能原因为:节点FullGC、节点宕机、节点间通信不畅、节点负载过高、其他异常。为避免影响用户使用,请及时检查该节点状态,若该节点长时间无法自行恢复,则建议重启该节点。"); |
|
BUILD_IN_TEMPLATE_MAP.put("89", "节点#nodename#,与节点#node1name#的jar包不一致,将影响集群工程的稳定性,请前往集群节点管理页面查看详细异常信息,并及时处理。"); |
|
BUILD_IN_TEMPLATE_MAP.put("90", "节点#nodename#情况异常,用户不能正常访问,请及时检查该节点状态。"); |
|
BUILD_IN_TEMPLATE_MAP.put("125", "您有个#proname#任务即将过期,请您尽快办理。"); |
|
BUILD_IN_TEMPLATE_MAP.put("127", "您有个#proname#任务需要处理,请您尽快办理。发起人:#startpeople#,发起时间:#starttime#。"); |
|
BUILD_IN_TEMPLATE_MAP.put("134", "Redis集群#ip_port#节点已无法正常使用,可能原因为:节点宕机、内存已满、其他异常。为避免影响用户使用,请前往状态服务器配置页面查看详情,并及时处理。"); |
|
BUILD_IN_TEMPLATE_MAP.put("135", "文件服务器出现无法读写的情况,可能原因为:文件服务器宕机、磁盘已满、其他异常。为避免影响用户使用,请及时检查文件服务器状态。"); |
|
BUILD_IN_TEMPLATE_MAP.put("136", "您好,#webname#系统#clustername#当前负载状态过高,可能存在宕机风险,请及时关注。建议使用管理系统-智能运维-云端运维功能分析当前系统存在的性能问题。"); |
|
BUILD_IN_TEMPLATE_MAP.put("239", "您好,预警任务#warningname#达到阈值被触发,请及时关注!模板路径:#templatePath#"); |
|
BUILD_IN_TEMPLATE_MAP.put("264", "更新任务「#job_name#」结束。任务开始于#year#年#month#月#day#日#hr_min#,累计耗时#c_hr#时#c_min#分#c_sec#秒,完成任务:基础表更新 #success_basetable#/#total_basetable# ,自助数据集更新 #success_dataset#/#total_dataset# , 关联更新 #success_relation#/#total_relation#。"); |
|
BUILD_IN_TEMPLATE_MAP.put("265", "报表系统已宕机,请访问运维工具关注问题处理状态或及时进行系统重启。"); |
|
BUILD_IN_TEMPLATE_MAP.put("266", "报表系统已宕机,自动重启系统失败,请及时进行手动重启。"); |
|
BUILD_IN_TEMPLATE_MAP.put("269", "检查到系统环境配置存有不合理项,请及时查看并改正不合理项。"); |
|
BUILD_IN_TEMPLATE_MAP.put("276", "你好,[#taskname#]备份失败,请及时处理,备份时间:#time#"); |
|
BUILD_IN_TEMPLATE_MAP.put("367", "集群节点#node_name#与基准节点存在不一致文件,且无法自动同步。请检查该节点状态"); |
|
BUILD_IN_TEMPLATE_MAP.put("368", "集群节点#node_name#与基准节点存在不一致文件,已自动同步与基准节点一致,不一致文件备份在该节点工程WEB-INF/#directory#/下"); |
|
BUILD_IN_TEMPLATE_MAP.put("509", "尊敬的管理员,用户管理-同步用户于#time#运行失败,可手动触发同步,以查看详细报错。"); |
|
BUILD_IN_TEMPLATE_MAP.put("550", "Dear administrator, \"User>Sync user\" failed to run at #time#, you can trigger the sync manually to view the detailed error report."); |
|
BUILD_IN_TEMPLATE_MAP.put("551", "尊敬的管理員,使用者管理-同步使用者於#time#執行失敗,可手動觸發同步,以檢視詳細報錯。"); |
|
BUILD_IN_TEMPLATE_MAP.put("573", "您好,#etltask# 运行失败,开始执行时间为 #begintime#,结束时间为 #endtime#,请前往 [数据准备]-[ETL作业]-[任务运维] 查看详情。"); |
|
BUILD_IN_TEMPLATE_MAP.put("587", "您好,检测到系统有宕机记录,请访问管理系统——智能运维——宕机处理页面中的宕机自助向导,查看宕机原因,并依据推荐解决方案进行处理"); |
|
BUILD_IN_TEMPLATE_MAP.put("600", "尊敬的#name#,#taskname#于#time#已更新,请及时关注。"); |
|
BUILD_IN_TEMPLATE_MAP.put("602", "#date#日有#templatecount#张模板在使用中出现共#errorcount#次报错,请至智能运维-平台日志中查看并处理模板报错。"); |
|
BUILD_IN_TEMPLATE_MAP.put("605", "您好,#webname#中,生成数据-定时计算任务“#taskname#”执行异常,生成数据失败。请及时登录系统处理"); |
|
BUILD_IN_TEMPLATE_MAP.put("606", "您好,#webname#中,生成数据-定时计算任务“#taskname#”执行成功,已完成#dataTypeText#(#dateRangeText#)数据计算"); |
|
BUILD_IN_TEMPLATE_MAP.put("998", "节点#nodename1#与节点#nodename2#之间通信异常,无法加入节点管理,请检查集群节点间通信端口是否已开放[TCP:7800,7810, 7820,7830, 7840, 7850,7860,7870][UDP:45588~65536 随机端口]。"); |
|
BUILD_IN_TEMPLATE_MAP.put("999", "节点#node_name#的#type#模块存在异常,暂无法正常提供服务,请及时对异常状况进行排查"); |
|
|
|
BUILD_IN_TEMPLATE_ID_MAP.put("10", "10"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("11", "11"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("13", "13"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("14", "14"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("15", "15"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("16", "16"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("17", "17"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("18", "18"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("20", "20"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("49", "49"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("50", "50"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("51", "51"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("53", "53"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("54", "54"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("63", "63"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("64", "64"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("89", "89"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("90", "90"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("125", "125"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("127", "127"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("134", "134"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("135", "135"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("136", "136"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("239", "239"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("264", "264"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("265", "265"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("266", "266"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("269", "269"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("276", "276"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("367", "367"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("368", "368"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("509", "509"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("550", "550"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("551", "551"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("573", "573"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("587", "587"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("600", "600"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("602", "602"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("605", "605"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("606", "606"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("998", "998"); |
|
BUILD_IN_TEMPLATE_ID_MAP.put("999", "999"); |
|
|
|
} |
|
|
|
/** |
|
* 根据内置的短信模板编号,转换成实际的第三方短信平台的短信模板 |
|
* |
|
* @return 编号和实际模板的键值对集合 |
|
*/ |
|
@Override |
|
public Map<String, String> mapping() { |
|
return BUILD_IN_TEMPLATE_ID_MAP; |
|
} |
|
|
|
/** |
|
* 发送测试短信 |
|
* |
|
* @param mobile 接收短信的手机号 |
|
* @return 结果 |
|
*/ |
|
@Override |
|
public Response sendTest(String mobile) { |
|
String buildInTemplateId = "18"; |
|
try { |
|
List<String> mobiles = SmsUtils.createMobiles(mobile, null); |
|
String templateId = getCustomTemplateId(buildInTemplateId); |
|
SmsUtils.sendSms(mobiles, templateId, null); |
|
} catch (Exception e) { |
|
LogKit.error("短信集成,发送测试短信出错,"+ e.getMessage()); |
|
} |
|
String msg = createSmsContent(buildInTemplateId, null); |
|
Response response = Response.create(Response.RES_STATUS_SUCCESS, msg, null); |
|
return response; |
|
} |
|
|
|
/** |
|
* FR包含的短信发送功能 |
|
* |
|
* @param template 发送短信的模板(里面有参数,需要根据后面的para里的参数值进行替换) |
|
* @param mobile 接收短信的手机号 |
|
* @param para 生成最终短信需要的参数 |
|
* @param receiver 接收者(用户) |
|
* @return 结果 |
|
* @throws Exception 异常 |
|
*/ |
|
@Override |
|
public Response send(String template, String mobile, JSONObject para, String receiver) throws Exception { |
|
List<String> mobiles = SmsUtils.createMobiles(mobile, receiver); |
|
String templateId = getCustomTemplateId(template); |
|
List<String> params = getJsonValues(para); |
|
SmsUtils.sendSms(mobiles, templateId, params); |
|
List<String> userNames = SmsUtils.createUserNames(receiver); |
|
SmsUtils.sendMsgByAccount(userNames, templateId, params); |
|
String msg = createSmsContent(template, para); |
|
Response response = Response.create(Response.RES_STATUS_SUCCESS, msg, null); |
|
return response; |
|
} |
|
|
|
/** |
|
* FR包含的批量发送短信的功能 |
|
* |
|
* @param template 发送短信的模板(里面有参数,需要根据后面的para里的参数值进行替换) |
|
* @param mobiles 接收短信的手机号列表 |
|
* @param params 对应的生成最终短信需要的参数JSON数组 |
|
* @param receivers 接收者(用户)列表,三个列表/数组,根据序号一一对应 |
|
* @return 结果 |
|
* @throws Exception 异常 |
|
*/ |
|
@Override |
|
public Response batchSendSMS(String template, List<String> mobiles, JSONArray params, List<String> receivers) throws Exception { |
|
//SMSManager.getInstance(); |
|
//SMSService.getInstance().getSMSInfo(); |
|
String msg = "短信集成,不支持batchSendSMS"; |
|
LogKit.info(msg); |
|
|
|
Response response = Response.create(Response.RES_STATUS_FAILED, msg, null); |
|
return response; |
|
} |
|
|
|
|
|
private String createSmsContent(String templateId, JSONObject para) { |
|
if (StringKit.isEmpty(templateId)) { |
|
return ""; |
|
} |
|
|
|
if (!BUILD_IN_TEMPLATE_MAP.containsKey(templateId)) { |
|
return ""; |
|
} |
|
|
|
String content = BUILD_IN_TEMPLATE_MAP.get(templateId); |
|
if (StringKit.isEmpty(content)) { |
|
content = ""; |
|
} |
|
if (para == null) { |
|
return content; |
|
} |
|
|
|
List<String> fieldNames = new ArrayList<>(); |
|
fieldNames.addAll(para.fieldNames()); |
|
int size = fieldNames.size(); |
|
if (size <= 0) { |
|
return content; |
|
} |
|
String name, value; |
|
for (int i = 0, max = size - 1; i <= max; i++) { |
|
name = fieldNames.get(i); |
|
value = para.getString(name); |
|
if (StringKit.isEmpty(value)) { |
|
value = ""; |
|
} |
|
content = content.replace(name, value); |
|
} |
|
return content; |
|
} |
|
|
|
private List<String> getJsonValues(JSONObject json) { |
|
List<String> values = new ArrayList<>(); |
|
if (json == null) { |
|
return values; |
|
} |
|
|
|
List<String> fieldNames = new ArrayList<>(); |
|
fieldNames.addAll(json.fieldNames()); |
|
int size = fieldNames.size(); |
|
if (size <= 0) { |
|
return values; |
|
} |
|
String name, value; |
|
for (int i = 0, max = size - 1; i <= max; i++) { |
|
name = fieldNames.get(i); |
|
value = json.getString(name); |
|
if (StringKit.isEmpty(value)) { |
|
value = ""; |
|
} |
|
values.add(value); |
|
} |
|
return values; |
|
} |
|
|
|
|
|
/** |
|
* 获取定制的短信模板编号 |
|
* |
|
* @param id |
|
* @return |
|
*/ |
|
private String getCustomTemplateId(String id) { |
|
if (StringKit.isEmpty(id)) { |
|
return ""; |
|
} |
|
|
|
String content = StringKit.trim(CustomDataConfig.getInstance().getTemplateMap()); |
|
if (StringKit.isEmpty(content)) { |
|
return ""; |
|
} |
|
String[] templateMaps = content.split(";"); |
|
if ((templateMaps == null) || (templateMaps.length <= 0)) { |
|
return ""; |
|
} |
|
String tempValue, tempValue1, tempValue2; |
|
|
|
String[] templateIds; |
|
for (int i = 0, max = templateMaps.length - 1; i <= max; i++) { |
|
tempValue = StringKit.trim(templateMaps[i]); |
|
if (StringKit.isEmpty(tempValue)) { |
|
continue; |
|
} |
|
|
|
templateIds = tempValue.split(":"); |
|
if ((templateIds == null) || (templateIds.length <= 1)) { |
|
continue; |
|
} |
|
tempValue1 = StringKit.trim(templateIds[0]); |
|
tempValue2 = StringKit.trim(templateIds[1]); |
|
if (StringKit.isEmpty(tempValue1) || StringKit.isEmpty(tempValue2)) { |
|
continue; |
|
} |
|
if (StringKit.equals(tempValue1, id)) { |
|
return tempValue2; |
|
} |
|
} |
|
return ""; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|