|
@ -5,10 +5,16 @@ import com.yihu.es.entity.QuestionnaireWinningESDO;
|
|
|
import com.yihu.wlyy.config.SystemConfig;
|
|
|
import com.yihu.wlyy.config.es.ElasticFactory;
|
|
|
import com.yihu.wlyy.config.es.ElastricSearchSave;
|
|
|
import com.yihu.wlyy.entity.doctor.survey.SurveyAnswers;
|
|
|
import com.yihu.wlyy.entity.doctor.survey.SurveyOptionAnswers;
|
|
|
import com.yihu.wlyy.entity.doctor.survey.SurveyTemplateOptions;
|
|
|
import com.yihu.wlyy.entity.doctor.survey.SurveyTemplateQuestions;
|
|
|
import com.yihu.wlyy.entity.questionnaire.QuestionnairePrize;
|
|
|
import com.yihu.wlyy.entity.questionnaire.QuestionnaireUsers;
|
|
|
import com.yihu.wlyy.entity.questionnaire.QuestionnaireWinning;
|
|
|
import com.yihu.wlyy.repository.doctor.*;
|
|
|
import com.yihu.wlyy.repository.questionnaire.QuestionnairePrizeDao;
|
|
|
import com.yihu.wlyy.repository.questionnaire.QuestionnaireUsersDao;
|
|
|
import com.yihu.wlyy.repository.questionnaire.QuestionnaireWinningDao;
|
|
|
import com.yihu.wlyy.service.BaseService;
|
|
|
import com.yihu.wlyy.util.ElasticsearchUtil;
|
|
@ -16,6 +22,8 @@ import com.yihu.wlyy.util.random.LotteryUtils;
|
|
|
import com.yihu.wlyy.util.random.dto.LotteryItem;
|
|
|
import io.searchbox.client.JestClient;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.json.JSONArray;
|
|
|
import org.json.JSONObject;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@ -54,6 +62,18 @@ public class QuestionnaireService extends BaseService {
|
|
|
private QuestionnairePrizeDao questionnairePrizeDao;
|
|
|
@Autowired
|
|
|
private StringRedisTemplate redisTemplate;
|
|
|
@Autowired
|
|
|
private SurveyTemplateQuestionsDao surveyTemplateQuestionsDao;
|
|
|
@Autowired
|
|
|
private SurveyTemplateOptionsDao surveyTemplateOptionsDao;
|
|
|
@Autowired
|
|
|
private SurveyOptionAnswersDao surveyOptionAnswersDao;
|
|
|
@Autowired
|
|
|
private QuestionnaireUsersDao questionnaireUsersDao;
|
|
|
@Autowired
|
|
|
SurveyStatisticsDao surveyStatisticsDao;
|
|
|
@Autowired
|
|
|
private SurveyAnswersDao surveyAnswersDao;
|
|
|
|
|
|
|
|
|
/**
|
|
@ -131,24 +151,39 @@ public class QuestionnaireService extends BaseService {
|
|
|
if(winningList.isEmpty()){
|
|
|
//从redis奖品池捞取一个奖品
|
|
|
QuestionnairePrize questionnairePrize = getQuestionnairePrizeFromRedis();
|
|
|
try {
|
|
|
questionnaireWinning.setWinning(1);
|
|
|
questionnaireWinning.setPrizeType(questionnairePrize.getType());
|
|
|
questionnaireWinning.setPrizeName(questionnairePrize.getPrizeName());
|
|
|
questionnaireWinning.setPrizeCode(questionnairePrize.getPrizeCode());
|
|
|
questionnaireWinning.setAddress(questionnairePrize.getAddress());
|
|
|
questionnaireWinning.setValidity(questionnairePrize.getValidity());
|
|
|
questionnaireWinning = questionnaireWinningDao.save(questionnaireWinning);
|
|
|
//如果抽中的奖品对象为空,则直接返回未中奖
|
|
|
if(questionnairePrize != null){
|
|
|
try {
|
|
|
questionnaireWinning.setWinning(1);
|
|
|
questionnaireWinning.setPrizeType(questionnairePrize.getType());
|
|
|
questionnaireWinning.setPrizeName(questionnairePrize.getPrizeName());
|
|
|
questionnaireWinning.setPrizeCode(questionnairePrize.getPrizeCode());
|
|
|
questionnaireWinning.setAddress(questionnairePrize.getAddress());
|
|
|
questionnaireWinning.setValidity(questionnairePrize.getValidity());
|
|
|
//只有中奖的记录才保存到数据库
|
|
|
questionnaireWinning = questionnaireWinningDao.save(questionnaireWinning);
|
|
|
}catch (Exception e){
|
|
|
//如果保存报错,则将奖品重新放回奖品池,返回未中奖
|
|
|
String prizejson = JSON.toJSONString(questionnairePrize);
|
|
|
redisTemplate.opsForValue().set("questionnaire:prize:code:" + questionnairePrize.getCode(), prizejson);
|
|
|
|
|
|
questionnaireWinning.setWinning(0);
|
|
|
questionnaireWinning.setPrizeType(0);
|
|
|
questionnaireWinning.setPrizeName("");
|
|
|
questionnaireWinning.setPrizeCode("");
|
|
|
questionnaireWinning.setAddress("");
|
|
|
questionnaireWinning.setValidity(new Date());
|
|
|
|
|
|
logger.info("mysql 保存中奖结果报错,将奖品重新放回奖品池,返回未中奖");
|
|
|
logger.info(e.getMessage());
|
|
|
// e.printStackTrace();
|
|
|
}
|
|
|
one = doToESDO(questionnaireWinning);
|
|
|
result.add(one);
|
|
|
//将中奖信息缓存到ES
|
|
|
//将中奖记录信息缓存到ES
|
|
|
esQuestionnaireWinningESData(result);
|
|
|
return result;
|
|
|
}catch (Exception e){
|
|
|
//@todo 处理奖品相关逻辑业务时,如果报错,则将奖品重新放回奖品池
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
for (QuestionnaireWinning obj:winningList) {
|
|
|
QuestionnaireWinningESDO a = doToESDO(obj);
|
|
@ -158,7 +193,6 @@ public class QuestionnaireService extends BaseService {
|
|
|
}
|
|
|
}else{
|
|
|
questionnaireWinning.setWinning(0);//未中奖
|
|
|
|
|
|
}
|
|
|
}else{
|
|
|
questionnaireWinning.setWinning(0);//未中奖
|
|
@ -195,19 +229,18 @@ public class QuestionnaireService extends BaseService {
|
|
|
try {
|
|
|
synchronized (obj) {
|
|
|
QuestionnairePrize questionnairePrize = new QuestionnairePrize();
|
|
|
Set<String> exists = redisTemplate.opsForSet().members("questionnaire:prize:code");
|
|
|
Set<String> exists = redisTemplate.keys("questionnaire:prize:code:*");
|
|
|
if(exists.size() > 0){
|
|
|
String prizeCode = "questionnaire:prize:code:";
|
|
|
String key = "questionnaire:prize:code:";
|
|
|
String key = "";
|
|
|
String prizeJsonStr = "";
|
|
|
for (String code :exists) {
|
|
|
if(StringUtils.isNotBlank(code)){
|
|
|
prizeCode = prizeCode + code;
|
|
|
questionnairePrize.setCode(code);
|
|
|
for (String setkey :exists) {
|
|
|
if(StringUtils.isNotBlank(setkey)){
|
|
|
key = setkey;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
prizeJsonStr = redisTemplate.opsForValue().get(prizeCode);
|
|
|
if(StringUtils.isNotBlank(key)){
|
|
|
prizeJsonStr = redisTemplate.opsForValue().get(key);
|
|
|
// JSONObject jsonObject = JSONObject.parseObject(prizeJsonStr);
|
|
|
// questionnairePrize.setUsed(jsonObject.getInteger("used"));
|
|
|
// questionnairePrize.setAddress(jsonObject.getString("address"));
|
|
@ -218,21 +251,20 @@ public class QuestionnaireService extends BaseService {
|
|
|
// questionnairePrize.setValidity(jsonObject.getDate("validity"));
|
|
|
// questionnairePrize.setCreateTime(jsonObject.getDate("createTime"));
|
|
|
// questionnairePrize.setUpdateTime(jsonObject.getDate("updateTime"));
|
|
|
questionnairePrize = JSON.parseObject(prizeJsonStr,QuestionnairePrize.class);
|
|
|
|
|
|
//捞取完之后,从redis缓存中删掉
|
|
|
redisTemplate.delete(prizeCode);
|
|
|
return questionnairePrize;
|
|
|
|
|
|
questionnairePrize = JSON.parseObject(prizeJsonStr,QuestionnairePrize.class);
|
|
|
//捞取完之后,从redis缓存中删掉
|
|
|
redisTemplate.delete(key);
|
|
|
return questionnairePrize;
|
|
|
}
|
|
|
}else{
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
return null;
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@ -263,8 +295,7 @@ public class QuestionnaireService extends BaseService {
|
|
|
*/
|
|
|
public Integer gerPrizeCountFromRedis(){
|
|
|
|
|
|
Set<String> exists = redisTemplate.opsForSet().members("questionnaire:prize:code");
|
|
|
|
|
|
Set<String> exists = redisTemplate.keys("questionnaire:prize:code:*");
|
|
|
if(exists != null && !exists.isEmpty()){
|
|
|
return exists.size();
|
|
|
}else{
|
|
@ -290,4 +321,87 @@ public class QuestionnaireService extends BaseService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 抽奖问卷调查获取所有的问卷题目
|
|
|
* @param surveyTemplateCode
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONObject getAllQuestions(String surveyTemplateCode)throws Exception{
|
|
|
JSONObject json = new JSONObject();
|
|
|
List<SurveyTemplateQuestions> questionList = surveyTemplateQuestionsDao.findById(surveyTemplateCode);
|
|
|
List<SurveyTemplateOptions> optionsList = surveyTemplateOptionsDao.findByQuestionCode(surveyTemplateCode);
|
|
|
for (SurveyTemplateQuestions surveyTemplateQuestions : questionList){
|
|
|
Map<String,Object> map = new HashMap<>();
|
|
|
String qusCode = surveyTemplateQuestions.getCode();
|
|
|
List<SurveyTemplateOptions> resultOptionList = new ArrayList<>();
|
|
|
for (SurveyTemplateOptions option : optionsList){
|
|
|
if (option.getTemplateQuestionCode().equals(qusCode)){
|
|
|
resultOptionList.add(option);
|
|
|
}
|
|
|
}
|
|
|
map.put("question",surveyTemplateQuestions);
|
|
|
map.put("option",resultOptionList);
|
|
|
json.put(surveyTemplateQuestions.getSort()+"",map);
|
|
|
}
|
|
|
return json;
|
|
|
}
|
|
|
|
|
|
public QuestionnaireWinningESDO saveAnswerAndLotto(JSONObject jsonData, QuestionnaireUsers questionnaireUsers) throws Exception {
|
|
|
System.out.println("********jsonData********* " + jsonData);
|
|
|
//解析json保存各种答案
|
|
|
String surveyCode = jsonData.get("surveyCode").toString();
|
|
|
String openId = jsonData.get("openId").toString();
|
|
|
String userCode = "";
|
|
|
QuestionnaireUsers questionnaireUsers1 = questionnaireUsersDao.findByOpoenId(openId);
|
|
|
if (questionnaireUsers1!=null){
|
|
|
userCode = questionnaireUsers1.getCode();
|
|
|
}
|
|
|
Date createTime = new Date();
|
|
|
//获取一维数组
|
|
|
JSONArray questions = jsonData.getJSONArray("questions");
|
|
|
for (int i = 0; i < questions.length(); i++) {
|
|
|
//获取每一道题的信息
|
|
|
JSONObject question = new JSONObject(questions.get(i).toString());
|
|
|
String qstCode = question.get("qstCode").toString();
|
|
|
int type = Integer.parseInt(question.get("type").toString());
|
|
|
|
|
|
if (type != 2) {
|
|
|
if (question.has("options")) {
|
|
|
//获取每道题的所有选项
|
|
|
JSONArray options = question.getJSONArray("options");
|
|
|
for (int j = 0; j < options.length(); j++) {
|
|
|
JSONObject option = new JSONObject(options.get(j).toString());
|
|
|
String code = getCode();
|
|
|
String optionCode = option.get("optionCode").toString();
|
|
|
String comment = null;
|
|
|
int haveComment = 0;
|
|
|
if (option.has("comment")) {
|
|
|
comment = option.get("comment").toString();
|
|
|
haveComment = 1;
|
|
|
}
|
|
|
//保存到选择题答案表
|
|
|
SurveyOptionAnswers optionAnswer = new SurveyOptionAnswers(code, userCode, surveyCode, qstCode, optionCode, comment, type, createTime,openId);
|
|
|
surveyOptionAnswersDao.save(optionAnswer);
|
|
|
//选择题修改统计表数量
|
|
|
surveyStatisticsDao.modifyAmount(surveyCode, qstCode, optionCode);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}else {
|
|
|
String content = question.get("content").toString();
|
|
|
if (!StringUtils.isEmpty(content)) {
|
|
|
// 保存到问答题答案表
|
|
|
String code = getCode();
|
|
|
SurveyAnswers surveyAnswer = new SurveyAnswers(code, surveyCode, userCode, qstCode, content, createTime,openId);
|
|
|
surveyAnswersDao.save(surveyAnswer);
|
|
|
// 问答题保存到统计表(只负责更改数量不负责创建)
|
|
|
surveyStatisticsDao.modifyAmount(surveyCode, qstCode);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return questionnaireLottery(questionnaireUsers).get(0);
|
|
|
|
|
|
}
|
|
|
}
|