程序详细设计

程序设计背景:

系统架构

数据库设计

流程设计

总流程

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 "#技师注销账号"

用户登录哈

后台逻辑:

  1. 用户登录
  2. 微信登录

前端逻辑:
–SUDOQ–

用户钱包哈

后台逻辑:

  1. 用户点击钱包
  2. 用户钱包

UI 图:

用户充值哈

后台逻辑:

  1. 用户选择充值类型(平台充值、技师充值),充值方式,充值金额
  2. 用户充值 --SUDOH–

UI 图:

用户提现哈

后台逻辑:

  1. 用户点击体现、提现方式、体现金额
  2. 用户提现

UI 图:

营销券

后台逻辑:

  1. 用户点击营销券
  2. –SUDOH–

UI 图:

我的团队哈

后台逻辑:

  1. 用户点击我的团队
  2. 我的团队

UI 图:
–SUDOQ–

团队成员

后台逻辑:

  1. 用户点击团队成员
  2. –SUDOH–

UI 图:
–SUDOQ–

团队佣金

后台逻辑:

  1. 用户点击团队佣金
    –SUDOH–

UI 图:

分享赚钱

后台逻辑:

  1. 用户点击分享赚钱
  2. –SUDOH–

UI 图:
–SUDOQ–

嘀咚会员

后台逻辑:

  1. 用户点击嘀咚会员
  2. –SUDOH–

UI 图:

渠道合作

UI 图:

技师申请

技师注册

业务员申请

后台逻辑:
–SUDOH–

UI 图:
–SUDOQ–

技师登录

1.技师登录就是用户登录

技师钱包

后台逻辑:

  1. 技师点击钱包
  2. 技师钱包

UI 图:

技师充值

后台逻辑:

  1. 技师点击充值
  2. –SUDOH–

UI 图:
–SUDOQ–

技师提现

后台逻辑:

  1. 技师点击提现
  2. 技师提现

UI 图:
–SUDOQ–

项目设置哈

后台逻辑:

  1. 针对每个项目进行设置
  2. 技师项目列表
  3. 项目设置

UI 图:

1.技师项目列表

2.技师项目设置

接单设置哈

后台逻辑:

  1. 点击接单设置
  2. 接单设置

UI 图:

选择技师下单

选择技师下单

选择项目下单哈

选择项目下单

订单支付

后台逻辑:

  1. 用户点击订单支付
  2. –SUDOH–

线下服务

线下服务

分账结算

后台逻辑:

  1. 订单结束
  2. 分账结算

合同解约

后台逻辑:
–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 "#订单超时"
用户选择技师

后台逻辑:

  1. 获取前端传递的经纬度,根据经纬度查询出附近的技师
  2. 获取技师列表
  3. 获取技师详情

UI 图:

用户选择项目

后台逻辑:

  1. 获取前端传递的技师 id,查询出该技师下可服务项目
  2. 获取前端传递的区域地址,查询出该区域地址可服务项目(370602 或 156370602)
  3. 获取项目列表
  4. 获取项目详情

UI 图:

用户选择可服务时间

前端逻辑

  1. 获取前端传递的技师 id 和项目 id,查询出该技师下,该项目的可服务时间,以及下单详情信息
  2. 获取前端传递的区域地址,计算订单金额(370602 或 156370602)
  3. 获取前端传递的路程,计算订单金额

后台逻辑:

  1. 计算订单金额
  2. 订单详情

UI 图:

用户选择营销卷

后台逻辑:

  1. 获取前端传递的技师 id 和项目 id,查询出该技师下,该项目的可使用的营销卷
  2. 选择优惠劵
  3. 计算订单金额

UI 图:

用户点击立即结算

后台逻辑:

  1. 创建订单,并判断使用的那种支付方式
  2. 创建订单
  3. 调用支付

UI 图:

支付失败

后台逻辑:

  1. 支付超时、取消支付导致的用户支付失败,极光推送客服用户支付失败
  2. 支付失败 TODO:??

UI 图:

支付成功

后台逻辑:

  1. 支付成功,后台更改订单,且极光推送技师接单
  2. 支付成功 TODO:??

UI 图:

技师接单

后台逻辑:

  1. 技师接单,用户同步数据
  2. 技师接单

UI 图:

技师拒绝接单

后台逻辑:

  1. 技师拒绝接单,客服介入,联系用户,更改技师或者用户取消订单退款
  2. 技师拒绝接单

UI 图:

订单超时

后台逻辑:

  1. 技师没有在规定时间内接单,客服介入,联系技师
  2. 订单超时 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 "#技师出发"
用户选择项目

后台逻辑:

  1. 传递用户当前位置信息
  2. 服务项目列表
  3. 服务项目详情

UI 图:

创建抢单类型订单,推送给技师

