فهرست منبع

患者查询约束

lrf 1 سال پیش
والد
کامیت
15d50c6df9
3فایلهای تغییر یافته به همراه58 افزوده شده و 3 حذف شده
  1. 1 1
      README.zh-CN.md
  2. 1 1
      src/service/group.service.ts
  3. 56 1
      src/service/patient.service.ts

+ 1 - 1
README.zh-CN.md

@@ -22,4 +22,4 @@
 [ ] 3.对话是 以客服的形式 一对一 对话: 所有医护都能看到患者的对话内容, 但是患者只和一个人对话(谁先对话,就谁来,暂定)
     
     患者对群组说话,群组所关联的医护都可见,在对话时,记录说话人
-[ ] 4.当与患者已经对过话后, 需要接口专门查询有对话记录的患者; 就像微信说过话后在列表里有这个人
+[] 4.当与患者已经对过话后, 需要接口专门查询有对话记录的患者; 就像微信说过话后在列表里有这个人

+ 1 - 1
src/service/group.service.ts

@@ -42,7 +42,7 @@ export class GroupService extends BaseService<modelType> {
     return result;
   }
   /**
-   * 根据患者id,查询患者所在的所有群组的医生简信(只有名字)
+   * 根据患者id,查询患者所在的所有群组及医生简信(只有名字,头像)
    * @param id 患者id
    * @param skip 分页
    * @param limit 分页

+ 56 - 1
src/service/patient.service.ts

@@ -1,10 +1,11 @@
 import { Provide } from '@midwayjs/decorator';
 import { InjectEntityModel } from '@midwayjs/typegoose';
 import { ReturnModelType } from '@typegoose/typegoose';
-import { BaseService, FrameworkErrorEnum, ServiceError } from 'free-midway-component';
+import { BaseService, FrameworkErrorEnum, PageOptions, ResultOptions, SearchBase, ServiceError } from 'free-midway-component';
 import { Patient } from '../entity/patient.entity';
 import { Group } from '../entity/group.entity';
 import { Types } from 'mongoose';
+import { cloneDeep, flattenDeep, get } from 'lodash';
 const ObjectId = Types.ObjectId;
 type modelType = ReturnModelType<typeof Patient>;
 @Provide()
@@ -14,6 +15,60 @@ export class PatientService extends BaseService<modelType> {
   @InjectEntityModel(Group)
   groupModel: ReturnModelType<typeof Group>;
 
+  async query(filter: SearchBase, pageOptions: PageOptions = {}, resultOptions: ResultOptions = { lean: true, populate: true }): Promise<Array<any>> {
+    const user = this.ctx.user;
+    let doctor;
+    // 需要从医生下的所有组中,查询所属病人
+    if (get(user, 'role') === 'Doctor') {
+      doctor = get(user, '_id');
+    } else if (get(user, 'role') === 'Nurse') {
+      doctor = get(user, 'doctor');
+    } else if (get(user, 'role') === 'Admin') {
+      //不需要限制
+    } else {
+      throw new ServiceError('权限不足,无法访问接口', FrameworkErrorEnum.SERVICE_FAULT);
+    }
+    let query = cloneDeep(filter.getFilter());
+    if (doctor) {
+      // 医护查询.病人不能查,管理员不需要此处理; 只需要该医生下群组中的患者字段
+      const groups = await this.groupModel.find({ doctor }, 'patients').lean();
+      const ids = flattenDeep(groups.map(i => i.patients));
+      query = { ...query, _id: ids };
+    }
+    const { lean, populate } = resultOptions;
+    let refs = [];
+    if (populate) refs = this.getRefs();
+    const data = await this.model
+      .find(query, {}, { ...pageOptions })
+      .populate(refs)
+      .lean(lean);
+    return data;
+  }
+
+  async count(filter: SearchBase): Promise<number> {
+    const user = this.ctx.user;
+    let doctor;
+    // 需要从医生下的所有组中,查询所属病人
+    if (get(user, 'role') === 'Doctor') {
+      doctor = get(user, '_id');
+    } else if (get(user, 'role') === 'Nurse') {
+      doctor = get(user, 'doctor');
+    } else if (get(user, 'role') === 'Admin') {
+      //不需要限制
+    } else {
+      throw new ServiceError('权限不足,无法访问接口', FrameworkErrorEnum.SERVICE_FAULT);
+    }
+    let query = cloneDeep(filter.getFilter());
+    if (doctor) {
+      // 医护查询.病人不能查,管理员不需要此处理; 只需要该医生下群组中的患者字段
+      const groups = await this.groupModel.find({ doctor }, 'patients').lean();
+      const ids = flattenDeep(groups.map(i => i.patients));
+      query = { ...query, _id: ids };
+    }
+    const total = await this.model.count(query);
+    return total;
+  }
+
   /**
    * 患者加入群组
    * @param id 患者id