127 lines
3.9 KiB
JavaScript
127 lines
3.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.sendSms = exports.getOrigin = exports.getSms = exports.registerSms = void 0;
|
|
const assert_1 = require("oak-domain/lib/utils/assert");
|
|
const SmsDict = {};
|
|
/**
|
|
* 注入一个其它发送短信类
|
|
* @param clazz
|
|
*/
|
|
function registerSms(clazz) {
|
|
const instance = new clazz();
|
|
SmsDict[instance.name] = instance;
|
|
}
|
|
exports.registerSms = registerSms;
|
|
function getSms(origin) {
|
|
(0, assert_1.assert)(SmsDict.hasOwnProperty(origin));
|
|
return SmsDict[origin];
|
|
}
|
|
exports.getSms = getSms;
|
|
function getOrigin() {
|
|
return Object.keys(SmsDict);
|
|
}
|
|
exports.getOrigin = getOrigin;
|
|
async function sendSms(options, context) {
|
|
const { messageType, origin, templateName, mobile, templateParam } = options;
|
|
(0, assert_1.assert)(messageType || (origin && templateName));
|
|
if (origin && templateName) {
|
|
const [smsTemplate] = await context.select('smsTemplate', {
|
|
data: {
|
|
id: 1,
|
|
origin: 1,
|
|
systemId: 1,
|
|
templateCode: 1,
|
|
},
|
|
filter: {
|
|
origin,
|
|
templateName,
|
|
},
|
|
}, {});
|
|
if (!smsTemplate) {
|
|
return {
|
|
success: false,
|
|
res: `${origin}短信渠道未配置「${templateName}」模板`,
|
|
};
|
|
}
|
|
try {
|
|
const instance = getSms(origin);
|
|
const result = await instance.sendSms({
|
|
mobile,
|
|
templateParam,
|
|
smsTemplate,
|
|
}, context);
|
|
return result;
|
|
}
|
|
catch (err) {
|
|
return {
|
|
success: false,
|
|
res: err?.message,
|
|
};
|
|
}
|
|
}
|
|
else {
|
|
const systemId = context.getSystemId();
|
|
const messageTypeSmsTemplateList = await context.select('messageTypeSmsTemplate', {
|
|
data: {
|
|
id: 1,
|
|
type: 1,
|
|
templateId: 1,
|
|
template: {
|
|
id: 1,
|
|
origin: 1,
|
|
systemId: 1,
|
|
templateCode: 1,
|
|
},
|
|
},
|
|
filter: {
|
|
template: {
|
|
systemId,
|
|
},
|
|
type: messageType,
|
|
},
|
|
}, {});
|
|
// todo 多渠道短信的负载均衡,目前按照顺序发
|
|
let resList = {};
|
|
if (messageTypeSmsTemplateList.length > 0) {
|
|
for (const messageTypeSmsTemplate of messageTypeSmsTemplateList) {
|
|
try {
|
|
const instance = getSms(messageTypeSmsTemplate.template.origin);
|
|
const result = await instance.sendSms({
|
|
mobile,
|
|
templateParam,
|
|
smsTemplate: messageTypeSmsTemplate.template,
|
|
}, context);
|
|
Object.assign(resList, {
|
|
[messageTypeSmsTemplate.template.origin]: result.res,
|
|
});
|
|
if (result.success) {
|
|
return {
|
|
success: true,
|
|
res: resList,
|
|
};
|
|
}
|
|
}
|
|
catch (err) {
|
|
Object.assign(resList, {
|
|
[messageTypeSmsTemplate.template.origin]: err?.message,
|
|
});
|
|
}
|
|
}
|
|
return {
|
|
success: false,
|
|
res: {
|
|
message: `所有短信渠道发送「${messageType}」模板均失败`,
|
|
errorList: resList,
|
|
},
|
|
};
|
|
}
|
|
else {
|
|
return {
|
|
success: false,
|
|
res: `所有短信渠道未配置「${messageType}」模板`,
|
|
};
|
|
}
|
|
}
|
|
}
|
|
exports.sendSms = sendSms;
|