liusheng
5 天以前 cc479e6a056785103996cc7ea67dbd5faa3e800e
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
package com.ruoyi.common.core.service;
 
import com.ruoyi.common.core.service.dto.ServiceTaskMatchDto;
 
import java.util.List;
 
/**
 * 「长期随访任务匹配」的对外契约。
 *
 * <h3>为什么需要它(本契约是门急诊/手术随访模块化的唯一新增契约)</h3>
 * 三个随访模块(出入院 {@code ruoyi-inhospvisit}、门急诊 {@code ruoyi-outpatientvisit}、
 * 其他 {@code ruoyi-othervisit})都要做同一件事:<b>按某个维度查"有没有配长期随访任务"</b>。
 * 现状是各自直接注入 smartor 的 Mapper:
 *
 * <pre>
 * 门诊:serviceTaskdeptMapper.selectServiceTaskdeptList(q)   // 科室维度 service_type="3"
 *       serviceTaskdiagMapper.selectServiceTaskdiagList(q)   // 诊断维度
 * 手术:serviceTaskoperMapper.selectServiceTaskoperList(q)   // 手术编码维度
 * 宣教:serviceTaskmedicalMapper...                          // 药品维度(本模块自带 PublicityDataPort)
 * </pre>
 *
 * 这些 Mapper 属于 smartor 的「服务任务」域,<b>不能</b>跟着随访模块搬
 * (它们同时被出入院/门诊/手术/宣教四方共用,搬给任何一方都会让另外三方反向依赖)。
 * 所以按既有套路({@code VisitTaskCreateApi} / {@code PublicityDataPort} 同样的做法)
 * 把"查"这一层做成 ruoyi-common 的契约,smartor 侧提供过渡实现。
 *
 * <h3>⚠️ 本契约只管"查",不管"判断"</h3>
 * 原实现里"查不到就把标志位置 {@code "2"} 并写原因文案"属于<b>随访域的业务规则</b>,
 * 留在各随访模块里(门诊/出入院/手术的原因文案各不相同)。
 * 本契约只做「给定条件 → 返回匹配到的行」,与 {@code selectServiceTask*List} 逐字对应。
 *
 * <h3>⚠️ 返回类型不得是 smartor 实体</h3>
 * 见 {@link ServiceTaskMatchDto} 的反向依赖红线说明。
 *
 * <h3>各方法的原实现对应</h3>
 * <table border="1">
 *   <tr><th>本契约方法</th><th>原 Mapper 调用</th></tr>
 *   <tr><td>{@link #findLongTasksByDept(String, String)}</td>
 *       <td>{@code ServiceTaskdeptMapper.selectServiceTaskdeptList}</td></tr>
 *   <tr><td>{@link #findLongTasksByDiag(String)}</td>
 *       <td>{@code ServiceTaskdiagMapper.selectServiceTaskdiagList}</td></tr>
 *   <tr><td>{@link #findLongTasksByOpcode(String)}</td>
 *       <td>{@code ServiceTaskoperMapper.selectServiceTaskoperList}</td></tr>
 * </table>
 *
 * @see ServiceTaskMatchDto
 */
public interface ServiceTaskMatchApi {
 
    /**
     * 科室维度:查该科室下已配置的长期随访任务。
     * <p>
     * 原实现(门诊 {@code PatMedOuthospServiceImpl#dealOutpatientInfo} L394-398):
     * <pre>
     * ServiceTaskdept q = new ServiceTaskdept();
     * q.setLongtask(1L);
     * q.setDeptCode(patMedOuthosp1.getDeptcode());
     * q.setServiceType("3");
     * List&lt;ServiceTaskdept&gt; list = serviceTaskdeptMapper.selectServiceTaskdeptList(q);
     * </pre>
     * 即:{@code del_flag=0} + {@code longtask=1} + {@code dept_code=?} + {@code service_type=?}。
     *
     * @param deptCode    科室编码(原 {@code patMedOuthosp.deptcode})
     * @param serviceType 服务类型(门诊传 {@code "3"};其它调用方传各自的值,不做假设)
     * @return 匹配到的任务行;查不到返回空集合(<b>不返回 null</b>)
     */
    List<ServiceTaskMatchDto> findLongTasksByDept(String deptCode, String serviceType);
 
    /**
     * 诊断维度:查该 ICD10 下已配置的长期随访任务。
     * <p>
     * 原实现(门诊 L410-413):{@code longtask=1} + {@code icd10code=?}(<b>不设 serviceType</b>)。
     *
     * @param icd10code ICD10 编码(原 {@code patMedOuthosp.icd10code})
     * @return 匹配到的任务行;查不到返回空集合
     */
    List<ServiceTaskMatchDto> findLongTasksByDiag(String icd10code);
 
    /**
     * 手术编码维度:查该手术编码下已配置的长期随访任务。
     * <p>
     * 原实现(手术 {@code PatMedOperationServiceImpl#dealOperationInfo} L118-121):
     * {@code longtask=1} + {@code opcode=?}(<b>不设 serviceType</b>)。
     *
     * @param opcode 手术编码(原 {@code patMedOperation.opcode})
     * @return 匹配到的任务行;查不到返回空集合
     */
    List<ServiceTaskMatchDto> findLongTasksByOpcode(String opcode);
}