补迁移脚本为 C_* 与 t_sales_* 表增加 ConcurrencyStamp;列表查询改用 hasCustomerFilter 模式避免 ORM 生成非法 SQL。 Co-authored-by: Cursor <cursoragent@cursor.com>
276 lines
15 KiB
SQL
276 lines
15 KiB
SQL
-- 仓储模块 + 店铺订单表结构(v0.3)
|
||
-- 设计文档:E:\oms0414\docs\仓储模块设计方案.md
|
||
-- 仓储表前缀:C_ ;店铺表前缀:t_sales_
|
||
-- 幂等:CREATE TABLE IF NOT EXISTS
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 仓储域(C_*)
|
||
-- ---------------------------------------------------------------------------
|
||
|
||
CREATE TABLE IF NOT EXISTS `C_sku` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`CustomerId` INT NOT NULL COMMENT '客户ID → t_customer.Id',
|
||
`SkuCode` VARCHAR(64) NOT NULL COMMENT '库内SKU编码',
|
||
`SkuName` VARCHAR(256) NOT NULL COMMENT 'SKU名称',
|
||
`SkuImageUrl` VARCHAR(512) NULL COMMENT '图片URL',
|
||
`WeightG` DECIMAL(10,2) NULL COMMENT '重量(g)',
|
||
`LengthCm` DECIMAL(10,2) NULL COMMENT '长(cm)',
|
||
`WidthCm` DECIMAL(10,2) NULL COMMENT '宽(cm)',
|
||
`HeightCm` DECIMAL(10,2) NULL COMMENT '高(cm)',
|
||
`Remark` VARCHAR(512) NULL COMMENT '备注',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
UNIQUE KEY `uk_c_sku_code` (`CustomerId`, `SkuCode`),
|
||
KEY `idx_c_sku_customer` (`CustomerId`, `IsDeleted`)
|
||
) COMMENT='仓储-SKU主数据';
|
||
|
||
CREATE TABLE IF NOT EXISTS `C_bin_location` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`WarehouseId` INT NOT NULL COMMENT '仓库ID → t_warehouse_address.Id',
|
||
`BinCode` VARCHAR(32) NOT NULL COMMENT '库位编码',
|
||
`BinName` VARCHAR(64) NULL COMMENT '库位展示名',
|
||
`ZoneCode` VARCHAR(32) NULL COMMENT '库区编码',
|
||
`IsEnabled` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用:0-否,1-是',
|
||
`Remark` VARCHAR(512) NULL COMMENT '备注',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
UNIQUE KEY `uk_c_bin_wh_code` (`WarehouseId`, `BinCode`),
|
||
KEY `idx_c_bin_warehouse` (`WarehouseId`, `IsEnabled`)
|
||
) COMMENT='仓储-库位主数据';
|
||
|
||
CREATE TABLE IF NOT EXISTS `C_inventory` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`CustomerId` INT NOT NULL COMMENT '客户ID',
|
||
`WarehouseId` INT NOT NULL COMMENT '仓库ID',
|
||
`SkuId` INT NOT NULL COMMENT 'SKU ID → C_sku.Id',
|
||
`BinLocationId` INT NOT NULL COMMENT '库位ID → C_bin_location.Id',
|
||
`Qty` INT NOT NULL DEFAULT 0 COMMENT '可用库存数量',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
UNIQUE KEY `uk_c_inventory` (`CustomerId`, `WarehouseId`, `SkuId`, `BinLocationId`),
|
||
KEY `idx_c_inv_sku_wh` (`CustomerId`, `SkuId`, `WarehouseId`)
|
||
) COMMENT='仓储-库存余额(按库位)';
|
||
|
||
CREATE TABLE IF NOT EXISTS `C_inbound_notice` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`CustomerId` INT NOT NULL COMMENT '客户ID',
|
||
`WarehouseId` INT NOT NULL COMMENT '仓库ID',
|
||
`NoticeNo` VARCHAR(32) NOT NULL COMMENT '入库单号 IN+雪花',
|
||
`MarkReference` VARCHAR(64) NULL COMMENT '唛头参考号',
|
||
`InboundType` VARCHAR(16) NOT NULL DEFAULT 'normal' COMMENT 'normal/return',
|
||
`ReceiptStatus` VARCHAR(16) NOT NULL DEFAULT 'forecasted' COMMENT 'forecasted/received/completed',
|
||
`ExpectedArrivalTime` DATETIME NULL COMMENT '预计到货时间',
|
||
`ActualArrivalTime` DATETIME NULL COMMENT '实际到货时间',
|
||
`Remark` VARCHAR(512) NULL COMMENT '备注',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
UNIQUE KEY `uk_c_inbound_notice_no` (`NoticeNo`),
|
||
KEY `idx_c_inbound_customer_status` (`CustomerId`, `ReceiptStatus`, `CreateTime`)
|
||
) COMMENT='仓储-入库预报主表';
|
||
|
||
CREATE TABLE IF NOT EXISTS `C_inbound_box` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`InboundNoticeId` INT NOT NULL COMMENT '入库预报ID → C_inbound_notice.Id',
|
||
`BoxSeqNo` VARCHAR(16) NOT NULL COMMENT '箱序号',
|
||
`MarkBoxNo` VARCHAR(64) NULL COMMENT '箱唛号/箱号',
|
||
`WeightG` DECIMAL(10,2) NULL COMMENT '箱重(g)',
|
||
`LengthCm` DECIMAL(10,2) NULL COMMENT '长(cm)',
|
||
`WidthCm` DECIMAL(10,2) NULL COMMENT '宽(cm)',
|
||
`HeightCm` DECIMAL(10,2) NULL COMMENT '高(cm)',
|
||
`IsReceived` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已收货:0-否,1-是',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
KEY `idx_c_inbound_box_notice` (`InboundNoticeId`, `IsDeleted`)
|
||
) COMMENT='仓储-入库预报箱';
|
||
|
||
CREATE TABLE IF NOT EXISTS `C_inbound_box_line` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`InboundBoxId` INT NOT NULL COMMENT '入库箱ID → C_inbound_box.Id',
|
||
`SkuId` INT NOT NULL COMMENT 'SKU ID → C_sku.Id',
|
||
`SkuCode` VARCHAR(64) NOT NULL COMMENT '冗余SKU编码',
|
||
`PlannedQty` INT NOT NULL DEFAULT 0 COMMENT '计划入库数量',
|
||
`ReceivedQty` INT NULL COMMENT '实收数量',
|
||
`BinLocationId` INT NULL COMMENT '上架库位ID → C_bin_location.Id',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
KEY `idx_c_inbound_box_line_box` (`InboundBoxId`, `IsDeleted`),
|
||
KEY `idx_c_inbound_box_line_sku` (`SkuId`)
|
||
) COMMENT='仓储-入库箱内SKU行';
|
||
|
||
CREATE TABLE IF NOT EXISTS `C_parcel` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`CustomerId` INT NOT NULL COMMENT '客户ID',
|
||
`WarehouseId` INT NOT NULL COMMENT '仓库ID',
|
||
`TrackingNo` VARCHAR(64) NOT NULL COMMENT '快递单号',
|
||
`CarrierName` VARCHAR(64) NULL COMMENT '快递公司',
|
||
`LifecycleStatus` VARCHAR(16) NOT NULL DEFAULT 'inTransit' COMMENT 'inTransit/arrived/stored',
|
||
`ArrivalTime` DATETIME NULL COMMENT '到仓时间',
|
||
`Remark` VARCHAR(512) NULL COMMENT '备注',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
UNIQUE KEY `uk_c_parcel_tracking` (`CustomerId`, `TrackingNo`, `WarehouseId`),
|
||
KEY `idx_c_parcel_status` (`CustomerId`, `LifecycleStatus`)
|
||
) COMMENT='仓储-客户包裹';
|
||
|
||
CREATE TABLE IF NOT EXISTS `C_parcel_item` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`ParcelId` INT NOT NULL COMMENT '包裹ID → C_parcel.Id',
|
||
`ProductName` VARCHAR(512) NULL COMMENT '商品名称',
|
||
`Quantity` INT NOT NULL DEFAULT 0 COMMENT '数量',
|
||
`SkuId` INT NULL COMMENT '库内SKU ID → C_sku.Id',
|
||
`SkuCode` VARCHAR(64) NULL COMMENT '冗余SKU编码',
|
||
`BinLocationId` INT NULL COMMENT '上架库位ID',
|
||
`Remark` VARCHAR(512) NULL COMMENT '备注',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
KEY `idx_c_parcel_item_parcel` (`ParcelId`, `IsDeleted`)
|
||
) COMMENT='仓储-包裹明细';
|
||
|
||
CREATE TABLE IF NOT EXISTS `C_sku_platform_map` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`CustomerId` INT NOT NULL COMMENT '客户ID',
|
||
`StoreId` INT NOT NULL COMMENT '店铺ID → t_sales_store.Id',
|
||
`PlatformSku` VARCHAR(128) NOT NULL COMMENT '平台listing SKU',
|
||
`SkuId` INT NOT NULL COMMENT '库内SKU ID → C_sku.Id',
|
||
`SkuCode` VARCHAR(64) NOT NULL COMMENT '冗余SKU编码',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
UNIQUE KEY `uk_c_sku_map` (`StoreId`, `PlatformSku`),
|
||
KEY `idx_c_sku_map_customer` (`CustomerId`, `SkuId`)
|
||
) COMMENT='仓储-平台SKU映射';
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 订单域 — 店铺(t_sales_*,接口阶段使用)
|
||
-- ---------------------------------------------------------------------------
|
||
|
||
CREATE TABLE IF NOT EXISTS `t_sales_store` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`CustomerId` INT NOT NULL COMMENT '客户ID',
|
||
`PlatformCode` VARCHAR(32) NOT NULL COMMENT 'lazada/shopee/tiktok/temu/manual',
|
||
`StoreNickname` VARCHAR(128) NOT NULL COMMENT '店铺昵称',
|
||
`PlatformStoreId` VARCHAR(64) NULL COMMENT '平台侧店铺ID',
|
||
`PlatformAccount` VARCHAR(128) NULL COMMENT '平台账号',
|
||
`SiteCountry` VARCHAR(8) NULL COMMENT '开户站点国家码',
|
||
`SellerId` VARCHAR(64) NULL COMMENT '平台卖家ID',
|
||
`AuthStatus` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT 'active/expired/revoked',
|
||
`AuthTime` DATETIME NULL COMMENT '授权时间',
|
||
`TokenExpireTime` DATETIME NULL COMMENT 'AccessToken过期时间',
|
||
`RefreshExpireTime` DATETIME NULL COMMENT 'RefreshToken过期时间',
|
||
`AccessToken` VARCHAR(2048) NULL COMMENT 'AccessToken(加密存储)',
|
||
`RefreshToken` VARCHAR(2048) NULL COMMENT 'RefreshToken(加密存储)',
|
||
`TokenExtraJson` JSON NULL COMMENT '平台扩展Token信息',
|
||
`IsAutoFulfill` TINYINT NOT NULL DEFAULT 0 COMMENT '是否自动发货:0-否,1-是',
|
||
`Remark` VARCHAR(512) NULL COMMENT '备注',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
KEY `idx_sales_store_customer` (`CustomerId`, `IsDeleted`),
|
||
KEY `idx_sales_store_platform` (`CustomerId`, `PlatformCode`, `AuthStatus`)
|
||
) COMMENT='销售店铺授权';
|
||
|
||
CREATE TABLE IF NOT EXISTS `t_sales_store_order` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`CustomerId` INT NOT NULL COMMENT '客户ID',
|
||
`StoreId` INT NOT NULL COMMENT '店铺ID → t_sales_store.Id',
|
||
`PlatformCode` VARCHAR(32) NOT NULL COMMENT '平台编码',
|
||
`PlatformOrderNo` VARCHAR(64) NOT NULL COMMENT '平台订单号',
|
||
`OrderCountry` VARCHAR(8) NULL COMMENT '订单国家',
|
||
`ItemCount` INT NULL COMMENT '商品行数',
|
||
`TotalAmount` DECIMAL(18,4) NULL COMMENT '订单总额',
|
||
`Currency` VARCHAR(8) NULL COMMENT '币种',
|
||
`PlatformOrderTime` DATETIME NULL COMMENT '平台下单时间',
|
||
`FulfillStatus` VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT '履约状态',
|
||
`PlatformStatus` VARCHAR(64) NULL COMMENT '平台原始状态码',
|
||
`PlatformStatusLabel` VARCHAR(128) NULL COMMENT '平台状态展示文案',
|
||
`ShippingLabelNo` VARCHAR(64) NULL COMMENT '面单号',
|
||
`ShippingLabelUrl` VARCHAR(512) NULL COMMENT '面单URL',
|
||
`IsMultiLabel` TINYINT NOT NULL DEFAULT 0 COMMENT '是否多面单',
|
||
`CustomTags` VARCHAR(512) NULL COMMENT '自定义标签',
|
||
`IsSuspended` TINYINT NOT NULL DEFAULT 0 COMMENT '是否搁置',
|
||
`WarehouseId` INT NULL COMMENT '发货仓库ID',
|
||
`LinkedOrderId` INT NULL COMMENT '关联小包订单 t_order.Id',
|
||
`LastSyncTime` DATETIME NULL COMMENT '最近同步时间',
|
||
`PlatformExtraJson` JSON NULL COMMENT '平台扩展字段',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
UNIQUE KEY `uk_store_order_no` (`StoreId`, `PlatformOrderNo`),
|
||
KEY `idx_store_order_customer_status` (`CustomerId`, `FulfillStatus`, `PlatformOrderTime`)
|
||
) COMMENT='销售店铺订单';
|
||
|
||
CREATE TABLE IF NOT EXISTS `t_sales_store_order_line` (
|
||
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`StoreOrderId` INT NOT NULL COMMENT '店铺订单ID → t_sales_store_order.Id',
|
||
`PlatformLineId` VARCHAR(64) NULL COMMENT '平台行ID',
|
||
`PlatformSku` VARCHAR(128) NULL COMMENT '平台SKU',
|
||
`ProductName` VARCHAR(512) NULL COMMENT '商品名称',
|
||
`ProductImageUrl` VARCHAR(512) NULL COMMENT '商品图片',
|
||
`VariantText` VARCHAR(256) NULL COMMENT '规格属性',
|
||
`UnitPrice` DECIMAL(18,4) NULL COMMENT '单价',
|
||
`Quantity` INT NOT NULL DEFAULT 0 COMMENT '数量',
|
||
`Currency` VARCHAR(8) NULL COMMENT '币种',
|
||
`IsShipExcluded` TINYINT NOT NULL DEFAULT 0 COMMENT '是否拒绝发货',
|
||
`MappedSkuId` INT NULL COMMENT '映射库内SKU → C_sku.Id',
|
||
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
|
||
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳',
|
||
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
|
||
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`UpdateUserId` INT NULL COMMENT '更新人',
|
||
`UpdateTime` DATETIME NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`Id`),
|
||
KEY `idx_store_order_line_order` (`StoreOrderId`, `IsDeleted`)
|
||
) COMMENT='销售店铺订单明细';
|