sysDeptService.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. 'use strict';
  2. const Service = require('../service/baseService');
  3. class SysDeptService extends Service {
  4. tag() {
  5. return this.ctx.model.SysDeptModel;
  6. }
  7. async addDeptAndPerson(data) {
  8. const { ctx, service } = this;
  9. const listByCode = await service.sysDeptService.list({ code: data.code });
  10. if (listByCode.length > 0) {
  11. return '地区编码已存在';
  12. }
  13. const order = await service.sysDeptService.getMaxOrder();
  14. data.order = order;
  15. if (data.fid == '0') {
  16. data.level = '1';
  17. } else {
  18. const dept = await service.sysDeptService.one(data.fid);
  19. data.level = (parseInt(dept.level) + 1) + '';
  20. }
  21. const result = await ctx.model.SysDeptModel.create(data);
  22. const arr = await this.findDept(result._id, data.fid);
  23. const dept1 = arr[0];
  24. const dept2 = arr[1];
  25. const dept3 = arr[2];
  26. const dept4 = arr[3];
  27. const dept5 = arr[4];
  28. const userData = { type: 'admin', deptId: result._id,
  29. dept1, dept2, dept3, dept4, dept5 };
  30. await ctx.service.sysUserService.batchAdd(userData);
  31. return null;
  32. }
  33. async updateDeptAndPerson(id, data) {
  34. const { ctx, service } = this;
  35. const { model } = ctx;
  36. const dept = await this.one(id);
  37. const code = dept ? dept.code : data.code;
  38. delete data.fid;
  39. const listByCode = await service.sysDeptService.list({ code: data.code });
  40. if (listByCode.length > 0 && listByCode[0]._id != id && listByCode[0].code == data.code) {
  41. return '地区编码已存在';
  42. }
  43. await model.SysDeptModel.updateOne({ _id: id }, data);
  44. if (code != data.code) {
  45. const codes = await model.SysDeptModel.find({ code: { $regex: '^' + code } });
  46. for (const c of codes) {
  47. const replaceName = c.code.replace(code, data.code);
  48. await model.SysDeptModel.updateOne(
  49. { _id: c._id },
  50. { code: replaceName });
  51. }
  52. const users = await model.SysUserModel.find({ loginName: { $regex: '^' + code } });
  53. for (const user of users) {
  54. const replaceName = user.loginName.replace(code, data.code);
  55. await model.SysUserModel.updateOne(
  56. { _id: user._id },
  57. { loginName: replaceName });
  58. }
  59. }
  60. return null;
  61. }
  62. async orderChange(id, type) {
  63. const { model } = this.ctx;
  64. const dept = await model.SysDeptModel.findById(id);
  65. let where = {};
  66. let sort = {};
  67. if (type === 'down') {
  68. where = { order: { $gte: dept.order }, fid: dept.fid };
  69. sort = { order: 1 };
  70. }
  71. if (type === 'up') {
  72. where = { order: { $lte: dept.order }, fid: dept.fid };
  73. sort = { order: -1 };
  74. }
  75. const result = await model.SysDeptModel.find(where)
  76. .sort(sort)
  77. .skip(0)
  78. .limit(2);
  79. if (result.length === 2) {
  80. await model.SysDeptModel.updateOne({ _id: result[0]._id }, { order: result[1].order });
  81. await model.SysDeptModel.updateOne({ _id: result[1]._id }, { order: result[0].order });
  82. return null;
  83. }
  84. return '更新排序异常';
  85. }
  86. async getMaxOrder() {
  87. const { model } = this.ctx;
  88. const result = await model.SysDeptModel.find()
  89. .sort({ order: -1 })
  90. .skip(0)
  91. .limit(1);
  92. let max_order = 0;
  93. if (result.length > 0 && result[0].order) {
  94. max_order = result[0].order;
  95. }
  96. max_order = max_order + 1;
  97. return max_order;
  98. }
  99. async deleteWithSub(id) {
  100. const { model } = this.ctx;
  101. const dbDeptArr = await model.SysDeptModel.find({ fid: id });
  102. if (dbDeptArr.length > 0) {
  103. return '删除失败,该地区存在下级地区';
  104. }
  105. const dbUserArr = await model.SysUserModel.find({ dept: id });
  106. if (dbUserArr.length > 0) {
  107. return '删除失败,该地区下存在人员';
  108. }
  109. await model.SysDeptModel.deleteOne({ _id: id });
  110. return null;
  111. }
  112. async listForPageSortWithUser(data) {
  113. const deptId = data.deptId;
  114. const roleId = data.roleId;
  115. const fid = data.fid;
  116. delete data.deptId;
  117. delete data.roleId;
  118. delete data.level;
  119. // type 代表前端是否需要显示添加按钮 true需要 false 不需要
  120. let type = true;
  121. if (fid === '0') {
  122. if (roleId == this.app.config.defaultUserRoleId) { // 采集员
  123. data.fid = '-1';
  124. type = false;
  125. } else if (roleId == this.app.config.defaultManagerRoleId) { // 地区管理员
  126. delete data.fid;
  127. data._id = deptId;
  128. type = false;
  129. }
  130. }
  131. const result = await super.listForPage(data);
  132. result.type = type;
  133. return result;
  134. }
  135. async findDept(id, fid) {
  136. const arr = [ id ];
  137. while (fid != '0') { // 最多3次 比如是最底层的5级,那么知道5.4,只需要找3次
  138. const result = await this.one(fid);
  139. arr.unshift(fid);
  140. fid = result.fid;
  141. }
  142. return arr;
  143. }
  144. async findDeptDetail(dept, fid) {
  145. const arr = [ dept ];
  146. while (fid != '0') { // 最多3次 比如是最底层的5级,那么知道5.4,只需要找3次
  147. const result = await this.one(fid);
  148. arr.unshift(result);
  149. fid = result.fid;
  150. }
  151. return arr;
  152. }
  153. async findLink() {
  154. const result = await this.list({ name: { $regex: this.ctx.query.name } });
  155. const arr = [];
  156. for (let i = 0; i < result.length; i++) {
  157. const deptArr = await this.findDeptDetail(result[i], result[i].fid);
  158. arr.push(deptArr);
  159. }
  160. return arr;
  161. }
  162. }
  163. module.exports = SysDeptService;