Merge branch 'dev' of codeup.aliyun.com:61c14a7efa282c88e103c23f/oak-general-business into dev
This commit is contained in:
commit
822edcf639
|
|
@ -5,6 +5,7 @@ var jsx_runtime_1 = require("react/jsx-runtime");
|
|||
var react_1 = tslib_1.__importStar(require("react"));
|
||||
var antd_1 = require("antd");
|
||||
var icons_1 = require("@ant-design/icons");
|
||||
var web_module_less_1 = tslib_1.__importDefault(require("./web.module.less"));
|
||||
// import OakIcon from '../../icon'
|
||||
function render(props) {
|
||||
var _a = props.data, _b = _a.placement, placement = _b === void 0 ? 'bottom' : _b, _c = _a.style, style = _c === void 0 ? {} : _c;
|
||||
|
|
@ -16,11 +17,7 @@ function render(props) {
|
|||
setVisible(true);
|
||||
} }), (0, jsx_runtime_1.jsxs)(antd_1.Drawer, tslib_1.__assign({ getContainer: false, placement: placement, open: visible, onClose: function () {
|
||||
setVisible(false);
|
||||
}, title: "Debug\u63A7\u5236\u53F0", footer: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}), rootStyle: {
|
||||
width: '100vw',
|
||||
}, bodyStyle: {
|
||||
width: '100vw',
|
||||
} }, { children: [(0, jsx_runtime_1.jsx)("input", { type: "file", accept: "application/json", hidden: true, id: "upload", onChange: function () {
|
||||
}, title: "Debug\u63A7\u5236\u53F0", footer: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}), className: web_module_less_1.default.drawer }, { children: [(0, jsx_runtime_1.jsx)("input", { type: "file", accept: "application/json", hidden: true, id: "upload", onChange: function () {
|
||||
var file = document.getElementById('upload')
|
||||
.files[0];
|
||||
if (typeof FileReader === undefined) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
|
||||
.container {
|
||||
display: flex;
|
||||
}
|
||||
.drawer {
|
||||
position: fixed !important;
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ export interface Schema extends EntityShape {
|
|||
author: String<32>;
|
||||
abstract?: Text;
|
||||
content?: Text;
|
||||
url?: Text;
|
||||
files: Array<ExtraFile>;
|
||||
sign: String<32>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ var locale = {
|
|||
content: '正文',
|
||||
files: '封面图',
|
||||
iState: '状态',
|
||||
url: '外部链接',
|
||||
entity: '关联对象',
|
||||
entityId: '关联对象id',
|
||||
sign: '唯一标志',
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { Schema as Message } from './Message';
|
||||
import { EntityShape } from 'oak-domain/lib/types/Entity';
|
||||
export interface Schema extends EntityShape {
|
||||
channel: 'public' | 'jPush' | 'jim' | 'mp' | 'gsm';
|
||||
channel: 'wechat' | 'jPush' | 'jim' | 'mp' | 'sms';
|
||||
data: Object;
|
||||
message: Message;
|
||||
data1: Object;
|
||||
|
|
|
|||
|
|
@ -29,11 +29,11 @@ var locale = {
|
|||
failure: '发送失败',
|
||||
},
|
||||
channel: {
|
||||
public: '公众号',
|
||||
wechat: '公众号',
|
||||
jPush: '极光推送',
|
||||
jim: '极光消息',
|
||||
mp: '小程序',
|
||||
gsm: '短信',
|
||||
sms: '短信',
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
import { String, Text } from 'oak-domain/lib/types/DataType';
|
||||
import { EntityShape } from 'oak-domain/lib/types/Entity';
|
||||
export declare type WechatPublicConfig = {
|
||||
type: 'wechatPublic';
|
||||
appId: string;
|
||||
appSecret: string;
|
||||
};
|
||||
export interface Schema extends EntityShape {
|
||||
entity: String<32>;
|
||||
entityId: String<64>;
|
||||
name: String<32>;
|
||||
description: Text;
|
||||
config: WechatPublicConfig;
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
;
|
||||
var indexes = [
|
||||
//索引
|
||||
{
|
||||
name: 'index_name',
|
||||
attributes: [
|
||||
{
|
||||
name: 'name',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'index_entity',
|
||||
attributes: [
|
||||
{
|
||||
name: 'entity',
|
||||
},
|
||||
{
|
||||
name: 'entityId',
|
||||
}
|
||||
],
|
||||
},
|
||||
];
|
||||
var locale = {
|
||||
zh_CN: {
|
||||
attr: {
|
||||
name: '名称',
|
||||
entity: '对象名称',
|
||||
entityId: '对象Id',
|
||||
description: '描述',
|
||||
config: '配置',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -1,10 +1,13 @@
|
|||
import { Trigger } from 'oak-domain/lib/types/Trigger';
|
||||
import { EntityDict } from '../general-app-domain/EntityDict';
|
||||
import { CreateOperationData as CreateMessageData } from '../general-app-domain/Message/Schema';
|
||||
import { RuntimeCxt } from '../types/RuntimeCxt';
|
||||
import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
|
||||
import { MessagePropsToSms, MessagePropsToWechat } from '../types/Message';
|
||||
export declare function registerMessagePropsConverter(converter: {
|
||||
sms?: MessagePropsToSms;
|
||||
wechat?: MessagePropsToWechat;
|
||||
}): void;
|
||||
export declare function addMessageSent(message: CreateMessageData, context: BackendRuntimeContext<EntityDict>): Promise<0 | 1>;
|
||||
declare const triggers: Trigger<EntityDict, 'message', RuntimeCxt>[];
|
||||
export default triggers;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.registerMessagePropsConverter = void 0;
|
||||
exports.addMessageSent = exports.registerMessagePropsConverter = void 0;
|
||||
var tslib_1 = require("tslib");
|
||||
var uuid_1 = require("oak-domain/lib/utils/uuid");
|
||||
var assert_1 = require("oak-domain/lib/utils/assert");
|
||||
var SmsCoverter;
|
||||
var WechatConverter;
|
||||
|
|
@ -13,37 +14,67 @@ function registerMessagePropsConverter(converter) {
|
|||
exports.registerMessagePropsConverter = registerMessagePropsConverter;
|
||||
function tryAddMessageSent(message, channel, context) {
|
||||
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
||||
return tslib_1.__generator(this, function (_a) {
|
||||
// const { systemId, type } = message;
|
||||
// const disperse = MessageDisperse && MessageDisperse[systemId] && MessageDisperse[systemId][type] && MessageDisperse[systemId][type][channel];
|
||||
// if (!disperse) {
|
||||
// return 0;
|
||||
// }
|
||||
// // 有配置也未必一定能发,比如说用户没有注册手机号,则无法发gsm
|
||||
// const data = disperse(message);
|
||||
// if (!data) {
|
||||
// return 0;
|
||||
// }
|
||||
// const messageSent = {
|
||||
// messageId: message.id,
|
||||
// iState: 'sending',
|
||||
// channel,
|
||||
// };
|
||||
// await context.operate('messageSent', {
|
||||
// id: await generateNewIdAsync(),
|
||||
// action: 'create',
|
||||
// data: {
|
||||
// id: await generateNewId(),
|
||||
// ...messageSent,
|
||||
// } as EntityDict['messageSent']['OpSchema'],
|
||||
// }, {});
|
||||
return [2 /*return*/, 1];
|
||||
var systemId, props, type, _a, application, config2, appId, dispersedData, _b, _c, _d;
|
||||
var _e;
|
||||
return tslib_1.__generator(this, function (_f) {
|
||||
switch (_f.label) {
|
||||
case 0:
|
||||
if (!WechatConverter) {
|
||||
return [2 /*return*/, 0];
|
||||
}
|
||||
systemId = message.systemId, props = message.props, type = message.type;
|
||||
return [4 /*yield*/, context.select('application', {
|
||||
data: {
|
||||
id: 1,
|
||||
name: 1,
|
||||
config: 1,
|
||||
type: 1,
|
||||
systemId: 1,
|
||||
style: 1,
|
||||
},
|
||||
filter: {
|
||||
type: 'wechatPublic',
|
||||
systemId: systemId,
|
||||
},
|
||||
}, {})];
|
||||
case 1:
|
||||
_a = tslib_1.__read.apply(void 0, [_f.sent(), 1]), application = _a[0];
|
||||
config2 = application.config;
|
||||
appId = config2.appId;
|
||||
switch (channel) {
|
||||
case 'weChat': {
|
||||
dispersedData = WechatConverter(type, props, appId);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!dispersedData) {
|
||||
return [2 /*return*/, 0];
|
||||
}
|
||||
_c = (_b = context).operate;
|
||||
_d = ['messageSent'];
|
||||
_e = {};
|
||||
return [4 /*yield*/, (0, uuid_1.generateNewIdAsync)()];
|
||||
case 2: return [4 /*yield*/, _c.apply(_b, _d.concat([(_e.id = _f.sent(),
|
||||
_e.action = 'create',
|
||||
_e.data = {
|
||||
messageId: message.id,
|
||||
data: dispersedData,
|
||||
channel: channel,
|
||||
},
|
||||
_e), {}]))];
|
||||
case 3:
|
||||
_f.sent();
|
||||
return [2 /*return*/, 1];
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
function addMessageSent(message, context) {
|
||||
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
||||
var weight, _a, result, count, result, count2, result, result;
|
||||
var weight, _a, result, count, result, count2, result;
|
||||
return tslib_1.__generator(this, function (_b) {
|
||||
switch (_b.label) {
|
||||
case 0:
|
||||
|
|
@ -52,16 +83,12 @@ function addMessageSent(message, context) {
|
|||
switch (_a) {
|
||||
case 'high': return [3 /*break*/, 1];
|
||||
case 'medium': return [3 /*break*/, 3];
|
||||
case 'low': return [3 /*break*/, 10];
|
||||
case 'data': return [3 /*break*/, 12];
|
||||
case 'low': return [3 /*break*/, 9];
|
||||
}
|
||||
return [3 /*break*/, 14];
|
||||
return [3 /*break*/, 11];
|
||||
case 1: return [4 /*yield*/, Promise.all([
|
||||
tryAddMessageSent(message, 'public', context),
|
||||
tryAddMessageSent(message, 'jPush', context),
|
||||
tryAddMessageSent(message, 'jim', context),
|
||||
tryAddMessageSent(message, 'mp', context),
|
||||
tryAddMessageSent(message, 'gsm', context),
|
||||
tryAddMessageSent(message, 'wechat', context),
|
||||
tryAddMessageSent(message, 'sms', context),
|
||||
])];
|
||||
case 2:
|
||||
result = _b.sent();
|
||||
|
|
@ -69,52 +96,41 @@ function addMessageSent(message, context) {
|
|||
case 3: return [4 /*yield*/, context.count('messageSent', {
|
||||
filter: {
|
||||
messageId: message.id,
|
||||
}
|
||||
},
|
||||
}, {})];
|
||||
case 4:
|
||||
count = _b.sent();
|
||||
if (!(count < 1)) return [3 /*break*/, 8];
|
||||
if (!(count < 1)) return [3 /*break*/, 7];
|
||||
return [4 /*yield*/, Promise.all([
|
||||
tryAddMessageSent(message, 'public', context),
|
||||
tryAddMessageSent(message, 'jPush', context),
|
||||
tryAddMessageSent(message, 'jim', context),
|
||||
tryAddMessageSent(message, 'mp', context),
|
||||
tryAddMessageSent(message, 'wechat', context),
|
||||
])];
|
||||
case 5:
|
||||
result = _b.sent();
|
||||
count2 = result.reduce(function (a, b) { return a || b; });
|
||||
if (!(count2 === 0)) return [3 /*break*/, 7];
|
||||
return [4 /*yield*/, tryAddMessageSent(message, 'gsm', context)];
|
||||
if (count2 > 0) {
|
||||
return [2 /*return*/, count2];
|
||||
}
|
||||
return [4 /*yield*/, tryAddMessageSent(message, 'sms', context)];
|
||||
case 6: return [2 /*return*/, _b.sent()];
|
||||
case 7: return [2 /*return*/, count2];
|
||||
case 8: return [4 /*yield*/, tryAddMessageSent(message, 'gsm', context)];
|
||||
case 9: return [2 /*return*/, _b.sent()];
|
||||
case 10: return [4 /*yield*/, Promise.all([
|
||||
tryAddMessageSent(message, 'public', context),
|
||||
tryAddMessageSent(message, 'jPush', context),
|
||||
tryAddMessageSent(message, 'jim', context),
|
||||
tryAddMessageSent(message, 'mp', context),
|
||||
case 7: return [4 /*yield*/, tryAddMessageSent(message, 'sms', context)];
|
||||
case 8: return [2 /*return*/, _b.sent()];
|
||||
case 9: return [4 /*yield*/, Promise.all([
|
||||
tryAddMessageSent(message, 'wechat', context),
|
||||
])];
|
||||
case 10:
|
||||
result = _b.sent();
|
||||
return [2 /*return*/, result.reduce(function (a, b) { return a || b; })];
|
||||
case 11:
|
||||
result = _b.sent();
|
||||
return [2 /*return*/, result.reduce(function (a, b) { return a || b; })];
|
||||
case 12: return [4 /*yield*/, Promise.all([
|
||||
tryAddMessageSent(message, 'jPush', context),
|
||||
tryAddMessageSent(message, 'jim', context),
|
||||
])];
|
||||
case 13:
|
||||
result = _b.sent();
|
||||
return [2 /*return*/, result.reduce(function (a, b) { return a || b; })];
|
||||
case 14:
|
||||
{
|
||||
(0, assert_1.assert)(false);
|
||||
}
|
||||
_b.label = 15;
|
||||
case 15: return [2 /*return*/];
|
||||
_b.label = 12;
|
||||
case 12: return [2 /*return*/];
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
exports.addMessageSent = addMessageSent;
|
||||
var triggers = [
|
||||
{
|
||||
name: '当创建message时,创建相应的messageSent',
|
||||
|
|
@ -130,11 +146,17 @@ var triggers = [
|
|||
case 0:
|
||||
data = operation.data, filter = operation.filter;
|
||||
fn = function (messageData) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
||||
var result;
|
||||
return tslib_1.__generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0: return [4 /*yield*/, addMessageSent(messageData, context)];
|
||||
case 1:
|
||||
_a.sent();
|
||||
result = _a.sent();
|
||||
if (result === 0) {
|
||||
Object.assign(messageData, {
|
||||
iState: 'fail',
|
||||
});
|
||||
}
|
||||
return [2 /*return*/];
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
import { Trigger } from 'oak-domain/lib/types/Trigger';
|
||||
import { EntityDict } from '../general-app-domain/EntityDict';
|
||||
import { RuntimeCxt } from '../types/RuntimeCxt';
|
||||
declare const triggers: Trigger<EntityDict, 'messageSent', RuntimeCxt>[];
|
||||
export default triggers;
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var tslib_1 = require("tslib");
|
||||
var assert_1 = require("oak-domain/lib/utils/assert");
|
||||
function sendMessage(messageSentData, context) {
|
||||
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
||||
var data, channel, messageId, _a, message, _b, application, config2, appId;
|
||||
return tslib_1.__generator(this, function (_c) {
|
||||
switch (_c.label) {
|
||||
case 0:
|
||||
data = messageSentData.data, channel = messageSentData.channel, messageId = messageSentData.messageId;
|
||||
return [4 /*yield*/, context.select('message', {
|
||||
data: {
|
||||
id: 1,
|
||||
systemId: 1,
|
||||
},
|
||||
filter: {
|
||||
id: messageId,
|
||||
},
|
||||
}, {})];
|
||||
case 1:
|
||||
_a = tslib_1.__read.apply(void 0, [_c.sent(), 1]), message = _a[0];
|
||||
return [4 /*yield*/, context.select('application', {
|
||||
data: {
|
||||
id: 1,
|
||||
name: 1,
|
||||
config: 1,
|
||||
type: 1,
|
||||
systemId: 1,
|
||||
style: 1,
|
||||
},
|
||||
filter: {
|
||||
type: 'wechatPublic',
|
||||
systemId: message.systemId,
|
||||
},
|
||||
}, {})];
|
||||
case 2:
|
||||
_b = tslib_1.__read.apply(void 0, [_c.sent(), 1]), application = _b[0];
|
||||
config2 = application.config;
|
||||
appId = config2.appId;
|
||||
return [2 /*return*/];
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
var triggers = [
|
||||
{
|
||||
name: '当创建messageSent后,业务提交后再进行推送',
|
||||
entity: 'messageSent',
|
||||
action: 'create',
|
||||
when: 'commit',
|
||||
strict: 'makeSure',
|
||||
fn: function (_a, context, params) {
|
||||
var operation = _a.operation;
|
||||
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
||||
var data, filter, fn;
|
||||
return tslib_1.__generator(this, function (_b) {
|
||||
switch (_b.label) {
|
||||
case 0:
|
||||
data = operation.data, filter = operation.filter;
|
||||
fn = function (messageSentData) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
||||
return tslib_1.__generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0: return [4 /*yield*/, sendMessage(messageSentData, context)];
|
||||
case 1:
|
||||
_a.sent();
|
||||
return [2 /*return*/];
|
||||
}
|
||||
});
|
||||
}); };
|
||||
if (!(data instanceof Array)) return [3 /*break*/, 1];
|
||||
(0, assert_1.assert)('不存在一对多的情况');
|
||||
return [3 /*break*/, 3];
|
||||
case 1: return [4 /*yield*/, fn(data)];
|
||||
case 2:
|
||||
_b.sent();
|
||||
_b.label = 3;
|
||||
case 3: return [2 /*return*/, 0];
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
];
|
||||
exports.default = triggers;
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
|
||||
.container {
|
||||
display: flex;
|
||||
}
|
||||
.drawer {
|
||||
position: fixed !important;
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@ import { Button, Space, Drawer, Modal, Tooltip } from 'antd';
|
|||
import { UpOutlined } from '@ant-design/icons';
|
||||
import { WebComponentProps } from 'oak-frontend-base';
|
||||
import { EntityDict } from '../../../general-app-domain';
|
||||
import Style from './web.module.less';
|
||||
// import OakIcon from '../../icon'
|
||||
|
||||
export default function render(props: WebComponentProps<EntityDict, 'address', true, {
|
||||
|
|
@ -48,12 +49,7 @@ export default function render(props: WebComponentProps<EntityDict, 'address', t
|
|||
}}
|
||||
title="Debug控制台"
|
||||
footer={<></>}
|
||||
rootStyle={{
|
||||
width: '100vw',
|
||||
}}
|
||||
bodyStyle={{
|
||||
width: '100vw',
|
||||
}}
|
||||
className={Style.drawer}
|
||||
>
|
||||
<input
|
||||
type="file"
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ export interface Schema extends EntityShape {
|
|||
author: String<32>; //作者
|
||||
abstract?: Text; //摘要
|
||||
content?: Text; //正文
|
||||
url?: Text; // 外部连接
|
||||
files: Array<ExtraFile>; //封面图
|
||||
sign: String<32>; //唯一标志
|
||||
}
|
||||
|
|
@ -51,6 +52,7 @@ const locale: LocaleDef<
|
|||
content: '正文',
|
||||
files: '封面图',
|
||||
iState: '状态',
|
||||
url: '外部链接',
|
||||
entity: '关联对象',
|
||||
entityId: '关联对象id',
|
||||
sign: '唯一标志',
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { LocaleDef } from 'oak-domain/lib/types/Locale';
|
|||
import { Index, ActionDef } from 'oak-domain/lib/types';
|
||||
|
||||
export interface Schema extends EntityShape {
|
||||
channel: 'public' | 'jPush' | 'jim' | 'mp' | 'gsm',
|
||||
channel: 'wechat' | 'jPush' | 'jim' | 'mp' | 'sms',
|
||||
data: Object,
|
||||
message: Message,
|
||||
data1: Object,
|
||||
|
|
@ -49,11 +49,11 @@ const locale: LocaleDef<Schema, Action, '', {
|
|||
failure: '发送失败',
|
||||
},
|
||||
channel: {
|
||||
public: '公众号',
|
||||
wechat: '公众号',
|
||||
jPush: '极光推送',
|
||||
jim: '极光消息',
|
||||
mp: '小程序',
|
||||
gsm: '短信',
|
||||
sms: '短信',
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,65 @@
|
|||
import {
|
||||
String,
|
||||
Boolean,
|
||||
Text,
|
||||
} from 'oak-domain/lib/types/DataType';
|
||||
import { ActionDef } from 'oak-domain/lib/types/Action';
|
||||
import { EntityShape } from 'oak-domain/lib/types/Entity';
|
||||
import { LocaleDef } from 'oak-domain/lib/types/Locale';
|
||||
import { Index } from 'oak-domain/lib/types/Storage';
|
||||
|
||||
export type WechatPublicConfig = {
|
||||
type: 'wechatPublic';
|
||||
appId: string;
|
||||
appSecret: string;
|
||||
};
|
||||
|
||||
export interface Schema extends EntityShape {
|
||||
entity: String<32>;
|
||||
entityId: String<64>;
|
||||
name: String<32>;
|
||||
description: Text;
|
||||
config: WechatPublicConfig;
|
||||
};
|
||||
|
||||
|
||||
const indexes: Index<Schema>[] = [
|
||||
//索引
|
||||
{
|
||||
name: 'index_name',
|
||||
attributes: [
|
||||
{
|
||||
name: 'name',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'index_entity',
|
||||
attributes: [
|
||||
{
|
||||
name: 'entity',
|
||||
},
|
||||
{
|
||||
name: 'entityId',
|
||||
}
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const locale: LocaleDef<
|
||||
Schema,
|
||||
'',
|
||||
'',
|
||||
{
|
||||
}
|
||||
> = {
|
||||
zh_CN: {
|
||||
attr: {
|
||||
name: '名称',
|
||||
entity: '对象名称',
|
||||
entityId: '对象Id',
|
||||
description: '描述',
|
||||
config: '配置',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import { generateNewId } from 'oak-domain/lib/utils/uuid';
|
||||
import { generateNewId, generateNewIdAsync } from 'oak-domain/lib/utils/uuid';
|
||||
import { Trigger, CreateTrigger, UpdateTrigger } from 'oak-domain/lib/types/Trigger';
|
||||
import { EntityDict } from '../general-app-domain/EntityDict';
|
||||
import { CreateOperationData as CreateMessageData } from '../general-app-domain/Message/Schema';
|
||||
|
|
@ -6,8 +6,9 @@ import { assert } from 'oak-domain/lib/utils/assert';
|
|||
import { RuntimeCxt } from '../types/RuntimeCxt';
|
||||
import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
|
||||
import { Schema as MessageSentSchema } from '../entities/MessageSent';
|
||||
import { generateNewIdAsync } from 'oak-domain/lib/utils/uuid';
|
||||
import { MessagePropsToSms, MessagePropsToWechat } from '../types/Message';
|
||||
import { WechatMpConfig, WechatPublicConfig, WebConfig } from '../general-app-domain/Application/Schema';
|
||||
import { initialState } from '@uiw/react-amap';
|
||||
|
||||
let SmsCoverter: MessagePropsToSms | undefined;
|
||||
let WechatConverter: MessagePropsToWechat | undefined;
|
||||
|
|
@ -22,94 +23,107 @@ export function registerMessagePropsConverter(converter: {
|
|||
}
|
||||
|
||||
|
||||
async function tryAddMessageSent(message: CreateMessageData, channel: MessageSentSchema['channel'], context: BackendRuntimeContext<EntityDict>) {
|
||||
// const { systemId, type } = message;
|
||||
// const disperse = MessageDisperse && MessageDisperse[systemId] && MessageDisperse[systemId][type] && MessageDisperse[systemId][type][channel];
|
||||
// if (!disperse) {
|
||||
// return 0;
|
||||
// }
|
||||
|
||||
// // 有配置也未必一定能发,比如说用户没有注册手机号,则无法发gsm
|
||||
// const data = disperse(message);
|
||||
// if (!data) {
|
||||
// return 0;
|
||||
// }
|
||||
|
||||
// const messageSent = {
|
||||
// messageId: message.id,
|
||||
// iState: 'sending',
|
||||
// channel,
|
||||
// };
|
||||
// await context.operate('messageSent', {
|
||||
// id: await generateNewIdAsync(),
|
||||
// action: 'create',
|
||||
// data: {
|
||||
// id: await generateNewId(),
|
||||
// ...messageSent,
|
||||
// } as EntityDict['messageSent']['OpSchema'],
|
||||
// }, {});
|
||||
async function tryAddMessageSent(message: CreateMessageData, channel: string, context: BackendRuntimeContext<EntityDict>) {
|
||||
if (!WechatConverter) {
|
||||
return 0;
|
||||
}
|
||||
const { systemId, props, type } = message;
|
||||
const [application] = await context.select(
|
||||
'application',
|
||||
{
|
||||
data: {
|
||||
id: 1,
|
||||
name: 1,
|
||||
config: 1,
|
||||
type: 1,
|
||||
systemId: 1,
|
||||
style: 1,
|
||||
},
|
||||
filter: {
|
||||
type: 'wechatPublic',
|
||||
systemId,
|
||||
},
|
||||
},
|
||||
{}
|
||||
);
|
||||
const config2 = application.config as WechatPublicConfig;
|
||||
const appId = config2.appId;
|
||||
let dispersedData;
|
||||
switch (channel) {
|
||||
case 'weChat': {
|
||||
dispersedData = WechatConverter(type, props, appId);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!dispersedData) {
|
||||
return 0;
|
||||
}
|
||||
await context.operate('messageSent', {
|
||||
id: await generateNewIdAsync(),
|
||||
action: 'create',
|
||||
data: {
|
||||
messageId: message.id,
|
||||
data: dispersedData,
|
||||
channel,
|
||||
},
|
||||
}, {});
|
||||
return 1;
|
||||
}
|
||||
|
||||
async function addMessageSent(message: CreateMessageData, context: BackendRuntimeContext<EntityDict>) {
|
||||
export async function addMessageSent(message: CreateMessageData, context: BackendRuntimeContext<EntityDict>) {
|
||||
const { weight } = message;
|
||||
|
||||
switch (weight) {
|
||||
case 'high': {
|
||||
// 高权重的,所有渠道一起推
|
||||
const result = await Promise.all([
|
||||
tryAddMessageSent(message, 'public', context),
|
||||
tryAddMessageSent(message, 'jPush', context),
|
||||
tryAddMessageSent(message, 'jim', context),
|
||||
tryAddMessageSent(message, 'mp', context),
|
||||
tryAddMessageSent(message, 'gsm', context),
|
||||
tryAddMessageSent(message, 'wechat', context),
|
||||
tryAddMessageSent(message, 'sms', context),
|
||||
]);
|
||||
return result.reduce((a, b) => a || b);
|
||||
}
|
||||
case 'medium': {
|
||||
// 中权重的,先推三次免费渠道,失败了再推收费渠道
|
||||
// 中权重的,先推免费渠道,失败了再推收费渠道
|
||||
const count = await context.count(
|
||||
'messageSent',
|
||||
{
|
||||
filter: {
|
||||
messageId: message.id,
|
||||
}
|
||||
},
|
||||
},
|
||||
{},
|
||||
);
|
||||
if (count < 1) {
|
||||
const result = await Promise.all([
|
||||
tryAddMessageSent(message, 'public', context),
|
||||
tryAddMessageSent(message, 'jPush', context),
|
||||
tryAddMessageSent(message, 'jim', context),
|
||||
tryAddMessageSent(message, 'mp', context),
|
||||
tryAddMessageSent(message, 'wechat', context),
|
||||
]);
|
||||
const count2 = result.reduce((a, b) => a || b);
|
||||
if (count2 === 0) {
|
||||
return await tryAddMessageSent(message, 'gsm', context);
|
||||
if (count2 > 0) {
|
||||
return count2;
|
||||
}
|
||||
return count2;
|
||||
return await tryAddMessageSent(message, 'sms', context);
|
||||
}
|
||||
return await tryAddMessageSent(message, 'gsm', context);
|
||||
return await tryAddMessageSent(message, 'sms', context);
|
||||
}
|
||||
case 'low': {
|
||||
// 低权重的,只推免费渠道
|
||||
const result = await Promise.all([
|
||||
tryAddMessageSent(message, 'public', context),
|
||||
tryAddMessageSent(message, 'jPush', context),
|
||||
tryAddMessageSent(message, 'jim', context),
|
||||
tryAddMessageSent(message, 'mp', context),
|
||||
]);
|
||||
return result.reduce((a, b) => a || b);
|
||||
}
|
||||
case 'data': {
|
||||
// 透传数据的,只推JPush
|
||||
const result = await Promise.all([
|
||||
tryAddMessageSent(message, 'jPush', context),
|
||||
tryAddMessageSent(message, 'jim', context),
|
||||
tryAddMessageSent(message, 'wechat', context),
|
||||
]);
|
||||
return result.reduce((a, b) => a || b);
|
||||
}
|
||||
// case 'data': {
|
||||
|
||||
// // 透传数据的,只推JPush
|
||||
// const result = await Promise.all([
|
||||
// tryAddMessageSent(message, 'jPush', context),
|
||||
// tryAddMessageSent(message, 'jim', context),
|
||||
// ]);
|
||||
// return result.reduce((a, b) => a || b);
|
||||
// }
|
||||
default: {
|
||||
assert(false);
|
||||
}
|
||||
|
|
@ -126,7 +140,14 @@ const triggers: Trigger<EntityDict, 'message', RuntimeCxt>[] = [
|
|||
fn: async ({ operation }, context, params) => {
|
||||
const { data, filter } = operation;
|
||||
const fn = async (messageData: CreateMessageData) => {
|
||||
await addMessageSent(messageData, context as BackendRuntimeContext<EntityDict>);
|
||||
const result = await addMessageSent(messageData, context as BackendRuntimeContext<EntityDict>);
|
||||
if (result === 0) {
|
||||
Object.assign(
|
||||
messageData, {
|
||||
iState: 'fail',
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
if (data instanceof Array) {
|
||||
assert('不存在一对多的情况')
|
||||
|
|
|
|||
|
|
@ -0,0 +1,72 @@
|
|||
import { Trigger, CreateTrigger, UpdateTrigger } from 'oak-domain/lib/types/Trigger';
|
||||
import { EntityDict } from '../general-app-domain/EntityDict';
|
||||
import { CreateOperationData as CreateMessageSentData } from '../general-app-domain/MessageSent/Schema';
|
||||
import { assert } from 'oak-domain/lib/utils/assert';
|
||||
import { RuntimeCxt } from '../types/RuntimeCxt';
|
||||
import { addMessageSent } from './message';
|
||||
import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
|
||||
import { WechatMpConfig, WechatPublicConfig, WebConfig } from '../general-app-domain/Application/Schema';
|
||||
import { WechatSDK } from 'oak-external-sdk';
|
||||
|
||||
async function sendMessage(messageSentData: CreateMessageSentData, context: BackendRuntimeContext<EntityDict>) {
|
||||
const { data, channel, messageId } = messageSentData;
|
||||
const [message] = await context.select(
|
||||
'message',
|
||||
|
||||
{
|
||||
data: {
|
||||
id: 1,
|
||||
systemId: 1,
|
||||
},
|
||||
filter: {
|
||||
id: messageId,
|
||||
},
|
||||
},
|
||||
{}
|
||||
);
|
||||
const [application] = await context.select(
|
||||
'application',
|
||||
{
|
||||
data: {
|
||||
id: 1,
|
||||
name: 1,
|
||||
config: 1,
|
||||
type: 1,
|
||||
systemId: 1,
|
||||
style: 1,
|
||||
},
|
||||
filter: {
|
||||
type: 'wechatPublic',
|
||||
systemId: message.systemId,
|
||||
},
|
||||
},
|
||||
{}
|
||||
);
|
||||
const config2 = application.config as WechatPublicConfig;
|
||||
const appId = config2.appId;
|
||||
|
||||
}
|
||||
|
||||
const triggers: Trigger<EntityDict, 'messageSent', RuntimeCxt>[] = [
|
||||
{
|
||||
name: '当创建messageSent后,业务提交后再进行推送',
|
||||
entity: 'messageSent',
|
||||
action: 'create',
|
||||
when: 'commit',
|
||||
strict: 'makeSure',
|
||||
fn: async ({ operation }, context, params) => {
|
||||
const { data, filter } = operation;
|
||||
const fn = async (messageSentData: CreateMessageSentData) => {
|
||||
await sendMessage(messageSentData, context as BackendRuntimeContext<EntityDict>);
|
||||
}
|
||||
if (data instanceof Array) {
|
||||
assert('不存在一对多的情况')
|
||||
}
|
||||
else {
|
||||
await fn(data);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
} as CreateTrigger<EntityDict, 'messageSent', RuntimeCxt>,
|
||||
];
|
||||
export default triggers;
|
||||
Loading…
Reference in New Issue