EditAttendanceItems.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. class EditAttendanceItems extends API {
  6. constructor() {
  7. super();
  8. this.setPath('/Attendance');
  9. this.setMethod('PUT');
  10. }
  11. async onRequest(req, res) {
  12. let {
  13. uuid,
  14. session,
  15. id,
  16. name,
  17. user,
  18. day_of_week,
  19. loopy,
  20. begintime,
  21. endtime,
  22. position,
  23. radius,
  24. address,
  25. admin
  26. } = req.body;
  27. // 检查必需的参数是否缺失
  28. if ([uuid, session, id, name, user, day_of_week, loopy, begintime, endtime, position, radius].some(value => value === '' || value === null || value === undefined)) {
  29. return res.json({
  30. ...BaseStdResponse.MISSING_PARAMETER,
  31. endpoint: 1513123
  32. });
  33. }
  34. if (radius <= 0 || radius >= 1000000) {
  35. return res.json({
  36. ...BaseStdResponse.ERR,
  37. msg: '打卡半径不在限制范围内!'
  38. })
  39. }
  40. if(!this.getTime(begintime, endtime)) {
  41. return res.json({
  42. ...BaseStdResponse.ERR,
  43. msg: '考勤时间不合法!'
  44. })
  45. }
  46. // 检查 session 是否有效
  47. if (!await AccessControl.checkSession(uuid, session)) {
  48. res.json({
  49. ...BaseStdResponse.ACCESS_DENIED,
  50. endpoint: 48153145
  51. });
  52. return;
  53. }
  54. // 获取考勤项目
  55. const sqlGetProject = 'SELECT createUser, admin FROM kq_items WHERE id = ?';
  56. let projectResult = await db.query(sqlGetProject, [id]);
  57. if (!projectResult || projectResult.length === 0) {
  58. res.json({
  59. ...BaseStdResponse.DATABASE_ERR,
  60. endpoint: 154754511
  61. });
  62. return;
  63. }
  64. let projectData = projectResult[0];
  65. // 检查用户权限
  66. let permission = await AccessControl.getPermission(uuid);
  67. if (projectData.createUser !== uuid && !permission.includes('admin') && !projectData.admin.includes(uuid)) {
  68. return res.json({
  69. ...BaseStdResponse.PERMISSION_DENIED,
  70. endpoint: 481454,
  71. msg: '你不是该考勤项目管理员,无操作权限'
  72. });
  73. }
  74. user = user.split('|');
  75. admin = admin.split('|');
  76. let uuids = [], admins = [];
  77. try {
  78. uuids = await AccessControl.checkUser(user);
  79. if (admin != '')
  80. admins = await AccessControl.checkUser(admin, true);
  81. } catch (error) {
  82. return res.json({
  83. ...BaseStdResponse.ERR,
  84. endpoint: 513513,
  85. msg: error.message
  86. });
  87. }
  88. // 更新考勤项目
  89. const sqlUpdateProject = `
  90. UPDATE kq_items
  91. SET
  92. name = ?,
  93. user = ?,
  94. day_of_week = ?,
  95. loopy = ?,
  96. begintime = ?,
  97. endtime = ?,
  98. position = ?,
  99. radius = ?,
  100. address = ?,
  101. admin = ?
  102. WHERE id = ?
  103. `;
  104. let updateResult = await db.query(sqlUpdateProject, [
  105. name,
  106. JSON.stringify(uuids),
  107. day_of_week,
  108. loopy,
  109. begintime,
  110. endtime,
  111. JSON.stringify(position),
  112. radius,
  113. address,
  114. JSON.stringify(admins),
  115. id
  116. ]);
  117. if (!updateResult || updateResult.affectedRows !== 1) {
  118. res.json({
  119. ...BaseStdResponse.DATABASE_ERR,
  120. endpoint: 513513
  121. });
  122. return;
  123. }
  124. res.json({
  125. ...BaseStdResponse.OK
  126. });
  127. }
  128. getTime(begintime, endtime) {
  129. const [bhours, bminutes, bseconds] = begintime.split(':').map(Number);
  130. const [ehours, eminutes, eseconds] = endtime.split(':').map(Number);
  131. const begin = bhours * 3600 + bminutes * 60 + bseconds;
  132. const end = ehours * 3600 + eminutes * 60 + eseconds;
  133. return begin < end
  134. }
  135. }
  136. module.exports.EditAttendanceItems = EditAttendanceItems;