业务分析
签到需要加金币(虚拟币),需要展示金币的流水
金币要加在用户字段
金币流水要给钱包表添加信息
签到要判断时间是否会重复签到
开干
这是存储金币的数据库表,detail是签到或者订单给用户加了或减了多少金币
编写钱包的签到接口
@Service
public class WalletServiceImpl extends ServiceImpl<WalletMapper, Wallet> implements WalletService {
@Autowired
private WalletMapper mapper;
@Override
public boolean signIn(Integer userId) {
QueryWrapper<Wallet> wrapper = new QueryWrapper<Wallet>().eq("user_id",userId).eq("order_id",0).orderByDesc("time").last("limit 1");
Wallet one = getOne(wrapper);
if (one == null || !TimeUtil.isNow(one.getTime())){
passSignIn(userId);
return true;
}else {
return false;
}
}
private void passSignIn(Integer userId){
Wallet wallet = new Wallet();
wallet.setUserId(userId);
wallet.setOrderId(0);
wallet.setTime(new Date());
wallet.setDetail(REWARD);
save(wallet);
}
}
签到业务的实现
public class TimeUtil {
// 默认的年月日的格式. yyyy-MM-dd
public static final String PATTEN_DEFAULT_YMD = "yyyy-MM-dd";
/**
* 判断日期是不是今天
* @param date
* @return 是返回true,不是返回false
*/
public static boolean isNow(Date date) {
// 当前时间
Date now = new Date();
SimpleDateFormat sf = new SimpleDateFormat(PATTEN_DEFAULT_YMD);
//获取今天的日期
String nowDay = sf.format(now);
//对比的时间
String day = sf.format(date);
return nowDay.equals(day);
}
}
时间判断工具类
在UserService封装一下
@Override
public String userSign(HttpServletRequest request) {
Integer id = Integer.valueOf(TokenUtil.getUserId(request));
if (walletService.signIn(id)){
User user = getById(id);
user.setWallet(user.getWallet() + REWARD);
updateById(user);
return "签到成功";
}else {
return "签到失败(今日内重复签到)";
}
}
接口层
@Controller
public class UserController {
@Autowired
private UserService service;
@Autowired
private WalletService walletService;
@RequestMapping(value = "/user/sign_in",method = RequestMethod.GET)
@ResponseBody
public CommonResult<String> userSignIn(HttpServletRequest request){
String msg;
return ( msg = service.userSign(request) ).contains("成功") ? CommonResult.success(null,msg) : CommonResult.failed(msg);
}
测试签到
查询签到流水
查询金币流水
@Override
public List<WalletVO> userSignList(HttpServletRequest request) {
Integer userId = Integer.valueOf(TokenUtil.getUserId(request));
QueryWrapper<Wallet> wrapper = new QueryWrapper<Wallet>().eq("user_id",userId).orderByDesc("time");
List<Wallet> list = list(wrapper);
List<WalletVO> vos = new LinkedList<>();
for (Wallet wallet : list) {
WalletVO vo = new WalletVO();
BeanUtils.copyProperties(wallet,vo);
vos.add(vo);
}
return vos;
}
接口
@RequestMapping(value = "/user/wallet/list", method = RequestMethod.GET)
@ResponseBody
public CommonResult<List<WalletVO>> userSignInList(HttpServletRequest request){
return CommonResult.success(walletService.userSignList(request));
}