const common = require("../../common.js"); let db = null; exports.main = async (context, DB) => { db = DB; switch (context.type) { case "addProjectPackageCate": return await addProjectPackageCate(context); case "updateProjectPackageCate": return await updateProjectPackageCate(context); case "deleteProjectPackageCate": return await deleteProjectPackageCate(context); case "getProjectPackageCateList": return await getProjectPackageCateList(context); case "sortProjectPackageCate": return await sortProjectPackageCate(context); case "ifCateExist": return await ifCateExist(context); } }; async function addProjectPackageCate(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("project-package-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("project-package-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("project-package-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 updateProjectPackageCate(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("project-package-cate") .updateOne({ _id, corpId }, { $set: { label: label.trim() } }); return { success: true, data: res, message: "更新分类成功" }; } catch (e) { return { success: false, message: e.message }; } } async function deleteProjectPackageCate(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("project-package-cate") .findOne({ _id, corpId }); if (!cate) return { success: false, message: "分类不存在" }; const ids = [_id]; if (cate.level < 3) { const children = await db .collection("project-package-cate") .find({ corpId, parentId: _id }) .toArray(); const childrenIds = children.map((item) => item._id); if (cate.level === 1 && childrenIds.length) { const grandchildren = await db .collection("project-package-cate") .find({ corpId, parentId: { $in: childrenIds } }) .toArray(); ids.push(...grandchildren.map((item) => item._id)); } ids.push(...childrenIds); } const res = await db .collection("project-package-cate") .deleteMany({ corpId, _id: { $in: ids } }); if (res.deletedCount > 0) return { success: true, deleted: res.deletedCount, message: "删除分类成功", }; return { success: false, message: "删除分类失败" }; } catch (e) { return { success: false, message: e.message }; } } async function getProjectPackageCateList(context) { let { corpId } = context; if (!corpId) return { success: false, message: "机构id不能为空" }; try { const list = await db .collection("project-package-cate") .find({ corpId, init: { $exists: false } }) .sort({ createTime: 1 }) .limit(10000) .toArray(); if (list.length) return { success: true, list, message: "获取分类成功" }; const initRecord = await db .collection("project-package-cate") .findOne({ corpId, init: true }); if (initRecord) return { success: true, list: [], message: "获取分类成功" }; await db .collection("project-package-cate") .insertOne({ _id: common.generateRandomString(24), corpId, init: true }); await db.collection("project-package-cate").insertOne({ _id: common.generateRandomString(24), corpId, label: "默认", level: 1, createTime: Date.now(), }); const newlist = await db .collection("project-package-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 sortProjectPackageCate(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 bulkOps = arr.map((item) => ({ updateOne: { filter: { _id: item._id, corpId, parentId: { $exists: false } }, update: { $set: { sort: item.sort } }, }, })); const res = await db.collection("project-package-cate").bulkWrite(bulkOps); if (res.modifiedCount > 0) { return { success: true, message: "操作成功" }; } else { return { success: false, message: "未找到匹配的分类或排序未改变" }; } } 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("project-package-cate") .findOne({ corpId, _id: cateId }); return cate ? { success: true } : { success: false, message: "分类不存在" }; } catch (e) { return { success: false, message: e.message }; } }