app技师端.html 63 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626
  1. <!DOCTYPE html><html><head>
  2. <title>app技师端</title>
  3. <meta charset="utf-8">
  4. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  5. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css">
  6. <script src="https://cdn.jsdelivr.net/npm/mermaid@11.1.1/dist/mermaid.min.js"></script>
  7. <style>
  8. code[class*=language-],pre[class*=language-]{color:#333;background:0 0;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.4;-moz-tab-size:8;-o-tab-size:8;tab-size:8;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:.8em;overflow:auto;border-radius:3px;background:#f5f5f5}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal;background:#f5f5f5}.token.blockquote,.token.comment{color:#969896}.token.cdata{color:#183691}.token.doctype,.token.macro.property,.token.punctuation,.token.variable{color:#333}.token.builtin,.token.important,.token.keyword,.token.operator,.token.rule{color:#a71d5d}.token.attr-value,.token.regex,.token.string,.token.url{color:#183691}.token.atrule,.token.boolean,.token.code,.token.command,.token.constant,.token.entity,.token.number,.token.property,.token.symbol{color:#0086b3}.token.prolog,.token.selector,.token.tag{color:#63a35c}.token.attr-name,.token.class,.token.class-name,.token.function,.token.id,.token.namespace,.token.pseudo-class,.token.pseudo-element,.token.url-reference .token.variable{color:#795da3}.token.entity{cursor:help}.token.title,.token.title .token.punctuation{font-weight:700;color:#1d3e81}.token.list{color:#ed6a43}.token.inserted{background-color:#eaffea;color:#55a532}.token.deleted{background-color:#ffecec;color:#bd2c00}.token.bold{font-weight:700}.token.italic{font-style:italic}.language-json .token.property{color:#183691}.language-markup .token.tag .token.punctuation{color:#333}.language-css .token.function,code.language-css{color:#0086b3}.language-yaml .token.atrule{color:#63a35c}code.language-yaml{color:#183691}.language-ruby .token.function{color:#333}.language-markdown .token.url{color:#795da3}.language-makefile .token.symbol{color:#795da3}.language-makefile .token.variable{color:#183691}.language-makefile .token.builtin{color:#0086b3}.language-bash .token.keyword{color:#0086b3}pre[data-line]{position:relative;padding:1em 0 1em 3em}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24,20%,50%,.08);background:linear-gradient(to right,hsla(24,20%,50%,.1) 70%,hsla(24,20%,50%,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24,20%,50%,.4);color:#f4f1ef;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px #fff}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}html body{font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ol,html body>ul{margin-bottom:16px}html body ol,html body ul{padding-left:2em}html body ol.no-list,html body ul.no-list{padding:0;list-style-type:none}html body ol ol,html body ol ul,html body ul ol,html body ul ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;background-color:#f0f0f0;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:700;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::after,html body code::before{letter-spacing:-.2em;content:'\00a0'}html body pre>code{padding:0;margin:0;word-break:normal;white-space:pre;background:0 0;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:after,html body pre code:before,html body pre tt:after,html body pre tt:before{content:normal}html body blockquote,html body dl,html body ol,html body p,html body pre,html body ul{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body code,html body pre{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview ul{list-style:disc}.markdown-preview ul ul{list-style:circle}.markdown-preview ul ul ul{list-style:square}.markdown-preview ol{list-style:decimal}.markdown-preview ol ol,.markdown-preview ul ol{list-style-type:lower-roman}.markdown-preview ol ol ol,.markdown-preview ol ul ol,.markdown-preview ul ol ol,.markdown-preview ul ul ol{list-style-type:lower-alpha}.markdown-preview .newpage,.markdown-preview .pagebreak{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center!important}.markdown-preview:not([data-for=preview]) .code-chunk .code-chunk-btn-group{display:none}.markdown-preview:not([data-for=preview]) .code-chunk .status{display:none}.markdown-preview:not([data-for=preview]) .code-chunk .output-div{margin-bottom:16px}.markdown-preview .md-toc{padding:0}.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link{display:inline;padding:.25rem 0}.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link div,.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link p{display:inline}.markdown-preview .md-toc .md-toc-link-wrapper.highlighted .md-toc-link{font-weight:800}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,.66);border:4px solid rgba(150,150,150,.66);background-clip:content-box}html body[for=html-export]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0;min-height:100vh}@media screen and (min-width:914px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{font-size:14px!important;padding:1em}}@media print{html body[for=html-export]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=html-export]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,.66);border:4px solid rgba(150,150,150,.66);background-clip:content-box}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc{padding:0 16px}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link{display:inline;padding:.25rem 0}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link div,html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link p{display:inline}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper.highlighted .md-toc-link{font-weight:800}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 300px / 2);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=html-export]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=html-export]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
  9. /* Please visit the URL below for more information: */
  10. /* https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
  11. </style>
  12. <!-- The content below will be included at the end of the <head> element. --><script type="text/javascript">
  13. document.addEventListener("DOMContentLoaded", function () {
  14. // your code here
  15. });
  16. </script></head><body for="html-export">
  17. <div class="crossnote markdown-preview ">
  18. <h1 id="技师端-todolistmd">技师端 <a href="http://todolist.md">todolist.md</a> </h1>
  19. <h2 id="首页">首页 </h2>
  20. <ul>
  21. <li>上下班</li>
  22. <li>实时刷新定位技师经纬度</li>
  23. <li>简单版的个人信息
  24. <ul>
  25. <li>–Marked-- 工作照、星星等级、昵称、简介</li>
  26. <li>个人信息修改的静态页
  27. <ul>
  28. <li>昵称、手机号(可修改)、身份证、身份证正反面、手持身份证、营业执照、健康证、按摩证、合同</li>
  29. </ul>
  30. </li>
  31. <li>跳转到一个升星规则静态页面</li>
  32. <li>预览个人主页静态页</li>
  33. </ul>
  34. </li>
  35. <li>昵称 固定位置 所属店铺 星星等级(可跳转星星规则静态页) 工作状态 简介 资质审核状态 已完成订单数目 取消掉打卡 定位</li>
  36. <li>简介的接单设置信息
  37. <ul>
  38. <li>接单时间(排班,讨论) 接单距离 固定接单位置</li>
  39. <li>修改接单设置静态页
  40. <ul>
  41. <li>接单时间(排班,讨论) 客户性别 接单距离 固定接单位置</li>
  42. </ul>
  43. </li>
  44. </ul>
  45. </li>
  46. <li>简洁版项目设置
  47. <ul>
  48. <li>五大类平台定好的项目
  49. <ul>
  50. <li>项目名称 时长 价格</li>
  51. </ul>
  52. </li>
  53. <li>跳转到项目设置静态页</li>
  54. <li>展示五个项目的简洁版的信息,每个项目��以进行设置(漏了一个静态页UI)</li>
  55. <li>跳转到单个项目设置的静态页
  56. <ul>
  57. <li>项目价格 项目名称 时长 以及项目简单介绍</li>
  58. <li>设置的信息
  59. <ul>
  60. <li>服务客户 服务性别 代金卷设置(10 20 30 50) 免路费设置(单程、双程、全免)</li>
  61. </ul>
  62. </li>
  63. <li>项目描述:时长等等,预约须知</li>
  64. </ul>
  65. </li>
  66. </ul>
  67. </li>
  68. <li>我的订单
  69. <ul>
  70. <li>待抢订单 待接订单</li>
  71. <li>可以跳转到订单列表静态页</li>
  72. <li>补充抢单逻辑 全部显示抢单池数据,分两类 可抢订单排在上面 不可抢订单排在下面</li>
  73. </ul>
  74. </li>
  75. </ul>
  76. <h2 id="技师注册">技师注册 </h2>
  77. <ul>
  78. <li>第一步:用户端申请成为技师填写基本的个人信息</li>
  79. <li>第二步:客服登录后台管理进行审核
  80. <ul>
  81. <li>审核中:申请页面显示正在审核</li>
  82. <li>拒绝:可以修改个人信息重新申请</li>
  83. <li>通过:申请页面变成切换身份进入技师端</li>
  84. </ul>
  85. </li>
  86. <li>第三步:进入技师端进行支付宝实名认证、上传按摩证、营业执照、健康证、身份证正反面、手持身份证</li>
  87. <li>第四步:客服再次对技师进行审核</li>
  88. <li>第五步:签合同、生活照、工作照、个人简介</li>
  89. </ul>
  90. <div class="mermaid">graph TD
  91. A[用户端申请成为技师] --&gt; B[客服登录后台管理进行审核]
  92. B --&gt;|审核中| C[申请页面显示正在审核]
  93. B --&gt;|拒绝| D[可以修改个人信息重新申请]
  94. B --&gt;|通过| E[申请页面变成切换身份进入技��端]
  95. E --&gt; F[进入技师端]
  96. F --&gt; G[支付宝实名认证]
  97. G --&gt; H[上传按摩证、营业执照、健康证、身份证正反面、手持身份证,上传生活照、工作照、个人简介]
  98. H --&gt; I[客服再次对技师进行审核]
  99. I --&gt; J[签合同]
  100. J --&gt; Z[初始化项目设置、接单设置默认值,后台]
  101. </div><h2 id="接单流程技师角度">接单流程(技师角度) </h2>
  102. <h3 id="抢单">抢单 </h3>
  103. <ol>
  104. <li>用户:选项目,点下单</li>
  105. <li>后台:创一个不指定技师的项目订单 未支付 无技师</li>
  106. <li>技师:点抢单 显示全抢单池,不可抢得置灰,可以抢单的正常显示</li>
  107. <li>后台:查询某个技师抢单列表的逻辑,接单设置固定位置、距离、排班、实时位置,项目设置中性别、项目是否开通,开启抢单 关闭抢单。按照下单日期倒序排列</li>
  108. <li>技师: 点击立即抢单 作出个提示 ,显示已抢单,等待反选</li>
  109. <li>后台:将当前技师和订单加入抢单池,并记录状态 未反选状态</li>
  110. <li>用户:实时显示所有的抢单技师,点击某个技师</li>
  111. <li>后台:在抢单池中记录订单用户反选技师</li>
  112. <li>用户:复用支付流程</li>
  113. <li>技师:消息通知,消息通知静态页</li>
  114. </ol>
  115. <div class="mermaid">sequenceDiagram
  116. participant Alice
  117. participant John
  118. link Alice: Dashboard @ https://dashboard.contoso.com/alice
  119. link Alice: Wiki @ https://wiki.contoso.com/alice
  120. link John: Dashboard @ https://dashboard.contoso.com/john
  121. link John: Wiki @ https://wiki.contoso.com/john
  122. Alice-&gt;&gt;John: Hello John, how are you?
  123. John--&gt;&gt;Alice: Great!
  124. Alice-)John: See you later!
  125. </div><div class="mermaid">sequenceDiagram
  126. participant 用户
  127. participant 后台
  128. participant 技师
  129. autonumber
  130. 用户-&gt;&gt;+后台: 选项目,点下单
  131. 后台-&gt;&gt;后台: 1创建抢单订单
  132. 后台--&gt;&gt;用户: 订单创建成功
  133. 后台-&gt;&gt;技师: 显示抢单列表(通过抢单逻辑)
  134. 技师-&gt;&gt;后台: 点击立即抢单,作出提示
  135. 后台-&gt;&gt;后台: 2-技师抢单创建抢单池
  136. 用户-&gt;&gt;后台: 实时显示所有的抢单技师,点击某个技师
  137. 后台-&gt;&gt;后台: 3.用户反选技师
  138. 后台--&gt;&gt;用户: 订单反选成功
  139. 用户-&gt;&gt;后台: 复用支付流程
  140. 后台-&gt;&gt;技师: 消息通知
  141. </div><h4 id="1创建抢单订单">1.创建抢单订单 </h4>
  142. <p><strong>用户端</strong>:<br>
  143. <img src="assets\170_1725348471_hd.jpeg" alt=""></p>
  144. <p><strong>参数</strong>:<br>
  145. - user_id, project_id, address_id</p>
  146. <p><strong>涉及表和关键列</strong>:</p>
  147. <ul>
  148. <li>
  149. <p>订单表:service_order</p>
  150. <ul>
  151. <li>
  152. <p>必填字段:id,order_sn, user_id, user_name,mobile, address,real_address,address_lng,address_lat, adcode, project_id, project_name, project_sub_title,project_icon,service_price, type,status, created_at, updated_at</p>
  153. </li>
  154. <li>
  155. <p>订单类型字段: type</p>
  156. <ul>
  157. <li>0: 正常订单</li>
  158. <li>1: 抢单订单</li>
  159. </ul>
  160. </li>
  161. <li>
  162. <p>状态机字段:status</p>
  163. <ul>
  164. <li>0: 待抢单</li>
  165. </ul>
  166. </li>
  167. </ul>
  168. </li>
  169. <li>
  170. <p>用户表: member_user</p>
  171. </li>
  172. <li>
  173. <p>用户地址表: member_address</p>
  174. </li>
  175. <li>
  176. <p>项目表: service_project</p>
  177. </li>
  178. </ul>
  179. <p><strong>后台逻辑</strong>:</p>
  180. <ol>
  181. <li>根据用户编号和地址编号查询详情数据,通过项目编号获取项目数据。
  182. <ul>
  183. <li>用户数据存在,并且用户状态为正常(status = 1)</li>
  184. <li>地址数据存在</li>
  185. <li>项目数据存在,并且项目状态为正常(status = 1)</li>
  186. </ul>
  187. </li>
  188. <li>通过已上查询的数据,创建订单数据,要求:
  189. <ul>
  190. <li>请自动填写相同名称的字段</li>
  191. <li>type = 1</li>
  192. <li>status = 0</li>
  193. </ul>
  194. </li>
  195. <li>发送异步抢单通知(比如对接极光推送)</li>
  196. </ol>
  197. <h4 id="2技师抢单创建抢单池">2.技师抢单创建抢单池 </h4>
  198. <p><strong>参数</strong>:</p>
  199. <ul>
  200. <li>user_id, order_id, coach_id</li>
  201. <li>user_id 通过 Auth::id() 获取</li>
  202. </ul>
  203. <p><strong>涉及表和关键列</strong>:</p>
  204. <ul>
  205. <li>抢单池:service_order_grab
  206. <ul>
  207. <li>必填字段:id, order_id, coach_id, status, created_at, updated_at</li>
  208. <li>状态字段:status
  209. <ul>
  210. <li>0: 参与抢单</li>
  211. <li>1: 抢单成功</li>
  212. <li>2: 抢单失败</li>
  213. </ul>
  214. </li>
  215. </ul>
  216. </li>
  217. <li>订单:service_order
  218. <ul>
  219. <li>必填字段:id,type,status</li>
  220. <li>订单类型字段: type
  221. <ul>
  222. <li>0: 正常订单</li>
  223. <li>1: 抢单订单</li>
  224. </ul>
  225. </li>
  226. <li>状态字段:status
  227. <ul>
  228. <li>0: 待抢单</li>
  229. </ul>
  230. </li>
  231. </ul>
  232. </li>
  233. <li>技师:coach_users
  234. <ul>
  235. <li>字段:user_id, status</li>
  236. <li>状态字段:status
  237. <ul>
  238. <li>0: 禁用</li>
  239. <li>1: 正常</li>
  240. </ul>
  241. </li>
  242. </ul>
  243. </li>
  244. </ul>
  245. <p><strong>后台逻辑</strong>:</p>
  246. <ol>
  247. <li>通过编号查订单,条件是:
  248. <ul>
  249. <li>订单数据存在,并且状态为待抢单</li>
  250. <li>订单没有指派技师</li>
  251. <li>订单类型为抢单订单</li>
  252. </ul>
  253. </li>
  254. <li>通过用户编号查技师,条件是:
  255. <ul>
  256. <li>技师数据存在,并且技师状态为正常</li>
  257. </ul>
  258. </li>
  259. <li>通过以上数据,创建订单池,要求:
  260. <ul>
  261. <li>请自动填写相同名称的字段</li>
  262. <li>订单池状态为参与抢单</li>
  263. </ul>
  264. </li>
  265. <li>发送异步抢单通知(比如对接极光推送)</li>
  266. </ol>
  267. <h4 id="3-用户反选技师指定抢单池">3. 用户反选技师(指定抢单池) </h4>
  268. <p><strong>参数</strong>:</p>
  269. <ul>
  270. <li>user_id, order_id, coach_id</li>
  271. <li>user_id 通过 Auth::id() 获取</li>
  272. </ul>
  273. <p><strong>涉及表和关键列</strong>:</p>
  274. <ul>
  275. <li>抢单池:service_order_grab_pool
  276. <ul>
  277. <li>必填字段:id, order_id, coach_id, status, created_at, updated_at</li>
  278. <li>状态字段:status
  279. <ul>
  280. <li>0: 参与抢单</li>
  281. <li>1: 抢单成功</li>
  282. <li>2: 抢单失败</li>
  283. </ul>
  284. </li>
  285. </ul>
  286. </li>
  287. <li>订单:service_order
  288. <ul>
  289. <li>必填字段:id,type,status</li>
  290. <li>订单类型字段: type
  291. <ul>
  292. <li>0: 正常订单</li>
  293. <li>1: 抢单订单</li>
  294. </ul>
  295. </li>
  296. <li>状态字段:status
  297. <ul>
  298. <li>0: 待抢单</li>
  299. </ul>
  300. </li>
  301. </ul>
  302. </li>
  303. </ul>
  304. <p><strong>后台逻辑</strong>:</p>
  305. <ol>
  306. <li>通过编号查订单,条件是:
  307. <ul>
  308. <li>订单数据存在,并且状态为待抢单</li>
  309. <li>订单没有指派技师</li>
  310. <li>订单类型为抢单订单</li>
  311. </ul>
  312. </li>
  313. <li>通过编号查技师,条件是:
  314. <ul>
  315. <li>技师数据存在,并且技师状态为正常</li>
  316. </ul>
  317. </li>
  318. <li>通过以上数据,修改订单池,要求:
  319. <ul>
  320. <li>技师编号来自参数</li>
  321. <li>订单池状态改为抢单成功</li>
  322. </ul>
  323. </li>
  324. <li>发送异步抢单通知(比如对接极光推送)</li>
  325. </ol>
  326. <hr>
  327. <h3 id="服务流程">服务流程 </h3>
  328. <ol>
  329. <li>技师:技师接单成功 显示 取消订单 开始出发,点开始出发</li>
  330. <li>后台:记录技师开始出发时间,经纬度以及当前位置 订单状态变为已出发</li>
  331. <li>用户:显示该订单技师已出发 取消订单</li>
  332. <li>技师:点击已到达,并拍照 已到达</li>
  333. <li>后台:记录技师经纬度和到达时间 订单状态改为已到达</li>
  334. <li>用户:显示已到达显示服务二维码</li>
  335. <li>技师:开始服务方式:扫码用户的服务二维码</li>
  336. <li>后台:订单状态改为 服务中</li>
  337. <li>用户:显示倒计时,结束订单 确认技师离开 再次购买 删除订单</li>
  338. <li>技师: 拍单元楼上传 拍照结束 按钮</li>
  339. <li>后台:订单状态改为 服务结束 已撤离</li>
  340. </ol>
  341. <div class="mermaid">sequenceDiagram
  342. participant 用户
  343. participant 后台
  344. participant 技师
  345. 技师-&gt;&gt;后台: 技师接单成功
  346. 后台-&gt;&gt;后台: 1. 技师接单
  347. 技师--&gt;&gt;技师: 显示 开始出发
  348. 技师-&gt;&gt;后台: 点开始出发
  349. 后台-&gt;&gt;后台: 记录技师开始出发时间,经纬度以及当前位置,订单状态变为已出发[^1]
  350. 后台--&gt;&gt;用户: 订单状态变为已出发
  351. 技师-&gt;&gt;后台: 点击已到达,并拍照
  352. 后台-&gt;&gt;后台: 记录技师经纬度和到达时间,订单状态改为已到达[^2]
  353. 后台--&gt;&gt;用户: 订单状态改为已到达
  354. 用户--&gt;&gt;用户: 显示状态已到达(显示二维码页面)
  355. 技师-&gt;&gt;用户: 扫用户的二维码
  356. 技师-&gt;&gt;后台: 扫码发起开始服务请求
  357. 后台-&gt;&gt;后台: 订单状态改为 服务中[^3]
  358. 用户--&gt;&gt;用户: 显示服务倒计时(自动跳转服务详情页面)
  359. 后台--&gt;&gt;用户: 订单状态改为 服务中
  360. 用户-&gt;&gt;后台: 显示倒计时,点击结束订单
  361. 用户-&gt;&gt;后台: 在结束订单页面,点击"确认技师离开"
  362. 后台--&gt;&gt;技师: 收到订单结束通知
  363. 技师-&gt;&gt;后台: 拍照,点确认撤离
  364. 后台-&gt;&gt;后台: 订单状态改为 服务结束[^4]
  365. </div><hr>
  366. <h3 id="接单">接单 </h3>
  367. <ol>
  368. <li>用户: 指定技师下单,立即结算</li>
  369. <li>后台: 创建一个新的订单</li>
  370. <li>技师: 确认接单</li>
  371. <li>后台: 改变订单状态为已接单</li>
  372. <li>用户: 已接单</li>
  373. <li>技师: 开始出发</li>
  374. <li>后台: 改变订单状态为已出发</li>
  375. <li>用户: 技师已出发</li>
  376. <li>技师: 已到达,拍照</li>
  377. <li>后台: 改变订单状态为已到达</li>
  378. <li>用户: 已到达,显示二维码</li>
  379. <li>技师: 扫描二维码</li>
  380. <li>后台: 订单状态改为开始服务</li>
  381. <li>用户: 结束订单</li>
  382. <li>后台: 订单改为服务结束</li>
  383. <li>用户: 确认技师离开</li>
  384. <li>技师: 撤离,拍照</li>
  385. <li>后台: 自动服务结束</li>
  386. <li>用户: 确认技师离开</li>
  387. <li>技师: 撤离,拍照</li>
  388. </ol>
  389. <div class="mermaid">sequenceDiagram
  390. participant 用户
  391. participant 后台
  392. participant 技师
  393. 用户-&gt;&gt;后台: 指定技师下单,点击立即结算
  394. 后台-&gt;&gt;后台: 1. 创建订单
  395. 后台--&gt;&gt;用户: 订单创建成功
  396. 技师-&gt;&gt;后台: 确认接单
  397. 后台-&gt;&gt;后台: 2. 改变订单状态为已接单
  398. 后台--&gt;&gt;用户: 订单状态变为已接单
  399. 技师-&gt;&gt;后台: 开始出发
  400. 后台-&gt;&gt;后台: 3. 改变订单状态为已出发
  401. 后台--&gt;&gt;用户: 订单状态变为已出发
  402. 技师-&gt;&gt;后台: 已到达,拍照
  403. 后台-&gt;&gt;后台: 4. 改变订单状态为已到达
  404. 后台--&gt;&gt;用户: 订单状态变为已到达
  405. 用户-&gt;&gt;用户: 已到达,显示二维码
  406. 技师-&gt;&gt;用户: 扫描二维码
  407. 后台-&gt;&gt;后台: 5. 订单状态改为服务中
  408. 后台--&gt;&gt;用户: 订单状态变为服务中
  409. 后台--&gt;&gt;技师: 订单状态变为服务中
  410. 用户-&gt;&gt;后台: 第一种:结束订单
  411. 后台-&gt;&gt;后台: 6. 订单改为服务结束
  412. 后台--&gt;&gt;技师: 订单改为服务结束
  413. 后台--&gt;&gt;用户: 订单状态变为服务结束
  414. 用户-&gt;&gt;用户: 确认技师离开
  415. 用户-&gt;&gt;后台: 技师离开
  416. 后台-&gt;&gt;后台: 7.订单更改状态为技师离开
  417. 技师-&gt;&gt;后台: 点击撤离,拍照
  418. 后台-&gt;&gt;后台: 8. 第二种:服务时间结束
  419. 后台--&gt;&gt;用户: 服务结束
  420. 后台--&gt;&gt;技师: 服务结束
  421. 用户-&gt;&gt;后台: 确认技师离开
  422. 技师-&gt;&gt;后台: 撤离,拍照
  423. 后台-&gt;&gt;后台: 9. 技师撤离
  424. 后台--&gt;&gt;用户: 技师撤离 订单完成
  425. 后台--&gt;&gt;技师: 技师撤离 订单完成
  426. </div><h4 id="1-创建订单">1. 创建订单 </h4>
  427. <p><strong>参数</strong>:<br>
  428. - user_id, project_id, address_id, coach_id, pay_type, is_balance<br>
  429. - user_id 通过 Auth::id() 获取</p>
  430. <p><strong>涉及表和关键列</strong>:</p>
  431. <ul>
  432. <li>
  433. <p>订单表:service_order</p>
  434. <ul>
  435. <li>
  436. <p>必填字段:id,order_sn, user_id, user_name,mobile, address,real_address,address_lng,address_lat, adcode, project_id, project_name, project_sub_title,project_icon,service_price, coach_id, pay_type, type,status, created_at, updated_at</p>
  437. </li>
  438. <li>
  439. <p>订单类型字段: type</p>
  440. <ul>
  441. <li>0: 正常订单</li>
  442. <li>1: 抢单订单</li>
  443. </ul>
  444. </li>
  445. <li>
  446. <p>状态机字段:status</p>
  447. <ul>
  448. <li>0: 待抢单</li>
  449. </ul>
  450. </li>
  451. <li>
  452. <p>支付类型字段:pay_type</p>
  453. <ul>
  454. <li>0: 余额支付</li>
  455. <li>1: 微信支付</li>
  456. <li>2: 支付宝支付</li>
  457. </ul>
  458. </li>
  459. <li>
  460. <p>订单类型:type</p>
  461. <ul>
  462. <li>0:常规订单</li>
  463. <li>1:抢单订单</li>
  464. </ul>
  465. </li>
  466. </ul>
  467. </li>
  468. <li>
  469. <p>用户表: member_user</p>
  470. <ul>
  471. <li>字段:balance, status</li>
  472. <li>状态字段:status
  473. <ul>
  474. <li>0: 禁用</li>
  475. <li>1: 正常</li>
  476. </ul>
  477. </li>
  478. </ul>
  479. </li>
  480. <li>
  481. <p>用户地址表: member_address</p>
  482. </li>
  483. <li>
  484. <p>项目表: service_project</p>
  485. <ul>
  486. <li>字段:id, status</li>
  487. <li>状态字段:status
  488. <ul>
  489. <li>0: 禁用</li>
  490. <li>1: 正常</li>
  491. </ul>
  492. </li>
  493. </ul>
  494. </li>
  495. <li>
  496. <p>技师表:coach_users</p>
  497. <ul>
  498. <li>字段:user_id, status</li>
  499. <li>状态字段:status
  500. <ul>
  501. <li>0: 禁用</li>
  502. <li>1: 正常</li>
  503. </ul>
  504. </li>
  505. </ul>
  506. </li>
  507. </ul>
  508. <p><strong>后台逻辑</strong>:</p>
  509. <ol>
  510. <li>根据用户编号和地址编号、技师编号查询详情数据,通过项目编号获取项目数据。
  511. <ul>
  512. <li>用户数据存在,并且用户状态为正常</li>
  513. <li>地址数据存在</li>
  514. <li>项目数据存在,并且项目状态为正常</li>
  515. <li>技师数据存在,并且项目状态为正常</li>
  516. </ul>
  517. </li>
  518. <li>通过已上查询的数据,创建订单数据,要求:
  519. <ul>
  520. <li>请自动填写相同名称的字段</li>
  521. <li>订单类型为常规订单</li>
  522. <li>如果使用余额支付
  523. <ul>
  524. <li>用户余额足够支付项目金额
  525. <ul>
  526. <li>则订单状态为已支付</li>
  527. <li>否则订单状态为未支付</li>
  528. </ul>
  529. </li>
  530. </ul>
  531. </li>
  532. <li>如果使用微信支付或支付宝支付
  533. <ul>
  534. <li>订单状态为未支付</li>
  535. </ul>
  536. </li>
  537. <li>指定技师</li>
  538. </ul>
  539. </li>
  540. </ol>
  541. <div class="mermaid">flowchart TD
  542. A[开始] --&gt; B[获取用户数据]
  543. B --&gt; C{用户状态正常?}
  544. C --&gt;|是| D[获取地址数据]
  545. C --&gt;|否| Z[结束]
  546. D --&gt; E[获取项目数据]
  547. E --&gt; F{项目状态正常?}
  548. F --&gt;|是| G[获取技师数据]
  549. F --&gt;|否| Z
  550. G --&gt; H{技师状态正常?}
  551. H --&gt;|是| I[创建订单]
  552. H --&gt;|否| Z
  553. I --&gt; J{支付类型}
  554. J --&gt;|余额支付| K{余额足够?}
  555. J --&gt;|微信支付或支付宝支付| M[订单状态: 未支付]
  556. K --&gt;|是| L[订单状态: 已支付]
  557. K --&gt;|否| M
  558. L --&gt; N[指定技师]
  559. M --&gt; N
  560. N --&gt; O[发送异步抢单通知]
  561. O --&gt; Z[结束]
  562. </div><ol start="3">
  563. <li>发送异步抢单通知(比如对接极光推送)</li>
  564. </ol>
  565. <h4 id="2-改变订单状态为已接单技师端">2. 改变订单状态为已接单(技师端) </h4>
  566. <p><strong>参数</strong>:</p>
  567. <ul>
  568. <li>user_id, order_id</li>
  569. <li>user_id 通过 Auth::id() 获取</li>
  570. </ul>
  571. <p><strong>涉及表和关键列</strong>:</p>
  572. <ul>
  573. <li>订单:service_order
  574. <ul>
  575. <li>必填字段:id,status,coach_id</li>
  576. <li>状态字段:status
  577. <ul>
  578. <li>0: 未支付</li>
  579. <li>1: 已支付</li>
  580. <li>2: 已接单</li>
  581. </ul>
  582. </li>
  583. </ul>
  584. </li>
  585. <li>技师:coach_users
  586. <ul>
  587. <li>字段:user_id, status</li>
  588. <li>状态字段:status
  589. <ul>
  590. <li>0: 禁用</li>
  591. <li>1: 正常</li>
  592. </ul>
  593. </li>
  594. </ul>
  595. </li>
  596. </ul>
  597. <p><strong>后台逻辑</strong>:</p>
  598. <ol>
  599. <li>通过编号查订单,条件是:
  600. <ul>
  601. <li>订单数据存在,并且状态为已支付</li>
  602. <li>订单有指派技师,并且技师的用户编号等于参数中的用户编号</li>
  603. <li>订单类型为常规订单</li>
  604. </ul>
  605. </li>
  606. <li>通过用户编号查技师,条件是:
  607. <ul>
  608. <li>技师数据存在,并且技师状态为正常</li>
  609. </ul>
  610. </li>
  611. <li>通过以上数据,修改订单数据,要求:
  612. <ul>
  613. <li>请自动填写相同名称的字段</li>
  614. <li>订单状态为已接单</li>
  615. </ul>
  616. </li>
  617. <li>发送异步抢单通知(比如对接极光推送)</li>
  618. </ol>
  619. <div class="mermaid">flowchart TD
  620. A[开始] --&gt; B[通过编号查订单]
  621. B --&gt; C{订单状态为已支付?}
  622. C --&gt;|是| D{订单有指派技师?}
  623. C --&gt;|否| Z[结束]
  624. D --&gt;|是| E{技师用户编号匹配?}
  625. D --&gt;|否| Z
  626. E --&gt;|是| F[通过用户编号查技师]
  627. E --&gt;|否| Z
  628. F --&gt; G{技师状态为正常?}
  629. G --&gt;|是| H[修改订单数据]
  630. G --&gt;|否| Z
  631. H --&gt; I[订单状态改为已接单]
  632. I --&gt; J[发送异步抢单通知]
  633. J --&gt; Z[结束]
  634. </div><h3 id="3-改变订单状态为已出发技师端">3. 改变订单状态为已出发(技师端) </h3>
  635. <p><strong>参数</strong>:</p>
  636. <ul>
  637. <li>user_id, order_id</li>
  638. <li>user_id 通过 Auth::id() 获取</li>
  639. </ul>
  640. <p><strong>涉及表和关键列</strong>:</p>
  641. <ul>
  642. <li>订单:service_order
  643. <ul>
  644. <li>必填字段:id,status,coach_id</li>
  645. <li>状态字段:status
  646. <ul>
  647. <li>0: 未支付</li>
  648. <li>1: 已支付</li>
  649. <li>2: 已接单</li>
  650. <li>3: 已出发</li>
  651. </ul>
  652. </li>
  653. </ul>
  654. </li>
  655. <li>技师:coach_users
  656. <ul>
  657. <li>字段:user_id, status</li>
  658. <li>状态字段:status
  659. <ul>
  660. <li>0: 禁用</li>
  661. <li>1: 正常</li>
  662. </ul>
  663. </li>
  664. </ul>
  665. </li>
  666. </ul>
  667. <p><strong>后台逻辑</strong>:</p>
  668. <ol>
  669. <li>通过编号查订单,条件是:
  670. <ul>
  671. <li>订单数据存在,并且状态为已接单</li>
  672. <li>订单有指派技师,并且技师的用户编号等于参数中的用户编号</li>
  673. </ul>
  674. </li>
  675. <li>通过用户编号查技师,条件是:
  676. <ul>
  677. <li>技师数据存在,并且技师状态为正常</li>
  678. </ul>
  679. </li>
  680. <li>通过以上数据,修改订单数据,要求:
  681. <ul>
  682. <li>请自动填写相同名称的字段</li>
  683. <li>订单状态为已出发</li>
  684. </ul>
  685. </li>
  686. <li>发送异步抢单通知(比如对接极光推送)</li>
  687. </ol>
  688. <div class="mermaid">flowchart TD
  689. A[开始] --&gt; B[通过编号查订单]
  690. B --&gt; C{订单状态为已接单?}
  691. C --&gt;|是| D{订单有指派技师?}
  692. C --&gt;|否| Z[结束]
  693. D --&gt;|是| E{技师用户编号匹配?}
  694. D --&gt;|否| Z
  695. E --&gt;|是| F[通过用户编号查技师]
  696. E --&gt;|否| Z
  697. F --&gt; G{技师状态为正常?}
  698. G --&gt;|是| H[修改订单数据]
  699. G --&gt;|否| Z
  700. H --&gt; I[订单状态改为已出发]
  701. I --&gt; J[发送异步抢单通知]
  702. J --&gt; Z[结束]
  703. </div><h3 id="4-改变订单状态为已到达">4. 改变订单状态为已到达 </h3>
  704. <p><strong>参数</strong>:</p>
  705. <ul>
  706. <li>user_id, order_id</li>
  707. <li>user_id 通过 Auth::id() 获取<br>
  708. <strong>涉及表和关键列</strong>:</li>
  709. <li>订单:service_order
  710. <ul>
  711. <li>必填字段:id,status,coach_id</li>
  712. <li>状态字段:status
  713. <ul>
  714. <li>0: 未支付</li>
  715. <li>1: 已支付</li>
  716. <li>2: 已接单</li>
  717. <li>3: 已出发</li>
  718. <li>4: 已到达</li>
  719. </ul>
  720. </li>
  721. </ul>
  722. </li>
  723. <li>技师:coach_users
  724. <ul>
  725. <li>字段:user_id, status</li>
  726. <li>状态字段:status
  727. <ul>
  728. <li>0: 禁用</li>
  729. <li>1: 正常</li>
  730. </ul>
  731. </li>
  732. </ul>
  733. </li>
  734. </ul>
  735. <p><strong>后台逻辑</strong>:</p>
  736. <ol>
  737. <li>通过编号查订单,条件是:
  738. <ul>
  739. <li>订单数据存在,并且状态为已出发</li>
  740. <li>订单有指派技师,并且技师的用户编号等于参数中的用户编号</li>
  741. </ul>
  742. </li>
  743. <li>通过用户编号查技师,条件是:
  744. <ul>
  745. <li>技师数据存在,并且技师状态为正常</li>
  746. </ul>
  747. </li>
  748. <li>通过以上数据,修改订单数据,要求:
  749. <ul>
  750. <li>请自动填写相同名称的字段</li>
  751. <li>订单状态为已到达</li>
  752. </ul>
  753. </li>
  754. <li>发送异步抢单通知(比如对接极光推送)</li>
  755. </ol>
  756. <h3 id="5-订单状态改为服务中技师端">5. 订单状态改为服务中(技师端) </h3>
  757. <p><strong>参数</strong>:</p>
  758. <ul>
  759. <li>user_id, order_id</li>
  760. <li>user_id 通过 Auth::id() 获取<br>
  761. <strong>涉及表和关键列</strong>:</li>
  762. <li>订单:service_order
  763. <ul>
  764. <li>必填字段:id,status,coach_id,time_long</li>
  765. <li>状态字段:status
  766. <ul>
  767. <li>0: 未支付</li>
  768. <li>1: 已支付</li>
  769. <li>2: 已接单</li>
  770. <li>3: 已出发</li>
  771. <li>4: 已到达</li>
  772. <li>5: 服务中</li>
  773. </ul>
  774. </li>
  775. </ul>
  776. </li>
  777. <li>技师:coach_users
  778. <ul>
  779. <li>字段:user_id, status</li>
  780. <li>状态字段:status
  781. <ul>
  782. <li>0: 禁用</li>
  783. <li>1: 正常</li>
  784. </ul>
  785. </li>
  786. </ul>
  787. </li>
  788. </ul>
  789. <p><strong>后台逻辑</strong>:</p>
  790. <ol>
  791. <li>通过编号查订单,条件是:
  792. <ul>
  793. <li>订单数据存在,并且状态为已到达</li>
  794. <li>订单有指派技师,并且技师的用户编号等于参数中的用户编号</li>
  795. </ul>
  796. </li>
  797. <li>通过用户编号查技师,条件是:
  798. <ul>
  799. <li>技师数据存在,并且技师状态为正常</li>
  800. </ul>
  801. </li>
  802. <li>通过以上数据,修改订单数据,要求:
  803. <ul>
  804. <li>请自动填写相同名称的字段</li>
  805. <li>订单状态为服务中</li>
  806. <li>订单服务开始时间</li>
  807. <li>根据服务时长计算订单服务结束时间</li>
  808. </ul>
  809. </li>
  810. <li>发送异步抢单通知(比如对接极光推送)</li>
  811. </ol>
  812. <h3 id="6-订单改为服务结束用户端结束订单">6. 订单改为服务结束(用户端结束订单) </h3>
  813. <p><strong>参数</strong>:</p>
  814. <ul>
  815. <li>user_id, order_id</li>
  816. <li>user_id 通过 Auth::id() 获取<br>
  817. <strong>涉及表和关键列</strong>:</li>
  818. <li>订单:service_order
  819. <ul>
  820. <li>必填字段:id, status, coach_id, user_end</li>
  821. <li>状态字段:status
  822. <ul>
  823. <li>0: 未支付</li>
  824. <li>1: 已支付</li>
  825. <li>2: 已接单</li>
  826. <li>3: 已出发</li>
  827. <li>4: 已到达</li>
  828. <li>5: 服务中</li>
  829. <li>6: 服务结束</li>
  830. </ul>
  831. </li>
  832. <li>状态字段:user_end
  833. <ul>
  834. <li>0: 未结束</li>
  835. <li>1: 结束</li>
  836. </ul>
  837. </li>
  838. </ul>
  839. </li>
  840. </ul>
  841. <p><strong>后台逻辑</strong>:</p>
  842. <ol>
  843. <li>通过编号及用户编号查订单,条件是:
  844. <ul>
  845. <li>订单数据存在,并且状态为服务中</li>
  846. <li>订单有指派技师</li>
  847. </ul>
  848. </li>
  849. <li>通过以上数据,修改订单数据,要求:
  850. <ul>
  851. <li>订单状态为服务结束</li>
  852. <li>订单服务结束时间</li>
  853. <li>用户确认结束</li>
  854. </ul>
  855. </li>
  856. <li>发送异步抢单通知(比如对接极光推送)</li>
  857. </ol>
  858. <h3 id="7-订单更改状态为技师离开用户端确认技师离开">7. 订单更改状态为技师离开(用户端确认技师离开) </h3>
  859. <p><strong>参数</strong>:</p>
  860. <ul>
  861. <li>user_id, order_id</li>
  862. <li>user_id 通过 Auth::id() 获取<br>
  863. <strong>涉及表和关键列</strong>:</li>
  864. <li>订单:service_order
  865. <ul>
  866. <li>必填字段:id,user_confirm_leave,user_confirm_leave_time</li>
  867. <li>用户确认技师撤离字段:user_confirm_leave
  868. <ul>
  869. <li>0: 未确认</li>
  870. <li>1: 已确认</li>
  871. </ul>
  872. </li>
  873. <li>状态字段:status
  874. <ul>
  875. <li>0: 未支付</li>
  876. <li>1: 已支付</li>
  877. <li>2: 已接单</li>
  878. <li>3: 已出发</li>
  879. <li>4: 已到达</li>
  880. <li>5: 服务中</li>
  881. <li>6: 服务结束<br>
  882. <strong>后台逻辑</strong>:</li>
  883. </ul>
  884. </li>
  885. </ul>
  886. </li>
  887. </ul>
  888. <ol>
  889. <li>通过编号及用户编号查订单,条件是:
  890. <ul>
  891. <li>订单数据存在,并且状态为服务结束</li>
  892. <li>订单有指派技师</li>
  893. </ul>
  894. </li>
  895. <li>通过以上数据,修改订单数据,要求:
  896. <ul>
  897. <li>订单用户确认离开</li>
  898. <li>订单用户确认离开时间</li>
  899. </ul>
  900. </li>
  901. <li>发送异步抢单通知(比如对接极光推送)</li>
  902. </ol>
  903. <div class="mermaid">flowchart TD
  904. A[开始] --&gt; B[通过编号及用户编号查订单]
  905. B --&gt; C{订单状态为服务结束?}
  906. C --&gt;|是| D{订单有指派技师?}
  907. C --&gt;|否| Z[结束]
  908. D --&gt;|是| E[修改订单数据]
  909. D --&gt;|否| Z
  910. E --&gt; F[订单用户确认离开]
  911. F --&gt; G[订单用户确认离开时间]
  912. G --&gt; H[发送异步抢单通知]
  913. H --&gt; Z[结束]
  914. </div><h3 id="8-第二种服务时间结束后台自动服务结束">8. 第二种:服务时间结束(后台自动服务结束) </h3>
  915. <p><strong>参数</strong>:</p>
  916. <ul>
  917. <li>order_id<br>
  918. <strong>涉及表和关键列</strong>:</li>
  919. <li>订单:service_order
  920. <ul>
  921. <li>必填字段:id, end_time</li>
  922. <li>用户确认技师撤离字段:user_confirm_leave
  923. <ul>
  924. <li>0: 未确认</li>
  925. <li>1: 已确认</li>
  926. </ul>
  927. </li>
  928. <li>状态字段:status
  929. <ul>
  930. <li>0: 未支付</li>
  931. <li>1: 已支付</li>
  932. <li>2: 已接单</li>
  933. <li>3: 已出发</li>
  934. <li>4: 已到达</li>
  935. <li>5: 服务中</li>
  936. <li>6: 服务结束</li>
  937. <li>7: 已撤离</li>
  938. <li>8: 已评价</li>
  939. <li>9: 已取消(退款中)</li>
  940. <li>10: 已退款</li>
  941. </ul>
  942. </li>
  943. </ul>
  944. </li>
  945. </ul>
  946. <p><strong>后台逻辑</strong>:</p>
  947. <ol>
  948. <li>通过编号查订单,条件是:
  949. <ul>
  950. <li>订单数据存在,并且状态为服务中</li>
  951. <li>订单有指派技师</li>
  952. </ul>
  953. </li>
  954. <li>通过订单服务结束时间,判断是否结束
  955. <ul>
  956. <li>如果服务结束时间小于等于当前时间,则订单状态为服务结束</li>
  957. </ul>
  958. </li>
  959. <li>发送异步抢单通知(比如对接极光推送)</li>
  960. </ol>
  961. <h3 id="9-技师撤离技师端">9. 技师撤离(技师端) </h3>
  962. <p><strong>参数</strong>:</p>
  963. <ul>
  964. <li>user_id, order_id</li>
  965. <li>user_id 通过 Auth::id() 获取<br>
  966. <strong>涉及表和关键列</strong>:</li>
  967. <li>订单:service_order
  968. <ul>
  969. <li>必填字段:id,status,coach_id, user_confirm_leave, leave_time, service_price</li>
  970. <li>状态字段:status
  971. <ul>
  972. <li>0: 未支付</li>
  973. <li>1: 已支付</li>
  974. <li>2: 已接单</li>
  975. <li>3: 已出发</li>
  976. <li>4: 已到达</li>
  977. <li>5: 服务中</li>
  978. <li>6: 服务结束</li>
  979. <li>7: 已撤离</li>
  980. </ul>
  981. </li>
  982. <li>用户确认技师撤离字段:user_confirm_leave
  983. <ul>
  984. <li>0: 未确认</li>
  985. <li>1: 已确认</li>
  986. </ul>
  987. </li>
  988. </ul>
  989. </li>
  990. <li>收益:member_benefit
  991. <ul>
  992. <li>必填字段:order_id, user_id, benefit, balance, type, created_at, updated_at</li>
  993. <li>类型字段:type
  994. <ul>
  995. <li>1: 支付</li>
  996. <li>2: 退款</li>
  997. <li>3: 扣除</li>
  998. <li>4: 提现</li>
  999. <li>5: 返还</li>
  1000. <li>6: 收益</li>
  1001. <li>8: 赠送</li>
  1002. <li>9: 路费</li>
  1003. </ul>
  1004. </li>
  1005. </ul>
  1006. </li>
  1007. <li>用户:member_users
  1008. <ul>
  1009. <li>必填字段:id, balance</li>
  1010. <li>余额字段:balance<br>
  1011. <strong>后台逻辑</strong>:</li>
  1012. </ul>
  1013. </li>
  1014. </ul>
  1015. <ol>
  1016. <li>通过编号查订单,条件是:
  1017. <ul>
  1018. <li>订单数据存在,并且状态为服务结束</li>
  1019. <li>订单有指派技师</li>
  1020. <li>订单用户确认技师撤离为已确认</li>
  1021. </ul>
  1022. </li>
  1023. <li>通过以上数据,开启事务,修改订单数据,创建收益数据
  1024. <ul>
  1025. <li>修改订单数据,要求:
  1026. <ul>
  1027. <li>订单状态为已撤离</li>
  1028. <li>订单撤离时间</li>
  1029. </ul>
  1030. </li>
  1031. <li>创建收益数据,要求:
  1032. <ul>
  1033. <li>收益用户为技师</li>
  1034. <li>收益订单为当前订单</li>
  1035. <li>收益类型为收益</li>
  1036. <li>收益金额为订单服务金额乘以百分之50</li>
  1037. <li>收益余额为当前技师用户金额</li>
  1038. </ul>
  1039. </li>
  1040. </ul>
  1041. </li>
  1042. <li>发送异步抢单通知(比如对接极光推送)</li>
  1043. </ol>
  1044. <h2 id="分帐方案优化">分帐方案优化 </h2>
  1045. <h3 id="背景说明">背景说明 </h3>
  1046. <ul>
  1047. <li>平台作为服务商,为技师提供订单服务,技师为服务提供者,用户为服务接受者。业务员主要负责推广渠道,渠道用于推广用户,也可以推荐技师加入平台。</li>
  1048. <li>店铺是一个综合服务门店:
  1049. <ul>
  1050. <li>店铺入驻平台,需支付入驻费</li>
  1051. <li>店铺可以推荐用户下载APP,获取推广费</li>
  1052. <li>店铺可以推荐技师加入平台,获取推荐费</li>
  1053. <li>店铺是一个线下服务场所,用户在平台下单后,可以选择到店服务或上门服务</li>
  1054. </ul>
  1055. </li>
  1056. <li>代理基于店铺,代理的业绩基于店铺的业绩,代理的业绩分成基于店铺营业额,代理的业绩提成基于店铺利润</li>
  1057. <li>需要设计一个分帐方案,技师、业务员、渠道、店铺、代理和平台之间如何分帐,每种角色的分帐算法不同,分帐基于订单金额或剩余利润</li>
  1058. <li>订单完成时,通过平台设置的角色分帐算法和比例,自动计算出每个角色应得的金额,并生成按角色分类的分帐数据表</li>
  1059. <li>一个订单上,每个角色可能同时存在,也可能不存在,角色之间是相加关系,不是相乘关系</li>
  1060. <li>分帐方案需要灵活,比例需要有配置的地方,方便后续调整</li>
  1061. <li>分帐方案需要考虑订单取消、退款情况</li>
  1062. </ul>
  1063. <h3 id="分帐业务逻辑">分帐业务逻辑 </h3>
  1064. <h4 id="技师上门">技师上门 </h4>
  1065. <blockquote>
  1066. <p>技师通过平台接单,到用户指定地点提供服务</p>
  1067. </blockquote>
  1068. <ol>
  1069. <li>如果订单上的用户是某个渠道(技师、店铺、业务员等)推广来的,则渠道获得订单项目金额(不含优惠、路费)的百分之几,推广最大2级,第一级渠道获得20%,第二级渠道获得10%</li>
  1070. <li>如果订单上的技师是由推荐渠道(店铺、业务员等)推荐的,则推荐渠道获得订单项目金额(不含优惠、路费)的1%。如果推荐渠道为技师,则渠道获得订单金额(不含优惠、路费)的3%,上限为1000元封顶</li>
  1071. <li>接单技师作为服务提供者,获得订单项目金额(不含优惠)的50%至55%,路费另算,技师获得90%,平台10%</li>
  1072. </ol>
  1073. <h4 id="用户到店">用户到店 </h4>
  1074. <blockquote>
  1075. <p>用户通过平台下单,选择店铺中的技师,或直接选择店铺服务项目,到店消费</p>
  1076. </blockquote>
  1077. <ol>
  1078. <li>用户到店核销完成,店铺获得80%,店铺线下与技师分帐</li>
  1079. <li>如果用户是某个渠道(技师、店铺、业务员等)推广来的,则渠道获得与店铺分帐后的20%中的10%</li>
  1080. </ol>
  1081. <h4 id="平台技师到店">平台技师到店 </h4>
  1082. <blockquote>
  1083. <p>救急订单,调技师去店铺,用户到店消费,店铺替到店客户下单</p>
  1084. </blockquote>
  1085. <p>如果店铺技师不足,则店铺在平台正常下单,且技师为平台技师(非店铺自有技师),店铺创建的订单可设置报销路费或不报销路费,技师到店核销后,平台从店铺余额中扣除此订单服务费价格的10%</p>
  1086. <div class="mermaid">flowchart TD
  1087. A[技师上门] --&gt; B[用户是渠道推广]
  1088. B --&gt; C{推广级别}
  1089. C --&gt;|第一级| D[渠道获得20%]
  1090. C --&gt;|第二级| E[渠道获得10%]
  1091. A --&gt; F[技师由推荐渠道推荐]
  1092. F --&gt; G{推荐渠道类型}
  1093. G --&gt;|店铺/业务员| H[推荐渠道获得1%]
  1094. G --&gt;|技师| I[推荐渠道获得3% 上限1000元]
  1095. A --&gt; J[接单技师]
  1096. J --&gt; K[技师获得50%至55%]
  1097. K --&gt; L[路费技师获得90% 平台10%]
  1098. </div><div class="mermaid">flowchart TD
  1099. M[用户到店] --&gt; N[订单有店铺]
  1100. N --&gt; O[店铺获得80%]
  1101. O --&gt; P[店铺线下与技师分帐]
  1102. M --&gt; Q[用户是渠道推广]
  1103. Q --&gt; R[渠道获得店铺分帐后20%中的10%]
  1104. </div><div class="mermaid">flowchart TD
  1105. S[平台技师到店] --&gt; T[店铺技师不足]
  1106. T --&gt; U[店铺正常下单]
  1107. U --&gt; V{路费设置}
  1108. V --&gt;|报销| W[店铺订单核销后]
  1109. V --&gt;|不报销| W
  1110. W --&gt; X[平台从店铺余额中扣除10%]
  1111. </div><h3 id="程序设计">程序设计 </h3>
  1112. <ol>
  1113. <li>创建分帐配置表,存储各角色的分帐比例和算法</li>
  1114. <li>创建分帐数据表,存储每个订单的分帐结果</li>
  1115. <li>在订单完成时,调用分帐逻辑,计算各角色应得金额,并写入分帐数据表</li>
  1116. <li>考虑订单取消和退款情况,调整分帐数据</li>
  1117. </ol>
  1118. <h4 id="分帐配置表">分帐配置表 </h4>
  1119. <table>
  1120. <thead>
  1121. <tr>
  1122. <th>字段名</th>
  1123. <th>类型</th>
  1124. <th>说明</th>
  1125. </tr>
  1126. </thead>
  1127. <tbody>
  1128. <tr>
  1129. <td>id</td>
  1130. <td>int</td>
  1131. <td>主键</td>
  1132. </tr>
  1133. <tr>
  1134. <td>role</td>
  1135. <td>string</td>
  1136. <td>角色</td>
  1137. </tr>
  1138. <tr>
  1139. <td>percentage</td>
  1140. <td>decimal</td>
  1141. <td>分帐比例</td>
  1142. </tr>
  1143. <tr>
  1144. <td>algorithm</td>
  1145. <td>string</td>
  1146. <td>分帐算法</td>
  1147. </tr>
  1148. <tr>
  1149. <td>created_at</td>
  1150. <td>datetime</td>
  1151. <td>创建时间</td>
  1152. </tr>
  1153. <tr>
  1154. <td>updated_at</td>
  1155. <td>datetime</td>
  1156. <td>更新时间</td>
  1157. </tr>
  1158. </tbody>
  1159. </table>
  1160. <h4 id="分帐数据表">分帐数据表 </h4>
  1161. <table>
  1162. <thead>
  1163. <tr>
  1164. <th>字段名</th>
  1165. <th>类型</th>
  1166. <th>说明</th>
  1167. </tr>
  1168. </thead>
  1169. <tbody>
  1170. <tr>
  1171. <td>id</td>
  1172. <td>int</td>
  1173. <td>主键</td>
  1174. </tr>
  1175. <tr>
  1176. <td>order_id</td>
  1177. <td>int</td>
  1178. <td>订单ID</td>
  1179. </tr>
  1180. <tr>
  1181. <td>role</td>
  1182. <td>string</td>
  1183. <td>角色</td>
  1184. </tr>
  1185. <tr>
  1186. <td>amount</td>
  1187. <td>decimal</td>
  1188. <td>分帐金额</td>
  1189. </tr>
  1190. <tr>
  1191. <td>created_at</td>
  1192. <td>datetime</td>
  1193. <td>创建时间</td>
  1194. </tr>
  1195. <tr>
  1196. <td>updated_at</td>
  1197. <td>datetime</td>
  1198. <td>更新时间</td>
  1199. </tr>
  1200. </tbody>
  1201. </table>
  1202. <h3 id="分帐算法设计">分帐算法设计 </h3>
  1203. <h4 id="技师上门分帐算法">技师上门分帐算法 </h4>
  1204. <ol>
  1205. <li>获取订单项目金额(不含优惠、路费)</li>
  1206. <li>计算渠道推广分成:
  1207. <ul>
  1208. <li>第一级渠道:订单项目金额 * 20%</li>
  1209. <li>第二级渠道:订单项目金额 * 10%</li>
  1210. </ul>
  1211. </li>
  1212. <li>计算推荐渠道分成:
  1213. <ul>
  1214. <li>推荐渠道:订单项目金额 * 1%</li>
  1215. <li>如果推荐渠道为技师:订单项目金额 * 3%,上限1000元</li>
  1216. </ul>
  1217. </li>
  1218. <li>计算技师分成:
  1219. <ul>
  1220. <li>技师:订单项目金额 * 50%至55%</li>
  1221. <li>路费:技师获得90%,平台10%</li>
  1222. </ul>
  1223. </li>
  1224. </ol>
  1225. <h4 id="用户到店分帐算法">用户到店分帐算法 </h4>
  1226. <ol>
  1227. <li>获取订单项目金额(不含优惠、路费)</li>
  1228. <li>计算店铺分成:
  1229. <ul>
  1230. <li>店铺:订单项目金额 * 80%</li>
  1231. </ul>
  1232. </li>
  1233. <li>计算渠道推广分成:
  1234. <ul>
  1235. <li>渠道:店铺分成后的20%中的10%</li>
  1236. </ul>
  1237. </li>
  1238. </ol>
  1239. <h4 id="平台技师到店分帐算法">平台技师到店分帐算法 </h4>
  1240. <ol>
  1241. <li>获取订单项目金额(不含优惠、路费)</li>
  1242. <li>计算分成:
  1243. <ul>
  1244. <li>平台:订单项目金额 * 10%</li>
  1245. </ul>
  1246. </li>
  1247. </ol>
  1248. <h3 id="分帐逻辑">分帐逻辑 </h3>
  1249. <ol>
  1250. <li>获取订单信息,判断订单状态是否为完成</li>
  1251. <li>根据订单信息,获取相关角色(技师、店铺、渠道等)</li>
  1252. <li>根据分帐配置表,计算各角色应得金额</li>
  1253. <li>将计算结果写入分帐数据表</li>
  1254. <li>如果订单取消或退款,调整分帐数据</li>
  1255. </ol>
  1256. <h2 id="二-下单流程图">二、下单流程图 </h2>
  1257. <p></p><h1 id="下单流程图">下单流程图 </h1>
  1258. <h2 id="项目下单反选技师流程图">项目下单反选技师流程图 </h2>
  1259. <div class="mermaid">graph TD
  1260. A[项目下单反选技师] --&gt; B{是否反选技师?}
  1261. B --&gt;|没反选技师| C{有技师抢单?}
  1262. B --&gt;|反选技师| D[用户锁定技师]
  1263. C --&gt;|没有技师抢单| E{客服介入?}
  1264. C --&gt;|有技师抢单但客户没去反选| F[半小时后自动取消订单]
  1265. E --&gt;|是| G[指定可接单技师服务]
  1266. E --&gt;|否| H[半小时后自动取消订单]
  1267. F --&gt; I[技师端不显示订单]
  1268. F --&gt; J[用户端保留订单]
  1269. J --&gt; K[再次购买直接进入反选技师页面]
  1270. D --&gt; L{三分钟内付款?}
  1271. L --&gt;|是| M[正常订单流程]
  1272. L --&gt;|否| N[技师自动释放]
  1273. M --&gt; O[技师显示为忙碌中]
  1274. N --&gt; P[用户可再次锁定和付款]
  1275. D --&gt; Q[其他用户可见技师,显示已被锁]
  1276. D --&gt; R[正常订单不可选该技师]
  1277. S[技师角度:被锁定] --&gt; T{用户是否付款?}
  1278. T --&gt;|未付款| U[可抢其他订单]
  1279. T --&gt;|已付款| V[不可抢单,显示忙碌中]
  1280. W[技师角度:未被锁] --&gt; X[可抢任何订单]
  1281. W --&gt; Y[可被正常订单选择]
  1282. Y --&gt; Z[下单成功后显示忙碌中]
  1283. </div><p></p>
  1284. <h2 id="分帐及钱包todolist">分帐及钱包todolist </h2>
  1285. <p></p><pre class="language-text">EntryNotFound (FileSystemError): Error: ENOENT: no such file or directory, open 'd:\didong\系统设计\详细设计\分帐及钱包todolist.md'</pre> <p></p>
  1286. <p><img src="assets\168_1725348468_hd.jpeg" alt=""></p>
  1287. <h3 id="前端设计稿">前端设计稿 </h3>
  1288. <h4 id="平台审核">平台审核 </h4>
  1289. <p><img src="%E6%B5%81%E7%A8%8B%E5%9B%BE\%E6%8A%80%E5%B8%88%E6%B3%A8%E5%86%8C\%E5%B9%B3%E5%8F%B0%E5%AE%A1%E6%A0%B8.png" alt=""></p>
  1290. </div>
  1291. <div class="md-sidebar-toc">
  1292. <div class="md-toc">
  1293. <details style="padding:0;;padding-left:0px;" open="">
  1294. <summary class="md-toc-link-wrapper">
  1295. <a href="#技师端-todolistmd" class="md-toc-link"></a><p><a href="#技师端-todolistmd" class="md-toc-link">技师端 </a><a href="http://todolist.md">todolist.md</a></p>
  1296. </summary>
  1297. <div>
  1298. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1299. <a href="#首页" class="md-toc-link">
  1300. <p>首页</p>
  1301. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1302. <a href="#技师注册" class="md-toc-link">
  1303. <p>技师注册</p>
  1304. </a></div><details style="padding:0;;padding-left:24px;" open="">
  1305. <summary class="md-toc-link-wrapper">
  1306. <a href="#接单流程技师角度" class="md-toc-link"><p>接单流程(技师角度)</p>
  1307. </a>
  1308. </summary>
  1309. <div>
  1310. <details style="padding:0;;padding-left:24px;" open="">
  1311. <summary class="md-toc-link-wrapper">
  1312. <a href="#抢单" class="md-toc-link"><p>抢单</p>
  1313. </a>
  1314. </summary>
  1315. <div>
  1316. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1317. <a href="#1创建抢单订单" class="md-toc-link">
  1318. <p>1.创建抢单订单</p>
  1319. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1320. <a href="#2技师抢单创建抢单池" class="md-toc-link">
  1321. <p>2.技师抢单创建抢单池</p>
  1322. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1323. <a href="#3-用户反选技师指定抢单池" class="md-toc-link">
  1324. <ol start="3">
  1325. <li>用户反选技师(指定抢单池)</li>
  1326. </ol>
  1327. </a></div>
  1328. </div>
  1329. </details>
  1330. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1331. <a href="#服务流程" class="md-toc-link">
  1332. <p>服务流程</p>
  1333. </a></div><details style="padding:0;;padding-left:24px;" open="">
  1334. <summary class="md-toc-link-wrapper">
  1335. <a href="#接单" class="md-toc-link"><p>接单</p>
  1336. </a>
  1337. </summary>
  1338. <div>
  1339. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1340. <a href="#1-创建订单" class="md-toc-link">
  1341. <ol>
  1342. <li>创建订单</li>
  1343. </ol>
  1344. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1345. <a href="#2-改变订单状态为已接单技师端" class="md-toc-link">
  1346. <ol start="2">
  1347. <li>改变订单状态为已接单(技师端)</li>
  1348. </ol>
  1349. </a></div>
  1350. </div>
  1351. </details>
  1352. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1353. <a href="#3-改变订单状态为已出发技师端" class="md-toc-link">
  1354. <ol start="3">
  1355. <li>改变订单状态为已出发(技师端)</li>
  1356. </ol>
  1357. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1358. <a href="#4-改变订单状态为已到达" class="md-toc-link">
  1359. <ol start="4">
  1360. <li>改变订单状态为已到达</li>
  1361. </ol>
  1362. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1363. <a href="#5-订单状态改为服务中技师端" class="md-toc-link">
  1364. <ol start="5">
  1365. <li>订单状态改为服务中(技师端)</li>
  1366. </ol>
  1367. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1368. <a href="#6-订单改为服务结束用户端结束订单" class="md-toc-link">
  1369. <ol start="6">
  1370. <li>订单改为服务结束(用户端结束订单)</li>
  1371. </ol>
  1372. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1373. <a href="#7-订单更改状态为技师离开用户端确认技师离开" class="md-toc-link">
  1374. <ol start="7">
  1375. <li>订单更改状态为技师离开(用户端确认技师离开)</li>
  1376. </ol>
  1377. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1378. <a href="#8-第二种服务时间结束后台自动服务结束" class="md-toc-link">
  1379. <ol start="8">
  1380. <li>第二种:服务时间结束(后台自动服务结束)</li>
  1381. </ol>
  1382. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1383. <a href="#9-技师撤离技师端" class="md-toc-link">
  1384. <ol start="9">
  1385. <li>技师撤离(技师端)</li>
  1386. </ol>
  1387. </a></div>
  1388. </div>
  1389. </details>
  1390. <details style="padding:0;;padding-left:24px;" open="">
  1391. <summary class="md-toc-link-wrapper">
  1392. <a href="#分帐方案优化" class="md-toc-link"><p>分帐方案优化</p>
  1393. </a>
  1394. </summary>
  1395. <div>
  1396. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1397. <a href="#背景说明" class="md-toc-link">
  1398. <p>背景说明</p>
  1399. </a></div><details style="padding:0;;padding-left:24px;" open="">
  1400. <summary class="md-toc-link-wrapper">
  1401. <a href="#分帐业务逻辑" class="md-toc-link"><p>分帐业务逻辑</p>
  1402. </a>
  1403. </summary>
  1404. <div>
  1405. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1406. <a href="#技师上门" class="md-toc-link">
  1407. <p>技师上门</p>
  1408. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1409. <a href="#用户到店" class="md-toc-link">
  1410. <p>用户到店</p>
  1411. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1412. <a href="#平台技师到店" class="md-toc-link">
  1413. <p>平台技师到店</p>
  1414. </a></div>
  1415. </div>
  1416. </details>
  1417. <details style="padding:0;;padding-left:24px;" open="">
  1418. <summary class="md-toc-link-wrapper">
  1419. <a href="#程序设计" class="md-toc-link"><p>程序设计</p>
  1420. </a>
  1421. </summary>
  1422. <div>
  1423. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1424. <a href="#分帐配置表" class="md-toc-link">
  1425. <p>分帐配置表</p>
  1426. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1427. <a href="#分帐数据表" class="md-toc-link">
  1428. <p>分帐数据表</p>
  1429. </a></div>
  1430. </div>
  1431. </details>
  1432. <details style="padding:0;;padding-left:24px;" open="">
  1433. <summary class="md-toc-link-wrapper">
  1434. <a href="#分帐算法设计" class="md-toc-link"><p>分帐算法设计</p>
  1435. </a>
  1436. </summary>
  1437. <div>
  1438. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1439. <a href="#技师上门分帐算法" class="md-toc-link">
  1440. <p>技师上门分帐算法</p>
  1441. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1442. <a href="#用户到店分帐算法" class="md-toc-link">
  1443. <p>用户到店分帐算法</p>
  1444. </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1445. <a href="#平台技师到店分帐算法" class="md-toc-link">
  1446. <p>平台技师到店分帐算法</p>
  1447. </a></div>
  1448. </div>
  1449. </details>
  1450. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1451. <a href="#分帐逻辑" class="md-toc-link">
  1452. <p>分帐逻辑</p>
  1453. </a></div>
  1454. </div>
  1455. </details>
  1456. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1457. <a href="#二-下单流程图" class="md-toc-link">
  1458. <p>二、下单流程图</p>
  1459. </a></div>
  1460. </div>
  1461. </details>
  1462. <details style="padding:0;;padding-left:0px;" open="">
  1463. <summary class="md-toc-link-wrapper">
  1464. <a href="#下单流程图" class="md-toc-link"><p>下单流程图</p>
  1465. </a>
  1466. </summary>
  1467. <div>
  1468. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1469. <a href="#项目下单反选技师流程图" class="md-toc-link">
  1470. <p>项目下单反选技师流程图</p>
  1471. </a></div><details style="padding:0;;padding-left:24px;" open="">
  1472. <summary class="md-toc-link-wrapper">
  1473. <a href="#分帐及钱包todolist" class="md-toc-link"><p>分帐及钱包todolist</p>
  1474. </a>
  1475. </summary>
  1476. <div>
  1477. <details style="padding:0;;padding-left:24px;" open="">
  1478. <summary class="md-toc-link-wrapper">
  1479. <a href="#前端设计稿" class="md-toc-link"><p>前端设计稿</p>
  1480. </a>
  1481. </summary>
  1482. <div>
  1483. <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
  1484. <a href="#平台审核" class="md-toc-link">
  1485. <p>平台审核</p>
  1486. </a></div>
  1487. </div>
  1488. </details>
  1489. </div>
  1490. </details>
  1491. </div>
  1492. </details>
  1493. </div>
  1494. </div>
  1495. <a id="sidebar-toc-btn">≡</a>
  1496. <script type="module">
  1497. // TODO: If ZenUML gets integrated into mermaid in the future,
  1498. // we can remove the following lines.
  1499. var MERMAID_CONFIG = ({"startOnLoad":true,"securityLevel":"loose"});
  1500. if (typeof MERMAID_CONFIG !== 'undefined') {
  1501. MERMAID_CONFIG.startOnLoad = false
  1502. MERMAID_CONFIG.cloneCssStyles = false
  1503. MERMAID_CONFIG.theme = "default"
  1504. }
  1505. mermaid.initialize(MERMAID_CONFIG || {})
  1506. if (typeof(window['Reveal']) !== 'undefined') {
  1507. function mermaidRevealHelper(event) {
  1508. var currentSlide = event.currentSlide
  1509. var diagrams = currentSlide.querySelectorAll('.mermaid')
  1510. for (var i = 0; i < diagrams.length; i++) {
  1511. var diagram = diagrams[i]
  1512. if (!diagram.hasAttribute('data-processed')) {
  1513. mermaid.init(null, diagram, ()=> {
  1514. Reveal.slide(event.indexh, event.indexv)
  1515. })
  1516. }
  1517. }
  1518. }
  1519. Reveal.addEventListener('slidetransitionend', mermaidRevealHelper)
  1520. Reveal.addEventListener('ready', mermaidRevealHelper)
  1521. await mermaid.run({
  1522. nodes: document.querySelectorAll('.mermaid')
  1523. })
  1524. } else {
  1525. await mermaid.run({
  1526. nodes: document.querySelectorAll('.mermaid')
  1527. })
  1528. }
  1529. </script>
  1530. <script>
  1531. document.body.setAttribute('html-show-sidebar-toc', true)
  1532. var sidebarTOCBtn = document.getElementById('sidebar-toc-btn')
  1533. sidebarTOCBtn.addEventListener('click', function(event) {
  1534. event.stopPropagation()
  1535. if (document.body.hasAttribute('html-show-sidebar-toc')) {
  1536. document.body.removeAttribute('html-show-sidebar-toc')
  1537. } else {
  1538. document.body.setAttribute('html-show-sidebar-toc', true)
  1539. }
  1540. })
  1541. </script>
  1542. </body></html>