GetAttendanceItemList.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. const API = require("../../lib/API");
  2. const { BaseStdResponse } = require("../../BaseStdResponse");
  3. const db = require("../../plugin/DataBase/db");
  4. const AccessControl = require("../../lib/AccessControl");
  5. const UserInfoCache = require("../../lib/UserInfoCache");
  6. class GetAttendanceItemList extends API {
  7. constructor() {
  8. super();
  9. this.setPath('/Attendance');
  10. this.setMethod('GET');
  11. }
  12. async onRequest(data, res) {
  13. this.setAllowCORS(res);
  14. const { uuid, session } = data;
  15. // 检查必需的参数是否缺失
  16. if (!uuid || !session) {
  17. return res.json({
  18. ...BaseStdResponse.MISSING_PARAMETER,
  19. endpoint: 1513123
  20. });
  21. }
  22. // 检查 session 是否有效
  23. if (!await AccessControl.checkSession(uuid, session)) {
  24. return res.json({
  25. ...BaseStdResponse.ACCESS_DENIED,
  26. endpoint: 48153145
  27. });
  28. }
  29. // 确认权限
  30. const permission = await AccessControl.getPermission(uuid);
  31. const hasPermission = ['manage', 'admin'].some(group => permission.includes(group));
  32. if (!hasPermission) {
  33. return res.json({
  34. ...BaseStdResponse.PERMISSION_DENIED,
  35. endpoint: 481454
  36. });
  37. }
  38. try {
  39. // 获取考勤项目列表
  40. const sqlGetItems = 'SELECT * FROM kq_items ORDER BY id DESC';
  41. const [items] = await db.query(sqlGetItems);
  42. if (!items) {
  43. return res.json({
  44. ...BaseStdResponse.DATABASE_ERR,
  45. endpoint: 154754511
  46. });
  47. }
  48. // 收集需要查询的用户 UUID
  49. const userUuids = new Set();
  50. const addUserUuid = (uuid) => userUuids.add(uuid);
  51. items.forEach(item => {
  52. addUserUuid(item.uuid);
  53. const users = JSON.parse(item.user || '[]');
  54. users.forEach(addUserUuid);
  55. if (item.admin) {
  56. const admins = JSON.parse(item.admin);
  57. admins.forEach(addUserUuid);
  58. }
  59. addUserUuid(item.createUser);
  60. });
  61. // 如果没有需要查询的用户,直接返回结果
  62. if (userUuids.size === 0) {
  63. return res.json({
  64. ...BaseStdResponse.OK,
  65. data: items,
  66. userInfo: {}
  67. });
  68. }
  69. const userInfo = {};
  70. // 从缓存中获取用户信息
  71. await Promise.all(Array.from(userUuids).map(async (uuid) => {
  72. const userCache = await UserInfoCache.getUserByUuid(uuid);
  73. userInfo[uuid] = {
  74. userCache
  75. };
  76. }));
  77. res.json({
  78. ...BaseStdResponse.OK,
  79. data: items,
  80. userInfo
  81. });
  82. } catch (error) {
  83. res.json({
  84. ...BaseStdResponse.DATABASE_ERR,
  85. endpoint: 154754511
  86. });
  87. }
  88. }
  89. }
  90. module.exports.GetAttendanceItemList = GetAttendanceItemList;