后台逻辑:

  1. 传递用户服务时间、服务地址、服务项目 id、优惠劵 id
  2. 创建订单

UI 图:

有技师抢单

后台逻辑:

  1. 传递技师 id,所抢订单 id,计算路费、技师代金卷等等一些逻辑
  2. 用户取消订单

UI 图:

无技师抢单

后台逻辑:

  1. 用户的抢单类型的订单无技师去抢,客服介入,联系附近技师
  2. 包含超时的情况,记得处理
  3. 用户取消订单

UI 图:

用户选择技师

后台逻辑:

  1. 传递技师 id,所抢订单 id,用户 id,订单费用
  2. 用户选择技师后,3 分钟内不支付,则技师解绑该订单,记得处理
  3. 用户取消订单
  4. 指定技师

UI 图:

用户不反选技师

后台逻辑:

  1. 用户不反选技师
  2. 用户取消订单

UI 图:

支付成功

后台逻辑:

  1. 订单支付成功,技师和用户的推送提醒
  2. 用户取消订单

UI 图:

技师拒绝接单

后台逻辑:

  1. 技师拒绝接单,客服介入,联系技师
  2. 接单
  3. 拒单
  4. 客服联系用户,用户接受更改技师或者取消订单

UI 图:

支付失败

后台逻辑:

  1. 支付失败,订单状态为待付款
  2. 用户取消订单、选择技师、再次付款。存在超时的以及时间差的处理
  3. 用户取消订单
  4. 支付订单

UI 图:

技师出发

后台逻辑:

  1. 技师出发,用户推送提醒
  2. 用取消订单

服务流程

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 "#订单结算"

技师出发

后台逻辑:

  1. 技师点击确认出发

技师出发中,用户取消订单

后台逻辑:

  1. 技师未到达前,用户点击取消订单,算是订单结束,扣除违约金
    TODO:技师到达前,用户取消订单,客服介入,联系用户,确认取消,订单取消,扣除违约金(50%项目金额+车费)
  2. 线下客服介入,联系用户

技师出发中,技师终止订单

后台逻辑:

  1. 技师点击终止订单,扣除违约金,客服介入,联系技师
    TODO: 技师无法线上终止订单,联系客服

技师到达前,用户线下取消订单

后台逻辑:

  1. 技师未到达前,用户线下取消订单,算是订单结束,扣除违约金
    TODO:技师到达前,用户取消订单,客服介入,联系用户,确认取消,订单取消,扣除违约金(50%项目金额+车费)
  2. 线下客服介入,联系用户,联系技师

技师到达,联系不上用户

后台逻辑:

  1. 技师等待,等待时间超过 10 分钟,技师点击撤离,扣除违约金,订单结束
  2. 客服介入,联系用户,联系技师

开始服务

后台逻辑:

  1. 技师点击开始服务,进行扫码

服务进行中,用户结束订单

后台逻辑:

  1. 用户点击结束订单,算是服务结束

服务进行中,用户打赏

后台逻辑:

  1. 用户打赏,后台创建一个关联订单的子订单的打赏订单
    TODO: 后台暂无打赏逻辑

服务进行中,用户加钟

后台逻辑:

  1. 用户获取加钟项目列表
  2. 用户点击加钟,后台创建新的订单和目前的订单有关联即可
  3. 在原有剩余的时长增加时长

服务结束

后台逻辑:

  1. 服务时长结束,服务结束
    TODO:系统自动结束订单

用户确认技师离开

后台逻辑:

  1. 用户点击确认技师离开

技师撤离

后台逻辑:

  1. 技师点击撤离,订单结束

订单结算

后台逻辑:

  1. 订单结算

推广用户

推荐技师

渠道:业务员、技师、用户三种角色
- 渠道推荐技师:
    - 渠道永久拥推荐技师1%的接单奖
    - 渠道获取平台奖励的1000元上限,从推荐技师每次订单金额中3%中提取。

分账

分账简介版

分账流程设计

营销


业务模块

一、用户

发送验证码

参数:
- 手机号

后台逻辑:
- 生成验证码
- 发送验证码
- 返回验证码

用户登录

参数:
- 手机号
- 验证码

后台逻辑:
- 验证验证码
- 根据手机号查询用户
- 如果用户不存在,则创建用户
- 用户状态为正常
- 生成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: 技师编号,用户经纬度,服务路程
后台逻辑:

后台接口

支付订单回调

参数:

