hn-hlw-service/survery/survery-cate.js
2026-07-27 11:28:33 +08:00

194 lines
7.5 KiB
JavaScript

const common = require('../common.js');
let db = null;
exports.main = async (context, DB) => {
db = DB;
switch (context.type) {
case "addSurveryCate":
return await addSurveryCate(context);
case "updateSurveryCate":
return await updateSurveryCate(context);
case "deleteSurveryCate":
return await deleteSurveryCate(context);
case "getSurveryCateList":
return await getSurveryCateList(context);
case "initCorpSurveyCate":
return await initCorpSurveyCate(context);
case "sortSurveryCate":
return await sortSurveryCate(context);
case "ifCateExist":
return await ifCateExist(context);
}
};
async function addSurveryCate(context) {
let { corpId, label, parentId } = context;
if (!corpId) return { success: false, message: "机构id不能为空" };
if (typeof label !== "string" || label.trim() === "")
return { success: false, message: "分类名称无效" };
if (label.trim().length > 10)
return { success: false, message: "分类名称不能超过10个字" };
try {
if (parentId) {
const parent = await db.collection("survery-cate").findOne({ _id: parentId, corpId });
if (!parent) return { success: false, message: "父级分类不存在" };
if (![1, 2].includes(parent.level))
return { success: false, message: "父级分类层级错误" };
const res = await db.collection("survery-cate").insertOne({
_id: common.generateRandomString(24),
corpId,
label,
level: parent.level + 1,
parentId,
createTime: Date.now(),
});
return { success: true, data: res, message: "添加分类成功" };
}
const res = await db.collection("survery-cate").insertOne({
_id: common.generateRandomString(24),
corpId,
label,
level: 1,
createTime: Date.now()
});
return { success: true, data: res, message: "添加分类成功" };
} catch (e) {
return { success: false, message: e.message };
}
}
async function updateSurveryCate(context) {
let { corpId, id: _id, label } = context;
if (!corpId) return { success: false, message: "机构id不能为空" };
if (!_id) return { success: false, message: "分类id不能为空" };
if (typeof label !== "string" || label.trim() === "")
return { success: false, message: "分类名称无效" };
if (label.trim().length > 10)
return { success: false, message: "分类名称不能超过10个字" };
try {
const res = await db.collection("survery-cate").updateOne(
{ _id, corpId },
{ $set: { label: label.trim() } }
);
return { success: true, data: res, message: "更新分类成功" };
} catch (e) {
return { success: false, message: e.message };
}
}
async function deleteSurveryCate(context) {
let { corpId, id: _id } = context;
if (!corpId) return { success: false, message: "机构id不能为空" };
if (!_id) return { success: false, message: "分类id不能为空" };
try {
const cate = await db.collection("survery-cate").findOne({ _id, corpId });
if (!cate) return { success: false, message: "分类不存在" };
const ids = [_id];
if (cate.level < 3) {
const children = await db.collection("survery-cate").find({ corpId, parentId: _id }).toArray();
const childrenIds = children.map((item) => item._id);
if (cate.level === 1 && childrenIds.length) {
const grandchildren = await db.collection("survery-cate").find({ corpId, parentId: { $in: childrenIds } }).toArray();
ids.push(...grandchildren.map((item) => item._id));
}
ids.push(...childrenIds);
}
const res = await db.collection("survery-cate").deleteMany({ corpId, _id: { $in: ids } });
const res2 = await db.collection("survery").deleteMany({ corpId, cateId: { $in: ids } });
return { success: true, data: [res, res2], message: "删除分类成功" };
} catch (e) {
return { success: false, message: e.message };
}
}
async function getSurveryCateList(context) {
let { corpId } = context;
if (!corpId) return { success: false, message: "机构id不能为空" };
try {
const list = await db.collection("survery-cate").find({ corpId, init: { $exists: false } }).sort({ createTime: 1 }).limit(10000).toArray();
if (list.length > 0)
return { success: true, list, message: "获取分类成功" };
const initRecord = await db.collection("survery-cate").findOne({ corpId, init: true });
if (initRecord) return { success: true, list, message: "获取分类成功" };
await db.collection("survery-cate").insertOne({ _id: common.generateRandomString(24), corpId, init: true });
await db.collection("survery-cate").insertOne({ _id: common.generateRandomString(24), corpId, label: "默认", level: 1, createTime: Date.now() });
const newList = await db.collection("survery-cate").find({ corpId, init: { $exists: false } }).sort({ createTime: 1 }).limit(10000).toArray();
return { success: true, list: newList, message: "获取分类成功" };
} catch (e) {
return { success: false, message: e.message };
}
}
async function sortSurveryCate(context) {
const { corpId, sortData } = context;
if (!corpId) return { success: false, message: "机构id不能为空" };
const arr = Array.isArray(sortData)
? sortData.filter(
(i) =>
i._id && typeof i.sort === "number" && i.sort % 1 === 0 && i.sort >= 0
)
: [];
if (arr.length === 0) return { success: false, message: "参数错误" };
try {
const list = await db.collection("survery-cate").find({
corpId,
_id: { $in: arr.map((i) => i._id) },
parentId: { $exists: false },
}).toArray();
const ids = list.map((i) => i._id);
const queue = arr.filter((i) => ids.includes(i._id));
const bulkOps = queue.map((item) => ({
updateOne: {
filter: { _id: item._id },
update: { $set: { sort: item.sort } }
}
}));
if (bulkOps.length > 0) {
await db.collection("survery-cate").bulkWrite(bulkOps);
}
return { success: true, message: "操作成功" };
} catch (e) {
return { success: false, message: e.message };
}
}
async function initCorpSurveyCate(context) {
try {
const res = await db.collection("survery").aggregate([{ $group: { _id: "$corpId" } }]).toArray();
const res2 = await db.collection("survery-cate").aggregate([{ $group: { _id: "$corpId" } }]).toArray();
const corpIds = res.map((item) => item._id);
const existsCorpIds = res2.map((item) => item._id);
const diffCorpIds = corpIds.filter((item) => !existsCorpIds.includes(item));
for (let corpId of diffCorpIds) {
const data = {
_id: common.generateRandomString(24),
corpId,
label: "默认",
level: 1,
createTime: Date.now(),
};
const res = await db.collection("survery-cate").insertOne(data);
if (res.insertedId) {
await db.collection("survery").updateMany(
{ corpId, cateId: { $exists: false } },
{ $set: { cateId: res.insertedId } }
);
}
}
return { success: true, data: diffCorpIds };
} catch (e) {
return { success: false, message: e.message };
}
}
async function ifCateExist(context) {
const { corpId, cateId } = context;
if (!corpId) return { success: false, message: "机构id不能为空" };
try {
const cate = await db.collection("survery-cate").findOne({ corpId, _id: cateId });
return cate ? { success: true } : { success: false, message: "分类不存在" };
} catch (e) {
return { success: false, message: e.message };
}
}