diff --git a/db.sql b/db.sql
index 56cbe57..3b2a822 100644
--- a/db.sql
+++ b/db.sql
@@ -1380,6 +1380,7 @@ CREATE TABLE `C_parcel_item` (
`ParcelId` INT NOT NULL COMMENT '包裹ID → C_parcel.Id',
`ProductName` VARCHAR(512) NULL COMMENT '商品名称',
`AttributeText` VARCHAR(256) NULL COMMENT '规格属性',
+ `ImageUrl` VARCHAR(1024) NULL COMMENT '商品图片URL',
`Quantity` INT NOT NULL DEFAULT 0 COMMENT '数量',
`SkuId` INT NULL COMMENT '库内SKU ID → C_sku.Id',
`SkuCode` VARCHAR(64) NULL COMMENT '冗余SKU编码',
diff --git a/sql/C_parcel_item_ImageUrl.sql b/sql/C_parcel_item_ImageUrl.sql
new file mode 100644
index 0000000..01709ef
--- /dev/null
+++ b/sql/C_parcel_item_ImageUrl.sql
@@ -0,0 +1,20 @@
+-- 已有库增量:包裹明细增加商品图片 ImageUrl
+-- 可重复执行
+
+SET @col_exists := (
+ SELECT COUNT(1)
+ FROM information_schema.COLUMNS
+ WHERE TABLE_SCHEMA = DATABASE()
+ AND TABLE_NAME = 'C_parcel_item'
+ AND COLUMN_NAME = 'ImageUrl'
+);
+
+SET @sql := IF(
+ @col_exists = 0,
+ 'ALTER TABLE `C_parcel_item` ADD COLUMN `ImageUrl` VARCHAR(1024) NULL COMMENT ''商品图片URL'' AFTER `AttributeText`',
+ 'SELECT ''C_parcel_item.ImageUrl already exists'' AS info'
+);
+
+PREPARE stmt FROM @sql;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
diff --git a/sql/README.md b/sql/README.md
index 66e3a46..073e2be 100644
--- a/sql/README.md
+++ b/sql/README.md
@@ -3,5 +3,5 @@
OMS / 共用库的建表脚本已统一到仓库根目录 `db.sql`。
- 新环境:直接执行 `db.sql`(会 DROP 后重建,勿在有生产数据的库上执行)
-- 已有库:用 diff 对比 `db.sql` 与现库结构后手工 ALTER;本目录下单个表脚本(如 `C_parcel_arrival.sql`、`C_parcel_item_AttributeText.sql`)可直接在已有库执行增量建表
+- 已有库:用 diff 对比 `db.sql` 与现库结构后手工 ALTER;本目录下单个表脚本(如 `C_parcel_arrival.sql`、`C_parcel_item_AttributeText.sql`、`C_parcel_item_ImageUrl.sql`)可直接在已有库执行增量建表
- 数据权限表(`user_org_perm` 等)若 RBAC 与 OMS 分库,请只在 RBAC 库执行 `db.sql` 末尾对应段落
diff --git a/src/Oms.Application/Dtos/Warehouse/WarehouseDtos.cs b/src/Oms.Application/Dtos/Warehouse/WarehouseDtos.cs
index 3c803a4..490478e 100644
--- a/src/Oms.Application/Dtos/Warehouse/WarehouseDtos.cs
+++ b/src/Oms.Application/Dtos/Warehouse/WarehouseDtos.cs
@@ -333,6 +333,9 @@ public class WarehouseParcelItemSaveInput
public string? AttributeText { get; set; }
+ /// 商品图片 URL。
+ public string? ImageUrl { get; set; }
+
public int Quantity { get; set; }
public string? Remark { get; set; }
@@ -346,6 +349,9 @@ public class WarehouseParcelItemOutput
public string? AttributeText { get; set; }
+ /// 商品图片 URL。
+ public string? ImageUrl { get; set; }
+
public int Quantity { get; set; }
public int? SkuId { get; set; }
diff --git a/src/Oms.Application/Services/Warehouse/WarehouseService.Parcel.cs b/src/Oms.Application/Services/Warehouse/WarehouseService.Parcel.cs
index ca8c1ab..47edf02 100644
--- a/src/Oms.Application/Services/Warehouse/WarehouseService.Parcel.cs
+++ b/src/Oms.Application/Services/Warehouse/WarehouseService.Parcel.cs
@@ -160,6 +160,12 @@ public partial class WarehouseService
throw new BusinessException("商品数量必须大于 0");
}
+ var imageUrl = string.IsNullOrWhiteSpace(itemInput.ImageUrl) ? null : itemInput.ImageUrl.Trim();
+ if (imageUrl != null && imageUrl.Length > 1024)
+ {
+ imageUrl = imageUrl[..1024];
+ }
+
var item = new CParcelItem
{
ParcelId = parcel.Id,
@@ -167,6 +173,7 @@ public partial class WarehouseService
AttributeText = string.IsNullOrWhiteSpace(itemInput.AttributeText)
? null
: itemInput.AttributeText.Trim(),
+ ImageUrl = imageUrl,
Quantity = itemInput.Quantity,
Remark = string.IsNullOrWhiteSpace(itemInput.Remark) ? null : itemInput.Remark.Trim()
};
@@ -287,6 +294,7 @@ public partial class WarehouseService
Id = item.Id,
ProductName = item.ProductName,
AttributeText = item.AttributeText,
+ ImageUrl = item.ImageUrl,
Quantity = item.Quantity,
SkuId = item.SkuId,
SkuCode = item.SkuCode,
diff --git a/src/Oms.Domain/WarehouseAggregate/Entities/CParcelItem.cs b/src/Oms.Domain/WarehouseAggregate/Entities/CParcelItem.cs
index 98d8ab1..06e870a 100644
--- a/src/Oms.Domain/WarehouseAggregate/Entities/CParcelItem.cs
+++ b/src/Oms.Domain/WarehouseAggregate/Entities/CParcelItem.cs
@@ -13,6 +13,9 @@ public class CParcelItem : OmsAuditedAggregateRoot
/// 规格属性。
public string? AttributeText { get; set; }
+ /// 商品图片 URL(采集/手工)。
+ public string? ImageUrl { get; set; }
+
public int Quantity { get; set; }
public int? SkuId { get; set; }