后台逻辑:

  1. 参数校验

    • 根据外部交易号,查询订单
    • 如果订单支付类型为微信支付
      • 根据外部交易号,查询微信支付统一下单接口
        • 如果支付成功
          • 根据外部交易号查询订单
          • 订单是否存在
          • 订单用户编号是否匹配
          • 订单状态为未支付
  2. 事务处理

    • 修改订单状态为已支付
    • 如果订单余额抵扣大于 0
    • 根据订单的角色编号查询用户钱包
      • 创建钱包明细
        • 钱包编号
        • 钱包明细类型为支付
        • 钱包明细金额为订单余额抵扣金额
        • 余额为钱包余额
        • 冻结金额为钱包冻结金额
        • 状态为已通过(已支付)
    • 用户钱包数据开启更新锁表
    • 扣除用户钱包余额
    • 创建订单历史:支付
  3. 发送异步抢单通知(比如对接极光推送)

开始服务

参数:
- 订单编号, 核销码
- 订单编号 通过路由获取
- 核销码 通过路由获取

后台逻辑:
1. 参数校验
- 如果订单编号存在
- 如果订单编号不为空,根据订单编号查询订单
- 订单状态为待服务
- 否则, 根据核销码查询订单
- 订单状态为待服务
- 根据订单接单技师查询用户技师数据
- 技师状态为正常
- 技师认证状态为已认证
2. 事务处理
- 修改订单状态为服务中
- 创建订单历史:服务(扫码)
3. 发送异步抢单通知(比如对接极光推送)

用户端接口

获取租户

参数: - 区域编号

后台逻辑:

  1. 根据区域数据编码查询租户信息
    • 如果租户信息不存在
      • 则依次按照区域编码按市、省、全国逐步查询,直至查找到租户信息
    • 返回租户信息
获取项目列表-租户项目

参数:

后台逻辑:

获取项目详情-租户项目

参数: - 项目编号,租户编号

后台逻辑:

  1. 参数校验
    • 根据项目编号查询项目
      • 项目存在
      • 项目状态为正常
    • 根据租户编号查询租户
      • 租户存在
      • 根据租户信息及项目编号查询租户项目数据
        • 项目状态为正常
  2. 返回租户项目详情
计算订单金额

参数:

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户
      • 用户状态为正常
    • 根据地址编号查询地址
      • 用户编号
      • 地址存在
    • 根据技师编号查询技师
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 计算金额
    • 订单金额=项目金额+路费金额+打赏金额-优惠卷金额
    • 项目金额=项目详情的项目金额
    • 路费金额=路费金额
    • 如果存在优惠卷编码,则根据优惠卷编号查询优惠卷
      • 优惠卷状态为正常
      • 优惠金额 = 优惠卷金额
    • 否则优惠金额 = 0
    • 如果路由存在参数订单编号
      • 打赏金额=订单打赏金额
      • 否则打赏金额 = 0
    • 如果使用余额抵扣
      • 根据用户编号查询用户钱包
      • 用户钱包余额大于等于订单金额
        • 余额抵扣金额=订单金额
        • 实付金额=0
      • 否则
        • 余额抵扣金额=用户钱包余额
        • 实付金额=订单金额-余额抵扣金额
    • 否则
      • 余额抵扣金额=0
      • 实付金额=订单金额
    • 返回
      • 订单金额
      • 余额抵扣金额
      • 实付金额
      • 优惠卷金额
      • 打赏金额
      • 项目金额
      • 路费金额
创建订单

参数:

涉及表和关键列:

后台逻辑:

  1. 参数校验

    • 根据用户编号查询用户
      • 用户状态为正常
    • 根据地址编号查询地址
      • 用户编号
      • 地址存在
    • 如果订单类型为常规
      • 根据技师编号查询技师
        • 技师状态为正常
        • 技师认证状态为已认证
    • 根据租户编号查询项目
      • 项目存在
      • 项目状态为正常
  2. 事务处理

  3. 发送异步抢单通知(比如对接极光推送)

获取项目列表-加钟

参数:

后台逻辑:

加钟

参数:

后台逻辑:

修改订单

参数:

后台逻辑:

指定技师(修改订单)

参数:

后台逻辑:

  1. 参数校验
    • 查询用户数据
      • 用户编号
      • 用户状态为正常
    • 查询订单数据
      • 用户编号
      • 订单编号
      • 订单状态为待抢单或待支付或已拒绝
    • 查询技师数据
      • 技师编号
      • 技师状态为正常
      • 技师认证状态为已认证
    • 查询技师排班数据
      • 技师编号
      • 排班日期为订单服务日期
      • 排班状态为空闲
  2. 事务处理
  1. 发送异步抢单通知(比如对接极光推送)
获取支付配置

参数:

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户
      • 用户状态是否开启
    • 根据订单编号查询订单
      • 订单是否存在
      • 订单用户编号是否匹配
      • 订单状态为未支付
  2. 生成微信 JSAPI 支付配置
    • 外部交易号
    • 支付配置
  3. 修改订单外部交易号为微信外部交易号
  4. 发送异步抢单通知(比如对接极光推送)
  5. 返回微信 JSAPI 支付配置
