AddAttendanceItems.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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 AddAttendanceItems extends API {
  6. constructor() {
  7. super();
  8. this.setPath('/Attendance');
  9. this.setMethod('POST');
  10. }
  11. async onRequest(req, res) {
  12. let {
  13. uuid,
  14. session,
  15. name,
  16. user,
  17. day_of_week,
  18. loopy,
  19. begintime,
  20. endtime,
  21. position,
  22. radius,
  23. address,
  24. admin
  25. } = req.body;
  26. // 检查必需的参数是否缺失
  27. if ([uuid, session, name, user, day_of_week, loopy, begintime, endtime, position, radius].some(value => value === '' || value === null || value === undefined)) {
  28. res.json({
  29. ...BaseStdResponse.MISSING_PARAMETER,
  30. endpoint: 1513123
  31. });
  32. return;
  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. let permission = await AccessControl.getPermission(uuid);
  56. if (!permission.includes('admin') && !permission.includes('manage')) {
  57. res.json({
  58. ...BaseStdResponse.PERMISSION_DENIED,
  59. endpoint: 481454
  60. });
  61. return;
  62. }
  63. user = user.split('|');
  64. admin = admin.split('|');
  65. let uuids = [], admins = [];
  66. try {
  67. uuids = await AccessControl.checkUser(user);
  68. if(admin != '')
  69. admins = await AccessControl.checkUser(admin, true);
  70. } catch (error) {
  71. return res.json({
  72. ...BaseStdResponse.ERR,
  73. endpoint: 513513,
  74. msg: error.message
  75. });
  76. }
  77. // 插入数据
  78. const sql = `INSERT INTO kq_items (name, createUser, createTime, user, day_of_week, loopy, begintime, endtime, position, radius, address, admin)
  79. VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`;
  80. const values = [
  81. name,
  82. uuid,
  83. new Date().getTime(),
  84. JSON.stringify(uuids),
  85. day_of_week,
  86. loopy,
  87. begintime,
  88. endtime,
  89. JSON.stringify(position),
  90. radius,
  91. address,
  92. JSON.stringify(admins)
  93. ];
  94. try {
  95. const result = await db.query(sql, values);
  96. if (!result || result.affectedRows !== 1) {
  97. res.json({
  98. ...BaseStdResponse.DATABASE_ERR,
  99. endpoint: 513513
  100. });
  101. return;
  102. }
  103. res.json({
  104. ...BaseStdResponse.OK
  105. });
  106. } catch (error) {
  107. res.json({
  108. ...BaseStdResponse.DATABASE_ERR,
  109. endpoint: 513513,
  110. msg: error.message
  111. });
  112. }
  113. }
  114. getTime(begintime, endtime) {
  115. const [bhours, bminutes, bseconds] = begintime.split(':').map(Number);
  116. const [ehours, eminutes, eseconds] = endtime.split(':').map(Number);
  117. const begin = bhours * 3600 + bminutes * 60 + bseconds;
  118. const end = ehours * 3600 + eminutes * 60 + eseconds;
  119. return begin < end
  120. }
  121. }
  122. module.exports.AddAttendanceItems = AddAttendanceItems;