458 lines
18 KiB
JavaScript
458 lines
18 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.syncToWechat = exports.syncToLocale = exports.tagging = exports.getSubscribedUserInfo = exports.getUsers = exports.getUserTags = exports.batchuntagging = exports.batchtagging = exports.getTagUsers = void 0;
|
|
const tslib_1 = require("tslib");
|
|
const WechatSDK_1 = tslib_1.__importDefault(require("oak-external-sdk/lib/WechatSDK"));
|
|
const wechatPublicException_1 = require("../utils/wechatPublicException");
|
|
const types_1 = require("oak-domain/lib/types");
|
|
const uuid_1 = require("oak-domain/lib/utils/uuid");
|
|
const assert_1 = require("oak-domain/lib/utils/assert");
|
|
async function getWechatPublicConfig(applicationId, context) {
|
|
const [application] = await context.select('application', {
|
|
data: {
|
|
id: 1,
|
|
config: 1,
|
|
type: 1,
|
|
},
|
|
filter: {
|
|
id: applicationId,
|
|
},
|
|
}, {
|
|
dontCollect: true
|
|
});
|
|
return application;
|
|
}
|
|
async function getSubScribedUsers(applicationId, context) {
|
|
const subscribedUsers = await context.select('wechatUser', {
|
|
data: {
|
|
id: 1,
|
|
applicationId: 1,
|
|
openId: 1,
|
|
subscribed: 1,
|
|
origin: 1,
|
|
},
|
|
filter: {
|
|
applicationId,
|
|
subscribed: true,
|
|
origin: 'public'
|
|
},
|
|
}, {
|
|
dontCollect: true
|
|
});
|
|
return subscribedUsers;
|
|
}
|
|
async function getSubScribedUserByOpenId(applicationId, openId, context) {
|
|
const [subscribedUser] = await context.select('wechatUser', {
|
|
data: {
|
|
id: 1,
|
|
applicationId: 1,
|
|
openId: 1,
|
|
subscribed: 1,
|
|
origin: 1,
|
|
},
|
|
filter: {
|
|
applicationId,
|
|
subscribed: true,
|
|
origin: 'public',
|
|
openId,
|
|
},
|
|
}, {
|
|
dontCollect: true
|
|
});
|
|
return subscribedUser.id;
|
|
}
|
|
async function getWechatPublicTagId(params, context) {
|
|
const [tag] = await context.select('wechatPublicTag', {
|
|
data: {
|
|
id: 1,
|
|
wechatId: 1,
|
|
applicationId: 1,
|
|
},
|
|
filter: {
|
|
applicationId: params.applicationId,
|
|
wechatId: params.tagId
|
|
},
|
|
}, {
|
|
dontCollect: true
|
|
});
|
|
(0, assert_1.assert)(tag.id);
|
|
return tag.id;
|
|
}
|
|
async function getUserWechatPublicTagsByOpenId(applicationId, openId, context) {
|
|
const userWechatPublicTags = await context.select('userWechatPublicTag', {
|
|
data: {
|
|
id: 1,
|
|
wechatPublicTagId: 1,
|
|
wechatPublicTag: {
|
|
wechatId: 1,
|
|
},
|
|
wechatUserId: 1,
|
|
sync: 1,
|
|
},
|
|
filter: {
|
|
wechatPublicTag: {
|
|
applicationId,
|
|
},
|
|
wechatUser: {
|
|
applicationId,
|
|
openId: openId
|
|
}
|
|
},
|
|
}, {
|
|
dontCollect: true
|
|
});
|
|
return userWechatPublicTags;
|
|
}
|
|
async function getUserWechatPublicTagById(applicationId, id, context) {
|
|
const [userWechatPublicTag] = await context.select('userWechatPublicTag', {
|
|
data: {
|
|
id: 1,
|
|
wechatPublicTagId: 1,
|
|
wechatPublicTag: {
|
|
wechatId: 1,
|
|
},
|
|
wechatUserId: 1,
|
|
sync: 1,
|
|
iState: 1,
|
|
},
|
|
filter: {
|
|
wechatPublicTag: {
|
|
applicationId,
|
|
},
|
|
wechatUser: {
|
|
applicationId,
|
|
},
|
|
id,
|
|
},
|
|
}, {
|
|
dontCollect: true
|
|
});
|
|
return userWechatPublicTag;
|
|
}
|
|
async function getTagUsers(params, context) {
|
|
const application = await getWechatPublicConfig(params.applicationId, context);
|
|
(0, assert_1.assert)(application);
|
|
const { type, config, systemId } = application;
|
|
(0, assert_1.assert)(type === 'wechatPublic');
|
|
let appId, appSecret;
|
|
const config2 = config;
|
|
appId = config2.appId;
|
|
appSecret = config2.appSecret;
|
|
const wechatInstance = WechatSDK_1.default.getInstance(appId, type, appSecret);
|
|
try {
|
|
const result = await wechatInstance.getTagUsers(params.tagId);
|
|
}
|
|
catch (e) {
|
|
throw new types_1.OakPreConditionUnsetException(`${(0, wechatPublicException_1.handleException)(e)}`);
|
|
}
|
|
}
|
|
exports.getTagUsers = getTagUsers;
|
|
async function batchtagging(params, context) {
|
|
const application = await getWechatPublicConfig(params.applicationId, context);
|
|
(0, assert_1.assert)(application);
|
|
const { type, config, systemId } = application;
|
|
(0, assert_1.assert)(type === 'wechatPublic');
|
|
let appId, appSecret;
|
|
const config2 = config;
|
|
appId = config2.appId;
|
|
appSecret = config2.appSecret;
|
|
const wechatInstance = WechatSDK_1.default.getInstance(appId, type, appSecret);
|
|
const result = await wechatInstance.batchtagging(params.openIdList, params.tagId);
|
|
return result;
|
|
}
|
|
exports.batchtagging = batchtagging;
|
|
async function batchuntagging(params, context) {
|
|
const application = await getWechatPublicConfig(params.applicationId, context);
|
|
(0, assert_1.assert)(application);
|
|
const { type, config, systemId } = application;
|
|
(0, assert_1.assert)(type === 'wechatPublic');
|
|
let appId, appSecret;
|
|
const config2 = config;
|
|
appId = config2.appId;
|
|
appSecret = config2.appSecret;
|
|
const wechatInstance = WechatSDK_1.default.getInstance(appId, type, appSecret);
|
|
const result = await wechatInstance.batchuntagging(params.openIdList, params.tagId);
|
|
return result;
|
|
}
|
|
exports.batchuntagging = batchuntagging;
|
|
async function getUserTags(params, context) {
|
|
const application = await getWechatPublicConfig(params.applicationId, context);
|
|
(0, assert_1.assert)(application);
|
|
const { type, config, systemId } = application;
|
|
(0, assert_1.assert)(type === 'wechatPublic');
|
|
let appId, appSecret;
|
|
const config2 = config;
|
|
appId = config2.appId;
|
|
appSecret = config2.appSecret;
|
|
const wechatInstance = WechatSDK_1.default.getInstance(appId, type, appSecret);
|
|
try {
|
|
const result = await wechatInstance.getUserTags(params.openId);
|
|
return result;
|
|
}
|
|
catch (e) {
|
|
throw new types_1.OakPreConditionUnsetException(`${(0, wechatPublicException_1.handleException)(e)}`);
|
|
}
|
|
}
|
|
exports.getUserTags = getUserTags;
|
|
async function getUsers(params, context) {
|
|
const application = await getWechatPublicConfig(params.applicationId, context);
|
|
(0, assert_1.assert)(application);
|
|
const { type, config, systemId } = application;
|
|
(0, assert_1.assert)(type === 'wechatPublic');
|
|
let appId, appSecret;
|
|
const config2 = config;
|
|
appId = config2.appId;
|
|
appSecret = config2.appSecret;
|
|
const wechatInstance = WechatSDK_1.default.getInstance(appId, type, appSecret);
|
|
try {
|
|
const result = await wechatInstance.getUsers(params.nextOpenId);
|
|
return result;
|
|
}
|
|
catch (e) {
|
|
throw new types_1.OakPreConditionUnsetException(`${(0, wechatPublicException_1.handleException)(e)}`);
|
|
}
|
|
}
|
|
exports.getUsers = getUsers;
|
|
async function getSubscribedUserInfo(params, context) {
|
|
const application = await getWechatPublicConfig(params.applicationId, context);
|
|
(0, assert_1.assert)(application);
|
|
const { type, config, systemId } = application;
|
|
(0, assert_1.assert)(type === 'wechatPublic');
|
|
let appId, appSecret;
|
|
const config2 = config;
|
|
appId = config2.appId;
|
|
appSecret = config2.appSecret;
|
|
const wechatInstance = WechatSDK_1.default.getInstance(appId, type, appSecret);
|
|
try {
|
|
const userInfos = await wechatInstance.getSubscribedUserInfo(params.openId);
|
|
return userInfos;
|
|
}
|
|
catch (e) {
|
|
throw new types_1.OakPreConditionUnsetException(`${(0, wechatPublicException_1.handleException)(e)}`);
|
|
}
|
|
}
|
|
exports.getSubscribedUserInfo = getSubscribedUserInfo;
|
|
async function tagging(params, context) {
|
|
const application = await getWechatPublicConfig(params.applicationId, context);
|
|
(0, assert_1.assert)(application);
|
|
const { type, config, systemId } = application;
|
|
(0, assert_1.assert)(type === 'wechatPublic');
|
|
let appId, appSecret;
|
|
const config2 = config;
|
|
appId = config2.appId;
|
|
appSecret = config2.appSecret;
|
|
const wechatInstance = WechatSDK_1.default.getInstance(appId, type, appSecret);
|
|
const userWechatPublicTags = await getUserWechatPublicTagsByOpenId(params.applicationId, params.openId, context);
|
|
const tagsToAdd = userWechatPublicTags?.length > 0 ? params.tagIdList?.filter((ele) => {
|
|
return !userWechatPublicTags.some(item => item?.wechatPublicTag.wechatId === ele);
|
|
}) : params.tagIdList;
|
|
const tagsToRemove = params.tagIdList?.length > 0 ? userWechatPublicTags.filter((ele) => {
|
|
return !params.tagIdList?.some((item) => item === ele?.wechatPublicTag?.wechatId);
|
|
}) : userWechatPublicTags;
|
|
for (let tagId of tagsToAdd) {
|
|
try {
|
|
const result = await batchtagging({ applicationId: params.applicationId, openIdList: [params.openId], tagId }, context);
|
|
await context.operate('userWechatPublicTag', {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
action: 'create',
|
|
data: {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
wechatUserId: await getSubScribedUserByOpenId(params.applicationId, params.openId, context),
|
|
wechatPublicTagId: await getWechatPublicTagId({ applicationId: params.applicationId, tagId }, context),
|
|
sync: true,
|
|
syncAt: Date.now(),
|
|
iState: 'success',
|
|
},
|
|
}, {});
|
|
}
|
|
catch (e) {
|
|
await context.operate('userWechatPublicTag', {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
action: 'create',
|
|
data: {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
wechatUserId: await getSubScribedUserByOpenId(params.applicationId, params.openId, context),
|
|
wechatPublicTagId: await getWechatPublicTagId({ applicationId: params.applicationId, tagId }, context),
|
|
sync: false,
|
|
syncAt: Date.now(),
|
|
iState: 'fail',
|
|
},
|
|
}, {});
|
|
throw e;
|
|
}
|
|
}
|
|
for (let userWechatPublicTag of tagsToRemove) {
|
|
try {
|
|
const result = await batchuntagging({ applicationId: params.applicationId, openIdList: [params.openId], tagId: userWechatPublicTag.wechatPublicTag?.wechatId }, context);
|
|
await context.operate('userWechatPublicTag', {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
action: 'remove',
|
|
data: {},
|
|
filter: {
|
|
id: userWechatPublicTag.id
|
|
}
|
|
}, {});
|
|
}
|
|
catch (e) {
|
|
await context.operate('userWechatPublicTag', {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
action: 'update',
|
|
data: {
|
|
sync: false,
|
|
syncAt: Date.now(),
|
|
iState: 'fail',
|
|
},
|
|
filter: {
|
|
id: userWechatPublicTag.id
|
|
}
|
|
}, {});
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
exports.tagging = tagging;
|
|
async function syncToLocale(params, context) {
|
|
const application = await getWechatPublicConfig(params.applicationId, context);
|
|
(0, assert_1.assert)(application);
|
|
const { type, config, systemId } = application;
|
|
(0, assert_1.assert)(type === 'wechatPublic');
|
|
let appId, appSecret;
|
|
const config2 = config;
|
|
appId = config2.appId;
|
|
appSecret = config2.appSecret;
|
|
const wechatInstance = WechatSDK_1.default.getInstance(appId, type, appSecret);
|
|
const userWechatPublicTags = await getUserWechatPublicTagsByOpenId(params.applicationId, params.openId, context);
|
|
const { tagid_list } = await getUserTags({ applicationId: params.applicationId, openId: params.openId }, context);
|
|
const tagsToAdd = userWechatPublicTags?.length > 0 ? tagid_list?.filter((ele) => {
|
|
return !userWechatPublicTags.some(item => item?.wechatPublicTag.wechatId === ele);
|
|
}) : tagid_list;
|
|
const tagsToRemove = tagid_list?.length > 0 ? userWechatPublicTags.filter((ele) => {
|
|
return !tagid_list?.some((item) => item === ele?.wechatPublicTag?.wechatId);
|
|
}) : userWechatPublicTags;
|
|
for (let tagId of tagsToAdd) {
|
|
try {
|
|
const result = await batchtagging({ applicationId: params.applicationId, openIdList: [params.openId], tagId }, context);
|
|
await context.operate('userWechatPublicTag', {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
action: 'create',
|
|
data: {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
wechatUserId: await getSubScribedUserByOpenId(params.applicationId, params.openId, context),
|
|
wechatPublicTagId: await getWechatPublicTagId({ applicationId: params.applicationId, tagId }, context),
|
|
sync: true,
|
|
syncAt: Date.now(),
|
|
iState: 'success',
|
|
},
|
|
}, {});
|
|
}
|
|
catch (e) {
|
|
await context.operate('userWechatPublicTag', {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
action: 'create',
|
|
data: {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
wechatUserId: await getSubScribedUserByOpenId(params.applicationId, params.openId, context),
|
|
wechatPublicTagId: await getWechatPublicTagId({ applicationId: params.applicationId, tagId }, context),
|
|
sync: false,
|
|
syncAt: Date.now(),
|
|
iState: 'fail',
|
|
},
|
|
}, {});
|
|
throw e;
|
|
}
|
|
}
|
|
for (let userWechatPublicTag of tagsToRemove) {
|
|
try {
|
|
const result = await batchuntagging({ applicationId: params.applicationId, openIdList: [params.openId], tagId: userWechatPublicTag.wechatPublicTag?.wechatId }, context);
|
|
await context.operate('userWechatPublicTag', {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
action: 'remove',
|
|
data: {},
|
|
filter: {
|
|
id: userWechatPublicTag.id
|
|
}
|
|
}, {});
|
|
}
|
|
catch (e) {
|
|
await context.operate('userWechatPublicTag', {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
action: 'update',
|
|
data: {
|
|
sync: false,
|
|
syncAt: Date.now(),
|
|
iState: 'fail',
|
|
},
|
|
filter: {
|
|
id: userWechatPublicTag.id
|
|
}
|
|
}, {});
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
exports.syncToLocale = syncToLocale;
|
|
async function syncToWechat(params, context) {
|
|
const application = await getWechatPublicConfig(params.applicationId, context);
|
|
(0, assert_1.assert)(application);
|
|
const { type, config, systemId } = application;
|
|
(0, assert_1.assert)(type === 'wechatPublic');
|
|
let appId, appSecret;
|
|
const config2 = config;
|
|
appId = config2.appId;
|
|
appSecret = config2.appSecret;
|
|
const wechatInstance = WechatSDK_1.default.getInstance(appId, type, appSecret);
|
|
const userWechatPublicTag = await getUserWechatPublicTagById(params.applicationId, params.id, context);
|
|
const { tagid_list } = await getUserTags({ applicationId: params.applicationId, openId: params.openId }, context);
|
|
if (tagid_list?.find((ele) => ele === userWechatPublicTag.wechatPublicTag?.wechatId) && userWechatPublicTag.iState === 'fail') {
|
|
try {
|
|
const result = await batchuntagging({ applicationId: params.applicationId, openIdList: [params.openId], tagId: userWechatPublicTag.wechatPublicTag?.wechatId }, context);
|
|
await context.operate('userWechatPublicTag', {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
action: 'remove',
|
|
data: {},
|
|
filter: {
|
|
id: userWechatPublicTag.id
|
|
}
|
|
}, {});
|
|
}
|
|
catch (e) {
|
|
throw new types_1.OakPreConditionUnsetException(`${(0, wechatPublicException_1.handleException)(e)}`);
|
|
}
|
|
}
|
|
if (!tagid_list?.find((ele) => ele === userWechatPublicTag.wechatPublicTag?.wechatId) && userWechatPublicTag.iState === 'fail') {
|
|
try {
|
|
const result = await batchtagging({ applicationId: params.applicationId, openIdList: [params.openId], tagId: userWechatPublicTag.wechatPublicTag?.wechatId }, context);
|
|
await context.operate('userWechatPublicTag', {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
action: 'update',
|
|
data: {
|
|
sync: true,
|
|
syncAt: Date.now(),
|
|
iState: 'success',
|
|
},
|
|
filter: {
|
|
id: params.id
|
|
}
|
|
}, {});
|
|
}
|
|
catch (e) {
|
|
throw new types_1.OakPreConditionUnsetException(`${(0, wechatPublicException_1.handleException)(e)}`);
|
|
}
|
|
}
|
|
if (tagid_list?.find((ele) => ele === userWechatPublicTag.wechatPublicTag?.wechatId) && userWechatPublicTag.iState === 'success') {
|
|
await context.operate('userWechatPublicTag', {
|
|
id: await (0, uuid_1.generateNewIdAsync)(),
|
|
action: 'update',
|
|
data: {
|
|
sync: true,
|
|
syncAt: Date.now(),
|
|
iState: 'success',
|
|
},
|
|
filter: {
|
|
id: params.id
|
|
}
|
|
}, {});
|
|
}
|
|
}
|
|
exports.syncToWechat = syncToWechat;
|