liusheng
8 天以前 f0a09ee996ab2605869844d6a3d812709e2bf0fa
ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java
ÎļþÃû´Ó ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.web.controller.smartor;
package com.ruoyi.task.controller;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.ISelect;
@@ -19,18 +19,12 @@
import com.ruoyi.common.utils.*;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.reflect.ReflectUtils;
import com.ruoyi.quartz.service.ICollectHISService;
import com.ruoyi.quartz.task.RyTask;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserDeptService;
import com.ruoyi.common.core.service.TaskOpsTriggerApi;
import com.ruoyi.task.api.spi.TaskSysConfigPort;
import com.ruoyi.task.api.spi.TaskSysUserDeptPort;
import com.ruoyi.satisfaction.api.SatisfactionExportBundle;
import com.ruoyi.satisfaction.api.SatisfactionFacade;
import com.smartor.domain.*;
import com.smartor.domain.VO.*;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.service.IServiceSubtaskRecordService;
import com.smartor.service.IServiceSubtaskService;
import com.smartor.service.IServiceTaskService;
import com.ruoyi.task.api.spi.TaskSubtaskRecordPort;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -51,9 +45,35 @@
import com.ruoyi.template.domain.VO.HeLibraryCountVO;
import static com.ruoyi.common.utils.SecurityUtils.getLoginUser;
import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
import com.ruoyi.task.domain.ServiceStatisticsRequest;
import com.ruoyi.task.domain.ServiceStatisticsResponse;
import com.ruoyi.task.domain.ServiceSubtask;
import com.ruoyi.task.domain.ServiceSubtaskCountReq;
import com.ruoyi.task.domain.ServiceSubtaskRecord;
import com.ruoyi.task.domain.ServiceSubtaskStatistic;
import com.ruoyi.task.domain.ServiceTask;
import com.ruoyi.task.domain.VO.ServiceSubtaskCotinueCountVO;
import com.ruoyi.task.service.IServiceSubtaskService;
import com.ruoyi.task.service.IServiceTaskService;
import com.ruoyi.task.domain.PatArchiveSrmVO;
import com.ruoyi.task.domain.ServiceSubTaskDetailReq;
import com.ruoyi.task.domain.ServiceSubtaskDiagname;
import com.ruoyi.task.domain.ServiceSubtaskRes;
import com.ruoyi.task.domain.ServiceSubtaskTemplateVO;
import com.ruoyi.task.domain.ServiceTaskVO;
import com.ruoyi.task.domain.VO.ServiceSubtaskVO;
import com.ruoyi.task.domain.VO.TransferDeptVO;
import com.ruoyi.task.domain.ServiceSubtaskExport;
/**
 * å•一任务(随访)Controller
 * <p>
 * âš ï¸ ç”µè¯ç›¸å…³çš„ 6 ä¸ªç«¯ç‚¹ï¼ˆphoneCallBack / phoneCallBackYQ / taskPull /
 * saveQuestionAnswerPhone / recordAcceptshanghai / recordAccept)已随电话模块化
 * æ•´ä½“搬进 {@code ruoyi-phone} çš„ {@code PhoneCallbackController},<b>URL ä¿æŒä¸å˜</b>
 * ï¼ˆå¤–部电话平台的回调地址不能改),因此本 Controller ä¸Žç”µè¯æ¨¡å—共用
 * {@code /smartor/serviceSubtask} è¿™ä¸€å‰ç¼€ï¼Œåªè¦å®Œæ•´è·¯å¾„不重复即可正常注册。
 *
 * @author ruoyi
 * @date 2024-02-02
@@ -84,19 +104,28 @@
    private IServiceTaskService serviceTaskService;
    @Autowired
    private ISysUserDeptService sysUserDeptService;
    private TaskSysUserDeptPort taskSysUserDeptPort;
    @Autowired
    private IServiceSubtaskRecordService serviceSubtaskRecordService;
    private TaskSubtaskRecordPort serviceSubtaskRecordService;
    @Autowired
    private ISysConfigService configService;
    private TaskSysConfigPort taskSysConfigPort;
    /**
     * ä»»åŠ¡è¿ç»´è§¦å‘èƒ½åŠ›ã€‚
     * <p>
     * åŽŸå…ˆæ­¤å¤„ç›´æŽ¥æ³¨å…¥ {@code ruoyi-quartz} çš„ {@code RyTask} / {@code ICollectHISService},
     * ä¼šè®©ã€Œç«¯ç‚¹å½’属」与「HIS é‡‡é›†å®žçŽ°ã€ç»‘æ­»ï¼šè¿™ 6 ä¸ªç«¯ç‚¹çš„归属要搬进 {@code ruoyi-task},
     * è€Œå®žçŽ°ï¼ˆ{@code RyTask} 2214 è¡Œã€æ³¨å…¥çº¦ 20 ä¸ª smartor service)不能搬,
     * å¦åˆ™å½¢æˆ {@code ruoyi-task -> smartor} + {@code ruoyi-quartz -> ruoyi-task} çš„硬循环。
     * <p>
     * æ”¹ä¸ºç» {@code ruoyi-common} çš„端口取用:接口在 ruoyi-common,
     * å®žçŽ°ï¼ˆ{@code TaskOpsTriggerApiImpl})留在 ruoyi-quartz。
     * è¿™æ ·ç«¯ç‚¹å¯ä»¥æ•´ä½“搬走而<b>不需要</b>依赖 ruoyi-quartz。
     */
    @Autowired
    private RyTask ryTask;
    @Autowired
    private ICollectHISService collectHISService;
    private TaskOpsTriggerApi taskOpsTriggerApi;
    @Value("${spring.profiles.active}")
    private String active;
