@gingkoo/base-server 0.0.1-alpha.0 → 0.0.1-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +4 -0
  2. package/app.js +41 -40
  3. package/backend/common/entity.js +55 -0
  4. package/backend/common/enum.js +247 -0
  5. package/backend/common/fss/index.js +18 -0
  6. package/backend/common/fss/routers/attachment.js +45 -0
  7. package/backend/common/fss/routers/download.js +43 -0
  8. package/backend/common/fss/routers/import_export.js +113 -0
  9. package/backend/common/fss/routers/resources.js +149 -0
  10. package/backend/common/fss/routers/upload.js +81 -0
  11. package/backend/common/fss/services/import_export.js +159 -0
  12. package/backend/common/fss/services/index.js +92 -0
  13. package/backend/common/fss/utils.js +39 -0
  14. package/backend/common/ginfo/config.js +5 -0
  15. package/backend/common/ginfo/index.js +62 -0
  16. package/backend/common/index_template.html +28 -0
  17. package/backend/common/logger/index.js +96 -0
  18. package/backend/common/mapping.js +128 -0
  19. package/backend/common/middleware/auth.js +109 -0
  20. package/backend/common/middleware/cors.js +13 -0
  21. package/backend/common/middleware/response.js +25 -0
  22. package/backend/common/page_engine.js +487 -0
  23. package/backend/common/schedule.js +45 -0
  24. package/backend/common/services/dataCombine.js +67 -0
  25. package/backend/common/services/dept.js +37 -0
  26. package/backend/common/services/dict.js +488 -0
  27. package/backend/common/services/email.js +49 -0
  28. package/backend/common/services/generalConfig.js +137 -0
  29. package/backend/common/services/login.js +18 -0
  30. package/backend/common/services/notice.js +260 -0
  31. package/backend/common/services/permission.js +500 -0
  32. package/backend/common/services/roles.js +57 -0
  33. package/backend/common/services/send-notice.js +86 -0
  34. package/backend/common/services/task.js +259 -0
  35. package/backend/common/services/user.js +673 -0
  36. package/backend/common/socket.js +18 -0
  37. package/backend/common/sse/index.js +81 -0
  38. package/backend/common/sse/router.js +30 -0
  39. package/backend/common/task.js +75 -0
  40. package/backend/common/wechat/index.js +9 -0
  41. package/backend/common/wechat/routers/auth.js +238 -0
  42. package/{modules/user/frontend → backend/common/wechat/routers}/index.html +14 -7
  43. package/backend/common/wechat/services/auth.js +209 -0
  44. package/backend/common/wechat/services/notice.js +171 -0
  45. package/backend/config/index.js +61 -0
  46. package/backend/config/path.js +3 -0
  47. package/backend/router.js +100 -0
  48. package/backend/routers/app.js +222 -0
  49. package/backend/routers/automate.js +276 -0
  50. package/backend/routers/dict.js +370 -0
  51. package/backend/routers/email.js +85 -0
  52. package/backend/routers/generalConfig.js +276 -0
  53. package/backend/routers/idm.js +245 -0
  54. package/backend/routers/module.js +357 -0
  55. package/backend/routers/notice.js +138 -0
  56. package/backend/routers/pages.js +46 -0
  57. package/backend/routers/permission.js +985 -0
  58. package/backend/routers/setting.js +184 -0
  59. package/backend/routers/team/index.js +22 -0
  60. package/backend/routers/team/routers/mapping.js +29 -0
  61. package/backend/routers/team/routers/member.js +72 -0
  62. package/backend/routers/team/routers/membermanage.js +289 -0
  63. package/backend/routers/team/routers/pages.js +47 -0
  64. package/backend/routers/team/routers/roles.js +92 -0
  65. package/backend/routers/team/routers/teaminfo.js +27 -0
  66. package/backend/routers/team/routers/usergroup.js +213 -0
  67. package/backend/routers/team/services/mapping.js +101 -0
  68. package/backend/routers/team/services/member.js +206 -0
  69. package/backend/routers/team/services/roles.js +71 -0
  70. package/backend/routers/team/services/teaminfo.js +20 -0
  71. package/backend/routers/team/services/usergroup.js +128 -0
  72. package/backend/routers/user.js +436 -0
  73. package/backend/services/automate.js +60 -0
  74. package/backend/services/config.js +14 -0
  75. package/backend/services/module.js +298 -0
  76. package/backend/services/permission.js +192 -0
  77. package/backend/services/services.js +115 -0
  78. package/backend/services/setting.js +190 -0
  79. package/backend/services/token.js +42 -0
  80. package/backend/space.js +52 -0
  81. package/backend/space_mapping.js +22 -0
  82. package/backend/utils/avatar.js +48 -0
  83. package/backend/utils/color_gen_helper.js +20 -0
  84. package/backend/utils/date.js +66 -0
  85. package/backend/utils/excel.js +446 -0
  86. package/backend/utils/fs/doc.md +64 -0
  87. package/backend/utils/fs/index.js +127 -0
  88. package/backend/utils/jwt.js +54 -0
  89. package/backend/utils/modules/sequence.js +93 -0
  90. package/backend/utils/object.js +31 -0
  91. package/backend/utils/page-query-helper/index.js +61 -0
  92. package/backend/utils/path.js +123 -0
  93. package/backend/utils/run.js +25 -0
  94. package/backend/utils/tokenize.js +82 -0
  95. package/backend/utils/typeof.js +5 -0
  96. package/backend/utils/util.js +153 -0
  97. package/backend/views/api/index.js +32 -0
  98. package/backend/views/api/index.xml +49 -0
  99. package/backend/views/dict/index.js +80 -0
  100. package/backend/views/dict/index.xml +52 -0
  101. package/backend/views/index.js +32 -0
  102. package/backend/views/members_manage/index.js +68 -0
  103. package/backend/views/members_manage/index.xml +68 -0
  104. package/backend/views/roles/index.js +17 -0
  105. package/backend/views/roles/index.xml +47 -0
  106. package/backend/views/usergroup/index.js +68 -0
  107. package/backend/views/usergroup/index.xml +65 -0
  108. package/dist/base-assets/css/index-ffdb55a5.css +3 -0
  109. package/dist/base-assets/css/index-ffdb55a5.css.gz +0 -0
  110. package/dist/base-assets/js/index-b3998a47.js +762 -0
  111. package/dist/base-assets/js/index-b3998a47.js.gz +0 -0
  112. package/dist/base-assets/js/react-cropper.es-d5f06996.js +10 -0
  113. package/dist/base-assets/js/react-cropper.es-d5f06996.js.gz +0 -0
  114. package/dist/base-assets/png/u9-2348c304.png +0 -0
  115. package/dist/base-assets/woff2/materialicons-83be7b2f.woff2 +0 -0
  116. package/dist/index.html +162 -0
  117. package/package.json +62 -5
  118. package/common/router.js +0 -42
  119. package/modules/user/backend/index.js +0 -19
  120. package/modules/user/backend/routers/user.js +0 -11
  121. package/modules/user/frontend/index.js +0 -1
  122. package/serve.js +0 -9
