package com.smartor.mapper; import com.smartor.domain.DTO.ServiceSubtaskDetailDTO; import com.smartor.domain.ServiceSubtaskDetail; import com.smartor.domain.ServiceSubtaskDetailTarget; import com.smartor.domain.ServiceSubtaskDetailVO; import com.smartor.domain.entity.SatisfactionStatQuery; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; /** * 语音任务呼叫明细Mapper接口 * * @author smartor * @date 2023-03-24 */ @Mapper public interface ServiceSubtaskDetailMapper { /** * 查询语音任务呼叫明细 * * @param calldetailid 语音任务呼叫明细主键 * @return 语音任务呼叫明细 */ public ServiceSubtaskDetail selectServiceSubtaskDetailByCalldetailid(String calldetailid); public List queryFillCount(@Param("subids") List subids, @Param("questiontext") String questiontext); /** * 满意度柱状图:一次性统计本次请求全部模板的填报量 * (按 libtemplateid + questiontext + score 分组,只回传分值与条数,不回传明细行) *

* 替代 queryFillCount 的 N+1 写法,见 PatSatisfactionServiceImpl#satisfactionGraph * * @param query 聚合查询条件 * @return 每行含 libtemplateid、questiontext、score、cnt */ public List> selectSatisfactionFillStat(SatisfactionStatQuery query); /** * 满意度统计:一次性统计本次请求全部问题的填报量(按 模板+问题+matchedtext+score 分组) *

* 用于 statistics / statisticsByDimension 的「各选项数量及占比」,替代逐个问题执行的 * queryFillCount(那一步会先查出几万个 sub_id 再拼进 IN(...),并把约十万行明细传回 Java)。 * * @param query 聚合查询条件 * @return 每行含 libtemplateid、questiontext、matchedtext、score、cnt、targetvalue */ public List> selectSatisfactionFillStatByMatchedtext(SatisfactionStatQuery query); /** * 满意度柱状图:一次性统计本次请求全部模板的「回收人数」 * (按 libtemplateid 分组,count(distinct sub_id):同一个人答了多道题只算一人) *

* satisfactionGraph / satisfactionGraphDimension 的回收人数必须是人数口径, * 不能像 selectSatisfactionFillStat 那样按题目汇总答案行数(那是题量口径) * * @param query 聚合查询条件 * @return 每行含 libtemplateid、cnt(该模板已回收的份数/人数) */ public List> selectSatisfactionFillPersonCount(SatisfactionStatQuery query); /** * 按 scriptid 批量统计填写记录数(一次 SQL 替代逐个 scriptid 查明细) *

* 口径与原来「query.setScriptid(scriptId) 后 selectServiceSubtaskDetailList(...).size()」一致: * 只按 scriptid 过滤,不带 del_flag(原 SQL 里并没有 del_flag 条件)。 * * @param scriptIds 问题ID集合 * @return 每行含 scriptid、cnt */ public List> countDetailByScriptIds(@Param("scriptIds") List scriptIds); public ServiceSubtaskDetailDTO isExistServiceSubtaskDetail(@Param("subid") Long subid, @Param("scriptid") Long scriptid); /** * 查询语音任务呼叫明细列表 * * @param serviceSubtaskDetail 语音任务呼叫明细 * @return 语音任务呼叫明细集合 */ public List selectServiceSubtaskDetailList(ServiceSubtaskDetail serviceSubtaskDetail); /** * 查询随访详情-指标记录 */ public List> getServiceSubtaskDetails(ServiceSubtaskDetailVO serviceSubtaskDetailVo); /** * 新增语音任务呼叫明细 * * @param serviceSubtaskDetail 语音任务呼叫明细 * @return 结果 */ public int insertServiceSubtaskDetail(ServiceSubtaskDetail serviceSubtaskDetail); /** * 修改语音任务呼叫明细 * * @param serviceSubtaskDetail 语音任务呼叫明细 * @return 结果 */ public int updateServiceSubtaskDetail(ServiceSubtaskDetail serviceSubtaskDetail); public int updateSSDByCondition(ServiceSubtaskDetail serviceSubtaskDetail); /** * 删除语音任务呼叫明细 * * @param calldetailid 语音任务呼叫明细主键 * @return 结果 */ public int deleteServiceSubtaskDetailByCalldetailid(String calldetailid); /** * 批量删除语音任务呼叫明细 * * @param calldetailids 需要删除的数据主键集合 * @return 结果 */ public int deleteServiceSubtaskDetailByCalldetailids(String[] calldetailids); /** * 指标统计 * * @param targetid 指标统计 * @return 指标统计 */ public List countPatByTarget(Long targetid); /** * 查询同个subid重复的detail数据ID列表 * * @return 重复记录ID列表 */ public List selectRepeatDetailIds(); /** * 根据ID列表批量标记重复detail数据为删除 * * @param ids 重复记录ID列表 * @return 更新行数 */ public Integer deleteRepeatDetailByIds(@Param("ids") List ids); }