feat(物流): 添加物流别名映射功能并优化物流公司处理

- 新增 logistics_alias 实体用于存储物流公司别名映射
- 修改 ShipmentBookDTO 中 courierCompany 的校验规则为 any 类型
- 在订单服务中实现物流别名查询和映射功能
- 移除物流服务中 courierCompany 的特殊处理逻辑
This commit is contained in:
zhuotianyuan 2026-01-30 14:24:33 +08:00
parent 5488e1b7c6
commit 4bde698625
5 changed files with 159 additions and 117 deletions

View File

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

View File

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

View File

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