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; } }