TJsService.java 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. package com.ylx.massage.service;
  2. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  3. import com.baomidou.mybatisplus.extension.service.IService;
  4. import com.ylx.massage.domain.TJs;
  5. import com.ylx.massage.domain.vo.TJsVo;
  6. import java.util.List;
  7. /**
  8. * 技师信息业务服务接口
  9. * <p>
  10. * 该接口定义了技师管理的核心业务操作,包括:
  11. * <ul>
  12. * <li>技师注册与申请:技师通过微信小程序提交申请材料</li>
  13. * <li>审核流程:管理员审核技师资信,通过/驳回/拉黑</li>
  14. * <li>上岗管理:技师上下岗打卡,记录在线时长</li>
  15. * <li>位置服务:维护技师地理位置,用于距离计算和订单分配</li>
  16. * <li>状态管理:服务状态、上岗状态、审核状态的流转控制</li>
  17. * <li>通知推送:微信模板消息推送(审核结果、新订单通知等)</li>
  18. * </ul>
  19. * </p>
  20. * <p>
  21. * 业务流程说明:
  22. * <pre>
  23. * 1. 技师注册流程:
  24. * 用户提交申请 → 填写基本信息/上传资质证书 → 等待审核 → 审核通过 → 标记为新技师
  25. *
  26. * 2. 上岗接单流程:
  27. * 审核通过 → 申请上岗 → 上岗打卡(nStatus2=0, nStatus=0) → 开始接单 → 服务中(nStatus=1) → 完成服务 → 继续接单
  28. * ↓
  29. * 下岗打卡(nStatus2=-1, nStatus=2) → 停止接单
  30. *
  31. * 3. 审核状态流转:
  32. * 待审核(nTong=0) → 审核通过(nTong=1) → 可以上岗
  33. * → 审核驳回(nTong=2) → 修改资料重新提交
  34. * → 拉黑(nTong=3) → 无法接单
  35. *
  36. * 4. 服务状态流转:
  37. * 可服务(nStatus=0) → 服务中(nStatus=1) → 可服务(nStatus=0)
  38. * 不可服务(nStatus=2) → 上岗后变为可服务
  39. * </pre>
  40. * </p>
  41. *
  42. * @author ylx
  43. * @version 1.0
  44. * @since 2024-01-01
  45. * @see com.ylx.massage.domain.TJs
  46. * @see com.ylx.massage.service.impl.TJsServiceImpl
  47. */
  48. public interface TJsService extends IService<TJs> {
  49. /**
  50. * 分页查询技师列表(管理后台)
  51. * <p>
  52. * 支持多条件组合查询,包括:
  53. * <ul>
  54. * <li>昵称或电话模糊查询</li>
  55. * <li>服务项目筛选</li>
  56. * <li>城市筛选</li>
  57. * <li>审核状态筛选</li>
  58. * <li>上岗状态筛选</li>
  59. * <li>免车费条件筛选</li>
  60. * </ul>
  61. * </p>
  62. *
  63. * @param page 分页对象
  64. * @param param 查询条件封装对象
  65. * @return 分页结果,包含符合条件的技师列表
  66. */
  67. Page<TJs> getAll(Page<TJs> page, TJsVo param);
  68. /**
  69. * 技师申请注册(微信小程序端)
  70. * <p>
  71. * 业务规则:
  72. * <ul>
  73. * <li>检查微信号是否已申请(通过OpenID去重)</li>
  74. * <li>初始化技师信息:评分5星、服务数0、佣金比例10%</li>
  75. * <li>设置初始状态:不可服务、未上岗、待审核</li>
  76. * <li>不允许重复申请,否则抛出异常</li>
  77. * </ul>
  78. * </p>
  79. *
  80. * @param js 技师实体对象,包含基本信息和资质证书
  81. * @return true-申请成功,false-申请失败
  82. * @throws ServiceException 当微信号已申请时抛出异常
  83. */
  84. boolean addJs(TJs js);
  85. /**
  86. * 根据技师ID查询详情(微信小程序端)
  87. * <p>
  88. * 查询内容包括:
  89. * <ul>
  90. * <li>技师基本信息(头像、昵称、评分、服务数等)</li>
  91. * <li>可提供的服务项目列表(按价格排序)</li>
  92. * <li>用户评价列表(最新10条)</li>
  93. * <li>当前用户是否收藏该技师</li>
  94. * <li>技师与用户的距离</li>
  95. * </ul>
  96. * </p>
  97. *
  98. * @param jsId 技师ID
  99. * @param openId 当前用户的微信OpenID(用于判断收藏状态)
  100. * @return 技师详情对象,包含关联的项目和评价信息;如果技师不存在返回null
  101. * @throws ServiceException 当技师ID为空时抛出异常
  102. */
  103. TJs getByJsId(String jsId, String openId);
  104. /**
  105. * 微信小程序端更新技师信息
  106. * <p>
  107. * 支持更新内容:
  108. * <ul>
  109. * <li>基本信息:姓名、电话、地址</li>
  110. * <li>资质证书:身份证、健康证、资格证等</li>
  111. * <li>服务配置:可服务项目、免车费公里数</li>
  112. * <li>位置信息:经纬度坐标(用于距离计算)</li>
  113. * <li>个人简介:自我介绍文字</li>
  114. * </ul>
  115. * </p>
  116. * <p>
  117. * 注意:如果技师曾被驳回,更新后会重置为待审核状态
  118. * </p>
  119. *
  120. * @param js 技师实体对象,包含需要更新的字段
  121. * @return true-更新成功,false-更新失败
  122. */
  123. boolean wxUpdateJs(TJs js);
  124. /**
  125. * 审核技师申请(管理后台)
  126. * <p>
  127. * 审核通过操作:
  128. * <ul>
  129. * <li>将审核状态改为"已通过"(nTong=1)</li>
  130. * <li>标记为新技师(nB2=1),用于新人推荐</li>
  131. * <li>记录注册时间</li>
  132. * <li>将微信用户角色改为技师(role=1)</li>
  133. * <li>发送微信模板消息通知技师</li>
  134. * </ul>
  135. * </p>
  136. * <p>
  137. * 审核驳回操作:
  138. * <ul>
  139. * <li>将审核状态改为"已退回"(nTong=2)</li>
  140. * <li>记录驳回原因</li>
  141. * <li>发送微信模板消息通知技师</li>
  142. * </ul>
  143. * </p>
  144. *
  145. * @param js 技师实体对象,必须包含ID和审核状态(nTong)
  146. * @return true-审核成功,false-审核失败
  147. */
  148. boolean auditing(TJs js);
  149. /**
  150. * 更新技师地理位置信息
  151. * <p>
  152. * 将技师位置信息添加到Redis GEO中,用于:
  153. * <ul>
  154. * <li>计算技师与用户的距离</li>
  155. * <li>查找附近可用技师</li>
  156. * <li>订单分配时的距离排序</li>
  157. * </ul>
  158. * </p>
  159. *
  160. * @param js 技师实体对象,必须包含ID和经纬度坐标
  161. * @return true-更新成功,false-更新失败
  162. * @throws ServiceException 当技师ID或地址为空时抛出异常
  163. */
  164. boolean updateLocation(TJs js);
  165. /**
  166. * 新订单通知(预留接口,当前未实现)
  167. * <p>
  168. * 当有新订单分配给技师时,发送微信模板消息通知:
  169. * <ul>
  170. * <li>订单号</li>
  171. * <li>用户电话</li>
  172. * <li>用户名称</li>
  173. * <li>服务时间</li>
  174. * <li>服务地址</li>
  175. * </ul>
  176. * </p>
  177. *
  178. * @param openId 技师的微信OpenID
  179. */
  180. void newOrderNotification(String openId);
  181. /**
  182. * 技师上下岗打卡(微信小程序端)
  183. * <p>
  184. * 上岗操作(nStatus2=0):
  185. * <ul>
  186. * <li>将服务状态改为"可服务"(nStatus=0)</li>
  187. * <li>记录签到时间和技师信息</li>
  188. * <li>开始在线时长统计</li>
  189. * </ul>
  190. * </p>
  191. * <p>
  192. * 下岗操作(nStatus2=-1):
  193. * <ul>
  194. * <li>检查是否有服务中的订单(如有则不允许下岗)</li>
  195. * <li>将服务状态改为"不可服务"(nStatus=2)</li>
  196. * <li>记录下岗时间</li>
  197. * <li>计算并保存本次在线时长(分钟)</li>
  198. * </ul>
  199. * </p>
  200. *
  201. * @param js 技师实体对象,必须包含ID和上岗状态(nStatus2)
  202. * @return true-操作成功,false-操作失败
  203. * @throws ServiceException 当技师ID为空或下岗时有服务中订单时抛出异常
  204. */
  205. boolean upPost(TJs js);
  206. /**
  207. * 发送审核结果通知(内部方法)
  208. * <p>
  209. * 通过微信公众号模板消息推送审核结果:
  210. * <ul>
  211. * <li>审核通过:通知"可以接单"</li>
  212. * <li>审核驳回:通知"请重新提交"</li>
  213. * <li>包含审核时间和联系电话</li>
  214. * </ul>
  215. * </p>
  216. *
  217. * @param js 技师实体对象,包含OpenID和审核状态
  218. */
  219. void jsNotification(TJs js);
  220. /**
  221. * 拉黑/恢复技师(管理后台)
  222. * <p>
  223. * 拉黑操作(nTong=3):
  224. * <ul>
  225. * <li>检查是否有服务中的订单(如有则不允许拉黑)</li>
  226. * <li>将审核状态改为"已拉黑"</li>
  227. * <li>将服务状态改为"不可服务"</li>
  228. * <li>将上岗状态改为"未上岗"</li>
  229. * </ul>
  230. * </p>
  231. * <p>
  232. * 恢复操作(nTong=0):
  233. * <ul>
  234. * <li>将审核状态改为"待审核"</li>
  235. * <li>将服务状态改为"不可服务"</li>
  236. * <li>需要重新审核通过后才能上岗</li>
  237. * </ul>
  238. * </p>
  239. *
  240. * @param js 技师实体对象,必须包含ID和审核状态(nTong)
  241. * @return true-操作成功,false-操作失败
  242. * @throws ServiceException 当技师ID或拉黑状态为空时抛出异常
  243. */
  244. boolean block(TJs js);
  245. /**
  246. * 管理后台新增技师
  247. * <p>
  248. * 与微信端注册的区别:
  249. * <ul>
  250. * <li>直接设置为"已通过"审核状态</li>
  251. * <li>默认值设置:评分5星、服务数0、佣金比例10%</li>
  252. * <li>初始状态:不可服务、未上岗</li>
  253. * <li>不触发微信通知</li>
  254. * </ul>
  255. * </p>
  256. * <p>
  257. * 用途:管理员直接录入技师信息,跳过审核流程
  258. * </p>
  259. *
  260. * @param js 技师实体对象,包含完整的基本信息
  261. * @return true-添加成功,false-添加失败
  262. */
  263. boolean pcAddJs(TJs js);
  264. }