package com.smartor.service.impl;
|
|
import java.util.*;
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.google.gson.Gson;
|
import com.ruoyi.common.core.redis.RedisCache;
|
import com.ruoyi.common.exception.base.BaseException;
|
import com.ruoyi.common.utils.DateUtils;
|
import com.ruoyi.common.utils.DtoConversionUtils;
|
import com.ruoyi.common.utils.http.HttpUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import com.smartor.domain.*;
|
import com.smartor.mapper.*;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.collections4.CollectionUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.stereotype.Service;
|
import com.smartor.service.IServiceTaskService;
|
import org.springframework.transaction.annotation.Transactional;
|
|
/**
|
* 语音任务Service业务层处理
|
*
|
* @author smartor
|
* @date 2023-03-24
|
*/
|
@Slf4j
|
@Service
|
public class ServiceTaskServiceImpl implements IServiceTaskService {
|
@Autowired
|
private ServiceTaskMapper serviceTaskMapper;
|
|
@Autowired
|
private ServiceSubtaskMapper serviceSubtaskMapper;
|
|
@Autowired
|
private IvrTaskTemplateMapper ivrTaskTemplateMapper;
|
|
@Autowired
|
private PatArchiveImportMapper patArchiveImportMapper;
|
|
|
@Autowired
|
private SvyTaskTemplateMapper svyTaskTemplateMapper;
|
|
@Autowired
|
private HeLibraryMapper heLibraryMapper;
|
|
@Autowired
|
private IvrLibaTemplateScriptMapper ivrLibaTemplateScriptMapper;
|
|
@Autowired
|
private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper;
|
|
@Autowired
|
private PatArchiveMapper patArchiveMapper;
|
|
|
@Autowired
|
private IvrLibaTemplateTargetoptionMapper ivrLibaTemplateTargetOptionMapper;
|
|
@Autowired
|
private SvyLibTemplateTargetoptionMapper svyLibTemplateTargetoptionMapper;
|
|
@Autowired
|
private RedisCache redisCache;
|
|
/**
|
* 查询语音任务
|
*
|
* @param taskid 语音任务主键
|
* @return 语音任务
|
*/
|
@Override
|
public ServiceTask selectServiceTaskByTaskid(Long taskid) {
|
return serviceTaskMapper.selectServiceTaskByTaskid(taskid);
|
}
|
|
@Override
|
public List<ServiceTask> selectServiceTaskAndtaskDeptList(ServiceTask serviceTask) {
|
//如果为0不置空,会影响到我的查询
|
if (CollectionUtils.isEmpty(serviceTask.getLeaveldeptcodes()) || serviceTask.getLeaveldeptcodes().size() == 0)
|
serviceTask.setLeaveldeptcodes(new ArrayList<>());
|
if (!CollectionUtils.isEmpty(serviceTask.getLeavehospitaldistrictcodes()) && serviceTask.getLeavehospitaldistrictcodes().size() > 0) {
|
List<String> leaveldeptcodes = serviceTask.getLeaveldeptcodes();
|
leaveldeptcodes.addAll(serviceTask.getLeavehospitaldistrictcodes());
|
serviceTask.setLeaveldeptcodes(leaveldeptcodes);
|
}
|
return serviceTaskMapper.selectServiceTaskAndtaskDeptList(serviceTask);
|
}
|
|
/**
|
* 查询语音任务列表
|
*
|
* @param serviceTask 语音任务
|
* @return 语音任务
|
*/
|
@Override
|
|
public List<ServiceTask> selectServiceTaskList(ServiceTask serviceTask) {
|
//如果为0不置空,会影响到我的查询
|
if (CollectionUtils.isEmpty(serviceTask.getLeaveldeptcodes()) || serviceTask.getLeaveldeptcodes().size() == 0)
|
serviceTask.setLeaveldeptcodes(null);
|
if (CollectionUtils.isEmpty(serviceTask.getLeavehospitaldistrictcodes()) || serviceTask.getLeavehospitaldistrictcodes().size() == 0)
|
serviceTask.setLeavehospitaldistrictcodes(null);
|
return serviceTaskMapper.selectServiceTaskList(serviceTask);
|
}
|
|
/**
|
* 新增语音任务
|
*
|
* @param serviceTask 语音任务
|
* @return 结果
|
*/
|
@Override
|
public int insertServiceTask(ServiceTask serviceTask) {
|
serviceTask.setCreateTime(DateUtils.getNowDate());
|
serviceTask.setUpdateTime(DateUtils.getNowDate());
|
return serviceTaskMapper.insertServiceTask(serviceTask);
|
}
|
|
/**
|
* 修改语音任务
|
*
|
* @param serviceTask 语音任务
|
* @return 结果
|
*/
|
@Override
|
public int updateServiceTask(ServiceTask serviceTask) {
|
serviceTask.setUpdateTime(DateUtils.getNowDate());
|
return serviceTaskMapper.updateServiceTask(serviceTask);
|
}
|
|
/**
|
* 批量删除语音任务
|
*
|
* @param taskids 需要删除的语音任务主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteServiceTaskByTaskids(Long[] taskids) {
|
return serviceTaskMapper.deleteServiceTaskByTaskids(taskids);
|
}
|
|
/**
|
* 删除语音任务信息
|
*
|
* @param taskid 语音任务主键
|
* @return 结果
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public Boolean deleteServiceTaskByTaskid(Long taskid) {
|
ServiceSubtask ServiceTaskcall = new ServiceSubtask();
|
ServiceTaskcall.setTaskid(taskid);
|
ServiceTaskcall.setDelFlag("1");
|
Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(ServiceTaskcall);
|
Boolean isSuccess = false;
|
if (!aBoolean) {
|
new BaseException("任务删除失败");
|
}
|
isSuccess = serviceTaskMapper.deleteServiceTaskByTaskid(taskid);
|
return isSuccess;
|
}
|
|
@Override
|
public Map<String, Object> getScriptInfoByCondition(Long taskid, Long patid, Boolean isFinish, String patfrom) {
|
Map<String, Object> map = new HashMap<>();
|
ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
|
serviceSubtaskVO.setPatid(patid);
|
serviceSubtaskVO.setTaskid(taskid);
|
// List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
|
// //查询患者是否重覆做题
|
// if (CollectionUtils.isEmpty(selectServiceSubtaskList)) {
|
// Long submit = selectServiceSubtaskList.get(0).getSubmit();
|
// if (submit == 1L) {
|
// map.put("submit", "1");
|
// return map;
|
// }
|
// }
|
//通过任务ID获取模板ID
|
ServiceTask serviceTask = selectServiceTaskByTaskid(taskid);
|
List info = new ArrayList();
|
if (serviceTask.getType().equals("1")) {
|
//随访
|
log.error("文本随访问题");
|
info = sfInfo(serviceTask, patid, patfrom);
|
} else if (serviceTask.getType().equals("2")) {
|
//问卷
|
log.error("文本问卷问题");
|
info = wjInfo(serviceTask, patid, isFinish, patfrom);
|
} else {
|
//宣教
|
info = xjInfo(Long.valueOf(serviceTask.getLibtemplateid()), taskid, patid, isFinish);
|
//只要打开了页面,就算成功
|
if (isFinish) {
|
ServiceSubtask ss = new ServiceSubtask();
|
ss.setTaskid(taskid);
|
ss.setPatid(patid);
|
Integer integer = serviceSubtaskMapper.selectSendstateByCondition(ss);
|
if (integer != null && integer != 6) {
|
ss.setSendstate(1L);
|
ss.setResult("success");
|
ss.setFinishtime(new Date());
|
serviceSubtaskMapper.updateServiceSubtaskByCondition(ss);
|
}
|
}
|
}
|
|
SvyTaskTemplate svyTaskTemplate = svyTaskTemplateMapper.selectSvyTaskTemplateBySvyid(serviceTask.getTemplateid());
|
if (StringUtils.isNotEmpty(serviceTask.getKcb())) map.put("kcb", serviceTask.getKcb());
|
map.put("script", info);
|
if (StringUtils.isNotEmpty(serviceTask.getJsy())) map.put("jsy", serviceTask.getJsy());
|
map.put("type", serviceTask.getType());
|
map.put("taskName", serviceTask.getTaskName());
|
map.put("submit", "0");
|
|
return map;
|
}
|
|
/**
|
* 随访信息
|
*
|
* @param serviceTask
|
* @param patid
|
* @return
|
*/
|
public List sfInfo(ServiceTask serviceTask, Long patid, String patfrom) {
|
//通过模板ID获取问题信息
|
IvrLibaTemplateScript ivrLibaTemplateScript = new IvrLibaTemplateScript();
|
ivrLibaTemplateScript.setTemplateid(Long.valueOf(serviceTask.getLibtemplateid()));
|
ivrLibaTemplateScript.setDelFlag("0");
|
List<IvrLibaTemplateScript> ivrLibaTemplateScripts = ivrLibaTemplateScriptMapper.selectIvrLibaTemplateScriptList(ivrLibaTemplateScript);
|
if (CollectionUtils.isEmpty(ivrLibaTemplateScripts) || ivrLibaTemplateScripts.size() == 0) {
|
log.info("ivrLibaTemplateScripts为空了,请尽快联系管理员处理");
|
return new ArrayList<>();
|
}
|
List<IvrLibaTemplateScriptVO> ivrLibaTemplateScriptVOS = DtoConversionUtils.sourceToTarget(ivrLibaTemplateScripts, IvrLibaTemplateScriptVO.class);
|
|
//获取患者信息
|
PatArchive patArchive = null;
|
if (patfrom.equals("0")) patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
|
else if (patfrom.equals("1")) {
|
PatArchiveImport patArchiveImport = patArchiveImportMapper.selectPatArchiveImportById(patid);
|
patArchive = DtoConversionUtils.sourceToTarget(patArchiveImport, PatArchive.class);
|
}
|
|
//通过患者信息和任务信息中的textParam对问题中的变量进行填充
|
ObjectMapper objectMapper = new ObjectMapper();
|
Map<String, Map<String, String>> serviceTaskMap = null;
|
try {
|
serviceTaskMap = objectMapper.readValue(serviceTask.getTextParam(), Map.class);
|
} catch (JsonProcessingException e) {
|
e.printStackTrace();
|
}
|
List<Map<String, String>> mapList = new ArrayList<>();
|
|
for (Map<String, String> map : serviceTaskMap.values()) {
|
mapList.add(map);
|
}
|
|
//将模板问题话术里的通配符替换
|
for (IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO : ivrLibaTemplateScriptVOS) {
|
if (StringUtils.isNotEmpty(ivrLibaTemplateScriptVO.getScriptContent())) {
|
for (Map<String, String> map : mapList) {
|
for (String key : map.keySet()) {
|
|
ivrLibaTemplateScriptVO.setScriptContent(ivrLibaTemplateScriptVO.getScriptContent().replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : ""));
|
}
|
}
|
//替换患者个人信息数据
|
ivrLibaTemplateScriptVO.setScriptContent(ivrLibaTemplateScriptVO.getScriptContent().replace("${name}", StringUtils.isNotEmpty(patArchive.getName()) ? patArchive.getName() : ""));
|
ivrLibaTemplateScriptVO.setScriptContent(ivrLibaTemplateScriptVO.getScriptContent().replace("${dzz}", StringUtils.isNotEmpty(patArchive.getPlaceOfResidence()) ? patArchive.getPlaceOfResidence() : ""));
|
ivrLibaTemplateScriptVO.setScriptContent(ivrLibaTemplateScriptVO.getScriptContent().replace("${dhh}", StringUtils.isNotEmpty(patArchive.getTelcode()) ? patArchive.getTelcode() : ""));
|
|
//获取问题选项
|
IvrLibaTemplateTargetoption ivrLibaTemplateTargetoption = new IvrLibaTemplateTargetoption();
|
ivrLibaTemplateTargetoption.setScriptid(ivrLibaTemplateScriptVO.getId());
|
List<IvrLibaTemplateTargetoption> ivrLibaTemplateTargetoptions = ivrLibaTemplateTargetOptionMapper.selectIvrLibaTemplateTargetoptionList(ivrLibaTemplateTargetoption);
|
ivrLibaTemplateScriptVO.setIvrLibaScriptTargetoptionList(ivrLibaTemplateTargetoptions);
|
}
|
}
|
Collections.sort(ivrLibaTemplateScriptVOS, Comparator.comparingInt(IvrLibaTemplateScriptVO::getSort));
|
|
return ivrLibaTemplateScriptVOS;
|
}
|
|
/**
|
* 问卷信息
|
*
|
* @param serviceTask
|
* @param patid
|
* @return
|
*/
|
private List wjInfo(ServiceTask serviceTask, Long patid, Boolean isFinish, String patfrom) {
|
//用户点击了外链,就算他领取了
|
//这样做会有一个问题,如果固定任务,会出现一个任务里,有多个该患者
|
ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO();
|
serviceSubtaskVO.setTaskid(serviceTask.getTaskid());
|
serviceSubtaskVO.setPatid(patid);
|
List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
|
if (CollectionUtils.isNotEmpty(serviceSubtaskList) && serviceSubtaskList.size() == 1) {
|
if (serviceSubtaskList.get(0).getSendstate() == 3 && isFinish == true) {
|
ServiceSubtask serviceSubtask = new ServiceSubtask();
|
serviceSubtask.setSendstate(1L);
|
serviceSubtask.setPatid(patid);
|
serviceSubtask.setTaskid(serviceTask.getTaskid());
|
serviceSubtaskMapper.updateServiceSubtaskByPatId(serviceSubtask);
|
}
|
}
|
//通过模板ID获取问题信息
|
SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript();
|
svyLibTemplateScript.setSvyid(Long.valueOf(serviceTask.getLibtemplateid()));
|
svyLibTemplateScript.setDelFlag("0");
|
List<SvyLibTemplateScript> svyLibTemplateScripts = svyLibTemplateScriptMapper.selectSvyLibTemplateScriptList(svyLibTemplateScript);
|
if (CollectionUtils.isEmpty(svyLibTemplateScripts) || svyLibTemplateScripts.size() == 0) {
|
log.info("ivrLibaTemplateScripts为空了,请尽快联系管理员处理");
|
return new ArrayList<>();
|
}
|
List<SvyLibTemplateScriptVO> svyLibTemplateScriptVOS = DtoConversionUtils.sourceToTarget(svyLibTemplateScripts, SvyLibTemplateScriptVO.class);
|
|
//获取患者信息
|
PatArchive patArchive = null;
|
if (patfrom.equals("0")) patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
|
else if (patfrom.equals("1")) {
|
PatArchiveImport patArchiveImport = patArchiveImportMapper.selectPatArchiveImportById(patid);
|
patArchive = DtoConversionUtils.sourceToTarget(patArchiveImport, PatArchive.class);
|
}
|
|
|
//通过患者信息和任务信息中的textParam对问题中的变量进行填充
|
ObjectMapper objectMapper = new ObjectMapper();
|
Map<String, Map<String, String>> ivrTaskMap = null;
|
try {
|
ivrTaskMap = objectMapper.readValue(serviceTask.getTextParam(), Map.class);
|
} catch (JsonProcessingException e) {
|
e.printStackTrace();
|
}
|
List<Map<String, String>> mapList = new ArrayList<>();
|
|
for (Map<String, String> map : ivrTaskMap.values()) {
|
mapList.add(map);
|
}
|
|
//将模板问题话术里的通配符替换
|
for (SvyLibTemplateScriptVO svyLibTemplateScriptVO : svyLibTemplateScriptVOS) {
|
if (StringUtils.isNotEmpty(svyLibTemplateScriptVO.getScriptContent())) {
|
for (Map<String, String> map : mapList) {
|
for (String key : map.keySet()) {
|
|
svyLibTemplateScriptVO.setScriptContent(svyLibTemplateScriptVO.getScriptContent().replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : ""));
|
}
|
}
|
//替换患者个人信息数据
|
log.error("问题id:{}, 问题内容:{}", svyLibTemplateScriptVO.getId(), svyLibTemplateScriptVO.getScriptContent());
|
if (StringUtils.isNotEmpty(svyLibTemplateScriptVO.getScriptContent()) && ObjectUtils.isNotEmpty(patArchive)) {
|
svyLibTemplateScriptVO.setScriptContent(svyLibTemplateScriptVO.getScriptContent().replace("${name}", StringUtils.isNotEmpty(patArchive.getName()) ? patArchive.getName() : ""));
|
svyLibTemplateScriptVO.setScriptContent(svyLibTemplateScriptVO.getScriptContent().replace("${dzz}", StringUtils.isNotEmpty(patArchive.getPlaceOfResidence()) ? patArchive.getPlaceOfResidence() : ""));
|
svyLibTemplateScriptVO.setScriptContent(svyLibTemplateScriptVO.getScriptContent().replace("${dhh}", StringUtils.isNotEmpty(patArchive.getTelcode()) ? patArchive.getTelcode() : ""));
|
}
|
//获取问题选项
|
SvyLibTemplateTargetoption svyLibTemplateTargetoption = new SvyLibTemplateTargetoption();
|
svyLibTemplateTargetoption.setScriptid(svyLibTemplateScriptVO.getId());
|
List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(svyLibTemplateTargetoption);
|
svyLibTemplateScriptVO.setSvyLibTemplateTargetoptions(svyLibTemplateTargetoptions);
|
}
|
}
|
Collections.sort(svyLibTemplateScriptVOS, Comparator.comparingLong(SvyLibTemplateScriptVO::getSort));
|
return svyLibTemplateScriptVOS;
|
}
|
|
private List xjInfo(Long templateId, Long taskid, Long patid, Boolean isFinish) {
|
if (isFinish == true) {
|
ServiceSubtask serviceSubtask = new ServiceSubtask();
|
serviceSubtask.setTaskid(taskid);
|
serviceSubtask.setPatid(patid);
|
Integer integer = serviceSubtaskMapper.selectSendstateByCondition(serviceSubtask);
|
if (integer == 3) {
|
serviceSubtask.setResult("完成");
|
serviceSubtask.setFinishtime(new Date());
|
serviceSubtask.setSendstate(6L);
|
serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask);
|
}
|
}
|
HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(Long.valueOf(templateId));
|
List list = new ArrayList();
|
list.add(heLibrary);
|
return list;
|
|
}
|
}
|