//#region import
|
import BaseApiService from "../baseApiService";
|
import { ResultInfo } from "../../public/commonInterface";
|
import { ExpressBSHTOrder } from "../../entity/express/bsht/expressBSHTOrder";
|
import { ExpressBSHTBaseInfo } from "../../entity/express/bsht/expressBSHTBaseInfo";
|
import { ExpressBSHTOrderList } from "../../entity/express/bsht/expressBSHTOrderList";
|
//#endregion
|
|
/**
|
* 百世汇通接口帮助类
|
*/
|
export default class BshtHelperService extends BaseApiService {
|
//#region 推送订单 pushOrder
|
public async pushOrder(orderIdList) {
|
let info: ResultInfo = {
|
result: false,
|
msg: undefined
|
};
|
info.result = false;
|
|
let msg = "";
|
for (let orderId of orderIdList) {
|
let orderInfo = await this.dbRead.findOne(ExpressBSHTOrder, {
|
bSHTOrder_Id: orderId
|
});
|
|
try {
|
//获得账户信息
|
if (!orderInfo.interfaceAccount_Id) {
|
msg += "订单[" + orderInfo.orderCode + "]位置接口账号,无法推送!<br/>";
|
continue;
|
}
|
|
let baseInfo = await this.dbRead.findOne(ExpressBSHTBaseInfo, {
|
baseInfo_Id: orderInfo.interfaceAccount_Id
|
});
|
let url = baseInfo.apiUrl;
|
|
let itemName = [];
|
let itemWeight = 0;
|
let itemCount = 0;
|
// 明细名称
|
let details = await this.dbRead.find(ExpressBSHTOrderList, {
|
bSHTOrder_Id: orderId
|
});
|
for (let item of details) {
|
itemName.push(item.itemName);
|
itemWeight += item.itemWeight;
|
itemCount += item.itemCount;
|
}
|
let bizData = {
|
deliveryConfirm: false,
|
msgId: orderInfo.orderCode,
|
auth: {
|
username: baseInfo.username,
|
pass: baseInfo.password
|
},
|
EDIPrintDetailList: [
|
{
|
sendMan: orderInfo.sendMan,
|
sendManPhone: orderInfo.sendManPhone,
|
sendManAddress: orderInfo.sendManAddress,
|
sendPostcode: orderInfo.sendPostcode,
|
sendProvince: orderInfo.sendProvince,
|
sendCity: orderInfo.sendCity,
|
sendCounty: orderInfo.sendCounty,
|
receiveMan: orderInfo.receiveMan,
|
receiveManPhone: orderInfo.receiveManPhone,
|
receiveManAddress: orderInfo.receiveManAddress,
|
receivePostcode: orderInfo.receivePostcode,
|
receiveProvince: orderInfo.receiveProvince,
|
receiveCity: orderInfo.receiveCity,
|
receiveCounty: orderInfo.receiveCounty,
|
txLogisticID: orderInfo.txLogisticID,
|
itemName: itemName.join(","),
|
itemWeight: itemWeight,
|
itemCount: itemCount,
|
remark: orderInfo.remark
|
}
|
]
|
};
|
let signData = JSON.stringify(bizData) + baseInfo.partnerKey;
|
let sign = this.ctx.helper.md5(signData).toLocaleLowerCase();
|
let postData = {
|
serviceType: "KD_WAYBILL_APPLY_NOTIFY",
|
bizData: JSON.stringify(bizData),
|
partnerID: Number(baseInfo.partnerId),
|
sign: sign
|
};
|
const resultObj = await this.ctx.curl(url, {
|
// 必须指定 method
|
method: "POST",
|
// 通过 contentType 告诉 HttpClient 以 JSON 格式发送
|
contentType: "application/x-www-form-urlencoded",
|
data: postData,
|
// 明确告诉 HttpClient 以 JSON 格式处理返回的响应 body
|
dataType: "json"
|
});
|
|
if (resultObj.data.result) {
|
//todo: 以下需要做更新ERP订单快递单号,和接口表快递单号,及相关业务逻辑
|
for (let item of resultObj.data.EDIPrintDetailList) {
|
let sql = `UPDATE ExpressBSHT_Order SET mailNo=@0,
|
PushDate=GETDATE(),InterfaceStatusID=3, InterfaceStatusText='推送成功', PushCount = ISNULL(PushCount, 0) + 1,
|
markDestination=@5, sortingSiteCode=@4
|
WHERE bSHTOrder_Id=@1;
|
Update Sale_OuterList Set extendField10=@0 From Sale_Outer INNER JOIN Sale_OuterList ON Sale_Outer.Outer_Id=Sale_OuterList.Outer_Id
|
Where Sale_Outer.Order_Id=@2 And Sale_OuterList.CaseNumber=@3;
|
Update Sale_Order Set ExpressCode=@0, sortingCode=@4, BigPen=@5 Where Order_Id=@2;
|
Update dbo.Sale_OrderPrintList Set ExpressCode=(SELECT top 1 ExpressCode FROM dbo.Sale_Order WHERE dbo.Sale_Order.Order_Id=dbo.Sale_OrderPrintList.Order_Id)
|
Where Order_Id=@2;`;
|
await this.dbWrite.query(sql, [
|
item.mailNo, // 0
|
orderInfo.bSHTOrder_Id, // 1
|
orderInfo.order_Id, // 2
|
orderInfo.mailNo, // 3 箱号(可能)
|
item.sortingCode, // 4 分拣码
|
item.markDestination // 5 大头笔
|
]);
|
info.msg = "推送成功!";
|
info.result = true;
|
|
msg += "订单[" + orderInfo.orderCode + "]推送结果," + info.msg + "<br/>";
|
}
|
} else {
|
info.result = false;
|
info.msg = "错误信息:" + resultObj.data.errorDescription;
|
}
|
} catch (error) {
|
msg = error.message;
|
await this.dbWrite.update(
|
ExpressBSHTOrder,
|
{
|
bSHTOrder_Id: orderId,
|
userProduct_Id: orderInfo.userProduct_Id
|
},
|
{
|
pushCount: (orderInfo.pushCount || 0) + 1
|
}
|
);
|
}
|
}
|
info.msg = msg;
|
console.log(msg);
|
|
return info;
|
}
|
//#endregion
|
}
|