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
package com.ruoyi.phone.controller;
 
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.phone.api.PhoneApi;
import com.ruoyi.phone.domain.PhoneCallBackVO;
import com.ruoyi.phone.domain.PhoneCallBackYQVO;
import com.ruoyi.phone.domain.PhoneCallRecordVO;
import com.ruoyi.phone.domain.PhoneCallReqYQVO;
import com.ruoyi.phone.domain.PullTaskVO;
import com.ruoyi.task.domain.ServiceSubTaskDetailReq;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import java.util.List;
 
/**
 * 外呼回调 / 任务拉取 Controller(上海 + 雨绮两条通道)。
 *
 * <h3>⚠️ URL 与模块化前完全一致</h3>
 * 这些端点是<b>外部电话平台</b>回调用地址,模块化时<b>刻意不改路径</b>
 * ({@code /smartor/serviceSubtask/xxx}),否则线上需要同步改电话平台的配置,
 * 且 {@code SecurityConfig} 的免登录白名单也要跟着改。
 * 因此本 Controller 与 {@code ruoyi-task} 的 {@code ServiceSubtaskController}
 * <b>共用一个 URL 前缀</b>——只要完整路径不重复,Spring 可以正常注册。
 *
 * <h3>为什么走门面(PhoneApi)而不是内部 IPhoneService</h3>
 * 与出入院/满意度模块"模块只有门面一个入口"的约定一致:
 * 门面统一承担"开关关闭 → 降级/明确报错"的处理,Controller 不再各写一遍判断。
 *
 * <h3>与模块开关的关系</h3>
 * 这 8 个端点(含三汇那个 Controller)由 {@code PhoneWebConfig} 挂
 * {@code PhoneAvailabilityInterceptor};同时在 {@code TaskWebConfig} 里把其中 6 条
 * 从"任务模块开关"的拦截范围里排除,做到两个模块的开关各管各的。
 *
 * @author ruoyi
 * @date 2024-08-08
 */
@Slf4j
@Api(description = "外呼回调(上海/雨绮)")
@RestController
@RequestMapping("/smartor/serviceSubtask")
public class PhoneCallbackController extends BaseController {
 
    @Autowired
    private PhoneApi phoneApi;
 
    /**
     * 电话回调任务(上海)
     */
    @ApiOperation("电话回调任务")
    @PostMapping("/phoneCallBack")
    public AjaxResult phoneCallBack(@RequestBody PhoneCallBackVO phoneCallBackVO) {
        phoneApi.phoneCallBack(phoneCallBackVO);
        return success();
    }
 
    /**
     * 电话ASR通话回调(雨绮)
     */
    @ApiOperation("电话ASR通话回调(雨绮)")
    @PostMapping("/phoneCallBackYQ")
    public PhoneCallBackYQVO phoneCallBackYQ(@RequestBody PhoneCallReqYQVO phoneCallReqYQVO) {
        log.info("电话ASR通话回调(雨绮) ?{}", phoneCallReqYQVO);
        return phoneApi.phoneCallBackYQ(phoneCallReqYQVO);
    }
 
    /**
     * 电话任务拉取(雨绮)
     */
    @ApiOperation("电话任务拉取(雨绮)")
    @PostMapping("/taskPull")
    public List<PullTaskVO> taskPull() {
        log.info("电话任务拉取(雨绮)");
        List<PullTaskVO> pullTaskVOList = phoneApi.taskPull();
        log.info("电话任务拉取数据(雨绮):{}", pullTaskVOList);
        return pullTaskVOList;
    }
 
    /**
     * 患者问题结果记录(电话)
     */
    @ApiOperation("患者问题结果记录(电话)")
    @PostMapping("/saveQuestionAnswerPhone")
    public AjaxResult saveQuestionAnswerPhone(@RequestBody ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
        log.info("患者问题结果记录(电话):{}", serviceSubTaskDetailReq);
        return toAjax(phoneApi.saveQuestionAnswerPhone(serviceSubTaskDetailReq));
    }
 
    /**
     * 通话记录回调(上海)
     */
    @ApiOperation("通话记录回调(上海)")
    @PostMapping("/recordAcceptshanghai")
    public AjaxResult recordAccepshanghait(@RequestBody ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
        log.info("通话记录回调(上海):{}", serviceSubTaskDetailReq);
        return toAjax(phoneApi.saveQuestionAnswerPhone(serviceSubTaskDetailReq));
    }
 
    /**
     * 通话记录回调(雨绮)
     */
    @ApiOperation("通话记录回调(雨绮)")
    @PostMapping("/recordAccept")
    public AjaxResult recordAccept(@RequestBody PhoneCallRecordVO phoneCallRecordVO) {
        log.info("通话记录回调(雨绮):{}", phoneCallRecordVO);
        phoneApi.recordAccept(phoneCallRecordVO);
        return success();
    }
}