案例:
http://8.137.156.195:8001/room/chatroom_mobile.aspx
http://8.137.156.195:8001/room/gome.aspx?un=朵朵8&sc=BKoQJsWs4TY=
代码文件夹:https://desktop.qkongtao.cn/#s/_Vo7Oh4w
后台admin账号密码:
账号:251468038
密码:a251468038
# 聊天室逻辑
1. 每次拉取最近20条消息,相当于分页,第一页
2. 点击加载更多拉取历史记录,第二页,第三页。。。
3. 实时消息采取websoket建立连接,订阅接收消息的接口
4. 发送消息的接口,发送消息后,服务的会通过websocket推送实时消息
5. 开奖设定
6. 用户列表,注册后需要激活才可以激活
7. 充值功能,扣费按钮
60个数字,五个球、和值、龙虎(1球小于5球是虎); 早上七点到晚上11点55,1-30为小,31到60为大;表格:数值、大小、单双、
开奖设定
用户列表:充值按钮,扣费按钮,禁用启用(用来控制H5那边注册后的审核通过)
# 建表:
1. 消息表 chat_message
```
ID 自增id
uid 用户ID
content 消息内容
username 用户账号
nickname 用户昵称
createtime 创建日期
updatetime 更新时间
```
```
// 登入消息
public static final String ENTER = "ENTER";
// 登出消息
public static final String QUIT = "QUIT";
// 聊天消息
public static final String SPEAK = "SPEAK";
// 下注消息
public static final String XP0001 = "XP0001";
// 封盘前提示
public static final String XP0002 = "XP0002";
// 封盘提示
public static final String XP0003 = "XP0003";
// 开奖消息
public static final String XP0004 = "XP0004";
// 撤单消息
public static final String XP0005 = "XP0005";
private String type;//消息类型
private String username; //发送人
private String msg; //发送消息
private int onlineCount; //在线用户数
```
消息内容格式:
[{球号、金额、属性},{球号、金额、属性}]
{[{球号、金额、属性},{球号、金额、属性}],用户名,余额,期数}
websocket消息总格式:
{消息类型,消息内容,发送人,在线人数}
注:主要解析消息内容
消息类型:下注消息,封盘前提示,封盘提示,开奖消息,撤单消息,登入消息,登出消息,聊天消息
下注消息:XP0001
格式
{
[
{球号、金额、属性},{球号、金额、属性}
],
用户名,
余额,
期数
}
封盘前提示:XP0002
格式
{}
封盘提示:XP0003
格式
{
{[{球号、金额、属性},{球号、金额、属性}],用户名,余额,期数},
{[{球号、金额、属性},{球号、金额、属性}],用户名,余额,期数}
}
开奖消息:XP0004
格式
{
期数,
五个球号,
[
{用户名,盈亏,余额},
{用户名,盈亏,余额},
],
}
撤单消息:XP0005
格式
{
[
{球号、金额、属性},{球号、金额、属性}
],
用户名,
余额,
期数
}
2. 用户表
```
@ApiModelProperty(value = "用户id")
@ApiModelProperty(value = "ID", hidden = true)
private Long id;
@ApiModelProperty(value = "用户组织")
private Org org;
@NotBlank
@Column(unique = true)
@ApiModelProperty(value = "用户名称")
private String username;
@NotBlank
@ApiModelProperty(value = "用户昵称")
private String nickName;
@Email
@ApiModelProperty(value = "邮箱")
@Column(name = "email")
private String email;
@ApiModelProperty(value = "电话号码")
private String phone;
@ApiModelProperty(value = "用户性别")
private String gender;
@ApiModelProperty(value = "头像真实名称",hidden = true)
private String avatarName;
@ApiModelProperty(value = "头像存储的路径", hidden = true)
private String avatarPath;
@ApiModelProperty(value = "密码")
private String password;
@NotNull
@ApiModelProperty(value = "是否启用")
private Boolean enabled;
@ApiModelProperty(value = "是否为admin账号", hidden = true)
private Boolean isAdmin = false;
@Column(name = "pwd_reset_time")
@ApiModelProperty(value = "最后修改密码的时间", hidden = true)
private Date pwdResetTime;
```
# 接口文档
后台链接:http://123.57.36.51:8090
1. 用户注册
http://localhost:8090/auth/wregister

