liusheng
3 小时以前 c24d16a37523a49080392610357872ce580cbc38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
package com.ruoyi.task.mapper;
 
import com.ruoyi.template.domain.VO.HeLibraryCountVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
 
import java.util.Date;
import java.util.List;
import java.util.Map;
 
import com.ruoyi.common.core.service.dto.PatMedReq;
import com.ruoyi.common.core.service.dto.PatMedRes;
import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
import com.ruoyi.task.domain.ServiceStatisticsRequest;
import com.ruoyi.task.domain.ServiceStatisticsResponse;
import com.ruoyi.task.domain.ServiceSubtask;
import com.ruoyi.task.domain.ServiceSubtaskCount;
import com.ruoyi.task.domain.ServiceSubtaskCountReq;
import com.ruoyi.task.domain.ServiceSubtaskScriptCount;
import com.ruoyi.task.domain.ServiceSubtaskStatistic;
import com.ruoyi.task.domain.VO.ServiceSubtaskCotinueCountVO;
/**
 * 单一任务(随访)Mapper接口
 *
 * @author ruoyi
 * @date 2024-02-02
 */
@Mapper
public interface ServiceSubtaskMapper {
    /**
     * 查询单一任务(随访)
     *
     * @param id 单一任务(随访)主键
     * @return 单一任务(随访)
     */
    public ServiceSubtask selectServiceSubtaskById(Long id);
 
    /**
     * 查询单一任务(随访)列表
     *
     * @param serviceSubtaskVO 单一任务(随访)
     * @return 单一任务(随访)集合
     */
    public List<ServiceSubtask> selectServiceSubtaskList(ServiceSubtaskEntity serviceSubtaskVO);
 
    /**
     * 分页第一阶段:只取当前页的子任务 id。
     * <p>
     * where / order 与 {@link #selectServiceSubtaskList} 共用同一份 XML 片段
     * ({@code serviceSubtaskWhere} / {@code serviceSubtaskOrderByPaged}),
     * 保证两条语句口径一致,不会出现「第一阶段选出行、第二阶段又被过滤掉」。
     * <p>
     * 之所以要单独一条:列表语句 select 约 100 列,深翻页时被 offset 跳过的每一行
     * 都要回表读整行;而只取 id 的语句可以走覆盖索引并提前截断。
     *
     * @param serviceSubtaskVO 查询条件(pageNum 是 offset、pageSize 是每页条数,由调用方算好)
     * @return 当前页的子任务 id,已按排序规则排好序
     */
    public List<Long> selectServiceSubtaskIdsPage(ServiceSubtaskEntity serviceSubtaskVO);
 
    
 
    /**
     * 用于补偿查询
     *
     * @param serviceSubtaskVO
     * @return
     */
    public List<ServiceSubtask> getCompensateServiceSubtaskList(ServiceSubtaskEntity serviceSubtaskVO);
 
    public List<ServiceSubtask> selectServiceSubtaskByDiagname(ServiceSubtask serviceSubtask);
 
    public List<ServiceSubtask> queryServiceSubtaskList(ServiceSubtaskEntity serviceSubtaskVO);
 
    public List<ServiceSubtask> selectServiceSubtaskBySendstate(ServiceSubtaskEntity serviceSubtaskVO);
 
    public List<ServiceSubtask> selectServiceSubtaskListByCreateTime(ServiceSubtaskEntity serviceSubtaskVO);
 
    public List<ServiceSubtask> selectServiceSubtaskListAgain(ServiceSubtaskEntity serviceSubtaskVO);
 
    public List<ServiceSubtask> selectServiceSubtaskListDeadLine(ServiceSubtaskEntity serviceSubtaskVO);
 
    public List<Integer> selectSendstateByCondition(ServiceSubtask serviceSubtask);
 
    /**
     * 新增单一任务(随访)
     *
     * @param ServiceSubtask 单一任务(随访)
     * @return 结果
     */
    public int insertServiceSubtask(ServiceSubtask ServiceSubtask);
 
