-- 交易订单管理（主表 + 采购明细子表）
SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS `biz_trade_order` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `order_no` varchar(11) NOT NULL COMMENT '订单编号YYYYMMDD+3位序号',
  `supplier_id` bigint(20) NOT NULL COMMENT '供应商ID',
  `distributor_id` bigint(20) NOT NULL COMMENT '承销商ID',
  `total_heads` int(11) NOT NULL COMMENT '交易总头数',
  `total_amount` decimal(12,2) NOT NULL COMMENT '交易总金额元',
  `order_status` char(1) NOT NULL DEFAULT '0' COMMENT '0待支付 1已完成',
  `pay_voucher_url` varchar(512) DEFAULT NULL COMMENT '支付凭证URL',
  `pay_voucher_path` varchar(512) DEFAULT NULL COMMENT '支付凭证路径',
  `finish_time` datetime DEFAULT NULL COMMENT '订单完成时间',
  `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '0存在 2删除',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '订单创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_order_no` (`order_no`),
  KEY `idx_supplier` (`supplier_id`),
  KEY `idx_distributor` (`distributor_id`),
  KEY `idx_order_status` (`order_status`),
  KEY `idx_create_time` (`create_time`),
  KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易订单';

CREATE TABLE IF NOT EXISTS `biz_trade_order_line` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `order_id` bigint(20) NOT NULL COMMENT '交易订单主表ID',
  `supplier_id` bigint(20) NOT NULL COMMENT '供应商ID冗余',
  `ear_tag` varchar(32) NOT NULL COMMENT '耳标号',
  `weight` decimal(12,2) NOT NULL COMMENT '重量kg',
  `amount` decimal(12,2) NOT NULL COMMENT '金额元',
  `grade_code` char(1) DEFAULT NULL COMMENT '品质等级编码，保存时按biz_grade_weight_config匹配',
  `grade_name` varchar(32) DEFAULT NULL COMMENT '品质等级名称快照，与grade_code同时写入',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_order_ear` (`order_id`,`ear_tag`),
  KEY `idx_order_id` (`order_id`),
  KEY `idx_supplier` (`supplier_id`),
  KEY `idx_ear_tag` (`ear_tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易订单采购明细';

-- 已建表时按需执行（新环境无需执行）
-- ALTER TABLE `biz_trade_order_line`
--   ADD COLUMN `grade_code` char(1) DEFAULT NULL COMMENT '品质等级编码，保存时按biz_grade_weight_config匹配' AFTER `amount`,
--   ADD COLUMN `grade_name` varchar(32) DEFAULT NULL COMMENT '品质等级名称快照，与grade_code同时写入' AFTER `grade_code`;

-- 已建表时按需执行：历史明细按重量回填等级（需已执行 sql/biz_grade_weight_config.sql）
-- UPDATE biz_trade_order_line l
--   INNER JOIN biz_grade_weight_config g ON l.weight >= g.min_weight AND l.weight <= g.max_weight
-- SET l.grade_code = g.grade_code, l.grade_name = g.grade_name
-- WHERE l.grade_code IS NULL;

-- 已建表时按需执行（新环境无需执行）
-- ALTER TABLE `biz_trade_order_line`
--   ADD COLUMN `supplier_id` bigint(20) NOT NULL COMMENT '供应商ID冗余' AFTER `order_id`,
--   ADD KEY `idx_supplier` (`supplier_id`);
-- UPDATE biz_trade_order_line l
--   INNER JOIN biz_trade_order o ON o.id = l.order_id SET l.supplier_id = o.supplier_id;