```
{
"password": "123456(需要加密,跟登录加密一样)",
"username": "Nick111",
"uuid": "d4c1b65c-99ef-497d-bec0-fe829f551d3d",
"email": "aaa@qq.com"
}
```
2. 用户登录(不需要验证码)
http://localhost:8090/auth/mlogin

```
{
"password": "123456(需要加密,跟登录加密一样)",
"username": "Nick111"
}
```
3. 用户查询(需要登录)
http://localhost:8090/api/users

4. 修改用户状态
http://localhost:8090/api/users
PUT请求
enabled:true和false

5. 发送消息
http://localhost:8090/api/chatMessage/send

```
{
"content": "你好你好"
}
```
6. 查询消息
http://123.57.36.51:8090/api/chatMessage/query?page=0&size=20&sort=createtime,desc
tip: 查询第一页,每页20条数据,使用createtime倒序查询

7. 查询配置
http://123.57.36.51:8090/api/ticketConfig/query

8. 修改配置
http://localhost:8090/api/ticketConfig/save
```
{
"id": 1,
"lg": 2.00,
"sm": 5.00,
"odd": 1.00,
"even": 1.00,
"lg_odd": 1.00,
"sm_odd": 1.00,
"lg_even": 1.00,
"sm_even": 1.00,
"lg_last": 1.00,
"sm_last": 1.00,
"lh": 1.00
}
```

9. 开盘和闭盘
查询,在查询管理员的数据里
http://localhost:8090/api/users
修改,和用户激活的修改接口一致,修改enabledChat参数
http://localhost:8090/api/users/center
true 启用;false 关闭
只有管理员能修改,且id必须传1,以管理员下面的enabledChat为标准
```
{
"id": 1,
"enabledChat": false
}
```

10. 下单接口案例
```
http://localhost:8090/api/chatMessage/send
{
"content": "{'msg':'[{\"tid\":\"1\",\"money\":\"20\",\"type\":\"sm\",\"ticketid\":\"20250312121\"},{\"tid\":\"3\",\"money\":\"50\",\"type\":\"lg\",\"ticketid\":\"20250312121\"}]','type':'XP0001'}"
}
得到两条广播数据:
用户消息
{
"createtime": 1743103679397,
"msg": "[{\"tid\":\"1\",\"money\":\"20\",\"type\":\"sm\",\"ticketid\":\"20250312121\"},{\"tid\":\"3\",\"money\":\"50\",\"type\":\"lg\",\"ticketid\":\"20250312121\"}]",
"onlineCount": 3,
"type": "XP0001",
"username": ""
}
系统返回下注消息
{
"createtime": 1743103679861,
"msg": "{\"buyTicketList\":[{\"id\":21,\"uid\":1,\"tid\":1,\"ticketid\":\"20250312121\",\"username\":\"251468038\",\"type\":\"sm\",\"money\":20,\"times\":2.00,\"amt\":9910},{\"id\":22,\"uid\":1,\"tid\":3,\"ticketid\":\"20250312121\",\"username\":\"251468038\",\"type\":\"lg\",\"money\":50,\"times\":2.00,\"amt\":9860}],\"username\":\"251468038\",\"ticketid\":\"20250312121\",\"amt\":\"9860\"}",
"onlineCount": 3,
"type": "XP0001",
"username": "251468038"
}
```


