package com.smartor.service.impl;
|
|
import java.util.*;
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
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 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.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 IvrLibaTemplateScriptMapper ivrLibaTemplateScriptMapper;
|
|
@Autowired
|
private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper;
|
|
@Autowired
|
private PatArchiveMapper patArchiveMapper;
|
|
@Autowired
|
private HeLibraryMapper heLibraryMapper;
|
|
|
@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);
|
}
|
|
/**
|
* 查询语音任务列表
|
*
|
* @param serviceTask 语音任务
|
* @return 语音任务
|
*/
|
@Override
|
|
public List<ServiceTask> selectServiceTaskList(ServiceTask serviceTask) {
|
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 List getScriptInfoByCondition(Long taskid, Long patid) {
|
//通过任务ID获取模板ID
|
ServiceTask serviceTask = selectServiceTaskByTaskid(taskid);
|
List info = new ArrayList();
|
if (serviceTask.getType().equals("1")) {
|
//随访
|
info = sfInfo(serviceTask, patid);
|
} else if (serviceTask.getType().equals("2")) {
|
//问卷
|
info = wjInfo(serviceTask, patid);
|
} else {
|
//宣教
|
info = xjInfo(serviceTask.getTemplateid());
|
}
|
|
//只要打开了页面,就算成功
|
ServiceSubtask ServiceTaskSingle = new ServiceSubtask();
|
ServiceTaskSingle.setTaskid(taskid);
|
ServiceTaskSingle.setPatid(patid);
|
ServiceTaskSingle.setResult("success");
|
ServiceTaskSingle.setFinishtime(new Date());
|
serviceSubtaskMapper.updateServiceSubtaskByCondition(ServiceTaskSingle);
|
|
return info;
|
}
|
|
/**
|
* 随访信息
|
*
|
* @param serviceTask
|
* @param patid
|
* @return
|
*/
|
public List sfInfo(ServiceTask serviceTask, Long patid) {
|
//通过模板ID获取问题信息
|
IvrLibaTemplateScript ivrLibaTemplateScript = new IvrLibaTemplateScript();
|
ivrLibaTemplateScript.setTemplateid(serviceTask.getTemplateid());
|
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 = patArchiveMapper.selectPatArchiveByPatid(patid);
|
|
//通过患者信息和任务信息中的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);
|
}
|
}
|
return ivrLibaTemplateScriptVOS;
|
}
|
|
/**
|
* 问卷信息
|
*
|
* @param serviceTask
|
* @param patid
|
* @return
|
*/
|
private List wjInfo(ServiceTask serviceTask, Long patid) {
|
//通过模板ID获取问题信息
|
SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript();
|
svyLibTemplateScript.setId(Long.valueOf(serviceTask.getTemplateid()));
|
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 = patArchiveMapper.selectPatArchiveByPatid(patid);
|
|
//通过患者信息和任务信息中的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) : ""));
|
}
|
}
|
//替换患者个人信息数据
|
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);
|
}
|
}
|
return svyLibTemplateScriptVOS;
|
}
|
|
private List xjInfo(Long templateId) {
|
HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(Long.valueOf(templateId));
|
List list = new ArrayList();
|
list.add(heLibrary);
|
return list;
|
|
}
|
}
|