@@ -478,69 +507,6 @@
    }
    /**
     * ç”µè¯å›žè°ƒä»»åŠ¡(上海)
     */
    @ApiOperation("电话回调任务")
    @PostMapping("/phoneCallBack")
    public AjaxResult phoneCallBack(@RequestBody PhoneCallBackVO phoneCallBackVO) {
        serviceSubtaskService.phoneCallBack(phoneCallBackVO);
        return success();
    }
    @ApiOperation("电话ASR通话回调(雨绮)")
    @PostMapping("/phoneCallBackYQ")
    public PhoneCallBackYQVO phoneCallBackYQ(@RequestBody PhoneCallReqYQVO phoneCallReqYQVO) {
        log.info("电话ASR通话回调(雨绮) ï¼Ÿ{}", phoneCallReqYQVO);
        PhoneCallBackYQVO phoneCallBackYQVO = serviceSubtaskService.phoneCallBackYQ(phoneCallReqYQVO);
        return phoneCallBackYQVO;
    }
    /**
     * ç”µè¯ä»»åŠ¡æ‹‰å–(雨绮)
     */
    @ApiOperation("电话任务拉取(雨绮)")
    @PostMapping("/taskPull")
    public List<PullTaskVO> taskPull() {
        log.info("电话任务拉取(雨绮)");
        List<PullTaskVO> pullTaskVOList = serviceSubtaskService.taskPull();
        log.info("电话任务拉取数据(雨绮):{}", pullTaskVOList);
        return pullTaskVOList;
    }
    /**
     * æ‚£è€…问题结果记录
     */
    @ApiOperation("患者问题结果记录(电话)")
    @PostMapping("/saveQuestionAnswerPhone")
    public AjaxResult saveQuestionAnswerPhone(@RequestBody ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
//        SysUser user = getLoginUser().getUser();
//        serviceSubTaskDetailReq.setOrgid(user.getOrgid());
        log.info("患者问题结果记录(电话):{}", serviceSubTaskDetailReq);
        return toAjax(serviceSubtaskService.saveQuestionAnswerPhone(serviceSubTaskDetailReq));
    }
    /**
     * é€šè¯è®°å½•回调
     */
    @ApiOperation("通话记录回调(上海)")
    @PostMapping("/recordAcceptshanghai")
    public AjaxResult recordAccepshanghait(@RequestBody ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
        log.info("通话记录回调(上海):{}", serviceSubTaskDetailReq);
        return toAjax(serviceSubtaskService.saveQuestionAnswerPhone(serviceSubTaskDetailReq));
    }
    /**
     * é€šè¯è®°å½•回调
     */
    @ApiOperation("通话记录回调(雨绮)")
    @PostMapping("/recordAccept")
    public AjaxResult recordAccept(@RequestBody PhoneCallRecordVO phoneCallRecordVO) {
        log.info("通话记录回调(雨绮):{}", phoneCallRecordVO);
        serviceSubtaskService.recordAccept(phoneCallRecordVO);
        return success();
    }
    /**
     * èŽ·å–æ¯ä¸ªæœˆçš„éšè®¿ã€å¤è¯Šé‡
     */
    @ApiOperation("获取每个月的随访、复诊量")
