@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
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
}