GetAttendanceItemDetail.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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 GetAttendanceItemDetail extends API {
  7. constructor() {
  8. super();
  9. this.setPath('/GetAttendanceItemDetail');
  10. this.setMethod('GET');
  11. }
  12. async onRequest(req, res) {
  13. const { uuid, session, project_id } = req.query;
  14. // 检查必需的参数是否缺失
  15. if (!uuid || !session || !project_id) {
  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. try {
  29. // 获取考勤项目详情
  30. const sqlGetProject = 'SELECT * FROM kq_items WHERE id = ?';
  31. let projectResult = await db.query(sqlGetProject, [project_id]);
  32. if (!projectResult || projectResult.length === 0) {
  33. return res.json({
  34. ...BaseStdResponse.DATABASE_ERR,
  35. endpoint: 154754511
  36. });
  37. }
  38. // 获取考勤记录
  39. const sqlGetRecords = 'SELECT id, uuid, time, commit FROM kq_records WHERE project_id = ?';
  40. let records = await db.query(sqlGetRecords, [project_id]);
  41. // 收集需要查询的用户 UUID
  42. const userUuids = new Set();
  43. const addUserUuid = (uuid) => userUuids.add(uuid);
  44. projectResult.forEach(item => {
  45. addUserUuid(item.createUser);
  46. item.user.forEach(addUserUuid);
  47. item.admin.forEach(addUserUuid);
  48. addUserUuid(item.createUser);
  49. });
  50. // 如果没有需要查询的用户,直接返回结果
  51. if (userUuids.size === 0) {
  52. return res.json({
  53. ...BaseStdResponse.OK,
  54. data: projectResult[0],
  55. userInfo: {},
  56. records
  57. });
  58. }
  59. const userInfo = {};
  60. // 从缓存中获取用户信息
  61. await Promise.all(Array.from(userUuids).map(async (uuid) => {
  62. const userCache = await UserInfoCache.getUserByUuid(uuid);
  63. userInfo[uuid] = {
  64. ...userCache
  65. };
  66. }));
  67. res.json({
  68. ...BaseStdResponse.OK,
  69. data: projectResult[0],
  70. userInfo,
  71. records
  72. });
  73. } catch (error) {
  74. res.json({
  75. ...BaseStdResponse.DATABASE_ERR,
  76. endpoint: 154754511
  77. });
  78. }
  79. }
  80. }
  81. module.exports.GetAttendanceItemDetail = GetAttendanceItemDetail;