package com.ruoyi.web.controller.smartor; 
 | 
  
 | 
import com.github.pagehelper.ISelect; 
 | 
import com.ruoyi.common.annotation.Log; 
 | 
import com.ruoyi.common.core.controller.BaseController; 
 | 
import com.ruoyi.common.core.domain.AjaxResult; 
 | 
import com.ruoyi.common.core.domain.entity.SysUser; 
 | 
import com.ruoyi.common.core.domain.model.LoginUser; 
 | 
import com.ruoyi.common.core.page.TableDataInfo; 
 | 
import com.ruoyi.common.core.redis.RedisCache; 
 | 
import com.ruoyi.common.enums.BusinessType; 
 | 
import com.ruoyi.common.enums.PreachFormEnum; 
 | 
import com.ruoyi.common.utils.DtoConversionUtils; 
 | 
import com.ruoyi.common.utils.PageUtils; 
 | 
import com.ruoyi.common.utils.poi.ExcelUtil; 
 | 
import com.smartor.domain.*; 
 | 
import com.smartor.mapper.PatMedInhospMapper; 
 | 
import com.smartor.mapper.PatMedOuthospMapper; 
 | 
import com.smartor.service.IServiceSubtaskRecordService; 
 | 
import com.smartor.service.IServiceSubtaskService; 
 | 
import com.smartor.service.IServiceTaskService; 
 | 
import io.swagger.annotations.Api; 
 | 
import io.swagger.annotations.ApiOperation; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.collections4.CollectionUtils; 
 | 
import org.apache.commons.lang3.ObjectUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.web.bind.annotation.*; 
 | 
  
 | 
import javax.servlet.http.HttpServletResponse; 
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
/** 
 | 
 * 单一任务(随访)Controller 
 | 
 * 
 | 
 * @author ruoyi 
 | 
 * @date 2024-02-02 
 | 
 */ 
 | 
@Slf4j 
 | 
@Api(description = "单一任务(随访宣教)") 
 | 
@RestController 
 | 
@RequestMapping("/smartor/serviceSubtask") 
 | 
public class ServiceSubtaskController extends BaseController { 
 | 
    @Autowired 
 | 
    private IServiceSubtaskService serviceSubtaskService; 
 | 
  
 | 
    @Autowired 
 | 
    private IServiceTaskService serviceTaskService; 
 | 
  
 | 
    @Autowired 
 | 
    private IServiceSubtaskRecordService serviceSubtaskRecordService; 
 | 
  
