| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- import * as _ from 'lodash';
- import BaseService from '../../base';
- import { Not, In } from 'typeorm';
- import { UpdatePersonInfoDto } from '../../../dto/admin/verify';
- import { CreateUserDto, UpdateUserDto } from '../../../dto/admin/sys/user';
- import { findIndex } from 'lodash';
- /**
- * 系统-用户
- */
- export default class SysUserService extends BaseService {
- /**
- * 查找超管的用户ID
- */
- async findRootUserId(): Promise<number> {
- const result = await this.getRepo().admin.sys.User.findOne({ id: this.config.rootRoleId });
- return result ? result.id : 0;
- }
- /**
- * 查询用户个人信息
- */
- async person(uid: number) {
- const user: any = await this.getRepo().admin.sys.User.findOne({ id: uid });
- if (!_.isEmpty(user)) {
- delete user.departmentId;
- delete user.status;
- // delete user.remark;
- delete user.password;
- }
- return user;
- }
- /**
- * 更新个人信息
- */
- async personUpdate(uid: number, param: UpdatePersonInfoDto) {
- const { name, nickName, email, phone, originPassword, newPassword, remark, headImg } = param;
- let savePassword: string | undefined;
- if (originPassword && newPassword) {
- const user = await this.getRepo().admin.sys.User.findOne({ id: uid });
- const decodePassword = this.getHelper().aesDecrypt(user!.password, this.config.aesSecret.admin);
- // const decodeOriginPassword = this.getHelper().aesDecrypt(originPassword, this.config.aesSecret.front);
- // const decodeNewPassword = this.getHelper().aesDecrypt(newPassword, this.config.aesSecret.front);
- const decodeOriginPassword = originPassword;
- const decodeNewPassword = newPassword;
- if (decodePassword === decodeOriginPassword) {
- // 旧密码不一致
- savePassword = this.getHelper().aesEncrypt(decodeNewPassword, this.config.aesSecret.admin);
- } else {
- return false;
- }
- }
- const obj: any = { name, nickName, email, phone, remark, headImg };
- if (savePassword) {
- await this.service.admin.sys.user.upgradePasswordV(uid);
- obj.password = savePassword;
- }
- await this.getRepo().admin.sys.User.update(uid, obj);
- return true;
- }
- /**
- * 增加系统用户,如果返回false则表示已存在该用户
- * @param param Object 对应SysUser实体类
- */
- async add(param: CreateUserDto) {
- // const insertData: any = { ...CreateUserDto };
- const exists = await this.getRepo().admin.sys.User.findOne({ username: param.username });
- if (!_.isEmpty(exists)) {
- return false;
- }
- // 所有用户初始密码为123456
- await this.ctx.ormManager.transaction(async manager => {
- const password = this.getHelper().aesEncrypt('123456', this.config.aesSecret.admin);
- const u = manager.create(this.getEntity().admin.sys.User, {
- departmentId: param.departmentId,
- username: param.username,
- password,
- name: param.name,
- nickName: param.nickName,
- email: param.email,
- phone: param.phone,
- remark: param.remark,
- status: param.status,
- });
- const result = await manager.save(u);
- const { roles } = param;
- const insertRoles = roles.map(e => {
- return {
- roleId: e,
- userId: result.id,
- };
- });
- // 分配角色
- await manager.insert(this.getEntity().admin.sys.UserRole, insertRoles);
- });
- return true;
- }
- /**
- * 更新用户信息
- */
- async update(param: UpdateUserDto) {
- await this.ctx.ormManager.transaction(async manager => {
- await manager.update(this.getEntity().admin.sys.User, param.id, {
- departmentId: param.departmentId,
- username: param.username,
- name: param.name,
- nickName: param.nickName,
- email: param.email,
- phone: param.phone,
- remark: param.remark,
- status: param.status,
- });
- // 先删除原来的角色关系
- await manager.delete(this.getEntity().admin.sys.UserRole, { userId: param.id });
- const insertRoles = param.roles.map(e => {
- return {
- roleId: e,
- userId: param.id,
- };
- });
- // 重新分配角色
- await manager.insert(this.getEntity().admin.sys.UserRole, insertRoles);
- if (param.status === 0) {
- // 禁用状态
- await this.forbidden(param.id);
- }
- });
- }
- /**
- * 查找用户信息
- * @param id 用户id
- */
- async info(id: number) {
- const user: any = await this.getRepo().admin.sys.User.findOne(id);
- if (_.isEmpty(user)) {
- throw new Error('unfind this user info');
- }
- const departmentRow = await this.getRepo().admin.sys.Department.findOne({ id: user!.departmentId });
- if (_.isEmpty(departmentRow)) {
- throw new Error('unfind this user info');
- }
- const roleRows = await this.getRepo().admin.sys.UserRole.find({ userId: user!.id });
- const roles = roleRows.map(e => {
- return e.roleId;
- });
- delete user!.password;
- return { ...user, roles, departmentName: departmentRow!.name };
- }
- /**
- * 查找列表里的信息
- */
- async infoList(ids: number[]) {
- const users = await this.getRepo().admin.sys.User.findByIds(ids);
- return users;
- }
- /**
- * 根据ID列表删除用户
- */
- async delete(userIds: number[]) {
- await this.getRepo().admin.sys.User.delete(userIds);
- await this.getRepo().admin.sys.UserRole.delete({ userId: In(userIds) });
- }
- /**
- * 根据部门ID列举用户条数:除去超级管理员
- */
- async count(uid: number, deptId: number) {
- const rootUserId = await this.findRootUserId();
- if (deptId === -1) {
- return await this.getRepo().admin.sys.User.count({ id: Not(In([ rootUserId, uid ])) });
- }
- return await this.getRepo().admin.sys.User.count({ id: Not(In([ rootUserId, uid ])), departmentId: deptId });
- }
- /**
- * 根据部门ID进行分页查询用户列表
- * deptId = -1 时查询全部
- */
- async page(uid: number, deptId: number, page: number, count: number) {
- const rootUserId = await this.findRootUserId();
- const result = await this.getRepo().admin.sys.User.createQueryBuilder('user')
- .innerJoinAndSelect('sys_department', 'dept', 'dept.id = user.departmentId')
- .innerJoinAndSelect(
- 'sys_user_role',
- 'user_role',
- 'user_role.user_id = user.id',
- )
- .innerJoinAndSelect('sys_role', 'role', 'role.id = user_role.role_id')
- .where('user.id NOT IN (:...ids)', { ids: [ rootUserId, uid ] })
- .andWhere(deptId === -1 ? '1 = 1' : `user.departmentId = '${deptId}'`)
- .offset(page * count)
- .limit(count)
- .getRawMany();
- // const dealResult = result.map(e => {
- // return {
- // createTime: e.user_createTime,
- // departmentId: e.user_department_id,
- // email: e.user_email,
- // headImg: e.user_head_img,
- // id: e.user_id,
- // name: e.user_name,
- // nickName: e.user_nick_name,
- // phone: e.user_phone,
- // remark: e.user_remark,
- // status: e.user_status,
- // updateTime: e.user_updateTime,
- // username: e.user_username,
- // departmentName: e.dept_name,
- // };
- // });
- const dealResult:any[] = [];
- // 过滤去重
- result.forEach(e => {
- const index = findIndex(dealResult, e2 => e2.id === e.user_id);
- if (index < 0) {
- // 当前元素不存在则插入
- dealResult.push({
- createTime: e.user_createTime,
- departmentId: e.user_department_id,
- email: e.user_email,
- headImg: e.user_head_img,
- id: e.user_id,
- name: e.user_name,
- nickName: e.user_nick_name,
- phone: e.user_phone,
- remark: e.user_remark,
- status: e.user_status,
- updateTime: e.user_updateTime,
- username: e.user_username,
- departmentName: e.dept_name,
- roleNames: [ e.role_name ],
- });
- } else {
- // 已存在
- dealResult[index].roleNames.push(e.role_name);
- }
- });
- // const result = await this.getRepo().admin.sys.User.find({
- // where: {
- // username: Not('root'),
- // departmentId: deptId,
- // },
- // order: {
- // id: 'ASC',
- // },
- // take: count,
- // skip: page * count,
- // });
- return dealResult;
- }
- /**
- * 禁用用户
- */
- async forbidden(uid: number) {
- await this.getAdminRedis().del(`admin:passwordVersion:${uid}`);
- await this.getAdminRedis().del(`admin:token:${uid}`);
- await this.getAdminRedis().del(`admin:perms:${uid}`);
- }
- /**
- * 禁用多个用户
- */
- async multiForbidden(uids: number[]) {
- if (uids) {
- const pvs: string[] = [];
- const ts: string[] = [];
- const ps: string[] = [];
- uids.forEach(e => {
- pvs.push(`admin:passwordVersion:${e}`);
- ts.push(`admin:token:${e}`);
- ps.push(`admin:perms:${e}`);
- });
- await this.getAdminRedis().del(pvs);
- await this.getAdminRedis().del(ts);
- await this.getAdminRedis().del(ps);
- }
- }
- /**
- * 升级用户版本密码
- */
- async upgradePasswordV(id: number) {
- // admin:passwordVersion:${param.id}
- const v = await this.getAdminRedis().get(`admin:passwordVersion:${id}`);
- if (!_.isEmpty(v)) {
- await this.getAdminRedis().set(`admin:passwordVersion:${id}`, parseInt(v!) + 1);
- }
- }
- }
|