package com.ylx.massage.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ylx.massage.domain.TJs; import com.ylx.massage.domain.vo.TJsVo; import java.util.List; /** * 技师信息业务服务接口 *

* 该接口定义了技师管理的核心业务操作,包括: *

*

*

* 业务流程说明: *

 * 1. 技师注册流程:
 *    用户提交申请 → 填写基本信息/上传资质证书 → 等待审核 → 审核通过 → 标记为新技师
 *
 * 2. 上岗接单流程:
 *    审核通过 → 申请上岗 → 上岗打卡(nStatus2=0, nStatus=0) → 开始接单 → 服务中(nStatus=1) → 完成服务 → 继续接单
 *    ↓
 *    下岗打卡(nStatus2=-1, nStatus=2) → 停止接单
 *
 * 3. 审核状态流转:
 *    待审核(nTong=0) → 审核通过(nTong=1) → 可以上岗
 *                  → 审核驳回(nTong=2) → 修改资料重新提交
 *                  → 拉黑(nTong=3) → 无法接单
 *
 * 4. 服务状态流转:
 *    可服务(nStatus=0) → 服务中(nStatus=1) → 可服务(nStatus=0)
 *    不可服务(nStatus=2) → 上岗后变为可服务
 * 
*

* * @author ylx * @version 1.0 * @since 2024-01-01 * @see com.ylx.massage.domain.TJs * @see com.ylx.massage.service.impl.TJsServiceImpl */ public interface TJsService extends IService { /** * 分页查询技师列表(管理后台) *

* 支持多条件组合查询,包括: *

*

* * @param page 分页对象 * @param param 查询条件封装对象 * @return 分页结果,包含符合条件的技师列表 */ Page getAll(Page page, TJsVo param); /** * 技师申请注册(微信小程序端) *

* 业务规则: *

    *
  • 检查微信号是否已申请(通过OpenID去重)
  • *
  • 初始化技师信息:评分5星、服务数0、佣金比例10%
  • *
  • 设置初始状态:不可服务、未上岗、待审核
  • *
  • 不允许重复申请,否则抛出异常
  • *
*

* * @param js 技师实体对象,包含基本信息和资质证书 * @return true-申请成功,false-申请失败 * @throws ServiceException 当微信号已申请时抛出异常 */ boolean addJs(TJs js); /** * 根据技师ID查询详情(微信小程序端) *

* 查询内容包括: *

    *
  • 技师基本信息(头像、昵称、评分、服务数等)
  • *
  • 可提供的服务项目列表(按价格排序)
  • *
  • 用户评价列表(最新10条)
  • *
  • 当前用户是否收藏该技师
  • *
  • 技师与用户的距离
  • *
*

* * @param jsId 技师ID * @param openId 当前用户的微信OpenID(用于判断收藏状态) * @return 技师详情对象,包含关联的项目和评价信息;如果技师不存在返回null * @throws ServiceException 当技师ID为空时抛出异常 */ TJs getByJsId(String jsId, String openId); /** * 微信小程序端更新技师信息 *

* 支持更新内容: *

    *
  • 基本信息:姓名、电话、地址
  • *
  • 资质证书:身份证、健康证、资格证等
  • *
  • 服务配置:可服务项目、免车费公里数
  • *
  • 位置信息:经纬度坐标(用于距离计算)
  • *
  • 个人简介:自我介绍文字
  • *
*

*

* 注意:如果技师曾被驳回,更新后会重置为待审核状态 *

* * @param js 技师实体对象,包含需要更新的字段 * @return true-更新成功,false-更新失败 */ boolean wxUpdateJs(TJs js); /** * 审核技师申请(管理后台) *

* 审核通过操作: *

    *
  • 将审核状态改为"已通过"(nTong=1)
  • *
  • 标记为新技师(nB2=1),用于新人推荐
  • *
  • 记录注册时间
  • *
  • 将微信用户角色改为技师(role=1)
  • *
  • 发送微信模板消息通知技师
  • *
*

*

* 审核驳回操作: *

    *
  • 将审核状态改为"已退回"(nTong=2)
  • *
  • 记录驳回原因
  • *
  • 发送微信模板消息通知技师
  • *
*

* * @param js 技师实体对象,必须包含ID和审核状态(nTong) * @return true-审核成功,false-审核失败 */ boolean auditing(TJs js); /** * 更新技师地理位置信息 *

* 将技师位置信息添加到Redis GEO中,用于: *

    *
  • 计算技师与用户的距离
  • *
  • 查找附近可用技师
  • *
  • 订单分配时的距离排序
  • *
*

* * @param js 技师实体对象,必须包含ID和经纬度坐标 * @return true-更新成功,false-更新失败 * @throws ServiceException 当技师ID或地址为空时抛出异常 */ boolean updateLocation(TJs js); /** * 新订单通知(预留接口,当前未实现) *

* 当有新订单分配给技师时,发送微信模板消息通知: *

    *
  • 订单号
  • *
  • 用户电话
  • *
  • 用户名称
  • *
  • 服务时间
  • *
  • 服务地址
  • *
*

* * @param openId 技师的微信OpenID */ void newOrderNotification(String openId); /** * 技师上下岗打卡(微信小程序端) *

* 上岗操作(nStatus2=0): *

    *
  • 将服务状态改为"可服务"(nStatus=0)
  • *
  • 记录签到时间和技师信息
  • *
  • 开始在线时长统计
  • *
*

*

* 下岗操作(nStatus2=-1): *

    *
  • 检查是否有服务中的订单(如有则不允许下岗)
  • *
  • 将服务状态改为"不可服务"(nStatus=2)
  • *
  • 记录下岗时间
  • *
  • 计算并保存本次在线时长(分钟)
  • *
*

* * @param js 技师实体对象,必须包含ID和上岗状态(nStatus2) * @return true-操作成功,false-操作失败 * @throws ServiceException 当技师ID为空或下岗时有服务中订单时抛出异常 */ boolean upPost(TJs js); /** * 发送审核结果通知(内部方法) *

* 通过微信公众号模板消息推送审核结果: *

    *
  • 审核通过:通知"可以接单"
  • *
  • 审核驳回:通知"请重新提交"
  • *
  • 包含审核时间和联系电话
  • *
*

* * @param js 技师实体对象,包含OpenID和审核状态 */ void jsNotification(TJs js); /** * 拉黑/恢复技师(管理后台) *

* 拉黑操作(nTong=3): *

    *
  • 检查是否有服务中的订单(如有则不允许拉黑)
  • *
  • 将审核状态改为"已拉黑"
  • *
  • 将服务状态改为"不可服务"
  • *
  • 将上岗状态改为"未上岗"
  • *
*

*

* 恢复操作(nTong=0): *

    *
  • 将审核状态改为"待审核"
  • *
  • 将服务状态改为"不可服务"
  • *
  • 需要重新审核通过后才能上岗
  • *
*

* * @param js 技师实体对象,必须包含ID和审核状态(nTong) * @return true-操作成功,false-操作失败 * @throws ServiceException 当技师ID或拉黑状态为空时抛出异常 */ boolean block(TJs js); /** * 管理后台新增技师 *

* 与微信端注册的区别: *

    *
  • 直接设置为"已通过"审核状态
  • *
  • 默认值设置:评分5星、服务数0、佣金比例10%
  • *
  • 初始状态:不可服务、未上岗
  • *
  • 不触发微信通知
  • *
*

*

* 用途:管理员直接录入技师信息,跳过审核流程 *

* * @param js 技师实体对象,包含完整的基本信息 * @return true-添加成功,false-添加失败 */ boolean pcAddJs(TJs js); }