|
|
const cloud = require('wx-server-sdk')
|
|
|
|
|
|
cloud.init({ env: 'yz-7g23c92hf3223f1d' }) // 使用当前云环境
|
|
|
|
|
|
const xlsx = require('node-xlsx') //导入Excel类库
|
|
|
const db = cloud.database() //声明数据库对象
|
|
|
const _ = db.command
|
|
|
|
|
|
// 云函数入口函数
|
|
|
exports.main = async (event, context) => {
|
|
|
// 查询所有学生信息
|
|
|
let all_information = await db.collection('namelist').where({
|
|
|
filename: _.eq(event.filename)
|
|
|
}).orderBy('student_ID', 'asc').limit(500).get();
|
|
|
|
|
|
// 查询非出勤的学生信息
|
|
|
let call_information = await db.collection('namelist').where({
|
|
|
filename: _.eq(event.filename),
|
|
|
state: _.neq("present")
|
|
|
}).orderBy('state', 'asc').orderBy('student_ID', 'asc').limit(500).get();
|
|
|
|
|
|
// 准备 Excel 文件数据
|
|
|
var allData1 = []; // 第一张表格(所有学生)
|
|
|
var allData2 = []; // 第二张表格(筛选状态不为present的学生)
|
|
|
|
|
|
// 第一张表格的表头:学号、姓名、被点名次数、积分、状态
|
|
|
var arr = ["学号", "姓名", "被点名次数", "积分", "状态"];
|
|
|
allData1.push(arr);
|
|
|
|
|
|
// 遍历所有学生信息,填充到第一张表格
|
|
|
for (let i = 0; i < all_information.data.length; ++i) {
|
|
|
arr = [];
|
|
|
arr.push(all_information.data[i].student_ID);
|
|
|
arr.push(all_information.data[i].name);
|
|
|
arr.push(all_information.data[i].attendance_count || 0); // 被点名次数,默认为0
|
|
|
arr.push(all_information.data[i].score || 0); // 积分,默认为0
|
|
|
arr.push(all_information.data[i].state); // 状态
|
|
|
allData1.push(arr);
|
|
|
}
|
|
|
|
|
|
// 第二张表格的课程信息和表头
|
|
|
arr = ["课程名称", event.course];
|
|
|
allData2.push(arr);
|
|
|
arr = ["任课老师", event.teacher];
|
|
|
allData2.push(arr);
|
|
|
arr = ["日期", event.date];
|
|
|
allData2.push(arr);
|
|
|
arr = [event.weekday + ":" + event.start + "-" + event.end];
|
|
|
allData2.push(arr);
|
|
|
arr = ["学号", "姓名", "状态"];
|
|
|
allData2.push(arr);
|
|
|
|
|
|
// 遍历非出勤学生信息,填充到第二张表格
|
|
|
for (let i = 0; i < call_information.data.length; ++i) {
|
|
|
arr = [];
|
|
|
arr.push(call_information.data[i].student_ID);
|
|
|
arr.push(call_information.data[i].name);
|
|
|
if (call_information.data[i].state == "cut") arr.push("旷课");
|
|
|
else arr.push("请假");
|
|
|
allData2.push(arr);
|
|
|
}
|
|
|
|
|
|
// 生成 Excel 文件的两个工作表
|
|
|
var buffer = await xlsx.build([
|
|
|
{
|
|
|
name: "所有学生信息", // 第一张表名称
|
|
|
data: allData1
|
|
|
},
|
|
|
{
|
|
|
name: "本次学生到课情况", // 第二张表名称
|
|
|
data: allData2
|
|
|
}
|
|
|
]);
|
|
|
|
|
|
console.log("生成的Excel数据:", buffer);
|
|
|
|
|
|
// 删除旧文件
|
|
|
const result = await cloud.deleteFile({
|
|
|
fileList: [event.fileID],
|
|
|
});
|
|
|
console.log("文件删除结果:", result.fileList);
|
|
|
|
|
|
// 上传新生成的Excel文件
|
|
|
return await cloud.uploadFile({
|
|
|
cloudPath: event.filename + ".xlsx", // 上传的文件名
|
|
|
fileContent: buffer // 上传的文件内容
|
|
|
});
|
|
|
}
|