小程序端接口实现
This commit is contained in:
parent
5490e69863
commit
8f3c781183
6
pom.xml
6
pom.xml
@ -45,6 +45,12 @@
|
|||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
|
<!-- rabbitmq -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-amqp</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- excel表导入-->
|
<!-- excel表导入-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.alibaba</groupId>
|
<groupId>com.alibaba</groupId>
|
||||||
|
36
src/main/java/com/ruoyi/project/hit/domain/CardGameUser.java
Normal file
36
src/main/java/com/ruoyi/project/hit/domain/CardGameUser.java
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -1,13 +1,14 @@
|
|||||||
package com.ruoyi.project.hit.domain;
|
package com.ruoyi.project.hit.domain;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @TableName card_user
|
* @TableName card_user
|
||||||
*/
|
*/
|
||||||
@ -17,27 +18,34 @@ public class CardUser implements Serializable {
|
|||||||
@TableId(type = IdType.AUTO)
|
@TableId(type = IdType.AUTO)
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
|
@NotEmpty(message = "账号不能为空")
|
||||||
private String userName;
|
private String userName;
|
||||||
|
|
||||||
|
@NotEmpty(message = "密码不能为空")
|
||||||
private String userPass;
|
private String userPass;
|
||||||
|
|
||||||
private String pic;
|
private String pic;
|
||||||
|
|
||||||
|
@NotEmpty(message = "真实姓名不能为空")
|
||||||
private String realname;
|
private String realname;
|
||||||
|
|
||||||
private String idCard;
|
private String idCard;
|
||||||
|
|
||||||
|
@NotEmpty(message = "手机号不能为空")
|
||||||
private String phone;
|
private String phone;
|
||||||
|
|
||||||
private Integer level;
|
private Integer level;
|
||||||
|
|
||||||
|
//自动填充时间
|
||||||
|
@TableField(fill = FieldFill.INSERT)
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
|
|
||||||
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
|
|
||||||
private Integer delState;
|
private Integer delState;
|
||||||
|
|
||||||
private String remark;
|
// private String remark;
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
}
|
}
|
@ -14,6 +14,7 @@ import lombok.Data;
|
|||||||
@TableName(value ="card_user_hit")
|
@TableName(value ="card_user_hit")
|
||||||
@Data
|
@Data
|
||||||
public class CardUserHit implements Serializable {
|
public class CardUserHit implements Serializable {
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
private Integer gameid;
|
private Integer gameid;
|
||||||
@ -25,4 +26,11 @@ public class CardUserHit implements Serializable {
|
|||||||
private Date hittime;
|
private Date hittime;
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
@ -6,6 +6,7 @@ import com.ruoyi.project.hit.controller.vo.TotalInfoVo;
|
|||||||
import com.ruoyi.project.hit.domain.CardGame;
|
import com.ruoyi.project.hit.domain.CardGame;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -22,6 +23,12 @@ public interface CardGameMapper extends BaseMapper<CardGame> {
|
|||||||
List<HashMap> selectCardGameList(ListCardGameVo listCardGameVo);
|
List<HashMap> selectCardGameList(ListCardGameVo listCardGameVo);
|
||||||
|
|
||||||
HashMap getCardGameByGameId(Integer id);
|
HashMap getCardGameByGameId(Integer id);
|
||||||
|
|
||||||
|
List<HashMap> showAllCardGame();
|
||||||
|
|
||||||
|
List<CardGame> getCardByDate(Date now);
|
||||||
|
|
||||||
|
HashMap getCardGameBygameid(Integer gameid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package com.ruoyi.project.hit.mapper;
|
|||||||
|
|
||||||
import com.ruoyi.project.hit.domain.CardGameProduct;
|
import com.ruoyi.project.hit.domain.CardGameProduct;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.ruoyi.project.uniapp.controller.vo.CardProductVo;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -17,6 +18,8 @@ public interface CardGameProductMapper extends BaseMapper<CardGameProduct> {
|
|||||||
List<HashMap> getGameProductByGameId(Integer id);
|
List<HashMap> getGameProductByGameId(Integer id);
|
||||||
|
|
||||||
int getSumAmountByGameId(Integer gameid);
|
int getSumAmountByGameId(Integer gameid);
|
||||||
|
|
||||||
|
List<CardProductVo> getGameProductList(Integer id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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<CardGameUser> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -18,12 +18,13 @@ import java.util.Map;
|
|||||||
public interface CardUserHitMapper extends BaseMapper<CardUserHit> {
|
public interface CardUserHitMapper extends BaseMapper<CardUserHit> {
|
||||||
List<HashMap> selectCardUserHitInfo(TotalInfoVo totalInfoVo);
|
List<HashMap> selectCardUserHitInfo(TotalInfoVo totalInfoVo);
|
||||||
|
|
||||||
Map getCardGameBygameid(Integer gameid);
|
// Map getCardGameBygameid(Integer gameid);
|
||||||
|
|
||||||
List<HashMap> getProductsBygameid(Integer gameid);
|
List<HashMap> getProductsBygameid(Integer gameid);
|
||||||
|
|
||||||
List<HashMap> selectCardUserHitList(ListInfoVo listInfoVo);
|
List<HashMap> selectCardUserHitList(ListInfoVo listInfoVo);
|
||||||
|
|
||||||
|
List<HashMap> winnerRecord(Integer userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package com.ruoyi.project.hit.service;
|
|||||||
|
|
||||||
import com.ruoyi.project.hit.domain.CardGameProduct;
|
import com.ruoyi.project.hit.domain.CardGameProduct;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.ruoyi.project.uniapp.controller.vo.CardProductVo;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -49,4 +50,6 @@ public interface CardGameProductService extends IService<CardGameProduct> {
|
|||||||
int getSumAmountByGameId(Integer gameid);
|
int getSumAmountByGameId(Integer gameid);
|
||||||
|
|
||||||
int deleteGameProduct(Integer id);
|
int deleteGameProduct(Integer id);
|
||||||
|
|
||||||
|
List<CardProductVo> getGameProductList(Integer id);
|
||||||
}
|
}
|
||||||
|
@ -44,4 +44,6 @@ public interface CardGameRuleService extends IService<CardGameRule> {
|
|||||||
int getHitCountSumByGameId(Integer gameid);
|
int getHitCountSumByGameId(Integer gameid);
|
||||||
|
|
||||||
int deleteGameRule(Integer id);
|
int deleteGameRule(Integer id);
|
||||||
|
|
||||||
|
List<CardGameRule> getGameRuleList(Integer id);
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,9 @@ package com.ruoyi.project.hit.service;
|
|||||||
import com.ruoyi.project.hit.controller.vo.ListCardGameVo;
|
import com.ruoyi.project.hit.controller.vo.ListCardGameVo;
|
||||||
import com.ruoyi.project.hit.domain.CardGame;
|
import com.ruoyi.project.hit.domain.CardGame;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
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.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -44,4 +46,14 @@ public interface CardGameService extends IService<CardGame> {
|
|||||||
Map<String, Object> getCardGameDetailById(Integer id);
|
Map<String, Object> getCardGameDetailById(Integer id);
|
||||||
|
|
||||||
CardGame getCardGameByGameId(Integer gameid);
|
CardGame getCardGameByGameId(Integer gameid);
|
||||||
|
|
||||||
|
List<CardGame> carousel();
|
||||||
|
|
||||||
|
List<HashMap> showAllCardGame();
|
||||||
|
|
||||||
|
Map<String, Object> getGameDetail(Integer gameId);
|
||||||
|
|
||||||
|
void preHot(Date now);
|
||||||
|
|
||||||
|
HashMap getCardGameBygameid(Integer gameid);
|
||||||
}
|
}
|
||||||
|
@ -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<CardGameUser> {
|
||||||
|
|
||||||
|
int addCardGameUser(CardGameUser cardGameUser);
|
||||||
|
}
|
@ -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.controller.vo.TotalInfoVo;
|
||||||
import com.ruoyi.project.hit.domain.CardUserHit;
|
import com.ruoyi.project.hit.domain.CardUserHit;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
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.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -36,4 +38,10 @@ public interface CardUserHitService extends IService<CardUserHit> {
|
|||||||
* @return 中奖列表
|
* @return 中奖列表
|
||||||
*/
|
*/
|
||||||
List<HashMap> selectCardUserHitList(ListInfoVo listInfoVo);
|
List<HashMap> selectCardUserHitList(ListInfoVo listInfoVo);
|
||||||
|
|
||||||
|
CardProductVo getPrizeDraw(CardUserGameVo cardUserGameVo);
|
||||||
|
|
||||||
|
int addCardUserHit(CardUserHit cardUserHit);
|
||||||
|
|
||||||
|
List<HashMap> winnerRecord(Integer userId);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.ruoyi.project.hit.service;
|
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.controller.vo.ListCardUserVo;
|
||||||
import com.ruoyi.project.hit.domain.CardUser;
|
import com.ruoyi.project.hit.domain.CardUser;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
@ -27,4 +28,10 @@ public interface CardUserService extends IService<CardUser> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<HashMap> selectCardUserList(ListCardUserVo listCardUserVo);
|
List<HashMap> selectCardUserList(ListCardUserVo listCardUserVo);
|
||||||
|
|
||||||
|
CardUser login(String userName, String userPass);
|
||||||
|
|
||||||
|
boolean weatherLogin(Integer userId);
|
||||||
|
|
||||||
|
int addCardUser(CardUser cardUser);
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||||||
import com.ruoyi.common.exception.CustomException;
|
import com.ruoyi.common.exception.CustomException;
|
||||||
import com.ruoyi.project.hit.domain.CardGame;
|
import com.ruoyi.project.hit.domain.CardGame;
|
||||||
import com.ruoyi.project.hit.domain.CardGameProduct;
|
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.CardGameProductService;
|
||||||
import com.ruoyi.project.hit.mapper.CardGameProductMapper;
|
import com.ruoyi.project.hit.mapper.CardGameProductMapper;
|
||||||
import com.ruoyi.project.hit.service.CardGameService;
|
import com.ruoyi.project.hit.service.CardGameService;
|
||||||
import com.ruoyi.project.hit.service.CardUserHitService;
|
import com.ruoyi.project.hit.service.CardUserHitService;
|
||||||
|
import com.ruoyi.project.uniapp.controller.vo.CardProductVo;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -83,6 +83,11 @@ public class CardGameProductServiceImpl extends ServiceImpl<CardGameProductMappe
|
|||||||
//活动已开始时,不允许删除该活动的奖品
|
//活动已开始时,不允许删除该活动的奖品
|
||||||
return cardGameProductMapper.deleteById(id);
|
return cardGameProductMapper.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CardProductVo> getGameProductList(Integer id) {
|
||||||
|
return cardGameProductMapper.getGameProductList(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,6 +83,13 @@ public class CardGameRuleServiceImpl extends ServiceImpl<CardGameRuleMapper, Car
|
|||||||
return cardGameRuleMapper.deleteById(id);
|
return cardGameRuleMapper.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CardGameRule> getGameRuleList(Integer id) {
|
||||||
|
LambdaQueryWrapper<CardGameRule> wrapper=new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(CardGameRule::getGameid,id);
|
||||||
|
return cardGameRuleMapper.selectList(wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,24 +1,29 @@
|
|||||||
package com.ruoyi.project.hit.service.impl;
|
package com.ruoyi.project.hit.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.ruoyi.common.exception.CustomException;
|
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.controller.vo.ListCardGameVo;
|
||||||
import com.ruoyi.project.hit.domain.CardGame;
|
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.CardGameProductService;
|
||||||
import com.ruoyi.project.hit.service.CardGameRuleService;
|
import com.ruoyi.project.hit.service.CardGameRuleService;
|
||||||
import com.ruoyi.project.hit.service.CardGameService;
|
import com.ruoyi.project.hit.service.CardGameService;
|
||||||
import com.ruoyi.project.hit.mapper.CardGameMapper;
|
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 lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Date;
|
import java.math.BigInteger;
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.List;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author HP
|
* @author HP
|
||||||
@ -29,6 +34,8 @@ import java.util.Map;
|
|||||||
@Service
|
@Service
|
||||||
public class CardGameServiceImpl extends ServiceImpl<CardGameMapper, CardGame>
|
public class CardGameServiceImpl extends ServiceImpl<CardGameMapper, CardGame>
|
||||||
implements CardGameService{
|
implements CardGameService{
|
||||||
|
@Autowired
|
||||||
|
private RedisTemplate redisTemplate;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private CardGameMapper cardGameMapper;
|
private CardGameMapper cardGameMapper;
|
||||||
@ -36,6 +43,8 @@ public class CardGameServiceImpl extends ServiceImpl<CardGameMapper, CardGame>
|
|||||||
private CardGameRuleService cardGameRuleService;
|
private CardGameRuleService cardGameRuleService;
|
||||||
@Resource
|
@Resource
|
||||||
private CardGameProductService cardGameProductService;
|
private CardGameProductService cardGameProductService;
|
||||||
|
@Resource
|
||||||
|
private CardUserHitService cardUserHitService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<HashMap> selectCardGameList(ListCardGameVo listCardGameVo) {
|
public List<HashMap> selectCardGameList(ListCardGameVo listCardGameVo) {
|
||||||
@ -115,6 +124,94 @@ public class CardGameServiceImpl extends ServiceImpl<CardGameMapper, CardGame>
|
|||||||
public CardGame getCardGameByGameId(Integer gameid) {
|
public CardGame getCardGameByGameId(Integer gameid) {
|
||||||
return cardGameMapper.selectById(gameid);
|
return cardGameMapper.selectById(gameid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CardGame> carousel() {
|
||||||
|
LambdaQueryWrapper<CardGame> wrapper=new LambdaQueryWrapper<>();
|
||||||
|
wrapper.select(CardGame::getPic);
|
||||||
|
wrapper.select(CardGame::getTitle);
|
||||||
|
return cardGameMapper.selectList(wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<HashMap> showAllCardGame() {
|
||||||
|
return cardGameMapper.showAllCardGame();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getGameDetail(Integer gameId) {
|
||||||
|
Map map=new HashMap();
|
||||||
|
List<HashMap> gameRuleList = cardGameRuleService.getGameRuleListByGameId(gameId);
|
||||||
|
map.put("gameRuleList",gameRuleList);
|
||||||
|
|
||||||
|
List<HashMap> gameProductList = cardGameProductService.getGameProductByGameId(gameId);
|
||||||
|
map.put("gameProductList",gameProductList);
|
||||||
|
Map<String, Object> map1 = cardUserHitService.selectCardUserHitInfoByGameId(gameId);
|
||||||
|
map.putAll(map1);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void preHot(Date now) {
|
||||||
|
List<CardGame> 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<CardGameRule> 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<CardProductVo> gameProductList = cardGameProductService.getGameProductList(cardGame.getId());
|
||||||
|
//抽奖令牌桶
|
||||||
|
List<Long> 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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<CardGameUserMapper, CardGameUser>
|
||||||
|
implements CardGameUserService{
|
||||||
|
@Resource
|
||||||
|
private CardGameUserMapper cardGameUserMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int addCardGameUser(CardGameUser cardGameUser) {
|
||||||
|
return cardGameUserMapper.insert(cardGameUser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,19 +1,32 @@
|
|||||||
package com.ruoyi.project.hit.service.impl;
|
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.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.ListInfoVo;
|
||||||
import com.ruoyi.project.hit.controller.vo.TotalInfoVo;
|
import com.ruoyi.project.hit.controller.vo.TotalInfoVo;
|
||||||
import com.ruoyi.project.hit.domain.CardUserHit;
|
import com.ruoyi.project.hit.domain.*;
|
||||||
import com.ruoyi.project.hit.mapper.CardGameMapper;
|
import com.ruoyi.project.hit.service.CardGameService;
|
||||||
import com.ruoyi.project.hit.service.CardUserHitService;
|
import com.ruoyi.project.hit.service.CardUserHitService;
|
||||||
import com.ruoyi.project.hit.mapper.CardUserHitMapper;
|
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 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 org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author HP
|
* @author HP
|
||||||
@ -27,6 +40,16 @@ public class CardUserHitServiceImpl extends ServiceImpl<CardUserHitMapper, CardU
|
|||||||
@Resource
|
@Resource
|
||||||
private CardUserHitMapper cardUserHitMapper;
|
private CardUserHitMapper cardUserHitMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CardGameService cardGameService;
|
||||||
|
@Autowired
|
||||||
|
private CardUserService cardUserService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RedisTemplate redisTemplate;
|
||||||
|
@Autowired
|
||||||
|
private RabbitTemplate rabbitTemplate;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<HashMap> selectCardUserHitInfo(TotalInfoVo totalInfoVo) {
|
public List<HashMap> selectCardUserHitInfo(TotalInfoVo totalInfoVo) {
|
||||||
return cardUserHitMapper.selectCardUserHitInfo(totalInfoVo);
|
return cardUserHitMapper.selectCardUserHitInfo(totalInfoVo);
|
||||||
@ -36,13 +59,15 @@ public class CardUserHitServiceImpl extends ServiceImpl<CardUserHitMapper, CardU
|
|||||||
public Map<String,Object> selectCardUserHitInfoByGameId(Integer gameid) {
|
public Map<String,Object> selectCardUserHitInfoByGameId(Integer gameid) {
|
||||||
Map<String,Object> map=new HashMap<>();
|
Map<String,Object> map=new HashMap<>();
|
||||||
//根据活动id拿到活动详情以及活动类型(2表)
|
//根据活动id拿到活动详情以及活动类型(2表)
|
||||||
Map map1 = cardUserHitMapper.getCardGameBygameid(gameid);
|
Map map1 = cardGameService.getCardGameBygameid(gameid);
|
||||||
log.debug("cardGame",map1);
|
// log.debug("cardGame",map1);
|
||||||
map.put("cardGame",map1);
|
map.put("cardGame",map1);
|
||||||
//根据活动id拿到活动中奖明细(3表)
|
CardGame cardGame = cardGameService.getCardGameByGameId(gameid);
|
||||||
List<HashMap> hashMapList=cardUserHitMapper.getProductsBygameid(gameid);
|
if(StringUtils.isNotNull(cardGame)&&cardGame.getEndTime().before(new Date())){
|
||||||
map.put("products",hashMapList);
|
//根据活动id拿到活动中奖明细(3表)
|
||||||
log.debug("products",hashMapList);
|
List<HashMap> hashMapList=cardUserHitMapper.getProductsBygameid(gameid);
|
||||||
|
map.put("products",hashMapList);
|
||||||
|
}
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,6 +76,79 @@ public class CardUserHitServiceImpl extends ServiceImpl<CardUserHitMapper, CardU
|
|||||||
return cardUserHitMapper.selectCardUserHitList(listInfoVo);
|
return cardUserHitMapper.selectCardUserHitList(listInfoVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CardProductVo getPrizeDraw(CardUserGameVo cardUserGameVo) {
|
||||||
|
Date now=new Date();
|
||||||
|
boolean b1 = cardUserService.weatherLogin(cardUserGameVo.getUserId());
|
||||||
|
if(!b1){
|
||||||
|
throw new CustomException("用户未登录");
|
||||||
|
}
|
||||||
|
CardGame cardGame = JSON.parseObject((String) redisTemplate.opsForValue().get("cardGame:" + cardUserGameVo.getGameId()),CardGame.class);
|
||||||
|
CardUser cardUser= (CardUser) redisTemplate.opsForValue().get("user_login:"+cardUserGameVo.getUserId());
|
||||||
|
if(StringUtils.isNull(cardGame)||now.before(cardGame.getStartTime())){
|
||||||
|
throw new CustomException("活动未开始");
|
||||||
|
}
|
||||||
|
if(now.after(cardGame.getEndTime())){
|
||||||
|
throw new CustomException("活动已结束");
|
||||||
|
}
|
||||||
|
//判断该用户是否参与过抽奖
|
||||||
|
Boolean b = redisTemplate.hasKey("cardGame_user:" + cardUserGameVo.getGameId() + "_" + cardUserGameVo.getUserId());
|
||||||
|
if(!b){
|
||||||
|
//value:抽奖次数
|
||||||
|
redisTemplate.opsForValue().set("cardGame_user:" + cardUserGameVo.getGameId() + "_" + cardUserGameVo.getUserId(),0,(cardGame.getEndTime().getTime()-now.getTime()), TimeUnit.MILLISECONDS);
|
||||||
|
//value:中奖次数
|
||||||
|
redisTemplate.opsForValue().set("cardGame_user_hit:" + cardUserGameVo.getGameId() + "_" + cardUserGameVo.getUserId(),0,(cardGame.getEndTime().getTime()-now.getTime()), TimeUnit.MILLISECONDS);
|
||||||
|
}
|
||||||
|
int maxEnterCount = (int) redisTemplate.opsForHash().get("cardGame_maxEnterCount:" + cardUserGameVo.getGameId(), cardUser.getLevel());
|
||||||
|
int EnterCount=(int) redisTemplate.opsForValue().get("cardGame_user:" + cardUserGameVo.getGameId() + "_" + cardUserGameVo.getUserId());
|
||||||
|
if(EnterCount>=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()<token/10000){
|
||||||
|
//没中奖,token放回令牌桶
|
||||||
|
redisTemplate.opsForList().leftPush("game_token:"+cardUserGameVo.getGameId(),token);
|
||||||
|
return null;
|
||||||
|
}else {
|
||||||
|
//中奖,中奖记录次数加一
|
||||||
|
redisTemplate.opsForValue().increment("cardGame_user_hit:" + cardUserGameVo.getGameId() + "_" + cardUserGameVo.getUserId(),1);
|
||||||
|
CardProductVo cardProductVo= (CardProductVo) redisTemplate.opsForValue().get("gameId_token:"+cardGame.getId()+"_"+token);
|
||||||
|
//mq写入中奖信息到数据库
|
||||||
|
CardUserHit cardUserHit=new CardUserHit(cardUserGameVo.getGameId(),cardUserGameVo.getUserId(),cardProductVo.getId(),now);
|
||||||
|
String cardUserHitStr=JSONObject.toJSONString(cardUserHit);
|
||||||
|
rabbitTemplate.convertAndSend("winnerRecord",cardUserHitStr);
|
||||||
|
|
||||||
|
return cardProductVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int addCardUserHit(CardUserHit cardUserHit) {
|
||||||
|
return cardUserHitMapper.insert(cardUserHit);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<HashMap> winnerRecord(Integer userId) {
|
||||||
|
return cardUserHitMapper.winnerRecord(userId);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,16 +2,22 @@ package com.ruoyi.project.hit.service.impl;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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.controller.vo.ListCardUserVo;
|
||||||
import com.ruoyi.project.hit.domain.CardUser;
|
import com.ruoyi.project.hit.domain.CardUser;
|
||||||
import com.ruoyi.project.hit.domain.SystemDict;
|
import com.ruoyi.project.hit.domain.SystemDict;
|
||||||
import com.ruoyi.project.hit.service.CardUserService;
|
import com.ruoyi.project.hit.service.CardUserService;
|
||||||
import com.ruoyi.project.hit.mapper.CardUserMapper;
|
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 org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author HP
|
* @author HP
|
||||||
@ -21,6 +27,8 @@ import java.util.List;
|
|||||||
@Service
|
@Service
|
||||||
public class CardUserServiceImpl extends ServiceImpl<CardUserMapper, CardUser>
|
public class CardUserServiceImpl extends ServiceImpl<CardUserMapper, CardUser>
|
||||||
implements CardUserService{
|
implements CardUserService{
|
||||||
|
@Autowired
|
||||||
|
private RedisTemplate redisTemplate;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private CardUserMapper cardUserMapper;
|
private CardUserMapper cardUserMapper;
|
||||||
@ -36,6 +44,30 @@ public class CardUserServiceImpl extends ServiceImpl<CardUserMapper, CardUser>
|
|||||||
public List<HashMap> selectCardUserList(ListCardUserVo listCardUserVo) {
|
public List<HashMap> selectCardUserList(ListCardUserVo listCardUserVo) {
|
||||||
return cardUserMapper.selectCardUserList(listCardUserVo);
|
return cardUserMapper.selectCardUserList(listCardUserVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CardUser login(String userName, String userPass) {
|
||||||
|
LambdaQueryWrapper<CardUser> 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package com.ruoyi.project.system.controller;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
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.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
@ -39,6 +40,8 @@ public class SysLoginController
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TokenService tokenService;
|
private TokenService tokenService;
|
||||||
|
|
||||||
|
private RedisTemplate redisTemplate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录方法
|
* 登录方法
|
||||||
*
|
*
|
||||||
@ -56,6 +59,8 @@ public class SysLoginController
|
|||||||
return ajax;
|
return ajax;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户信息
|
* 获取用户信息
|
||||||
*
|
*
|
||||||
|
@ -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<HashMap> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -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<CardGame> 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
23
src/main/java/com/ruoyi/project/uniapp/mq/Consumer01.java
Normal file
23
src/main/java/com/ruoyi/project/uniapp/mq/Consumer01.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
21
src/main/java/com/ruoyi/project/uniapp/mq/Consumer02.java
Normal file
21
src/main/java/com/ruoyi/project/uniapp/mq/Consumer02.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -78,6 +78,11 @@ spring:
|
|||||||
max-active: 8
|
max-active: 8
|
||||||
# #连接池最大阻塞等待时间(使用负值表示没有限制)
|
# #连接池最大阻塞等待时间(使用负值表示没有限制)
|
||||||
max-wait: -1ms
|
max-wait: -1ms
|
||||||
|
rabbitmq:
|
||||||
|
host: 192.168.157.129
|
||||||
|
password: guest
|
||||||
|
username: guest
|
||||||
|
port: 5672
|
||||||
|
|
||||||
# token配置
|
# token配置
|
||||||
token:
|
token:
|
||||||
@ -85,8 +90,8 @@ token:
|
|||||||
header: Authorization
|
header: Authorization
|
||||||
# 令牌密钥
|
# 令牌密钥
|
||||||
secret: abcdefghijklmnopqrstuvwxyz
|
secret: abcdefghijklmnopqrstuvwxyz
|
||||||
# 令牌有效期(默认30分钟)
|
# 令牌有效期(默认1200分钟)
|
||||||
expireTime: 30
|
expireTime: 1200
|
||||||
|
|
||||||
# MyBatis配置
|
# MyBatis配置
|
||||||
#mybatis:
|
#mybatis:
|
||||||
|
@ -63,5 +63,32 @@
|
|||||||
INNER JOIN system_dict ON card_game.type = system_dict.dict_key and system_dict.dict_type='gametype'
|
INNER JOIN system_dict ON card_game.type = system_dict.dict_key and system_dict.dict_type='gametype'
|
||||||
where card_game.id=#{id}
|
where card_game.id=#{id}
|
||||||
</select>
|
</select>
|
||||||
|
<select id="showAllCardGame" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
id,
|
||||||
|
title,
|
||||||
|
start_time,
|
||||||
|
end_time,
|
||||||
|
CASE
|
||||||
|
WHEN NOW() <`start_time` THEN '未开始'
|
||||||
|
WHEN NOW() BETWEEN `start_time` AND `end_time` THEN '进行中'
|
||||||
|
ELSE '已结束'
|
||||||
|
END AS status
|
||||||
|
FROM
|
||||||
|
`card_game`;
|
||||||
|
</select>
|
||||||
|
<select id="getCardByDate" resultType="com.ruoyi.project.hit.domain.CardGame">
|
||||||
|
SELECT * FROM card_game
|
||||||
|
WHERE status = 0
|
||||||
|
AND start_time > #{now}
|
||||||
|
AND start_time <DATE_ADD(#{now}, INTERVAL 5 MINUTE)
|
||||||
|
</select>
|
||||||
|
<select id="getCardGameBygameid" resultType="java.util.HashMap">
|
||||||
|
SELECT cg.id,cg.title,cg.pic,cg.content,cg.start_time startTime,cg.end_time endTime,sd.dict_value dictValue
|
||||||
|
from card_game cg
|
||||||
|
INNER JOIN system_dict sd
|
||||||
|
on cg.type=sd.dict_key
|
||||||
|
where cg.id=#{gameid} and sd.dict_type='gametype'
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
@ -28,4 +28,22 @@
|
|||||||
<select id="getSumAmountByGameId" resultType="java.lang.Integer">
|
<select id="getSumAmountByGameId" resultType="java.lang.Integer">
|
||||||
SELECT IFNULL(SUM(amount),0) FROM `card_game_product` WHERE gameid=#{gameid}
|
SELECT IFNULL(SUM(amount),0) FROM `card_game_product` WHERE gameid=#{gameid}
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getGameProductList" resultType="com.ruoyi.project.uniapp.controller.vo.CardProductVo">
|
||||||
|
SELECT
|
||||||
|
card_game_product.amount,
|
||||||
|
card_product.id,
|
||||||
|
card_product.pname,
|
||||||
|
card_product.pic,
|
||||||
|
card_product.content,
|
||||||
|
card_product.price,
|
||||||
|
card_product.del_state AS delState
|
||||||
|
FROM
|
||||||
|
card_game_product
|
||||||
|
INNER JOIN
|
||||||
|
card_product
|
||||||
|
ON
|
||||||
|
card_game_product.productid = card_product.id
|
||||||
|
WHERE card_game_product.gameid=#{id}
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
INNER JOIN system_dict ON card_game_rule.levelid = system_dict.dict_key AND system_dict.dict_type='userlevel'
|
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}
|
WHERE card_game_rule.gameid=#{id}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getHitCountSumByGameId" resultType="java.lang.Integer">
|
<select id="getHitCountSumByGameId" resultType="java.lang.Integer">
|
||||||
SELECT IFNULL(SUM(hit_count),0) FROM `card_game_rule` WHERE gameid=#{gameid}
|
SELECT IFNULL(SUM(hit_count),0) FROM `card_game_rule` WHERE gameid=#{gameid}
|
||||||
</select>
|
</select>
|
||||||
|
18
src/main/resources/mybatis/hit/CardGameUserMapper.xml
Normal file
18
src/main/resources/mybatis/hit/CardGameUserMapper.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.ruoyi.project.hit.mapper.CardGameUserMapper">
|
||||||
|
|
||||||
|
<resultMap id="BaseResultMap" type="com.ruoyi.project.hit.domain.CardGameUser">
|
||||||
|
<id property="id" column="id" jdbcType="INTEGER"/>
|
||||||
|
<result property="userid" column="userid" jdbcType="INTEGER"/>
|
||||||
|
<result property="gameid" column="gameid" jdbcType="INTEGER"/>
|
||||||
|
<result property="createtime" column="createtime" jdbcType="TIMESTAMP"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<sql id="Base_Column_List">
|
||||||
|
id,userid,gameid,
|
||||||
|
createtime
|
||||||
|
</sql>
|
||||||
|
</mapper>
|
@ -39,13 +39,7 @@
|
|||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
<select id="getCardGameBygameid" resultType="java.util.Map">
|
|
||||||
SELECT cg.id,cg.title,cg.pic,cg.content,cg.start_time startTime,cg.end_time endTime,sd.dict_value dictValue
|
|
||||||
from card_game cg
|
|
||||||
INNER JOIN system_dict sd
|
|
||||||
on cg.type=sd.dict_key
|
|
||||||
where cg.id=#{gameid} and sd.dict_type='gametype'
|
|
||||||
</select>
|
|
||||||
<select id="getProductsBygameid" resultType="java.util.HashMap">
|
<select id="getProductsBygameid" resultType="java.util.HashMap">
|
||||||
SELECT cp.id,cp.pname,cgp.amount,IFNULL(cn,0) hitCount
|
SELECT cp.id,cp.pname,cgp.amount,IFNULL(cn,0) hitCount
|
||||||
FROM card_game_product cgp
|
FROM card_game_product cgp
|
||||||
@ -97,4 +91,22 @@
|
|||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="winnerRecord" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
card_product.pname,
|
||||||
|
card_user_hit.hittime,
|
||||||
|
card_game.title
|
||||||
|
FROM
|
||||||
|
card_user_hit
|
||||||
|
INNER JOIN
|
||||||
|
card_game
|
||||||
|
ON
|
||||||
|
card_user_hit.gameid = card_game.id
|
||||||
|
INNER JOIN
|
||||||
|
card_product
|
||||||
|
ON
|
||||||
|
card_user_hit.productid = card_product.id
|
||||||
|
WHERE
|
||||||
|
card_user_hit.userid = #{userId}
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
|
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
|
||||||
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
|
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
|
||||||
<result property="delState" column="del_state" jdbcType="INTEGER"/>
|
<result property="delState" column="del_state" jdbcType="INTEGER"/>
|
||||||
<result property="remark" column="remark" jdbcType="VARCHAR"/>
|
<!-- <result property="remark" column="remark" jdbcType="VARCHAR"/>-->
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
@ -26,6 +26,7 @@
|
|||||||
phone,level,create_time,
|
phone,level,create_time,
|
||||||
update_time,del_state,remark
|
update_time,del_state,remark
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="selectCardUserList" resultType="java.util.HashMap">
|
<select id="selectCardUserList" resultType="java.util.HashMap">
|
||||||
SELECT u.id,u.user_name userName,u.pic,u.realname,u.id_card idCard,u.phone,u.create_time createTime,u.update_time updateTime,d.dict_value dictValue
|
SELECT u.id,u.user_name userName,u.pic,u.realname,u.id_card idCard,u.phone,u.create_time createTime,u.update_time updateTime,d.dict_value dictValue
|
||||||
FROM `card_user` u,`system_dict` d
|
FROM `card_user` u,`system_dict` d
|
||||||
|
Loading…
Reference in New Issue
Block a user