https://gitee.com/xiao-ou188/mybet/tree/master/src/main
项目码云地址
package com.bet.controller;
import com.bet.mapper.BetMapper;
import com.bet.entities.Bet;
import com.bet.entities.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;
import org.springframework.stereotype.Controller;
import org.thymeleaf.util.StringUtils;
@Controller
public class BetController {
@Autowired
BetMapper betMapper;
//登录
@GetMapping("/login")
public String login(HttpSession session, String username, String password, Map map) {
User user = betMapper.UserByUsername(username);
if (user == null) {
map.put("msg", "此用户名称不存在");
return "main/login";
} else if (!user.getPassword().equals(password)) {
map.put("msg", "密码错误");
return "main/login";
}
session.setAttribute("loginUser", user);
//root后台管理员
if ("root".equals(username)) {
return "redirect:/manage";
}
//重定向 redirect:可以重定向到任意一个请求中(包括其他项目),地址栏改变
return "redirect:/bets";
}
//注册
@GetMapping("/register")
public String register(HttpSession session, String username, String password, String rePasssword, Map map) {
// if (!password.equals(rePasssword)) {
// map.put("msg", "注册密码必须与确认密码一致");
// return "main/register";
// }
String regex = "^\\w{1,10}$";
if (!username.matches(regex)) {
map.put("msg", "用户名必须是1-10个字符,包括字母数字下划线");
return "main/register";
}
if (!password.matches(regex)) {
map.put("msg", "密码必须是1-10个字符,包括字母数字下划线");
return "main/register";
}
User user = betMapper.UserByUsername(username);
if (user != null) {
map.put("msg", "用户名已存在");
return "main/register";
}
User user1 = new User();
user1.setUsername(username);
user1.setPassword(password);
//注册体验金为root用户的总充值
User userRoot = betMapper.UserByUsername("root");
BigDecimal totalRecharge = userRoot.getTotalRecharge();
user1.setBalance(totalRecharge);
BigDecimal zero = new BigDecimal("0.00");
user1.setTotalBet(zero);
user1.setTotalRecharge(zero);
user1.setTotalDeposit(zero);
betMapper.insertUser(user1);
Bet bet = new Bet();
bet.setUsername(username);
//提现门槛是用户的总投注,算法为注册体验金*(100%/抽水比例%)
//注册体验金为root的总充值,抽水比例为root的余额
BigDecimal totalBet = userRoot.getTotalRecharge().multiply(new BigDecimal(1).divide(userRoot.getBalance())).setScale(0, BigDecimal.ROUND_HALF_UP);
bet.setRecord("注册就送体验金" + totalRecharge + "元,充值提现申请请加客服微信号:xxx,提现限制为总投注达到" + totalBet + "元,祝您投注愉快,财源滚滚!");
bet.setMoney(totalRecharge);
bet.setAmount(totalRecharge);
bet.setType(3);
betMapper.insertBet(bet);
//注册成功直接登录
session.setAttribute("loginUser", user1);
//重定向 redirect:可以重定向到任意一个请求中(包括其他项目),地址栏改变
return "redirect:/bets";
}
//退出登录
@GetMapping("/logout")
public String logout(HttpSession session) {
//1. 清空session中的用户信息
session.removeAttribute("loginUser");
//2. 再将session进行注销
session.invalidate();
//3. 返回登录页面
return "main/login";
}
//异步检测用户名是否存在
@ResponseBody
@GetMapping("/checkUsername/{username}")
public Boolean checkUsername(@PathVariable("username") String username) {
User user = betMapper.UserByUsername(username);
if (user != null) {
//用户已存在
return true;
}
return false;
}
//异步检测旧密码是否正确
@ResponseBody
@GetMapping("/checkPwd/{oldPwd}")
public Boolean checkPwd(HttpSession session, @PathVariable("oldPwd") String oldPwd) {
//1.从Session中获取当前登录用户的User对象
User user = (User) session.getAttribute("loginUser");
if (user.getPassword().equals(oldPwd)) {
//输入的旧密码正确
return true;
}
return false;
}
//修改密码
@PostMapping("/updatePwd")
public String updatePwd(HttpSession session, String password) {
//1.从Session中获取当前登录用户信息HttpSession session
User user = (User) session.getAttribute("loginUser");
//2. 更新密码
user.setPassword(password);
//3. 提交到数据库
betMapper.updateUser(user);
//4. 清空session中的用户信息
session.removeAttribute("loginUser");
//5. 再将session进行注销
session.invalidate();
//6. 注销重新登录
return "main/login";
}
//前往注册页面
@GetMapping("/toRegister")
public String toRegister() {
return "main/register";
}
//前往修改密码页面
@GetMapping("/toUpdatePwd")
public String toUpdatePwd() {
return "main/password";
}
//前往充值申请页面
@GetMapping("/toRecharge")
public String toRecharge() {
return "main/recharge";
}
//充值页面返回投注页面
@GetMapping("/toBets")
public String toBets() {
return "redirect:/bets";
}
//刷新投注页面
@GetMapping("/bets")
public String list(HttpSession session, Map map) {
User userSession = (User) session.getAttribute("loginUser");
String username = userSession.getUsername();
User user = betMapper.UserByUsername(username);
Bet bet = new Bet();
bet.setUsername(username);
List betList = betMapper.BetByUsername(bet);
if (betList != null && betList.size() > 0) {
map.put("bets", betList);
}
session.setAttribute("loginUser", user);
return "main/bets";
}
// 充值申请
@PostMapping("/recharge")
public String Recharge(HttpSession session, String money, String type, Map map) {
if (StringUtils.isEmpty(money)) {
map.put("msg", "请输入充值金额");
return "main/recharge";
}
if (new BigDecimal(money).compareTo(new BigDecimal(0)) < 1) {
map.put("msg", "请输入投注金额为正整数");
return "main/recharge";
}
User userSession = (User) session.getAttribute("loginUser");
String username = userSession.getUsername();
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String startTime = formatter.format(date) + " 00:00:00";
String endTime = formatter.format(date) + " 23:59:59";
//统计今日或提现充值次数
Bet bet = new Bet();
bet.setUsername(username);
bet.setStartTime(startTime);
bet.setEndTime(endTime);
int c = betMapper.rechargeCount(bet);
if (c != 0) {
map.put("msg", "申请提交失败,每天最多发起充值或提现申请一次,请联系客服处理后再次申请");
return "main/recharge";
}
bet.setUsername(username);
if ("1".equals(type)) {
bet.setRecord("充值申请:" + money + "元,请及时联系客服充值");
bet.setType(1);
} else if ("2".equals(type)) {
//提现门槛是用户的总投注,算法为注册体验金*(100%/抽水比例%)
//注册体验金为root的总充值,抽水比例为root的余额
User userRoot = betMapper.UserByUsername("root");
User user = betMapper.UserByUsername(username);
if (new BigDecimal(money).compareTo(user.getBalance()) > 0) {
map.put("msg", "提现申请提交失败,提现金额比您的余额要多哦");
return "main/recharge";
}
BigDecimal totalBet = userRoot.getTotalRecharge().multiply(new BigDecimal(1).divide(userRoot.getBalance())).setScale(0, BigDecimal.ROUND_HALF_UP);
if (totalBet.compareTo(user.getTotalRecharge()) > 0) {
map.put("msg", "提现申请提交失败,投注金额总计需要达到" + totalBet + "元才可提现");
return "main/recharge";
}
bet.setRecord("提现申请:" + money + "元,请及时联系客服提现");
bet.setType(2);
}
User user = betMapper.UserByUsername(username);
bet.setMoney(new BigDecimal(money));
bet.setAmount(user.getBalance());
betMapper.insertBet(bet);
if ("1".equals(type)) {
map.put("msg", "充值申请提交成功,每天只可充值或提现申请一次");
} else {
map.put("msg", "提现申请提交成功,每天只可充值或提现申请一次");
}
return "main/recharge";
}
// 投注
@PostMapping("/bet")
@Transactional(rollbackFor = Exception.class)
public String Bet(HttpSession session, Bet bet, Map map) {
User userSession = (User) session.getAttribute("loginUser");
String username = userSession.getUsername();
bet.setUsername(username);
if (bet.getMoney() == null) {
map.put("msg", "请输入投注金额");
List betList = betMapper.BetByUsername(bet);
if (betList != null && betList.size() > 0) {
map.put("bets", betList);
}
return "main/bets";
}
if (bet.getMoney().compareTo(new BigDecimal(0)) < 1) {
map.put("msg", "请输入投注金额为正整数");
List betList = betMapper.BetByUsername(bet);
if (betList != null && betList.size() > 0) {
map.put("bets", betList);
}
return "main/bets";
}
//检测余额还够不够投注金额
User user = betMapper.UserByUsername(username);
if (bet.getMoney().compareTo(user.getBalance()) > 0) {
map.put("msg", "账户余额不足,请充值");
List betList = betMapper.BetByUsername(bet);
if (betList != null && betList.size() > 0) {
map.put("bets", betList);
}
return "main/bets";
}
//抽水比例是root用户的余额,可以动态设置
User userRoot = betMapper.UserByUsername("root");
BigDecimal chouShui = userRoot.getBalance();
//抽水百分数
BigDecimal percent = chouShui.multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP);
//如中奖,增加的金额
BigDecimal a = bet.getMoney().multiply(new BigDecimal(1).subtract(chouShui)).setScale(2, BigDecimal.ROUND_HALF_UP);
//抽水金额
BigDecimal b = bet.getMoney().multiply(chouShui).setScale(2, BigDecimal.ROUND_HALF_UP);
//随机生成0和1
int i = ThreadLocalRandom.current().nextInt(2);
if ("big".equals(bet.getRecord())) {
if (i == 1) {
bet.setRecord("投注大开奖大," + "投注" + bet.getMoney() + "元," + "余额增加" + a + "元," +
"抽水比例" + percent + "%,抽水" + b + "元");
user.setBalance(user.getBalance().add(a));
} else {
bet.setRecord("投注大开奖小," + "余额减少" + bet.getMoney() + "元");
user.setBalance(user.getBalance().subtract(bet.getMoney()));
}
} else if ("small".equals(bet.getRecord())) {
if (i == 0) {
bet.setRecord("投注小开奖小," + "投注" + bet.getMoney() + "元," + "余额增加" + a + "元," +
"抽水比例" + percent + "%,抽水" + b + "元");
user.setBalance(user.getBalance().add(a));
} else {
bet.setRecord("投注小开奖大,余额减少" + bet.getMoney() + "元");
user.setBalance(user.getBalance().subtract(bet.getMoney()));
}
}
user.setTotalBet(user.getTotalBet().add(bet.getMoney()));
bet.setUsername(username);
bet.setMoney(bet.getMoney());
bet.setAmount(user.getBalance());
bet.setType(0);
betMapper.insertBet(bet);
betMapper.updateUser(user);
session.setAttribute("loginUser", user);
return "redirect:/bets";
}
//倍投demo
public static void main(String[] args) {
int a = 30;
int b = 10;
for(int t = 0;t<100;t++) {
int i = ThreadLocalRandom.current().nextInt(2);
if (i == 0) {
a = a + b;
b=10;
} else {
a = a - b;
b=b*2;
}
if(a<0){
System.out.println(t);
break;
}
}
System.out.println(a);
}
}
分割线--------------------------------------------------------------------------
package com.bet.controller;
import com.bet.entities.Bet;
import com.bet.entities.User;
import com.bet.mapper.BetMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Controller
public class ManageController {
@Autowired
BetMapper betMapper;
//刷新后台页面
@GetMapping("/manage")
public String manage(Map map) {
//默认进来就显示当天申请记录
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String startTime = formatter.format(date) + " 00:00:00";
String endTime = formatter.format(date) + " 23:59:59";
Bet bet = new Bet();
bet.setStartTime(startTime);
bet.setEndTime(endTime);
bet.setType1("1 or b.`type` = 2 or b.`type` = 3)");
List manageList = betMapper.BetByManage(bet);
if (manageList != null && manageList.size() > 0) {
map.put("manages", manageList);
}
return "main/manage";
}
//后台条件查询
@GetMapping("/searchManage")
public String searchManage(Map map,Bet bet) {
if(!StringUtils.isEmpty(bet.getTime())) {
bet.setStartTime(bet.getTime() + " 00:00:00");
bet.setEndTime(bet.getTime() + " 23:59:59");
}
List manageList = betMapper.BetByManage(bet);
if (manageList != null && manageList.size() > 0) {
map.put("manages", manageList);
}
return "main/manage";
}
//后台前往修改抽水比例页面
@GetMapping("/toChoushui")
public String toChoushui() {
return "main/choushui";
}
//抽水比例页面返回後台
@GetMapping("/toManage")
public String toManage() {
return "redirect:/manage";
}
//修改抽水比例或注册体验金
@PostMapping("/choushui")
public String choushui(String balance, String totalRecharge, Map map) {
User user = new User();
String regex = "\\b0(\\.\\d{1,2})?\\b";
if (!StringUtils.isEmpty(balance) && !balance.matches(regex)) {
map.put("msg", "请输入0-1之间的两位小数");
return "main/choushui";
}
if (!StringUtils.isEmpty(totalRecharge) && new BigDecimal(totalRecharge).compareTo(new BigDecimal(0)) < 1) {
map.put("msg", "请输入正整数");
return "main/choushui";
}
if(!StringUtils.isEmpty(balance)) {
user.setBalance(new BigDecimal(balance));
}
if(!StringUtils.isEmpty(totalRecharge)) {
user.setTotalRecharge(new BigDecimal(totalRecharge));
}
user.setUsername("root");
betMapper.updateUser(user);
map.put("msg", "修改成功");
return "main/choushui";
}
//同意申請
@ResponseBody
@PutMapping("/apply/{id}")
@Transactional(rollbackFor = Exception.class)
public String manage(@PathVariable("id") Integer id) {
//给用户充值
Bet bet = betMapper.BetById(id);
User user = betMapper.UserByUsername(bet.getUsername());
if(bet.getType() == 1){
user.setBalance(user.getBalance().add(bet.getMoney()));
user.setTotalRecharge(user.getTotalRecharge().add(bet.getMoney()));
}
//给用户提现
if(bet.getType() == 2){
user.setBalance(user.getBalance().subtract(bet.getMoney()));
user.setTotalDeposit(user.getTotalDeposit().add(bet.getMoney()));
}
//修改用户余额,充值总计
betMapper.updateUser(user);
//修改申请记录类型
betMapper.updateBet(id);
return "redirect:/manage";
}
}