GetAttendanceItemList.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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: 1547544
  45. });
  46. }
  47. // 收集需要查询的用户 UUID
  48. const userUuids = new Set();
  49. const addUserUuid = (uuid) => userUuids.add(uuid);
  50. items.forEach(item => {
  51. addUserUuid(item.createUser);
  52. item.user.forEach(addUserUuid);
  53. item.admin.forEach(addUserUuid);
  54. addUserUuid(item.createUser);
  55. });
  56. // 如果没有需要查询的用户,直接返回结果
  57. if (userUuids.size === 0) {
  58. return res.json({
  59. ...BaseStdResponse.OK,
  60. data: items,
  61. userInfo: {}
  62. });
  63. }
  64. const userInfo = {};
  65. // 从缓存中获取用户信息
  66. await Promise.all(Array.from(userUuids).map(async (uuid) => {
  67. const userCache = await UserInfoCache.getUserByUuid(uuid);
  68. userInfo[uuid] = {
  69. ...userCache
  70. };
  71. }));
  72. res.json({
  73. ...BaseStdResponse.OK,
  74. data: items,
  75. userInfo
  76. });
  77. } catch (error) {
  78. this.logger.error(`获取考勤列表时出错:${error.stack}`);
  79. res.json({
  80. ...BaseStdResponse.DATABASE_ERR,
  81. endpoint: 154754511,
  82. });
  83. }
  84. }
  85. }
  86. module.exports.GetAttendanceItemList = GetAttendanceItemList;