|
@@ -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);
|