|
@ -46,7 +46,7 @@ import java.util.*;
|
|
|
public class QuestionnaireService extends BaseService {
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(QuestionnaireService.class);
|
|
|
static Object obj = new Object();
|
|
|
|
|
|
@Autowired
|
|
|
private ElasticFactory elasticFactory;
|
|
|
@Autowired
|
|
@ -114,9 +114,6 @@ public class QuestionnaireService extends BaseService {
|
|
|
*/
|
|
|
public List<QuestionnaireWinningESDO> questionnaireLottery(QuestionnaireUsers questionnaireUsers)throws Exception{
|
|
|
|
|
|
List<QuestionnaireWinningESDO> result = new ArrayList<>();
|
|
|
QuestionnaireWinningESDO one = new QuestionnaireWinningESDO();
|
|
|
|
|
|
if(StringUtils.isBlank(questionnaireUsers.getIdcard()) || "undefined".equals(questionnaireUsers.getIdcard())){
|
|
|
throw new Exception("身份证号为空或者异常:"+questionnaireUsers.getIdcard());
|
|
|
}
|
|
@ -125,6 +122,10 @@ public class QuestionnaireService extends BaseService {
|
|
|
throw new Exception("openid为空或者异常:"+questionnaireUsers.getIdcard());
|
|
|
}
|
|
|
|
|
|
List<QuestionnaireWinningESDO> result = new ArrayList<>();
|
|
|
QuestionnaireWinningESDO one = new QuestionnaireWinningESDO();
|
|
|
|
|
|
|
|
|
// 从redis获取剩余奖品数量
|
|
|
// 判断奖品池的奖品是否已经发完
|
|
|
Integer prizeCount = gerPrizeCountFromRedis();
|
|
@ -152,14 +153,16 @@ public class QuestionnaireService extends BaseService {
|
|
|
|
|
|
//中奖
|
|
|
if("YES".equals(lotteryItem.getAwardName())){
|
|
|
logger.info("抽奖:居民身份证:"+questionnaireUsers.getIdcard()+",openid="+questionnaireUsers.getOpenid()+",结果01:YES,判断数据库是否有中奖纪录");
|
|
|
List<QuestionnaireWinning> winningList = questionnaireWinningDao.findByUserIdcardAndUserOpenid(questionnaireUsers.getIdcard(),questionnaireUsers.getOpenid());
|
|
|
if(winningList.isEmpty()){
|
|
|
//从redis奖品池捞取一个奖品
|
|
|
QuestionnairePrize questionnairePrize = getQuestionnairePrizeFromRedis();
|
|
|
//如果抽中的奖品对象为空,则直接返回未中奖
|
|
|
if(questionnairePrize != null){
|
|
|
logger.info("抽奖:居民身份证:"+questionnaireUsers.getIdcard()+",openid="+questionnaireUsers.getOpenid()+",结果02:成功捞取到一个奖品,奖品CODE:"+questionnairePrize.getCode());
|
|
|
try {
|
|
|
questionnaireWinning.setWinning(1);
|
|
|
questionnaireWinning.setWinning(1);//---中奖
|
|
|
questionnaireWinning.setPrizeType(questionnairePrize.getType());
|
|
|
questionnaireWinning.setPrizeName(questionnairePrize.getPrizeName());
|
|
|
questionnaireWinning.setPrizeCode(questionnairePrize.getPrizeCode());
|
|
@ -168,48 +171,57 @@ public class QuestionnaireService extends BaseService {
|
|
|
questionnaireWinning.setValidity(questionnairePrize.getValidity());
|
|
|
//只有中奖的记录才保存到数据库
|
|
|
questionnaireWinning = questionnaireWinningDao.save(questionnaireWinning);
|
|
|
logger.info("抽奖:居民身份证:"+questionnaireUsers.getIdcard()+",openid="+questionnaireUsers.getOpenid()+",结果03:中奖结果成功保存到数据库,奖品CODE:"+questionnairePrize.getCode());
|
|
|
}catch (Exception e){
|
|
|
//如果保存报错,则将奖品重新放回奖品池,返回未中奖
|
|
|
String prizejson = JSON.toJSONString(questionnairePrize);
|
|
|
redisTemplate.opsForValue().set("questionnaire:prize:code:" + questionnairePrize.getCode(), prizejson);
|
|
|
|
|
|
questionnaireWinning.setWinning(0);
|
|
|
questionnaireWinning.setWinning(0);//--未中奖
|
|
|
questionnaireWinning.setPrizeType(0);
|
|
|
questionnaireWinning.setPrizeName("");
|
|
|
questionnaireWinning.setPrizeCode("");
|
|
|
questionnaireWinning.setPrizePsw("");
|
|
|
questionnaireWinning.setAddress("");
|
|
|
questionnaireWinning.setValidity(new Date());
|
|
|
|
|
|
logger.info("mysql 保存中奖结果报错,将奖品重新放回奖品池,返回未中奖");
|
|
|
logger.info(e.getMessage());
|
|
|
// e.printStackTrace();
|
|
|
logger.info("抽奖:居民身份证:"+questionnaireUsers.getIdcard()+",openid="+questionnaireUsers.getOpenid()+",结果03:mysql 保存中奖结果报错,将奖品重新放回奖品池,返回未中奖,奖品CODE:"+questionnairePrize.getCode());
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
one = doToESDO(questionnaireWinning);
|
|
|
result.add(one);
|
|
|
//将中奖记录信息缓存到ES
|
|
|
//将已中奖记录信息缓存到ES
|
|
|
esQuestionnaireWinningESData(result);
|
|
|
logger.info("抽奖:居民身份证:"+questionnaireUsers.getIdcard()+",openid="+questionnaireUsers.getOpenid()+",结果04:中奖结果成功保存到ES,奖品CODE:"+questionnairePrize.getCode());
|
|
|
return result;
|
|
|
}
|
|
|
logger.info("抽奖:居民身份证:"+questionnaireUsers.getIdcard()+",openid="+questionnaireUsers.getOpenid()+",结果02:没捞取到奖品,返回");
|
|
|
}else{
|
|
|
|
|
|
for (QuestionnaireWinning obj:winningList) {
|
|
|
logger.info("抽奖:居民身份证:"+questionnaireUsers.getIdcard()+",openid="+questionnaireUsers.getOpenid()+",结果02:从数据库中获取到中奖纪录,奖品CODE:"+obj.getPrizeCode());
|
|
|
QuestionnaireWinningESDO a = doToESDO(obj);
|
|
|
result.add(a);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
}else{
|
|
|
questionnaireWinning.setWinning(0);//未中奖
|
|
|
questionnaireWinning.setWinning(0);//--未中奖
|
|
|
}
|
|
|
}else{
|
|
|
questionnaireWinning.setWinning(0);//未中奖
|
|
|
questionnaireWinning.setWinning(0);//--未中奖
|
|
|
}
|
|
|
one = doToESDO(questionnaireWinning);
|
|
|
result.add(one);
|
|
|
//将未中奖记录信息缓存到ES
|
|
|
esQuestionnaireWinningESData(result);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
//中奖对象转成ES对象
|
|
|
/**
|
|
|
* 中奖对象转成ES对象
|
|
|
* @param questionnaireWinning
|
|
|
* @return
|
|
|
*/
|
|
|
private QuestionnaireWinningESDO doToESDO(QuestionnaireWinning questionnaireWinning){
|
|
|
QuestionnaireWinningESDO questionnaireWinningESDO = new QuestionnaireWinningESDO();
|
|
|
questionnaireWinningESDO.setCode(questionnaireWinning.getCode());
|
|
@ -235,19 +247,19 @@ public class QuestionnaireService extends BaseService {
|
|
|
*/
|
|
|
synchronized public QuestionnairePrize getQuestionnairePrizeFromRedis(){
|
|
|
try {
|
|
|
QuestionnairePrize questionnairePrize = new QuestionnairePrize();
|
|
|
Set<String> exists = redisTemplate.keys("questionnaire:prize:code:*");
|
|
|
if(exists.size() > 0){
|
|
|
String key = "";
|
|
|
String prizeJsonStr = "";
|
|
|
for (String setkey :exists) {
|
|
|
if(StringUtils.isNotBlank(setkey)){
|
|
|
key = setkey;
|
|
|
break;
|
|
|
}
|
|
|
QuestionnairePrize questionnairePrize = new QuestionnairePrize();
|
|
|
Set<String> exists = redisTemplate.keys("questionnaire:prize:code:*");
|
|
|
if(exists.size() > 0){
|
|
|
String key = "";
|
|
|
String prizeJsonStr = "";
|
|
|
for (String setkey :exists) {
|
|
|
if(StringUtils.isNotBlank(setkey)){
|
|
|
key = setkey;
|
|
|
break;
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(key)){
|
|
|
prizeJsonStr = redisTemplate.opsForValue().get(key);
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(key)){
|
|
|
prizeJsonStr = redisTemplate.opsForValue().get(key);
|
|
|
// JSONObject jsonObject = JSONObject.parseObject(prizeJsonStr);
|
|
|
// questionnairePrize.setUsed(jsonObject.getInteger("used"));
|
|
|
// questionnairePrize.setAddress(jsonObject.getString("address"));
|
|
@ -258,15 +270,16 @@ 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(key);
|
|
|
return questionnairePrize;
|
|
|
}
|
|
|
}else{
|
|
|
return null;
|
|
|
questionnairePrize = JSON.parseObject(prizeJsonStr,QuestionnairePrize.class);
|
|
|
//捞取完之后,从redis缓存中删掉
|
|
|
redisTemplate.delete(key);
|
|
|
return questionnairePrize;
|
|
|
}
|
|
|
}else{
|
|
|
return null;
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
logger.info("从redis奖品池捞取一个奖品出错,错误信息:"+e.getMessage());
|
|
|
e.printStackTrace();
|
|
|
return null;
|
|
|
}
|