package com.smartor.service.impl;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.google.gson.JsonArray;
|
import com.ruoyi.common.core.redis.RedisCache;
|
import com.ruoyi.common.utils.DateUtils;
|
import com.ruoyi.common.utils.DtoConversionUtils;
|
import com.ruoyi.common.utils.RSAPublicKeyExample;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.smartor.domain.*;
|
import com.smartor.mapper.IvrTaskTemplateScriptMapper;
|
import com.smartor.mapper.ServiceSubtaskAnswerMapper;
|
import com.smartor.mapper.ServiceSubtaskMapper;
|
import com.smartor.mapper.ServiceTaskMapper;
|
import com.smartor.service.IIvrTaskTemplateService;
|
import com.smartor.service.IServiceSubtaskAnswerService;
|
import com.smartor.service.ISvyTaskTemplateService;
|
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.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
|
import java.util.*;
|
|
/**
|
* 任务问卷问题选项Service业务层处理
|
*
|
* @author ruoyi
|
* @date 2024-07-18
|
*/
|
@Slf4j
|
@Service
|
public class ServiceSubtaskAnswerServiceImpl implements IServiceSubtaskAnswerService {
|
@Autowired
|
private ServiceSubtaskAnswerMapper serviceSubtaskAnswerMapper;
|
|
@Autowired
|
private RedisCache redisCache;
|
|
@Value("${pri_key}")
|
private String pri_key;
|
|
/**
|
* 查询任务问卷问题选项
|
*
|
* @param id 任务问卷问题选项主键
|
* @return 任务问卷问题选项
|
*/
|
@Override
|
public ServiceSubtaskAnswer selectServiceSubtaskAnswerById(Long id) {
|
return serviceSubtaskAnswerMapper.selectServiceSubtaskAnswerById(id);
|
}
|
|
/**
|
* 查询任务问卷问题选项列表
|
*
|
* @param serviceSubtaskAnswer 任务问卷问题选项
|
* @return 任务问卷问题选项
|
*/
|
@Override
|
public List<ServiceSubtaskAnswer> selectServiceSubtaskAnswerList(ServiceSubtaskAnswer serviceSubtaskAnswer) {
|
return serviceSubtaskAnswerMapper.selectServiceSubtaskAnswerList(serviceSubtaskAnswer);
|
}
|
|
/**
|
* 新增任务问卷问题选项
|
*
|
* @param serviceSubtaskAnswer 任务问卷问题选项
|
* @return 结果
|
*/
|
@Override
|
public int insertServiceSubtaskAnswer(ServiceSubtaskAnswer serviceSubtaskAnswer) {
|
serviceSubtaskAnswer.setCreateTime(DateUtils.getNowDate());
|
return serviceSubtaskAnswerMapper.insertServiceSubtaskAnswer(serviceSubtaskAnswer);
|
}
|
|
/**
|
* 修改任务问卷问题选项
|
*
|
* @param serviceSubtaskAnswer 任务问卷问题选项
|
* @return 结果
|
*/
|
@Override
|
public int updateServiceSubtaskAnswer(ServiceSubtaskAnswer serviceSubtaskAnswer) {
|
serviceSubtaskAnswer.setUpdateTime(DateUtils.getNowDate());
|
return serviceSubtaskAnswerMapper.updateServiceSubtaskAnswer(serviceSubtaskAnswer);
|
}
|
|
/**
|
* 批量删除任务问卷问题选项
|
*
|
* @param ids 需要删除的任务问卷问题选项主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteServiceSubtaskAnswerByIds(Long[] ids) {
|
return serviceSubtaskAnswerMapper.deleteServiceSubtaskAnswerByIds(ids);
|
}
|
|
/**
|
* 删除任务问卷问题选项信息
|
*
|
* @param id 任务问卷问题选项主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteServiceSubtaskAnswerById(Long id) {
|
return serviceSubtaskAnswerMapper.deleteServiceSubtaskAnswerById(id);
|
}
|
|
@Override
|
public Integer saveQuestionAnswer(ServiceSubTaskAnswerReq serviceSubTaskAnswerReq) {
|
Set<String> allKeys = redisCache.getAllKeys();
|
if (ObjectUtils.isNotEmpty(serviceSubTaskAnswerReq)) {
|
//需要立即执行
|
RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
|
Long tid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskAnswerReq.getParam1(), pri_key));
|
Long pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskAnswerReq.getParam2(), pri_key));
|
|
allKeys = new HashSet<>();
|
if (serviceSubTaskAnswerReq.getType() == 1) {
|
allKeys.add(pid + "-" + tid + "-SFscriptCache");
|
} else if (serviceSubTaskAnswerReq.getType() == 2) {
|
allKeys.add(pid + "-" + tid + "-WJscriptCache");
|
}
|
}
|
|
Long nextScriptno = null;
|
for (String key : allKeys) {
|
String[] split = key.split("-");
|
if (key.contains("-SFscriptCache")) {
|
//包含了,说明了是随访问题
|
List<IvrTaskTemplateScriptVO> cacheList = redisCache.getCacheObject(key);
|
for (int i = 0; i < cacheList.size(); i++) {
|
if (i == 0) {
|
// 说明是第一题
|
IvrTaskTemplateScriptVO ivrLibaTemplateScriptVO = cacheList.get(0);
|
//将第一题的信息放到表中
|
setSFInfo(ivrLibaTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]));
|
nextScriptno = cacheList.get(0).getNextScriptno();
|
} else {
|
//不是第 一 题
|
for (IvrTaskTemplateScriptVO ivrLibaTemplateScriptVO : cacheList) {
|
if (ivrLibaTemplateScriptVO.getId() == nextScriptno) {
|
setSFInfo(ivrLibaTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]));
|
nextScriptno = ivrLibaTemplateScriptVO.getNextScriptno();
|
}
|
}
|
}
|
}
|
} else if (key.contains("-WJscriptCache")) {
|
List<SvyTaskTemplateScriptVO> cacheList = redisCache.getCacheList(key);
|
for (int i = 0; i < cacheList.size(); i++) {
|
if (i == 0) {
|
// 说明是第一题
|
//将第一题的信息放到表中
|
setWJInfo(cacheList.get(0), Long.valueOf(split[1]), Long.valueOf(split[0]));
|
nextScriptno = Long.valueOf(cacheList.get(0).getNextScriptno());
|
} else {
|
for (SvyTaskTemplateScriptVO svyTaskTemplateScriptVO : cacheList) {
|
if (svyTaskTemplateScriptVO.getId() == nextScriptno) {
|
//将第一题的信息放到表中
|
setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]));
|
nextScriptno = Long.valueOf(cacheList.get(0).getNextScriptno());
|
}
|
|
}
|
}
|
}
|
}
|
//将该key和value从redis中,删除
|
redisCache.deleteObject(key);
|
}
|
return 1;
|
}
|
|
/**
|
* 将问题保存到缓存中
|
*
|
* @param serviceSubTaskCacheReq
|
* @return
|
*/
|
@Override
|
public Integer saveQuestionCache(ServiceSubTaskCacheReq serviceSubTaskCacheReq) {
|
RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
|
Long tid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskCacheReq.getParam1(), pri_key));
|
Long pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskCacheReq.getParam2(), pri_key));
|
if (CollectionUtils.isNotEmpty(serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList())) {
|
//随访
|
redisCache.setCacheObject(pid + "-" + tid + "-SFscriptCache", serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList());
|
} else if (CollectionUtils.isNotEmpty(serviceSubTaskCacheReq.getSvyTaskTemplateScriptVOList())) {
|
//问卷
|
redisCache.setCacheObject(pid + "-" + tid + "-WJscriptCache", serviceSubTaskCacheReq.getSvyTaskTemplateScriptVOList());
|
}
|
return 1;
|
}
|
|
@Override
|
public List<ServiceSubtaskAnswer> selectPatQuestionResult(ServiceSubTaskQueryReq serviceSubTaskQueryReq) {
|
log.error("selectPatQuesTionResult的入参为:{}", serviceSubTaskQueryReq);
|
ServiceSubtaskAnswer serviceSubtaskAnswer = new ServiceSubtaskAnswer();
|
serviceSubtaskAnswer.setTaskid(serviceSubTaskQueryReq.getTaskid());
|
serviceSubtaskAnswer.setPatId(serviceSubTaskQueryReq.getPatId());
|
serviceSubtaskAnswer.setScriptid(serviceSubTaskQueryReq.getScriptid());
|
List<ServiceSubtaskAnswer> serviceSubtaskAnswerList = serviceSubtaskAnswerMapper.selectServiceSubtaskAnswerList(serviceSubtaskAnswer);
|
return serviceSubtaskAnswerList;
|
}
|
|
|
private void setSFInfo(IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, Long taskid, Long patid) {
|
ServiceSubtaskAnswer serviceSubtaskAnswer = null;
|
List<ServiceSubtaskOptionAnswer> answerList = new ArrayList<>();
|
if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getScriptType()) && ivrTaskTemplateScriptVO.getScriptType().equals("1") || StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getScriptType()) && ivrTaskTemplateScriptVO.getScriptType().equals("2")) {
|
//1、2为单选或多选
|
for (IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption : ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()) {
|
//获取用户选中的选项号
|
if (ivrTaskTemplateTargetoption.getIsUserOperation() == true) {
|
ServiceSubtaskOptionAnswer serviceSubtaskOptionAnswer = new ServiceSubtaskOptionAnswer();
|
serviceSubtaskOptionAnswer.setId(ivrTaskTemplateTargetoption.getId());
|
serviceSubtaskOptionAnswer.setCode(ivrTaskTemplateTargetoption.getOptionCode());
|
serviceSubtaskOptionAnswer.setValue(ivrTaskTemplateTargetoption.getTargetvalue());
|
serviceSubtaskOptionAnswer.setAppenddesc(ivrTaskTemplateTargetoption.getAppenddesc());
|
answerList.add(serviceSubtaskOptionAnswer);
|
}
|
}
|
} else if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getScriptType()) && ivrTaskTemplateScriptVO.getScriptType().equals("4")) {
|
//填空
|
for (IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption : ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()) {
|
log.error("ivrTaskTemplateTargetoption的值为:{}", ivrTaskTemplateTargetoption);
|
String[] split = ivrTaskTemplateTargetoption.getTargetvalue().split("|");
|
for (String s : split) {
|
ServiceSubtaskOptionAnswer serviceSubtaskOptionAnswer = new ServiceSubtaskOptionAnswer();
|
serviceSubtaskOptionAnswer.setId(ivrTaskTemplateTargetoption.getId());
|
serviceSubtaskOptionAnswer.setCode(ivrTaskTemplateTargetoption.getOptionCode());
|
serviceSubtaskOptionAnswer.setValue(s);
|
serviceSubtaskOptionAnswer.setAppenddesc(ivrTaskTemplateTargetoption.getAppenddesc());
|
answerList.add(serviceSubtaskOptionAnswer);
|
}
|
}
|
} else {
|
//非单多选(问答)
|
if (CollectionUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList())) {
|
log.error("IvrTaskScriptTargetoptionList的值为:{}", ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList());
|
ServiceSubtaskOptionAnswer serviceSubtaskOptionAnswer = new ServiceSubtaskOptionAnswer();
|
serviceSubtaskOptionAnswer.setId(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(0).getId());
|
serviceSubtaskOptionAnswer.setCode(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(0).getOptionCode());
|
serviceSubtaskOptionAnswer.setValue(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(0).getTargetvalue());
|
serviceSubtaskOptionAnswer.setAppenddesc(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(0).getAppenddesc());
|
answerList.add(serviceSubtaskOptionAnswer);
|
}
|
}
|
//数据保存
|
serviceSubtaskAnswer.setTaskid(taskid);
|
serviceSubtaskAnswer.setPatId(patid);
|
serviceSubtaskAnswer.setScriptid(ivrTaskTemplateScriptVO.getId());
|
serviceSubtaskAnswer.setScriptType(Long.valueOf(ivrTaskTemplateScriptVO.getScriptType()));
|
serviceSubtaskAnswer.setAnswer(JSON.toJSONString(answerList));
|
serviceSubtaskAnswer.setComment(null);
|
serviceSubtaskAnswer.setCreateTime(new Date());
|
serviceSubtaskAnswer.setUpdateTime(new Date());
|
serviceSubtaskAnswerMapper.insertServiceSubtaskAnswer(serviceSubtaskAnswer);
|
}
|
|
private void setWJInfo(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, Long taskid, Long patid) {
|
ServiceSubtaskAnswer serviceSubtaskAnswer = null;
|
List<ServiceSubtaskOptionAnswer> answerList = new ArrayList<>();
|
if (svyTaskTemplateScriptVO.getScriptType().equals("1") || svyTaskTemplateScriptVO.getScriptType().equals("2")) {
|
//1、2为单选或多选
|
for (SvyTaskTemplateTargetoption svyTaskTemplateTargetoption : svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions()) {
|
if (svyTaskTemplateTargetoption.getIsUserOperation() == true) {
|
ServiceSubtaskOptionAnswer serviceSubtaskOptionAnswer = new ServiceSubtaskOptionAnswer();
|
serviceSubtaskOptionAnswer.setId(svyTaskTemplateTargetoption.getId());
|
serviceSubtaskOptionAnswer.setCode(svyTaskTemplateTargetoption.getOptionCode());
|
serviceSubtaskOptionAnswer.setValue(svyTaskTemplateTargetoption.getTargetvalue());
|
serviceSubtaskOptionAnswer.setAppenddesc(svyTaskTemplateTargetoption.getAppenddesc());
|
answerList.add(serviceSubtaskOptionAnswer);
|
}
|
}
|
} else {
|
//非单多选
|
if (CollectionUtils.isNotEmpty(svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions())) {
|
ServiceSubtaskOptionAnswer serviceSubtaskOptionAnswer = new ServiceSubtaskOptionAnswer();
|
serviceSubtaskOptionAnswer.setId(svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions().get(0).getId());
|
serviceSubtaskOptionAnswer.setCode(svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions().get(0).getOptionCode());
|
serviceSubtaskOptionAnswer.setValue(svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions().get(0).getTargetvalue());
|
serviceSubtaskOptionAnswer.setAppenddesc(svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions().get(0).getAppenddesc());
|
answerList.add(serviceSubtaskOptionAnswer);
|
}
|
}
|
serviceSubtaskAnswer.setTaskid(Long.valueOf(taskid));
|
serviceSubtaskAnswer.setPatId(Long.valueOf(patid));
|
serviceSubtaskAnswer.setScriptid(svyTaskTemplateScriptVO.getId());
|
serviceSubtaskAnswer.setScriptType(Long.valueOf(svyTaskTemplateScriptVO.getScriptType()));
|
serviceSubtaskAnswer.setAnswer(JSON.toJSONString(answerList));
|
serviceSubtaskAnswer.setComment(null);
|
serviceSubtaskAnswer.setCreateTime(new Date());
|
serviceSubtaskAnswer.setUpdateTime(new Date());
|
serviceSubtaskAnswerMapper.insertServiceSubtaskAnswer(serviceSubtaskAnswer);
|
}
|
}
|