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
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
package com.ruoyi.task.api.contract;
 
import com.ruoyi.common.core.service.ServiceTaskMatchApi;
import com.ruoyi.common.core.service.dto.ServiceTaskMatchDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.ruoyi.task.domain.ServiceTaskdept;
import com.ruoyi.task.domain.ServiceTaskdiag;
import com.ruoyi.task.domain.ServiceTaskoper;
import com.ruoyi.task.mapper.ServiceTaskdeptMapper;
import com.ruoyi.task.mapper.ServiceTaskdiagMapper;
import com.ruoyi.task.mapper.ServiceTaskoperMapper;
 
/**
 * 【过渡实现·临时】{@link ServiceTaskMatchApi} 在 smartor 侧的桥接。
 *
 * <h3>为什么需要它</h3>
 * 门急诊随访({@code ruoyi-outpatientvisit})与手术随访({@code ruoyi-othervisit})
 * 都要"按维度查长期随访任务",而这些查询用的
 * {@link ServiceTaskdeptMapper} / {@link ServiceTaskdiagMapper} / {@link ServiceTaskoperMapper}
 * 属于 smartor 的「服务任务」域,被四个随访模块共用,<b>不能</b>跟任何一方搬走。
 * 所以在「随访任务创建模块」落地之前,先把这三个<b>读</b>查询包一层。
 * <p>
 * <b>将来动作</b>:任务创建模块建好后把它的实现注册进容器,本类整体删除即可,
 * 两个随访模块<b>一行都不用改</b>。
 *
 * <h3>⚠️ 本类必须保持"纯搬运"</h3>
 * 这里<b>不得</b>加入去重、排序、默认值补齐、缓存等任何新逻辑 ——
 * 逐方法与 {@code selectServiceTask*List} 一一对应。
 * "查不到时把标志位置 2 并写原因"属于随访域业务规则,留在各随访模块里。
 *
 * <h3>逐方法来源(迁移前 @ b25c3b51)</h3>
 * <table border="1">
 *   <tr><th>本类方法</th><th>原调用位置</th></tr>
 *   <tr><td>{@link #findLongTasksByDept(String, String)}</td>
 *       <td>门诊 {@code PatMedOuthospServiceImpl#dealOutpatientInfo} L394-398
 *           ({@code longtask=1} + {@code deptCode} + {@code serviceType="3"})</td></tr>
 *   <tr><td>{@link #findLongTasksByDiag(String)}</td>
 *       <td>门诊同方法 L410-413({@code longtask=1} + {@code icd10code})</td></tr>
 *   <tr><td>{@link #findLongTasksByOpcode(String)}</td>
 *       <td>手术 {@code PatMedOperationServiceImpl#dealOperationInfo} L118-121
 *           ({@code longtask=1} + {@code opcode})</td></tr>
 * </table>
 *
 * <h3>⚠️ 为什么参数里有 serviceType 却不由本类写死</h3>
 * 门诊的科室维度查询传 {@code "3"},但那是<b>门诊的</b>口径,不是本契约的口径。
 * 本类只负责把它透传进 {@code service_type=#{serviceType}},
 * 免得多一个调用方时把 {@code "3"} 错误地当成通用值。
 *
 * @see com.ruoyi.common.core.service.ServiceTaskMatchApi
 */
@Slf4j
@Component
public class ServiceTaskMatchApiImpl implements ServiceTaskMatchApi {
 
    @Autowired
    private ServiceTaskdeptMapper serviceTaskdeptMapper;
 
    @Autowired
    private ServiceTaskdiagMapper serviceTaskdiagMapper;
 
    @Autowired
    private ServiceTaskoperMapper serviceTaskoperMapper;
 