    /**
     * 任务组(appltype=5):统计某一轮次内仍在运行的 subtask 数量。
     * 仍在运行 = sendstate in (1,2,3) 且未删除。
     * 用于判断本轮是否已全部 finalize(成功/失败/不执行/超时)。
     *
     * @param scheduleId 计划主键
     * @param loopCount  轮次(0=首轮)
     */
    public int countActiveByScheduleIdAndLoop(@Param("scheduleId") Long scheduleId, @Param("loopCount") Long loopCount);
 
    
 
    
 
    
 
    /**
     * 任务组(appltype=5):拉取某一轮次的全部 subtask(用于克隆到下一轮)。
     */
    public List<ServiceSubtask> selectByScheduleIdAndLoop(@Param("scheduleId") Long scheduleId, @Param("loopCount") Long loopCount);
 
    /**
     * 随访及时率:应随访时间<实际随访时间
     *
     * @param ServiceSubtask
     * @return
     */
    public Double selectTimelyRate(ServiceSubtask ServiceSubtask);
 
    /**
     * 随访及时率(按 groupKey 分组批量统计)
     * <p>
     * rate:出院时间(endtime)起 rateDay + 补偿天数 内完成随访的占比。
     * 补偿天数取自 service_subtask_preachform.compensate_time 按子任务求和,
     * 用子任务快照而非 service_task.preachform_desc,保证历史数据不随任务改配置而变动。
     * rateDay 为空时 rate 返回 NULL。
     * <p>
     * finishRate:应随访时间(visit_time) &lt;= 实际完成时间(finishtime) 的占比,当前未被随访统计使用。
     *
     * @param ServiceSubtaskvo
     * @return
     */
    @MapKey("groupKey")
    public Map<String, Map<String, Object>> selectTimelyRateBatch(ServiceSubtaskEntity ServiceSubtaskvo);
 
    /**
     * 随访及时率详情
     *
     * @param ServiceSubtask
     * @return
     */
    public List<ServiceSubtask> selectTimelyRateDetail(ServiceSubtask ServiceSubtask);
 
    /**
     * 修改单一任务(随访)
     *
     * @return 结果
     */
    public Boolean updateServiceSubtask(ServiceSubtask ServiceSubtask);
 
    public Boolean updateServiceSubtaskByPatId(ServiceSubtask ServiceSubtask);
 
    public Boolean updateServiceSubtaskByCondition(ServiceSubtask ServiceSubtask);
 
    public Boolean updateServiceSubtaskByTaskGuid(ServiceSubtask ServiceSubtask);
 
    /**
     * 删除单一任务(随访)
     *
     * @param id 单一任务(随访)主键
     * @return 结果
     */
    public int deleteServiceSubtaskById(Long id);
 
    public int deleteServiceSubtaskByCondition(@Param("taskid") Long id, @Param("patid") Long patid);
 
    /**
     * 删除单一任务(随访)
     *
     * @return 结果
     */
    public List<ServiceSubtask> getDataByTime(@Param("beganTime") String beganTime, @Param("endTime") String endTime);
 
