-- ============================================================ -- 小程序(商城)订单接入企油通 · 数据库迁移 -- 生成: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`;