我的投注和我的后台

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";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值