feat(service): 新增Wintopay物流服务并优化订单导出和物流处理 #70

Merged
longbot merged 8 commits from zhuotianyuan/API:main into main 2026-01-30 07:20:08 +00:00
5 changed files with 159 additions and 117 deletions
Showing only changes of commit 4bde698625 - Show all commits

View File

@ -42,6 +42,7 @@ import DictSeeder from '../db/seeds/dict.seeder';
import CategorySeeder from '../db/seeds/category.seeder';
import CategoryAttributeSeeder from '../db/seeds/category_attribute.seeder';
import { SiteSku } from '../entity/site-sku.entity';
import { logisticsAlias } from '../entity/logistics_alias.emtity';
export default {
// use for cookie sign key, should change to your own and keep security
@ -88,6 +89,7 @@ export default {
Area,
CategoryAttribute,
Category,
logisticsAlias,
],
synchronize: true,
logging: false,

View File

@ -25,7 +25,7 @@ export class ShipmentBookDTO {
shipmentPlatform: string;
@ApiProperty()
@Rule(RuleType.string())
@Rule(RuleType.any())
courierCompany: string;
}

View File

@ -0,0 +1,34 @@
import { ApiProperty } from '@midwayjs/swagger';
import { Entity,CreateDateColumn,UpdateDateColumn, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity('logistics_alias')
export class logisticsAlias {
@PrimaryGeneratedColumn()
id: number;
@ApiProperty({ type: 'string' })
@Column()
logistics_company:string
@ApiProperty({ type: 'string' })
@Column()
logistics_alias:string
@ApiProperty({ type: 'string' })
@Column()
platform:string
// 是否可删除
@Column({ default: true, comment: '是否可删除' })
deletable: boolean;
// 创建时间
@CreateDateColumn()
createdAt: Date;
// 更新时间
@UpdateDateColumn()
updatedAt: Date;
}

View File

@ -735,14 +735,10 @@ export class LogisticsService {
if (data.shipmentPlatform === 'freightwaves') {
let courierCompany: string = "";
if (data.courierCompany != "最优物流") {
courierCompany = data.courierCompany;
}
// 根据TMS系统对接说明文档格式化参数
const reqBody: any = {
// shipCompany: 'UPSYYZ7000NEW',
shipCompany: courierCompany,
shipCompany: data.courierCompany,
partnerOrderNumber: order.siteId + '-' + order.externalOrderId,
warehouseId: '25072621030107400060',
shipper: {
@ -836,15 +832,12 @@ export class LogisticsService {
id: data.address_id,
},
})
const address = shipments?.address;
let courierCompany: string = "";
if (data.courierCompany != "最优物流") {
courierCompany = data.courierCompany;
}
// 转换为RateTryRequest格式
const r = {
//shipCompany: 'UPSYYZ7000NEW', // 必填但ShipmentFeeBookDTO中缺少
shipCompany: courierCompany,
shipCompany: data.courierCompany,
partnerOrderNumber: `order-${Date.now()}`, // 必填,使用时间戳生成
warehouseId: '25072621030107400060', // 可选使用stockPointId转换
shipper: {

View File

@ -42,6 +42,7 @@ import { UnifiedOrderDTO } from '../dto/site-api.dto';
import { CustomerService } from './customer.service';
import { ProductService } from './product.service';
import { Site } from '../entity/site.entity';
import { logisticsAlias } from '../entity/logistics_alias.emtity';
@Provide()
export class OrderService {
@ -54,6 +55,9 @@ export class OrderService {
@InjectEntityModel(Order)
orderModel: Repository<Order>;
@InjectEntityModel(logisticsAlias)
logisticsAliasModel: Repository<logisticsAlias>;
@InjectEntityModel(User)
userModel: Repository<User>;
@ -2866,6 +2870,11 @@ export class OrderService {
chargeback: headers.indexOf('拒付')
};
const logisticsAliases = await this.logisticsAliasModel.find();
// 构建物流公司别名映射
const logisticsAliasMap = new Map(logisticsAliases.map(alias => [ alias.logistics_alias,alias.logistics_company]));
// 遍历数据行
for (let i = 0; i < dataRows.length; i++) {
const row = dataRows[i];
@ -2877,9 +2886,11 @@ export class OrderService {
}
try {
let orderNumbers="";
if (orderNumber.includes('_')&&orderNumber.includes('-')) {
orderNumbers = orderNumber.split('_')[0].toString();
let orderNumbers = orderNumber;
// 确保 orderNumber 是字符串类型
const orderNumberStr = String(orderNumber);
if (orderNumberStr.includes('_') && orderNumberStr.includes('-')) {
orderNumbers = orderNumberStr.split('_')[0].toString();
orderNumbers = orderNumbers.split('-')[1];
}
// 通过订单号查询订单
@ -2890,9 +2901,11 @@ export class OrderService {
if (fulfillments && fulfillments.length > 0) {
const fulfillment = fulfillments[0]; // 假设每个订单只有一个物流信息
const shipping_provider = logisticsAliasMap.get(fulfillment.shipping_provider);
// 回填物流信息
if (columnIndices.logisticsCompany !== -1) {
row[columnIndices.logisticsCompany] = fulfillment.shipping_provider || '';
row[columnIndices.logisticsCompany] = shipping_provider || '';
}
if (columnIndices.trackingNumber !== -1) {
row[columnIndices.trackingNumber] = fulfillment.tracking_number || '';