admin/sql/migrate_warehouse_module.sql
zzh fb61fbb072 修复仓储/店铺列表 ConcurrencyStamp 缺失与可空客户ID的 SQL 翻译错误。
补迁移脚本为 C_* 与 t_sales_* 表增加 ConcurrencyStamp;列表查询改用 hasCustomerFilter 模式避免 ORM 生成非法 SQL。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-11 16:48:05 +08:00

276 lines
15 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 仓储模块 + 店铺订单表结构(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='销售店铺订单明细';