    public List<ServiceSubtaskCount> getSfFzInfoEveryMonth(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
    public List<ServiceSubtask> getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
    /**
     * 随访分类统计:按分组(groupKey=drcode / leaveldeptcode / leavehospitaldistrictcode)在库里聚合。
     * <p>
     * 用于替代“把 getSfStatistics 命中的全部明细行捞回内存再逐行累加”的老做法,
     * 只返回分组数(几十行)的结果;统计口径与 {@code getStatisticCategory} 完全一致。
     *
     * @param serviceSubtaskCountReq 查询条件(必须已设置 groupKey / groupKeyList)
     * @return 每个分组的聚合统计
     */
    public List<ServiceSubtaskStatistic> getSfStatisticsScriptSum(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
    /**
     * 随访分类统计:满意度题目量按分组聚合(替代 getSfStatisticsCategory 的 IN 大列表 + 内存过滤)。
     *
     * @param serviceSubtaskCountReq 查询条件(必须已设置 groupKey / groupKeyList / configValue)
     * @return 每行包含 groupCode、joyAllCount、joyCount 三个键
     */
    public List<Map<String, Object>> getSfStatisticsScriptJoySum(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
    public List<ServiceSubtaskStatistic> getSpecialSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
    public List<ServiceSubtask> getSfStatisticsHyperlink(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
    public List<String> getSfStatisticsGroupKey(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
    public List<ServiceSubtaskCount> getSfStatisticsJoy(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
    public List<ServiceSubtaskCount> getSfStatisticsJoydetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
    /**
     * 获取问题统计结果(随访)
     *
     * @return 结果
     */
    public List<ServiceSubtaskCount> getSfStatisticsCategory(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
    /**
     * 获取问题统计结果(随访)
     *
     * @return 结果
     */
    public List<ServiceSubtaskScriptCount> getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
    /**
     * 获取问题回答统计结果(随访)
     *
     * @return 结果
     */
    public List<ServiceSubtaskScriptCount> getSfStatisticsScriptItemDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
 
    public List<PatMedRes> getDeptRanking(PatMedReq patMedReq);
 
    public List<ServiceStatisticsResponse> getServiceStatistics(ServiceStatisticsRequest serviceStatisticsRequest);
 
    /**
     * 统计任务各种状态的数量(优化版)
     * 用于替代应用层的循环统计,直接在数据库层进行聚合计算
     *
     * @param serviceSubtaskVO 查询条件
     * @return Map<String, Object> 包含各状态统计数据
     * total: 患者服务总量
     * wxsf: 无需随访数量 sendstate != 4
     * xsf: 需随访数量 sendstate = 4
     * dsf: 待随访数量 sendstate = 1L, 2L, 3L, 5L, 7L
     * ywc: 已完成数量 sendstate = 6L
     * dfs: 待发送数量 sendstate = 1L, 3L, 4L, 5L, 6L, 7L
     * yfs: 已发送数量 sendstate = 2L
     * yc: 异常数量 excep = '1'
     * yc: 警告数量 excep = '2'
     */
    public Map<String, Object> countByCondition(ServiceSubtaskEntity serviceSubtaskVO);
 
    /**
     * 统计任务各种状态的数量(优化版)
     *
     * @param serviceSubtaskVO 查询条件
     * @return Map<String, Object> 包含各状态统计数据
     * pendingVisitCount: 当前登录人截止今日待随访总量
     * failedVisitCount: 当前登录人随访任务失败总量
     * abnormalVisitVount: 当前登录人随访任务异常总量
     * allVisitCount: 当前登录人随访任务总量
     */
    public Map<String, Object> getCurrentUserServiceSubtaskCount(ServiceSubtaskEntity serviceSubtaskVO);
 
    /**
     * 获取门诊随访人数
     *
     * @param patMedReq
     * @return
     */
    PatMedRes selectVisitCount(PatMedReq patMedReq);
 
    
 
    
 
    
 
    /**
     * 按病区分组统计延续护理数量
     *
     * @param vo 查询条件
     * @return 每个病区的统计结果
     */
    List<Map<String, Object>> getContinueNurseCount(ServiceSubtaskCotinueCountVO vo);
 
    /**
     * 按科室分组统计延续护理数量
     *
     * @param vo 查询条件
     * @return 每个科室的统计结果
     */
    List<Map<String, Object>> getContinueNurseCountByDept(ServiceSubtaskCotinueCountVO vo);
 
    /**
     * 宣教统计:按病区或科室分组统计发送成功率和已读率
     *
     * @param heLibraryCountVO 查询条件
     * @return 每组的统计结果(groupName, sendSuccessCount, totalCount, readCount)
     */
    List<Map<String, Object>> getHeLibraryCount(HeLibraryCountVO heLibraryCountVO);
 
    /**
     * 宣教统计超链接
     */
    List<ServiceSubtask> gethelibraryCountHyperlink(HeLibraryCountVO heLibraryCountVO);
 
    
 
    
 
    
 
    
 
    
 
}