java实现大转盘抽奖

xiaoxiao2021-02-28  64

/** * 大转盘抽奖 * * @return 中奖信息 */ @ResponseBody @Transactional @RequestMapping(value = "/drawBigWheel", method = RequestMethod.POST) public JSONObject drawBigWheel(String eventId, String userId) { JSONObject rtn = new JSONObject(); try { logger.debug("drawBigWheel inputData[eventId:{},userId:{}]", eventId, userId); CinemaWelfare cinemaWelfare = cinemaWelfareService.getWelfareDetail(eventId); if (cinemaWelfare == null || "2".equals(cinemaWelfare.getStatus())) { rtn.put("code", "01"); rtn.put("data", "该活动已被删除或已下线!"); return rtn; } if (new Date().compareTo(cinemaWelfare.getStart_time()) < 0) { rtn.put("code", "02"); rtn.put("data", "该活动还未开始!"); rtn.put("start_time", cinemaWelfare.getDis_start_time()); return rtn; } if (new Date().compareTo(cinemaWelfare.getEnd_time()) >= 0) { rtn.put("code", "03"); rtn.put("data", "该活动已结束!"); return rtn; } if (!CinemaConstants.USER_ID_MAP.contains(userId)) { CinemaConstants.USER_ID_MAP.put(userId, userId); // 获取我的积分 Account myInfo = accountService.getAccount(Integer.parseInt(userId)); Integer myIntegral = myInfo.getIntegral(); // 抽奖次数 int drawCount = 0; BigWheelRecord bigWheelRecord = bigWheelRecordService.getTodayRecord(userId, eventId); if (bigWheelRecord == null) { drawCount = myIntegral / cinemaWelfare.getIntegral_cost() + cinemaWelfare.getDefault_count(); if (drawCount > 0) { if (cinemaWelfare.getDefault_count() <= 0) { // 扣除积分消费 deductIntegral(userId, cinemaWelfare); // 是否扣分标志 cinemaWelfare.setIsDeduct("1"); } // 添加一条抽奖记录 BigWheelRecord bigWheelRecordNew = new BigWheelRecord(); bigWheelRecordNew.setDraw_count(1); bigWheelRecordNew.setUser_id(Integer.parseInt(userId)); bigWheelRecordNew.setCinema_welfare_id(cinemaWelfare.getCinema_welfare_id()); bigWheelRecordService.createNewRecord(bigWheelRecordNew); // 剩余免费次数 cinemaWelfare.setOddDrawCount(String.valueOf(cinemaWelfare.getDefault_count() - 1)); } else { CinemaConstants.USER_ID_MAP.remove(userId); rtn.put("code", "05"); rtn.put("data", "积分不够抽奖啦!去赚点积分再来吧~"); return rtn; } } else { if (bigWheelRecord.getDraw_count() >= cinemaWelfare.getDefault_count()) { drawCount = myIntegral / cinemaWelfare.getIntegral_cost(); if (drawCount > 0) { // 扣除积分消费 deductIntegral(userId, cinemaWelfare); // 剩余免费次数 cinemaWelfare.setOddDrawCount("0"); // 是否扣分标志 cinemaWelfare.setIsDeduct("1"); } else { CinemaConstants.USER_ID_MAP.remove(userId); rtn.put("code", "05"); rtn.put("data", "积分不够抽奖啦!去赚点积分再来吧~"); return rtn; } } else { drawCount = myIntegral / cinemaWelfare.getIntegral_cost() + cinemaWelfare.getDefault_count() - bigWheelRecord.getDraw_count(); // 剩余免费次数 cinemaWelfare.setOddDrawCount(String.valueOf(cinemaWelfare.getDefault_count() - bigWheelRecord.getDraw_count() - 1)); } if (drawCount > 0) { // 增加一条抽奖次数 BigWheelRecord bigWheelRecordNew = new BigWheelRecord(); bigWheelRecordNew.setBig_wheel_record_id(bigWheelRecord.getBig_wheel_record_id()); bigWheelRecordNew.setDraw_count(bigWheelRecord.getDraw_count() + 1); bigWheelRecordNew.setUser_id(Integer.parseInt(userId)); bigWheelRecordNew.setUpdate_time(new Date()); bigWheelRecordNew.setCinema_welfare_id(cinemaWelfare.getCinema_welfare_id()); bigWheelRecordService.update(bigWheelRecordNew); } else { CinemaConstants.USER_ID_MAP.remove(userId); rtn.put("code", "05"); rtn.put("data", "积分不够抽奖啦!去赚点积分再来吧~"); return rtn; } } // 奖品配置 List<AwardsConfig> awardsConfigList = awardsConfigService.getAwardsConfigList(eventId); // 100%中奖奖项 List<AwardsConfig> hundredsAwardsList = new ArrayList<>(); // 概率中奖奖项 List<AwardsConfig> probabilityAwardsList = new ArrayList<>(); // 构造条形图 List<Integer> winningList = new ArrayList<>(); winningList.add(0); int end = 0; int start = 0; synchronized (this) { if (awardsConfigList != null) { for (AwardsConfig config : awardsConfigList) { boolean addFlag = false; // 是否超过中奖数量,没超过则加入奖项条形图 if (config.getAwards_count() == 0 || winningManagementService.getEventAwardsBingoCount(eventId, config.getAwards_config_id().toString(), "0") < config.getAwards_count()) { // 不能重复中奖的情况 if ("1".equals(config.getIs_repeated())) { boolean isRepeated = winningManagementService.isRepeated(eventId, userId, config.getAwards_config_id().toString(), "0"); if (!isRepeated) { addFlag = true; } } else { addFlag = true; } } if (addFlag) { // 100%中奖奖项 if (new BigDecimal("100").compareTo(config.getProbability()) == 0) { hundredsAwardsList.add(config); } else { BigDecimal probability = config.getProbability(); start = start + probability.multiply(new BigDecimal(Math.pow(10, 4))).intValue(); winningList.add(start); end = end + (int) Math.pow(10, 6); probabilityAwardsList.add(config); } } } } winningList.add(end); int radom = new Random().nextInt(end + 1); logger.debug("随机数radom====================" + radom); logger.debug("条形图====================" + winningList.toString()); // int radom = 222222; AwardsConfig bingo = null; for (int i = 0; i < winningList.size() && i + 2 < winningList.size(); i++) { if (winningList.get(i) <= radom && radom <= winningList.get(i + 1)) { bingo = probabilityAwardsList.get(i); insertWinningManagement(myInfo, cinemaWelfare, bingo); break; } } // 没有抽中概率奖,则随机抽一个100%中奖奖项 if (bingo == null) { int sysRadom = new Random().nextInt(hundredsAwardsList.size()); bingo = hundredsAwardsList.get(sysRadom); insertWinningManagement(myInfo, cinemaWelfare, bingo); } cinemaWelfare.setAwardsConfig(bingo); } // 获取我的积分 myInfo = accountService.getAccount(Integer.parseInt(userId)); myIntegral = myInfo.getIntegral(); cinemaWelfare.setMyIntegral(myIntegral.toString()); // 抽奖次数 drawCount = 0; bigWheelRecord = bigWheelRecordService.getTodayRecord(userId, eventId); if (bigWheelRecord == null) { drawCount = myIntegral / cinemaWelfare.getIntegral_cost() + cinemaWelfare.getDefault_count(); } else { if (bigWheelRecord.getDraw_count() >= cinemaWelfare.getDefault_count()) { drawCount = myIntegral / cinemaWelfare.getIntegral_cost(); } else { drawCount = myIntegral / cinemaWelfare.getIntegral_cost() + cinemaWelfare.getDefault_count() - bigWheelRecord.getDraw_count(); } } if (drawCount < 0) { drawCount = 0; } cinemaWelfare.setDrawCount(String.valueOf(drawCount)); // 我的最近2条奖品记录 List<WinningManagement> myWinningManagementList = winningManagementService.getMyLatestTwoRecords(eventId, userId); cinemaWelfare.setMyWinningManagementList(myWinningManagementList); // 近12条中奖记录 List<WinningManagement> winningManagementList = getWinningManagementList(eventId); cinemaWelfare.setWinningManagementList(winningManagementList); rtn.put("code", "00"); rtn.put("data", cinemaWelfare); CinemaConstants.USER_ID_MAP.remove(userId); } else { rtn.put("code", "04"); rtn.put("data", "抽奖进行中,请稍等!"); } } catch (Exception e) { CinemaConstants.USER_ID_MAP.remove(userId); logger.error("drawBigWheel 异常:", e); rtn.put("code", "-1"); rtn.put("data", "抽奖失败!"); } return rtn; }
转载请注明原文地址: https://www.6miu.com/read-31730.html

最新回复(0)