package com.ruoyi.task.api; import com.ruoyi.task.domain.IvrTaskVisitResult; import com.ruoyi.task.domain.ServiceSubtask; import com.ruoyi.task.domain.ServiceSubtaskDetail; import com.ruoyi.task.domain.ServiceSubtaskDetailTrace; import com.ruoyi.task.domain.ServiceTask; import com.ruoyi.task.domain.entity.ServiceSubtaskEntity; import java.util.List; /** * 任务模块的子任务数据访问 API:给"需要在归属模块之外读写子任务数据"的模块用。 * *

为什么要有它

* 按 {@code doc/跨模块数据访问原则与收口方案.md} 的落地口径: * 写操作(insert/update/delete 归属表)任何非归属模块一律禁止; * {@code service_subtask} / {@code service_subtask_detail} / {@code service_task} 等表归本模块, * 所以需要这些数据的模块(当前是 {@code ruoyi-phone})只能经本 API 调用, * 不许在自己模块里写针对这些表的 SQL。 * *

与其它对外契约的关系

* * *

方法语义

* 每个方法都是对既有 Mapper/Service 的原样转发,不含任何额外业务判断 * (尤其 {@link #updateSubtask} 用动态 SQL 只更新非空字段,语义必须与 * {@code ServiceSubtaskMapper.updateServiceSubtask} 保持一致,否则电话流程会误改字段)。 */ public interface TaskSubtaskApi { /** * 按子任务 ID 取子任务(原 {@code ServiceSubtaskMapper#selectServiceSubtaskById}) * * @param subId 子任务 ID * @return 子任务;不存在返回 {@code null} */ ServiceSubtask getSubtask(Long subId); /** * 按条件查子任务列表(原 {@code ServiceSubtaskMapper#selectServiceSubtaskList}) * * @param query 查询条件(taskid / patid / phone / type / sendstate 等) * @return 子任务列表 */ List findSubtasks(ServiceSubtaskEntity query); /** * 更新子任务(原 {@code ServiceSubtaskMapper#updateServiceSubtask},动态 SQL 只改非空字段) * * @param subtask 待更新对象(必须带 id) * @return 受影响行数 */ int updateSubtask(ServiceSubtask subtask); /** * 按任务 ID 取任务(原 {@code IServiceTaskService#selectServiceTaskByTaskid}), * 电话流程用它取开场白(kcb)、结束语(jsy)以及话术通配符(textParam) * * @param taskid 任务 ID * @return 任务;不存在返回 {@code null} */ ServiceTask getTask(Long taskid); /** * 按条件查子任务明细(原 {@code ServiceSubtaskDetailMapper#selectServiceSubtaskDetailList}) * * @param query 查询条件(subId / taskid / scriptid / guid / orgid 等) * @return 明细列表 */ List findSubtaskDetails(ServiceSubtaskDetail query); /** * 新增子任务明细(原 {@code ServiceSubtaskDetailMapper#insertServiceSubtaskDetail}) * * @param detail 明细 * @return 受影响行数 */ int insertSubtaskDetail(ServiceSubtaskDetail detail); /** * 修改子任务明细(原 {@code ServiceSubtaskDetailMapper#updateServiceSubtaskDetail}) * * @param detail 明细(必须带 id) * @return 受影响行数 */ int updateSubtaskDetail(ServiceSubtaskDetail detail); /** * 新增任务访问结果(原 {@code IvrTaskVisitResultMapper#insertIvrTaskVisitResult}), * 电话流程把每一题的"问题 + 患者原话 + 命中选项"记进该表 * * @param visitResult 访问结果 * @return 受影响行数 */ int insertVisitResult(IvrTaskVisitResult visitResult); /** * 新增子任务异常跟踪(原 {@code IServiceSubtaskDetailTraceService#insertServiceSubtaskDetailTtrace}), * 电话流程命中"异常选项且带责任科室"时写一条,供随访异常处理页使用 * * @param trace 异常跟踪记录 * @return 受影响行数 */ int insertDetailTrace(ServiceSubtaskDetailTrace trace); }