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 侧的桥接。
*
*
为什么需要它
* 门急诊随访({@code ruoyi-outpatientvisit})与手术随访({@code ruoyi-othervisit})
* 都要"按维度查长期随访任务",而这些查询用的
* {@link ServiceTaskdeptMapper} / {@link ServiceTaskdiagMapper} / {@link ServiceTaskoperMapper}
* 属于 smartor 的「服务任务」域,被四个随访模块共用,不能跟任何一方搬走。
* 所以在「随访任务创建模块」落地之前,先把这三个读查询包一层。
*
* 将来动作:任务创建模块建好后把它的实现注册进容器,本类整体删除即可,
* 两个随访模块一行都不用改。
*
*
⚠️ 本类必须保持"纯搬运"
* 这里不得加入去重、排序、默认值补齐、缓存等任何新逻辑 ——
* 逐方法与 {@code selectServiceTask*List} 一一对应。
* "查不到时把标志位置 2 并写原因"属于随访域业务规则,留在各随访模块里。
*
* 逐方法来源(迁移前 @ b25c3b51)
*
* | 本类方法 | 原调用位置 |
* | {@link #findLongTasksByDept(String, String)} |
* 门诊 {@code PatMedOuthospServiceImpl#dealOutpatientInfo} L394-398
* ({@code longtask=1} + {@code deptCode} + {@code serviceType="3"}) |
* | {@link #findLongTasksByDiag(String)} |
* 门诊同方法 L410-413({@code longtask=1} + {@code icd10code}) |
* | {@link #findLongTasksByOpcode(String)} |
* 手术 {@code PatMedOperationServiceImpl#dealOperationInfo} L118-121
* ({@code longtask=1} + {@code opcode}) |
*
*
* ⚠️ 为什么参数里有 serviceType 却不由本类写死
* 门诊的科室维度查询传 {@code "3"},但那是门诊的口径,不是本契约的口径。
* 本类只负责把它透传进 {@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;
/**
* 科室维度。
*
* 原实现逐行对应:
*
* ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
* serviceTaskdept.setLongtask(1L);
* serviceTaskdept.setDeptCode(patMedOuthosp1.getDeptcode());
* serviceTaskdept.setServiceType("3");
* List<ServiceTaskdept> list = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
*
*/
@Override
public List findLongTasksByDept(String deptCode, String serviceType) {
ServiceTaskdept q = new ServiceTaskdept();
q.setLongtask(1L);
q.setDeptCode(deptCode);
q.setServiceType(serviceType);
List rows = serviceTaskdeptMapper.selectServiceTaskdeptList(q);
if (CollectionUtils.isEmpty(rows)) {
return Collections.emptyList();
}
List 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;
}
/**
* 诊断维度。
*
* 原实现逐行对应:
*
* ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
* serviceTaskdiag.setLongtask(1L);
* serviceTaskdiag.setIcd10code(patMedOuthosp1.getIcd10code());
* List<ServiceTaskdiag> list = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag);
*
* ⚠️ 注意原实现没有设 {@code serviceType},本方法保持一致(不补)。
*/
@Override
public List findLongTasksByDiag(String icd10code) {
ServiceTaskdiag q = new ServiceTaskdiag();
q.setLongtask(1L);
q.setIcd10code(icd10code);
List rows = serviceTaskdiagMapper.selectServiceTaskdiagList(q);
if (CollectionUtils.isEmpty(rows)) {
return Collections.emptyList();
}
List 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;
}
/**
* 手术编码维度。
*
* 原实现逐行对应:
*
* ServiceTaskoper serviceTaskoper = new ServiceTaskoper();
* serviceTaskoper.setLongtask(1L);
* serviceTaskoper.setOpcode(patMedOperation1.getOpcode());
* List<ServiceTaskoper> list = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper);
*
* ⚠️ 同样不设 {@code serviceType},与原实现一致。
*/
@Override
public List findLongTasksByOpcode(String opcode) {
ServiceTaskoper q = new ServiceTaskoper();
q.setLongtask(1L);
q.setOpcode(opcode);
List rows = serviceTaskoperMapper.selectServiceTaskoperList(q);
if (CollectionUtils.isEmpty(rows)) {
return Collections.emptyList();
}
List 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;
}
}