最近進行的項目中,有個抽獎的需求,今天就把相關代碼給大家分享一下。
一、DAO層
/** * 獲取獎品列表 * @param systemVersion 手機系統版本(1-安卓 2-iOS) * @Date: 2021/6/7 */ List<LuckyPrize> getPrizeList(int systemVersion);
二、mapper.xml
<select >? ? ? ? select *? ? ? ? FROM system_card sc? ? ? ?LEFT JOIN lucky_prize lp ON sc.system_card_id = lp.system_card_id? ? ? ? WHERE sc.`status` = 1? ? ? ? ? AND sc.category = 3? ? ? ? ? AND sc.system_version = #{systemVersion}? ? </select>
三、service層
//簽到抽獎LuckyPrizeVo startSignDraw(Integer systemVersion);//積分抽獎LuckyPrizeVo startIntegralDraw(Integer systemVersion);
其中入參systemVersion為手機系統,1是安卓 2是蘋果
四、實現層
查看代碼
/** * 開始簽到抽獎 */ @Override public LuckyPrizeVo startSignDraw(Integer systemVersion) { //判斷用戶是否有抽獎機會 String userId = TokenUtil.getUserId(); UserSign userSign = userSignMapper.selectOne(new QueryWrapper<UserSign>().eq("user_id", userId).eq("luck_chance", 1)); if (null == userSign) { throw new BusinessException("連續成功簽到7天才可參與抽獎!"); } //判斷上次簽到時間是否在本周 Date nowTime = new Date(); Date lastSignTime = userSign.getLastSignTime(); boolean flag = DateUtil.isSameWeek(nowTime, lastSignTime); if (!flag) { throw new BusinessException("連續成功簽到7天才可參與轉盤抽獎"); } //同一周的,可以抽獎,調用定義的私有方法:luckyDraw(systemVersion) LuckyPrizeVo luckyPrizeVo = luckyDraw(systemVersion); //中獎了 //用戶簽到機會 改為0 userSign.setLuckChance(0); userSignMapper.updateById(userSign); //記錄表添加一條數據 LuckyPrizeLog luckyPrizeLog = new LuckyPrizeLog(); luckyPrizeLog.setLogId(SnowflakeUtil.genId()); luckyPrizeLog.setLuckyPrizeId(luckyPrizeVo.getLuckyPrizeId()); luckyPrizeLog.setUserId(userId); luckyPrizeLog.setPrizeName(luckyPrizeVo.getCardName()); luckyPrizeLog.setCreateTime(nowTime); luckyPrizeLogMapper.insert(luckyPrizeLog); //用戶卡卷添加一條數據 UserCard userCard = new UserCard(); userCard.setUserCardId(SnowflakeUtil.genId()); userCard.setUserId(userId); userCard.setSystemCardId(luckyPrizeVo.getSystemCardId()); int systemCardType = luckyPrizeVo.getSystemCardType(); userCard.setType(systemCardType); userCard.setStatus(0); userCard.setCreateTime(nowTime); if (systemCardType == 1 || systemCardType == 2) { //折扣卷和體驗卷有效期為30天 Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, 30); Date date = calendar.getTime(); userCard.setExpirationDate(date); } userCard.setRules(luckyPrizeVo.getSystemRules()); userCardMapper.insert(userCard); return luckyPrizeVo; }
查看代碼
? ?/** * 開始積分抽獎 */ @Override public LuckyPrizeVo startIntegralDraw(Integer systemVersion) { //判斷用戶是否有抽獎資格(100積分抽一次) String userId = TokenUtil.getUserId(); UserExperience userExperience = userExperienceMapper.selectById(userId); if (null == userExperience) { throw new BusinessException("您的積分異常"); } int integral = userExperience.getIntegral(); //積分滿100,抽一次 int score = 100; if (integral < score) { throw new BusinessException("您的積分不足,無法參與抽獎"); } LuckyPrizeVo luckyPrizeVo = luckyDraw(systemVersion); //中獎了 //更新用戶積分 int newIntegral = integral - 100; userExperience.setIntegral(newIntegral); userExperienceMapper.updateById(userExperience); Date nowTime = new Date(); //記錄表添加一條數據 LuckyPrizeLog luckyPrizeLog = new LuckyPrizeLog(); luckyPrizeLog.setLogId(SnowflakeUtil.genId()); luckyPrizeLog.setLuckyPrizeId(luckyPrizeVo.getLuckyPrizeId()); luckyPrizeLog.setUserId(userId); luckyPrizeLog.setPrizeName(luckyPrizeVo.getCardName()); luckyPrizeLog.setCreateTime(nowTime); luckyPrizeLogMapper.insert(luckyPrizeLog); //用戶卡卷添加一條數據 UserCard userCard = new UserCard(); userCard.setUserCardId(SnowflakeUtil.genId()); userCard.setUserId(userId); userCard.setSystemCardId(luckyPrizeVo.getSystemCardId()); int systemCardType = luckyPrizeVo.getSystemCardType(); userCard.setType(systemCardType); userCard.setStatus(0); userCard.setCreateTime(nowTime); if (systemCardType == 1 || systemCardType == 2) { //折扣卷和體驗卷有效期為30天 Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, 30); Date date = calendar.getTime(); userCard.setExpirationDate(date); } userCard.setRules(luckyPrizeVo.getSystemRules()); userCardMapper.insert(userCard); return luckyPrizeVo; }
提示:
1.可能我的需求與大家不一樣,具體還是要看各位的需求要有所改動,但大體的思路可以參考我的代碼;2.項目中,繼承了mabytis-plus,還封裝了一些工具類,以及結果的統一處理。
五、Controller層
@PostMapping("/startSignDraw") @ApiOperation(value = "簽到抽獎") @Log(title = "簽到抽獎") public String startSignDraw(@RequestBody SystemVersionDto dto) { LuckyPrizeVo luckyPrizeVo = luckyPrizeService.startSignDraw(Integer.valueOf(dto.getSystemVersion())); return Result.success(luckyPrizeVo); } @PostMapping("/startIntegralDraw") @ApiOperation(value = "積分抽獎") @Log(title = "積分抽獎") public String startIntegralDraw(@RequestBody SystemVersionDto dto) { LuckyPrizeVo luckyPrizeVo = luckyPrizeService.startIntegralDraw(Integer.valueOf(dto.getSystemVersion())); return Result.success(luckyPrizeVo); }
最后,附上建表sql:六、建表SQL語句
CREATE TABLE `lucky_prize` ( `lucky_prize_id` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '獎品id', `system_card_id` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '系統卡卷id', `system_version` tinyint(1) DEFAULT NULL COMMENT '手機系統版本(1-安卓 2-iOS)', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '備注', `probability` double(3,2) NOT NULL COMMENT '抽獎概率', `num` int DEFAULT NULL COMMENT '獎品數量', PRIMARY KEY (`lucky_prize_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='獎品表';
CREATE TABLE `lucky_prize_log` ( `log_id` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '記錄id', `lucky_prize_id` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '獎品id', `user_id` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '抽獎用戶id', `prize_name` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '獎品名稱', `create_time` datetime DEFAULT NULL COMMENT '抽獎時間', PRIMARY KEY (`log_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='抽獎記錄表';
CREATE TABLE `system_card` ( `system_card_id` char(18) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '系統卡卷id', `card_name` char(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '卡卷名稱', `type` tinyint(1) NOT NULL COMMENT '卡卷類型(0謝謝參與卷 1折扣卷 2vip體驗卷 3經驗卷)', `count` int DEFAULT NULL COMMENT '卡卷數量(個)', `is_count` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否有數量(0否 1是)默認為0', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '狀態(0未啟用,1已啟用,2已下線) 默認為1', `failure_time` tinyint(1) NOT NULL COMMENT '卡卷時效時間(天)', `is_failure_time` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否有時效時間(0否 1是)默認為0', `create_time` datetime NOT NULL ON update CURRENT_TIMESTAMP COMMENT '創建時間', `update_time` datetime DEFAULT NULL COMMENT '修改時間', `remark` char(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '備注', `rules` double(5,2) NOT NULL COMMENT '卡卷規則', `category` tinyint(1) DEFAULT NULL COMMENT '卡卷種類(1-普通類 2-積分兌換類 3-轉盤類)', `system_version` tinyint(1) DEFAULT NULL COMMENT '手機系統版本(1-安卓 2-iOS)', `required_points` int DEFAULT NULL COMMENT '積分卷所需積分', PRIMARY KEY (`system_card_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系統卡卷';
CREATE TABLE `user_sign` ( `user_id` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用戶id', `is_monday` tinyint(1) DEFAULT '0' COMMENT '周一是否簽到(0無 1有)', `is_tuesday` tinyint(1) DEFAULT '0' COMMENT '周二是否簽到(0無 1有)', `is_wednesday` tinyint(1) DEFAULT '0' COMMENT '周三是否簽到(0無 1有)', `is_thursday` tinyint(1) DEFAULT '0' COMMENT '周四是否簽到(0無 1有)', `is_friday` tinyint(1) DEFAULT '0' COMMENT '周五是否簽到(0無 1有)', `is_saturday` tinyint(1) DEFAULT '0' COMMENT '周六是否簽到(0無 1有)', `is_sunday` tinyint(1) DEFAULT '0' COMMENT '周末是否簽到(0無 1有)', `last_sign_time` datetime DEFAULT NULL COMMENT '最近一次簽到時間', `luck_chance` tinyint(1) DEFAULT '0' COMMENT '抽獎機會(0無 1有)', PRIMARY KEY (`user_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='用戶簽到記錄表';
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
ps4發售上市時間?國行PS4主機于2014年12月12日零點開啟國內預售,2015年1月11日正式發售。Ps4多少年前出的?八年前,2014年2月22日是PS4在日本發售的日子,而國行的PS4是2015年3月20日發售的。到目前為止,PS4銷量已經超過1.169億臺,足以稱得上流行硬件。PlayStation4是索尼銷售的一款固定家用游戲機,被親切地稱為 "PS4 "被游戲玩家。如序列號所示,...
石家莊哪個公園可以教武術?石家莊的莊禹錫公園、撒瑪利亞公園等公園都可以教武術。這些地方又寬又安靜。石家莊現在最好的武術培訓班是哪里?石家莊高新區德武門武術培訓中心。石家莊高新區德武門武術培訓中心成立于2017年8月24日,注冊資金0.02萬元。經營者為閆偉通,經營狀態為存續,工商注冊號為130101600149409。注冊地址為高新區祁連街便民市場A區02號,經營范圍包括健身、跆拳道培訓服務。* ...
蘋果怎樣添加軟件源?1. 越獄后第一次打開Cydia需要很長時間才能加載,等待設備重新啟動后再打開Cydia;2。打開Cydia后,單擊下面的“軟件源”;3。單擊右上角的“編輯添加”;4。在輸入框中輸入源地址。如果輸入ACE assistant的源地址:apt.so/I4工具輸入后,單擊添加源;5。將驗證URL,并在通過后自動安裝源代碼。等待完成后,點擊“返回Cydia”6。添加之后,您可以在軟件...