185 lines
4.9 KiB
JavaScript
Raw Permalink Normal View History

2026-07-27 11:28:33 +08:00
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: "同步企业微信标签失败",
};
}
}