11. 撤单消息案例
```
http://localhost:8090/api/chatMessage/send
// 撤销本单全部下注
{
"content": "{'msg':'{\"ticketid\":\"20250331007\",\"isAll\":\"1\"}','type':'XP0005','username':''}"
}
// 撤销最后一次下注
{
"content": "{'msg':'{\"ticketid\":\"20250331007\",\"isAll\":\"0\"}','type':'XP0005','username':''}"
}
得到两条广播数据:
用户消息
{
"createtime": 1743104096816,
"msg": "20250312121",
"onlineCount": 3,
"type": "XP0005",
"username": ""
}
系统返回下注消息
{
"createtime": 1743104107658,
"msg": "{\"xp0001VOList\":[{\"tid\":\"1\",\"type\":\"sm\",\"money\":\"20.00\",\"ticketid\":\"20250312121\"}],\"username\":\"251468038\",\"ticketid\":\"20250312121\",\"amt\":\"9860.00\",\"isBuy\":\"1\"}",
"onlineCount": 3,
"type": "XP0005",
"username": "admin"
}
```


下面三个接口先不做定时器,自己调用试一下,消息模版渲染一下,后面就直接用定时器,不发请求。
12. 封盘前提示接口
```
http://localhost:8090/api/chatMessage/send
{
"content": "{'msg':'封盘前提示','type':'XP0002','username':''}"
}
返回
{
"createtime": 1743353500556,
"msg": "封盘前提示",
"onlineCount": 3,
"type": "XP0002",
"username": ""
}
```
13. 封盘接口
```
http://localhost:8090/api/chatMessage/send
20250331007封盘
{
"content": "{'msg':'20250331007','type':'XP0003','username':''}"
}
返回
{
"createtime": 1743353799391,
"msg": "[{\"buyTicketList\":[{\"tid\":\"1\",\"type\":\"sm\",\"money\":\"20.00\",\"ticketid\":\"20250331007\"},{\"tid\":\"3\",\"type\":\"lg\",\"money\":\"150.00\",\"ticketid\":\"20250331007\"},{\"tid\":\"1\",\"type\":\"sm\",\"money\":\"20.00\",\"ticketid\":\"20250331007\"},{\"tid\":\"3\",\"type\":\"lg\",\"money\":\"150.00\",\"ticketid\":\"20250331007\"}],\"username\":\"251468038\",\"amt\":\"8470\",\"ticketid\":\"20250331007\"}]",
"onlineCount": 3,
"type": "XP0003",
"username": "admin"
}
```
14. 开奖接口
```
http://localhost:8090/api/chatMessage/send
20250331007开奖
{
"content": "{'msg':'20250331007','type':'XP0004','username':''}"
}
返回
{
"createtime": 1743356899990,
"msg": "{\"xp0004VOList\":[{\"username\":\"251468038\",\"winamt\":\"-450.00\",\"amt\":\"8680.00\"},{\"username\":\"Nick\",\"winamt\":\"0.00\",\"amt\":\"200.00\"},{\"username\":\"Nick222\",\"winamt\":\"0.00\",\"amt\":\"0.00\"},{\"username\":\"Nick3333\",\"winamt\":\"0.00\",\"amt\":\"100.00\"},{\"username\":\"Nick444\",\"winamt\":\"0.00\",\"amt\":\"105.00\"},{\"username\":\"ceshi\",\"winamt\":\"0.00\",\"amt\":\"0.00\"},{\"username\":\"cess\",\"winamt\":\"0.00\",\"amt\":\"0.00\"},{\"username\":\"user\",\"winamt\":\"0.00\",\"amt\":\"0.00\"},{\"username\":\"ceshi123\",\"winamt\":\"0.00\",\"amt\":\"96454.00\"}],\"nums\":\"47,30,10,2,3\",\"ticketid\":\"20250331007\"}",
"onlineCount": 1,
"type": "XP0004",
"username": "admin"
}
```
15. 下注消息查询接口
```
http://123.57.36.51:8090/api/buyTicket/query?username=ceshi123&size=20&sort=id,desc
```