程序详细设计
程序设计背景:
- 系统分为三部分:用户公众号端、技师 app 端、PC saas 管理端
- 后台模块功能设计
流程设计
总流程
flowchart LR
Start((开始)) --> Login[登录/注册]
Login --> UserLogin[用户登录]
Login --> TechLogin[技师登录]
%% 用户主要流程
UserLogin --> UserOrder[用户下单]
UserOrder --> SelectTech[选择技师]
UserOrder --> SelectService[选择服务项目]
SelectTech & SelectService --> Payment[订单支付]
Payment --> OfflineService[线下服务]
OfflineService --> EndOrder[订单结束]
EndOrder --> Settlement[分账结算]
Settlement --> End
%% 用户其他功能
UserLogin --> Wallet[用户钱包]
Wallet --> Recharge[用户充值]
Wallet --> Withdraw[用户提现]
UserLogin --> Marketing[营销券]
UserLogin --> UserTeam[我的团队]
UserTeam --> TeamMember[团队成员]
UserTeam --> TeamCommission[团队佣金]
UserTeam --> ShareMoney[分享赚钱]
UserLogin --> Member[嘀咚会员]
UserLogin --> Channel[渠道合作]
Channel --> TechApply[技师申请]
Channel --> BusinessApply[业务员申请]
UserLogin --> Logout[注销账号]
%% 技师主要流程
TechLogin --> ServiceSetting[服务项目设置]
TechLogin --> OrderSetting[接单设置]
TechLogin --> TechAccept[技师接单]
TechLogin --> TechGrab[技师抢单]
TechAccept & TechGrab --> StartService[线下服务]
StartService --> EndOrder[订单结束]
EndOrder --> Settlement[分账结算]
Settlement --> End
%% 技师其他功能
TechLogin --> TechTeam[技师团队]
TechTeam --> TeamMember[团队成员]
TechTeam --> TeamCommission[团队佣金]
TechTeam --> ShareMoney[分享赚钱]
TechLogin --> TechWallet[技师钱包]
TechWallet --> TechRecharge[技师充值]
TechWallet --> TechWithdraw[技师提现]
TechLogin --> Contract[合同解约]
TechLogin --> CheckIn[异地签到]
TechLogin --> LogoutJ[注销账号]
%% 样式设置
classDef primary fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef secondary fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef process fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px
class UserLogin,TechLogin primary
class UserOrder,TechAccept,TechGrab secondary
class Payment,OfflineService,Settlement process
click UserLogin href "#用户登录哈"
click Wallet href "#用户钱包哈"
click Recharge href "#用户充值哈"
click Withdraw href "#用户提现哈"
click Marketing href "#营销券"
click UserTeam href "#我的团队哈"
click Member href "#嘀咚会员"
click TechApply href "#技师申请"
click TechLogin href "#技师登录"
click TechTeam href "#技师团队"
click TechWallet href "#技师钱包"
click TechRecharge href "#技师充值"
click TechWithdraw href "#技师提现"
click ServiceSetting href "#项目设置哈"
click OrderSetting href "#接单设置哈"
click Contract href "#合同解约"
click CheckIn href "#异地签到"
click TeamMember href "#团队成员"
click TeamCommission href "#团队佣金"
click ShareMoney href "#分享赚钱"
click SelectTech,TechAccept href "#选择技师下单"
click SelectService,TechGrab href "#选择项目下单哈"
click Payment href "#订单支付"
click OfflineService,EndOrder,StartService href "#服务流程"
click Settlement href "#分账结算"
click Logout href "#用户注销账号"
click LogoutJ href "#技师注销账号"
用户登录哈
后台逻辑:
- 用户登录
- 微信登录
前端逻辑:
–SUDOQ–
用户钱包哈
后台逻辑:
- 用户点击钱包
- 用户钱包
UI 图:

用户充值哈
后台逻辑:
- 用户选择充值类型(平台充值、技师充值),充值方式,充值金额
- 用户充值 --SUDOH–
UI 图:

用户提现哈
后台逻辑:
- 用户点击体现、提现方式、体现金额
- 用户提现
UI 图:

营销券
后台逻辑:
- 用户点击营销券
- –SUDOH–
UI 图:

我的团队哈
后台逻辑:
- 用户点击我的团队
- 我的团队
UI 图:
–SUDOQ–
团队成员
后台逻辑:
- 用户点击团队成员
- –SUDOH–
UI 图:
–SUDOQ–
团队佣金
后台逻辑:
- 用户点击团队佣金
–SUDOH–
UI 图:

分享赚钱
后台逻辑:
- 用户点击分享赚钱
- –SUDOH–
UI 图:
–SUDOQ–
嘀咚会员
后台逻辑:
- 用户点击嘀咚会员
- –SUDOH–
UI 图:

渠道合作
UI 图:

技师申请
技师注册
业务员申请
后台逻辑:
–SUDOH–
UI 图:
–SUDOQ–
技师登录
1.技师登录就是用户登录
技师钱包
后台逻辑:
- 技师点击钱包
- 技师钱包
UI 图:

