Appearance
概述
资金供应商(资方)是供应商的一种类别:eb_system_supplier.supply_type 标记 1=货物供应商(默认)、2=资金供应商。资方通过线下方式打款给平台,平台在总后台把租赁订单手动分配给资方,资方登录供应商后台查看自己名下的订单、租赁统计与财务流水,但被禁止发货、退款、提现等一切写操作。
核心语义:一单只绑一家供应商(eb_store_order.supplier_id 单字段,货物/资金互斥)。下单时商品属货物供应商则自动写入;后台改派给资方后,原货物供应商将看不到该订单。
数据模型
sql
ALTER TABLE `eb_system_supplier`
ADD COLUMN `supply_type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '类别(1:货物,2:资金供应商)' AFTER `phone`;- 增量 SQL 见
db_sql/zyl.sql(全量 SQLebaozu_v3/ebaozu_v4.sql已含该列)。 - 订单侧无结构变更,沿用
eb_store_order.supplier_id。
总后台(admin)
供应商 CRUD
app/controller/admin/v1/supplier/SystemSupplier.php:save()/update()接收supply_type(默认 1),read()/选择器接口search()返回supply_type。app/services/supplier/SystemSupplierServices.php::getSupplierList()返回supply_type_name(货物方/资金方)。- 前端表单有"供应商类别"单选,列表有"供应商类型"列。
订单分配、改派与取消
入口:route/admin.php → app/common/controller/Order.php::assignSupplierOrder() → app/services/order/StoreOrderServices.php::assignSupplierOrder($oid, $supplier_id, $operator)。
| 操作 | 入参 | 行为 |
|---|---|---|
| 分配 | supplier_id > 0 | 校验供应商存在;已支付订单按 eb_capital_flow 支付/退款流水(trading_type in (1,2))重建 eb_supplier_flowing_water |
| 改派 | 新 supplier_id | 事务内:删除旧供应商该订单派生流水(link_id 前缀匹配订单号 + type in (1,2))→ 更新 → 按新供应商重建 |
| 取消 | supplier_id = 0 | 更新为 0,清除派生流水 |
| 幂等 | 与现值相同 | 直接返回成功 |
- 流水字段语义:
number取源流水金额绝对值、trade_time取源流水自身时间。 - 分配之后的增量流水由既有
SupplierFinanceJob链路按订单当前supplier_id生成,改派后自然归属新供应商。 - 操作记录订单日志(
eb_store_order_status,change_type='assign_supplier_order':"分配到供应商: xxx" / "取消供应商分配")。 - 租赁订单列表分配列为单列「供应商」:选项按类别标注"xxx(资金方)",支持改选与清除(清除传
supplier_id=0)。下拉使用独立样式类supplier-select正常回显当前供应商名称(勿复用门店分配的store-select,其为 30px 图标式且隐藏选中值);清除分配有$Modal.confirm二次确认(changeSupplier→doChangeSupplier,取消确认则刷新列表还原下拉值)。门店端(storeapi)无分配入口。
供应商端(supplierapi)访问控制
白名单中间件
app/http/middleware/supplier/FundSupplierMiddleware.php,注册在 route/supplier.php 全部鉴权分组内、必须位于 AuthTokenMiddleware 之后(依赖 $request->supplierInfo)。
supply_type != 2:直接放行,货物供应商行为与改造前完全一致。supply_type == 2:按路由规则 + 请求方式做白名单匹配,不在名单内统一返回资金供应商无此权限!。
放行清单(均为只读):
| 类别 | 路由 |
|---|---|
| 基础 | logo、config、jnotice、city、menusList、logout、updatePwd、supplier(GET) |
| 首页报表 | home/header、home/order、home/order_channel、home/order_type |
| 订单 | order/list、order/info/:id、order/lease_statistics、order/status、order/express、order/print 等只读项 |
| 售后 | refund/list、refund/detail、refund/reason、refund/express |
| 财务 | finance/info(GET)、`finance/supplier_flowing_water/list |
| 导出 | export/storeOrder、export/financeRecord、export/flowWater |
新增供应商端路由时,如需对资方开放,须同步维护该中间件的 WHITE_LIST。
登录与菜单
app/services/supplier/LoginServices.php::login():
user_info携带supply_type(由SystemAdmin::supplier()关联绑定透传)。supply_type == 2时按菜单 ID 剔除「商品」(1526)、「设置」(1445) 及财务下「转账申请」(1534),保留流水/账单查看。
订单与统计口径
app/controller/supplier/Order.php::lst()硬编码is_lease=1+supplier_id=当前供应商,附order_lease、order_installment、lease_user关联(lease_user必须加载:handleLeaseOrderStatus依据lease_user.real_name判定"待绑定"状态,缺失会把待发货订单误判为_status=98 待绑定)。order/lease_statistics路由接入getLeaseStatistics(),强制supplier_id=当前供应商;逾期总额经getOrderByFlag()透传supplier_id(该参数为新增可选条件,不影响 admin/门店既有调用)。
供应商前端(view/supplier)
- 登录成功将
supply_type写入 cookie(与 token 同过期时间),各页面util.cookies.get("supply_type")读取,缺失时按1兜底。 - 订单列表:
supply_type == 2时顶部显示统计卡片orderData.vue(调/order/lease_statistics)与「租赁信息」列;批量操作栏、复选框列、发货等写操作按钮仅supply_type == 1显示。列宽按supply_type分别取值(w-10p/w-20p/w-25p等),保证supply_type == 2的 8 列合计 100%,避免「操作」列被挤出可视区;操作列无任何可用操作时显示-占位;订单号行按is_lease显示「租赁」标识 Tag。 - 售后列表:写操作按钮仅
supply_type == 1显示。
注意事项
- 改派流水删除口径:仅删"本订单号前缀 + 旧供应商 + type 1/2"的派生流水,押金等其他类型流水不受影响、不重建。
- 商城订单不对任何供应商开放查看,供应商端订单列表恒为租赁订单。
- 资方无提现/转账能力,财务仅流水账单只读。
- 菜单剔除按菜单 ID(非中文标题),菜单数据变更时需同步检查
LoginServices中的 ID 清单。