Pārlūkot izejas kodu

计量台账、合同支付,上传附件调整

MaiXinRong 4 gadi atpakaļ
vecāks
revīzija
e0dc24f008
1 mainītis faili ar 59 papildinājumiem un 91 dzēšanām
  1. 59 91
      app/controller/stage_controller.js

+ 59 - 91
app/controller/stage_controller.js

@@ -1316,68 +1316,46 @@ module.exports = app => {
                 msg: '',
                 data: [],
             };
-            let stream;
             try {
                 // this._checkStageCanModifyRe(ctx);
 
-                const parts = ctx.multipart({ autoFields: true });
-                const files = [];
                 let index = 0;
+                const files = [];
                 const extra_upload = ctx.stage.status === auditConst.status.checked;
-                while ((stream = await parts()) !== undefined) {
-                    // 判断用户是否选择上传文件
-                    if (!stream.filename) {
-                        throw '请选择上传的文件!';
-                    }
-                    // const dirName = 'app/public/upload/stage/' + moment().format('YYYYMMDD');
-                    // 判断文件夹是否存在,不存在则直接创建文件夹
-                    // if (!fs.existsSync(path.join(this.app.baseDir, dirName))) {
-                    //     await fs.mkdirSync(path.join(this.app.baseDir, dirName));
-                    // }
-                    const fileInfo = path.parse(stream.filename);
-                    const create_time = Date.parse(new Date()) / 1000;
-                    const filepath = `app/public/upload/${this.ctx.tender.id}/stage/fujian_${create_time + index.toString() + fileInfo.ext}`;
-                    await ctx.helper.saveStreamFile(stream, path.resolve(this.app.baseDir, filepath));
-                    // console.log(await fs.existsSync(path.resolve(this.app.baseDir, 'app', filepath)));
-                    // const fileInfo = path.parse(stream.filename);
-                    // const fileName = 'stage' + create_time + '_' + index + fileInfo.ext;
-                    // 保存文件
-                    // await ctx.helper.saveStreamFile(stream, path.resolve(this.app.baseDir, dirName, fileName));
-
-                    if (stream) {
-                        await sendToWormhole(stream);
-                    }
-
-                    // 保存数据到att表
-                    const fileData = {
-                        tid: ctx.params.id,
-                        sid: ctx.params.order,
-                        in_time: create_time,
-                        filename: fileInfo.name,
-                        fileext: fileInfo.ext,
-                        filesize: Array.isArray(parts.field.size) ? parts.field.size[index] : parts.field.size,
-                        filepath,
-                        extra_upload,
-                    };
-                    // if (ctx.reUploadPermission) {
-                    //     fileData.re_upload = 1;
-                    // }
-                    const result = await ctx.service.stageAtt.save(parts.field, fileData, ctx.session.sessionUser.accountId);
-                    if (!result) {
-                        throw '导入数据库保存失败';
+                for (const file of ctx.request.files) {
+                    if (!file.filename) throw '请选择上传的文件!';
+                    try {
+                        const fileInfo = path.parse(file.filename);
+                        const create_time = Date.parse(new Date()) / 1000;
+                        const filepath = `app/public/upload/${this.ctx.tender.id}/stage/fujian_${create_time + index.toString() + fileInfo.ext}`;
+                        await this.ctx.helper.recursiveMkdirSync(path.dirname(path.join(this.app.baseDir, filepath)));
+                        await fs.copyFileSync(file.filepath, path.resolve(this.app.baseDir, filepath));
+
+                        const fileData = {
+                            tid: ctx.params.id,
+                            sid: ctx.params.order,
+                            in_time: create_time,
+                            filename: fileInfo.name,
+                            fileext: fileInfo.ext,
+                            filesize: Array.isArray(ctx.request.body.size) ? ctx.request.body.size[index] : ctx.request.body.size,
+                            filepath,
+                            extra_upload,
+                        };
+                        const result = await ctx.service.stageAtt.save(ctx.request.body, fileData, ctx.session.sessionUser.accountId);
+                        if (!result) {
+                            throw '导入数据库保存失败';
+                        }
+                        const attData = await ctx.service.stageAtt.getDataByFid(result.insertId);
+                        attData.in_time = moment(create_time * 1000).format('YYYY-MM-DD');
+                        files.length !== 0 ? files.unshift(attData) : files.push(attData);
+                        ++index;
+                    } finally {
+                        await fs.unlinkSync(file.filepath);
                     }
-                    const attData = await ctx.service.stageAtt.getDataByFid(result.insertId);
-                    attData.in_time = moment(create_time * 1000).format('YYYY-MM-DD');
-                    files.length !== 0 ? files.unshift(attData) : files.push(attData);
-                    ++index;
                 }
                 responseData.data = files;
             } catch (err) {
                 this.log(err);
-                // 失败需要消耗掉stream 以防卡死
-                if (stream) {
-                    await sendToWormhole(stream);
-                }
                 this.setMessage(err.toString(), this.messageType.ERROR);
                 responseData.err = 1;
                 responseData.msg = err.toString();
@@ -1605,55 +1583,45 @@ module.exports = app => {
                 msg: '',
                 data: [],
             };
-            let stream;
             try {
                 this._checkStageCanModify(ctx);
 
-                const parts = ctx.multipart({ autoFields: true });
-                const files = [];
                 let index = 0;
+                const files = [];
                 const create_time = Date.parse(new Date()) / 1000;
-                while ((stream = await parts()) !== undefined) {
-                    // 判断用户是否选择上传文件
-                    if (!stream.filename) {
-                        throw '请选择上传的文件!';
-                    }
-                    const fileInfo = path.parse(stream.filename);
-                    const dirName = 'app/public/upload/pay/' + moment().format('YYYYMMDD');
-                    const fileName = 'pay' + create_time + '_' + index + fileInfo.ext;
-
-                    // 判断文件夹是否存在,不存在则直接创建文件夹
-                    if (!fs.existsSync(path.join(this.app.baseDir, dirName))) {
-                        await fs.mkdirSync(path.join(this.app.baseDir, dirName));
-                    }
-                    // 保存文件
-                    await ctx.helper.saveStreamFile(stream, path.join(this.app.baseDir, dirName, fileName));
-                    await sendToWormhole(stream);
-                    // 插入到stage_pay对应的附件列表中
-                    const attData = {
-                        filename: fileInfo.name,
-                        fileext: fileInfo.ext,
-                        filesize: Array.isArray(parts.field.size) ? parts.field.size[index] : parts.field.size,
-                        filepath: path.join(dirName, fileName),
-                        uid: ctx.session.sessionUser.accountId,
-                        in_time: moment(create_time * 1000).format('YYYY-MM-DD'),
-                    };
-                    const result = await ctx.service.stagePay.saveAtt(parts.field.pay_id, attData);
-                    if (!result) {
-                        throw '导入数据库保存失败';
+                for (const file of ctx.request.files) {
+                    if (!file.filename) throw '请选择上传的文件!';
+                    try {
+                        const fileInfo = path.parse(file.filename);
+                        const dirName = 'app/public/upload/pay/' + moment().format('YYYYMMDD');
+                        const fileName = 'pay' + create_time + '_' + index + fileInfo.ext;
+
+                        await this.ctx.helper.recursiveMkdirSync(path.join(this.app.baseDir, dirName));
+                        await fs.copyFileSync(file.filepath, path.resolve(this.app.baseDir, dirName, fileName));
+
+                        const attData = {
+                            filename: fileInfo.name,
+                            fileext: fileInfo.ext,
+                            filesize: Array.isArray(ctx.request.body.size) ? ctx.request.body.size[index] : ctx.request.body.size,
+                            filepath: path.join(dirName, fileName),
+                            uid: ctx.session.sessionUser.accountId,
+                            in_time: moment(create_time * 1000).format('YYYY-MM-DD'),
+                        };
+                        const result = await ctx.service.stagePay.saveAtt(ctx.request.body.pay_id, attData);
+                        if (!result) {
+                            throw '导入数据库保存失败';
+                        }
+                        delete attData.filepath;
+                        attData.username = ctx.session.sessionUser.name;
+                        files.length !== 0 ? files.unshift(attData) : files.push(attData);
+                        ++index;
+                    } finally {
+                        await fs.unlinkSync(file.filepath);
                     }
-                    delete attData.filepath;
-                    attData.username = ctx.session.sessionUser.name;
-                    files.length !== 0 ? files.unshift(attData) : files.push(attData);
-                    ++index;
                 }
                 responseData.data = files;
             } catch (err) {
                 this.log(err);
-                // 失败需要消耗掉stream 以防卡死
-                if (stream) {
-                    await sendToWormhole(stream);
-                }
                 this.setMessage(err.toString(), this.messageType.ERROR);
                 responseData.err = 1;
                 responseData.msg = err.toString();