user.util.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. import { Provide } from '@midwayjs/decorator';
  2. import { InjectEntityModel } from '@midwayjs/typegoose';
  3. import { ReturnModelType } from '@typegoose/typegoose';
  4. import { FrameworkErrorEnum, ServiceError } from 'free-midway-component';
  5. import { Admin } from '../../entity/user/admin.entity';
  6. import { Personal } from '../../entity/user/personal.entity';
  7. import { Company } from '../../entity/user/company.entity';
  8. import { Expert } from '../../entity/user/expert.entity';
  9. import { Types } from 'mongoose';
  10. const ObjectId = Types.ObjectId;
  11. import {
  12. CheckUpdateCardAndPid,
  13. checkPhoneAndPid,
  14. } from '../../interface/util/user.util.interface';
  15. @Provide()
  16. export class UserUtilService {
  17. @InjectEntityModel(Admin)
  18. adminModel: ReturnModelType<typeof Admin>;
  19. @InjectEntityModel(Personal)
  20. personalModel: ReturnModelType<typeof Personal>;
  21. @InjectEntityModel(Company)
  22. companyModel: ReturnModelType<typeof Company>;
  23. @InjectEntityModel(Expert)
  24. expertModel: ReturnModelType<typeof Expert>;
  25. /**
  26. * 检查创建时,手机号和上级id
  27. * @param data 参数
  28. */
  29. async checkPhoneAndPid(data: checkPhoneAndPid) {
  30. if (data.phone) {
  31. // 检查手机号
  32. // 管理员
  33. const adminan = await this.adminModel.count({ phone: data.phone });
  34. if (adminan > 0) {
  35. throw new ServiceError(
  36. '已有管理员/机构管理员/业务管理员 使用该手机号',
  37. FrameworkErrorEnum.BAD_BODY
  38. );
  39. }
  40. // 专家
  41. const expertan = await this.expertModel.count({
  42. phone: data.phone,
  43. });
  44. if (expertan > 0) {
  45. throw new ServiceError(
  46. '已有专家用户使用该手机号',
  47. FrameworkErrorEnum.BAD_BODY
  48. );
  49. }
  50. // 企业
  51. const companyan = await this.companyModel.count({
  52. phone: data.phone,
  53. });
  54. if (companyan > 0) {
  55. throw new ServiceError(
  56. '已有企业用户使用该手机号',
  57. FrameworkErrorEnum.BAD_BODY
  58. );
  59. }
  60. if (data.code) {
  61. // 用户
  62. const personalan = await this.personalModel.count({
  63. phone: data.phone,
  64. code: data.code,
  65. });
  66. if (personalan > 0) {
  67. throw new ServiceError(
  68. `姓名:${data.name} ; 手机号: ${data.phone} ;已有机构所属的个人用户使用该手机号`,
  69. FrameworkErrorEnum.BAD_BODY
  70. );
  71. }
  72. }
  73. }
  74. // 检查上级id
  75. if (data.pid) {
  76. // 管理员
  77. const adminid = await this.adminModel.count({
  78. _id: new ObjectId(data.pid),
  79. });
  80. if (adminid <= 0)
  81. throw new ServiceError(
  82. '未找到上级的信息',
  83. FrameworkErrorEnum.NOT_FOUND_DATA
  84. );
  85. } else {
  86. throw new ServiceError(
  87. '未找到上级的信息',
  88. FrameworkErrorEnum.NOT_FOUND_DATA
  89. );
  90. }
  91. }
  92. /**
  93. * 检查创建时,手机号和上级id
  94. * @param id 当前要修改的数据
  95. * @param data 参数
  96. */
  97. async checkUpdateCardAndPid(id, data: CheckUpdateCardAndPid) {
  98. const { phone, code, name } = data;
  99. if (phone && code) {
  100. // 用户
  101. const personalan = await this.personalModel.count({
  102. _id: { $ne: id },
  103. phone,
  104. code,
  105. });
  106. if (personalan > 0)
  107. throw new ServiceError(
  108. `姓名:${name} ; 手机号: ${phone} ;已有机构所属的个人用户使用该手机号`,
  109. FrameworkErrorEnum.BAD_BODY
  110. );
  111. }
  112. if (phone) {
  113. // 管理员
  114. const adminan = await this.adminModel.count({
  115. _id: { $ne: id },
  116. phone,
  117. });
  118. if (adminan > 0) {
  119. throw new ServiceError(
  120. '已有管理员/机构管理员/业务管理员 使用该手机号',
  121. FrameworkErrorEnum.BAD_BODY
  122. );
  123. }
  124. // 专家
  125. const expertan = await this.expertModel.count({
  126. _id: { $ne: id },
  127. phone,
  128. });
  129. if (expertan > 0) {
  130. throw new ServiceError(
  131. '已有专家用户使用该手机号',
  132. FrameworkErrorEnum.BAD_BODY
  133. );
  134. }
  135. // 企业
  136. const companyan = await this.companyModel.count({
  137. _id: { $ne: id },
  138. phone,
  139. });
  140. if (companyan > 0) {
  141. throw new ServiceError(
  142. '已有企业用户使用该手机号',
  143. FrameworkErrorEnum.BAD_BODY
  144. );
  145. }
  146. }
  147. }
  148. }