router.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. var express = require('express');
  2. var router = express.Router();
  3. var mysql = require('../model/mysql');
  4. const _mysqluser = ["172.16.12.5", "registration"]; //用戶數據庫信息
  5. // const _mysqluser = ["183.36.25.93", "registration"]; //本地测试用戶數據庫信息
  6. const crypto = require('crypto');
  7. const XLSX = require('xlsx');
  8. router.route('/user').post(async function (req, res) {
  9. const signUpData = [];
  10. const reqData = req.body;
  11. const uuid = crypto.randomUUID();
  12. let userData = JSON.parse(reqData.user);
  13. await mysql.usselect([_mysqluser[0], _mysqluser[1], "select_registration_user", reqData.idCard], function (r) {
  14. console.log(r[0] && r[0] ,r[0].some(item => item['type'] == Number(reqData.type)));
  15. if (r[0] && r[0].some(item => item['type'] == Number(reqData.type))) {
  16. res.send({ status: 'error', message: '选手报名失败,选手身份证号已存在' });
  17. } else {
  18. const insertUserPromises = userData.map(item => {
  19. return new Promise((resolve, reject) => {
  20. const userList = [];
  21. userList.unshift(_mysqluser[0], _mysqluser[1], "insert_registration_users", item.name, item.gender, item.ethnicity, item.birthdate, item.email, item.id_number, item.group, item.grade, item.school, item.schoolRegion, item.phone, uuid);
  22. mysql.usselect(userList, function (data) {
  23. // 可以根据 data 判断是否插入成功
  24. console.log("insert_registration_users",data);
  25. if (data != 0) {
  26. resolve(data);
  27. } else {
  28. reject(data);
  29. }
  30. });
  31. });
  32. });
  33. signUpData.unshift(_mysqluser[0], _mysqluser[1], "insert_registrations", reqData.uploadUrl, "", reqData.type, reqData.idCard);
  34. Promise.all(insertUserPromises).then(() => {
  35. // 所有用户插入完成后再插入报名数据
  36. mysql.usselect(signUpData, function (data) {
  37. if (data != 0) {
  38. res.send({ status: 'ok', message: '选手报名成功' });
  39. } else {
  40. res.send({ status: 'error', message: '选手报名失败' });
  41. }
  42. });
  43. }).catch(error => {
  44. console.error("error", error);
  45. res.send({ status: 'error', message: '选手报名失败,选手身份证号已存在' });
  46. });
  47. }
  48. })
  49. });
  50. router.route('/update').post(async function (req, res) {
  51. const { url, id_number } = req.body;
  52. const queryList = [_mysqluser[0], _mysqluser[1], "update_registration", url, id_number];
  53. mysql.usselect(queryList, function (data) {
  54. console.log(data);
  55. if (data == 1) {
  56. res.send({ status: 'ok', message: '报名信息更新成功' });
  57. } else {
  58. res.send({ status: 'error', message: '未找到报名信息' });
  59. }
  60. });
  61. });
  62. router.route('/exportData').get(async function (req, res) {
  63. const { start, end } = req.query;
  64. const queryList = [_mysqluser[0], _mysqluser[1], "sp_export_registration_data", start, end];
  65. let dataList = [];
  66. await mysql.usselect(queryList, function (data) {
  67. if (data[0] && data[0][0]) {
  68. dataList = data[0];
  69. dataList = dataList.map(item => {
  70. let user_group = ""
  71. if(item.type == 1){
  72. user_group = item.user_group == 1?"小学低龄":item.user_group == 2?"小学高龄":item.user_group == 3?"中学":"高校"
  73. }else{
  74. user_group = item.user_group == 1?"小学组(4-6年级)":item.user_group == 2?"初中组(7-9年级)":item.user_group == 3?"高中组(10-12年级,含中职)":"高校组(含高职)"
  75. }
  76. return {
  77. 小组id: item.user_groupid,
  78. 小组人数: item.id_card.split(",").length,
  79. 指导老师: item.upload_url,
  80. 比赛类型: item.type == 1 ? "桌游挑战赛" : "智能体应用",
  81. 姓名: item.user_name,
  82. 邮箱: item.user_email,
  83. 身份证号: item.user_id_number,
  84. 组别: user_group,
  85. 年级: item.user_grade,
  86. 学校: item.user_school,
  87. 学校地区: item.user_school_region,
  88. 电话: item.user_phone,
  89. 上传文件: item.registration_form_url.split(",")[0],
  90. 上传视频: item.registration_form_url.split(",")[1],
  91. 报名时间: new Date(item.created_at).toLocaleString()
  92. }
  93. });
  94. const workbook = XLSX.utils.book_new();
  95. const worksheet = XLSX.utils.json_to_sheet(dataList);
  96. XLSX.utils.book_append_sheet(workbook, worksheet, '报名数据');
  97. const buffer = XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' });
  98. res.setHeader('Content-Disposition', 'attachment; filename="' + start + ':' + end + '.xlsx"');
  99. res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  100. res.send(buffer);
  101. return;
  102. }
  103. });
  104. });
  105. module.exports = router;