123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- const API = require("../../lib/API");
- const { BaseStdResponse } = require("../../BaseStdResponse");
- const db = require("../../plugin/DataBase/db");
- const AccessControl = require("../../lib/AccessControl");
- class AddAttendanceItems extends API {
- constructor() {
- super();
- this.setPath('/Attendance');
- this.setMethod('POST');
- }
- async onRequest(req, res) {
- let {
- uuid,
- session,
- name,
- user,
- day_of_week,
- loopy,
- begintime,
- endtime,
- position,
- radius,
- address,
- admin
- } = req.body;
- // 检查必需的参数是否缺失
- if ([uuid, session, name, user, day_of_week, loopy, begintime, endtime, position, radius].some(value => value === '' || value === null || value === undefined)) {
- res.json({
- ...BaseStdResponse.MISSING_PARAMETER,
- endpoint: 1513123
- });
- return;
- }
- if (radius <= 0 || radius >= 1000000) {
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '打卡半径不在限制范围内!'
- })
- }
- if (!this.getTime(begintime, endtime)) {
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '考勤时间不合法!'
- })
- }
- // 检查 session 是否有效
- if (!await AccessControl.checkSession(uuid, session)) {
- res.json({
- ...BaseStdResponse.ACCESS_DENIED,
- endpoint: 48153145
- });
- return;
- }
- // 确认权限
- let permission = await AccessControl.getPermission(uuid);
- if (!permission.includes('admin') && !permission.includes('manage')) {
- res.json({
- ...BaseStdResponse.PERMISSION_DENIED,
- endpoint: 481454
- });
- return;
- }
- user = user.split('|');
- admin = admin.split('|');
- let uuids = [], admins = [];
- try {
- uuids = await AccessControl.checkUser(user);
- if(admin != '')
- admins = await AccessControl.checkUser(admin, true);
- } catch (error) {
- return res.json({
- ...BaseStdResponse.ERR,
- endpoint: 513513,
- msg: error.message
- });
- }
- // 插入数据
- const sql = `INSERT INTO kq_items (name, createUser, createTime, user, day_of_week, loopy, begintime, endtime, position, radius, address, admin)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`;
- const values = [
- name,
- uuid,
- new Date().getTime(),
- JSON.stringify(uuids),
- day_of_week,
- loopy,
- begintime,
- endtime,
- JSON.stringify(position),
- radius,
- address,
- JSON.stringify(admins)
- ];
- try {
- const result = await db.query(sql, values);
- if (!result || result.affectedRows !== 1) {
- res.json({
- ...BaseStdResponse.DATABASE_ERR,
- endpoint: 513513
- });
- return;
- }
- res.json({
- ...BaseStdResponse.OK
- });
- } catch (error) {
- res.json({
- ...BaseStdResponse.DATABASE_ERR,
- endpoint: 513513,
- msg: error.message
- });
- }
- }
- getTime(begintime, endtime) {
- const [bhours, bminutes, bseconds] = begintime.split(':').map(Number);
- const [ehours, eminutes, eseconds] = endtime.split(':').map(Number);
- const begin = bhours * 3600 + bminutes * 60 + bseconds;
- const end = ehours * 3600 + eminutes * 60 + eseconds;
- return begin < end
- }
- }
- module.exports.AddAttendanceItems = AddAttendanceItems;
|