import { Provide } from '@midwayjs/decorator'; import { InjectEntityModel } from '@midwayjs/typegoose'; import { ReturnModelType } from '@typegoose/typegoose'; import { FrameworkErrorEnum, ServiceError } from 'free-midway-component'; import { Admin } from '../../entity/user/admin.entity'; import { Personal } from '../../entity/user/personal.entity'; import { Company } from '../../entity/user/company.entity'; import { Expert } from '../../entity/user/expert.entity'; import { Types } from 'mongoose'; const ObjectId = Types.ObjectId; import { CheckUpdateCardAndPid, checkPhoneAndPid, } from '../../interface/util/user.util.interface'; @Provide() export class UserUtilService { @InjectEntityModel(Admin) adminModel: ReturnModelType; @InjectEntityModel(Personal) personalModel: ReturnModelType; @InjectEntityModel(Company) companyModel: ReturnModelType; @InjectEntityModel(Expert) expertModel: ReturnModelType; /** * 检查创建时,手机号和上级id * @param data 参数 */ async checkPhoneAndPid(data: checkPhoneAndPid) { if (data.phone) { // 检查手机号 // 管理员 const adminan = await this.adminModel.count({ phone: data.phone }); if (adminan > 0) { throw new ServiceError( '已有管理员/机构管理员/业务管理员 使用该手机号', FrameworkErrorEnum.BAD_BODY ); } // 专家 const expertan = await this.expertModel.count({ phone: data.phone, }); if (expertan > 0) { throw new ServiceError( '已有专家用户使用该手机号', FrameworkErrorEnum.BAD_BODY ); } // 企业 const companyan = await this.companyModel.count({ phone: data.phone, }); if (companyan > 0) { throw new ServiceError( '已有企业用户使用该手机号', FrameworkErrorEnum.BAD_BODY ); } if (data.code) { // 用户 const personalan = await this.personalModel.count({ phone: data.phone, code: data.code, }); if (personalan > 0) { throw new ServiceError( `姓名:${data.name} ; 手机号: ${data.phone} ;已有机构所属的个人用户使用该手机号`, FrameworkErrorEnum.BAD_BODY ); } } } // 检查上级id if (data.pid) { // 管理员 const adminid = await this.adminModel.count({ _id: new ObjectId(data.pid), }); if (adminid <= 0) throw new ServiceError( '未找到上级的信息', FrameworkErrorEnum.NOT_FOUND_DATA ); } else { throw new ServiceError( '未找到上级的信息', FrameworkErrorEnum.NOT_FOUND_DATA ); } } /** * 检查创建时,手机号和上级id * @param id 当前要修改的数据 * @param data 参数 */ async checkUpdateCardAndPid(id, data: CheckUpdateCardAndPid) { const { phone, code, name } = data; if (phone && code) { // 用户 const personalan = await this.personalModel.count({ _id: { $ne: id }, phone, code, }); if (personalan > 0) throw new ServiceError( `姓名:${name} ; 手机号: ${phone} ;已有机构所属的个人用户使用该手机号`, FrameworkErrorEnum.BAD_BODY ); } if (phone) { // 管理员 const adminan = await this.adminModel.count({ _id: { $ne: id }, phone, }); if (adminan > 0) { throw new ServiceError( '已有管理员/机构管理员/业务管理员 使用该手机号', FrameworkErrorEnum.BAD_BODY ); } // 专家 const expertan = await this.expertModel.count({ _id: { $ne: id }, phone, }); if (expertan > 0) { throw new ServiceError( '已有专家用户使用该手机号', FrameworkErrorEnum.BAD_BODY ); } // 企业 const companyan = await this.companyModel.count({ _id: { $ne: id }, phone, }); if (companyan > 0) { throw new ServiceError( '已有企业用户使用该手机号', FrameworkErrorEnum.BAD_BODY ); } } } }