获取订单列表

参数: - 用户编号 通过 Auth::id() 获取

后台逻辑: - 根据用户编号查询订单列表 - 返回订单列表

获取订单详情

参数: - 用户编号 通过 Auth::id() 获取 - 订单编号

后台逻辑: - 根据用户编号、订单编号查询订单详情 - 返回订单详情

订单退款

参数:
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取

涉及表和关键列:
- 订单表
- 字段:编号, 用户编号, 状态
- 状态
- 待支付
- 待服务
- 待评价
- 已完成
- 已取消
- 订单历史记录表
- 字段:历史记录编号, 订单编号, 角色, 角色编号, 状态
- 角色
- 用户
- 技师
- 代理
- 状态
- 下单
- 接单
- 出发
- 到达
- 开始
- 结束
- 撤离
- 取消(退款)

后台逻辑:

  1. 查询订单
  1. 更新数据
订单初始化-前端初始化

参数:

后台逻辑:

结束订单

参数:

后台逻辑:

确认技师离开

参数:

后台逻辑:

用户取消订单

参数:

后台逻辑:

技师端接口

获取订单列表(抢单)

参数:

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 获取技师配置
    • 接单范围
  3. 查询技师定位数据
  4. 查询抢单类型订单列表
    • 订单状态为待抢单
    • 订单地区编码与技师定位地区编码匹配
    • 订单经纬度与技师定位经纬度在接单范围内
    • 抢单池中是否存在订单编号、技师编号的记录
      • 存在,记录抢单状态
      • 不存在,记录抢单状态为 0
  5. 返回订单列表
抢单

参数:

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 事务处理
    • 添加抢单池数据
      • 订单编号
      • 技师编号
      • 状态为抢单中
  3. 发送异步抢单通知(比如对接极光推送)
接单

参数:

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 事务处理
  3. 发送异步抢单通知(比如对接极光推送)
出发

参数:

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
    • 技师状态为正常
    • 技师认证状态为已认证
  2. 事务处理
  3. 发送异步抢单通知(比如对接极光推送)
到达

参数:

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 事务处理
  3. 发送异步抢单通知(比如对接极光推送)
撤离

参数:

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 事务处理
  3. 发送异步抢单通知(比如对接极光推送)
订单列表

参数:

后台逻辑:

拒绝接单

参数:

后台逻辑:

  1. 参数校验
    • 根据用户编号查询用户技师数据
      • 技师状态为正常
      • 技师认证状态为已认证
  2. 事务处理
  3. 发送异步抢单通知(比如对接极光推送)

四、钱包

提现

参数:
- 角色编号, 角色, 提现金额
- user_id 通过 Auth::id() 获取

涉及表和关键列:

后台逻辑:

退款

参数:
- 用户编号 通过 Auth::id() 获取
- 订单编号 通过路由获取

涉及表和关键列:
- 订单表
- 字段:编号, 用户编号, 状态
- 状态
- 待支付
- 待服务
- 待评价
- 已完成
- 已取消
- 订单历史记录表
- 字段:历史记录编号, 订单编号, 角色, 角色编号, 状态
- 角色
- 用户
- 技师
- 代理
- 状态
- 下单
- 接单
- 出发
- 到达
- 开始
- 结束
- 撤离
- 取消(退款)

后台逻辑:

  1. 查询钱包明细
    • 订单编号
    • 钱包明细类型为退款
    • 如果存在,则逻辑停止
  2. 查询订单记录
    • 订单编号
    • 状态存在已到达或开始服务,则停止逻辑
    • 状态不存在支付,则停止逻辑
  3. 更新数据
    • 开启事务

    • 计算退款金额

      • 订单金额 = 订单实际支付金额 加 订单使用余额抵扣金额
      • 如果记录订单状态不存在接单、出发
        • 退款金额 = 订单金额
      • 否则,如果记录订单状态存在出发
        • 退款金额 = (订单金额-订单车费金额) * 0.5
      • 否则,如果记录订单状态存在接单
        • 退款金额 = (订单金额-订单车费金额) * 0.2 + 订单车费金额
    • 钱包总额加退款金额

    • 添加钱包明细表

      • 钱包编号
      • 钱包明细类型为退款
      • 钱包明细金额为退款金额

分润

查询钱包

参数:
- 角色
- 角色编号
后台逻辑:
- 查询钱包数据
- 角色编号
- 角色
- 返回钱包数据

钱包明细

参数:
- 钱包编号

后台逻辑:
- 查询钱包明细数据
- 钱包编号
- 返回钱包明细数据

五、店铺

六、租户

程序详细设计

流程设计

总流程

技师注册流程

下单流程

服务流程

分账

业务模块

一、用户

二、技师

三、订单

四、钱包