excelimport.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. 'use strict';
  2. const XLSX = require('xlsx');
  3. const Service = require('egg').Service;
  4. class ExcelimportService extends Service {
  5. constructor(ctx) {
  6. super(ctx);
  7. this.appid = '';
  8. }
  9. // 获取导入的XLSX文件中的数据
  10. async getImportXLSXData(result) {
  11. console.log(result);
  12. for (const elem of result) {
  13. const _id = elem._id;
  14. const filepath = this.ctx.app.config.fileDirImp + elem.content;
  15. if (elem.type === '0') {
  16. const workbook = XLSX.readFile(filepath);
  17. // 读取内容
  18. const sheetNames = workbook.SheetNames; // 获取所有sheet页
  19. const sheet = workbook.Sheets[sheetNames[0]]; // 通过取得当前sheet页
  20. // const theadRule = [ sheet.A1.v, sheet.B1.v, sheet.C1.v, sheet.D1.v, sheet.E1.v, sheet.F1.v, sheet.G1.v, sheet.H1.v, sheet.I1.v, sheet.J1.v, sheet.K1.v, sheet.L1.v, sheet.M1.v, sheet.N1.v, sheet.O1.v, sheet.P1.v ];
  21. const params = XLSX.utils.sheet_to_json(sheet); // 通过工具将表对象的数据读出来并转成json
  22. // const theadRule = [ '序号', '院系', '班级', '专业代码', '专业名称', '学号', '姓名', '身份证号', '性别', '学历代码', '学历名称', '毕业年份', '民族', '电话号码', '生源所在地', '政治面貌' ];
  23. console.log(params);
  24. if (!params) return [];
  25. const maps = {
  26. szyx: '院系',
  27. szbj: '班级',
  28. yxdm: '院校代码',
  29. yxmc: '院校名称',
  30. zydm: '专业代码',
  31. zymc: '专业名称',
  32. xh: '学号',
  33. xm: '姓名',
  34. sfzh: '身份证号',
  35. xb: '性别',
  36. xldm: '学历代码',
  37. xl: '学历名称',
  38. year: '毕业年份',
  39. mz: '民族',
  40. dhhm: '电话号码',
  41. syszddm: '生源所在地代码',
  42. syszd: '生源所在地',
  43. zzmm: '政治面貌',
  44. };
  45. const _datas = params.map(p => {
  46. const data = {};
  47. Object.keys(maps).forEach(k => { data[k] = p[maps[k]]; });
  48. // Object.entries(maps).forEach(a => { data[a[0]] = p[a[1]]; });
  49. return data;
  50. });
  51. // exceldata = [ ...exceldata, ..._datas ];
  52. // 将数据逐条导入学生库中
  53. const queryData = { year: elem.createtime, schid: elem.userid, schname: elem.name };
  54. let errCount = 0;
  55. const errmsgRes = [];
  56. for (const i in _datas) {
  57. try {
  58. const studRes = await this.ctx.service.axiox.student.create(queryData, _datas[i]);
  59. console.log(studRes);
  60. } catch (err) {
  61. console.log(err);
  62. errCount++;
  63. errmsgRes.push(_datas[i]);
  64. }
  65. }
  66. console.log(errCount);
  67. // 导入成功时更新状态
  68. if (errCount === 0) {
  69. const updatedata = { status: '1' };
  70. await this.ctx.service.dataimp.update({ id: _id }, updatedata);
  71. } else {
  72. console.log(errmsgRes);
  73. const updatedata = { status: '2', errmsg: errmsgRes };
  74. console.log(updatedata);
  75. await this.ctx.service.dataimp.update({ id: _id }, updatedata);
  76. }
  77. }
  78. }
  79. }
  80. }
  81. module.exports = ExcelimportService;