فهرست منبع

细化签约清单提示内容

MaiXinRong 6 سال پیش
والد
کامیت
161a6bd8df
2فایلهای تغییر یافته به همراه33 افزوده شده و 10 حذف شده
  1. 1 6
      app/controller/deal_bills_controller.js
  2. 32 4
      app/service/deal_bills.js

+ 1 - 6
app/controller/deal_bills_controller.js

@@ -70,12 +70,7 @@ module.exports = app => {
                 if (stream) {
                     await sendToWormhole(stream);
                 }
-                this.setMessage(err.toString(), this.messageType.ERROR);
-                if (err.stack) {
-                    ctx.body = {err: 1, msg: '导入的Excel的数据类型有误', data: null};
-                } else {
-                    ctx.body = {err: 1, msg: err.toString(), data: null};
-                }
+                ctx.body = {err: 1, msg: err.toString(), data: null};
             }
         }
 

+ 32 - 4
app/service/deal_bills.js

@@ -32,9 +32,30 @@ module.exports = app => {
             const transaction = await this.db.beginTransaction();
             try {
                 const bills = [];
-                for (const row of sheet.data) {
-                    if (this.ctx.helper.validBillsCode(row[0])) {
-                        bills.push({
+                let iCode, iName, iUnit, iUp, iQty, iTp, bCheckCol = false;
+                for (let iRow = 0; iRow < sheet.data.length; iRow++) {
+                    const row = sheet.data[iRow];
+                    if (!bCheckCol) {
+                        for (let iCol = 0; iCol < row.length; iCol++) {
+                            const value = row[iCol];
+                            if (typeof value !== "string") { continue }
+                            if (value === '子目号' || value === '清单编号') iCode = iCol;
+                            if (value.indexOf('名称') >= 0) iName = iCol;
+                            if (value.indexOf('单位') >= 0) iUnit = iCol;
+                            if (value.indexOf('单价') >= 0) iUp = iCol;
+                            if (value.indexOf('数量') >= 0) iQty = iCol;
+                            if (value.indexOf('金额') >= 0 || value.indexOf('合价') >= 0) iTp = iCol;
+                        }
+                        bCheckCol = (iCode >= 0 && iName >= 0 && iUnit >= 0 && iUp >= 0 && iQty >= 0);
+                        if (!bCheckCol) {
+                            iCode = -1;
+                            iName = -1;
+                            iUnit = -1;
+                            iUp = -1;
+                            iQty = -1;
+                        }
+                    } else if (this.ctx.helper.validBillsCode(row[0])) {
+                        const data = {
                             deal_id: bills.length + 1,
                             tender_id: tenderId,
                             code: row[0],
@@ -42,9 +63,16 @@ module.exports = app => {
                             unit: row[2],
                             unit_price: row[3],
                             quantity: row[4],
-                        });
+                        };
+                        if ((data.unit_price && !this._.isNumber(data.unit_price)) || (data.quantity && !this._.isNumber(data.quantity))) {
+                            throw '导入的Excel的数据类型有误,请检查第' + (iRow + 1) + '行';
+                        }
+                        bills.push(data);
                     }
                 }
+                if (!bCheckCol) {
+                    throw '导入的Excel表头定义有误,请下载示例检查';
+                }
                 if (bills.length > 0) {
                     await transaction.delete(this.tableName, {tender_id: tenderId});
                     const billsResult = await transaction.insert(this.tableName, bills);