瀏覽代碼

Merge branch 'dev' of huangwenjie/patient-co-management into dev

yeshijie 7 年之前
父節點
當前提交
8d1ae7fc48

+ 60 - 46
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/questionnaire/QuestionnaireService.java

@ -18,6 +18,7 @@ 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.service.app.family.FamilyMemberService;
import com.yihu.wlyy.util.ElasticsearchUtil;
import com.yihu.wlyy.util.RivaEDCode;
import com.yihu.wlyy.util.random.LotteryUtils;
@ -85,6 +86,8 @@ public class QuestionnaireService extends BaseService {
	private String key1;
	@Value("${Riva.RIVAED_KEY2}")
	private String key2;
	@Autowired
	private FamilyMemberService familyMemberService;
	
	/**
@ -159,56 +162,66 @@ 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.setPrizeType(questionnairePrize.getType());
							questionnaireWinning.setPrizeName(questionnairePrize.getPrizeName());
							questionnaireWinning.setPrizeCode(questionnairePrize.getPrizeCode());
							questionnaireWinning.setPrizePsw(questionnairePrize.getPrizePsw());
							questionnaireWinning.setAddress(questionnairePrize.getAddress());
							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.setPrizeType(0);
							questionnaireWinning.setPrizeName("");
							questionnaireWinning.setPrizeCode("");
							questionnaireWinning.setPrizePsw("");
							questionnaireWinning.setAddress("");
							questionnaireWinning.setValidity(new Date());
							logger.info("抽奖:居民身份证:"+questionnaireUsers.getIdcard()+",openid="+questionnaireUsers.getOpenid()+",结果03:mysql 保存中奖结果报错,将奖品重新放回奖品池,返回未中奖,奖品CODE:"+questionnairePrize.getCode());
					        e.printStackTrace();
				
				//判断抽奖人openid是否有效
				String sus = familyMemberService.getIsSus(questionnaireUsers.getOpenid());
				
				//openid有效,则进入抽奖
				if(StringUtils.isNotBlank(sus) && "1".equals(sus)){
					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.setPrizeType(questionnairePrize.getType());
								questionnaireWinning.setPrizeName(questionnairePrize.getPrizeName());
								questionnaireWinning.setPrizeCode(questionnairePrize.getPrizeCode());
								questionnaireWinning.setPrizePsw(questionnairePrize.getPrizePsw());
								questionnaireWinning.setAddress(questionnairePrize.getAddress());
								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.setPrizeType(0);
								questionnaireWinning.setPrizeName("");
								questionnaireWinning.setPrizeCode("");
								questionnaireWinning.setPrizePsw("");
								questionnaireWinning.setAddress("");
								questionnaireWinning.setValidity(new Date());
								logger.info("抽奖:居民身份证:"+questionnaireUsers.getIdcard()+",openid="+questionnaireUsers.getOpenid()+",结果03:mysql 保存中奖结果报错,将奖品重新放回奖品池,返回未中奖,奖品CODE:"+questionnairePrize.getCode());
								e.printStackTrace();
							}
							one = doToESDO(questionnaireWinning);
							result.add(one);
							//将已中奖记录信息缓存到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);
						}
						one = doToESDO(questionnaireWinning);
						result.add(one);
						//将已中奖记录信息缓存到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;
					//openid无效,直接返回未中奖
					questionnaireWinning.setWinning(0);//--未中奖
				}
			}else{
				questionnaireWinning.setWinning(0);//--未中奖
@ -477,4 +490,5 @@ public class QuestionnaireService extends BaseService {
			}
		}
	}
	
}