import { default as BaseController } from "../baseController";
|
import { Post } from "egg-shell-decorators";
|
import * as XLSX from "xlsx";
|
import * as path from "path";
|
import { BaseProvider } from "../../entity/basicInfo/base/baseProvider";
|
import { BaseConsignor } from "../../entity/basicInfo/consignor/baseConsignor";
|
|
/**
|
* 收货 - 预到货单
|
*/
|
export default class providerController extends BaseController {
|
//#region 批量导入
|
/**
|
* 批量导入入口,异步处理
|
*/
|
@Post()
|
public async import() {
|
setTimeout(async () => {
|
await this.importWork();
|
}, 0);
|
|
this.info.result = true;
|
this.ctx.body = this.info;
|
}
|
|
/**
|
* 批量导入业务处理
|
*/
|
private async importWork() {
|
let { ctx } = this;
|
// let startDate = new Date();
|
let body = ctx.request.body;
|
// let userInfo = await ctx.helper.userInfo();
|
let fileUrl = body.fileUrl;
|
// let details = [];
|
if (!fileUrl) {
|
this.setMsg(`上传文件不存在`, "red");
|
return;
|
}
|
try {
|
let rootPath = path.resolve(); // 获得根目录
|
let filePath = rootPath + path.sep + fileUrl.replace(/\//gi, path.sep); // 上传文件路径
|
var workbook = XLSX.readFile(filePath); //整个 excel 文档
|
var sheetNames = workbook.SheetNames; //获取所有工作薄名
|
var sheet1 = workbook.Sheets[sheetNames[0]]; //根据工作薄名获取工作薄
|
let dataList = XLSX.utils.sheet_to_json(sheet1); // 获得当前sheet表单数据转为json格式
|
//#region 验证数据正确性
|
this.info.result = true;
|
if (!dataList.length) {
|
this.setMsg(`没有可导入的数据`, "red");
|
return;
|
}
|
// let huozu = await this.dbRead.find(BaseConsignor);
|
let index = 0;
|
for (let item of dataList) {
|
let _index = index + 1;
|
// let providerCode = ""+ ["供应商编号"];
|
let providerShortName = "" + item["供应商简称"];
|
let providerName = "" + item["供应商全称"];
|
let consignorName = "" + item["货主名称"];
|
|
if (_index % 20 === 1) {
|
this.setMsg(`第${_index}行开始校验`, "blue");
|
}
|
if (!providerShortName || !providerName || !consignorName) {
|
this.setMsg(`第${_index}、标黄[供应商简称、供应商全称、货主名称]部分数据不能为空]`, "red");
|
}
|
let Provider = await this.dbRead.findOne(BaseProvider, {
|
providerShortName: providerShortName
|
});
|
if (Provider) {
|
this.setMsg(`第${_index}行,供应商简称在供应商表中已存在,请修改后在导入!`);
|
}
|
let consigoninfo = await this.dbRead.findOne(BaseConsignor, {
|
consignorName: consignorName
|
});
|
// let Isconsig = huozu.find(item => { item.consignorName === consignorName });
|
if (!consigoninfo) {
|
this.setMsg(`第${_index}行,货主信息不存在,请修改后在导入!`);
|
}
|
index++;
|
}
|
if (this.isMsgError) {
|
this.setMsg(`导入数据有错误,请处理好重新导入`, "red");
|
this.setMsg("-1");
|
return;
|
}
|
let count = 0;
|
for (let row of dataList) {
|
count += 1;
|
let dates = await this.dbRead.findOne(BaseConsignor, {
|
consignorName: row["货主名称"]
|
});
|
|
let Providers = new BaseProvider();
|
Providers.providerCode = await ctx.service.common.getCodeRegular(256);
|
Providers.providerShortName = row["供应商简称"];
|
Providers.providerName = row["供应商全称"];
|
// let consiglist = huozu.find(item => { item.consignorName == row["货主名称"] });
|
// Providers.consignorName = consiglist.consignorName;
|
// Providers.consignor_Id = consiglist.consignor_Id;
|
// Providers.consignorCode = consiglist.consignorCode;
|
Providers.consignorName = dates.consignorName;
|
Providers.consignor_Id = dates.consignor_Id;
|
Providers.consignorCode = dates.consignorCode;
|
|
Providers.linker = row["联系人"];
|
Providers.mobile = row["手机"];
|
Providers.email = row["电子邮箱"];
|
Providers.enpterMode = row["企业类型"];
|
Providers.artificiaPerson = row["公司法人"];
|
Providers.bank = row["开户行"];
|
Providers.bankCode = row["银行账号"];
|
Providers.remark = row["公司简介"];
|
Providers.enable = 1;
|
await this.setAccountInfo(Providers);
|
await this.dbWrite.save(Providers);
|
}
|
this.setMsg(`导入成功,共导入${count}条`, "blue");
|
//#endregion
|
} catch (ex) {
|
this.setMsg("出现异常:" + ex.message, "red");
|
}
|
this.setMsg("-1");
|
}
|
//#endregion
|
}
|