技师充值
后台逻辑:
- 技师点击充值
- –SUDOH–
UI 图:
–SUDOQ–
技师提现
后台逻辑:
- 技师点击提现
- 技师提现
UI 图:
–SUDOQ–
项目设置哈
后台逻辑:
- 针对每个项目进行设置
- 技师项目列表
- 项目设置
UI 图:
1.技师项目列表

2.技师项目设置

接单设置哈
后台逻辑:
- 点击接单设置
- 接单设置
UI 图:

选择技师下单
选择技师下单
选择项目下单哈
选择项目下单
订单支付
后台逻辑:
- 用户点击订单支付
- –SUDOH–
线下服务
线下服务
分账结算
后台逻辑:
- 订单结束
- 分账结算
合同解约
后台逻辑:
–SUDOH–
UI 图:
–SUDOQ–
异地签到
后台逻辑:
–SUDOH–
UI 图:
–SUDOQ–
技师注销账号
后台逻辑:
–SUDOH–
用户注销账号
后台逻辑:
用户注销账号
技师注册流程
flowchart TD
A[用户端申请成为技师] --> B[客服登录后台管理进行审核]
B -->|审核中| C[申请页面显示正在审核]
B -->|拒绝| D[可以修改个人信息重新申请]
B -->|通过| E[申请页面变成切换身份进入技端]
E --> F[进入技师端]
F --> G[支付宝实名认证,技师上传认证资料]
G --> I[客服再次对技师进行审核]
I --> J[签合同]
J --> Z[初始化项目设置、接单设置默认值,后台]
click A href "#技师申请" _self
click F href "#技师端" _self
click G href "#技师认证" _self
click I href "#技师认证审核" _self
click J href "#签合同" _self
技师申请
后台逻辑
申请信息:姓名、性别、出生日期、联系方式、意向城市
状态:审核中、拒绝、通过
UI 图

技师端
UI 图

技师认证
后台逻辑
上传资料:按摩证、营业执照、健康证、身份证正反面、手持身份证
UI 图


技师认证审核
后台逻辑
审核:通过、拒绝
UI 图

签合同
TODOQ 待画签合同页面
TODOH 签合同逻辑
下单流程
[CROSSNOTETOC]
选择技师下单流程
flowchart TD
%% 基础选择流程
Start([开始]) --> A[用户选择服务位置]
A --> B[查询附近技师列表]
B --> C[用户选择技师]
C --> D[展示技师项目列表]
D --> E[用户选择项目]
E --> F[展示项目详情]
F --> G[用户选择服务时间]
G --> H[用户选择营销卷]
H --> I[计算订单费用]
%% 支付流程
I --> J[用户确认下单]
J --> K{支付结果}
%% 支付失败处理
K -->|失败| L[订单状态:待付款]
L --> M[客服跟进]
M --> N{用户选择}
N -->|重新支付| J
N -->|取消订单| O[退款处理]
%% 支付成功处理
K -->|成功| P[订单状态:已支付]
P --> Q[推送订单给技师]
%% 技师处理流程
Q --> R{技师处理}
%% 技师接单分支
R -->|接单| S[订单状态:已接单]
S --> T[技师确认出发]
T --> U[订单状态:已出发]
%% 技师拒单分支
R -->|拒单| V[订单状态:已拒绝]
V --> W[客服处理]
W --> X{处理方案}
X -->|更换技师| Q
X -->|用户退款| O
%% 接单超时处理
R -->|超时| Y[客服跟进]
Y --> Z{处理结果}
Z -->|联系上技师| R
Z -->|更换技师| Q
Z -->|取消订单| O
%% 结束节点
U --> End([开始服务])
O --> Cancel([订单结束])
%% 样式定义
classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px
classDef process fill:#dcedc8,stroke:#33691e
classDef decision fill:#fff3e0,stroke:#e65100
classDef status fill:#e3f2fd,stroke:#0d47a1
%% 应用样式
class K,R,X,Z decision
class L,P,S,U,V status
class A,B,C,D,E,F,G,H,I process
click A,B,C href "#用户选择技师"
click D,E,F href "#用户选择项目"
click G href "#用户选择可服务时间"
click H,I href "#用户选择营销卷"
click J href "#用户点击立即结算"
click L href "#支付失败"
click P href "#支付成功"
click S href "#技师接单"
click V href "#技师拒绝接单"
click X href "#订单超时"
用户选择技师
后台逻辑:
- 获取前端传递的经纬度,根据经纬度查询出附近的技师
- 获取技师列表
- 获取技师详情
UI 图:

用户选择项目
后台逻辑:
- 获取前端传递的技师 id,查询出该技师下可服务项目
- 获取前端传递的区域地址,查询出该区域地址可服务项目(370602 或 156370602)
- 获取项目列表
- 获取项目详情
UI 图:

用户选择可服务时间
前端逻辑
- 获取前端传递的技师 id 和项目 id,查询出该技师下,该项目的可服务时间,以及下单详情信息
- 获取前端传递的区域地址,计算订单金额(370602 或 156370602)
- 获取前端传递的路程,计算订单金额
后台逻辑:
- 计算订单金额
- 订单详情
UI 图:

