import { default as BaseController } from "../baseController";
|
import { Post } from "egg-shell-decorators";
|
import * as XLSX from "xlsx";
|
import * as path from "path";
|
import { TMSWayBillOther } from "../../entity/express/tms/tmsWayBillOther";
|
import { In } from "typeorm";
|
import moment = require("moment");
|
|
/**
|
* 其他运单
|
*/
|
export default class TMSWayBillOtherController extends BaseController {
|
//#region 导入Excel
|
/// <summary>
|
/// 导入Excel
|
/// </summary>
|
/// <returns></returns>
|
@Post()
|
public async importExcel() {
|
setTimeout(async () => {
|
await this.importExcelWork();
|
}, 0);
|
|
this.info.result = true;
|
this.ctx.body = this.info;
|
}
|
|
@Post()
|
public async importExcelWork() {
|
let startDate = new Date();
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
let redis = ctx.app.redis.clients.get("common"); // 将消息放入redis缓存
|
let fileUrl = body.url;
|
redis.expire(body.key, 5 * 60);
|
if (!body.key) {
|
this.setMsg(body.key, "上传key不存在");
|
return;
|
}
|
if (!fileUrl) {
|
redis.rpush(body.key, "上传文件不存在");
|
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;
|
}
|
this.isMsgError = false;
|
let msg = "";
|
let insertCount = 0;
|
let updateCount = 0;
|
let i = 0;
|
for (let row of dataList) {
|
i++;
|
if (i % 500 === 1) {
|
this.setMsg(`${i}、开始验证...`);
|
}
|
let consigneeMobile = row["收件人电话"];
|
if (!row["运单号"]) {
|
this.setMsg(`${i}、第${i + 1}运单号不能为空`, "red");
|
}
|
if (!row["收件人姓名"]) {
|
this.setMsg(`${i}、第${i + 1}收件人姓名不能为空`, "red");
|
}
|
if (!row["收件人地址"]) {
|
this.setMsg(`${i}、第${i + 1}收件人地址不能为空`, "red");
|
}
|
if (!row["收件人电话"]) {
|
this.setMsg(`${i}、第${i + 1}收件人电话不能为空`, "red");
|
} else {
|
// let strPatern = /^(1[0-9][012345678]\d{7}|1[0123456789][012356789]\d{8})$/g;
|
let strPatern = /^1\d{10}$/gi;
|
var re = new RegExp(strPatern);
|
var strPatern2 = /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
|
var st = new RegExp(strPatern2);
|
if (!re.test(consigneeMobile) && !st.test(consigneeMobile)) {
|
this.setMsg(`${i}、第${i + 1}电话格式不正确`, "red");
|
}
|
}
|
if (!row["重量"]) {
|
this.setMsg(`${i}、第${i + 1}重量不能为空`, "red");
|
}
|
if (!row["内件信息"]) {
|
this.setMsg(`${i}、第${i + 1}内件信息不能为空`, "red");
|
}
|
}
|
if (this.isMsgError) {
|
this.setMsg("-1");
|
return;
|
}
|
|
let otherList = await this.dbRead.find(TMSWayBillOther, {
|
wayBillCode: In(dataList.map(item => item["运单号"]))
|
});
|
|
let insertList = [];
|
let existList = [];
|
for (let list of dataList) {
|
let wayBillCode = list["运单号"];
|
let expressCode = list["国内快递单号"];
|
let consigneeName = list["收件人姓名"];
|
let consigneeMobile = list["收件人电话"];
|
let consigneeAddress = list["收件人地址"];
|
let internalinformation = list["内件信息"];
|
let weight = parseFloat(list["重量"]);
|
|
let other = otherList.find(item => item.wayBillCode == wayBillCode);
|
if (other) {
|
updateCount += 1;
|
existList.push(wayBillCode);
|
} else {
|
insertCount += 1;
|
insertList.push({
|
wayBillCode: wayBillCode,
|
expressCode: expressCode,
|
weight: weight,
|
consigneeName: consigneeName,
|
consigneeAddress: consigneeAddress,
|
consigneeMobile: consigneeMobile,
|
internalinformation: internalinformation,
|
createID: userInfo.user_Id,
|
creator: userInfo.userTrueName,
|
createDate: new Date(),
|
userProduct_Id: userInfo.userProduct_Id,
|
userProductCode: userInfo.userProductCode,
|
userProductAlias: userInfo.userProductAlias,
|
platUser_Id: userInfo.platUser_Id,
|
platUserCode: userInfo.platUserCode,
|
platUserName: userInfo.platUserName,
|
platCorpName: userInfo.platCorpName
|
});
|
if (insertCount % 50 === 0) {
|
await this.dbWrite.insert(TMSWayBillOther, insertList);
|
msg = "导入第" + insertCount + "行成功";
|
this.setMsg(msg, "blue");
|
insertList = [];
|
}
|
}
|
}
|
if (insertList.length > 0) {
|
await this.dbWrite.insert(TMSWayBillOther, insertList);
|
msg = "导入第" + insertCount + "行成功";
|
this.setMsg(msg, "blue");
|
insertList = [];
|
}
|
if (existList.length) {
|
msg = "存在的单号:" + existList.join(", ");
|
this.setMsg(msg, "red");
|
existList = [];
|
}
|
let endDate = moment(Date.now());
|
let totalSeconds = endDate.diff(startDate, "seconds");
|
msg = `新增导入${insertCount}条成功,已存在${updateCount}条,共耗时${totalSeconds}秒`;
|
this.setMsg(msg, "blue");
|
} catch (ex) {
|
this.setMsg("出现异常:" + ex.message + ex.StackTrace, "red");
|
}
|
|
this.setMsg("-1");
|
}
|
|
// #endregion
|
}
|