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(上海 + 雨绮两条通道)。
*
*
⚠️ URL 与模块化前完全一致
* 这些端点是外部电话平台回调用地址,模块化时刻意不改路径
* ({@code /smartor/serviceSubtask/xxx}),否则线上需要同步改电话平台的配置,
* 且 {@code SecurityConfig} 的免登录白名单也要跟着改。
* 因此本 Controller 与 {@code ruoyi-task} 的 {@code ServiceSubtaskController}
* 共用一个 URL 前缀——只要完整路径不重复,Spring 可以正常注册。
*
* 为什么走门面(PhoneApi)而不是内部 IPhoneService
* 与出入院/满意度模块"模块只有门面一个入口"的约定一致:
* 门面统一承担"开关关闭 → 降级/明确报错"的处理,Controller 不再各写一遍判断。
*
* 与模块开关的关系
* 这 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 taskPull() {
log.info("电话任务拉取(雨绮)");
List 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();
}
}