@@ -0,0 +1,92 @@
1
+ 'use strict';
2
+ const express = require('express');
3
+ const { parseQueryParams } = require('../../../utils/page-query-helper/index');
4
+ const rolesService = require('../services/roles');
5
+ const router = express.Router();
6
+
7
+ // 查询角色
8
+ router.get('/', async function (req, res) {
9
+ let queryParams = parseQueryParams(req.query, ['ORG_ID'], true, 50);
10
+ let searchParam = {};
11
+ for (let v in req.query) {
12
+ if (v !== 'page' && v !== 'size') {
13
+ searchParam[v] = req.query[v];
14
+ }
15
+ }
16
+
17
+ const results = await rolesService.getRolesLists(queryParams.pageInfo, searchParam);
18
+ if (!results) {
19
+ return res.sendErr('');
20
+ }
21
+ return res.sendOk(results);
22
+ });
23
+
24
+ // 新增角色
25
+ router.post('/', async function (req, res) {
26
+ const { ROLE_ID = '', ROLE_NAME = '' } = req.body;
27
+ if (ROLE_ID.length == 0) return res.sendErr('角色ID不能为空');
28
+ if (ROLE_NAME.length == 0) return res.sendErr('角色名称不能为空');
29
+ let data = await rolesService.isExistRoleId(ROLE_ID);
30
+ if (data.error) {
31
+ return res.sendErr(data.error);
32
+ }
33
+ if (data.results.length) return res.sendErr('角色ID已存在');
34
+
35
+ let result = await rolesService.addRoles(req.body);
36
+ if (result.error) {
37
+ return res.sendErr(result.error);
38
+ }
39
+
40
+ return res.sendOk('');
41
+ });
42
+
43
+ // 修改角色
44
+ router.put('/:ROLEID', async function (req, res) {
45
+ const { ROLE_ID = '', ROLE_NAME = '' } = req.body;
46
+ if (ROLE_ID.length == 0) return res.sendErr('角色ID不能为空');
47
+ if (ROLE_NAME.length == 0) return res.sendErr('角色名称不能为空');
48
+ let data = await rolesService.isExistRoleId(ROLE_ID);
49
+ if (data.error) {
50
+ return res.sendErr(data.error);
51
+ }
52
+ if (data.results.length == 0) return res.sendErr('角色ID不存在');
53
+ let result = await rolesService.modifyRoles(req.body);
54
+ if (result.error) {
55
+ return res.sendErr(result.error);
56
+ }
57
+
58
+ return res.sendOk();
59
+ });
60
+ //删除角色
61
+ router.delete('/:ROLEID', async function (req, res) {
62
+ const { ROLEID } = req.params;
63
+ if (ROLEID.length == 0) return res.sendErr('id不能为空');
64
+ let data = await rolesService.delRoles(ROLEID);
65
+ if (data.error) {
66
+ return res.sendErr(data.error);
67
+ }
68
+
69
+ return res.sendOk();
70
+ });
71
+
72
+ module.exports = router;
73
+
74
+ function dateFormat(fmt, date) {
75
+ date = new Date(date);
76
+ let ret;
77
+ const opt = {
78
+ 'Y+': date.getFullYear().toString(), // 年
79
+ 'm+': (date.getMonth() + 1).toString(), // 月
80
+ 'd+': date.getDate().toString(), // 日
81
+ 'H+': date.getHours().toString(), // 时
82
+ 'M+': date.getMinutes().toString(), // 分
83
+ 'S+': date.getSeconds().toString(), // 秒
84
+ };
85
+ for (let k in opt) {
86
+ ret = new RegExp('(' + k + ')').exec(fmt);
87
+ if (ret) {
88
+ fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0'));
89
+ }
90
+ }
91
+ return fmt;
92
+ }
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+ const express = require('express');
3
+ const router = express.Router();
4
+ const teaminfoService = require('../services/teaminfo');
5
+ // 查询团队信息
6
+ router.get('/', async function (req, res) {
7
+ const { error, results } = await teaminfoService.getTeamInfoList();
8
+ if (error) {
9
+ return res.sendErr(results.error);
10
+ }
11
+ if (results.length > 0) {
12
+ return res.sendOk(results[0]);
13
+ } else {
14
+ return res.sendOk({});
15
+ }
16
+ });
17
+
18
+ router.put('/', async function (req, res) {
19
+ let param = req.body;
20
+ const { error, results } = teaminfoService.modifyTeamInfo(param);
21
+ if (error) {
22
+ return res.sendErr(error);
23
+ }
24
+ return res.sendOk('');
25
+ });
26
+
27
+ module.exports = router;
@@ -0,0 +1,213 @@
1
+ 'use strict';
2
+ const express = require('express');
3
+ const router = express.Router();
4
+ const { parseQueryParams } = require('../../../utils/page-query-helper/index');
5
+ const userService = require('../../../common/services/user');
6
+ const userGroupService = require('../services/usergroup');
7
+ const memberService = require('../services/member');
8
+
9
+ /**
10
+ * @api {post} /team/usergroup/api/group 新增成员组
11
+ * @apiDescription 新增成员组
12
+ * @apiVersion 1.0.0
13
+ * type 部门id(DEPT_ID)
14
+ * inputId 用户组id(GROUP_ID)
15
+ * name 用户组名称(GROUP_NAME)
16
+ * */
17
+ router.post('/api/group', async function (req, res) {
18
+ const { pid, inputId, name } = req.body;
19
+ if (!pid || !inputId || !name) return res.sendErr('参数错误');
20
+ var reg = /^[a-zA-Z_-]([a-zA-Z0-9_-]+)?$/;
21
+ if (!reg.test(inputId)) return res.sendErr('节点id只支持以英文字字母或下划线开头的组合!');
22
+ let groupUser = await userGroupService.getGroupUsers({
23
+ GROUP_ID: inputId,
24
+ });
25
+ if (groupUser.error) return res.sendErr('操作失败');
26
+ if (groupUser.results.length > 0) return res.sendErr('部门id重复');
27
+ let idmDept = await memberService.isExistMemberId({ DEPT_NO: inputId });
28
+ if (idmDept.error) return res.sendErr('数据库操作失败');
29
+ if (idmDept.results.length > 0) return res.sendErr('部门id重复');
30
+
31
+ let result = await userGroupService.addUserGroup({
32
+ GROUP_ID: inputId,
33
+ DEPT_ID: pid,
34
+ GROUP_NAME: name,
35
+ });
36
+ if (result.error) return res.sendErr('操作失败');
37
+ return res.sendOk();
38
+ });
39
+
40
+ router.delete('/api/group', async function (req, res) {
41
+ const { id } = req.body;
42
+ if (!id) return res.sendErr('参数失败');
43
+ let result = await userGroupService.deleteGroup({
44
+ GROUP_ID: id,
45
+ });
46
+ if (!result) return res.sendErr('操作失败');
47
+
48
+ let groupUser = await userGroupService.delGroupUser({
49
+ GROUP_ID: id,
50
+ });
51
+ if (!groupUser) return res.sendErr('删除失败');
52
+ return res.sendOk();
53
+ });
54
+
55
+ router.put('/api/group', async function (req, res) {
56
+ const { id, name } = req.body;
57
+ if (!id || !name) return res.sendErr('参数错误');
58
+ let result = await userGroupService.modifyGroup({ GROUP_NAME: name }, { GROUP_ID: id });
59
+ if (!result) return res.sendErr('操作失败');
60
+
61
+ return res.sendOk();
62
+ });
63
+
64
+ /***
65
+ * @api {get}/team/usergroup
66
+ * @apiDescription 查询用户组成员
67
+ * @apiVersion 1.0.0
68
+ * GROUP_ID 用户组id(GROUP_ID)
69
+ * */
70
+ router.get('/', async function (req, res) {
71
+ const { params, pageInfo } = parseQueryParams(req.query, ['ORG_ID'], true, 50);
72
+ const { GROUP_ID } = params;
73
+ if (!GROUP_ID) return res.sendErr('参数错误');
74
+ let isHasLeader = params.LEADER;
75
+ delete params.LEADER;
76
+ let result = await userGroupService.getGroupUserList(params, pageInfo);
77
+ if (!result) return res.sendErr('操作失败');
78
+ let GroupUser = await userGroupService.getGroupUsers({ GROUP_ID });
79
+ if (GroupUser.error) return res.sendErr('查询失败');
80
+ if (GroupUser.results.length > 0) {
81
+ const [teaminfo] = GroupUser.results;
82
+ const { GROUP_LEADER } = teaminfo;
83
+ result.content = result.content.map((v) => {
84
+ if (v.USER_ID == GROUP_LEADER) {
85
+ return {
86
+ ...v,
87
+ LEADER: '负责人',
88
+ };
89
+ } else {
90
+ return {
91
+ ...v,
92
+ LEADER: '',
93
+ };
94
+ }
95
+ });
96
+ }
97
+ if (isHasLeader) {
98
+ let reuslts = [];
99
+ result.content.map((user) => {
100
+ if (user.LEADER == '负责人') {
101
+ if (user.USER_NAME.indexOf(isHasLeader) > -1) {
102
+ reuslts.push(user);
103
+ }
104
+ }
105
+ });
106
+ result.content = reuslts;
107
+ }
108
+ return res.sendOk(result);
109
+ });
110
+
111
+ /***
112
+ * @api {post} /team/usergroup
113
+ * @apiDescription 新增用户组成员
114
+ * @apiVersion 1.0.0
115
+ * GROUP_ID 用户组id(GROUP_ID)
116
+ * USER_ID 用户的userid
117
+ * */
118
+ router.post('/', async function (req, res) {
119
+ let userid = req.get('X-UserId');
120
+ const { GROUP_ID, USER_ID } = req.body;
121
+ if (!GROUP_ID || !USER_ID) return res.sendErr('参数错误');
122
+ let users = USER_ID.split(',');
123
+ users = users.map((v) => {
124
+ if (v == 'currentUser') {
125
+ return userid;
126
+ } else {
127
+ return v;
128
+ }
129
+ });
130
+ let userGroup = await userGroupService.getGroupUser(GROUP_ID, users);
131
+ if (!userGroup) return res.sendErr('数据库操作失败!');
132
+ if (userGroup.length > 0) {
133
+ for (let i = 0; i < userGroup.length; i++) {
134
+ const { USER_ID } = userGroup[i];
135
+ let curUser = await userService.getUserInfo(USER_ID);
136
+ if (Object.keys(curUser).length > 0) {
137
+ const { USER_NAME } = curUser;
138
+ return res.sendErr(USER_NAME + '已存在');
139
+ }
140
+ }
141
+ }
142
+
143
+ for (let i = 0; i < users.length; i++) {
144
+ let result = await userGroupService.addGroupUser({
145
+ GROUP_ID,
146
+ USER_ID: users[i],
147
+ });
148
+ if (!result) return res.sendErr('添加失败');
149
+ }
150
+ return res.sendOk();
151
+ });
152
+
153
+ /**
154
+ * @api {delete} /team/usergroup
155
+ * @apiDescription 批量删除用户组成员
156
+ * @apiVersion 1.0.0
157
+ * GROUP_ID 用户组id(GROUP_ID)
158
+ * ids 用户的userid(USER_ID)
159
+ * */
160
+ router.delete('/', async function (req, res) {
161
+ const { GROUP_ID, ids } = req.body;
162
+ if (!GROUP_ID || !ids) return res.sendErr('参数错误');
163
+ let users = ids.split(',');
164
+ for (let i = 0; i < users.length; i++) {
165
+ let result = await userGroupService.delGroupUser({
166
+ GROUP_ID,
167
+ USER_ID: users[i],
168
+ });
169
+ if (!result) return res.sendErr('操作失败');
170
+ }
171
+ return res.sendOk();
172
+ });
173
+
174
+ /**
175
+ * @api {put} /team/usergroup
176
+ * @apiDescription 修改用户组成员
177
+ * @apiVersion 1.0.0
178
+ * GROUP_ID 用户组id(GROUP_ID)
179
+ * ids 用户的userid(USER_ID)
180
+ * */
181
+ router.put('/', async function (req, res) {
182
+ const { GROUP_ID, REMARKS, USER_ID, USER_ROLE } = req.body;
183
+ if (!GROUP_ID || !USER_ID) return res.sendErr('参数错误');
184
+ let result = await userGroupService.modifyGroupUser(req.body);
185
+ if (!result) return res.sendErr('操作失败');
186
+ return res.sendOk();
187
+ });
188
+
189
+ /**
190
+ * @api {post} /team/api/usergroup/leader
191
+ * @apiDescription 新增负责人
192
+ * @apiVersion 1.0.0
193
+ * ids 用户的userid(USER_ID)
194
+ * GROUP_ID 组的id
195
+ * */
196
+ router.post('/api/usergroup/leader', async function (req, res) {
197
+ const { ids, GROUP_ID } = req.body;
198
+ if (!ids) return res.sendErr('请选择负责人');
199
+ let users = ids.split(',');
200
+ if (users.length > 1) return res.sendErr('负责人只能选中一个');
201
+ let result = await userGroupService.modifyGroup(
202
+ {
203
+ GROUP_LEADER: users[0],
204
+ },
205
+ {
206
+ GROUP_ID: GROUP_ID,
207
+ },
208
+ );
209
+ if (!result) return res.sendErr('操作失败');
210
+ return res.sendOk();
211
+ });
212
+
213
+ module.exports = router;
@@ -0,0 +1,101 @@
1
+ 'use strict';
2
+ const isPlainObject = require('lodash/isPlainObject');
3
+ const dictService = require('../../../common/services/dict');
4
+ const userService = require('../../../common/services/user');
5
+ const deptService = require('../../../common/services/dept');
6
+ // 字典表需要的组
7
+ const DICT_GROUPS = [
8
+ 'REPOS_TYPE', // 文档库类型
9
+ 'ROULE_TYPE',
10
+ 'ROULE_ID',
11
+ 'IDM_EDUCATION', //学校类型
12
+ 'IDM_USER_POSITION', //职位
13
+ 'IDM_USER_STATUS', //是否在在职
14
+ 'IDM_USER_TYPE', //员工类型
15
+ 'IDM_USER_GENDER', //性别
16
+ 'ORGAN_TYPE',
17
+ ];
18
+
19
+ // 和项目无关的
20
+ const NOT_RELATED = [
21
+ 'USER_LIST', // 所有用户
22
+ 'DEPT_LIST', //部门
23
+ ];
24
+ const mappingService = {
25
+ DICT_GROUPS,
26
+ NOT_RELATED,
27
+ /**
28
+ * @param {string[]} list
29
+ */
30
+ async getMapping(list = []) {
31
+ if (!Array.isArray(list)) return null;
32
+ let relatedList = NOT_RELATED.slice();
33
+ // 分类
34
+ let dictGroups = []; // 字典表内
35
+ let related = []; // 非字典表
36
+ if (!list.length) {
37
+ dictGroups = DICT_GROUPS.slice();
38
+ related = relatedList;
39
+ } else {
40
+ list.forEach((v) => {
41
+ if (~DICT_GROUPS.indexOf(v)) {
42
+ dictGroups.push(v);
43
+ } else if (~relatedList.indexOf(v)) {
44
+ related.push(v);
45
+ }
46
+ });
47
+ }
48
+
49
+ let data = {};
50
+
51
+ // 先搂字典表
52
+ if (Array.isArray(dictGroups) && dictGroups.length) {
53
+ let dicts = await dictService.getDicts(dictGroups);
54
+ if (isPlainObject(dicts)) {
55
+ Object.entries(dicts).forEach((dict) => {
56
+ let [key, value] = dict;
57
+ if (Array.isArray(value) && value.length) {
58
+ data[key] = value.reduce((mo, item) => {
59
+ let { value, ...rest } = item;
60
+ mo[value] = rest;
61
+ return mo;
62
+ }, {});
63
+ }
64
+ });
65
+ }
66
+ }
67
+
68
+ let servicesMap = {
69
+ USER_LIST: userService.getUsers(),
70
+ DEPT_LIST: deptService.getDepts(),
71
+ };
72
+
73
+ // 再拿项目相关表的数据
74
+ if (Array.isArray(related) && related.length) {
75
+ related = related.filter((it) => it in servicesMap);
76
+ let res = await Promise.all(related.map((it) => servicesMap[it]));
77
+ related.forEach((it, index) => {
78
+ if (it === 'USER_LIST' && res[index]) {
79
+ data[it] = res[index].reduce((mo, item) => {
80
+ if (item.USER_ID) {
81
+ mo[item.USER_ID] = item.USER_NAME;
82
+ }
83
+ return mo;
84
+ }, {});
85
+ }
86
+ if (it === 'DEPT_LIST' && res[index]) {
87
+ data[it] = res[index].reduce((mo, item) => {
88
+ if (item.DEPT_NO) {
89
+ mo[item.DEPT_NO] = item.DEPT_NAME;
90
+ }
91
+ return mo;
92
+ }, {});
93
+ }
94
+ });
95
+ }
96
+
97
+ return data;
98
+ },
99
+ };
100
+
101
+ module.exports = mappingService;
@@ -0,0 +1,206 @@
1
+ 'use strict';
2
+ const {
3
+ sqlExecutor,
4
+ insertSqlBuilder,
5
+ updateSqlBuilder,
6
+ deleteSqlBuilder,
7
+ queryBaseSqlBuilder,
8
+ } = require('@gingkoo/node-tools');
9
+ const entity = require('../../../common/entity');
10
+ const { idmLevelType } = require('../../../common/enum');
11
+
12
+ const memberService = {
13
+ async isExitMember(userid) {
14
+ const { sql, params } = await queryBaseSqlBuilder(entity.IDM_USERS, { USER_ID: userid });
15
+ let result = await sqlExecutor(sql, params);
16
+ return result;
17
+ },
18
+
19
+ async delMember(userid) {
20
+ let body = {
21
+ STATUS: '01',
22
+ };
23
+ const { sql, params } = await updateSqlBuilder(entity.IDM_USERS, body, { USER_ID: userid });
24
+ let result = await sqlExecutor(sql, params);
25
+ return result;
26
+ },
27
+ /***
28
+ * 修改用户/部门
29
+ * */
30
+ async modifyGroupDepts(idm, value, type) {
31
+ let databaseName =
32
+ type == idmLevelType.IDM_LENVEL_TYPE.GROUP ? entity.IDM_GROUPS : entity.IDM_DEPTS;
33
+ let mdoifyFieldName = type == idmLevelType.IDM_LENVEL_TYPE.GROUP ? 'GROUP_NAME' : 'DEPT_NAME';
34
+ let queryCrity = type == idmLevelType.IDM_LENVEL_TYPE.GROUP ? 'GROUP_ID' : 'DEPT_NO';
35
+ const { sql, params } = await updateSqlBuilder(
36
+ databaseName,
37
+ {
38
+ [mdoifyFieldName]: value,
39
+ },
40
+ { [queryCrity]: idm },
41
+ );
42
+
43
+ let results = await sqlExecutor(sql, params);
44
+ return results;
45
+ },
46
+
47
+ /***
48
+ * 查询部门下的子部门
49
+ * */
50
+ async getIdmDeptChildDept(parentId) {
51
+ let sql = `SELECT ORG_ID,DEPT_NO,DEPT_PARENT FROM idm_depts WHERE DEPT_PARENT LIKE '${parentId}/%' AND ORG_ID =?`;
52
+ let result = await sqlExecutor(sql, [global.orgid]);
53
+ if (result.error) {
54
+ return null;
55
+ }
56
+ return result.results;
57
+ },
58
+
59
+ /***
60
+ * 删除部门
61
+ * */
62
+ async delGroupDepts(filter) {
63
+ let filters = filter || {};
64
+ filter.ORG_ID = global.orgid;
65
+ const { sql, params } = await deleteSqlBuilder(entity.IDM_DEPTS, filters);
66
+ const result = await sqlExecutor(sql, params);
67
+ if (result.error) return null;
68
+ return result;
69
+ },
70
+
71
+ /**
72
+ * 判断部门的id是否存在
73
+ * filter{}
74
+ */
75
+
76
+ async isExistMemberId(filter) {
77
+ let filters = filter || {};
78
+ filters.ORG_ID = global.orgid;
79
+ const { sql, params } = await queryBaseSqlBuilder(entity.IDM_DEPTS, filter);
80
+ const result = await sqlExecutor(sql, params);
81
+ return result;
82
+ },
83
+
84
+ /**
85
+ * 查询当前部门下的PARENTid
86
+ *
87
+ * */
88
+ async getIdmDeptParentId(parentId) {
89
+ let sql = '';
90
+ if (parentId == global.orgid) {
91
+ sql = `SELECT DEPT_PARENT FROM ${entity.IDM_DEPTS} WHERE ORG_ID=? AND char_length(DEPT_PARENT) = (char_length(replace(DEPT_PARENT,'/','')) + 1) `;
92
+ } else {
93
+ sql = `SELECT DEPT_PARENT FROM ${
94
+ entity.IDM_DEPTS
95
+ } WHERE DEPT_PARENT like '${parentId}%' AND char_length(DEPT_PARENT)>${
96
+ parentId.length
97
+ } AND char_length(DEPT_PARENT)<=${parentId.length + 2} AND ORG_ID =?`;
98
+ }
99
+
100
+ let result = await sqlExecutor(sql, [global.orgid]);
101
+ if (result.error) {
102
+ return null;
103
+ }
104
+ return result.results;
105
+ },
106
+
107
+ /**
108
+ * 新增 用户/部门
109
+ * */
110
+ async addGroupDepts(filter) {
111
+ let filters = filter || {};
112
+ filters.ORG_ID = global.orgid;
113
+ const { sql, params } = await insertSqlBuilder(entity.IDM_DEPTS, filters);
114
+ let result = await sqlExecutor(sql, params);
115
+ return result;
116
+ },
117
+
118
+ /**
119
+ * 删除部门
120
+ * */
121
+ async deleteDept(filter = {}) {
122
+ filter.ORG_ID = global.orgid;
123
+ const { sql, params } = await deleteSqlBuilder(entity.IDM_DEPTS, filter);
124
+ const result = await sqlExecutor(sql, params);
125
+ return result;
126
+ },
127
+ /**
128
+ * 删除部门
129
+ * */
130
+ async deleteGroupDept(filter = {}) {
131
+ filter.ORG_ID = global.orgid;
132
+ const { sql, params } = await deleteSqlBuilder(entity.IDM_GROUPS, filter);
133
+ const result = await sqlExecutor(sql, params);
134
+ return result;
135
+ },
136
+
137
+ /**
138
+ * 查询部门信息
139
+ * */
140
+ async getIdmGroup(filter = {}) {
141
+ filter.ORG_ID = global.orgid;
142
+ const { sql, params } = await queryBaseSqlBuilder(entity.IDM_GROUPS, filter);
143
+ let result = await sqlExecutor(sql, params);
144
+ return result;
145
+ },
146
+
147
+ /**
148
+ * 删除成员组成员
149
+ * 筛选条件 filter{}
150
+ * */
151
+ async deleteGrouopMember(filter = {}) {
152
+ filter.ORG_ID = global.orgid;
153
+ const { sql, params } = await deleteSqlBuilder(entity.IDM_GROUP_MEMBERS, filter);
154
+ const result = await sqlExecutor(sql, params);
155
+ return result;
156
+ },
157
+
158
+ /****
159
+ * 查询组成员是否存在
160
+ * @param USER_ID 用户id
161
+ * @param GROUP_ID 部门
162
+ * */
163
+ async isExistGroupMember(USER_ID, GROUP_ID) {
164
+ const { sql, params } = await queryBaseSqlBuilder(entity.IDM_GROUP_MEMBERS, {
165
+ ORG_ID: global.orgid,
166
+ USER_ID,
167
+ GROUP_ID,
168
+ });
169
+ const result = await sqlExecutor(sql, params);
170
+ if (result.error) {
171
+ return null;
172
+ }
173
+ return result.results;
174
+ },
175
+
176
+ /* *
177
+ * 查询部门表
178
+ * */
179
+ async getIdmDepts(filter) {
180
+ let filters = filter || {};
181
+ filters.ORG_ID = global.orgid;
182
+ const { sql, params } = await queryBaseSqlBuilder(entity.IDM_DEPTS, filters);
183
+ const result = await sqlExecutor(sql, params);
184
+ if (result.error) {
185
+ return null;
186
+ }
187
+ if (result.results.length > 0) {
188
+ return result.results[0];
189
+ }
190
+ return {};
191
+ },
192
+
193
+ /***
194
+ * 修改部门信息
195
+ * */
196
+ async updateIdmDept(body, filter) {
197
+ let filters = filter || {};
198
+ filter.ORG_ID = global.orgid;
199
+ const { sql, params } = await updateSqlBuilder(entity.IDM_DEPTS, body, filters);
200
+ let result = await sqlExecutor(sql, params);
201
+ if (result.error) return null;
202
+ return result;
203
+ },
204
+ };
205
+
206
+ module.exports = memberService;
@@ -0,0 +1,71 @@
1
+ 'use strict';
2
+ const {
3
+ sqlExecutor,
4
+ pageQuery,
5
+ insertSqlBuilder,
6
+ updateSqlBuilder,
7
+ deleteSqlBuilder,
8
+ queryBaseSqlBuilder,
9
+ queryParamsBuilder,
10
+ } = require('@gingkoo/node-tools');
11
+ const entity = require('../../../common/entity');
12
+
13
+ const rolesService = {
14
+ async getRolesLists(pageInfo, searchParam) {
15
+ let pageSize = pageInfo.pageSize;
16
+ let pageIndex = pageInfo.pageIndex;
17
+ let parmas = [global.orgid];
18
+ let sql = `select * from ${entity.IDM_ROLES} where ORG_ID =? and ROLE_TYPE='MANAGER'`;
19
+ if (Object.keys(searchParam).length > 0) {
20
+ let pops = {};
21
+ for (let v in searchParam) {
22
+ pops[v] = 'like';
23
+ }
24
+ const result = await queryParamsBuilder(searchParam, null, null, pops);
25
+ sql += ' and ' + result.sql;
26
+ }
27
+ let result = await pageQuery(sql, parmas, pageSize, pageIndex);
28
+ return result;
29
+ },
30
+ isExistRoleId: async function (id) {
31
+ const { sql, params } = await queryBaseSqlBuilder(entity.IDM_ROLES, { ROLE_ID: id });
32
+ let data = await sqlExecutor(sql, params);
33
+ return data;
34
+ },
35
+
36
+ async addRoles(param) {
37
+ let body = {
38
+ ORG_ID: global.orgid,
39
+ ROLE_ID: param.ROLE_ID || '',
40
+ ROLE_NAME: param.ROLE_NAME || '',
41
+ ROLE_TYPE: 'MANAGER',
42
+ DEPT_NOS: param.DEPT_NOS || '',
43
+ REMARKS: param.REMARKS || '',
44
+ };
45
+ const { sql, params } = await insertSqlBuilder(entity.IDM_ROLES, body);
46
+ let result = await sqlExecutor(sql, params);
47
+ return result;
48
+ },
49
+
50
+ async delRoles(id) {
51
+ const { sql, params } = await deleteSqlBuilder(entity.IDM_ROLES, { ROLE_ID: id });
52
+ let data = await sqlExecutor(sql, params);
53
+ return data;
54
+ },
55
+
56
+ async modifyRoles(param) {
57
+ let body = {
58
+ ROLE_NAME: param.ROLE_NAME || '',
59
+ ROLE_TYPE: 'MANAGER',
60
+ DEPT_NOS: param.DEPT_NOS || '',
61
+ REMARKS: param.REMARKS || '',
62
+ };
63
+ const { sql, params } = await updateSqlBuilder(entity.IDM_ROLES, body, {
64
+ ROLE_ID: param.ROLE_ID,
65
+ });
66
+ let result = await sqlExecutor(sql, params);
67
+ return result;
68
+ },
69
+ };
70
+
71
+ module.exports = rolesService;