用户选择营销卷
后台逻辑:
- 获取前端传递的技师 id 和项目 id,查询出该技师下,该项目的可使用的营销卷
- 选择优惠劵
- 计算订单金额
UI 图:

用户点击立即结算
后台逻辑:
- 创建订单,并判断使用的那种支付方式
- 创建订单
- 调用支付
UI 图:

支付失败
后台逻辑:
- 支付超时、取消支付导致的用户支付失败,极光推送客服用户支付失败
- 支付失败 TODO:??
UI 图:

支付成功
后台逻辑:
- 支付成功,后台更改订单,且极光推送技师接单
- 支付成功 TODO:??
UI 图:

技师接单
后台逻辑:
- 技师接单,用户同步数据
- 技师接单
UI 图:

技师拒绝接单
后台逻辑:
- 技师拒绝接单,客服介入,联系用户,更改技师或者用户取消订单退款
- 技师拒绝接单
UI 图:

订单超时
后台逻辑:
- 技师没有在规定时间内接单,客服介入,联系技师
- 订单超时 TODO: 客服介入后,对订单进行处理(更换技师、用户退款、取消订单、转公单等)
选择项目下单
flowchart TD
%% 主流程起点
Start[开始] --> Init[初始化订单]
%% 订单创建阶段
subgraph 订单创建
Init --> A1[获取用户位置]
A1 --> A2[查询区域服务]
A2 --> A3[用户选择服务]
A3 --> A4[选择地址/时间/优惠券]
A4 --> A5[创建空订单]
end
%% 抢单阶段
subgraph 抢单流程
A5 --> B1[进入抢单池]
B1 --> B2[推送给技师]
B2 --> B3{是否有技师抢单?}
B3 -->|是| B4[展示技师列表]
B3 -->|否| B5[等待5-8分钟]
B5 --> B6[客服介入]
end
%% 用户选择阶段
subgraph 用户选择
B4 --> C1{用户是否选择?}
C1 -->|是| C2[锁定技师]
C1 -->|否| C3[等待30分钟]
C2 --> C4[计算费用]
C3 --> B6
end
%% 支付阶段
subgraph 支付流程
C4 --> D1[展示订单详情]
D1 --> D2{用户支付?}
D2 -->|是| D3[支付处理]
D2 -->|否| D4[3分钟超时]
D3 --> D5{支付结果}
D5 -->|成功| D6[更新订单状态]
D5 -->|失败| D7[客服介入]
D4 --> D8[解绑技师]
end
%% 服务阶段
subgraph 服务执行
D6 --> E1[通知技师]
E1 --> jh1[技师拒绝订单]
jh1 --> jh2[客服介入?]
jh2 -->|技师接单| E2[技师出发]
jh2 -->|技师拒单| jh3[客服介入,联系用户?]
jh3 --> jh4[用户接受更换技师]
jh4 --> E2
jh3 --> jh5[用户不接受更换技师]
jh5 --> Cancel
E1 --> E2[技师出发]
E2 --> E3[服务进行中]
E3 --> E4[服务完成]
end
%% 取消订单流程
subgraph 取消处理
Cancel[取消订单] --> F1[客服确认]
F1 --> F2{是否可挽回?}
F2 -->|是| F3[恢复订单]
F2 -->|否| F4[退款处理]
end
%% 异常处理连接
D7 --> Cancel
B6 --> Cancel
D8 --> B1
%% 结束节点
E4 --> End[结束]
F4 --> End
F3 --> D1
%% 样式定义
classDef success fill:#baffc9,stroke:#333,stroke-width:2px;
classDef warning fill:#ffffba,stroke:#333,stroke-width:2px;
classDef error fill:#ffb3ba,stroke:#333,stroke-width:2px;
classDef normal fill:#f9f9f9,stroke:#333,stroke-width:2px;
%% 应用样式
class D6,E4 success;
class D7,B6,Cancel warning;
class F4 error;
class Start,End normal;
click A1,A2,A3 href "#用户选择项目"
click A4,A5,B1,B2 href "#创建抢单类型订单,推送给技师"
click B3,B4 href "#有技师抢单"
click B5,B6 href "#无技师抢单"
click C1,C2,C4 href "#用户选择技师"
click C3,B6 href "#用户不反选技师"
click D2,D3,D6,E1 href "#支付成功"
click jh1,jh2,jh3,jh4,jh5 href "#技师拒绝接单"
click D4,D7,D8 href "#支付失败"
click E2 href "#技师出发"
用户选择项目
后台逻辑:
- 传递用户当前位置信息
- 服务项目列表
- 服务项目详情
UI 图:

创建抢单类型订单,推送给技师
后台逻辑:
- 传递用户服务时间、服务地址、服务项目 id、优惠劵 id
- 创建订单
UI 图:

有技师抢单
后台逻辑:
- 传递技师 id,所抢订单 id,计算路费、技师代金卷等等一些逻辑
- 用户取消订单
UI 图:

无技师抢单
后台逻辑:
- 用户的抢单类型的订单无技师去抢,客服介入,联系附近技师
- 包含超时的情况,记得处理
- 用户取消订单
UI 图:

用户选择技师
后台逻辑:
- 传递技师 id,所抢订单 id,用户 id,订单费用
- 用户选择技师后,3 分钟内不支付,则技师解绑该订单,记得处理
- 用户取消订单
- 指定技师
UI 图:

