excelimport.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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(elem) {
  11. // 导入学籍的情况
  12. if (elem.type === '0') {
  13. const filepath = this.ctx.app.config.baseDirImp + elem.content;
  14. const file = await this.ctx.curl(filepath);
  15. console.log(11111);
  16. console.log(file.data);
  17. const workbook = XLSX.read(file.data);
  18. // 读取内容
  19. const sheetNames = workbook.SheetNames; // 获取所有sheet页
  20. const sheet = workbook.Sheets[sheetNames[0]]; // 通过取得当前sheet页
  21. // 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 ];
  22. const params = XLSX.utils.sheet_to_json(sheet); // 通过工具将表对象的数据读出来并转成json
  23. // const theadRule = [ '序号', '院系', '班级', '专业代码', '专业名称', '学号', '姓名', '身份证号', '性别', '学历代码', '学历名称', '毕业年份', '民族', '电话号码', '生源所在地', '政治面貌' ];
  24. if (!params) return [];
  25. // 取得配置文件中学生描述信息
  26. const maps = this.ctx.app.config.studmaps;
  27. const _datas = params.map(p => {
  28. const data = {};
  29. Object.keys(maps).forEach(k => { data[k] = p[maps[k]]; });
  30. // Object.entries(maps).forEach(a => { data[a[0]] = p[a[1]]; });
  31. return data;
  32. });
  33. return _datas;
  34. }
  35. }
  36. // 将取得的数据校验格式是否正确
  37. async validatedata(elem, _datas) {
  38. let errCount = 0;
  39. const errmsgRes = [];
  40. for (const i in _datas) {
  41. const data = _datas[i];
  42. if (data.xh === '') {
  43. errCount++;
  44. const errmsg = { ...data, errmsg: '学号为空' };
  45. errmsgRes.push(errmsg);
  46. break;
  47. }
  48. if (data.xm === '') {
  49. errCount++;
  50. const errmsg = { ...data, errmsg: '姓名为空' };
  51. errmsgRes.push(errmsg);
  52. break;
  53. }
  54. if (data.sfzh === '') {
  55. errCount++;
  56. const errmsg = { ...data, errmsg: '身份证号为空' };
  57. errmsgRes.push(errmsg);
  58. break;
  59. }
  60. if (data.xb === '') {
  61. errCount++;
  62. const errmsg = { ...data, errmsg: '性别为空' };
  63. errmsgRes.push(errmsg);
  64. break;
  65. }
  66. if (data.yxdm === '') {
  67. errCount++;
  68. const errmsg = { ...data, errmsg: '院校代码为空' };
  69. errmsgRes.push(errmsg);
  70. break;
  71. }
  72. if (data.yxmc === '') {
  73. errCount++;
  74. const errmsg = { ...data, errmsg: '院校名称为空' };
  75. errmsgRes.push(errmsg);
  76. break;
  77. }
  78. if (data.zymc === '') {
  79. errCount++;
  80. const errmsg = { ...data, errmsg: '专业名称为空' };
  81. errmsgRes.push(errmsg);
  82. break;
  83. }
  84. if (data.xl === '') {
  85. errCount++;
  86. const errmsg = { ...data, errmsg: '学历为空' };
  87. errmsgRes.push(errmsg);
  88. break;
  89. }
  90. }
  91. if (errCount !== 0) {
  92. const updatedata = { status: '2', errmsg: errmsgRes };
  93. console.log(updatedata);
  94. await this.ctx.service.dataimp.update({ id: elem.id }, updatedata);
  95. }
  96. return errCount;
  97. }
  98. // 将取得的数据插入到数据表中
  99. async dataimport(elem, _datas) {
  100. // 将数据逐条导入学生库中
  101. const queryData = { year: elem.createtime, schid: elem.userid, schname: elem.name };
  102. let errCount = 0;
  103. const errmsgRes = [];
  104. for (const i in _datas) {
  105. try {
  106. await this.ctx.service.axiox.student.create(queryData, _datas[i]);
  107. } catch (err) {
  108. console.log(err);
  109. errCount++;
  110. errmsgRes.push(_datas[i]);
  111. }
  112. }
  113. console.log(errCount);
  114. // 导入成功时更新状态
  115. if (errCount === 0) {
  116. const updatedata = { status: '1' };
  117. await this.ctx.service.dataimp.update({ id: elem.id }, updatedata);
  118. } else {
  119. console.log(errmsgRes);
  120. const updatedata = { status: '2', errmsg: errmsgRes };
  121. console.log(updatedata);
  122. await this.ctx.service.dataimp.update({ id: elem.id }, updatedata);
  123. }
  124. }
  125. }
  126. module.exports = ExcelimportService;