|
@@ -0,0 +1,310 @@
|
|
|
+import axios from 'axios';
|
|
|
+const moment = require('moment');
|
|
|
+
|
|
|
+let api = axios.create({
|
|
|
+ baseURL: 'http://47.96.12.136:8123/api',
|
|
|
+ // baseURL: 'http://192.168.20.45:8123/api',
|
|
|
+});
|
|
|
+
|
|
|
+async function getToken() {
|
|
|
+ let url = '/token';
|
|
|
+ let res = await api.get(url, {
|
|
|
+ params: {
|
|
|
+ appkey: 'ding8xqenag7ilsxbw7n',
|
|
|
+ appsecret: 'VX4SWM7E8AzMEVBbUwCqfHVE8fgvCZHZPSUCx1WApY5Ne5xz162Ap0JEokVzti75',
|
|
|
+ },
|
|
|
+ });
|
|
|
+ return res.data.token;
|
|
|
+}
|
|
|
+
|
|
|
+let access_token = '';
|
|
|
+
|
|
|
+/**
|
|
|
+ * 根据用户和时间段查询下班打卡情况
|
|
|
+ * @param {moment} startDate
|
|
|
+ * @param {moment} endDate
|
|
|
+ * @param {string} userid
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+export async function getUserTakingLeave(startDate, endDate, userid) {
|
|
|
+ if (!access_token) {
|
|
|
+ access_token = await getToken();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 钉钉的接口 URL
|
|
|
+ const url = '/getcolumnval?access_token=' + access_token;
|
|
|
+
|
|
|
+ const requestData = {
|
|
|
+ column_id_list: '10914023', // [下班1打卡结果] 根据/attendance/getattcolumns查询得到
|
|
|
+ from_date: startDate.format('YYYY-MM-DD 00:00:00'),
|
|
|
+ to_date: endDate.format('YYYY-MM-DD 23:59:59'),
|
|
|
+ userid,
|
|
|
+ };
|
|
|
+
|
|
|
+ // 设置请求头
|
|
|
+ const headers = {
|
|
|
+ 'Content-Type': 'application/json',
|
|
|
+ Authorization: `Bearer ${access_token}`,
|
|
|
+ };
|
|
|
+ let catchKey = `getcolumnval|${userid}|${requestData.from_date}`;
|
|
|
+ let takingLeave = {};
|
|
|
+ let catchData = localStorage[catchKey];
|
|
|
+
|
|
|
+ // 判断是否缓存过数据
|
|
|
+ if (catchData) {
|
|
|
+ takingLeave = JSON.parse(catchData);
|
|
|
+ } else {
|
|
|
+ // 发送 POST 请求
|
|
|
+ const response = await api.post(url, requestData, { headers });
|
|
|
+
|
|
|
+ // 处理响应结果
|
|
|
+ const column_vals = response.data.result.column_vals[0].column_vals;
|
|
|
+ column_vals.forEach(item => {
|
|
|
+ if (item.value == '请假') {
|
|
|
+ takingLeave[item.date.split(' ')[0]] = true;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 缓存结果
|
|
|
+ localStorage[catchKey] = JSON.stringify(takingLeave);
|
|
|
+ }
|
|
|
+
|
|
|
+ return takingLeave;
|
|
|
+}
|
|
|
+/**
|
|
|
+ * 根据用户和时间段查询请假详情
|
|
|
+ * @param {moment} startDate
|
|
|
+ * @param {moment} endDate
|
|
|
+ * @param {string} userid
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+export async function getUserTakingDetail(startDate, endDate, userid) {
|
|
|
+ if (!access_token) {
|
|
|
+ access_token = await getToken();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 钉钉的接口 URL
|
|
|
+ const url = '/getleavestatus?access_token=' + access_token;
|
|
|
+ const size = 20;
|
|
|
+
|
|
|
+ const requestData = {
|
|
|
+ start_time: startDate.valueOf(),
|
|
|
+ offset: 0,
|
|
|
+ size,
|
|
|
+ end_time: endDate.valueOf(),
|
|
|
+ userid_list: userid,
|
|
|
+ };
|
|
|
+
|
|
|
+ // 设置请求头
|
|
|
+ const headers = {
|
|
|
+ 'Content-Type': 'application/json',
|
|
|
+ Authorization: `Bearer ${access_token}`,
|
|
|
+ };
|
|
|
+ function getDaysInRange(startDate, endDate) {
|
|
|
+ const start = new Date(startDate);
|
|
|
+ const end = new Date(endDate);
|
|
|
+ const days = {};
|
|
|
+
|
|
|
+ // 循环遍历每一天,包括开始日期和结束日期
|
|
|
+ for (let date = start; date <= end; date.setDate(date.getDate() + 1)) {
|
|
|
+ const formattedDate = moment(date).format('YYYY-MM-DD');
|
|
|
+ days[formattedDate] = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return days;
|
|
|
+ }
|
|
|
+ const getDataByPage = async offset => {
|
|
|
+ let catchKey = `getleavestatus|${userid}|${offset}|${requestData.start_time}`;
|
|
|
+ let res = {};
|
|
|
+ let catchData = localStorage[catchKey];
|
|
|
+ if (catchData) {
|
|
|
+ res = JSON.parse(catchData);
|
|
|
+ } else {
|
|
|
+ // 发送 POST 请求
|
|
|
+ let response = await api.post(url, { ...requestData, offset }, { headers });
|
|
|
+ res = response.data.result;
|
|
|
+ res.leave_status = res.leave_status.map(item => ({
|
|
|
+ userid: item.userid,
|
|
|
+ start_time: item.start_time,
|
|
|
+ end_time: item.end_time,
|
|
|
+ }));
|
|
|
+
|
|
|
+ localStorage[catchKey] = JSON.stringify(res);
|
|
|
+ }
|
|
|
+
|
|
|
+ return res;
|
|
|
+ };
|
|
|
+ let res = null,
|
|
|
+ leave_status = {},
|
|
|
+ count = 1;
|
|
|
+ do {
|
|
|
+ res = await getDataByPage(res ? (count - 1) * size : 0);
|
|
|
+ res.leave_status.forEach(item => {
|
|
|
+
|
|
|
+ let days = getDaysInRange(item.start_time, item.end_time);
|
|
|
+ Object.assign(leave_status, days);
|
|
|
+ });
|
|
|
+ count++;
|
|
|
+ } while (res.has_more);
|
|
|
+
|
|
|
+ return leave_status;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 根据时间段查询日志提交情况
|
|
|
+ * @param {moment} startDate
|
|
|
+ * @param {moment} endDate
|
|
|
+ */
|
|
|
+export async function getAllReport(startDate, endDate, onProcess) {
|
|
|
+ if (!access_token) {
|
|
|
+ access_token = await getToken();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 钉钉的接口 URL
|
|
|
+ const url = '/simplelist?access_token=' + access_token;
|
|
|
+
|
|
|
+ const requestData = {
|
|
|
+ start_time: startDate.valueOf(),
|
|
|
+ end_time: endDate.valueOf(),
|
|
|
+ size: 20,
|
|
|
+ };
|
|
|
+
|
|
|
+ // 设置请求头
|
|
|
+ const headers = {
|
|
|
+ 'Content-Type': 'application/json',
|
|
|
+ Authorization: `Bearer ${access_token}`,
|
|
|
+ };
|
|
|
+
|
|
|
+ const getReportByPage = async cursor => {
|
|
|
+ let catchKey = `simplelist|${cursor}|${requestData.start_time}`;
|
|
|
+ let res = {};
|
|
|
+ let catchData = localStorage[catchKey];
|
|
|
+ if (catchData) {
|
|
|
+ res = JSON.parse(catchData);
|
|
|
+ } else {
|
|
|
+ // 发送 POST 请求
|
|
|
+ let response = await api.post(url, { ...requestData, cursor }, { headers });
|
|
|
+ res = response.data.result;
|
|
|
+ res.data_list = res.data_list.map(item => ({
|
|
|
+ create_time: moment(item.create_time).format('YYYY年MM月DD日 HH:mm'),
|
|
|
+ creator_id: item.creator_id,
|
|
|
+ creator_name: item.creator_name,
|
|
|
+ }));
|
|
|
+
|
|
|
+ localStorage[catchKey] = JSON.stringify(res);
|
|
|
+ }
|
|
|
+
|
|
|
+ return res;
|
|
|
+ };
|
|
|
+ let res = null,
|
|
|
+ data_list = [],
|
|
|
+ count = 1;
|
|
|
+ do {
|
|
|
+ res = await getReportByPage(res ? res.next_cursor : 0);
|
|
|
+ console.log(`请求第${count}次。`);
|
|
|
+ onProcess?.(`请求${count * 20}条日志信息。`);
|
|
|
+ data_list = data_list.concat(res.data_list);
|
|
|
+ count++;
|
|
|
+ } while (res.has_more);
|
|
|
+
|
|
|
+ return data_list;
|
|
|
+}
|
|
|
+
|
|
|
+// 查询节假日
|
|
|
+export async function getHoliday(onProcess) {
|
|
|
+ let res,
|
|
|
+ days = {
|
|
|
+ "2023-07-07": 1
|
|
|
+ };
|
|
|
+ res = await axios.get(
|
|
|
+ 'https://www.mxnzp.com/api/holiday/list/year/2023?ignoreHoliday=false&app_id=kf6mqlkirgupfcok&app_secret=MDRIVy83WTN4Q0lEaUZVMEFGejFWdz09'
|
|
|
+ );
|
|
|
+ console.log(res);
|
|
|
+ res.data.data.forEach(month => {
|
|
|
+ month.days.forEach(item => {
|
|
|
+ if (item.type != 0) {
|
|
|
+ days[item.date] = 1;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ onProcess?.('查询节假日成功');
|
|
|
+ return days;
|
|
|
+}
|
|
|
+
|
|
|
+// 获取入职时间
|
|
|
+export async function getHiredDate(userId) {
|
|
|
+ if (!access_token) {
|
|
|
+ access_token = await getToken();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 钉钉的接口 URL
|
|
|
+ const url = '/userInfo?access_token=' + access_token;
|
|
|
+
|
|
|
+ const requestData = {
|
|
|
+ userid: userId,
|
|
|
+ language: 'zh_CN',
|
|
|
+ };
|
|
|
+
|
|
|
+ // 设置请求头
|
|
|
+ const headers = {
|
|
|
+ 'Content-Type': 'application/json',
|
|
|
+ Authorization: `Bearer ${access_token}`,
|
|
|
+ };
|
|
|
+ let catchKey = `hiredDate|${userId}`;
|
|
|
+ let hiredDate = localStorage[catchKey];
|
|
|
+
|
|
|
+ // 判断是否缓存过数据
|
|
|
+ if (!hiredDate) {
|
|
|
+ // 发送 POST 请求
|
|
|
+ const response = await api.post(url, requestData, { headers });
|
|
|
+ const time = moment(response.data.result.hired_date).format('YYYY-MM-DD');
|
|
|
+ // 缓存结果
|
|
|
+ hiredDate = localStorage[catchKey] = time;
|
|
|
+ }
|
|
|
+
|
|
|
+ return hiredDate;
|
|
|
+}
|
|
|
+
|
|
|
+// 查询离职日期
|
|
|
+export async function getResignationDate(userIdList) {
|
|
|
+ if (!access_token) {
|
|
|
+ access_token = await getToken();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置请求头
|
|
|
+ const headers = {
|
|
|
+ 'Content-Type': 'application/json',
|
|
|
+ Authorization: `Bearer ${access_token}`,
|
|
|
+ };
|
|
|
+
|
|
|
+ const response = await api.get('/dimissionInfos', {
|
|
|
+ headers,
|
|
|
+ params: {
|
|
|
+ access_token,
|
|
|
+ userIdList: JSON.stringify(userIdList),
|
|
|
+ },
|
|
|
+ });
|
|
|
+ let dimissionInfos = {};
|
|
|
+ // 处理响应结果
|
|
|
+ response.data.result.forEach(item => {
|
|
|
+ if (item.status == 2) {
|
|
|
+ dimissionInfos[item.userId] = moment(item.lastWorkDay).format('YYYY-MM-DD');
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 缓存结果
|
|
|
+
|
|
|
+ return dimissionInfos;
|
|
|
+}
|
|
|
+
|
|
|
+// getAllReport(
|
|
|
+// moment("2023-04-26 00:00:00"),
|
|
|
+// moment("2023-05-25 23:59:59"),
|
|
|
+// "0543113200285"
|
|
|
+// ).then((list) => {
|
|
|
+// fs.writeFile("report.json", JSON.stringify(list), (err) => {
|
|
|
+// if (err) {
|
|
|
+// console.error("写入文件时发生错误:", err);
|
|
|
+// return;
|
|
|
+// }
|
|
|
+// console.log("文本已成功写入report.json文件。");
|
|
|
+// });
|
|
|
+// });
|