488 lines
12 KiB
JavaScript
488 lines
12 KiB
JavaScript
|
|
const utils = require("../utils");
|
|||
|
|
const api = require("../../api");
|
|||
|
|
const common = require("../../common");
|
|||
|
|
|
|||
|
|
let db = null;
|
|||
|
|
exports.main = async (event, mongodb) => {
|
|||
|
|
db = mongodb;
|
|||
|
|
switch (event.type) {
|
|||
|
|
case "getTeamData":
|
|||
|
|
return await getTeamData(event);
|
|||
|
|
case "getAllTeamByCorp":
|
|||
|
|
return await exports.getAllTeamByCorp(event);
|
|||
|
|
case "getTeamBymember":
|
|||
|
|
return await exports.getTeamBymember(event);
|
|||
|
|
case "getTeamByMainLeaderUserId":
|
|||
|
|
return await exports.getTeamByMainLeaderUserId(event);
|
|||
|
|
case "getCorpTeams":
|
|||
|
|
return await exports.getCorpTeams(event);
|
|||
|
|
case "getTeamById":
|
|||
|
|
return await exports.getTeamById(event);
|
|||
|
|
case "updateMemberRolesByTeam":
|
|||
|
|
return await exports.updateMemberRolesByTeam(event);
|
|||
|
|
case "getTeamLeaderNumByUserId":
|
|||
|
|
return await exports.getTeamLeaderNumByUserId(event);
|
|||
|
|
case "updateTeam":
|
|||
|
|
return await exports.updateTeam(event);
|
|||
|
|
case "getCustomTeamData":
|
|||
|
|
return await exports.getCustomTeamData(event);
|
|||
|
|
case "deleteCorpTeam":
|
|||
|
|
return await exports.deleteCorpTeam(event);
|
|||
|
|
case "getTeamNamesByTeamIds":
|
|||
|
|
return await getTeamNamesByTeamIds(event);
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
async function getTeamNamesByTeamIds({ corpId, teamIds }) {
|
|||
|
|
// 查询团队名称
|
|||
|
|
const { data: teams } = await db
|
|||
|
|
.collection("team")
|
|||
|
|
.find({ corpId, teamId: { $in: teamIds } })
|
|||
|
|
.toArray();
|
|||
|
|
const teamNames = teams.map((item) => item.name);
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
data: teamNames,
|
|||
|
|
message: "获取团队名称成功",
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
async function getTeamData(event) {
|
|||
|
|
const { env, teamId } = event;
|
|||
|
|
try {
|
|||
|
|
// 获取团队信息
|
|||
|
|
const team = await db.collection("team").findOne({ teamId });
|
|||
|
|
if (team) {
|
|||
|
|
// 获取团队成员信息
|
|||
|
|
const corpMember = await getMemberList(team.corpId);
|
|||
|
|
let { memberList } = team;
|
|||
|
|
team.memberList = memberList
|
|||
|
|
.map((userid) => {
|
|||
|
|
return corpMember.find((item) => item.userid === userid);
|
|||
|
|
})
|
|||
|
|
.filter((i) => i);
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
message: "获取团队信息成功",
|
|||
|
|
data: team,
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
return {
|
|||
|
|
success: false,
|
|||
|
|
message: "未查询到团队信息",
|
|||
|
|
};
|
|||
|
|
} catch (error) {
|
|||
|
|
return {
|
|||
|
|
success: false,
|
|||
|
|
message: error.message,
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取团队成员信息
|
|||
|
|
async function getMemberList(corpId) {
|
|||
|
|
return await db.collection("corp-member").find({ corpId }).toArray();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
exports.getAllTeamByCorp = async (event) => {
|
|||
|
|
const { env, corpId } = event;
|
|||
|
|
try {
|
|||
|
|
const teams = await db.collection("team").find({ corpId }).toArray();
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
message: "获取成功",
|
|||
|
|
data: teams,
|
|||
|
|
};
|
|||
|
|
} catch (error) {
|
|||
|
|
return {
|
|||
|
|
success: false,
|
|||
|
|
message: error.message,
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
exports.getTeamBymember = async (event) => {
|
|||
|
|
const { corpUserId, corpId } = event;
|
|||
|
|
try {
|
|||
|
|
const teams = await db
|
|||
|
|
.collection("team")
|
|||
|
|
.find({ memberList: corpUserId, corpId })
|
|||
|
|
.toArray();
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
message: "获取成功",
|
|||
|
|
data: teams,
|
|||
|
|
};
|
|||
|
|
} catch (error) {
|
|||
|
|
return {
|
|||
|
|
success: false,
|
|||
|
|
message: error.message,
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
exports.getTeamByMainLeaderUserId = async (context) => {
|
|||
|
|
const { env, userId, corpId } = context;
|
|||
|
|
try {
|
|||
|
|
const teams = await db
|
|||
|
|
.collection("team")
|
|||
|
|
.find({ corpId, memberLeaderList: userId })
|
|||
|
|
.toArray();
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
message: "获取成功",
|
|||
|
|
data: teams,
|
|||
|
|
};
|
|||
|
|
} catch (error) {
|
|||
|
|
return {
|
|||
|
|
success: false,
|
|||
|
|
message: error.message,
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
exports.getCorpTeams = async (context) => {
|
|||
|
|
const { env, page, pageSize, corpId, name = "", userId = "", fields, showCustomerCount = true } = context;
|
|||
|
|
const query = { corpId };
|
|||
|
|
if (typeof name === "string" && name.trim()) {
|
|||
|
|
query.name = { $regex: ".*" + name.trim() + ".*", $options: "i" };
|
|||
|
|
}
|
|||
|
|
if (userId) query.memberList = userId;
|
|||
|
|
const teamDB = db.collection("team");
|
|||
|
|
const total = await teamDB.countDocuments(query);
|
|||
|
|
const pages = Math.ceil(total / pageSize);
|
|||
|
|
let list = [];
|
|||
|
|
const teams = await db.collection("team")
|
|||
|
|
.find(query, Object.prototype.toString.call(fields) === "[object Object]" ? fields : {})
|
|||
|
|
.skip((page - 1) * pageSize)
|
|||
|
|
.limit(pageSize)
|
|||
|
|
.toArray();
|
|||
|
|
|
|||
|
|
if (showCustomerCount) {
|
|||
|
|
// 然后,对于每个 team,查询成员数量
|
|||
|
|
const teamIds = teams.map(team => team.teamId);
|
|||
|
|
const customerCounts = await api.getMemberApi({
|
|||
|
|
type: "getTeamCustmerCount",
|
|||
|
|
corpId,
|
|||
|
|
teamIds
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
// 将查询结果合并到原来的 team 数据中
|
|||
|
|
list = teams.map(team => {
|
|||
|
|
const customerCount = customerCounts.find(count => count._id === team.teamId);
|
|||
|
|
team.customerCount = customerCount ? customerCount.count : 0;
|
|||
|
|
return team;
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
list = teams
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
message: "获取成功",
|
|||
|
|
list: list.map((i) => ({
|
|||
|
|
...i,
|
|||
|
|
memberList: Array.isArray(i.memberList) ? i.memberList : [],
|
|||
|
|
})),
|
|||
|
|
total,
|
|||
|
|
pages,
|
|||
|
|
size: pageSize,
|
|||
|
|
};
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
exports.getTeamById = async (context) => {
|
|||
|
|
try {
|
|||
|
|
const { env, id: teamId, teamIds = [] } = context;
|
|||
|
|
if (!teamId && (!Array.isArray(teamIds) || teamIds.length === 0)) {
|
|||
|
|
return { success: false, message: "团队id不能为空" };
|
|||
|
|
}
|
|||
|
|
const query = teamId ? { teamId } : { teamId: { $in: teamIds } };
|
|||
|
|
const teams = await db.collection("team").find(query).toArray();
|
|||
|
|
const list = teams.map((i) => ({
|
|||
|
|
...i,
|
|||
|
|
memberList: Array.isArray(i.memberList) ? i.memberList : [],
|
|||
|
|
}));
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
message: "获取成功",
|
|||
|
|
data: list,
|
|||
|
|
};
|
|||
|
|
} catch (error) {
|
|||
|
|
return {
|
|||
|
|
success: false,
|
|||
|
|
message: error.message,
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
exports.updateTeam = async (context) => {
|
|||
|
|
const { corpId, teamId, _id, type, ...payload } = context;
|
|||
|
|
if (!teamId) {
|
|||
|
|
return {
|
|||
|
|
success: false,
|
|||
|
|
message: "新增团队失败(缺少teamId)",
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
const query = { teamId };
|
|||
|
|
const teamDB = db.collection("team");
|
|||
|
|
const team = await teamDB.findOne(query);
|
|||
|
|
const isUpdate = Boolean(team);
|
|||
|
|
if (isUpdate) {
|
|||
|
|
await teamDB.updateOne(query, { $set: payload });
|
|||
|
|
} else {
|
|||
|
|
await teamDB.insertOne({ ...payload, teamId, corpId, _id: common.generateRandomString(24) });
|
|||
|
|
}
|
|||
|
|
const { memberList } = context;
|
|||
|
|
await addTeamIdtoMember(memberList, teamId);
|
|||
|
|
let res = null;
|
|||
|
|
if (isUpdate) {
|
|||
|
|
res = await api.getMemberApi({
|
|||
|
|
teamId,
|
|||
|
|
corpId,
|
|||
|
|
type: "updateSopTaskExecuteUser",
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
message: isUpdate ? "团队信息更新成功" : "新增团队成功",
|
|||
|
|
res,
|
|||
|
|
};
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 判断所加成员是否含有teamId
|
|||
|
|
async function addTeamIdtoMember(memberList, teamId) {
|
|||
|
|
const memberDB = db.collection("corp-member");
|
|||
|
|
const members = await memberDB
|
|||
|
|
.find({ userid: { $in: memberList } })
|
|||
|
|
.toArray();
|
|||
|
|
const noTeamIdMemberList = members
|
|||
|
|
.filter((item) => !item.teamId)
|
|||
|
|
.map((item) => item.userid);
|
|||
|
|
if (noTeamIdMemberList.length > 0) {
|
|||
|
|
await memberDB.updateMany(
|
|||
|
|
{ userid: { $in: noTeamIdMemberList } },
|
|||
|
|
{ $set: { teamId } }
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
exports.getTeamLeaderNumByUserId = async (context) => {
|
|||
|
|
const { env, userId, corpId } = context;
|
|||
|
|
try {
|
|||
|
|
const count = await db
|
|||
|
|
.collection("team")
|
|||
|
|
.countDocuments({ corpId, memberLeaderList: userId });
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
message: "获取成功",
|
|||
|
|
data: count,
|
|||
|
|
};
|
|||
|
|
} catch (error) {
|
|||
|
|
return {
|
|||
|
|
success: false,
|
|||
|
|
message: "获取失败",
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
exports.updateMemberRolesByTeam = async (context) => {
|
|||
|
|
const { env, corpId, params, teamId } = context;
|
|||
|
|
const { addLeaders, removeLeaders, addTeamMember, removeTeamMember } = params;
|
|||
|
|
try {
|
|||
|
|
const { memberRoleId, memberLeaderRoleId } = await getRolesId(env, corpId);
|
|||
|
|
if (addLeaders.length > 0) {
|
|||
|
|
for (const userid of addLeaders) {
|
|||
|
|
await getTeamLeaderRoleIdByUserId(
|
|||
|
|
env,
|
|||
|
|
userid,
|
|||
|
|
teamId,
|
|||
|
|
corpId,
|
|||
|
|
"add",
|
|||
|
|
memberLeaderRoleId
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (removeLeaders.length > 0) {
|
|||
|
|
for (const userid of removeLeaders) {
|
|||
|
|
await getTeamLeaderRoleIdByUserId(
|
|||
|
|
env,
|
|||
|
|
userid,
|
|||
|
|
teamId,
|
|||
|
|
corpId,
|
|||
|
|
"remove",
|
|||
|
|
memberLeaderRoleId
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (addTeamMember.length > 0) {
|
|||
|
|
for (const userid of addTeamMember) {
|
|||
|
|
await getTeamMemberRoleIdByUserId(
|
|||
|
|
env,
|
|||
|
|
userid,
|
|||
|
|
teamId,
|
|||
|
|
corpId,
|
|||
|
|
"add",
|
|||
|
|
memberRoleId
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (removeTeamMember.length > 0) {
|
|||
|
|
for (const userid of removeTeamMember) {
|
|||
|
|
await getTeamMemberRoleIdByUserId(
|
|||
|
|
env,
|
|||
|
|
userid,
|
|||
|
|
teamId,
|
|||
|
|
corpId,
|
|||
|
|
"remove",
|
|||
|
|
memberRoleId
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
message: "更新成功",
|
|||
|
|
};
|
|||
|
|
} catch (error) {
|
|||
|
|
return {
|
|||
|
|
success: false,
|
|||
|
|
message: error.message,
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
async function getTeamMemberRoleIdByUserId(
|
|||
|
|
env,
|
|||
|
|
userId,
|
|||
|
|
teamId,
|
|||
|
|
corpId,
|
|||
|
|
type,
|
|||
|
|
memberRoleId
|
|||
|
|
) {
|
|||
|
|
const count = await db.collection("team").countDocuments({
|
|||
|
|
corpId,
|
|||
|
|
memberList: userId,
|
|||
|
|
teamId: { $ne: teamId },
|
|||
|
|
});
|
|||
|
|
if (count === 0 && type === "add") {
|
|||
|
|
await db
|
|||
|
|
.collection("corp-member")
|
|||
|
|
.updateOne(
|
|||
|
|
{ corpId, userid: userId },
|
|||
|
|
{ $addToSet: { roleIds: memberRoleId } }
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
if (count === 0 && type === "remove") {
|
|||
|
|
await db
|
|||
|
|
.collection("corp-member")
|
|||
|
|
.updateOne(
|
|||
|
|
{ corpId, userid: userId },
|
|||
|
|
{ $pull: { roleIds: memberRoleId } }
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
async function getTeamLeaderRoleIdByUserId(
|
|||
|
|
env,
|
|||
|
|
userId,
|
|||
|
|
teamId,
|
|||
|
|
corpId,
|
|||
|
|
type,
|
|||
|
|
memberLeaderRoleId
|
|||
|
|
) {
|
|||
|
|
const count = await db.collection("team").countDocuments({
|
|||
|
|
corpId,
|
|||
|
|
memberLeaderList: userId,
|
|||
|
|
teamId: { $ne: teamId },
|
|||
|
|
});
|
|||
|
|
if (count === 0 && type === "add") {
|
|||
|
|
await db
|
|||
|
|
.collection("corp-member")
|
|||
|
|
.updateOne(
|
|||
|
|
{ corpId, userid: userId },
|
|||
|
|
{ $addToSet: { roleIds: memberLeaderRoleId } }
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
if (count === 0 && type === "remove") {
|
|||
|
|
await db
|
|||
|
|
.collection("corp-member")
|
|||
|
|
.updateOne(
|
|||
|
|
{ corpId, userid: userId },
|
|||
|
|
{ $pull: { roleIds: memberLeaderRoleId } }
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
async function getRolesId(env, corpId) {
|
|||
|
|
const roles = await db.collection("sys-role").find({ corpId }).toArray();
|
|||
|
|
const memberRoleId = roles.find((item) => item.roleId === "member")._id;
|
|||
|
|
const memberLeaderRoleId = roles.find(
|
|||
|
|
(item) => item.roleId === "memberLeader"
|
|||
|
|
)._id;
|
|||
|
|
return {
|
|||
|
|
memberRoleId,
|
|||
|
|
memberLeaderRoleId,
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
exports.deleteCorpTeam = async function (context) {
|
|||
|
|
const { env, corpId, teamId, _id } = context;
|
|||
|
|
if (teamId && corpId && _id) {
|
|||
|
|
try {
|
|||
|
|
const team = await db.collection("team").findOne({ corpId, teamId, _id });
|
|||
|
|
if (team) {
|
|||
|
|
const total = await db
|
|||
|
|
.collection("member")
|
|||
|
|
.countDocuments({ corpId, teamId });
|
|||
|
|
if (total === 0) {
|
|||
|
|
await db.collection("team").deleteOne({ _id });
|
|||
|
|
return { success: true, message: "删除成功" };
|
|||
|
|
}
|
|||
|
|
return { success: false, message: "该团队下存在客户,无法删除" };
|
|||
|
|
}
|
|||
|
|
return { success: false, message: "团队不存在" };
|
|||
|
|
} catch (e) {
|
|||
|
|
return { success: false, message: e.message };
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return { success: false, message: "参数错误" };
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
exports.getCustomTeamData = async function (context) {
|
|||
|
|
const { env, corpUserId, corpId, fields, teamIds } = context;
|
|||
|
|
if (!corpId || !Array.isArray(fields) || fields.length === 0) {
|
|||
|
|
return { success: false, message: "参数错误" };
|
|||
|
|
}
|
|||
|
|
try {
|
|||
|
|
const query = { corpId };
|
|||
|
|
if (teamIds && teamIds.length) {
|
|||
|
|
query.teamId = { $in: teamIds };
|
|||
|
|
}
|
|||
|
|
if (corpUserId) {
|
|||
|
|
query.memberList = { $in: [corpUserId] };
|
|||
|
|
}
|
|||
|
|
const projection = fields.reduce(
|
|||
|
|
(acc, val) => {
|
|||
|
|
if (typeof val === "string" && val.trim()) {
|
|||
|
|
acc[val] = 1;
|
|||
|
|
}
|
|||
|
|
return acc;
|
|||
|
|
},
|
|||
|
|
{ teamId: 1, _id: 0 }
|
|||
|
|
);
|
|||
|
|
const teams = await db
|
|||
|
|
.collection("team")
|
|||
|
|
.find(query, { projection })
|
|||
|
|
.toArray();
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
message: "获取成功",
|
|||
|
|
data: teams,
|
|||
|
|
};
|
|||
|
|
} catch (error) {
|
|||
|
|
return {
|
|||
|
|
success: false,
|
|||
|
|
message: error.message,
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
};
|