migration_20260414_order_client_supplier_settlement.sql 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. -- 订单客户/商家结算模型升级
  2. -- 1) 订单增加客户/商家结算状态字段
  3. -- 2) 新增客户结算主表/明细表及历史表
  4. -- 3) 新增供应商结算主表/明细表及历史表
  5. START TRANSACTION;
  6. -- =========================
  7. -- 1. 订单表扩展
  8. -- =========================
  9. ALTER TABLE biz_order
  10. ADD COLUMN client_settlement_status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '客户结算状态: pending/settled' AFTER payment_method,
  11. ADD COLUMN supplier_settlement_status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '供应商结算状态: pending/settled' AFTER client_settlement_status,
  12. ADD COLUMN client_settlement_at DATETIME NULL COMMENT '客户结算时间' AFTER supplier_settlement_status,
  13. ADD COLUMN supplier_settlement_at DATETIME NULL COMMENT '供应商结算时间' AFTER client_settlement_at;
  14. ALTER TABLE biz_order_his
  15. ADD COLUMN client_settlement_status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '客户结算状态: pending/settled' AFTER payment_method,
  16. ADD COLUMN supplier_settlement_status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '供应商结算状态: pending/settled' AFTER client_settlement_status,
  17. ADD COLUMN client_settlement_at DATETIME NULL COMMENT '客户结算时间' AFTER supplier_settlement_status,
  18. ADD COLUMN supplier_settlement_at DATETIME NULL COMMENT '供应商结算时间' AFTER client_settlement_at;
  19. CREATE INDEX idx_biz_order_client_settlement ON biz_order (is_del, client_settlement_status, payment_method, create_at);
  20. CREATE INDEX idx_biz_order_supplier_settlement ON biz_order (is_del, supplier_settlement_status, create_at);
  21. -- 线上支付订单默认客户已结算
  22. UPDATE biz_order
  23. SET client_settlement_status = 'settled',
  24. client_settlement_at = IFNULL(payment_time, update_at),
  25. update_at = NOW()
  26. WHERE is_del = 0
  27. AND (payment_method = 'online' OR payment_method = 'wechat')
  28. AND client_settlement_status <> 'settled';
  29. -- =========================
  30. -- 2. 客户结算表
  31. -- =========================
  32. CREATE TABLE IF NOT EXISTS ord_client_settlement (
  33. id VARCHAR(32) PRIMARY KEY COMMENT '主键ID',
  34. settlement_no VARCHAR(50) NOT NULL UNIQUE COMMENT '结算单号',
  35. client_id VARCHAR(32) NOT NULL COMMENT '客户ID',
  36. client_name VARCHAR(100) NULL COMMENT '客户名称快照',
  37. order_count INT NOT NULL DEFAULT 0 COMMENT '订单数量',
  38. total_amount DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '结算总金额',
  39. voucher_urls TEXT NULL COMMENT '结算凭证URL(JSON数组)',
  40. remark VARCHAR(500) NULL COMMENT '结算备注',
  41. settlement_at DATETIME NOT NULL COMMENT '结算时间',
  42. status VARCHAR(20) NOT NULL DEFAULT 'done' COMMENT '结算单状态',
  43. is_del TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除',
  44. create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  45. create_by VARCHAR(32) NULL COMMENT '创建人ID',
  46. create_name VARCHAR(100) NULL COMMENT '创建人姓名',
  47. update_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  48. update_by VARCHAR(32) NULL COMMENT '修改人ID',
  49. KEY idx_ocs_client (client_id),
  50. KEY idx_ocs_settlement_at (settlement_at),
  51. KEY idx_ocs_create_at (create_at),
  52. KEY idx_ocs_is_del (is_del)
  53. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户结算主表';
  54. CREATE TABLE IF NOT EXISTS ord_client_settlement_item (
  55. id VARCHAR(32) PRIMARY KEY COMMENT '主键ID',
  56. settlement_id VARCHAR(32) NOT NULL COMMENT '结算主表ID',
  57. order_id VARCHAR(32) NOT NULL COMMENT '订单ID',
  58. order_no VARCHAR(50) NOT NULL COMMENT '订单号',
  59. client_id VARCHAR(32) NOT NULL COMMENT '客户ID',
  60. order_amount DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '订单结算金额',
  61. is_del TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除',
  62. create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  63. create_by VARCHAR(32) NULL COMMENT '创建人ID',
  64. create_name VARCHAR(100) NULL COMMENT '创建人姓名',
  65. update_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  66. update_by VARCHAR(32) NULL COMMENT '修改人ID',
  67. KEY idx_ocsi_settlement_id (settlement_id),
  68. KEY idx_ocsi_order_id (order_id),
  69. KEY idx_ocsi_client_id (client_id),
  70. KEY idx_ocsi_is_del (is_del)
  71. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户结算明细表';
  72. CREATE TABLE IF NOT EXISTS ord_client_settlement_his (
  73. id VARCHAR(32) NOT NULL COMMENT '主键ID',
  74. settlement_no VARCHAR(50) NOT NULL COMMENT '结算单号',
  75. client_id VARCHAR(32) NOT NULL COMMENT '客户ID',
  76. client_name VARCHAR(100) NULL COMMENT '客户名称快照',
  77. order_count INT NOT NULL DEFAULT 0 COMMENT '订单数量',
  78. total_amount DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '结算总金额',
  79. voucher_urls TEXT NULL COMMENT '结算凭证URL(JSON数组)',
  80. remark VARCHAR(500) NULL COMMENT '结算备注',
  81. settlement_at DATETIME NOT NULL COMMENT '结算时间',
  82. status VARCHAR(20) NOT NULL DEFAULT 'done' COMMENT '结算单状态',
  83. create_at DATETIME NOT NULL COMMENT '创建时间',
  84. create_by VARCHAR(32) NULL COMMENT '创建人ID',
  85. create_name VARCHAR(100) NULL COMMENT '创建人姓名',
  86. update_at DATETIME NULL COMMENT '修改时间',
  87. update_by VARCHAR(32) NULL COMMENT '修改人ID',
  88. his_create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '历史记录创建时间'
  89. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户结算主表历史';
  90. CREATE TABLE IF NOT EXISTS ord_client_settlement_item_his (
  91. id VARCHAR(32) NOT NULL COMMENT '主键ID',
  92. settlement_id VARCHAR(32) NOT NULL COMMENT '结算主表ID',
  93. order_id VARCHAR(32) NOT NULL COMMENT '订单ID',
  94. order_no VARCHAR(50) NOT NULL COMMENT '订单号',
  95. client_id VARCHAR(32) NOT NULL COMMENT '客户ID',
  96. order_amount DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '订单结算金额',
  97. create_at DATETIME NOT NULL COMMENT '创建时间',
  98. create_by VARCHAR(32) NULL COMMENT '创建人ID',
  99. create_name VARCHAR(100) NULL COMMENT '创建人姓名',
  100. update_at DATETIME NULL COMMENT '修改时间',
  101. update_by VARCHAR(32) NULL COMMENT '修改人ID',
  102. his_create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '历史记录创建时间'
  103. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户结算明细历史表';
  104. -- =========================
  105. -- 3. 供应商结算表
  106. -- =========================
  107. CREATE TABLE IF NOT EXISTS ord_supplier_settlement (
  108. id VARCHAR(32) PRIMARY KEY COMMENT '主键ID',
  109. settlement_no VARCHAR(50) NOT NULL UNIQUE COMMENT '结算单号',
  110. supplier_id VARCHAR(32) NOT NULL COMMENT '供应商ID',
  111. supplier_name VARCHAR(100) NULL COMMENT '供应商名称快照',
  112. order_count INT NOT NULL DEFAULT 0 COMMENT '订单数量',
  113. total_amount DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '结算总金额',
  114. voucher_urls TEXT NULL COMMENT '结算凭证URL(JSON数组)',
  115. remark VARCHAR(500) NULL COMMENT '结算备注',
  116. settlement_at DATETIME NOT NULL COMMENT '结算时间',
  117. status VARCHAR(20) NOT NULL DEFAULT 'done' COMMENT '结算单状态',
  118. is_del TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除',
  119. create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  120. create_by VARCHAR(32) NULL COMMENT '创建人ID',
  121. create_name VARCHAR(100) NULL COMMENT '创建人姓名',
  122. update_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  123. update_by VARCHAR(32) NULL COMMENT '修改人ID',
  124. KEY idx_oss_supplier (supplier_id),
  125. KEY idx_oss_settlement_at (settlement_at),
  126. KEY idx_oss_create_at (create_at),
  127. KEY idx_oss_is_del (is_del)
  128. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商结算主表';
  129. CREATE TABLE IF NOT EXISTS ord_supplier_settlement_item (
  130. id VARCHAR(32) PRIMARY KEY COMMENT '主键ID',
  131. settlement_id VARCHAR(32) NOT NULL COMMENT '结算主表ID',
  132. order_id VARCHAR(32) NOT NULL COMMENT '订单ID',
  133. order_no VARCHAR(50) NOT NULL COMMENT '订单号',
  134. supplier_id VARCHAR(32) NOT NULL COMMENT '供应商ID',
  135. order_amount DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '订单结算金额',
  136. is_del TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除',
  137. create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  138. create_by VARCHAR(32) NULL COMMENT '创建人ID',
  139. create_name VARCHAR(100) NULL COMMENT '创建人姓名',
  140. update_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  141. update_by VARCHAR(32) NULL COMMENT '修改人ID',
  142. KEY idx_ossi_settlement_id (settlement_id),
  143. KEY idx_ossi_order_id (order_id),
  144. KEY idx_ossi_supplier_id (supplier_id),
  145. KEY idx_ossi_is_del (is_del)
  146. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商结算明细表';
  147. CREATE TABLE IF NOT EXISTS ord_supplier_settlement_his (
  148. id VARCHAR(32) NOT NULL COMMENT '主键ID',
  149. settlement_no VARCHAR(50) NOT NULL COMMENT '结算单号',
  150. supplier_id VARCHAR(32) NOT NULL COMMENT '供应商ID',
  151. supplier_name VARCHAR(100) NULL COMMENT '供应商名称快照',
  152. order_count INT NOT NULL DEFAULT 0 COMMENT '订单数量',
  153. total_amount DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '结算总金额',
  154. voucher_urls TEXT NULL COMMENT '结算凭证URL(JSON数组)',
  155. remark VARCHAR(500) NULL COMMENT '结算备注',
  156. settlement_at DATETIME NOT NULL COMMENT '结算时间',
  157. status VARCHAR(20) NOT NULL DEFAULT 'done' COMMENT '结算单状态',
  158. create_at DATETIME NOT NULL COMMENT '创建时间',
  159. create_by VARCHAR(32) NULL COMMENT '创建人ID',
  160. create_name VARCHAR(100) NULL COMMENT '创建人姓名',
  161. update_at DATETIME NULL COMMENT '修改时间',
  162. update_by VARCHAR(32) NULL COMMENT '修改人ID',
  163. his_create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '历史记录创建时间'
  164. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商结算主表历史';
  165. CREATE TABLE IF NOT EXISTS ord_supplier_settlement_item_his (
  166. id VARCHAR(32) NOT NULL COMMENT '主键ID',
  167. settlement_id VARCHAR(32) NOT NULL COMMENT '结算主表ID',
  168. order_id VARCHAR(32) NOT NULL COMMENT '订单ID',
  169. order_no VARCHAR(50) NOT NULL COMMENT '订单号',
  170. supplier_id VARCHAR(32) NOT NULL COMMENT '供应商ID',
  171. order_amount DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '订单结算金额',
  172. create_at DATETIME NOT NULL COMMENT '创建时间',
  173. create_by VARCHAR(32) NULL COMMENT '创建人ID',
  174. create_name VARCHAR(100) NULL COMMENT '创建人姓名',
  175. update_at DATETIME NULL COMMENT '修改时间',
  176. update_by VARCHAR(32) NULL COMMENT '修改人ID',
  177. his_create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '历史记录创建时间'
  178. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商结算明细历史表';
  179. COMMIT;