|
@@ -3,6 +3,7 @@ const facade = require('../facade/index');
|
|
|
const config = require("../../../config/config.js");
|
|
|
const excel = require('node-xlsx');
|
|
|
const fs = require('fs');
|
|
|
+const multiparty = require('multiparty');
|
|
|
|
|
|
class PriceInfoClassController extends BaseController {
|
|
|
async main(req, res) {
|
|
@@ -59,6 +60,56 @@ class PriceInfoClassController extends BaseController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ async importExcel(req, res) {
|
|
|
+ let responseData = {
|
|
|
+ err: 0,
|
|
|
+ msg: ''
|
|
|
+ };
|
|
|
+ res.setTimeout(1000 * 60 * 10);
|
|
|
+ const allowHeader = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
|
|
|
+ const uploadOption = {
|
|
|
+ uploadDir: './public'
|
|
|
+ };
|
|
|
+ const form = new multiparty.Form(uploadOption);
|
|
|
+ let uploadFullName;
|
|
|
+ form.parse(req, async function (err, fields, files) {
|
|
|
+ try {
|
|
|
+ const file = files.file !== undefined ? files.file[0] : null;
|
|
|
+ if (err || file === null) {
|
|
|
+ throw '上传失败。';
|
|
|
+ }
|
|
|
+ // 判断类型
|
|
|
+ if (file.headers['content-type'] === undefined || allowHeader.indexOf(file.headers['content-type']) < 0) {
|
|
|
+ throw '不支持该类型';
|
|
|
+ }
|
|
|
+ // 重命名文件名
|
|
|
+ uploadFullName = uploadOption.uploadDir + '/' + file.originalFilename;
|
|
|
+ fs.renameSync(file.path, uploadFullName);
|
|
|
+
|
|
|
+ const sheet = excel.parse(uploadFullName);
|
|
|
+ if (sheet[0] === undefined || sheet[0].data === undefined || sheet[0].data.length <= 0) {
|
|
|
+ throw 'excel没有对应数据。';
|
|
|
+ }
|
|
|
+ // 提取excel数据并入库
|
|
|
+ await facade.importExcelData(sheet[0].data);
|
|
|
+ // 删除文件
|
|
|
+ if (uploadFullName && fs.existsSync(uploadFullName)) {
|
|
|
+ fs.unlink(uploadFullName);
|
|
|
+ }
|
|
|
+ res.json(responseData);
|
|
|
+ }
|
|
|
+ catch (error) {
|
|
|
+ console.log(error);
|
|
|
+ if (uploadFullName && fs.existsSync(uploadFullName)) {
|
|
|
+ fs.unlink(uploadFullName);
|
|
|
+ }
|
|
|
+ responseData.err = 1;
|
|
|
+ responseData.msg = error.toString();
|
|
|
+ res.json(responseData);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|
|
|
|