2026-07-27 11:28:33 +08:00

185 lines
4.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const request = require("../request");
const accessToken = require("../token");
const api = require("../../api");
/**
* 合并机构标签
*
* @param {*} context
*/
exports.getCorpTagList = async (context) => {
const { corpId } = context;
let res = await this.getWeComCorpTag({ corpId });
if (res.errcode == 0) {
let { tag_group } = res;
for (let item of tag_group) {
let { group_id, group_name, order, tag } = item;
await api.getCorpApi({
type: "addCorpGroupTag",
corpId,
groupId: group_id,
groupName: group_name,
createType: "corpAsync",
order,
tag,
});
}
}
return {
success: true,
message: "同步成功",
};
};
/**
* 获取企业微信标签
* @param {string} env 环境ID
* @param {string} corpId 企业微信ID
* @returns
**/
exports.getWeComCorpTag = async ({ env, corpId }) => {
let corpRes = await api.getCorpApi({
type: "getCorpInfo",
corpId,
});
let corp = corpRes.data[0];
let access_token = await accessToken.getToken({
corpId: corpId,
permanentCode: corp.permanent_code,
});
let url = `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list?access_token=${access_token}`;
let res = await request.main(url, null, "GET");
return res;
};
/**
* 合并企业微信标签
* @param {string} corpId 企业微信ID
* @param {string} externalUserId 外部联系人ID
* @param {string} env 环境ID
* @param {string} tagType 变更类型 删除标签时此项为tag删除标签组时此项为tag_group
* @param {string} id 标签ID 标签或标签组的ID
* @param {string} changeType 标签类型 delete-删除 update-更新 create-新增
*/
exports.syncCorpTag = async ({ corpId, env, tagType, id, changeType }) => {
let res = await this.getWeComCorpTag({ env, corpId });
if (res.errcode == 0) {
let { tag_group } = res;
if (tag_group.length == 0) {
if (tagType == "tag_group" && changeType == "delete") {
return await updateGropTagGroup({ changeType, id, corpId, env });
}
}
for (let item of tag_group) {
// 标签组
let { group_id, tag } = item;
if (
(tagType == "tag_group" &&
(group_id == id || changeType == "delete")) ||
(changeType == "shuffle" && group_id == id)
) {
return await updateGropTagGroup({ changeType, id, corpId, env, item });
}
if (tagType == "tag" && changeType == "delete") {
return await updateGropTagGroup({
changeType: "update",
id: group_id,
corpId,
env,
item,
});
}
for (let tagItem of tag) {
if (tagType == "tag" && tagItem.id == id) {
console.log("修改标签tag", {
changeType: "update",
id: group_id,
corpId,
env,
});
return await updateGropTagGroup({
changeType: "update",
id: group_id,
corpId,
env,
item,
});
}
}
}
}
};
/**
* 同步企业微信标签组
* @param {string} corpId 企业微信ID
* @param {string} env 环境ID
* @param {string} tagType 标签类型 delete-删除 update-更新 create-新增
* @param {string} id 标签组的ID
*/
async function updateGropTagGroup({ changeType, id, corpId, env, item = {} }) {
try {
let type = "";
let params = {
corpId,
groupId: id,
groupName: item.group_name,
order: item.order,
tag: item.tag,
};
if (changeType == "delete") {
type = "deleteCorpGroupTag";
} else if (changeType == "update" || changeType == "shuffle") {
// 更新标签组
type = "updateCorpGroupTag";
} else if (changeType == "create") {
// 新建标签组
type = "addCorpGroupTag";
params["createType"] = "corpAsync";
}
return await api.getCorpApi({
type,
...params,
});
} catch (e) {
return {
success: false,
message: "同步企业微信标签组失败",
};
}
}
/**
* 同步企业微信标签
* @param {string} corpId 企业微信ID
* @param {string} env 环境ID
* @param {string} tagType 标签类型 delete-删除 update-更新 create-新增
* @param {string} id 标签的ID
* @param {string} groupId 标签组的ID
*/
async function updateGropTag({ changeType, id, corpId, env, item, groupId }) {
try {
let type = "";
if (changeType == "delete") {
// 删除标签
type = "deleteCorpTag";
} else if (changeType == "update") {
type = "updateCorpTag";
} else if (changeType == "create") {
// 新建标签
type = "addCorpTagToGroup";
}
return await api.getCorpApi({
type: type,
corpid: corpId,
groupId,
id,
env,
name: item.name,
order: item.order,
});
} catch (e) {
return {
success: false,
message: "同步企业微信标签失败",
};
}
}