import { default as BaseController } from "../baseController";
|
import { Post } from "egg-shell-decorators";
|
import * as XLSX from "xlsx";
|
import * as path from "path";
|
import { TMSWayBill } from "../../entity/express/tms/tmsWayBill";
|
import { In } from "typeorm";
|
import moment = require("moment");
|
|
/**
|
* 运单更新
|
*/
|
export default class WayPackageImportController extends BaseController {
|
//#region 面单导入Excel
|
@Post()
|
public async importExcel() {
|
setTimeout(async () => {
|
await this.importExcelWork();
|
}, 0);
|
|
this.info.result = true;
|
this.ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region importExcelWork
|
private async importExcelWork() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let redis = ctx.app.redis.clients.get("common"); // 将消息放入redis缓存
|
let fileUrl = body.url;
|
redis.expire(body.key, 5 * 60);
|
if (!fileUrl) {
|
this.setMsg("上传文件不存在", "red");
|
return;
|
}
|
if (!body.key) {
|
this.setMsg("上传key不存在", "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;
|
}
|
//#endregion
|
|
let i = 1,
|
successCount = 0,
|
failCount = 0;
|
for (let row of dataList) {
|
i++;
|
let wayBillCode = row["运单号"];
|
let consigneeIdcard = row["收货人身份证号"];
|
let consigneeAddress = row["收货人详细地址"];
|
let consigneeName = row["收货人"];
|
let provinceName = row["收货人省"];
|
let cityName = row["收货人市"];
|
let regionName = row["收货人区/县"];
|
let grossWeight = row["复重重量(KG)"];
|
let consigneeMobile = row["收货人电话"];
|
let createDate = row["创建时间"];
|
let expressCode = row["快递单号"];
|
if (!wayBillCode) {
|
this.setMsg(`第${i}行、运单号为空`, "red");
|
failCount++;
|
continue;
|
}
|
// 需要更新的数据
|
let data: any = {};
|
if (consigneeIdcard) {
|
data.consigneeIdcard = consigneeIdcard == "null" ? null : consigneeIdcard;
|
}
|
if (consigneeAddress) {
|
data.consigneeAddress = consigneeAddress == "null" ? null : consigneeAddress;
|
}
|
if (consigneeName) {
|
data.consigneeName = consigneeName == "null" ? null : consigneeName;
|
}
|
if (provinceName) {
|
data.provinceName = provinceName == "null" ? null : provinceName;
|
}
|
if (cityName) {
|
data.cityName = cityName == "null" ? null : cityName;
|
}
|
if (regionName) {
|
data.regionName = regionName == "null" ? null : regionName;
|
}
|
if (consigneeMobile) {
|
data.consigneeMobile = consigneeMobile == "null" ? null : consigneeMobile;
|
}
|
if (grossWeight) {
|
data.grossWeight = grossWeight == "null" ? null : grossWeight;
|
}
|
if (expressCode) {
|
data.expressCode = expressCode == "null" ? null : expressCode;
|
}
|
if (createDate) {
|
if (createDate == "null") {
|
data.createDate = null;
|
} else {
|
if (typeof createDate == "number") {
|
try {
|
let d = moment(new Date(1900, 0, createDate - 1));
|
data.createDate = d.toDate();
|
} catch (error) {
|
this.setMsg(`第${i}行、${wayBillCode}更新创建时间格式不正确`, "red");
|
}
|
} else {
|
try {
|
let d = moment(createDate);
|
data.createDate = d.toDate();
|
} catch (error) {
|
this.setMsg(`第${i}行、${wayBillCode}更新创建时间格式不正确`, "red");
|
}
|
}
|
}
|
}
|
if (!Object.keys(data).length) {
|
this.setMsg(`第${i}行、${wayBillCode}没有可更新的数据`, "red");
|
continue;
|
}
|
|
let wayInfo = await this.dbRead.findOne(TMSWayBill, {
|
wayBillCode: "" + wayBillCode
|
});
|
if (!wayInfo) {
|
this.setMsg(`第${i}行、${wayBillCode}不存在`, "red");
|
failCount++;
|
continue;
|
}
|
|
let statusList = ["审核成功", "组板异常", "处理中", "清关中"];
|
if (statusList.indexOf(wayInfo.orderStatus) >= 0) {
|
await this.dbWrite.update(
|
TMSWayBill,
|
{
|
wayBillCode: "" + wayBillCode,
|
orderStatus: In(statusList)
|
},
|
data
|
);
|
this.setMsg(`第${i}行、${wayBillCode}更新成功`);
|
successCount++;
|
} else {
|
failCount++;
|
this.setMsg(`第${i}行、${wayBillCode}更新失败,只有状态为${statusList.join(",")}才允许更新`, "red");
|
}
|
}
|
this.setMsg(`共更新成功${successCount}条,失败${failCount}条`, "blue");
|
} catch (ex) {
|
this.setMsg("出现异常:" + ex.message, "red");
|
this.info.result = false;
|
}
|
this.setMsg("-1");
|
}
|
//#endregion
|
}
|