/** * 部门行服务类,继承自 RowCacheService,用于处理部门相关的数据行操作。 * 该类提供了生成 SQL 查询字段、构建查询过滤器等功能。 */ import { Injectable } from '@nestjs/common'; import { db, DepartmentMethodSchema, ObjectType, UserProfile, } from '@nice/common'; import { date, z } from 'zod'; import { RowCacheService } from '../base/row-cache.service'; import { isFieldCondition } from '../base/sql-builder'; @Injectable() export class DepartmentRowService extends RowCacheService { /** * 构造函数,初始化 DepartmentRowService。 * 调用父类构造函数,传入部门对象类型并禁用缓存。 */ constructor() { super(ObjectType.DEPARTMENT, false); } /** * 生成未分组行的 SQL 查询字段列表,包括部门特定的字段。 * @param requset - 请求对象,符合 DepartmentMethodSchema.getRows 的 schema。 * @returns 返回包含 SQL 查询字段的数组。 */ createUnGroupingRowSelect( requset: z.infer, ): string[] { // 调用父类方法生成基础查询字段,并拼接部门特定的字段 const result = super.createUnGroupingRowSelect(requset).concat([ `${this.tableName}.name AS name`, // 部门名称 `${this.tableName}.is_domain AS is_domain`, // 是否为域 `${this.tableName}.order AS order`, // 排序 `${this.tableName}.has_children AS has_children`, // 是否有子部门 `${this.tableName}.parent_id AS parent_id` // 父部门 ID ]); return result; } /** * 根据请求和用户信息构建 getRows 查询的过滤器。 * @param request - 请求对象,符合 DepartmentMethodSchema.getRows 的 schema。 * @param staff - 发起请求的用户信息。 * @returns 返回用于过滤行的条件对象。 */ protected createGetRowsFilters( request: z.infer, staff: UserProfile, ) { // 调用父类方法生成基础过滤条件 const condition = super.createGetRowsFilters(request); const { parentId, includeDeleted = false } = request; // 如果条件已经是字段条件,则跳过后续处理 if (isFieldCondition(condition)) { return; } // 如果请求中没有分组键,则添加父部门 ID 过滤条件 if (request.groupKeys.length === 0) { if (parentId) { condition.AND.push({ field: `${this.tableName}.parent_id`, value: parentId, op: 'equals', // 等于操作符 }); } else if (parentId === null) { condition.AND.push({ field: `${this.tableName}.parent_id`, op: "blank", // 空白操作符 }); } } // 如果 includeDeleted 为 false,则排除已删除的行 if (!includeDeleted) { condition.AND.push({ field: `${this.tableName}.deleted_at`, type: 'date', op: 'blank', // 空白操作符 }); } return condition; } }