list.html
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-sm6 layui-col-md12">
<div class="layui-card">
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
<ul class="layui-tab-title">
<li class="layui-this">我的投注列表</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div class="layui-form" lay-filter="app-content-list">
<div class="layui-form-item">
<div class="layui-inline">
<button class="layui-btn layuiadmin-btn-list" data-type="recharge">
充值
</button>
</div>
<div class="layui-inline">
<button class="layui-btn layuiadmin-btn-list" data-type="bet">
投注
</button>
</div>
<div class="layui-input-inline" style="width: 500px;">
<div class="layui-btn-group" id="statisticsBtnGroup">
<button class="layui-btn layui-btn-normal layui-btn-lg">我的余额<span
class="layui-badge-dot layui-bg-orange">
</span><span id="money" class="layui-badge layui-bg-gray"></span>
</button>
</div>
</div>
</div>
</div>
<table id="LAY-data-list" lay-filter="LAY-data-list" id="datalist"></table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script id="time" type="text/html">
{
{#
if (d.time != null){
return datetimeFormat_1(d.time);
}
}}
</script>
<script>
layui.use(['table', 'form'], function () {
var $ = layui.$,
table = layui.table,
setter = layui.setter,
miniPage = layui.miniPage,
form = layui.form;
form.render();
var token = localStorage.getItem("super_token");
table.set({
headers: { //通过 request 头传递
token: token
}
});
table.render({
elem: '#LAY-data-list',
id: "datalist",
url: setter.domain + '/my-bet/list',
even: true,
cols: [[{
title: '充值或投注记录',
field: 'record',
align: 'center'
}, {
title: '当次投注后余额',
field: 'aftermoney',
align: 'center'
}, {
title: '操作时间',
field: 'time',
align: 'center',
templet: '#time'
}]]
, page: true
, limit: 10
, limits: [10, 20, 50]
, text: {
none: '暂未查询任何数据'
}
});
getStatistic();
function getStatistic() {
$.ajax({
type: "GET",
url: setter.domain + '/my-bet/money',
contentType: "application/json",
data: {},
dataType: "json",
headers: {
"token": token
},
success: function (res) {
var money = res.money;
$("#money").html(money);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
layer.msg("获取数据有异常,请检查");
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
}
});
}
var active = {
recharge: function (othis) {
layer.open({
title: '充值',
area: ['700px', '180px'],
id: 'LAY-popup-content-add',
type: 1,
shade: 0.2,
maxmin: false,
shadeClose: false,
content: miniPage.getHrefContent('views/my-bet/recharge.html'),
success: function (layero, index) {
}
});
},
bet: function (othis) {
layer.open({
title: '投注',
area: ['700px', '230px'],
id: 'LAY-popup-content-add',
type: 1,
shade: 0.2,
maxmin: false,
shadeClose: false,
content: miniPage.getHrefContent('views/my-bet/bet.html'),
success: function (layero, index) {
}
});
}
}
$('.layui-btn.layuiadmin-btn-list').on('click', function () {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
});
</script>
bet.html:
<div class="layui-fluid">
<form class="layui-form layui-form-pane">
<div class="layui-form-item">
<label class="layui-form-label">投注金额</label>
<div class="layui-input-inline">
<input type="text" id="money" name="money" lay-verify="required|money" placeholder=""
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">投注</label>
<div class="layui-input-inline">
<input type="radio" name="record" value="big" title="大" checked>
<input type="radio" name="record" value="small" title="小">
</div>
</div>
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="layuiadmin-data-form-submit">投注</button>
</div>
</form>
</div>
<script>
layui.use(['form', 'upload'], function () {
var $ = layui.$,
setter = layui.setter,
table = layui.table,
form = layui.form;
//自定义验证规则
form.verify({
money: [
/^[1-9]\d*$/
, '投注金额必须是正整数'
]
});
form.render();
form.on('submit(layuiadmin-data-form-submit)', function (data) {
const reqObj = JSON.stringify(data.field);
var access_token = localStorage.getItem("super_token");
$.ajax({
type: "POST",
url: setter.domain + '/my-bet/bet',
contentType: "application/json",
data: reqObj,
dataType: "json",
headers: {
"token": access_token
},
success: function (res) {
var money = res.data;
$("#money").html(money);
if (res.code == 0) {
layer.msg('余额不足,请充值', {icon: 7, time: 3000});
layer.closeAll("page");
} else if (res.code == 1) {
layer.msg(res.msg, {icon: 1, time: 3000});
layer.closeAll("page");
table.reload('datalist')
} else if (res.code == 2) {
layer.msg(res.msg, {icon: 2, time: 3000});
layer.closeAll("page");
table.reload('datalist')
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
layer.msg(XMLHttpRequest.responseJSON.err_msg);
console.log(textStatus);
console.log(errorThrown);
}
});
return false;
});
});
</script>
recharge.html
<div class="layui-fluid">
<form class="layui-form layui-form-pane">
<div class="layui-form-item">
<label class="layui-form-label">充值金额</label>
<div class="layui-input-inline">
<input type="text" id="money" name="money" lay-verify="required|money" placeholder=""
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="layuiadmin-data-form-submit">提交充值申请</button>
</div>
</form>
</div>
<script>
layui.use(['form', 'upload'], function () {
var $ = layui.$,
setter = layui.setter,
table = layui.table,
form = layui.form;
//自定义验证规则
form.verify({
money: [
/^[1-9]\d*$/
, '充值金额必须是正整数'
]
});
form.render();
form.on('submit(layuiadmin-data-form-submit)', function (data) {
const reqObj = JSON.stringify(data.field);
var access_token = localStorage.getItem("super_token");
$.ajax({
type: "POST",
url: setter.domain + '/my-bet/recharge',
contentType: "application/json",
data: reqObj,
dataType: "json",
headers: {
"token": access_token
},
success: function (res) {
if (res.code == 1) {
layer.msg('每天只可以提交充值申请一次', {icon: 7, time: 3000});
layer.closeAll("page");
} else {
layer.msg("充值申请提交成功");
layer.closeAll("page");
table.reload('datalist')
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
layer.msg(XMLHttpRequest.responseJSON.err_msg);
console.log(textStatus);
console.log(errorThrown);
}
});
return false;
});
});
</script>
MybetController
package com.chongxuan.web.controller;
import com.chongxuan.web.common.dto.bo.PageBO;
import com.chongxuan.web.common.entity.MyGame;
import com.chongxuan.web.common.entity.MyUser;
import com.chongxuan.web.common.entity.RspBase;
import com.chongxuan.web.common.service.IMyGameService;
import com.chongxuan.web.common.service.IMyUserService;
import com.chongxuan.web.common.util.UserDataUtil;
import com.chongxuan.web.config.SessionValid;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.concurrent.ThreadLocalRandom;
@Log4j2
@RestController
@RequestMapping("/my-bet")
public class MyBetController {
@Autowired
private IMyGameService iMyGameService;
@Autowired
private IMyUserService iMyUserService;
@Autowired
private UserDataUtil userDataUtil;
/**
* 我的投注列表
*
* @return
*/
@RequestMapping(value = "/list", method = RequestMethod.GET)
@SessionValid
public PageBO<MyGame> findList(HttpServletRequest request, MyGame dto) {
String username = userDataUtil.getAdminName(request);
dto.setUsername(username);
return iMyGameService.findPage(dto);
}
/**
* 我的余额
*
* @return
*/
@RequestMapping(value = "/money", method = RequestMethod.GET)
@SessionValid
public MyUser money(HttpServletRequest request) {
String username = userDataUtil.getAdminName(request);
return iMyUserService.selectByUsername(username);
}
/**
* 充值申请
*
* @return
*/
@RequestMapping(value = "/recharge", method = RequestMethod.POST)
@SessionValid
public RspBase Recharge(HttpServletRequest request,@RequestBody MyGame dto) {
RspBase rspBase = new RspBase();
String username = userDataUtil.getAdminName(request);
Date date=new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String a =formatter.format(date) + " 00:00:00";
String b =formatter.format(date) + " 23:59:59";
String c = "充值申请";
int d = iMyGameService.rechargecount(username,a,b,c);
if(d != 0){
rspBase.setCode(1);
return rspBase;
}
dto.setUsername(username);
dto.setTime(new Date());
dto.setRecord("充值申请:" + dto.getMoney().toString() + "元");
MyUser myUser = iMyUserService.selectByUsername(username);
dto.setAftermoney(myUser.getMoney());
iMyGameService.insertmygame(dto);
return rspBase;
}
/**
* 投注
*
* @return
*/
@RequestMapping(value = "/bet", method = RequestMethod.POST)
@SessionValid
public RspBase Bet(HttpServletRequest request,@RequestBody MyGame dto) {
RspBase rspBase = new RspBase();
String username = userDataUtil.getAdminName(request);
MyUser myUser = iMyUserService.selectByUsername(username);
Integer money = myUser.getMoney();
rspBase.setData(money);
if(money < dto.getMoney()){
rspBase.setCode(0);
return rspBase;
}
//随机生成0和1
int i = ThreadLocalRandom.current().nextInt(2);
if ("big".equals(dto.getRecord())) {
if (i == 1) {
dto.setRecord("投注中奖,账户余额增加" + dto.getMoney().toString() + "元");
money = money + dto.getMoney();
rspBase.setCode(1);
rspBase.setMsg("开奖是大,账户余额增加" + dto.getMoney().toString() + "元");
} else {
dto.setRecord("投注未中奖,账户余额减少" + dto.getMoney().toString() + "元");
money = money - dto.getMoney();
rspBase.setCode(2);
rspBase.setMsg("开奖是小,账户余额减小" + dto.getMoney().toString() + "元");
}
} else if ("small".equals(dto.getRecord())) {
if (i == 0) {
dto.setRecord("投注中奖,账户余额增加" + dto.getMoney().toString() + "元");
money = money + dto.getMoney();
rspBase.setCode(1);
rspBase.setMsg("开奖是小,账户余额增加" + dto.getMoney().toString() + "元");
} else {
dto.setRecord("投注未中奖,账户余额减少" + dto.getMoney().toString() + "元");
money = money - dto.getMoney();
rspBase.setCode(2);
rspBase.setMsg("开奖是大,账户余额减小" + dto.getMoney().toString() + "元");
}
}
dto.setUsername(username);
dto.setTime(new Date());
dto.setAftermoney(money);
iMyGameService.insertmygame(dto);
myUser.setMoney(money);
iMyUserService.updateByUsername(myUser);
rspBase.setData(money);
return rspBase;
}
}
大小随机数重复21亿次(int类型最大数为21亿多),3次测试
int i;
int b=0;
for(i=0;i<2100000000;i++) {
int a = ThreadLocalRandom.current().nextInt(2);
if(a == 0){
b=b+1;
}
}
System.out.println(b);
}
所得结果为1049956709,1049994438,1050035666
基本说明该大小算法完全公平。我赚的只是抽水钱。