@@ -577,7 +543,7 @@
                        sysUserWard.setOrgid(user.getOrgid());
                        sysUserWard.setCampusid(user.getCampusid());
                        sysUserWard.setDeptType("2");
                        List<SysUserDept> wardList = sysUserDeptService.selectSysUserDeptList(sysUserWard);
                        List<SysUserDept> wardList = taskSysUserDeptPort.selectSysUserDeptList(sysUserWard);
                        if (CollectionUtils.isNotEmpty(wardList)) {
                            leavehospitaldistrictcodes = wardList.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
                        }
@@ -592,7 +558,7 @@
                        sysUserDept.setOrgid(user.getOrgid());
                        sysUserDept.setCampusid(user.getCampusid());
                        sysUserDept.setDeptType("1");
                        List<SysUserDept> deptList = sysUserDeptService.selectSysUserDeptList(sysUserDept);
                        List<SysUserDept> deptList = taskSysUserDeptPort.selectSysUserDeptList(sysUserDept);
                        if (CollectionUtils.isNotEmpty(deptList)) {
                            deptCodes = deptList.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
                        }
@@ -602,7 +568,7 @@
            }
        }
        String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
        String followUpCountStyle = taskSysConfigPort.selectConfigValue("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
        if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
            serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
        } else {
@@ -627,7 +593,7 @@
        Integer offset = PageUtils.getOffset(serviceSubtaskCountReq.getPageNum(), serviceSubtaskCountReq.getPageSize());
        serviceSubtaskCountReq.setPageNum(offset);
        String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
        String followUpCountStyle = taskSysConfigPort.selectConfigValue("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
        if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
            serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
        } else {
@@ -739,7 +705,7 @@
        String orgid = loginUser.getUser().getOrgid();
        String configKey = serviceSubtaskCountReq.getConfigKey();
        if (StringUtils.isNotEmpty(configKey)) {
            String configValue = configService.selectConfigByKey(configKey, orgid);
            String configValue = taskSysConfigPort.selectConfigValue(configKey, orgid);
            serviceSubtaskCountReq.setConfigValue(configValue);
            if (StringUtils.isEmpty(configValue)) {
                String logInfo = "getSfStatisticsCount-参数 " + configKey + " æœªé…ç½®, è¯·é…ç½®å¥½åŽé‡è¯•";
@@ -748,7 +714,7 @@
            }
        }
        String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", orgid);
        String followUpCountStyle = taskSysConfigPort.selectConfigValue("followUpCountStyle", orgid);
        if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
            serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
        } else {
@@ -788,7 +754,7 @@
        }
        String configKey = serviceSubtaskCountReq.getConfigKey();
        if (StringUtils.isNotEmpty(configKey)) {
            String configValue = configService.selectConfigByKey(configKey, serviceSubtaskCountReq.getOrgid());
            String configValue = taskSysConfigPort.selectConfigValue(configKey, serviceSubtaskCountReq.getOrgid());
            serviceSubtaskCountReq.setConfigValue(configValue);
            if (StringUtils.isEmpty(configValue)) {
                String logInfo = "getSfStatisticsCount-参数 " + configKey + " æœªé…ç½®, è¯·é…ç½®å¥½åŽé‡è¯•";
@@ -814,7 +780,7 @@
        //复诊统计
        String configKey = serviceSubtaskCountReq.getConfigKey();
        if (StringUtils.isNotEmpty(configKey)) {
            String configValue = configService.selectConfigByKey(configKey, serviceSubtaskCountReq.getOrgid());
            String configValue = taskSysConfigPort.selectConfigValue(configKey, serviceSubtaskCountReq.getOrgid());
            if (StringUtils.isEmpty(configValue)) {
                String logInfo = "getSfStatisticsCountDetails-参数 " + configKey + " æœªé…ç½®, è¯·é…ç½®å¥½åŽé‡è¯•";
                log.error(logInfo);
@@ -870,13 +836,13 @@
        sysUserDept.setOrgid(sysUser.getOrgid());
        sysUserDept.setCampusid(sysUser.getCampusid());
        sysUserDept.setDeptType("1");
        List<SysUserDept> sysUserDepts = sysUserDeptService.selectSysUserDeptList(sysUserDept);
        List<SysUserDept> sysUserDepts = taskSysUserDeptPort.selectSysUserDeptList(sysUserDept);
        SysUserDept sysUserWard = new SysUserDept();
        sysUserWard.setUserId(sysUser.getUserId());
        sysUserWard.setOrgid(sysUser.getOrgid());
        sysUserWard.setCampusid(sysUser.getCampusid());
        sysUserWard.setDeptType("2");
        List<SysUserDept> sysUserWards = sysUserDeptService.selectSysUserDeptList(sysUserWard);
        List<SysUserDept> sysUserWards = taskSysUserDeptPort.selectSysUserDeptList(sysUserWard);
        List<String> deptCodes = sysUserDepts.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
        List<String> wardCodes = sysUserWards.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
        ServiceSubtaskEntity entity = new ServiceSubtaskEntity();
@@ -953,7 +919,7 @@
    public AjaxResult syncMedInhospForShiyi(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) {
        // ç«‹å³è¿”回,后台异步执行
        CompletableFuture.runAsync(() -> {
            collectHISService.syncMedInhosp(startTime, endTime);
            taskOpsTriggerApi.syncMedInhosp(startTime, endTime);
        });
        return AjaxResult.success("同步任务已启动,请稍后查看结果");
    }
@@ -961,14 +927,14 @@
    @PostMapping("/syncMedInhospForShiyiYesterday")
    public AjaxResult syncMedInhospForShiyiYesterday() {
        // ç«‹å³è¿”回,后台异步执行
        ryTask.collectHISYesterday();
        taskOpsTriggerApi.collectHISYesterday();
        return AjaxResult.success("同步任务已启动,请稍后查看结果");
    }
    @PostMapping("/syncMedInhospForShiyiDaysBefore")
    public AjaxResult syncMedInhospForShiyiDaysBefore(@RequestParam("day") Long day) {
        // ç«‹å³è¿”回,后台异步执行
        ryTask.collectHISDaysBefore(day);
        taskOpsTriggerApi.collectHISDaysBefore(day);
        return AjaxResult.success("【collectHISDaysBefore】同步任务已启动,天数为" + day + "天,请稍后查看结果");
    }
@@ -976,7 +942,7 @@
    public AjaxResult syncMedOperForShiyi(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) {
        // ç«‹å³è¿”回,后台异步执行
        CompletableFuture.runAsync(() -> {
            collectHISService.syncOper(startTime, endTime);
            taskOpsTriggerApi.syncOper(startTime, endTime);
        });
        return AjaxResult.success("同步任务已启动,请稍后查看结果");
    }
@@ -984,13 +950,13 @@
    @PostMapping("/dealSubtaskDeadline")
    public AjaxResult dealSubtaskDeadline(@RequestParam("orgid") String orgid, @RequestParam("day") Integer day) {
        // ç«‹å³è¿”回,后台异步执行
        ryTask.dealSubtaskDeadline(orgid, day);
        taskOpsTriggerApi.dealSubtaskDeadline(orgid, day);
        return AjaxResult.success("【dealSubtaskDeadline】同步任务已启动,天数为" + day + "天,请稍后查看结果");
    }
    @PostMapping("/sendExceptInfo")
    public AjaxResult sendExceptInfo() throws Exception {
        ryTask.sendExceptInfo();
        taskOpsTriggerApi.sendExceptInfo();
        return AjaxResult.success("sendExceptInfo");
    }