Files
oil/server-tp6/qyt_migration_mall.sql
vipnub fafd3e2c16 1、合作商余额查询
2、分油账户司机可用额度
2026-10-20 23:21:10 +08:00

76 lines
5.0 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- 小程序(商城)订单接入企油通 · 数据库迁移
-- 生成: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`;