feat(trade): 仓配可调配履约与三分支推单
CI / verify (pull_request) Has been cancelled

同城有仓按仓库绑定承运商自动推单或自管填单,无仓/跨城走总部快递;新增仓配注册表、FulfillmentService 及三端运单追踪。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-16 17:51:20 +08:00
parent f1dc23c54c
commit f6d97b4ee8
30 changed files with 1615 additions and 57 deletions
@@ -474,6 +474,30 @@ export class CreateCityWarehouseDto {
@IsOptional()
@IsIn(['ACTIVE', 'PAUSED'])
status?: 'ACTIVE' | 'PAUSED';
@IsOptional()
@IsIn(['API_AUTO', 'MANUAL'])
fulfillmentMode?: 'API_AUTO' | 'MANUAL';
@IsOptional()
@IsString()
fulfillmentProviderId?: string;
@IsOptional()
@IsString()
manualCarrierLabel?: string;
@IsOptional()
@IsString()
manualQueryUrlTemplate?: string;
@IsOptional()
@IsNumber()
lng?: number;
@IsOptional()
@IsNumber()
lat?: number;
}
export class UpdateCityWarehouseDto {
@@ -505,8 +529,100 @@ export class UpdateCityWarehouseDto {
@IsOptional()
@IsIn(['ACTIVE', 'PAUSED'])
status?: 'ACTIVE' | 'PAUSED';
@IsOptional()
@IsIn(['API_AUTO', 'MANUAL'])
fulfillmentMode?: 'API_AUTO' | 'MANUAL';
@IsOptional()
@ValidateIf((_, v) => v !== null)
@IsString()
fulfillmentProviderId?: string | null;
@IsOptional()
@ValidateIf((_, v) => v !== null)
@IsString()
manualCarrierLabel?: string | null;
@IsOptional()
@ValidateIf((_, v) => v !== null)
@IsString()
manualQueryUrlTemplate?: string | null;
@IsOptional()
@ValidateIf((_, v) => v !== null)
@IsNumber()
lng?: number | null;
@IsOptional()
@ValidateIf((_, v) => v !== null)
@IsNumber()
lat?: number | null;
}
export class CreateFulfillmentProviderDto {
@IsString()
@IsNotEmpty()
code: string;
@IsString()
@IsNotEmpty()
name: string;
@IsIn(['API', 'MANUAL'])
type: 'API' | 'MANUAL';
@IsOptional()
@IsIn(['ACTIVE', 'DISABLED'])
status?: 'ACTIVE' | 'DISABLED';
@IsOptional()
@IsString()
configJson?: string;
@IsOptional()
@IsString()
capabilitiesJson?: string;
}
export class UpdateFulfillmentProviderDto {
@IsOptional()
@IsString()
name?: string;
@IsOptional()
@IsIn(['API', 'MANUAL'])
type?: 'API' | 'MANUAL';
@IsOptional()
@IsIn(['ACTIVE', 'DISABLED'])
status?: 'ACTIVE' | 'DISABLED';
@IsOptional()
@IsString()
configJson?: string;
@IsOptional()
@IsString()
capabilitiesJson?: string;
}
export class ManualShipOrderDto {
@IsString()
@IsNotEmpty()
logisticsCompany: string;
@IsString()
@IsNotEmpty()
trackingNo: string;
@IsOptional()
@IsString()
manualQueryUrl?: string;
}
export class HqLogisticsShipDto extends ManualShipOrderDto {}
export class CreateStoreMediaDto {
@IsString()
@IsNotEmpty()