import BaseService from "../../baseService";
|
import { WeidianBasicInfo } from "../../../entity/interface/weidian/weidianBasicInfo";
|
import { WeidianProduct } from "../../../entity/interface/weidian/weidianProduct";
|
import moment = require("moment");
|
import { WeidianOrder } from "../../../entity/interface/weidian/weidianOrder";
|
import { WeidianOrderDetail } from "../../../entity/interface/weidian/weidianOrderDetail";
|
import { BaseProductInfo } from "../../../entity/basicInfo/base/baseProductInfo";
|
import { SaleOrder } from "../../../entity/outbound/sale/saleOrder";
|
import { SaleOrderList } from "../../../entity/outbound/sale/saleOrderList";
|
|
export default class BasicInfoService extends BaseService {
|
//#region 获取AccessToken
|
public async getaccessToken() {
|
try {
|
let url = `https://oauth.open.weidian.com/token`;
|
let basicInfo = await this.dbRead.findOne(WeidianBasicInfo, {
|
baseInfo_Id: 1
|
});
|
let params = `grant_type=client_credential&appkey=${basicInfo.appKey}&secret=${basicInfo.secret}`;
|
url += "?" + params;
|
let result = await this.ctx.curl(url, {
|
method: "GET"
|
});
|
|
let data = Buffer.from(result.data).toString();
|
let res = JSON.parse(data);
|
|
if (res.status.status_code === 0) {
|
// 更新token信息
|
this.dbWrite.update(
|
WeidianBasicInfo,
|
{
|
baseInfo_Id: 1
|
},
|
{
|
access_token: res.result.access_token,
|
expire_in: res.result.expire_in
|
// refresh_token: result.result.refresh_token,
|
// openid: result.result.openid,
|
// shop_name: result.result.shop_name,
|
// scope: result.result.scope,
|
// shop_logo: result.shop_logo.scope
|
}
|
);
|
this.info.result = true;
|
this.info.msg = "获取成功,accessToken=" + res.result.access_token;
|
} else {
|
this.info.result = false;
|
this.info.msg = "获取失败";
|
}
|
} catch (error) {
|
this.info.result = false;
|
this.info.msg = "获取失败," + error.message;
|
}
|
|
return this.info;
|
}
|
|
//#endregion
|
|
//#region 获取物料信息
|
public async getProduct() {
|
try {
|
let userInfo = await this.userInfo;
|
let url = `https://api.vdian.com/api`;
|
let basicInfo = await this.dbRead.findOne(WeidianBasicInfo, {
|
baseInfo_Id: 1
|
});
|
let params = `param={"keyWord":"${this.body.searchKey}","fx":1,"page":1,"pageSize":50}&public={"method":"weidian.item.search","access_token":"${basicInfo.access_token}","version":"1.0","format":"json"}`;
|
url += "?" + params;
|
let result = await this.ctx.curl(url, {
|
method: "GET"
|
});
|
let data = Buffer.from(result.data).toString();
|
let res = JSON.parse(data);
|
|
if (res.status.status_code === 0) {
|
for (let item of res.result.items) {
|
// 查询是否存在
|
for (let sku of item.sku) {
|
let weidianProdInfo = await this.dbRead.findOne(WeidianProduct, {
|
userProduct_Id: userInfo.userProduct_Id,
|
itemid: sku.item_id
|
});
|
if (!weidianProdInfo) {
|
//不存在,新建物料
|
weidianProdInfo = new WeidianProduct();
|
}
|
weidianProdInfo.merchant_code = sku.item_id; // 将SKUid赋值给物料编号
|
weidianProdInfo.fx_fee_rate = sku.fx_fee_rate;
|
weidianProdInfo.item_name = item.itemName;
|
weidianProdInfo.sku_merchant_code = sku.sku_merchant_code;
|
weidianProdInfo.attr_ids = sku.attr_ids;
|
weidianProdInfo.sold = sku.sold;
|
weidianProdInfo.img = sku.img;
|
weidianProdInfo.itemid = sku.item_id;
|
weidianProdInfo.price = sku.price;
|
weidianProdInfo.id = sku.id;
|
weidianProdInfo.title = sku.title;
|
weidianProdInfo.stock = sku.stock;
|
weidianProdInfo.status = sku.status;
|
|
await this.setAccountInfo(weidianProdInfo);
|
await this.dbWrite.save(weidianProdInfo);
|
|
// 将物料信息添加到WMS物料信息中
|
let wmsProdInfo = await this.dbRead.findOne(BaseProductInfo, {
|
userProduct_Id: userInfo.userProduct_Id,
|
productCode: sku.item_id
|
});
|
if (!wmsProdInfo) {
|
//不存在,新建物料
|
wmsProdInfo = new BaseProductInfo();
|
}
|
wmsProdInfo.productCode = weidianProdInfo.itemid; // 将SKUid赋值给物料编号
|
wmsProdInfo.productName = weidianProdInfo.item_name;
|
wmsProdInfo.consignor_Id = basicInfo.consignor_Id;
|
wmsProdInfo.consignorCode = basicInfo.consignorCode;
|
wmsProdInfo.consignorName = basicInfo.consignorName;
|
|
wmsProdInfo.productModel = wmsProdInfo.productCode;
|
await this.setAccountInfo(wmsProdInfo);
|
await this.dbWrite.save(wmsProdInfo);
|
}
|
}
|
|
this.info.result = true;
|
this.info.msg = "获取成功,共获取去到" + res.result.items.length + "条记录";
|
} else {
|
this.info.result = false;
|
this.info.msg = "获取失败";
|
}
|
} catch (error) {
|
this.info.result = false;
|
this.info.msg = "获取失败," + error.message;
|
}
|
|
return this.info;
|
}
|
//#endregion
|
|
//#region 获取订单
|
public async getOrder() {
|
try {
|
let userInfo = await this.userInfo;
|
let domain = `https://api.vdian.com/api`;
|
let basicInfo = await this.dbRead.findOne(WeidianBasicInfo, {
|
baseInfo_Id: 1
|
});
|
let update_start = moment(new Date()).add("days", -2).format("YYYY-MM-DD HH:mm:ss"); // 两天前时间
|
let update_end = moment(new Date()).format("YYYY-MM-DD HH:mm:ss"); // 当前时间
|
let params = `param={"page_num":1,"page_size":10,"order_type":"all","update_start":"${update_start}","update_end":"${update_end}","is_wei_order":"0","group_type":"1"}&public={"method":"vdian.order.list.get","access_token":"${basicInfo.access_token}","version":"1.2"}`;
|
let url = domain + "?" + params;
|
let result = await this.ctx.curl(url, {
|
method: "GET"
|
});
|
|
let data = Buffer.from(result.data).toString();
|
let res = JSON.parse(data);
|
|
if (res.status.status_code === 0) {
|
// 循环订单列表
|
for (let order of res.result.orders) {
|
let order_id = order.order_id;
|
// 获取订单详情
|
let params = `param={"order_id":"${order_id}"}&public={"method":"vdian.order.get","access_token":"${basicInfo.access_token}","version":"1.0","format":"json"}`;
|
url = domain + "?" + params;
|
let resultDetail = await this.ctx.curl(url, {
|
method: "GET"
|
});
|
let dataDetail = Buffer.from(resultDetail.data).toString();
|
let resDetail = JSON.parse(dataDetail);
|
|
if (resDetail.status.status_code === 0) {
|
let detailInfo = resDetail.result;
|
// 获取数据库内订单是否存在
|
let orderInfo = await this.dbRead.findOne(WeidianOrder, {
|
userProduct_Id: userInfo.userProduct_Id,
|
order_id: detailInfo.order_id
|
});
|
if (!orderInfo) {
|
//不存在,新建订单
|
orderInfo = new WeidianOrder();
|
}
|
// 更新订单信息
|
// orderInfo = Object.assign(orderInfo, detailInfo);
|
orderInfo.order_id = detailInfo.order_id;
|
orderInfo.add_time = detailInfo.add_time;
|
orderInfo.city = detailInfo.city;
|
orderInfo.province = detailInfo.province;
|
orderInfo.region = detailInfo.region;
|
orderInfo.self_address = detailInfo.self_address;
|
orderInfo.idCardNo = detailInfo.idCardNo;
|
orderInfo.name = detailInfo.buyer_info.name;
|
orderInfo.phone = detailInfo.buyer_info.phone;
|
orderInfo.address = detailInfo.buyer_info.address;
|
orderInfo.idCardNo = detailInfo.buyer_info.idCardNo;
|
orderInfo.is_close = detailInfo.is_close;
|
orderInfo.express_fee_num = detailInfo.express_fee_num;
|
orderInfo.total_fee = detailInfo.total_fee;
|
orderInfo.seller_phone = detailInfo.seller_phone;
|
orderInfo.weixin = detailInfo.weixin;
|
orderInfo.createDate = new Date();
|
|
await this.setAccountInfo(orderInfo);
|
await this.dbWrite.save(orderInfo);
|
|
let wdOrderInfo = resDetail.result;
|
|
/* ***************************************
|
* 将订单信息添加到WMS出库订单中
|
* **************************************/
|
let wmsOrderInfo = await this.dbRead.findOne(SaleOrder, {
|
userProduct_Id: orderInfo.userProduct_Id,
|
storeOrderCode: wdOrderInfo.order_id
|
});
|
if (!wmsOrderInfo) {
|
//不存在,新建订单
|
wmsOrderInfo = new SaleOrder();
|
let orderCode = await this.ctx.service.common.getCodeRegular(112);
|
wmsOrderInfo.orderCode = orderCode; // WMS订单号
|
}
|
// 更新订单信息
|
wmsOrderInfo.storeOrderCode = orderInfo.order_id;
|
wmsOrderInfo.consignor_Id = basicInfo.consignor_Id;
|
wmsOrderInfo.consignorCode = basicInfo.consignorCode;
|
wmsOrderInfo.consignorName = basicInfo.consignorName;
|
wmsOrderInfo.storage_Id = basicInfo.storage_Id;
|
wmsOrderInfo.storageName = basicInfo.storageName;
|
wmsOrderInfo.shippingName = orderInfo.name;
|
wmsOrderInfo.mobile = orderInfo.phone;
|
|
// 主表求和字段计算
|
let total: any = detailInfo.items.reduce(
|
(totalItem: any, currItem) => {
|
totalItem.totalQuantityOrder += Number(currItem["quantity"]);
|
totalItem.totalWeight += 0;
|
totalItem.grandTotal += Number(currItem["total_price"]);
|
return totalItem;
|
},
|
{ totalQuantityOrder: 0, totalWeight: 0, grandTotal: 0 }
|
);
|
wmsOrderInfo.totalWeight = total.totalWeight;
|
wmsOrderInfo.totalQuantityOrder = total.totalQuantityOrder;
|
wmsOrderInfo.grandTotal = total.grandTotal;
|
|
await this.setAccountInfo(wmsOrderInfo);
|
await this.dbWrite.save(wmsOrderInfo);
|
|
// 明细处理
|
for (let item of detailInfo.items) {
|
// 获取数据库内订单明细是否存在
|
let detailInfo = await this.dbRead.findOne(WeidianOrderDetail, {
|
weidianOrder_Id: orderInfo.weidianOrder_Id,
|
sku_id: item.sku_id
|
});
|
if (!detailInfo) {
|
//不存在,新建明细
|
detailInfo = new WeidianOrderDetail();
|
}
|
detailInfo.weidianOrder_Id = orderInfo.weidianOrder_Id; // 将主从表的主外键关联上
|
|
// 更新明细信息
|
detailInfo.sku_id = item.sku_id;
|
detailInfo.item_name = item.item_name;
|
detailInfo.url = item.url;
|
detailInfo.quantity = item.quantity;
|
detailInfo.price = item.price;
|
detailInfo.sku_title = item.sku_title;
|
detailInfo.fx_fee_rate = item.fx_fee_rate;
|
detailInfo.total_price = item.total_price;
|
detailInfo.merchant_code = item.merchant_code;
|
detailInfo.fx_fee_rate = item.fx_fee_rate;
|
detailInfo.img = item.img;
|
detailInfo.sku_merchant_code = item.sku_merchant_code;
|
await this.setAccountInfo(detailInfo);
|
await this.dbWrite.save(detailInfo);
|
|
//订单明细
|
let wmsdetailInfo = await this.dbRead.findOne(SaleOrderList, {
|
order_Id: wmsOrderInfo.order_Id,
|
productCode: item.item_id
|
});
|
if (!wmsdetailInfo) {
|
//不存在,新建明细
|
wmsdetailInfo = new SaleOrderList();
|
}
|
wmsdetailInfo.orderList_Id = wmsOrderInfo.order_Id;
|
|
// 获取WMS物料信息
|
let wmsProdInfo = await this.dbRead.findOne(BaseProductInfo, {
|
userProduct_Id: userInfo.userProduct_Id,
|
productCode: item.item_id
|
});
|
|
// 更新明细信息
|
wmsdetailInfo.order_Id = wmsOrderInfo.order_Id; // 将主从表的主外键关联上
|
wmsdetailInfo.productName = wmsProdInfo.productName;
|
wmsdetailInfo.product_Id = wmsProdInfo.product_Id;
|
wmsdetailInfo.productCode = wmsProdInfo.productCode;
|
wmsdetailInfo.productModel = wmsProdInfo.productModel;
|
wmsdetailInfo.productSpec = wmsProdInfo.productSpec;
|
wmsdetailInfo.quantityOrder = item.quantity;
|
|
await this.setAccountInfo(wmsdetailInfo);
|
await this.dbWrite.save(wmsdetailInfo);
|
}
|
}
|
}
|
this.info.result = true;
|
this.info.msg = "获取成功,共获取去到" + res.result.orders.length + "条记录";
|
} else {
|
this.info.result = false;
|
this.info.msg = "获取失败";
|
}
|
} catch (error) {
|
this.info.result = false;
|
this.info.msg = "获取失败," + error.message;
|
}
|
return this.info;
|
}
|
// #endregion
|
|
//#region 订单 查询
|
public async getOrderQuery() {
|
try {
|
let userInfo = await this.userInfo;
|
let domain = `https://api.vdian.com/api`;
|
let basicInfo = await this.dbRead.findOne(WeidianBasicInfo, {
|
baseInfo_Id: 1
|
});
|
|
let order_id = this.body.order_id;
|
// 获取订单详情
|
let params = `param={"order_id":"${order_id}"}&public={"method":"vdian.order.get","access_token":"${basicInfo.access_token}","version":"1.0","format":"json"}`;
|
let url = domain + "?" + params;
|
let resultDetail = await this.ctx.curl(url, {
|
method: "GET"
|
});
|
let dataDetail = Buffer.from(resultDetail.data).toString();
|
let resDetail = JSON.parse(dataDetail);
|
|
if (resDetail.status.status_code === 0) {
|
let detailInfo = resDetail.result;
|
// 获取数据库内订单是否存在
|
let orderInfo = await this.dbRead.findOne(WeidianOrder, {
|
userProduct_Id: userInfo.userProduct_Id,
|
order_id: detailInfo.order_id
|
});
|
if (!orderInfo) {
|
//不存在,新建订单
|
orderInfo = new WeidianOrder();
|
}
|
// 更新订单信息
|
// orderInfo = Object.assign(orderInfo, detailInfo);
|
orderInfo.order_id = detailInfo.order_id;
|
orderInfo.add_time = detailInfo.add_time;
|
orderInfo.city = detailInfo.city;
|
orderInfo.province = detailInfo.province;
|
orderInfo.region = detailInfo.region;
|
orderInfo.self_address = detailInfo.self_address;
|
orderInfo.idCardNo = detailInfo.idCardNo;
|
orderInfo.name = detailInfo.buyer_info.name;
|
orderInfo.phone = detailInfo.buyer_info.phone;
|
orderInfo.address = detailInfo.buyer_info.address;
|
orderInfo.idCardNo = detailInfo.buyer_info.idCardNo;
|
orderInfo.is_close = detailInfo.is_close;
|
orderInfo.express_fee_num = detailInfo.express_fee_num;
|
orderInfo.total_fee = detailInfo.total_fee;
|
orderInfo.seller_phone = detailInfo.seller_phone;
|
orderInfo.weixin = detailInfo.weixin;
|
orderInfo.createDate = new Date();
|
|
await this.setAccountInfo(orderInfo);
|
await this.dbWrite.save(orderInfo);
|
|
let wdOrderInfo = resDetail.result;
|
|
/* ***************************************
|
* 将订单信息添加到WMS出库订单中
|
* **************************************/
|
let wmsOrderInfo = await this.dbRead.findOne(SaleOrder, {
|
userProduct_Id: orderInfo.userProduct_Id,
|
storeOrderCode: wdOrderInfo.order_id
|
});
|
if (!wmsOrderInfo) {
|
//不存在,新建订单
|
wmsOrderInfo = new SaleOrder();
|
let orderCode = await this.ctx.service.common.getCodeRegular(112);
|
wmsOrderInfo.orderCode = orderCode; // WMS订单号
|
}
|
// 更新订单信息
|
wmsOrderInfo.storeOrderCode = orderInfo.order_id;
|
wmsOrderInfo.consignor_Id = basicInfo.consignor_Id;
|
wmsOrderInfo.consignorCode = basicInfo.consignorCode;
|
wmsOrderInfo.consignorName = basicInfo.consignorName;
|
wmsOrderInfo.storage_Id = basicInfo.storage_Id;
|
wmsOrderInfo.storageName = basicInfo.storageName;
|
wmsOrderInfo.shippingName = orderInfo.name;
|
wmsOrderInfo.mobile = orderInfo.phone;
|
|
// 主表求和字段计算
|
let total: any = detailInfo.items.reduce(
|
(totalItem: any, currItem) => {
|
totalItem.totalQuantityOrder += Number(currItem["quantity"]);
|
totalItem.totalWeight += 0;
|
totalItem.grandTotal += Number(currItem["total_price"]);
|
return totalItem;
|
},
|
{ totalQuantityOrder: 0, totalWeight: 0, grandTotal: 0 }
|
);
|
wmsOrderInfo.totalWeight = total.totalWeight;
|
wmsOrderInfo.totalQuantityOrder = total.totalQuantityOrder;
|
wmsOrderInfo.grandTotal = total.grandTotal;
|
|
await this.setAccountInfo(wmsOrderInfo);
|
await this.dbWrite.save(wmsOrderInfo);
|
|
// 明细处理
|
for (let item of detailInfo.items) {
|
// 获取数据库内订单明细是否存在
|
let detailInfo = await this.dbRead.findOne(WeidianOrderDetail, {
|
weidianOrder_Id: orderInfo.weidianOrder_Id,
|
sku_id: item.sku_id
|
});
|
if (!detailInfo) {
|
//不存在,新建明细
|
detailInfo = new WeidianOrderDetail();
|
}
|
detailInfo.weidianOrder_Id = orderInfo.weidianOrder_Id; // 将主从表的主外键关联上
|
|
// 更新明细信息
|
detailInfo.sku_id = item.sku_id;
|
detailInfo.item_name = item.item_name;
|
detailInfo.url = item.url;
|
detailInfo.quantity = item.quantity;
|
detailInfo.price = item.price;
|
detailInfo.sku_title = item.sku_title;
|
detailInfo.fx_fee_rate = item.fx_fee_rate;
|
detailInfo.total_price = item.total_price;
|
detailInfo.merchant_code = item.merchant_code;
|
detailInfo.fx_fee_rate = item.fx_fee_rate;
|
detailInfo.img = item.img;
|
detailInfo.sku_merchant_code = item.sku_merchant_code;
|
await this.setAccountInfo(detailInfo);
|
await this.dbWrite.save(detailInfo);
|
|
//订单明细
|
let wmsdetailInfo = await this.dbRead.findOne(SaleOrderList, {
|
order_Id: wmsOrderInfo.order_Id,
|
productCode: item.item_id
|
});
|
if (!wmsdetailInfo) {
|
//不存在,新建明细
|
wmsdetailInfo = new SaleOrderList();
|
}
|
wmsdetailInfo.orderList_Id = wmsOrderInfo.order_Id;
|
|
// 获取WMS物料信息
|
let wmsProdInfo = await this.dbRead.findOne(BaseProductInfo, {
|
userProduct_Id: userInfo.userProduct_Id,
|
productCode: item.item_id
|
});
|
|
// 更新明细信息
|
wmsdetailInfo.order_Id = wmsOrderInfo.order_Id; // 将主从表的主外键关联上
|
wmsdetailInfo.productName = wmsProdInfo.productName;
|
wmsdetailInfo.product_Id = wmsProdInfo.product_Id;
|
wmsdetailInfo.productCode = wmsProdInfo.productCode;
|
wmsdetailInfo.productModel = wmsProdInfo.productModel;
|
wmsdetailInfo.productSpec = wmsProdInfo.productSpec;
|
wmsdetailInfo.quantityOrder = item.quantity;
|
|
await this.setAccountInfo(wmsdetailInfo);
|
await this.dbWrite.save(wmsdetailInfo);
|
}
|
|
this.info.result = true;
|
this.info.msg = "订单ID【" + order_id + "】获取成功";
|
} else {
|
this.info.result = false;
|
this.info.msg = "订单ID【" + order_id + "】获取失败";
|
}
|
} catch (error) {
|
this.info.result = false;
|
this.info.msg = "获取失败," + error.message;
|
}
|
return this.info;
|
}
|
//#endregion
|
}
|