    /**
     * 科室维度。
     * <p>
     * 原实现逐行对应:
     * <pre>
     * ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
     * serviceTaskdept.setLongtask(1L);
     * serviceTaskdept.setDeptCode(patMedOuthosp1.getDeptcode());
     * serviceTaskdept.setServiceType("3");
     * List&lt;ServiceTaskdept&gt; list = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
     * </pre>
     */
    @Override
    public List<ServiceTaskMatchDto> findLongTasksByDept(String deptCode, String serviceType) {
        ServiceTaskdept q = new ServiceTaskdept();
        q.setLongtask(1L);
        q.setDeptCode(deptCode);
        q.setServiceType(serviceType);
        List<ServiceTaskdept> rows = serviceTaskdeptMapper.selectServiceTaskdeptList(q);
        if (CollectionUtils.isEmpty(rows)) {
            return Collections.emptyList();
        }
        List<ServiceTaskMatchDto> out = new ArrayList<>(rows.size());
        for (ServiceTaskdept r : rows) {
            ServiceTaskMatchDto d = new ServiceTaskMatchDto();
            d.setId(r.getId());
            d.setTaskId(r.getTaskId());
            d.setTaskName(r.getTaskName());
            d.setLongtask(r.getLongtask());
            d.setServiceType(r.getServiceType());
            d.setMatchCode(r.getDeptCode());
            out.add(d);
        }
        return out;
    }
 
    /**
     * 诊断维度。
     * <p>
     * 原实现逐行对应:
     * <pre>
     * ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
     * serviceTaskdiag.setLongtask(1L);
     * serviceTaskdiag.setIcd10code(patMedOuthosp1.getIcd10code());
     * List&lt;ServiceTaskdiag&gt; list = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag);
     * </pre>
     * ⚠️ 注意原实现<b>没有</b>设 {@code serviceType},本方法保持一致(不补)。
     */
    @Override
    public List<ServiceTaskMatchDto> findLongTasksByDiag(String icd10code) {
        ServiceTaskdiag q = new ServiceTaskdiag();
        q.setLongtask(1L);
        q.setIcd10code(icd10code);
        List<ServiceTaskdiag> rows = serviceTaskdiagMapper.selectServiceTaskdiagList(q);
        if (CollectionUtils.isEmpty(rows)) {
            return Collections.emptyList();
        }
        List<ServiceTaskMatchDto> out = new ArrayList<>(rows.size());
        for (ServiceTaskdiag r : rows) {
            ServiceTaskMatchDto d = new ServiceTaskMatchDto();
            d.setId(r.getId());
            d.setTaskId(r.getTaskId());
            d.setTaskName(r.getTaskName());
            d.setLongtask(r.getLongtask());
            d.setServiceType(r.getServiceType());
            d.setMatchCode(r.getIcd10code());
            out.add(d);
        }
        return out;
    }
 
    /**
     * 手术编码维度。
     * <p>
     * 原实现逐行对应:
     * <pre>
     * ServiceTaskoper serviceTaskoper = new ServiceTaskoper();
     * serviceTaskoper.setLongtask(1L);
     * serviceTaskoper.setOpcode(patMedOperation1.getOpcode());
     * List&lt;ServiceTaskoper&gt; list = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper);
     * </pre>
     * ⚠️ 同样<b>不设</b> {@code serviceType},与原实现一致。
     */
    @Override
    public List<ServiceTaskMatchDto> findLongTasksByOpcode(String opcode) {
        ServiceTaskoper q = new ServiceTaskoper();
        q.setLongtask(1L);
        q.setOpcode(opcode);
        List<ServiceTaskoper> rows = serviceTaskoperMapper.selectServiceTaskoperList(q);
        if (CollectionUtils.isEmpty(rows)) {
            return Collections.emptyList();
        }
        List<ServiceTaskMatchDto> out = new ArrayList<>(rows.size());
        for (ServiceTaskoper r : rows) {
            ServiceTaskMatchDto d = new ServiceTaskMatchDto();
            d.setId(r.getId());
            d.setTaskId(r.getTaskId());
            d.setTaskName(r.getTaskName());
            d.setLongtask(r.getLongtask());
            d.setServiceType(r.getServiceType());
            d.setMatchCode(r.getOpcode());
            out.add(d);
        }
        return out;
    }
}