-- 基础实体表结构 (BaseDO) 不单独建表，字段会被继承到其他表中

-- 交易订单表 (trade_order)
CREATE TABLE `tz_trade_order`
(
    `id`                      bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单编号，主键自增',
    `order_num`               varchar(64)  NOT NULL COMMENT '订单流水号',
    `order_type`              tinyint(4) NOT NULL COMMENT '订单类型 (枚举 TradeOrderTypeEnum)',
    `order_terminal`          tinyint(4) NOT NULL COMMENT '订单来源 (枚举 TerminalEnum)',
    `order_status`            tinyint(4) NOT NULL COMMENT '订单状态 (枚举 TradeOrderStatusEnum)',
    `user_id`                 bigint(20) NOT NULL COMMENT '用户编号',
    `user_ip`                 varchar(64)  DEFAULT NULL COMMENT '用户IP',
    `user_remark`             varchar(512) DEFAULT NULL COMMENT '用户备注',
    `finish_time`             datetime     DEFAULT NULL COMMENT '订单完成时间',
    `cancel_time`             datetime     DEFAULT NULL COMMENT '订单取消时间',
    `cancel_type`             tinyint(4) DEFAULT NULL COMMENT '取消类型 (枚举 TradeOrderCancelTypeEnum)',
    `merchant_remark`         varchar(512) DEFAULT NULL COMMENT '商家备注',
    `comment_status`          tinyint(1) DEFAULT NULL COMMENT '是否评价 (true-已评价, false-未评价)',
    `total_price`             int(11) NOT NULL COMMENT '商品原价，单位：分',
    `discount_price`          int(11) NOT NULL COMMENT '优惠金额，单位：分',
    `delivery_price`          int(11) NOT NULL COMMENT '运费金额，单位：分',
    `adjust_price`            int(11) NOT NULL COMMENT '订单调价，单位：分',
    `pay_price`               int(11) NOT NULL COMMENT '应付金额（总），单位：分',
    `pay_order_id`            bigint(20) DEFAULT NULL COMMENT '支付订单编号',
    `pay_status`              tinyint(1) NOT NULL COMMENT '是否已支付 (true-已支付, false-未支付)',
    `pay_time`                datetime     DEFAULT NULL COMMENT '付款时间',
    `pay_channel_code`        varchar(64)  DEFAULT NULL COMMENT '支付渠道',
    `delivery_type`           tinyint(4) NOT NULL COMMENT '配送方式 (枚举 DeliveryTypeEnum)',
    `logistics_id`            bigint(20) NOT NULL DEFAULT 0 COMMENT '发货物流公司编号',
    `logistics_no`            varchar(64)  DEFAULT '' COMMENT '发货物流单号',
    `delivery_time`           datetime     DEFAULT NULL COMMENT '发货时间',
    `receive_time`            datetime     DEFAULT NULL COMMENT '收货时间',
    `receiver_name`           varchar(64)  NOT NULL COMMENT '收件人名称',
    `receiver_mobile`         varchar(20)  NOT NULL COMMENT '收件人手机',
    `receiver_area_id`        int(11) NOT NULL COMMENT '收件人地区编号',
    `receiver_detail_address` varchar(512) NOT NULL COMMENT '收件人详细地址',
    `pick_up_store_id`        bigint(20) DEFAULT NULL COMMENT '自提门店编号',
    `pick_up_verify_code`     varchar(64)  DEFAULT NULL COMMENT '自提核销码',
    `refund_status`           tinyint(4) NOT NULL COMMENT '退款状态 (枚举 TradeOrderRefundStatusEnum)',
    `refund_price`            int(11) NOT NULL COMMENT '退款金额，单位：分',
    `after_sale_id`           bigint(20) DEFAULT NULL COMMENT '售后单编号',
    `after_sale_status`       tinyint(4) NOT NULL COMMENT '售后状态 (枚举 TradeOrderItemAfterSaleStatusEnum)',
    `create_time`             datetime     NOT NULL COMMENT '创建时间',
    `update_time`             datetime     NOT NULL COMMENT '最后更新时间',
    `creator`                 varchar(64)  NOT NULL COMMENT '创建者',
    `updater`                 varchar(64)  NOT NULL COMMENT '更新者',
    `deleted`                 tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_order_num` (`order_num`),
    KEY                       `idx_user_id` (`user_id`),
    KEY                       `idx_status` (`order_status`),
    KEY                       `idx_pay_status` (`pay_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易订单表';

-- 交易订单项表 (trade_order_item)
CREATE TABLE `tz_trade_order_item`
(
    `id`             bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
    `user_id`        bigint(20) NOT NULL COMMENT '用户编号',
    `order_id`       bigint(20) NOT NULL COMMENT '订单编号',
    `cart_id`        bigint(20) DEFAULT NULL COMMENT '购物车项编号',
    `prod_id`        bigint(20) NOT NULL COMMENT '商品 SPU 编号',
    `prod_name`      varchar(256) NOT NULL COMMENT '商品 SPU 名称',
    `sku_id`         bigint(20) NOT NULL COMMENT '商品 SKU 编号',
    `properties`     json DEFAULT NULL COMMENT '属性数组',
    `pic_url`        varchar(512) NOT NULL COMMENT '商品图片',
    `count`          int(11) NOT NULL COMMENT '购买数量',
    `price`          int(11) NOT NULL COMMENT '商品原价（单），单位：分',
    `discount_price` int(11) NOT NULL COMMENT '优惠金额（总），单位：分',
    `delivery_price` int(11) NOT NULL COMMENT '运费金额（总），单位：分',
    `adjust_price`   int(11) NOT NULL COMMENT '订单调价（总），单位：分',
    `pay_price`      int(11) NOT NULL COMMENT '应付金额（总），单位：分',
    `serve_ext_info` json DEFAULT NULL COMMENT '扩展服务信息，存储额外的服务相关数据',
    `price_ext_info` json DEFAULT NULL COMMENT '附加费信息',
    `create_time`    datetime     NOT NULL COMMENT '创建时间',
    `update_time`    datetime     NOT NULL COMMENT '最后更新时间',
    `creator`        varchar(64)  NOT NULL COMMENT '创建者',
    `updater`        varchar(64)  NOT NULL COMMENT '更新者',
    `deleted`        tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY              `idx_order_id` (`order_id`),
    KEY              `idx_sku_id` (`sku_id`),
    KEY              `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易订单项表';

-- 订单日志表 (trade_order_log)
CREATE TABLE `tz_trade_order_log`
(
    `id`            bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
    `user_id`       bigint(20) NOT NULL COMMENT '用户编号',
    `user_type`     tinyint(4) NOT NULL COMMENT '用户类型 (枚举 UserTypeEnum)',
    `order_id`      bigint(20) NOT NULL COMMENT '订单号',
    `before_status` int(11) DEFAULT NULL COMMENT '操作前状态',
    `after_status`  int(11) DEFAULT NULL COMMENT '操作后状态',
    `operate_type`  tinyint(4) NOT NULL COMMENT '操作类型 (枚举 TradeOrderOperateTypeEnum)',
    `content`       varchar(1024) NOT NULL COMMENT '订单日志信息',
    `create_time`   datetime      NOT NULL COMMENT '创建时间',
    `update_time`   datetime      NOT NULL COMMENT '最后更新时间',
    `creator`       varchar(64)   NOT NULL COMMENT '创建者',
    `updater`       varchar(64)   NOT NULL COMMENT '更新者',
    `deleted`       tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY             `idx_order_id` (`order_id`),
    KEY             `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单日志表';

-- 售后订单表 (tz_trade_after_sale)
CREATE TABLE `tz_trade_after_sale` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '售后编号，主键自增',
  `no` varchar(64) NOT NULL COMMENT '售后单号',
  `status` tinyint(4) NOT NULL COMMENT '退款状态 (枚举 AfterSaleStatusEnum)',
  `way` tinyint(4) NOT NULL COMMENT '售后方式 (枚举 AfterSaleWayEnum)',
  `type` tinyint(4) NOT NULL COMMENT '售后类型 (枚举 AfterSaleTypeEnum)',
  `user_id` bigint(20) NOT NULL COMMENT '用户编号',
  `apply_reason` varchar(256) NOT NULL COMMENT '申请原因',
  `apply_description` varchar(512) DEFAULT NULL COMMENT '补充描述',
  `apply_pic_urls` json DEFAULT NULL COMMENT '补充凭证图片',
  `order_id` bigint(20) NOT NULL COMMENT '交易订单编号',
  `order_no` varchar(64) NOT NULL COMMENT '订单流水号',
  `order_item_id` bigint(20) NOT NULL COMMENT '交易订单项编号',
  `prod_id` bigint(20) NOT NULL COMMENT '商品 SPU 编号',
  `prod_name` varchar(256) NOT NULL COMMENT '商品 SPU 名称',
  `sku_id` bigint(20) NOT NULL COMMENT '商品 SKU 编号',
  `properties` json DEFAULT NULL COMMENT '属性数组',
  `pic_url` varchar(512) DEFAULT NULL COMMENT '商品图片',
  `count` int(11) NOT NULL COMMENT '退货商品数量',
  `audit_time` datetime DEFAULT NULL COMMENT '审批时间',
  `audit_user_id` bigint(20) DEFAULT NULL COMMENT '审批人',
  `audit_reason` varchar(512) DEFAULT NULL COMMENT '审批备注',
  `refund_price` int(11) NOT NULL COMMENT '退款金额，单位：分',
  `pay_refund_id` bigint(20) DEFAULT NULL COMMENT '支付退款编号',
  `refund_time` datetime DEFAULT NULL COMMENT '退款时间',
  `logistics_id` bigint(20) DEFAULT NULL COMMENT '退货物流公司编号',
  `logistics_no` varchar(64) DEFAULT NULL COMMENT '退货物流单号',
  `delivery_time` datetime DEFAULT NULL COMMENT '退货时间',
  `receive_time` datetime DEFAULT NULL COMMENT '收货时间',
  `receive_reason` varchar(512) DEFAULT NULL COMMENT '收货备注',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '最后更新时间',
  `creator` varchar(64) NOT NULL COMMENT '创建者',
  `updater` varchar(64) NOT NULL COMMENT '更新者',
  `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_no` (`no`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_order_id` (`order_id`),
  KEY `idx_order_item_id` (`order_item_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='售后订单表';

-- 交易售后日志表 (tz_trade_after_sale_log)
CREATE TABLE `tz_trade_after_sale_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `user_id` bigint(20) NOT NULL COMMENT '用户编号',
  `user_type` tinyint(4) NOT NULL COMMENT '用户类型 (枚举 UserTypeEnum)',
  `after_sale_id` bigint(20) NOT NULL COMMENT '售后编号',
  `before_status` tinyint(4) DEFAULT NULL COMMENT '操作前状态',
  `after_status` tinyint(4) DEFAULT NULL COMMENT '操作后状态',
  `operate_type` tinyint(4) NOT NULL COMMENT '操作类型 (枚举 AfterSaleOperateTypeEnum)',
  `content` varchar(512) NOT NULL COMMENT '操作明细',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '最后更新时间',
  `creator` varchar(64) NOT NULL COMMENT '创建者',
  `updater` varchar(64) NOT NULL COMMENT '更新者',
  `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_after_sale_id` (`after_sale_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_operate_type` (`operate_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易售后日志表';


-- 快递公司表 (trade_delivery_express)
CREATE TABLE `tz_trade_delivery_express` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号，自增',
  `code` varchar(64) NOT NULL COMMENT '快递公司 code',
  `name` varchar(128) NOT NULL COMMENT '快递公司名称',
  `logo` varchar(512) DEFAULT NULL COMMENT '快递公司 logo',
  `sort` int(11) DEFAULT NULL COMMENT '排序',
  `status` tinyint(4) NOT NULL COMMENT '状态 (枚举 CommonStatusEnum)',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '最后更新时间',
  `creator` varchar(64) NOT NULL COMMENT '创建者',
  `updater` varchar(64) NOT NULL COMMENT '更新者',
  `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='快递公司表';

-- 快递运费模板表 (trade_delivery_express_template)
CREATE TABLE `tz_trade_delivery_express_template` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号，自增',
  `name` varchar(128) NOT NULL COMMENT '模板名称',
  `charge_mode` tinyint(4) NOT NULL COMMENT '配送计费方式 (枚举 DeliveryExpressChargeModeEnum)',
  `sort` int(11) DEFAULT NULL COMMENT '排序',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '最后更新时间',
  `creator` varchar(64) NOT NULL COMMENT '创建者',
  `updater` varchar(64) NOT NULL COMMENT '更新者',
  `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='快递运费模板表';

-- 快递运费模板计费配置表 (trade_delivery_express_template_charge)
CREATE TABLE `tz_trade_delivery_express_template_charge` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号，自增',
  `template_id` bigint(20) NOT NULL COMMENT '配送模板编号',
  `area_ids` varchar(512) NOT NULL COMMENT '配送区域编号列表',
  `charge_mode` tinyint(4) NOT NULL COMMENT '配送计费方式',
  `start_count` double NOT NULL COMMENT '首件数量(件数,重量，或体积)',
  `start_price` int(11) NOT NULL COMMENT '起步价，单位：分',
  `extra_count` double NOT NULL COMMENT '续件数量(件, 重量，或体积)',
  `extra_price` int(11) NOT NULL COMMENT '额外价，单位：分',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '最后更新时间',
  `creator` varchar(64) NOT NULL COMMENT '创建者',
  `updater` varchar(64) NOT NULL COMMENT '更新者',
  `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_template_id` (`template_id`),
  CONSTRAINT `fk_express_template_charge_template_id` FOREIGN KEY (`template_id`) REFERENCES `tz_trade_delivery_express_template` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='快递运费模板计费配置表';

-- 快递运费模板包邮配置表 (trade_delivery_express_template_free)
CREATE TABLE `tz_trade_delivery_express_template_free` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `template_id` bigint(20) NOT NULL COMMENT '配送模板编号',
  `area_ids` varchar(512) NOT NULL COMMENT '配送区域编号列表',
  `free_price` int(11) DEFAULT NULL COMMENT '包邮金额，单位：分',
  `free_count` int(11) DEFAULT NULL COMMENT '包邮件数',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '最后更新时间',
  `creator` varchar(64) NOT NULL COMMENT '创建者',
  `updater` varchar(64) NOT NULL COMMENT '更新者',
  `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_template_id` (`template_id`),
  CONSTRAINT `fk_express_template_free_template_id` FOREIGN KEY (`template_id`) REFERENCES `tz_trade_delivery_express_template` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='快递运费模板包邮配置表';

-- 自提门店表 (trade_delivery_pick_up_store)
CREATE TABLE `tz_trade_delivery_pick_up_store` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(128) NOT NULL COMMENT '门店名称',
  `introduction` varchar(512) DEFAULT NULL COMMENT '门店简介',
  `phone` varchar(20) NOT NULL COMMENT '门店手机',
  `area_id` int(11) NOT NULL COMMENT '区域编号',
  `detail_address` varchar(512) NOT NULL COMMENT '门店详细地址',
  `logo` varchar(512) DEFAULT NULL COMMENT '门店 logo',
  `opening_time` time NOT NULL COMMENT '营业开始时间',
  `closing_time` time NOT NULL COMMENT '营业结束时间',
  `latitude` double DEFAULT NULL COMMENT '纬度',
  `longitude` double DEFAULT NULL COMMENT '经度',
  `verify_user_ids` varchar(512) DEFAULT NULL COMMENT '核销员工用户编号数组',
  `status` tinyint(4) NOT NULL COMMENT '门店状态 (枚举 CommonStatusEnum)',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '最后更新时间',
  `creator` varchar(64) NOT NULL COMMENT '创建者',
  `updater` varchar(64) NOT NULL COMMENT '更新者',
  `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_area_id` (`area_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='自提门店表';


