éæ±ç®ä»
æ°é¡¹ç®æä¸ä¸ªç±»ä¼¼çè è£èæ½å¥çåè½ï¼æ½åè±è´¹ç§¯åï¼ç§¯ç´¯å¹¸è¿å¼ï¼æ¯é¶æ®µå¹¸è¿å¼å¯ä»¥æ½åå°ä¸åçå¥åï¼å¹¸è¿å¼é满æ¶ï¼å¿ å¾ç¨æéå ·
åè½å®ç°é¢æï¼å»ºç«ä¸ä¸ªæ½å¥æ± (æ½å¥æ± 级å«æ ¹æ®typeåºå)ï¼å¥åå¨ä¸åçæ½å¥æ± ä¸ï¼è·åç¨æ·å¹¸è¿å¼ï¼å建ä¸ä¸ªListï¼è¾¾å°è¦æ±å°±å°è¯¥æ½å¥æ± ä¸çå¥åæ¾å ¥è¯¥æ½å¥éåä¸ï¼è¿è¡æ½å¥ï¼å¦æ幸è¿å¼ä¸ºæ»¡ï¼ååªå°ç¹æ®éå ·æ¾å ¥æ½å¥æ± ä¸ï¼è¿è¡æ½å¥
第ä¸æ¥ï¼å建æ°æ®åºç¸å ³æ°æ®è¡¨
æ½å¥æ± 表ï¼æ¤å¤åæ¬è¦å»ºç«ä¸¤å¼ 表(æ½å¥æ± (å¦ææ¯ä¸¤å¼ 表lucky_restrict æ¯å¯ä»¥ç´æ¥éå¶å¥æ± æ¡ä»¶çï¼ä¸å¼ 表æ¶ï¼è¯¥å段åºå¼)ï¼åå¥æ± éå ·)ï¼ä½æ¯å 为项ç®æ²¡å¥ç¹æ®è¦æ±ï¼æ以就å ååç¨äº
CREATE TABLE `t_draw_pool` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`prop_id` int(11) DEFAULT NULL COMMENT 'éå ·ID',
`type` int(1) DEFAULT '1' COMMENT 'å¥æ± 级å«ï¼0å·å¥æ± ï¼1å·å¥æ± ï¼2å·å¥æ± ï¼3ç¨æå¥æ± ',
`lucky_restrict` varchar(255) DEFAULT NULL COMMENT '(åºå¼)éå¶æ¡ä»¶ï¼å¥æ± æ½å¥éå¶å¹¸è¿å¼éå¶',
`probability` int(11) DEFAULT NULL COMMENT 'ä¸å¥æ¦çï¼æ»æ¦ççå¤å°åä¹ä¸ï¼å¦æææéå ·çæ¦çæ»å为100 å½åå¥åçæ¦çæ¯1ï¼é£ä¹ä¸å¥æ¦çå°±æ¯ç¾åä¹ä¸',
`top` int(11) DEFAULT '0' COMMENT 'éå ·æåº',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4
éå ·è¡¨ï¼æ¤è¡¨ä¸ºå¥åæ± ä¸çéå ·
CREATE TABLE `t_prop` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL COMMENT 'ç©åå称',
`description` varchar(512) DEFAULT NULL COMMENT 'æè¿°',
`type` int(11) DEFAULT NULL COMMENT '0å®ä½ï¼1èæï¼2ä»·å¼ç¹',
`status` int(11) DEFAULT NULL COMMENT 'ç©åç¶æï¼0æ£å¸¸ï¼1å é¤',
`num` int(11) DEFAULT NULL COMMENT 'ç©åæ°é',
`price` double DEFAULT NULL COMMENT 'ä»·å¼ç¹',
`price_type` int(11) DEFAULT NULL COMMENT '2积å',
`url` varchar(1024) DEFAULT NULL COMMENT 'éå ·å±ç¤ºå¾',
`create_time` datetime DEFAULT NULL COMMENT 'ç©åå建æ¶é´',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4
æ½å¥å¥é¤è¡¨ï¼è¿å¼ 表ï¼åå æ¯ç¨æ¥åæ¾è´ä¹°ç§¯åå¥é¤çï¼ä½æ¯å 为å段ç¸åï¼æ²¡å¿ è¦æ°å¢ä¸å¼ 表ï¼å°±å 个typeè¿è¡äºåºå
CREATE TABLE `t_starlight_set_meal` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ios_id` varchar(255) DEFAULT NULL COMMENT 'IOSå è´id',
`price` double DEFAULT NULL COMMENT 'ä»·æ ¼ éé¢ | 积å',
`amount` int(11) DEFAULT NULL COMMENT 'å¥é¤å 积åæ°é | å¥é¤å æ½å¥æ¬¡æ°',
`name` varchar(255) DEFAULT NULL COMMENT 'å¥é¤å称',
`description` varchar(255) DEFAULT NULL COMMENT 'å¥é¤æè¿°',
`url` varchar(512) DEFAULT NULL COMMENT '积åå±ç¤ºå¾ç',
`top` int(11) DEFAULT NULL COMMENT 'å¥é¤æåº',
`type` int(1) DEFAULT '0' COMMENT '2æ½å¥å¥é¤',
`create_time` datetime DEFAULT NULL COMMENT 'å建æ¶é´',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='æäºå¸å å¼å¥é¤'
ç¨æ·é±å 表ï¼åæ¾ç§¯å(å³æ½å¥ç§¯å)ã幸è¿å¼çä¿¡æ¯ï¼å½å项ç®ä¸ï¼ç§¯åä¸è®¡å ¥è´¦åï¼æ以就没æç¸å¯¹åºçè´¦åå表ï¼æéè¦çå¯ä»¥å¨æ¯æ¬¡ä¿®æ¹é±å æ¶å»è®°å½è´¦åï¼æ¤å¤ä¸åèµè¿°
CREATE TABLE `t_wallet` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT 'ç¨æ·id',
`starlight` int(11) NOT NULL DEFAULT '0' COMMENT '积å',
`lucky` int(11) NOT NULL DEFAULT '0' COMMENT '幸è¿å¼',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_userId` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='é±å ï¼ç§¯åã幸è¿å¼'
ç¨æ·èå 表ï¼èå ä¹æ¯åºè¯¥å»ºç«ä¸¤å¼ 表(èå 表ï¼åºå å«ç¤¼ç©æ°ééå¶ å èå 容éï¼èå ç©å表ï¼å ³èèå åç©åä¿¡æ¯)ï¼åæ¯å 为没æå¿ é¡»è¦ï¼å°±ä½¿ç¨ä¸å¼ 表代æ¿äº
CREATE TABLE `t_knapsack` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT 'ç¨æ·id',
`gift_id` int(11) NOT NULL COMMENT 'éå ·id | 礼ç©id',
`numble` int(11) DEFAULT '1' COMMENT '礼ç©æ°éï¼æ éå¶',
`capacity` int(11) DEFAULT '100' COMMENT '(åºå¼)èå 容éï¼æ éå¶',
`occupying_dosage` int(11) DEFAULT '0' COMMENT '(åºå¼)èå å ç¨éï¼æ éå¶',
`type` int(1) DEFAULT '0' COMMENT '0éå ·èå ï¼1礼ç©èå ',
PRIMARY KEY (`id`),
UNIQUE KEY `IDX_userId` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='ç¨æ·èå '
以ä¸ç¸å ³æ°æ®è¡¨å»ºç«å®æï¼çæç¸å¯¹åºç对象å³å¯(DrawPoolãPropãWalletãKnapsackãStarlightSetMeal)
第äºæ¥ï¼ä»£ç é»è¾
public classDrawPoolService {
@ResourceprivateDrawPoolMapper drawPoolMapper;
@ResourceprivatePropMapper propMapper;
@ResourceprivateWalletMapper walletMapper;
@ResourceprivateKnapsackMapper knapsackMapper;
@ResourceprivateStarlightSetMealMapper starlightSetMealMapper;
publicMap list(Integer currentUserId) {
Map result = newHashMap<>();
List drawPoolList = drawPoolMapper.selectByType(null);
for(DrawPool drawPool : drawPoolList){
drawPool.setPropInfo(propMapper.selectByPrimaryKey(drawPool.getPropId()));
}
//å°è£ å¥åä¿¡æ¯result.put("prop", drawPoolList);
//å°è£ 幸è¿å¼ä¸éï¼æå®500result.put("upperLucky", 500);
//å°è£ ç¨æ·æäºå¸ã积åã幸è¿å¼ä¿¡æ¯if(currentUserId != null){
result.put("walletInfo", walletMapper.selectByUserId(currentUserId));
}else{
result.put("walletInfo", null);
}
List starlightSetMeals = starlightSetMealMapper.selectByType(2);
result.put("starlightSetMeals", starlightSetMeals);
returnresult;
}
publicResponseVO luckDraw(intcurrentUserId, intstarlightSetMealId){
Map result = newHashMap<>();
List propList = newArrayList<>();
Wallet wallet = walletMapper.selectByUserId(currentUserId);
StarlightSetMeal starlightSetMeal = starlightSetMealMapper.selectByPrimaryKey(starlightSetMealId);
if(wallet == null|| starlightSetMeal == null){
returnResponseVO.error("ä¸æ»¡è¶³æ½å¥æ¡ä»¶");
}
//æ¤æ¬¡æ½å¥åºè¯¥æ¶èç积åintusrStarlight = starlightSetMeal.getPrice().intValue();
intnum = starlightSetMeal.getAmount();
if(wallet.getStarlight() < usrStarlight){
returnResponseVO.error("积åä¸è¶³");
}
//æ´æ°ç§¯åæ°éï¼ ç§¯åä¸ç¨è®°å½è´¦åwallet.setStarlight(wallet.getStarlight() - usrStarlight);
walletMapper.updateByPrimaryKeySelective(wallet);
//ä¸å·å¥æ± ä¸éintoneUpperLucky = 200;
//äºå·å¥æ± ä¸éinttowUpperLucky = 300;
booleanisResetLucky = false;
for(inti = 0; i < num; i++){
//æ´æ°å¹¸è¿å¼wallet = walletMapper.selectByUserId(currentUserId);
//è¿åæ½å¥æ± å表ç»æList drawPoolList = newArrayList<>();
//æ ¹æ®å¹¸è¿å¼è·åä¸åçæ½å¥æ± if(wallet.getLucky() >= 0&& wallet.getLucky() < towUpperLucky){
drawPoolList.addAll(drawPoolMapper.selectByType(1));
}
if(wallet.getLucky() >= towUpperLucky && wallet.getLucky() < oneUpperLucky){
drawPoolList.addAll(drawPoolMapper.selectByType(2));
}
if(wallet.getLucky() >= oneUpperLucky){
//å¦æå½åç¨æ·ç幸è¿å¼å¤§äº550ï¼å¿ å¾ç¹æ®éå ·drawPoolList.addAll(drawPoolMapper.selectByType(3));
isResetLucky = true;
}
intprizeId = getPrizeIndex(drawPoolList);
//å¦æå¥åæ¯ä»·å¼ç¹ä¹ç±»çï¼ç´æ¥å¢å Prop prop = propMapper.selectByPrimaryKey(prizeId);
if(prop.getType() == 2){
wallet.setStarlight(wallet.getStarlight() + prop.getNum());
walletMapper.updateByPrimaryKeySelective(wallet);
}else{
//å¦ææ¯éå ·ï¼å°±åæ¾å°ç¨æ·èå Knapsack knapsack = knapsackMapper.getKnapsack(currentUserId, Constants.Knapsack.Type.PROP, prizeId);
if(ValidateUtils.isNull(knapsack)){
knapsack = newKnapsack();
knapsack.setUserId(currentUserId);
knapsack.setGiftId(prizeId);
knapsack.setType(Constants.Knapsack.Type.PROP);
knapsack.setNumble(prop.getNum());
knapsackMapper.insertSelective(knapsack);
}else{
knapsack.setNumble(knapsack.getNumble() + prop.getNum());
knapsackMapper.updateByPrimaryKeySelective(knapsack);
}
}
//没è¿è¡ä¸è½®å¦ææ½å°äºç¹æ®å¥æ± ï¼é£ä¹é½è¦æ¸ 空幸è¿å¼ï¼ä¸ç¶å¦ææ¯å¤æ¬¡æ½å¥ï¼é£ä¹åé¢çæ¯æ¬¡é½ä¼æ¯ç¹æ®éå ·if(isResetLucky){
//æ¸ ç©ºå¹¸è¿å¼wallet.setLucky(0);
walletMapper.updateByPrimaryKeySelective(wallet);
}else{
//å¢å 幸è¿å¼,æ¯æ½å¥ä¸æ¬¡ï¼ 幸è¿å¼+1wallet.setLucky(wallet.getLucky() + 1);
walletMapper.updateByPrimaryKeySelective(wallet);
}
propList.add(prop);
}
//æ¸ ç©ºå¹¸è¿å¼if(isResetLucky){
wallet.setLucky(0);
walletMapper.updateByPrimaryKeySelective(wallet);
}
result.put("propList", propList);
//å°è£ ç¨æ·ç§¯åã幸è¿å¼ä¿¡æ¯result.put("walletInfo", walletMapper.selectByUserId(currentUserId));
returnResponseVO.succeess(result);
}
public static intgetPrizeIndex(List drawPools) {
// DecimalFormat df = new DecimalFormat("######0.00");intprizeId = 0;
try{
//计ç®æ»æédoublesumWeight = 0;
for(DrawPool drawPool : drawPools){
sumWeight += drawPool.getProbability();
}
//产çéæºæ°doublerandomNumber;
randomNumber = Math.random();
//æ ¹æ®éæºæ°å¨ææå¥ååå¸çåºå并确å®ææ½å¥ådoubled1 = 0;
doubled2 = 0;
for(inti=0;i
//ä¾æ¬¡è·åå¥åæå¨çèå´//è·åå½åå¥åæå¨çä¸å¥æ¦çèå´ æ大å¼d2 += Double.parseDouble(String.valueOf(drawPools.get(i).getProbability()))/sumWeight;
if(i==0){
d1 = 0;
}else{
//è·åä¸ä¸ä¸ªå¥åæå¨çä¸å¥æ¦çèå´ æ大å¼d1 +=Double.parseDouble(String.valueOf(drawPools.get(i-1).getProbability()))/sumWeight;
}
//å¦æä¸å¥éæºæ° 大äºä¸ä¸ä¸ªå¥åçæå¤§å¼ å¹¶ä¸å°äºå½åå¥åçæ大å¼ï¼é£ä¹è¡¨ç¤ºä¸å¥éæºæ°å¨å½åå¥åçä¸å¥èå´å ï¼å½åå¥åä¸å¥if(randomNumber >= d1 && randomNumber <= d2){
prizeId = drawPools.get(i).getPropId();
break;
}
}
}catch(Exception e){
System.out.println("çææ½å¥éæºæ°åºéï¼åºéåå ï¼"+e.getMessage());
}
returnprizeId;
}
}
以ä¸ä»£ç ï¼listå½æ°è¿åæ½å¥é¡µé¢çç¸å ³ä¿¡æ¯ï¼luckDrawå½æ°è¿è¡æ½å¥ï¼è¿åä¸å¥ä¿¡æ¯ï¼ä»¥å积åä¿®æ¹åçä¿¡æ¯ï¼