"""部门/分组管理服务。""" from insurance.db.compat import db from insurance.models.department import Department class DepartmentService: """部门/分组管理业务逻辑。""" def list_departments(self) -> dict: """获取部门列表。""" departments = db.session.query(Department).order_by(Department.sort_order).all() return {"code": 0, "data": [d.to_dict() for d in departments]} def get_department_tree(self) -> dict: """获取部门树形结构。""" departments = db.session.query(Department).order_by(Department.sort_order).all() dept_list = [d.to_dict() for d in departments] # 构建树形结构 dept_map = {d["id"]: d for d in dept_list} tree = [] for dept in dept_list: if dept["parent_id"] == 0: tree.append(dept) elif dept["parent_id"] in dept_map: parent = dept_map[dept["parent_id"]] if "children" not in parent: parent["children"] = [] parent["children"].append(dept) return {"code": 0, "data": tree} def create_department(self, data: dict) -> dict: """创建部门。""" # 检查编码是否已存在 existing = db.session.query(Department).filter_by(code=data.get("code")).first() if existing: return {"code": 1006, "message": "部门编码已存在", "data": None} department = Department( name=data.get("name", ""), code=data.get("code", ""), parent_id=data.get("parent_id", 0), description=data.get("description", ""), sort_order=data.get("sort_order", 0), ) db.session.add(department) db.session.commit() from insurance.utils.audit import log_operation log_operation("system", "create", "department", str(department.id), {"name": department.name}) return {"code": 0, "data": {"id": department.id}} def update_department(self, dept_id: int, data: dict) -> dict: """更新部门。""" department = db.session.query(Department).filter_by(id=dept_id).first() if not department: return {"code": 1005, "message": "部门不存在", "data": None} # 检查编码是否已被其他部门使用 if "code" in data and data["code"] != department.code: existing = db.session.query(Department).filter_by(code=data["code"]).first() if existing: return {"code": 1006, "message": "部门编码已存在", "data": None} for key in ("name", "code", "parent_id", "description", "sort_order"): if key in data: setattr(department, key, data[key]) db.session.commit() from insurance.utils.audit import log_operation log_operation("system", "update", "department", str(dept_id), {"name": department.name}) return {"code": 0, "message": "success", "data": None} def delete_department(self, dept_id: int) -> dict: """删除部门。""" department = db.session.query(Department).filter_by(id=dept_id).first() if not department: return {"code": 1005, "message": "部门不存在", "data": None} # 检查是否有子部门 children_count = db.session.query(Department).filter_by(parent_id=dept_id).count() if children_count > 0: return {"code": 1010, "message": "该部门下有子部门,无法删除", "data": None} # 检查是否有用户属于该部门 from insurance.models.wecom_user import WeComUserMapping users_count = db.session.query(WeComUserMapping).filter_by(department=department.name).count() if users_count > 0: return {"code": 1011, "message": "该部门下有用户,无法删除", "data": None} db.session.delete(department) db.session.commit() from insurance.utils.audit import log_operation log_operation("system", "delete", "department", str(dept_id), {"name": department.name}) return {"code": 0, "message": "success", "data": None}