76 lines
5.0 KiB
SQL
76 lines
5.0 KiB
SQL
-- ============================================================
|
||
-- 小程序(商城)订单接入企油通 · 数据库迁移
|
||
-- 生成:2026-10-10
|
||
-- 执行顺序:本文件排在 qyt_migration_plate_no.sql 之后(最后一个)
|
||
--
|
||
-- 背景:
|
||
-- 企油通整套机器(7.7 下发 / 7.8 轮询 / 7.10 消费回调 / 7.16 退款 / 7.14 发票 /
|
||
-- 司机档案)全部挂在 yoshop_partners_order 上。小程序订单不再另起一套,
|
||
-- 而是在支付成功后为每个油券商品行建一条 partners_order(source='mall'),
|
||
-- 这样上述流程零改动即可复用。
|
||
--
|
||
-- partners_order.source = 'partner' 下单平台(合作商)下单,默认
|
||
-- = 'mall' 小程序用户自己下单
|
||
-- mall 行的 partners_id 固定为 0,不扣合作商余额(用户已真金白银付过款)。
|
||
--
|
||
-- 全部为增量加字段 / 加索引,不改现有字段类型,可安全回滚。
|
||
-- 表前缀默认 yoshop_,如实例前缀不同请自行替换。
|
||
-- ============================================================
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 1. 用户实名信息(分油实名制:上游分油前做二要素认证,车牌仅本地留存)
|
||
-- 小程序注册登录后、下单前必须补全这三项,见 app/api/controller/User.php
|
||
-- ------------------------------------------------------------
|
||
ALTER TABLE `yoshop_user`
|
||
ADD COLUMN `real_name` varchar(50) NOT NULL DEFAULT '' COMMENT '真实姓名(分油实名用)' AFTER `nick_name`,
|
||
ADD COLUMN `id_card` varchar(32) NOT NULL DEFAULT '' COMMENT '身份证号(分油实名用)' AFTER `real_name`,
|
||
ADD COLUMN `plate_no` varchar(20) NOT NULL DEFAULT '' COMMENT '车牌号(本地留存展示,不上送上游)' AFTER `id_card`;
|
||
|
||
-- 按身份证号查人(同一司机可能换手机号注册)
|
||
ALTER TABLE `yoshop_user` ADD INDEX `idx_id_card` (`id_card`);
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 2. partners_order 增加「来源」与商城订单反查字段
|
||
-- 现有数据全部是合作商单,默认值 'partner' 即正确,无需 UPDATE 回填。
|
||
-- ------------------------------------------------------------
|
||
ALTER TABLE `yoshop_partners_order`
|
||
ADD COLUMN `source` varchar(10) NOT NULL DEFAULT 'partner' COMMENT '订单来源 partner=下单平台(合作商) mall=小程序商城' AFTER `partners_id`,
|
||
ADD COLUMN `mall_order_id` int(11) NOT NULL DEFAULT 0 COMMENT 'source=mall 时对应 yoshop_order.order_id' AFTER `source`,
|
||
ADD COLUMN `mall_order_goods_id` int(11) NOT NULL DEFAULT 0 COMMENT 'source=mall 时对应 yoshop_order_goods.order_goods_id' AFTER `mall_order_id`,
|
||
ADD COLUMN `user_id` int(11) NOT NULL DEFAULT 0 COMMENT 'source=mall 时下单用户ID(退款回补余额用)' AFTER `mall_order_goods_id`,
|
||
ADD INDEX `idx_source` (`source`),
|
||
ADD INDEX `idx_mall_order_id` (`mall_order_id`);
|
||
|
||
-- 2.1【幂等】一个商城订单商品行只能生成一条发放单。
|
||
-- 不需要新建唯一索引:直接复用 qyt_migration.sql 已建的
|
||
-- uk_partner_saleorder (partners_id, partners_order_no)。
|
||
-- mall 行固定 partners_id=0、partners_order_no='M{订单号}-{order_goods_id}',
|
||
-- 天然唯一;支付回调重入时唯一键冲突,代码按「已建单」返回原单。
|
||
-- 详见 app/common/service/MallOil.php::create()
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 3. order_goods 增加「已加油 / 退款」展示字段
|
||
-- 一张订单可以分多次加油(7.10 逐笔推送),小程序端要能看到
|
||
-- 已加油金额与剩余可加油金额,否则第一笔加油后就再也拿不到加油链接。
|
||
-- 数据由 MallOil::syncGoods() 从 partners_order 回写,这里只是展示冗余。
|
||
-- ------------------------------------------------------------
|
||
ALTER TABLE `yoshop_order_goods`
|
||
ADD COLUMN `used_amount` decimal(10,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '已加油金额(累计)' AFTER `use_text`,
|
||
ADD COLUMN `used_num` int(11) NOT NULL DEFAULT 0 COMMENT '加油次数' AFTER `used_amount`,
|
||
ADD COLUMN `refund_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '退款状态 0未退款 1退款中 2已退款 3退款失败 4待人工确认' AFTER `used_num`,
|
||
ADD COLUMN `refund_amount` decimal(10,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '已退款金额' AFTER `refund_status`;
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 4. 回滚(按需执行)
|
||
-- ------------------------------------------------------------
|
||
-- ALTER TABLE `yoshop_user`
|
||
-- DROP INDEX `idx_id_card`,
|
||
-- DROP COLUMN `real_name`, DROP COLUMN `id_card`, DROP COLUMN `plate_no`;
|
||
-- ALTER TABLE `yoshop_partners_order`
|
||
-- DROP INDEX `idx_source`, DROP INDEX `idx_mall_order_id`,
|
||
-- DROP COLUMN `source`, DROP COLUMN `mall_order_id`,
|
||
-- DROP COLUMN `mall_order_goods_id`, DROP COLUMN `user_id`;
|
||
-- ALTER TABLE `yoshop_order_goods`
|
||
-- DROP COLUMN `used_amount`, DROP COLUMN `used_num`,
|
||
-- DROP COLUMN `refund_status`, DROP COLUMN `refund_amount`;
|