用户不反选技师
后台逻辑:
- 用户不反选技师
- 用户取消订单
UI 图:

支付成功
后台逻辑:
- 订单支付成功,技师和用户的推送提醒
- 用户取消订单
UI 图:

技师拒绝接单
后台逻辑:
- 技师拒绝接单,客服介入,联系技师
- 接单
- 拒单
- 客服联系用户,用户接受更改技师或者取消订单
UI 图:

支付失败
后台逻辑:
- 支付失败,订单状态为待付款
- 用户取消订单、选择技师、再次付款。存在超时的以及时间差的处理
- 用户取消订单
- 支付订单
UI 图:

技师出发
后台逻辑:
- 技师出发,用户推送提醒
- 用取消订单
服务流程
flowchart TD
%% 开始
Start([开始服务流程]) --> A
%% 主要服务状态
A[技师出发] --> B[技师到达]
B --> C[开始服务]
C --> D[服务进行中]
D --> E[服务结束]
E --> F[用户确认技师离开]
F --> G[技师撤离]
G --> H[订单结算]
H --> EndNode([订单完成])
%% 技师出发阶段异常
A --> A1{用户取消订单?}
A1 -->|是| A2[客服介入沟通]
A2 --> A3{用户是否继续?}
A3 -->|是| A
A3 -->|否| A4[技师撤离]
A4 --> A5[扣除违约金]
A5 --> EndNode
A --> B1{技师终止订单?}
B1 -->|是| B2[客服介入沟通]
B2 --> B3{技师是否继续?}
B3 -->|是| A
B3 -->|否| B4[客服联系用户]
B4 --> B5{是否更换技师?}
B5 -->|是| B6[重新分配技师]
B6 --> A
B5 -->|否| B7[订单结束]
B7 --> EndNode
%% 技师到达阶段异常
B --> C1{线下用户取消订单?}
C1 -->|是| C2[客服介入沟通]
C2 --> C3{用户是否继续?}
C3 -->|是| B
C3 -->|否| C4[技师撤离]
C4 --> C5[扣除违约金]
C5 --> EndNode
B --> D1{联系不上用户?}
D1 -->|是| D2[技师等待]
D2 --> D3{等待>10分钟?}
D3 -->|否| D2
D3 -->|是| D4[技师撤离]
D4 --> D5[扣除违约金]
D5 --> EndNode
%% 服务进行中操作
D --> E1{用户结束订单?}
E1 -->|是| E2[更新订单状态]
E2 --> E
D --> F1{用户打赏?}
F1 -->|是| F2[创建打赏订单]
F2 --> D
D --> G1{用户加钟?}
G1 -->|是| G2[更新服务时长]
G2 -->G3{是否发生下一个客户服务时间冲突}
G3 -->|是|G4[客服介入]
G4 --> G5{技师和下一个用户协商往后延时?}
G5 -->|下一个用户不同意| G7[下一个用户与平台继续协商]
G7 -->G8{是否同意更换技师}
G8 -->|是| G9[更换技师]
G8 -->|否| G10[订单结束]
G5 -->|下一个用户同意| G6[更改下一订单开始服务时间]
G6 --> EndNode
G2 --> D
%% 样式定义
classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px
classDef startEnd fill:#b2dfdb,stroke:#004d40,stroke-width:2px
classDef process fill:#c8e6c9,stroke:#1b5e20,stroke-width:2px
classDef decision fill:#fff3e0,stroke:#e65100,stroke-width:2px
%% 应用样式
class Start,EndNode startEnd
class A,B,C,D,E,F,G,H process
class A1,B1,C1,D1,E1,F1,G1,A3,B3,B5,C3,D3 decision
click A href "#技师出发"
click A1 href "#技师出发中,用户取消订单"
click B1 href "#技师出发中,技师终止订单"
click B href "#技师到达"
click C1 href "#技师到达中,用户线下取消订单"
click D1 href "#技师到达,联系不上用户"
click D href "#开始服务"
click E1 href "#服务进行中,用户结束订单"
click F1 href "#服务进行中,用户打赏"
click G1 href "#服务进行中,用户加钟"
click E href "#服务结束"
click F href "#用户确认技师离开"
click G href "#技师撤离"
click H href "#订单结算"
技师出发
后台逻辑:
- 技师点击确认出发
后台逻辑:
- 技师未到达前,用户点击取消订单,算是订单结束,扣除违约金
TODO:技师到达前,用户取消订单,客服介入,联系用户,确认取消,订单取消,扣除违约金(50%项目金额+车费)
- 线下客服介入,联系用户
技师出发中,技师终止订单
后台逻辑:
- 技师点击终止订单,扣除违约金,客服介入,联系技师
TODO: 技师无法线上终止订单,联系客服
技师到达前,用户线下取消订单
后台逻辑:
- 技师未到达前,用户线下取消订单,算是订单结束,扣除违约金
TODO:技师到达前,用户取消订单,客服介入,联系用户,确认取消,订单取消,扣除违约金(50%项目金额+车费)
- 线下客服介入,联系用户,联系技师
技师到达,联系不上用户
后台逻辑:
- 技师等待,等待时间超过 10 分钟,技师点击撤离,扣除违约金,订单结束
- 客服介入,联系用户,联系技师
开始服务
后台逻辑:
- 技师点击开始服务,进行扫码
服务进行中,用户结束订单
后台逻辑:
- 用户点击结束订单,算是服务结束
服务进行中,用户打赏
后台逻辑:
- 用户打赏,后台创建一个关联订单的子订单的打赏订单
TODO: 后台暂无打赏逻辑
服务进行中,用户加钟
后台逻辑:
- 用户获取加钟项目列表
- 用户点击加钟,后台创建新的订单和目前的订单有关联即可
- 在原有剩余的时长增加时长
服务结束
后台逻辑:
- 服务时长结束,服务结束
TODO:系统自动结束订单
用户确认技师离开
后台逻辑:
- 用户点击确认技师离开
技师撤离
后台逻辑:
- 技师点击撤离,订单结束
订单结算
后台逻辑:
- 订单结算
推广用户
推荐技师
渠道:业务员、技师、用户三种角色
- 渠道推荐技师:
- 渠道永久拥推荐技师1%的接单奖
- 渠道获取平台奖励的1000元上限,从推荐技师每次订单金额中3%中提取。
分账
分账简介版
分账流程设计
- 用到的人物 A 技师 B 用户 C 代理 D 业务员 E 店铺 F 平台 G 渠道
- 订单分类
- 上门订单
- B 用户对 A 技师下单
- A 技师接单
- A 技师服务完 B 用户
- B 用户确认离开
- A 技师撤离
- 订单结束
- 救急订单
- 店铺订单
营销
业务模块
一、用户
发送验证码
参数:
- 手机号
后台逻辑:
- 生成验证码
- 发送验证码
- 返回验证码
用户登录
参数:
- 手机号
- 验证码
后台逻辑:
- 验证验证码
- 根据手机号查询用户
- 如果用户不存在,则创建用户
- 用户状态为正常
- 生成token
- 返回token
获取微信授权
微信登录
参数:
- 微信openid
后台逻辑:
- 根据微信openid查询微信用户
- 如果微信用户不存在,则创建微信用户
- 用户状态为正常
- 生成token
- 返回token
用户退出
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 清理用户token
- 返回退出成功
获取用户信息
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 根据用户编号查询用户信息
- 关联查询用户钱包
- 钱包编号
- 钱包余额
- 返回用户信息
修改用户信息
参数:
- 用户编号 通过 Auth::id() 获取
- 用户信息 通过路由获取
后台逻辑:
- 根据用户编号查询用户信息
- 修改用户信息
- 返回修改成功
用户钱包
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 查询钱包数据
- 角色为用户
- 角色编号为当前用户编号
- 返回钱包数据
用户提现
参数:
- 用户编号 通过 Auth::id() 获取
- 提现金额 通过路由获取
后台逻辑:
- 参数校验
- 根据用户编号查询用户数据
- 用户状态为正常
- 提现金额不能小于最小提现金额
- 提现金额不能大于最大提现金额
- 提现申请
- 角色为用户
用户注销
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 根据用户编号查询用户数据
- 用户状态为正常
- 用户软删除
- 返回注销成功
用户反馈
参数:
- 用户编号 通过 Auth::id() 获取
- 反馈内容 通过路由获取
后台逻辑:
- 根据用户编号查询用户数据
- 用户状态为正常
- 保存反馈数据
- 返回反馈成功
用户评价
参数:
- 用户编号 通过 Auth::id() 获取
- 技师编号 通过路由获取
- 评价内容 通过路由获取
后台逻辑:
- 根据用户编号查询用户数据
- 用户状态为正常
- 根据技师编号保存评价数据
- 返回评价成功
用户评价列表
参数:
- 用户编号 通过 Auth::id() 获取
- 技师编号 通过路由获取
后台逻辑:
- 根据用户编号查询用户数据
- 用户状态为正常
- 根据技师编号查询评价列表
- 返回评价列表
申请技师
-
参数:
-
后台逻辑:
- 根据用户编号查询用户数据
- 用户状态为正常
- 保存技师申请数据
- 返回申请成功
我的团队
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 根据用户编号查询用户数据
- 用户状态为正常
- 查询团队列表
- 返回团队列表
钱包明细
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 根据用户编号查询用户数据
- 用户状态为正常
- 查询钱包明细
- 返回钱包明细
获取技师列表
todo: lbs near解决方案,获取附近技师列表
参数:
- 用户编号 通过 Auth::id() 获取
- 用户经纬度 通过路由获取
后台逻辑:
- 根据用户编号查询用户数据
- 用户状态为正常
- 根据用户经纬度查询范围内技师列表
- 返回技师列表
获取技师详情
todo: lbs near解决方案,计算技师距离
参数:
- 用户编号 通过 Auth::id() 获取
- 技师编号 通过路由获取
- 用户经纬度 通过路由获取
后台逻辑:
- 根据用户编号查询用户数据
- 用户状态为正常
- 根据技师编号查询技师数据
- 技师状态为正常
- 技师认证通过
- 计算技师距离
- 返回技师数据、技师距离
获取项目列表-技师开通租户项目
参数:
- 技师编号 通过路由获取
- 区域地址 通过路由获取
后台逻辑:
- 根据技师编号查询技师数据
- 技师状态为正常
- 技师认证通过
- 查询技师开通项目列表
- 项目状态为正常
- 根据区域地址、技师开通项目查询项目列表
- 项目状态为正常
- 返回项目列表
获取项目详情-租户项目
参数:
- 项目编号 通过路由获取
- 区域地址 通过路由获取
后台逻辑:
- 获取租户编号
- 获取项目详情
- 返回项目数据
二、技师
获取基本信息
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 查询技师数据
- 用户编号
- 返回技师数据
设置基本信息
参数:
- 用户编号 通过 Auth::id() 获取
- 基本信息
后台逻辑:
- 查询技师
- 用户编号
- 状态正常
- 创建技师认证记录
- 技师编号
- 基本信息
- 返回设置成功
获取认证信息
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 查询技师
- 用户编号
- 返回技师数据
设置认证信息
参数:
- 用户编号 通过 Auth::id() 获取
- 认证信息
后台逻辑:
- 查询技师
- 用户编号
- 状态正常
- 创建技师认证记录
- 技师编号
- 认证信息
- 返回设置成功
获取项目
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 查询技师
- 用户编号
- 状态正常
- 认证通过
- 查询开通项目
- 返回项目
设置项目
参数:
- 用户编号 通过 Auth::id() 获取
- 项目编号
- 设置信息
后台逻辑:
- 查询技师
- 用户编号
- 状态正常
- 认证通过
- 查询开通项目
- 项目编号
- 更新开通项目
- 设置信息
- 返回设置成功
获取钱包
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 查询技师
- 用户编号
- 状态正常
- 认证通过
- 查询钱包
- 角色编号:技师编号
- 角色:技师
- 返回钱包数据
获取钱包明细
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 查询技师
- 用户编号
- 状态正常
- 认证通过
- 查询钱包
- 角色编号:技师编号
- 角色:技师
- 钱包明细
- 钱包编号
- 返回钱包明细数据
提现
参数:
- 用户编号 通过 Auth::id() 获取
- 提现金额
后台逻辑:
- 查询技师
- 用户编号
- 状态正常
- 认证通过
- 提现
- 角色编号:技师编号
- 角色:技师
- 提现金额
- 返回成功
获取工时设置
参数:
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 查询技师
- 用户编号
- 状态正常
- 认证通过
- 查询技师工时记录
- 技师编号
- 返回技师工时记录
设置工时
参数:
- 用户编号 通过 Auth::id() 获取
- 工作时间
- 工作状态
后台逻辑:
- 查询技师
- 用户编号
- 状态正常
- 认证通过
- 创建技师工时记录
- 技师编号
- 工作状态
- 工作时间
- 返回成功
三、订单
公共接口
获取租户配置
参数:
后台逻辑:
获取技师配置
参数:
- 技师编号
后台逻辑:
- 根据技师编号查询技师配置
- 返回技师配置
计算路费金额
参数1: 技师编号,租户编号,服务路程
参数2: 技师编号,用户经纬度,服务路程
后台逻辑:
- 如果路由不存在租户编号
- 根据技师编号查询技师配置
- 技师是否收取路费
- 如果收取
- 根据租户编号查询租户配置
- 服务路程小于等于租户配置的最小路程
- 服务路程大于租户配置的最小路程
- 路程单位为公里
- 超出路程=服务路程减租户配置的最小路程
- 单程路费金额=租户配置的最小路费金额 加 (超出路程 乘 租户配置的每公里路程单价)
- 如果技师配置为单程路费
- 如果技师配置为往返路费
- 不收取
- 返回路费金额
后台接口
支付订单回调
参数:
后台逻辑:
-
参数校验
- 根据外部交易号,查询订单
- 如果订单支付类型为微信支付
- 根据外部交易号,查询微信支付统一下单接口
- 如果支付成功
- 根据外部交易号查询订单
- 订单是否存在
- 订单用户编号是否匹配
- 订单状态为未支付
-
事务处理
- 修改订单状态为已支付
- 如果订单余额抵扣大于 0
- 根据订单的角色编号查询用户钱包
- 创建钱包明细
- 钱包编号
- 钱包明细类型为支付
- 钱包明细金额为订单余额抵扣金额
- 余额为钱包余额
- 冻结金额为钱包冻结金额
- 状态为已通过(已支付)
- 用户钱包数据开启更新锁表
- 扣除用户钱包余额
- 创建订单历史:支付
-
发送异步抢单通知(比如对接极光推送)
开始服务
参数:
- 订单编号, 核销码
- 订单编号 通过路由获取
- 核销码 通过路由获取
后台逻辑:
1. 参数校验
- 如果订单编号存在
- 如果订单编号不为空,根据订单编号查询订单
- 订单状态为待服务
- 否则, 根据核销码查询订单
- 订单状态为待服务
- 根据订单接单技师查询用户技师数据
- 技师状态为正常
- 技师认证状态为已认证
2. 事务处理
- 修改订单状态为服务中
- 创建订单历史:服务(扫码)
3. 发送异步抢单通知(比如对接极光推送)
用户端接口
获取租户
参数: - 区域编号
后台逻辑:
- 根据区域数据编码查询租户信息
- 如果租户信息不存在
- 则依次按照区域编码按市、省、全国逐步查询,直至查找到租户信息
- 返回租户信息
获取项目列表-租户项目
参数:
后台逻辑:
获取项目详情-租户项目
参数: - 项目编号,租户编号
后台逻辑:
- 参数校验
- 返回租户项目详情
计算订单金额
参数:
- 用户编号, 地址编号, 技师编号, 项目编号,租户编号, 余额抵扣
- 用户编号 通过 Auth::id() 获取
- 余额抵扣 - 0: 不使用 - 1: 使用
后台逻辑:
- 参数校验
- 根据用户编号查询用户
- 根据地址编号查询地址
- 根据技师编号查询技师
- 计算金额
- 订单金额=项目金额+路费金额+打赏金额-优惠卷金额
- 项目金额=项目详情的项目金额
- 路费金额=路费金额
- 如果存在优惠卷编码,则根据优惠卷编号查询优惠卷
- 否则优惠金额 = 0
- 如果路由存在参数订单编号
- 如果使用余额抵扣
- 根据用户编号查询用户钱包
- 用户钱包余额大于等于订单金额
- 否则
- 余额抵扣金额=用户钱包余额
- 实付金额=订单金额-余额抵扣金额
- 否则
- 返回
- 订单金额
- 余额抵扣金额
- 实付金额
- 优惠卷金额
- 打赏金额
- 项目金额
- 路费金额
创建订单
参数:
- 用户编号, 项目编号, 地址编号, 技师编号,余额抵扣
- 用户编号 通过 Auth::id() 获取
- 余额抵扣 - 0: 不使用 - 1: 使用
- 订单编号
涉及表和关键列:
-
订单表
- 订单类型字段
- 状态字段
- 0:待支付
- 1:待接单
- 2:待服务
- 3:服务中
- 4:服务结束
- 5:完成
- 6:取消
- 支付类型字段
- 订单类型
-
用户表
-
用户地址表
-
项目表
-
技师表
后台逻辑:
-
参数校验
- 根据用户编号查询用户
- 根据地址编号查询地址
- 如果订单类型为常规
- 根据租户编号查询项目
-
事务处理
-
如果存在订单编号
-
否则
-
创建新订单数据
- 请自动填写相同名称的字段
- 如果订单类型为常规订单
- 订单状态为未支付
- 订单金额=计算订单金额:订单金额
- 余额抵扣金额=计算订单金额:余额抵扣金额
- 实付金额=计算订单金额:实付金额
- 优惠卷金额=计算订单金额:优惠卷金额
- 打赏金额=计算订单金额:打赏金额
- 项目金额=计算订单金额:项目金额
- 如果新订单类型为加钟
- 如果新订单类型为常规订单
- 如果使用余额抵扣,并且实付金额为 0
-
如果新订单类型为加钟
-
如果新订单类型为常规订单
-
如果订单支付方式为余额支付
-
否则
-
发送异步抢单通知(比如对接极光推送)
获取项目列表-加钟
参数:
后台逻辑:
加钟
参数:
- 用户编号, 订单编号
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
后台逻辑:
修改订单
参数:
- 用户编号, 订单编号, 技师编号
- 用户编号 通过 Auth::id() 获取
后台逻辑:
指定技师(修改订单)
参数:
- 用户编号, 订单编号, 技师编号
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 参数校验
- 查询用户数据
- 查询订单数据
- 用户编号
- 订单编号
- 订单状态为待抢单或待支付或已拒绝
- 查询技师数据
- 查询技师排班数据
- 事务处理
- 发送异步抢单通知(比如对接极光推送)
获取支付配置
参数:
- 用户编号, 订单编号
- 用户编号 通过 Auth::id() 获取
后台逻辑:
- 参数校验
- 根据用户编号查询用户
- 根据订单编号查询订单
- 订单是否存在
- 订单用户编号是否匹配
- 订单状态为未支付
- 生成微信 JSAPI 支付配置
- 修改订单外部交易号为微信外部交易号
- 发送异步抢单通知(比如对接极光推送)
- 返回微信 JSAPI 支付配置
获取订单列表
参数: - 用户编号 通过 Auth::id() 获取
后台逻辑: - 根据用户编号查询订单列表 - 返回订单列表
获取订单详情
参数: - 用户编号 通过 Auth::id() 获取 - 订单编号
后台逻辑: - 根据用户编号、订单编号查询订单详情 - 返回订单详情
订单退款
参数:
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
涉及表和关键列:
- 订单表
- 字段:编号, 用户编号, 状态
- 状态
- 待支付
- 待服务
- 待评价
- 已完成
- 已取消
- 订单历史记录表
- 字段:历史记录编号, 订单编号, 角色, 角色编号, 状态
- 角色
- 用户
- 技师
- 代理
- 状态
- 下单
- 接单
- 出发
- 到达
- 开始
- 结束
- 撤离
- 取消(退款)
后台逻辑:
- 查询订单
- 更新数据
订单初始化-前端初始化
参数:
- 用户编号 通过 Auth::id() 获取
- 技师编号 通过路由获取
- 区域编号 通过路由获取
- 项目编号 通过路由获取
后台逻辑:
- 根据用户编号查询钱包数据
- 根据用户编号查询用户默认地址数据
- 根据技师编号查询技师数据
- 根据技师编号查询技师排班数据
- 根据用户编号查询用户优惠卷数据
- 获取租户
- 租户项目详情
- 计算订单金额
- 返回钱包数据、技师数据、项目详情、地址数据、排班数据、订单金额、优惠卷数据
结束订单
参数:
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
后台逻辑:
确认技师离开
参数:
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
后台逻辑:
用户取消订单
参数:
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
后台逻辑:
技师端接口
获取订单列表(抢单)
参数:
后台逻辑:
- 参数校验
- 获取技师配置
- 查询技师定位数据
- 查询抢单类型订单列表
- 订单状态为待抢单
- 订单地区编码与技师定位地区编码匹配
- 订单经纬度与技师定位经纬度在接单范围内
- 抢单池中是否存在订单编号、技师编号的记录
- 返回订单列表
抢单
参数:
- 用户编号, 订单编号
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
后台逻辑:
- 参数校验
- 事务处理
- 发送异步抢单通知(比如对接极光推送)
接单
参数:
- 用户编号, 订单编号
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
后台逻辑:
- 参数校验
- 事务处理
- 发送异步抢单通知(比如对接极光推送)
出发
参数:
- 用户编号, 订单编号
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
后台逻辑:
- 参数校验
- 根据用户编号查询用户技师数据
- 技师状态为正常
- 技师认证状态为已认证
- 事务处理
- 发送异步抢单通知(比如对接极光推送)
到达
参数:
- 用户编号, 订单编号
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
后台逻辑:
- 参数校验
- 事务处理
- 发送异步抢单通知(比如对接极光推送)
撤离
参数:
- 用户编号, 订单编号
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
后台逻辑:
- 参数校验
- 事务处理
- 发送异步抢单通知(比如对接极光推送)
订单列表
参数:
- 用户编号 通过 Auth::id() 获取
- pageSize 每页大小
- page 页码
后台逻辑:
- 根据用户编号查询技师
- 根据页面大小、页码查询技师订单列表
- 返回订单分页列表
拒绝接单
参数:
- 用户编号, 订单编号
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
后台逻辑:
- 参数校验
- 事务处理
- 发送异步抢单通知(比如对接极光推送)
四、钱包
提现
参数:
- 角色编号, 角色, 提现金额
- user_id 通过 Auth::id() 获取
涉及表和关键列:
- 提现记录表
- 字段:角色编号, 角色, 提现金额, 审核状态, 审核时间
- 角色字段
- 审核状态字段
- 钱包流水表
- 字段:角色, 角色编号, 交易类型, 交易金额, 钱包余额, 钱包冻结金额, 状态
- 交易类型字段
后台逻辑:
-
根据角色及角色编号,查询钱包数据
-
如果余额不足,则返回失败
-
如果余额足够,则添加事务处理
-
检验
- 提现金额大于0
- 提现金额小于等于钱包余额减钱包冻结金额
-
创建提现记录
- 角色编号:角色编号
- 角色:角色
- 提现金额:提现金额
- 审核状态:申请中
-
更新钱包数据
-
发送提现通知(比如对接极光推送)
退款
参数:
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取
涉及表和关键列:
- 订单表
- 字段:编号, 用户编号, 状态
- 状态
- 待支付
- 待服务
- 待评价
- 已完成
- 已取消
- 订单历史记录表
- 字段:历史记录编号, 订单编号, 角色, 角色编号, 状态
- 角色
- 用户
- 技师
- 代理
- 状态
- 下单
- 接单
- 出发
- 到达
- 开始
- 结束
- 撤离
- 取消(退款)
后台逻辑:
- 查询钱包明细
- 订单编号
- 钱包明细类型为退款
- 如果存在,则逻辑停止
- 查询订单记录
- 订单编号
- 状态存在已到达或开始服务,则停止逻辑
- 状态不存在支付,则停止逻辑
- 更新数据
-
开启事务
-
计算退款金额
- 订单金额 = 订单实际支付金额 加 订单使用余额抵扣金额
- 如果记录订单状态不存在接单、出发
- 否则,如果记录订单状态存在出发
- 退款金额 = (订单金额-订单车费金额) * 0.5
- 否则,如果记录订单状态存在接单
- 退款金额 = (订单金额-订单车费金额) * 0.2 + 订单车费金额
-
钱包总额加退款金额
-
添加钱包明细表
- 钱包编号
- 钱包明细类型为退款
- 钱包明细金额为退款金额
分润
查询钱包
参数:
- 角色
- 角色编号
后台逻辑:
- 查询钱包数据
- 角色编号
- 角色
- 返回钱包数据
钱包明细
参数:
- 钱包编号
后台逻辑:
- 查询钱包明细数据
- 钱包编号
- 返回钱包明细数据
五、店铺
六、租户