123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- const API = require("../../lib/API");
- const { BaseStdResponse } = require("../../BaseStdResponse");
- const db = require("../../plugin/DataBase/db");
- const AccessControl = require("../../lib/AccessControl");
- const UserInfoCache = require("../../lib/UserInfoCache");
- class GetAttendanceItemList extends API {
- constructor() {
- super();
-
- this.setPath('/Attendance');
- this.setMethod('GET');
- }
- async onRequest(req, res) {
- const { uuid, session } = req.query;
- // 检查必需的参数是否缺失
- if (!uuid || !session) {
- return res.json({
- ...BaseStdResponse.MISSING_PARAMETER,
- endpoint: 1513123
- });
- }
- // 检查 session 是否有效
- if (!await AccessControl.checkSession(uuid, session)) {
- return res.json({
- ...BaseStdResponse.ACCESS_DENIED,
- endpoint: 48153145
- });
- }
- // 确认权限
- const permission = await AccessControl.getPermission(uuid);
- const hasPermission = ['manage', 'admin'].some(group => permission.includes(group));
- if (!hasPermission) {
- return res.json({
- ...BaseStdResponse.PERMISSION_DENIED,
- endpoint: 481454
- });
- }
- try {
- // 获取考勤项目列表
- const sqlGetItems = 'SELECT * FROM kq_items ORDER BY id DESC';
- const items = await db.query(sqlGetItems);
- if (!items) {
- return res.json({
- ...BaseStdResponse.DATABASE_ERR,
- endpoint: 154754511
- });
- }
- // 收集需要查询的用户 UUID
- const userUuids = new Set();
- const addUserUuid = (uuid) => userUuids.add(uuid);
- items.forEach(item => {
- addUserUuid(item.uuid);
- const users = JSON.parse(item.user || '[]');
- users.forEach(addUserUuid);
- if (item.admin) {
- const admins = JSON.parse(item.admin);
- admins.forEach(addUserUuid);
- }
- addUserUuid(item.createUser);
- });
- // 如果没有需要查询的用户,直接返回结果
- if (userUuids.size === 0) {
- return res.json({
- ...BaseStdResponse.OK,
- data: items,
- userInfo: {}
- });
- }
- const userInfo = {};
- // 从缓存中获取用户信息
- await Promise.all(Array.from(userUuids).map(async (uuid) => {
- const userCache = await UserInfoCache.getUserByUuid(uuid);
- userInfo[uuid] = {
- userCache
- };
- }));
- res.json({
- ...BaseStdResponse.OK,
- data: items,
- userInfo
- });
- } catch (error) {
- res.json({
- ...BaseStdResponse.DATABASE_ERR,
- endpoint: 154754511
- });
- }
- }
- }
- module.exports.GetAttendanceItemList = GetAttendanceItemList;
|