 | 
    /** 
 | 
     * 查询患者随访信息 
 | 
     */ 
 | 
    @ApiOperation("查询患者随访信息") 
 | 
    //@PreAuthorize("@ss.hasPermi('system:taskcall:list')") 
 | 
    @PostMapping("/patItem") 
 | 
    public TableDataInfo patItem(@RequestBody ServiceSubtaskVO serviceSubtaskVO) { 
 | 
        PageUtils.startPageByPost(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize()); 
 | 
        List<ServiceSubtask> serviceSubtaskList = null; 
 | 
        LoginUser loginUser = getLoginUser(); 
 | 
        SysUser user = loginUser.getUser(); 
 | 
        serviceSubtaskVO.setOrgid(user.getOrgid()); 
 | 
        if (serviceSubtaskVO != null) { 
 | 
            serviceSubtaskList = serviceSubtaskService.patItem(serviceSubtaskVO); 
 | 
        } 
 | 
        for (ServiceSubtask serviceSubtask : serviceSubtaskList) { 
 | 
            ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); 
 | 
            serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId()); 
 | 
            serviceSubtaskRecord.setOrgid(serviceSubtask.getOrgid()); 
 | 
            if (ObjectUtils.isNotEmpty((serviceSubtask.getTaskid()))) 
 | 
                serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); 
 | 
            serviceSubtask.setServiceSubtaskRecordList(serviceSubtaskRecordService.selectServiceSubtaskRecordList(serviceSubtaskRecord)); 
 | 
  
 | 
            ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); 
 | 
            if (ObjectUtils.isNotEmpty(serviceTask)) serviceSubtask.setPreachform(serviceTask.getPreachform()); 
 | 
        } 
 | 
        Map<String, Object> map = serviceSubtaskService.patItemCount(serviceSubtaskVO); 
 | 
        map.put("serviceSubtaskList", serviceSubtaskList); 
 | 
        List<Map<String, Object>> list = new ArrayList<>(); 
 | 
        list.add(map); 
 | 
        //获取total 
 | 
        long total = PageUtils.count(new ISelect() { 
 | 
            @Override 
 | 
            public void doSelect() { 
 | 
                serviceSubtaskVO.setPageNum(null); 
 | 
                serviceSubtaskVO.setPageSize(null); 
 | 
                serviceSubtaskService.patItem(serviceSubtaskVO); 
 | 
            } 
 | 
        }); 
 | 
        return getDataTable2(total, list); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 导出单一任务(随访宣教)列表 
 | 
     */ 
 | 
    //@PreAuthorize("@ss.hasPermi('system:taskcall:export')") 
 | 
    @Log(title = "单一任务(随访宣教)", businessType = BusinessType.EXPORT) 
 | 
    @PostMapping("/patItemExport") 
 | 
    public void patItemExport(HttpServletResponse response, ServiceSubtaskVO serviceSubtaskVO) { 
 | 
        List<ServiceSubtask> serviceSubtaskList = null; 
 | 
        if (serviceSubtaskVO != null) { 
 | 
            if (serviceSubtaskVO.getPageNum() != null && serviceSubtaskVO.getPageSize() != null) 
 | 
                PageUtils.startPageByPost(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize()); 
 | 
            serviceSubtaskList = serviceSubtaskService.patItem(serviceSubtaskVO); 
 | 
        } 
 | 
        List<ServiceSubtaskExprot> serviceSubtaskExprots = null; 
 | 
        if (!CollectionUtils.isEmpty(serviceSubtaskList)) { 
 | 
            serviceSubtaskExprots = DtoConversionUtils.sourceToTarget(serviceSubtaskList, ServiceSubtaskExprot.class); 
 | 
            for (ServiceSubtaskExprot serviceSubtaskExprot : serviceSubtaskExprots) { 
 | 
                String pf = PreachFormEnum.getDescByCode(serviceSubtaskExprot.getPreachform()); 
 | 
                serviceSubtaskExprot.setPreachform(pf); 
 | 
            } 
 | 
  
 | 
        } 
 | 
        ExcelUtil<ServiceSubtaskExprot> util = new ExcelUtil<ServiceSubtaskExprot>(ServiceSubtaskExprot.class); 
 | 
        util.exportExcel(response, serviceSubtaskExprots, "患者随访信息表单"); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 查询患者随访信息 
 | 
     */ 
 | 
    @ApiOperation("查询患者随访信息") 
 | 
    //@PreAuthorize("@ss.hasPermi('system:taskcall:list')") 
 | 
    @PostMapping("/patItemByCondition") 
 | 
    public TableDataInfo patItemByCondition(@RequestBody ServiceSubtaskVO serviceSubtaskVO) { 
 | 
        List<ServiceSubtask> serviceSubtaskList = null; 
 | 
        if (serviceSubtaskVO != null) { 
 | 
            PageUtils.startPageByPost(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize()); 
 | 
            serviceSubtaskList = serviceSubtaskService.patItem2(serviceSubtaskVO); 
 | 
        } 
 | 
        for (ServiceSubtask serviceSubtask : serviceSubtaskList) { 
 | 
            ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); 
 | 
            serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId()); 
 | 
            serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); 
 | 
            serviceSubtask.setServiceSubtaskRecordList(serviceSubtaskRecordService.selectServiceSubtaskRecordList(serviceSubtaskRecord)); 
 | 
        } 
 | 
        Map<String, Object> map = serviceSubtaskService.patItemCount(serviceSubtaskVO); 
 | 
        map.put("serviceSubtaskList", serviceSubtaskList); 
 | 
        List<Map<String, Object>> list = new ArrayList<>(); 
 | 
        list.add(map); 
 | 
        //获取total 
 | 
        long total = PageUtils.count(new ISelect() { 
 | 
            @Override 
 | 
            public void doSelect() { 
 | 
                serviceSubtaskVO.setPageNum(null); 
 | 
                serviceSubtaskVO.setPageSize(null); 
 | 
                serviceSubtaskService.patItem2(serviceSubtaskVO); 
 | 
            } 
 | 
        }); 
 | 
        return getDataTable2(total, list); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 导出单一任务(随访宣教)列表 
 | 
     */ 
 | 
    //@PreAuthorize("@ss.hasPermi('system:taskcall:export')") 
 | 
    @Log(title = "单一任务(随访宣教)", businessType = BusinessType.EXPORT) 
 | 
    @PostMapping("/export") 
 | 
    public void export(HttpServletResponse response, ServiceSubtask serviceSubtask) { 
 | 
        ServiceSubtaskVO serviceSubtaskVO = DtoConversionUtils.sourceToTarget(serviceSubtask, ServiceSubtaskVO.class); 
 | 
        List<ServiceSubtask> list = serviceSubtaskService.selectServiceSubtaskList(serviceSubtaskVO); 
 | 
        ExcelUtil<ServiceSubtask> util = new ExcelUtil<ServiceSubtask>(ServiceSubtask.class); 
 | 
        util.exportExcel(response, list, "单一任务(随访)数据"); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 随访数据查询 
 | 
     */ 
 | 
    @Log(title = "随访数据查询", businessType = BusinessType.EXPORT) 
 | 
    @PostMapping("/querySubtaskList") 
 | 
    public AjaxResult querySubtaskList(@RequestBody ServiceSubtaskVO serviceSubtaskVO) { 
 | 
        PageUtils.startPageByPost(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize()); 
 | 
        serviceSubtaskService.selectServiceSubtaskList(serviceSubtaskVO); 
 | 
        return success(serviceSubtaskService.selectServiceSubtaskList(serviceSubtaskVO)); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 再次随访数据查询 
 | 
     */ 
 | 
    //@PreAuthorize("@ss.hasPermi('system:taskcall:export')") 
 | 
    @Log(title = "再次随访数据查询", businessType = BusinessType.EXPORT) 
 | 
    @PostMapping("/querySubtaskListAgain") 
 | 
    public TableDataInfo querySubtaskListAgain(@RequestBody ServiceSubtaskVO serviceSubtaskVO) { 
 | 
        PageUtils.startPageByPost(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize()); 
 | 
        serviceSubtaskService.selectServiceSubtaskListAgain(serviceSubtaskVO); 
 | 
        return getDataTable(serviceSubtaskService.selectServiceSubtaskListAgain(serviceSubtaskVO)); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 获取单一任务(随访)详细信息 
 | 
     */ 
 | 
    //@PreAuthorize("@ss.hasPermi('system:taskcall:query')") 
 | 
    @GetMapping(value = "/getInfo/{id}") 
 | 
    public AjaxResult getInfo(@PathVariable("id") Long id) { 
 | 
        return success(serviceSubtaskService.selectServiceSubtaskById(id)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 新增或修改删除单一任务 
 | 
     */ 
 | 
    @ApiOperation("新增或修改删除单一任务") 
 | 
    //@PreAuthorize("@ss.hasPermi('system:task:add')") 
 | 
    @Log(title = "单一任务(随访)", businessType = BusinessType.INSERT) 
 | 
    @PostMapping("/insertOrUpdateTask") 
 | 
    public AjaxResult insertOrUpdateHeTask(@RequestBody ServiceTaskVO ivrTaskVO) { 
 | 
        log.info("insertOrUpdateHeTask的入参为:{}", ivrTaskVO); 
 | 
        LoginUser loginUser = getLoginUser(); 
 | 
        SysUser user = loginUser.getUser(); 
 | 
        ivrTaskVO.setCreateBy(user.getNickName()); 
 | 
        ivrTaskVO.setUpdateBy(user.getNickName()); 
 | 
        ivrTaskVO.setOrgid(user.getOrgid()); 
 | 
        return success(serviceSubtaskService.insertOrUpdateTask(ivrTaskVO)); 
 | 
    } 
 | 
  
 | 
    @ApiOperation("修改子任务") 
 | 
    @PostMapping("/update") 
 | 
    public AjaxResult update(@RequestBody ServiceSubtask serviceSubtask) { 
 | 
        serviceSubtask.setUpdateBy(getLoginUser().getUser().getNickName()); 
 | 
        return toAjax(serviceSubtaskService.updateServiceSubtask(serviceSubtask)); 
 | 
    } 
 | 
  
 | 
    @ApiOperation("新增子任务") 
 | 
    @PostMapping("/addSubTask") 
 | 
    public AjaxResult addSubTask(@RequestBody ServiceSubtask serviceSubtask) { 
 | 
        SysUser user = getLoginUser().getUser(); 
 | 
        if (ObjectUtils.isNotEmpty(user)) serviceSubtask.setOrgid(user.getOrgid()); 
 | 
        return toAjax(serviceSubtaskService.insertServiceSubtask(serviceSubtask)); 
 | 
    } 
 | 
  
 | 
    @ApiOperation("患者再次随访") 
 | 
    @PostMapping("/addSubTaskAgain") 
 | 
    public AjaxResult addSubTaskAgain(@RequestBody ServiceSubtask serviceSubtask) { 
 | 
        SysUser user = getLoginUser().getUser(); 
 | 
        if (ObjectUtils.isNotEmpty(user)) serviceSubtask.setOrgid(user.getOrgid()); 
 | 
        return success(serviceSubtaskService.addSubTaskAgain(serviceSubtask)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据条件查询任务信息 
 | 
     */ 
 | 
    @ApiOperation("根据条件查询任务信息") 
 | 
    @PostMapping("/queryTaskByCondition") 
 | 
    public AjaxResult queryTaskByCondition(@RequestBody ServiceSubtaskVO ivrTaskcallVO) { 
 | 
        //根据入参查询信息 
 | 
        ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(ivrTaskcallVO, ServiceSubtask.class); 
 | 
        ServiceTaskVO ivrTaskVO = serviceSubtaskService.queryTaskByCondition(serviceSubtask); 
 | 
        return success(ivrTaskVO); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 电话回调任务(上海) 
 | 
     */ 
 | 
    @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()); 
 | 
        return toAjax(serviceSubtaskService.saveQuestionAnswerPhone(serviceSubTaskDetailReq)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 通话记录回调 
 | 
     */ 
 | 
    @ApiOperation("通话记录回调(上海)") 
 | 
    @PostMapping("/recordAcceptshanghai") 
 | 
    public AjaxResult recordAccepshanghait(@RequestBody ServiceSubTaskDetailReq serviceSubTaskDetailReq) { 
 | 
        return toAjax(serviceSubtaskService.saveQuestionAnswerPhone(serviceSubTaskDetailReq)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 通话记录回调 
 | 
     */ 
 | 
    @ApiOperation("通话记录回调(雨绮)") 
 | 
    @PostMapping("/recordAccept") 
 | 
    public AjaxResult recordAccept(@RequestBody PhoneCallRecordVO phoneCallRecordVO) { 
 | 
        log.info("通话记录回调(雨绮):{}", phoneCallRecordVO); 
 | 
        serviceSubtaskService.recordAccept(phoneCallRecordVO); 
 | 
        return success(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取每个月的随访、复诊量 
 | 
     */ 
 | 
    @ApiOperation("获取每个月的随访、复诊量") 
 | 
    @PostMapping("/getSfFzInfoEveryMonth") 
 | 
    public TableDataInfo getSfFzInfoEveryMonth(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) { 
 | 
        return getDataTable(serviceSubtaskService.getSfFzInfoEveryMonth(serviceSubtaskCountReq)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取随访统计比例 
 | 
     */ 
 | 
    @ApiOperation("获取随访统计比例") 
 | 
    @PostMapping("/getSfStatistics") 
 | 
    public AjaxResult getSfStatistics(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) { 
 | 
        if (CollectionUtils.isEmpty(serviceSubtaskCountReq.getServiceType())) { 
 | 
            return error("服务类型不能为空"); 
 | 
        } 
 | 
        return success(serviceSubtaskService.getSfStatistics(serviceSubtaskCountReq)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取随访统计比例 
 | 
     */ 
 | 
    @ApiOperation("获取随访满意度统计") 
 | 
    @PostMapping("/getSfStatisticsJoy") 
 | 
    public AjaxResult getSfStatisticsJoy(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) { 
 | 
        if (CollectionUtils.isEmpty(serviceSubtaskCountReq.getServiceType())) { 
 | 
            return error("服务类型不能为空"); 
 | 
        } 
 | 
        return success(serviceSubtaskService.getSfStatisticsJoy(serviceSubtaskCountReq)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 随访统计导出 
 | 
     */ 
 | 
    //@PreAuthorize("@ss.hasPermi('system:taskcall:export')") 
 | 
    @Log(title = "随访统计导出)", businessType = BusinessType.EXPORT) 
 | 
    @PostMapping("/getSfStatisticsExport") 
 | 
    public void export(HttpServletResponse response, ServiceSubtaskCountReq serviceSubtaskCountReq) { 
 | 
        List<ServiceSubtaskStatistic> sfStatistics = serviceSubtaskService.getSfStatistics(serviceSubtaskCountReq); 
 | 
        ExcelUtil<ServiceSubtaskStatistic> util = new ExcelUtil<ServiceSubtaskStatistic>(ServiceSubtaskStatistic.class); 
 | 
        util.exportExcel(response, sfStatistics, "随访统计导出"); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 随访统计导出 
 | 
     */ 
 | 
    @ApiOperation("服务统计查询-按时间维度统计出院/门诊随访数据") 
 | 
    @PostMapping("/getServiceStatistics") 
 | 
    public AjaxResult getServiceStatistics(@RequestBody ServiceStatisticsRequest serviceStatisticsRequest) { 
 | 
        SysUser user = getLoginUser().getUser(); 
 | 
        serviceStatisticsRequest.setOrgid(user.getOrgid()); 
 | 
        List<ServiceStatisticsResponse> serviceStatistics = serviceSubtaskService.getServiceStatistics(serviceStatisticsRequest); 
 | 
        return success(serviceStatistics); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 获取随访统计比例 
 | 
     */ 
 | 
    @ApiOperation("获取随访满意度明细") 
 | 
    @PostMapping("/getSfStatisticsJoydetails") 
 | 
    public AjaxResult getSfStatisticsJoydetails(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) { 
 | 
        if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() == 0 && serviceSubtaskCountReq.getDeptcodes().size() == 0) { 
 | 
            return error("科室或病区不能为空"); 
 | 
        } 
 | 
        return success(serviceSubtaskService.getSfStatisticsJoydetails(serviceSubtaskCountReq)); 
 | 
    } 
 | 
  
 | 
} 
 |