GetAttendanceItemList.js 3.2 KB

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