diff --git a/pom.xml b/pom.xml index 3b89e85..21dea62 100644 --- a/pom.xml +++ b/pom.xml @@ -45,6 +45,12 @@ + + + org.springframework.boot + spring-boot-starter-amqp + + com.alibaba diff --git a/src/main/java/com/ruoyi/project/hit/domain/CardGameUser.java b/src/main/java/com/ruoyi/project/hit/domain/CardGameUser.java new file mode 100644 index 0000000..4a329b3 --- /dev/null +++ b/src/main/java/com/ruoyi/project/hit/domain/CardGameUser.java @@ -0,0 +1,36 @@ +package com.ruoyi.project.hit.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.util.Date; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * @TableName card_game_user + */ +@TableName(value ="card_game_user") +@Data + +public class CardGameUser implements Serializable { + @TableId(type = IdType.AUTO) + private Integer id; + + private Integer userid; + + private Integer gameid; + + private Date createtime; + + private static final long serialVersionUID = 1L; + + public CardGameUser(Integer userid, Integer gameid, Date createtime) { + this.userid = userid; + this.gameid = gameid; + this.createtime = createtime; + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/project/hit/domain/CardUser.java b/src/main/java/com/ruoyi/project/hit/domain/CardUser.java index 560d3ac..d9b58b6 100644 --- a/src/main/java/com/ruoyi/project/hit/domain/CardUser.java +++ b/src/main/java/com/ruoyi/project/hit/domain/CardUser.java @@ -1,13 +1,14 @@ package com.ruoyi.project.hit.domain; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; + import java.io.Serializable; import java.util.Date; import lombok.Data; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + /** * @TableName card_user */ @@ -17,27 +18,34 @@ public class CardUser implements Serializable { @TableId(type = IdType.AUTO) private Integer id; + @NotEmpty(message = "账号不能为空") private String userName; + @NotEmpty(message = "密码不能为空") private String userPass; private String pic; + @NotEmpty(message = "真实姓名不能为空") private String realname; private String idCard; + @NotEmpty(message = "手机号不能为空") private String phone; private Integer level; + //自动填充时间 + @TableField(fill = FieldFill.INSERT) private Date createTime; + @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; private Integer delState; - private String remark; +// private String remark; private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/src/main/java/com/ruoyi/project/hit/domain/CardUserHit.java b/src/main/java/com/ruoyi/project/hit/domain/CardUserHit.java index 56d26a2..aea1169 100644 --- a/src/main/java/com/ruoyi/project/hit/domain/CardUserHit.java +++ b/src/main/java/com/ruoyi/project/hit/domain/CardUserHit.java @@ -14,6 +14,7 @@ import lombok.Data; @TableName(value ="card_user_hit") @Data public class CardUserHit implements Serializable { + @TableId(type = IdType.AUTO) private Integer id; private Integer gameid; @@ -25,4 +26,11 @@ public class CardUserHit implements Serializable { private Date hittime; private static final long serialVersionUID = 1L; + + public CardUserHit(Integer gameid, Integer userid, Integer productid, Date hittime) { + this.gameid = gameid; + this.userid = userid; + this.productid = productid; + this.hittime = hittime; + } } \ No newline at end of file diff --git a/src/main/java/com/ruoyi/project/hit/mapper/CardGameMapper.java b/src/main/java/com/ruoyi/project/hit/mapper/CardGameMapper.java index 1bf1128..61d5b18 100644 --- a/src/main/java/com/ruoyi/project/hit/mapper/CardGameMapper.java +++ b/src/main/java/com/ruoyi/project/hit/mapper/CardGameMapper.java @@ -6,6 +6,7 @@ import com.ruoyi.project.hit.controller.vo.TotalInfoVo; import com.ruoyi.project.hit.domain.CardGame; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -22,6 +23,12 @@ public interface CardGameMapper extends BaseMapper { List selectCardGameList(ListCardGameVo listCardGameVo); HashMap getCardGameByGameId(Integer id); + + List showAllCardGame(); + + List getCardByDate(Date now); + + HashMap getCardGameBygameid(Integer gameid); } diff --git a/src/main/java/com/ruoyi/project/hit/mapper/CardGameProductMapper.java b/src/main/java/com/ruoyi/project/hit/mapper/CardGameProductMapper.java index 2c998eb..8e8e545 100644 --- a/src/main/java/com/ruoyi/project/hit/mapper/CardGameProductMapper.java +++ b/src/main/java/com/ruoyi/project/hit/mapper/CardGameProductMapper.java @@ -2,6 +2,7 @@ package com.ruoyi.project.hit.mapper; import com.ruoyi.project.hit.domain.CardGameProduct; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.project.uniapp.controller.vo.CardProductVo; import java.util.HashMap; import java.util.List; @@ -17,6 +18,8 @@ public interface CardGameProductMapper extends BaseMapper { List getGameProductByGameId(Integer id); int getSumAmountByGameId(Integer gameid); + + List getGameProductList(Integer id); } diff --git a/src/main/java/com/ruoyi/project/hit/mapper/CardGameUserMapper.java b/src/main/java/com/ruoyi/project/hit/mapper/CardGameUserMapper.java new file mode 100644 index 0000000..fd75658 --- /dev/null +++ b/src/main/java/com/ruoyi/project/hit/mapper/CardGameUserMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.project.hit.mapper; + +import com.ruoyi.project.hit.domain.CardGameUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author HP +* @description 针对表【card_game_user】的数据库操作Mapper +* @createDate 2024-07-12 16:48:34 +* @Entity com.ruoyi.project.hit.domain.CardGameUser +*/ +public interface CardGameUserMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/ruoyi/project/hit/mapper/CardUserHitMapper.java b/src/main/java/com/ruoyi/project/hit/mapper/CardUserHitMapper.java index 63a538d..64910ae 100644 --- a/src/main/java/com/ruoyi/project/hit/mapper/CardUserHitMapper.java +++ b/src/main/java/com/ruoyi/project/hit/mapper/CardUserHitMapper.java @@ -18,12 +18,13 @@ import java.util.Map; public interface CardUserHitMapper extends BaseMapper { List selectCardUserHitInfo(TotalInfoVo totalInfoVo); - Map getCardGameBygameid(Integer gameid); +// Map getCardGameBygameid(Integer gameid); List getProductsBygameid(Integer gameid); List selectCardUserHitList(ListInfoVo listInfoVo); + List winnerRecord(Integer userId); } diff --git a/src/main/java/com/ruoyi/project/hit/service/CardGameProductService.java b/src/main/java/com/ruoyi/project/hit/service/CardGameProductService.java index 908985b..c8022c7 100644 --- a/src/main/java/com/ruoyi/project/hit/service/CardGameProductService.java +++ b/src/main/java/com/ruoyi/project/hit/service/CardGameProductService.java @@ -2,6 +2,7 @@ package com.ruoyi.project.hit.service; import com.ruoyi.project.hit.domain.CardGameProduct; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.project.uniapp.controller.vo.CardProductVo; import java.util.HashMap; import java.util.List; @@ -49,4 +50,6 @@ public interface CardGameProductService extends IService { int getSumAmountByGameId(Integer gameid); int deleteGameProduct(Integer id); + + List getGameProductList(Integer id); } diff --git a/src/main/java/com/ruoyi/project/hit/service/CardGameRuleService.java b/src/main/java/com/ruoyi/project/hit/service/CardGameRuleService.java index 187744d..90a26c7 100644 --- a/src/main/java/com/ruoyi/project/hit/service/CardGameRuleService.java +++ b/src/main/java/com/ruoyi/project/hit/service/CardGameRuleService.java @@ -44,4 +44,6 @@ public interface CardGameRuleService extends IService { int getHitCountSumByGameId(Integer gameid); int deleteGameRule(Integer id); + + List getGameRuleList(Integer id); } diff --git a/src/main/java/com/ruoyi/project/hit/service/CardGameService.java b/src/main/java/com/ruoyi/project/hit/service/CardGameService.java index abbc263..90f8283 100644 --- a/src/main/java/com/ruoyi/project/hit/service/CardGameService.java +++ b/src/main/java/com/ruoyi/project/hit/service/CardGameService.java @@ -3,7 +3,9 @@ package com.ruoyi.project.hit.service; import com.ruoyi.project.hit.controller.vo.ListCardGameVo; import com.ruoyi.project.hit.domain.CardGame; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.project.uniapp.controller.vo.CardUserGameVo; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -44,4 +46,14 @@ public interface CardGameService extends IService { Map getCardGameDetailById(Integer id); CardGame getCardGameByGameId(Integer gameid); + + List carousel(); + + List showAllCardGame(); + + Map getGameDetail(Integer gameId); + + void preHot(Date now); + + HashMap getCardGameBygameid(Integer gameid); } diff --git a/src/main/java/com/ruoyi/project/hit/service/CardGameUserService.java b/src/main/java/com/ruoyi/project/hit/service/CardGameUserService.java new file mode 100644 index 0000000..27fa585 --- /dev/null +++ b/src/main/java/com/ruoyi/project/hit/service/CardGameUserService.java @@ -0,0 +1,14 @@ +package com.ruoyi.project.hit.service; + +import com.ruoyi.project.hit.domain.CardGameUser; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author HP +* @description 针对表【card_game_user】的数据库操作Service +* @createDate 2024-07-12 16:48:34 +*/ +public interface CardGameUserService extends IService { + + int addCardGameUser(CardGameUser cardGameUser); +} diff --git a/src/main/java/com/ruoyi/project/hit/service/CardUserHitService.java b/src/main/java/com/ruoyi/project/hit/service/CardUserHitService.java index cc8ffd9..f626b04 100644 --- a/src/main/java/com/ruoyi/project/hit/service/CardUserHitService.java +++ b/src/main/java/com/ruoyi/project/hit/service/CardUserHitService.java @@ -4,6 +4,8 @@ import com.ruoyi.project.hit.controller.vo.ListInfoVo; import com.ruoyi.project.hit.controller.vo.TotalInfoVo; import com.ruoyi.project.hit.domain.CardUserHit; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.project.uniapp.controller.vo.CardProductVo; +import com.ruoyi.project.uniapp.controller.vo.CardUserGameVo; import java.util.HashMap; import java.util.List; @@ -36,4 +38,10 @@ public interface CardUserHitService extends IService { * @return 中奖列表 */ List selectCardUserHitList(ListInfoVo listInfoVo); + + CardProductVo getPrizeDraw(CardUserGameVo cardUserGameVo); + + int addCardUserHit(CardUserHit cardUserHit); + + List winnerRecord(Integer userId); } diff --git a/src/main/java/com/ruoyi/project/hit/service/CardUserService.java b/src/main/java/com/ruoyi/project/hit/service/CardUserService.java index cd837ad..385454a 100644 --- a/src/main/java/com/ruoyi/project/hit/service/CardUserService.java +++ b/src/main/java/com/ruoyi/project/hit/service/CardUserService.java @@ -1,5 +1,6 @@ package com.ruoyi.project.hit.service; +import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.project.hit.controller.vo.ListCardUserVo; import com.ruoyi.project.hit.domain.CardUser; import com.baomidou.mybatisplus.extension.service.IService; @@ -27,4 +28,10 @@ public interface CardUserService extends IService { * @return */ List selectCardUserList(ListCardUserVo listCardUserVo); + + CardUser login(String userName, String userPass); + + boolean weatherLogin(Integer userId); + + int addCardUser(CardUser cardUser); } diff --git a/src/main/java/com/ruoyi/project/hit/service/impl/CardGameProductServiceImpl.java b/src/main/java/com/ruoyi/project/hit/service/impl/CardGameProductServiceImpl.java index d80900a..6d04721 100644 --- a/src/main/java/com/ruoyi/project/hit/service/impl/CardGameProductServiceImpl.java +++ b/src/main/java/com/ruoyi/project/hit/service/impl/CardGameProductServiceImpl.java @@ -5,11 +5,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.exception.CustomException; import com.ruoyi.project.hit.domain.CardGame; import com.ruoyi.project.hit.domain.CardGameProduct; -import com.ruoyi.project.hit.domain.CardGameRule; import com.ruoyi.project.hit.service.CardGameProductService; import com.ruoyi.project.hit.mapper.CardGameProductMapper; import com.ruoyi.project.hit.service.CardGameService; import com.ruoyi.project.hit.service.CardUserHitService; +import com.ruoyi.project.uniapp.controller.vo.CardProductVo; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -83,6 +83,11 @@ public class CardGameProductServiceImpl extends ServiceImpl getGameProductList(Integer id) { + return cardGameProductMapper.getGameProductList(id); + } } diff --git a/src/main/java/com/ruoyi/project/hit/service/impl/CardGameRuleServiceImpl.java b/src/main/java/com/ruoyi/project/hit/service/impl/CardGameRuleServiceImpl.java index cd97601..586892a 100644 --- a/src/main/java/com/ruoyi/project/hit/service/impl/CardGameRuleServiceImpl.java +++ b/src/main/java/com/ruoyi/project/hit/service/impl/CardGameRuleServiceImpl.java @@ -83,6 +83,13 @@ public class CardGameRuleServiceImpl extends ServiceImpl getGameRuleList(Integer id) { + LambdaQueryWrapper wrapper=new LambdaQueryWrapper<>(); + wrapper.eq(CardGameRule::getGameid,id); + return cardGameRuleMapper.selectList(wrapper); + } + } diff --git a/src/main/java/com/ruoyi/project/hit/service/impl/CardGameServiceImpl.java b/src/main/java/com/ruoyi/project/hit/service/impl/CardGameServiceImpl.java index fde0a78..898f351 100644 --- a/src/main/java/com/ruoyi/project/hit/service/impl/CardGameServiceImpl.java +++ b/src/main/java/com/ruoyi/project/hit/service/impl/CardGameServiceImpl.java @@ -1,24 +1,29 @@ package com.ruoyi.project.hit.service.impl; +import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.exception.CustomException; -import com.ruoyi.framework.web.domain.AjaxResult; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.project.hit.controller.vo.ListCardGameVo; import com.ruoyi.project.hit.domain.CardGame; -import com.ruoyi.project.hit.domain.CardGameProduct; +import com.ruoyi.project.hit.domain.CardGameRule; import com.ruoyi.project.hit.service.CardGameProductService; import com.ruoyi.project.hit.service.CardGameRuleService; import com.ruoyi.project.hit.service.CardGameService; import com.ruoyi.project.hit.mapper.CardGameMapper; +import com.ruoyi.project.hit.service.CardUserHitService; +import com.ruoyi.project.uniapp.controller.vo.CardProductVo; +import com.ruoyi.project.uniapp.controller.vo.CardUserGameVo; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.math.BigInteger; +import java.util.*; +import java.util.concurrent.TimeUnit; /** * @author HP @@ -29,6 +34,8 @@ import java.util.Map; @Service public class CardGameServiceImpl extends ServiceImpl implements CardGameService{ + @Autowired + private RedisTemplate redisTemplate; @Resource private CardGameMapper cardGameMapper; @@ -36,6 +43,8 @@ public class CardGameServiceImpl extends ServiceImpl private CardGameRuleService cardGameRuleService; @Resource private CardGameProductService cardGameProductService; + @Resource + private CardUserHitService cardUserHitService; @Override public List selectCardGameList(ListCardGameVo listCardGameVo) { @@ -115,6 +124,94 @@ public class CardGameServiceImpl extends ServiceImpl public CardGame getCardGameByGameId(Integer gameid) { return cardGameMapper.selectById(gameid); } + + @Override + public List carousel() { + LambdaQueryWrapper wrapper=new LambdaQueryWrapper<>(); + wrapper.select(CardGame::getPic); + wrapper.select(CardGame::getTitle); + return cardGameMapper.selectList(wrapper); + } + + @Override + public List showAllCardGame() { + return cardGameMapper.showAllCardGame(); + } + + @Override + public Map getGameDetail(Integer gameId) { + Map map=new HashMap(); + List gameRuleList = cardGameRuleService.getGameRuleListByGameId(gameId); + map.put("gameRuleList",gameRuleList); + + List gameProductList = cardGameProductService.getGameProductByGameId(gameId); + map.put("gameProductList",gameProductList); + Map map1 = cardUserHitService.selectCardUserHitInfoByGameId(gameId); + map.putAll(map1); + return map; + } + + @Override + public void preHot(Date now) { + List cardGameList = cardGameMapper.getCardByDate(now); + if(cardGameList.size()==0){ + return; + } + //活动信息缓存redis(json字符串存储) + for (CardGame cardGame : cardGameList) { + String jsonCardGame = JSONArray.toJSONString(cardGame); + //失效时间 + long l=cardGame.getEndTime().getTime()-now.getTime(); + redisTemplate.opsForValue().set("cardGame:"+cardGame.getId(),jsonCardGame,l,TimeUnit.MILLISECONDS); + + List gameRuleList = cardGameRuleService.getGameRuleList(cardGame.getId()); + for (CardGameRule cardGameRule : gameRuleList) { + //最大中奖数缓存redis(hash存储) + redisTemplate.opsForHash().put("cardGame_maxHitCount:"+cardGame.getId(),cardGameRule.getLevelid(),cardGameRule.getHitCount()); + //最大抽奖数缓存redis(hash存储) + redisTemplate.opsForHash().put("cardGame_maxEnterCount:"+cardGame.getId(),cardGameRule.getLevelid(),cardGameRule.getEnterCount()); + } + //设置两个hash失效时间 + redisTemplate.expire("cardGame_maxHitCount:"+cardGame.getId(),l, TimeUnit.MILLISECONDS); + redisTemplate.expire("cardGame_maxEnterCount:"+cardGame.getId(),l, TimeUnit.MILLISECONDS); + + List gameProductList = cardGameProductService.getGameProductList(cardGame.getId()); + //抽奖令牌桶 + List tokenList=new ArrayList<>(); + for (CardProductVo cardProductVo : gameProductList) { + for (int i = 0; i < cardProductVo.getAmount(); i++) { + //给每个奖品都配置一个时间戳 + Long start=cardGame.getStartTime().getTime(); + Long end=cardGame.getEndTime().getTime(); + //时间差 + int time= (int) (end-start); + Long token=start+new Random().nextInt(time); + //避免重复 + token=token*10000+new Random().nextInt(9999); + tokenList.add(token); + //奖品-令牌缓存redis(string存储) + redisTemplate.opsForValue().set("gameId_token:"+cardGame.getId()+"_"+token,cardProductVo,l,TimeUnit.MILLISECONDS); + } + + } + //由小到大排 + Collections.sort(tokenList); + //令牌集合redis缓存(list存储) + redisTemplate.opsForList().rightPushAll("game_token:"+cardGame.getId(),tokenList); + redisTemplate.expire("game_token:"+cardGame.getId(),l,TimeUnit.MILLISECONDS); + + //活动状态置1 + cardGame.setStatus(1); + cardGameMapper.updateById(cardGame); + } + + + } + + @Override + public HashMap getCardGameBygameid(Integer gameid) { + return cardGameMapper.getCardGameBygameid(gameid); + } } diff --git a/src/main/java/com/ruoyi/project/hit/service/impl/CardGameUserServiceImpl.java b/src/main/java/com/ruoyi/project/hit/service/impl/CardGameUserServiceImpl.java new file mode 100644 index 0000000..ab38865 --- /dev/null +++ b/src/main/java/com/ruoyi/project/hit/service/impl/CardGameUserServiceImpl.java @@ -0,0 +1,30 @@ +package com.ruoyi.project.hit.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.project.hit.domain.CardGameUser; +import com.ruoyi.project.hit.service.CardGameUserService; +import com.ruoyi.project.hit.mapper.CardGameUserMapper; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** +* @author HP +* @description 针对表【card_game_user】的数据库操作Service实现 +* @createDate 2024-07-12 16:48:34 +*/ +@Service +public class CardGameUserServiceImpl extends ServiceImpl + implements CardGameUserService{ + @Resource + private CardGameUserMapper cardGameUserMapper; + + @Override + public int addCardGameUser(CardGameUser cardGameUser) { + return cardGameUserMapper.insert(cardGameUser); + } +} + + + + diff --git a/src/main/java/com/ruoyi/project/hit/service/impl/CardUserHitServiceImpl.java b/src/main/java/com/ruoyi/project/hit/service/impl/CardUserHitServiceImpl.java index b8b221b..c9c3961 100644 --- a/src/main/java/com/ruoyi/project/hit/service/impl/CardUserHitServiceImpl.java +++ b/src/main/java/com/ruoyi/project/hit/service/impl/CardUserHitServiceImpl.java @@ -1,19 +1,32 @@ package com.ruoyi.project.hit.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.exception.CustomException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.project.hit.controller.vo.ListInfoVo; import com.ruoyi.project.hit.controller.vo.TotalInfoVo; -import com.ruoyi.project.hit.domain.CardUserHit; -import com.ruoyi.project.hit.mapper.CardGameMapper; +import com.ruoyi.project.hit.domain.*; +import com.ruoyi.project.hit.service.CardGameService; import com.ruoyi.project.hit.service.CardUserHitService; import com.ruoyi.project.hit.mapper.CardUserHitMapper; +import com.ruoyi.project.hit.service.CardUserService; +import com.ruoyi.project.uniapp.controller.vo.CardProductVo; +import com.ruoyi.project.uniapp.controller.vo.CardUserGameVo; import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; /** * @author HP @@ -27,6 +40,16 @@ public class CardUserHitServiceImpl extends ServiceImpl selectCardUserHitInfo(TotalInfoVo totalInfoVo) { return cardUserHitMapper.selectCardUserHitInfo(totalInfoVo); @@ -36,13 +59,15 @@ public class CardUserHitServiceImpl extends ServiceImpl selectCardUserHitInfoByGameId(Integer gameid) { Map map=new HashMap<>(); //根据活动id拿到活动详情以及活动类型(2表) - Map map1 = cardUserHitMapper.getCardGameBygameid(gameid); - log.debug("cardGame",map1); + Map map1 = cardGameService.getCardGameBygameid(gameid); +// log.debug("cardGame",map1); map.put("cardGame",map1); - //根据活动id拿到活动中奖明细(3表) - List hashMapList=cardUserHitMapper.getProductsBygameid(gameid); - map.put("products",hashMapList); - log.debug("products",hashMapList); + CardGame cardGame = cardGameService.getCardGameByGameId(gameid); + if(StringUtils.isNotNull(cardGame)&&cardGame.getEndTime().before(new Date())){ + //根据活动id拿到活动中奖明细(3表) + List hashMapList=cardUserHitMapper.getProductsBygameid(gameid); + map.put("products",hashMapList); + } return map; } @@ -51,6 +76,79 @@ public class CardUserHitServiceImpl extends ServiceImpl=maxEnterCount){ + throw new CustomException("抽奖次数已达上限"); + } + int maxHitCount = (int) redisTemplate.opsForHash().get("cardGame_maxHitCount:" + cardUserGameVo.getGameId(), cardUser.getLevel()); + int HitCount=(int) redisTemplate.opsForValue().get("cardGame_user_hit:" + cardUserGameVo.getGameId() + "_" + cardUserGameVo.getUserId()); + //抽奖记录次数加一 + redisTemplate.opsForValue().increment("cardGame_user:" + cardUserGameVo.getGameId() + "_" + cardUserGameVo.getUserId(),1); + //mq写入抽奖记录到数据库 + CardGameUser cardGameUser=new CardGameUser(cardUserGameVo.getUserId(),cardUserGameVo.getGameId(),now); + String cardGameUserStr= JSONObject.toJSONString(cardGameUser); + rabbitTemplate.convertAndSend("drawRecord",cardGameUserStr); + //该用户已经达到最大中奖次数 + if(HitCount>=maxHitCount){ + return null; + } + //抽奖流程 + Long token= (Long) redisTemplate.opsForList().leftPop("game_token:"+cardUserGameVo.getGameId()); + if(StringUtils.isNull(token)){ + throw new CustomException("奖品已抽完"); + } + if(now.getTime() winnerRecord(Integer userId) { + return cardUserHitMapper.winnerRecord(userId); + } + } diff --git a/src/main/java/com/ruoyi/project/hit/service/impl/CardUserServiceImpl.java b/src/main/java/com/ruoyi/project/hit/service/impl/CardUserServiceImpl.java index af49126..1d55d97 100644 --- a/src/main/java/com/ruoyi/project/hit/service/impl/CardUserServiceImpl.java +++ b/src/main/java/com/ruoyi/project/hit/service/impl/CardUserServiceImpl.java @@ -2,16 +2,22 @@ package com.ruoyi.project.hit.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.exception.CustomException; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.project.hit.controller.vo.ListCardUserVo; import com.ruoyi.project.hit.domain.CardUser; import com.ruoyi.project.hit.domain.SystemDict; import com.ruoyi.project.hit.service.CardUserService; import com.ruoyi.project.hit.mapper.CardUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.TimeoutUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; +import java.util.concurrent.TimeUnit; /** * @author HP @@ -21,6 +27,8 @@ import java.util.List; @Service public class CardUserServiceImpl extends ServiceImpl implements CardUserService{ + @Autowired + private RedisTemplate redisTemplate; @Resource private CardUserMapper cardUserMapper; @@ -36,6 +44,30 @@ public class CardUserServiceImpl extends ServiceImpl public List selectCardUserList(ListCardUserVo listCardUserVo) { return cardUserMapper.selectCardUserList(listCardUserVo); } + + @Override + public CardUser login(String userName, String userPass) { + LambdaQueryWrapper wrapper=new LambdaQueryWrapper<>(); + wrapper.eq(CardUser::getUserName,userName); + wrapper.eq(CardUser::getUserPass,userPass); + CardUser cardUser = cardUserMapper.selectOne(wrapper); + if(StringUtils.isNotNull(cardUser)){ + redisTemplate.opsForValue().set("user_login:"+cardUser.getId(),cardUser, 30, TimeUnit.MINUTES); + return cardUser; + } + throw new CustomException("登录失败"); + + } + + @Override + public boolean weatherLogin(Integer userId) { + return redisTemplate.hasKey("user_login:"+userId); + } + + @Override + public int addCardUser(CardUser cardUser) { + return cardUserMapper.insert(cardUser); + } } diff --git a/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java b/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java index 3759a48..a124e0a 100644 --- a/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java +++ b/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java @@ -3,6 +3,7 @@ package com.ruoyi.project.system.controller; import java.util.List; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -39,6 +40,8 @@ public class SysLoginController @Autowired private TokenService tokenService; + private RedisTemplate redisTemplate; + /** * 登录方法 * @@ -56,6 +59,8 @@ public class SysLoginController return ajax; } + + /** * 获取用户信息 * diff --git a/src/main/java/com/ruoyi/project/uniapp/controller/BonusController.java b/src/main/java/com/ruoyi/project/uniapp/controller/BonusController.java new file mode 100644 index 0000000..21a9992 --- /dev/null +++ b/src/main/java/com/ruoyi/project/uniapp/controller/BonusController.java @@ -0,0 +1,73 @@ +package com.ruoyi.project.uniapp.controller; + +import com.ruoyi.framework.web.controller.BaseController; +import com.ruoyi.framework.web.domain.AjaxResult; +import com.ruoyi.framework.web.page.TableDataInfo; +import com.ruoyi.project.hit.domain.CardGame; +import com.ruoyi.project.hit.domain.CardUser; +import com.ruoyi.project.hit.service.CardGameService; +import com.ruoyi.project.hit.service.CardUserHitService; +import com.ruoyi.project.hit.service.CardUserService; +import com.ruoyi.project.uniapp.controller.vo.CardUserGameVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import javax.xml.crypto.Data; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +@EnableScheduling +@RestController +@RequestMapping("/uniapp/bonus") +public class BonusController extends BaseController { + @Autowired + private CardUserService cardUserService; + @Autowired + private CardGameService cardGameService; + @Autowired + private CardUserHitService cardUserHitService; + + + + @GetMapping("/showAllCardGame") + public TableDataInfo showAllCardGame(){ + startPage(); + List list = cardGameService.showAllCardGame(); + return getDataTable(list); + } + + /** + * 活动详情 + * @param gameId + * @return + */ + @PostMapping("/getGameDetail/{gameId}") + public AjaxResult getGameDetail(@PathVariable(value = "gameId")Integer gameId){ + return AjaxResult.success(cardGameService.getGameDetail(gameId)); + } + + /** + * 抽奖业务 + * @param cardUserGameVo + * @return + */ + @PostMapping("/getPrizeDraw") + public AjaxResult getPrizeDraw(@RequestBody CardUserGameVo cardUserGameVo){ + return AjaxResult.success(cardUserHitService.getPrizeDraw(cardUserGameVo)); + } + + /** + * 活动预热 + */ + @Scheduled(fixedRate = 60000) + public void preHot(){ + Date now=new Date(); + cardGameService.preHot(now); + } + + +} diff --git a/src/main/java/com/ruoyi/project/uniapp/controller/HomePageController.java b/src/main/java/com/ruoyi/project/uniapp/controller/HomePageController.java new file mode 100644 index 0000000..207d8ee --- /dev/null +++ b/src/main/java/com/ruoyi/project/uniapp/controller/HomePageController.java @@ -0,0 +1,58 @@ +package com.ruoyi.project.uniapp.controller; + +import com.ruoyi.framework.web.controller.BaseController; +import com.ruoyi.framework.web.domain.AjaxResult; +import com.ruoyi.project.hit.domain.CardGame; +import com.ruoyi.project.hit.service.CardGameService; +import com.ruoyi.project.hit.service.CardSaleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/uniapp/homePage") +public class HomePageController extends BaseController { + + @Autowired + private CardGameService cardGameService; + @Autowired + private CardSaleService cardSaleService; + /** + * 主页轮播图 + * @return + */ + @GetMapping("/carousel") + public AjaxResult carousel(){ + List carousel = cardGameService.carousel(); + return AjaxResult.success(carousel); + } + + /** + * 热度榜单 + * @return + */ + @GetMapping("/getHotSale") + public AjaxResult getHotSale(){ + return AjaxResult.success(cardSaleService.getHotSale()); + } + + @GetMapping("/getAllHotSale") + public AjaxResult getAllHotSale(){ + return AjaxResult.success(cardSaleService.getAllHotSale()); + } + + /** + * 点击(热度增加) + * @param id + * @return + */ + @PostMapping("/addHotSaleNum/{saleId}") + public AjaxResult addHotSaleNum(@PathVariable(value = "saleId")Integer id){ + cardSaleService.addHotSaleNum(id); + return AjaxResult.success(); + } + + + +} diff --git a/src/main/java/com/ruoyi/project/uniapp/controller/PersonalCenterController.java b/src/main/java/com/ruoyi/project/uniapp/controller/PersonalCenterController.java new file mode 100644 index 0000000..d213cad --- /dev/null +++ b/src/main/java/com/ruoyi/project/uniapp/controller/PersonalCenterController.java @@ -0,0 +1,39 @@ +package com.ruoyi.project.uniapp.controller; + +import com.ruoyi.framework.web.controller.BaseController; +import com.ruoyi.framework.web.domain.AjaxResult; +import com.ruoyi.project.hit.domain.CardUser; +import com.ruoyi.project.hit.service.CardUserHitService; +import com.ruoyi.project.hit.service.CardUserService; +import com.ruoyi.project.uniapp.controller.vo.CardUserVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +@RestController +@RequestMapping("/uniapp/personalCenter") +public class PersonalCenterController extends BaseController { + + @Autowired + private CardUserService cardUserService; + @Autowired + private CardUserHitService cardUserHitService; + + @PostMapping("/login") + public AjaxResult login(@RequestBody @Valid CardUserVo cardUser){ + CardUser user = cardUserService.login(cardUser.getUserName(), cardUser.getUserPass()); + return AjaxResult.success("登录成功",user); + } + + @PostMapping("/addCardUser") + public AjaxResult addCardUser(@Valid @RequestBody CardUser cardUser){ + return toAjax(cardUserService.addCardUser(cardUser)); + } + + @GetMapping("/winnerRecord/{userId}") + public AjaxResult getMyWinnerRecord(@PathVariable(value = "userId")Integer userId){ + return AjaxResult.success(cardUserHitService.winnerRecord(userId)); + } +} diff --git a/src/main/java/com/ruoyi/project/uniapp/controller/vo/CardProductVo.java b/src/main/java/com/ruoyi/project/uniapp/controller/vo/CardProductVo.java new file mode 100644 index 0000000..63739bc --- /dev/null +++ b/src/main/java/com/ruoyi/project/uniapp/controller/vo/CardProductVo.java @@ -0,0 +1,29 @@ +package com.ruoyi.project.uniapp.controller.vo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.format.NumberFormat; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class CardProductVo { + @TableId(type = IdType.AUTO) + private Integer id; + + private String pname; + + private String pic; + + private String content; + + private BigDecimal price; + + private Integer delState; + + private Integer amount; +} diff --git a/src/main/java/com/ruoyi/project/uniapp/controller/vo/CardUserGameVo.java b/src/main/java/com/ruoyi/project/uniapp/controller/vo/CardUserGameVo.java new file mode 100644 index 0000000..aaf89f1 --- /dev/null +++ b/src/main/java/com/ruoyi/project/uniapp/controller/vo/CardUserGameVo.java @@ -0,0 +1,13 @@ +package com.ruoyi.project.uniapp.controller.vo; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class CardUserGameVo { + @NotNull(message = "用户id不能为空") + private Integer userId; + @NotNull(message = "活动id不能为空") + private Integer gameId; +} diff --git a/src/main/java/com/ruoyi/project/uniapp/controller/vo/CardUserVo.java b/src/main/java/com/ruoyi/project/uniapp/controller/vo/CardUserVo.java new file mode 100644 index 0000000..303c23b --- /dev/null +++ b/src/main/java/com/ruoyi/project/uniapp/controller/vo/CardUserVo.java @@ -0,0 +1,14 @@ +package com.ruoyi.project.uniapp.controller.vo; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +@Data +public class CardUserVo { + @NotEmpty(message = "账号不能为空") + private String userName; + + @NotEmpty(message = "密码不能为空") + private String userPass; +} diff --git a/src/main/java/com/ruoyi/project/uniapp/mq/Consumer01.java b/src/main/java/com/ruoyi/project/uniapp/mq/Consumer01.java new file mode 100644 index 0000000..9296fe1 --- /dev/null +++ b/src/main/java/com/ruoyi/project/uniapp/mq/Consumer01.java @@ -0,0 +1,23 @@ +package com.ruoyi.project.uniapp.mq; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.project.hit.domain.CardGameUser; +import com.ruoyi.project.hit.service.CardGameUserService; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@RabbitListener(queues = "drawRecord") +@Component +public class Consumer01 { + @Resource + private CardGameUserService cardGameUserService; + + @RabbitHandler + public void addCardGameUser(String cardGameUserStr){ + CardGameUser cardGameUser= JSON.parseObject(cardGameUserStr,CardGameUser.class); + cardGameUserService.addCardGameUser(cardGameUser); + } +} diff --git a/src/main/java/com/ruoyi/project/uniapp/mq/Consumer02.java b/src/main/java/com/ruoyi/project/uniapp/mq/Consumer02.java new file mode 100644 index 0000000..bd351d0 --- /dev/null +++ b/src/main/java/com/ruoyi/project/uniapp/mq/Consumer02.java @@ -0,0 +1,21 @@ +package com.ruoyi.project.uniapp.mq; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.project.hit.domain.CardUserHit; +import com.ruoyi.project.hit.service.CardUserHitService; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@RabbitListener(queues = "winnerRecord") +@Component +public class Consumer02 { + @Autowired + private CardUserHitService cardUserHitService; + @RabbitHandler + public void addCardUserHit(String cardUserHitStr){ + CardUserHit cardUserHit= JSON.parseObject(cardUserHitStr,CardUserHit.class); + cardUserHitService.addCardUserHit(cardUserHit); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 9f91b01..404d436 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -78,6 +78,11 @@ spring: max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms + rabbitmq: + host: 192.168.157.129 + password: guest + username: guest + port: 5672 # token配置 token: @@ -85,8 +90,8 @@ token: header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz - # 令牌有效期(默认30分钟) - expireTime: 30 + # 令牌有效期(默认1200分钟) + expireTime: 1200 # MyBatis配置 #mybatis: diff --git a/src/main/resources/mybatis/hit/CardGameMapper.xml b/src/main/resources/mybatis/hit/CardGameMapper.xml index df1ab90..773269a 100644 --- a/src/main/resources/mybatis/hit/CardGameMapper.xml +++ b/src/main/resources/mybatis/hit/CardGameMapper.xml @@ -63,5 +63,32 @@ INNER JOIN system_dict ON card_game.type = system_dict.dict_key and system_dict.dict_type='gametype' where card_game.id=#{id} + + + diff --git a/src/main/resources/mybatis/hit/CardGameProductMapper.xml b/src/main/resources/mybatis/hit/CardGameProductMapper.xml index 0683332..5dd85d8 100644 --- a/src/main/resources/mybatis/hit/CardGameProductMapper.xml +++ b/src/main/resources/mybatis/hit/CardGameProductMapper.xml @@ -28,4 +28,22 @@ + + diff --git a/src/main/resources/mybatis/hit/CardGameRuleMapper.xml b/src/main/resources/mybatis/hit/CardGameRuleMapper.xml index 4ce0daa..ce30f4f 100644 --- a/src/main/resources/mybatis/hit/CardGameRuleMapper.xml +++ b/src/main/resources/mybatis/hit/CardGameRuleMapper.xml @@ -27,6 +27,7 @@ INNER JOIN system_dict ON card_game_rule.levelid = system_dict.dict_key AND system_dict.dict_type='userlevel' WHERE card_game_rule.gameid=#{id} + diff --git a/src/main/resources/mybatis/hit/CardGameUserMapper.xml b/src/main/resources/mybatis/hit/CardGameUserMapper.xml new file mode 100644 index 0000000..1d31b05 --- /dev/null +++ b/src/main/resources/mybatis/hit/CardGameUserMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + id,userid,gameid, + createtime + + diff --git a/src/main/resources/mybatis/hit/CardUserHitMapper.xml b/src/main/resources/mybatis/hit/CardUserHitMapper.xml index 3fd9bee..99fbd71 100644 --- a/src/main/resources/mybatis/hit/CardUserHitMapper.xml +++ b/src/main/resources/mybatis/hit/CardUserHitMapper.xml @@ -39,13 +39,7 @@ - + + diff --git a/src/main/resources/mybatis/hit/CardUserMapper.xml b/src/main/resources/mybatis/hit/CardUserMapper.xml index 9f587a8..7de98c0 100644 --- a/src/main/resources/mybatis/hit/CardUserMapper.xml +++ b/src/main/resources/mybatis/hit/CardUserMapper.xml @@ -16,7 +16,7 @@ - + @@ -26,6 +26,7 @@ phone,level,create_time, update_time,del_state,remark +