liusheng
10 天以前 b46b8b8fee4d10e52dd882febc07974b02e2aed9
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
package com.ruoyi.quartz.service.impl;
 
import com.ruoyi.common.core.service.TaskOpsTriggerApi;
import com.ruoyi.quartz.service.ICollectHISService;
import com.ruoyi.quartz.task.RyTask;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
/**
 * {@link TaskOpsTriggerApi} 在 <b>ruoyi-quartz 侧</b>的实现 —— 任务运维触发能力的归属方。
 *
 * <h3>为什么实现在这里、而不在 ruoyi-task</h3>
 * 这 6 个能力是「手工触发 HIS 采集 / 截止处理 / 异常推送」的运维入口,
 * 其底层实现 {@link RyTask}(2214 行,注入约 20 个 smartor service)
 * 与 {@link ICollectHISService}({@code CollectHISServiceImpl} 869 行)
 * 都位于 quartz 域且依赖 smartor 侧能力。
 * 搬到 {@code ruoyi-task} 会形成 {@code ruoyi-task -> smartor} 硬循环,
 * 因此改为「接口在 ruoyi-common、实现留在 quartz」的<b>端口反转</b>,
 * 端点归属在 {@code ruoyi-task}、实现在这里,编译期无环。
 *
 * <h3>⚠️ 本类必须保持"纯转发"</h3>
 * 只做方法转发,<b>不</b>加去重、状态机、默认值补齐、异常吞并等任何新逻辑。
 * 逐方法与原 {@code ServiceSubtaskController} 里的调用一一对应:
 * <table border="1">
 *   <tr><th>本类方法</th><th>原调用点(ServiceSubtaskController)</th></tr>
 *   <tr><td>{@link #syncMedInhosp}</td><td>L956 {@code collectHISService.syncMedInhosp(...)}</td></tr>
 *   <tr><td>{@link #collectHISYesterday}</td><td>L964 {@code ryTask.collectHISYesterday()}</td></tr>
 *   <tr><td>{@link #collectHISDaysBefore}</td><td>L971 {@code ryTask.collectHISDaysBefore(day)}</td></tr>
 *   <tr><td>{@link #syncOper}</td><td>L979 {@code collectHISService.syncOper(...)}</td></tr>
 *   <tr><td>{@link #dealSubtaskDeadline}</td><td>L987 {@code ryTask.dealSubtaskDeadline(orgid, day)}</td></tr>
 *   <tr><td>{@link #sendExceptInfo}</td><td>L993 {@code ryTask.sendExceptInfo()}</td></tr>
 * </table>
 *
 * <h3>⚠️ 异步包装不在这里</h3>
 * 原 Controller 对 {@code syncMedInhosp} / {@code syncOper} 用
 * {@code CompletableFuture.runAsync(...)} 包了一层、其余 4 个直接同步调用。
 * 那层异步属于<b>调用方</b>的语义,保留在搬过去后的 {@code ruoyi-task} 控制器里,
 * 本类一律<b>同步</b>转发,保证"何时异步"这一行为不变。
 *
 * @see TaskOpsTriggerApi
 */
@Slf4j
@Component
public class TaskOpsTriggerApiImpl implements TaskOpsTriggerApi {
 
    @Autowired
    private RyTask ryTask;
 
    @Autowired
    private ICollectHISService collectHISService;
 
    @Override
    public Integer syncMedInhosp(String startTime, String endTime) {
        return collectHISService.syncMedInhosp(startTime, endTime);
    }
 
    @Override
    public void collectHISYesterday() {
        ryTask.collectHISYesterday();
    }
 
    @Override
    public void collectHISDaysBefore(Long daysBefore) {
        ryTask.collectHISDaysBefore(daysBefore);
    }
 
    @Override
    public Integer syncOper(String startTime, String endTime) {
        return collectHISService.syncOper(startTime, endTime);
    }
 
    @Override
    public void dealSubtaskDeadline(String orgid, Integer deadlineDay) {
        ryTask.dealSubtaskDeadline(orgid, deadlineDay);
    }
 
    @Override
    public void sendExceptInfo() throws Exception {
        ryTask.sendExceptInfo();
    }
}