From 314c5ac02f733d1ddcd9cacf5ffedcdd4b6eb92c Mon Sep 17 00:00:00 2001 From: zzh <1368735060@qq.com> Date: Mon, 19 Oct 2026 15:47:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=B3=E6=8A=A5=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=A7=E5=93=81=E6=A0=87=E8=AF=86=E7=BC=96?= =?UTF-8?q?=E7=A0=81/=E9=9D=9E=E6=A0=87=E4=BA=A7=E5=93=81=E6=A0=87?= =?UTF-8?q?=E8=AF=86=E7=BC=96=E7=A0=81/=E6=A0=87=E5=87=86=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E6=A0=87=E8=AF=86=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - t_order_declaration 新增 ProductId、NonStdProductId、StdProductId(迁移 migrate_order_declaration_product_ids_20261019.sql) - 下单/改单/开放接口/Excel 模板入参、订单详情出参、下游 createOrderOne 报文同步字段 - 自动触发公式目录增加三个字段 --- db.sql | 3 + ...order_declaration_product_ids_20261019.sql | 55 +++++++++++++++++++ .../Dtos/Orders/OrderItemOutput.cs | 15 +++++ .../Dtos/Orders/OrderParcelItemInput.cs | 20 +++++++ .../Orders/Issues/AutoTriggerFormulaMeta.cs | 3 + .../Services/Orders/OrderService.Helpers.cs | 3 + .../Services/Orders/OrderService.OrderEdit.cs | 3 + .../Orders/OrderService.ParcelBilling.cs | 3 + .../Templates/OrderTemplateFieldRegistry.cs | 3 + .../Templates/OrderTemplateRowMapper.cs | 1 + .../OrderDownstreamCreateOneBodyBuilder.cs | 3 + .../Entities/OrderDeclaration.cs | 15 +++++ 12 files changed, 127 insertions(+) create mode 100644 sql/migrate_order_declaration_product_ids_20261019.sql diff --git a/db.sql b/db.sql index 2661036..198f297 100644 --- a/db.sql +++ b/db.sql @@ -432,6 +432,9 @@ CREATE TABLE `t_order_declaration` ( `ImHsCode` VARCHAR(50) NULL COMMENT '进口HsCode', `ExHsCode` VARCHAR(50) NULL COMMENT '出口HsCode', `DeclareElement` VARCHAR(255) NULL COMMENT '出口申报要素', + `ProductId` VARCHAR(100) NULL COMMENT '产品标识编码', + `NonStdProductId` VARCHAR(100) NULL COMMENT '非标产品标识编码', + `StdProductId` VARCHAR(100) NULL COMMENT '标准产品标识编码', `SkuImage` VARCHAR(512) NULL COMMENT '图片(存 storage key 或短 URL)', `Category` VARCHAR(20) NULL COMMENT '类别', `Brand` VARCHAR(50) NULL COMMENT '品牌', diff --git a/sql/migrate_order_declaration_product_ids_20261019.sql b/sql/migrate_order_declaration_product_ids_20261019.sql new file mode 100644 index 0000000..474a9fd --- /dev/null +++ b/sql/migrate_order_declaration_product_ids_20261019.sql @@ -0,0 +1,55 @@ +-- 申报明细:新增产品标识编码 / 非标产品标识编码 / 标准产品标识编码。 +-- 可重复执行。 + +SET @db := DATABASE(); + +-- t_order_declaration.ProductId +SET @exists := ( + SELECT COUNT(1) + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = @db + AND TABLE_NAME = 't_order_declaration' + AND COLUMN_NAME = 'ProductId' +); +SET @sql := IF( + @exists = 0, + 'ALTER TABLE `t_order_declaration` ADD COLUMN `ProductId` VARCHAR(100) NULL COMMENT ''产品标识编码'' AFTER `DeclareElement`', + 'SELECT ''t_order_declaration.ProductId already exists'' AS info' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- t_order_declaration.NonStdProductId +SET @exists := ( + SELECT COUNT(1) + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = @db + AND TABLE_NAME = 't_order_declaration' + AND COLUMN_NAME = 'NonStdProductId' +); +SET @sql := IF( + @exists = 0, + 'ALTER TABLE `t_order_declaration` ADD COLUMN `NonStdProductId` VARCHAR(100) NULL COMMENT ''非标产品标识编码'' AFTER `ProductId`', + 'SELECT ''t_order_declaration.NonStdProductId already exists'' AS info' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- t_order_declaration.StdProductId +SET @exists := ( + SELECT COUNT(1) + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = @db + AND TABLE_NAME = 't_order_declaration' + AND COLUMN_NAME = 'StdProductId' +); +SET @sql := IF( + @exists = 0, + 'ALTER TABLE `t_order_declaration` ADD COLUMN `StdProductId` VARCHAR(100) NULL COMMENT ''标准产品标识编码'' AFTER `NonStdProductId`', + 'SELECT ''t_order_declaration.StdProductId already exists'' AS info' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; diff --git a/src/Oms.Application/Dtos/Orders/OrderItemOutput.cs b/src/Oms.Application/Dtos/Orders/OrderItemOutput.cs index 6797c7f..00ac7ba 100644 --- a/src/Oms.Application/Dtos/Orders/OrderItemOutput.cs +++ b/src/Oms.Application/Dtos/Orders/OrderItemOutput.cs @@ -70,6 +70,21 @@ public class OrderItemOutput /// public string? DeclareElement { get; set; } + /// + /// 产品标识编码。 + /// + public string? ProductId { get; set; } + + /// + /// 非标产品标识编码。 + /// + public string? NonStdProductId { get; set; } + + /// + /// 标准产品标识编码。 + /// + public string? StdProductId { get; set; } + /// /// SKU 图片。 /// diff --git a/src/Oms.Application/Dtos/Orders/OrderParcelItemInput.cs b/src/Oms.Application/Dtos/Orders/OrderParcelItemInput.cs index 7f29d6f..ed71218 100644 --- a/src/Oms.Application/Dtos/Orders/OrderParcelItemInput.cs +++ b/src/Oms.Application/Dtos/Orders/OrderParcelItemInput.cs @@ -1,3 +1,5 @@ +using System.ComponentModel.DataAnnotations; + namespace Oms.Application.Dtos.Orders; /// @@ -65,6 +67,24 @@ public class OrderParcelItemInput /// public string? DeclareElement { get; set; } + /// + /// 产品标识编码(选填)。 + /// + [StringLength(100)] + public string? ProductId { get; set; } + + /// + /// 非标产品标识编码(选填)。 + /// + [StringLength(100)] + public string? NonStdProductId { get; set; } + + /// + /// 标准产品标识编码(选填)。 + /// + [StringLength(100)] + public string? StdProductId { get; set; } + /// /// SKU 图片。 /// diff --git a/src/Oms.Application/Services/Orders/Issues/AutoTriggerFormulaMeta.cs b/src/Oms.Application/Services/Orders/Issues/AutoTriggerFormulaMeta.cs index e403be4..4754b59 100644 --- a/src/Oms.Application/Services/Orders/Issues/AutoTriggerFormulaMeta.cs +++ b/src/Oms.Application/Services/Orders/Issues/AutoTriggerFormulaMeta.cs @@ -199,6 +199,9 @@ public static class AutoTriggerFormulaMeta yield return ("进口HS编码", "t_order_declaration", "ImHsCode", FormulaValueType.String, false); yield return ("出口HS编码", "t_order_declaration", "ExHsCode", FormulaValueType.String, false); yield return ("出口申报要素", "t_order_declaration", "DeclareElement", FormulaValueType.String, false); + yield return ("产品标识编码", "t_order_declaration", "ProductId", FormulaValueType.String, false); + yield return ("非标产品标识编码", "t_order_declaration", "NonStdProductId", FormulaValueType.String, false); + yield return ("标准产品标识编码", "t_order_declaration", "StdProductId", FormulaValueType.String, false); yield return ("申报类别", "t_order_declaration", "Category", FormulaValueType.String, false); yield return ("品牌", "t_order_declaration", "Brand", FormulaValueType.String, false); yield return ("品牌类型", "t_order_declaration", "BrandType", FormulaValueType.String, false); diff --git a/src/Oms.Application/Services/Orders/OrderService.Helpers.cs b/src/Oms.Application/Services/Orders/OrderService.Helpers.cs index c15f066..d61441a 100644 --- a/src/Oms.Application/Services/Orders/OrderService.Helpers.cs +++ b/src/Oms.Application/Services/Orders/OrderService.Helpers.cs @@ -817,6 +817,9 @@ public partial class OrderService ImHsCode = x.ImHsCode ?? x.HsCode, ExHsCode = x.ExHsCode ?? x.HsCode, DeclareElement = x.DeclareElement, + ProductId = x.ProductId, + NonStdProductId = x.NonStdProductId, + StdProductId = x.StdProductId, SkuImage = FileStorage.GetPublicUrl(x.SkuImage), Category = x.Category, Brand = x.Brand, diff --git a/src/Oms.Application/Services/Orders/OrderService.OrderEdit.cs b/src/Oms.Application/Services/Orders/OrderService.OrderEdit.cs index 1f95706..2fad81d 100644 --- a/src/Oms.Application/Services/Orders/OrderService.OrderEdit.cs +++ b/src/Oms.Application/Services/Orders/OrderService.OrderEdit.cs @@ -1360,6 +1360,9 @@ public partial class OrderService ImHsCode = x.ImHsCode, ExHsCode = x.ExHsCode ?? x.ImHsCode, DeclareElement = x.DeclareElement, + ProductId = x.ProductId?.Trim(), + NonStdProductId = x.NonStdProductId?.Trim(), + StdProductId = x.StdProductId?.Trim(), SkuImage = OmsObjectStorageExtensions.ToStorageKey(x.SkuImage), Category = x.Category, Brand = x.Brand, diff --git a/src/Oms.Application/Services/Orders/OrderService.ParcelBilling.cs b/src/Oms.Application/Services/Orders/OrderService.ParcelBilling.cs index e9afb21..abaa68f 100644 --- a/src/Oms.Application/Services/Orders/OrderService.ParcelBilling.cs +++ b/src/Oms.Application/Services/Orders/OrderService.ParcelBilling.cs @@ -2213,6 +2213,9 @@ public partial class OrderService ImHsCode = x.ImHsCode, ExHsCode = x.ExHsCode, DeclareElement = x.DeclareElement, + ProductId = x.ProductId?.Trim(), + NonStdProductId = x.NonStdProductId?.Trim(), + StdProductId = x.StdProductId?.Trim(), SkuImage = OmsObjectStorageExtensions.ToStorageKey(x.SkuImage), Category = x.Category, Brand = x.Brand, diff --git a/src/Oms.Application/Services/Orders/Templates/OrderTemplateFieldRegistry.cs b/src/Oms.Application/Services/Orders/Templates/OrderTemplateFieldRegistry.cs index b5be7bd..ede5f25 100644 --- a/src/Oms.Application/Services/Orders/Templates/OrderTemplateFieldRegistry.cs +++ b/src/Oms.Application/Services/Orders/Templates/OrderTemplateFieldRegistry.cs @@ -215,6 +215,9 @@ public static class OrderTemplateFieldRegistry Add("items[0].weight", "总重量(kg)", false, "number", group: "declaration", example: "自动计算", hint: "不填=单重×数量"); Add("items[0].imHsCode", "进口HsCode", false, group: "declaration", hint: "选填"); Add("items[0].exHsCode", "出口HsCode", false, group: "declaration", hint: "选填"); + Add("items[0].productId", "产品标识编码", false, group: "declaration", hint: "选填"); + Add("items[0].nonStdProductId", "非标产品标识编码", false, group: "declaration", hint: "选填"); + Add("items[0].stdProductId", "标准产品标识编码", false, group: "declaration", hint: "选填"); Add("items[0].skuImage", "商品图片URL", false, group: "declaration", hint: "选填"); Add("items[0].category", "类别", false, group: "declaration", example: "Accessories", hint: "选填"); Add("items[0].brand", "品牌", false, group: "declaration", example: "DemoBrand", hint: "选填"); diff --git a/src/Oms.Application/Services/Orders/Templates/OrderTemplateRowMapper.cs b/src/Oms.Application/Services/Orders/Templates/OrderTemplateRowMapper.cs index b1470a6..c308c56 100644 --- a/src/Oms.Application/Services/Orders/Templates/OrderTemplateRowMapper.cs +++ b/src/Oms.Application/Services/Orders/Templates/OrderTemplateRowMapper.cs @@ -20,6 +20,7 @@ public static class OrderTemplateRowMapper "sender.countryCode", "sender.province", "sender.city", "sender.zipCode", "sender.streetAddress1", "sender.streetAddress2", "sender.streetAddress3", "sender.houseNumber", "items[0].cnName", "items[0].enName", "items[0].sku", "items[0].unit", "items[0].imHsCode", "items[0].exHsCode", "items[0].skuImage", + "items[0].productId", "items[0].nonStdProductId", "items[0].stdProductId", "items[0].category", "items[0].brand", "items[0].brandType", "items[0].distribution", "items[0].material", "items[0].enMaterial", "items[0].purpose", "items[0].attributes", "items[0].originCountry", "items[0].salesLink", "items[0].model", "items[0].specifications", "items[0].comment" diff --git a/src/Oms.Application/Shared/OrderDownstreamCreateOneBodyBuilder.cs b/src/Oms.Application/Shared/OrderDownstreamCreateOneBodyBuilder.cs index 9908371..501a2a9 100644 --- a/src/Oms.Application/Shared/OrderDownstreamCreateOneBodyBuilder.cs +++ b/src/Oms.Application/Shared/OrderDownstreamCreateOneBodyBuilder.cs @@ -201,6 +201,9 @@ public static class OrderDownstreamCreateOneBodyBuilder ImHsCode = x.ImHsCode, ExHsCode = x.ExHsCode ?? x.HsCode, DeclareElement = x.DeclareElement, + ProductId = x.ProductId, + NonStdProductId = x.NonStdProductId, + StdProductId = x.StdProductId, SkuImage = fileStorage?.GetPublicUrl(x.SkuImage) ?? x.SkuImage, Category = x.Category, Brand = x.Brand, diff --git a/src/Oms.Domain/OrdersAggregate/Entities/OrderDeclaration.cs b/src/Oms.Domain/OrdersAggregate/Entities/OrderDeclaration.cs index ab158c3..39544ca 100644 --- a/src/Oms.Domain/OrdersAggregate/Entities/OrderDeclaration.cs +++ b/src/Oms.Domain/OrdersAggregate/Entities/OrderDeclaration.cs @@ -37,6 +37,21 @@ public class OrderDeclaration : OmsAuditedEntity /// public string? DeclareElement { get; set; } + /// + /// 产品标识编码。 + /// + public string? ProductId { get; set; } + + /// + /// 非标产品标识编码。 + /// + public string? NonStdProductId { get; set; } + + /// + /// 标准产品标识编码。 + /// + public string? StdProductId { get; set; } + public string? SkuImage { get; set; } public string? Category { get; set; }