修改: 1、发送消息给不存在的用户时捕获错误

2、补充数据库初始化脚本
This commit is contained in:
绝尘 2025-06-21 13:41:52 +08:00
parent 4fd53fe434
commit 766004fa0a
5 changed files with 233 additions and 0 deletions

83
docs/z_im-mysql.sql Normal file
View File

@ -0,0 +1,83 @@
CREATE TABLE `appinfo` (
`appid` varchar(64) NOT NULL DEFAULT '' COMMENT '[平台标识]',
`appname` varchar(64) NOT NULL DEFAULT '' COMMENT '[平台名称]',
`appsecret` varchar(64) NOT NULL DEFAULT '' COMMENT '[校验码]',
`createtime` bigint NOT NULL DEFAULT '0' COMMENT '[创建时间]',
`updatetime` bigint NOT NULL DEFAULT '0' COMMENT '[修改时间]',
`status` smallint NOT NULL DEFAULT '10' COMMENT '[状态]10正常, 40停用80删除',
`checkfriend` smallint NOT NULL DEFAULT '0' COMMENT '[是否检查好友关系1是0否]',
`checkblack` smallint NOT NULL DEFAULT '0' COMMENT '[是否检查拉黑关系1是0否]',
`machineretract` smallint NOT NULL DEFAULT '0' COMMENT '[是否需要机审撤回处理1是0否]',
`hasnext` smallint NOT NULL DEFAULT '0' COMMENT '[是否有下一步流程1是0否]',
PRIMARY KEY (`appid`)
) ENGINE=InnoDB COMMENT='平台信息表';
CREATE TABLE `channelmessage` (
`messageid` varchar(64) NOT NULL DEFAULT '' COMMENT '[消息ID]',
`content` text NOT NULL COMMENT '[消息内容]',
`appid` varchar(8) NOT NULL DEFAULT '' COMMENT '[平台ID]',
`channeltype` varchar(15) NOT NULL DEFAULT '' COMMENT '[平台频道类型]',
`channelvalue` varchar(64) NOT NULL DEFAULT '' COMMENT '[平台频道ID]',
`senduserid` int NOT NULL DEFAULT '0' COMMENT '[发送人]',
`createtime` bigint NOT NULL DEFAULT '0' COMMENT '[创建时间]',
`status` smallint NOT NULL DEFAULT '10' COMMENT '[状态]80删除',
`type` varchar(255) NOT NULL DEFAULT '' COMMENT '[消息类型]',
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '[消息标题]',
`attachment` varchar(2048) NOT NULL DEFAULT '' COMMENT '[消息附加信息]',
PRIMARY KEY (`messageid`) USING BTREE
) ENGINE=InnoDB COMMENT='频道内容表';
CREATE TABLE `channeluser` (
`cuid` varchar(64) NOT NULL DEFAULT '' COMMENT '[用户组ID]',
`appid` varchar(64) NOT NULL DEFAULT '' COMMENT '[平台ID]',
`channeltype` varchar(15) NOT NULL DEFAULT '' COMMENT '[平台频道类型]',
`channelvalue` varchar(64) NOT NULL DEFAULT '' COMMENT '[平台频道ID]',
`userid` int NOT NULL DEFAULT '0' COMMENT '[订阅用户]',
`createtime` bigint NOT NULL DEFAULT '0' COMMENT '[创建时间]',
`lastaccepttime` bigint NOT NULL DEFAULT '0' COMMENT '[最后接收时间]',
`status` smallint NOT NULL DEFAULT '10' COMMENT '[状态]10正常42禁言',
`identitytype` smallint NOT NULL DEFAULT '10' COMMENT '[用户身份0游客10成员20管理员30群主]',
PRIMARY KEY (`cuid`)
) ENGINE=InnoDB COMMENT='用户组信息表';
CREATE TABLE `friendmessage` (
`messageid` varchar(64) NOT NULL DEFAULT '' COMMENT '[私聊ID]发送人-时间戳',
`messagetype` varchar(32) NOT NULL DEFAULT '' COMMENT '[消息类型]',
`content` text NOT NULL COMMENT '[私聊内容]',
`senduserid` int NOT NULL DEFAULT '0' COMMENT '[发送人]',
`receiveuserid` int NOT NULL DEFAULT '0' COMMENT '[接收人]',
`createtime` bigint NOT NULL DEFAULT '0' COMMENT '[创建时间]',
`status` smallint NOT NULL DEFAULT '20' COMMENT '[状态]10已发送20未发送21仅在线发送',
`type` varchar(255) NOT NULL DEFAULT '' COMMENT '[消息类型]',
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '[消息标题]',
`attachment` varchar(2048) NOT NULL DEFAULT '' COMMENT '[消息附加信息]',
`newField` varchar(255) NOT NULL DEFAULT '' COMMENT '[新字段描述]',
PRIMARY KEY (`messageid`)
) ENGINE=InnoDB COMMENT='私聊内容表';
CREATE TABLE `imuser` (
`userid` int NOT NULL COMMENT '[用户标识]',
`guserid` varchar(64) NOT NULL DEFAULT '' COMMENT '[平台自用用户标识]',
`appid` varchar(8) NOT NULL DEFAULT '' COMMENT '[关联平台标识]',
`gender` smallint NOT NULL DEFAULT '0' COMMENT '[性别]',
`nickname` varchar(32) NOT NULL DEFAULT '' COMMENT '[昵称]',
`face` varchar(128) NOT NULL DEFAULT '' COMMENT '[头像]',
`createtime` bigint NOT NULL DEFAULT '0' COMMENT '[创建时间]',
`imtoken` varchar(125) DEFAULT '' COMMENT '[用户认证]',
`updatetime` bigint NOT NULL DEFAULT '0' COMMENT '[修改时间]',
`lastaccepttime` bigint NOT NULL DEFAULT '0' COMMENT '[接收时间]',
`status` smallint NOT NULL DEFAULT '10' COMMENT '[状态]10正常40停用80删除',
PRIMARY KEY (`userid`)
) ENGINE=InnoDB COMMENT='IM用户';
--
INSERT INTO z_im.appinfo (appid, appname, appsecret, createtime, updatetime, status, checkfriend, checkblack, machineretract, hasnext) VALUES
('krlq2lp4', '应用A-开发服', '108319232efb4880bcb4f3323829692c', 0, 0, 10, 0, 0, 0, 0),
('xrkqglth', '应用A-测试服', '108319232efb4880bcb4f3323829692d', 0, 0, 10, 0, 0, 0, 0);
INSERT INTO imuser (userid, guserid, appid, gender, nickname, face, createtime, imtoken, updatetime, lastaccepttime, status) VALUES
(10001, '1784509137732849665', 'xrkqglth', 0, '', '', 1721373487374, 'c75ab6feda394d8c8b28371cda45ec12', 1748780429, 1748780429, 10),
(10002, '1784421470808907778', 'xrkqglth', 0, '', '', 1721377122233, '69ca1dcbebc645b78f84a9e88287382d', 1748780432, 1748780432, 10);

136
docs/z_im-postgresql.sql Normal file
View File

@ -0,0 +1,136 @@
CREATE TABLE appinfo (
appid VARCHAR(64) NOT NULL DEFAULT '',
appname VARCHAR(64) NOT NULL DEFAULT '',
appsecret VARCHAR(64) NOT NULL DEFAULT '',
createtime BIGINT NOT NULL DEFAULT 0,
updatetime BIGINT NOT NULL DEFAULT 0,
status SMALLINT NOT NULL DEFAULT 10,
checkfriend SMALLINT NOT NULL DEFAULT 0,
checkblack SMALLINT NOT NULL DEFAULT 0,
machineretract SMALLINT NOT NULL DEFAULT 0,
hasnext SMALLINT NOT NULL DEFAULT 0,
PRIMARY KEY (appid)
);
COMMENT ON TABLE appinfo IS '平台信息表';
COMMENT ON COLUMN appinfo.appid IS '[平台标识]';
COMMENT ON COLUMN appinfo.appname IS '[平台名称]';
COMMENT ON COLUMN appinfo.appsecret IS '[校验码]';
COMMENT ON COLUMN appinfo.createtime IS '[创建时间]';
COMMENT ON COLUMN appinfo.updatetime IS '[修改时间]';
COMMENT ON COLUMN appinfo.status IS '[状态]10正常, 40停用80删除';
COMMENT ON COLUMN appinfo.checkfriend IS '[是否检查好友关系1是0否]';
COMMENT ON COLUMN appinfo.checkblack IS '[是否检查拉黑关系1是0否]';
COMMENT ON COLUMN appinfo.machineretract IS '[是否需要机审撤回处理1是0否]';
COMMENT ON COLUMN appinfo.hasnext IS '[是否有下一步流程1是0否]';
CREATE TABLE channelmessage (
messageid VARCHAR(64) NOT NULL DEFAULT '',
content TEXT NOT NULL,
appid VARCHAR(8) NOT NULL DEFAULT '',
channeltype VARCHAR(15) NOT NULL DEFAULT '',
channelvalue VARCHAR(64) NOT NULL DEFAULT '',
senduserid INT NOT NULL DEFAULT 0,
createtime BIGINT NOT NULL DEFAULT 0,
status SMALLINT NOT NULL DEFAULT 10,
type VARCHAR(255) NOT NULL DEFAULT '',
title VARCHAR(255) NOT NULL DEFAULT '',
attachment VARCHAR(2048) NOT NULL DEFAULT '',
PRIMARY KEY (messageid)
);
COMMENT ON TABLE channelmessage IS '频道内容表';
COMMENT ON COLUMN channelmessage.messageid IS '[消息ID]';
COMMENT ON COLUMN channelmessage.content IS '[消息内容]';
COMMENT ON COLUMN channelmessage.appid IS '[平台ID]';
COMMENT ON COLUMN channelmessage.channeltype IS '[平台频道类型]';
COMMENT ON COLUMN channelmessage.channelvalue IS '[平台频道ID]';
COMMENT ON COLUMN channelmessage.senduserid IS '[发送人]';
COMMENT ON COLUMN channelmessage.createtime IS '[创建时间]';
COMMENT ON COLUMN channelmessage.status IS '[状态]80删除';
COMMENT ON COLUMN channelmessage.type IS '[消息类型]';
COMMENT ON COLUMN channelmessage.title IS '[消息标题]';
COMMENT ON COLUMN channelmessage.attachment IS '[消息附加信息]';
CREATE TABLE channeluser (
cuid VARCHAR(64) NOT NULL DEFAULT '',
appid VARCHAR(64) NOT NULL DEFAULT '',
channeltype VARCHAR(15) NOT NULL DEFAULT '',
channelvalue VARCHAR(64) NOT NULL DEFAULT '',
userid INT NOT NULL DEFAULT 0,
createtime BIGINT NOT NULL DEFAULT 0,
lastaccepttime BIGINT NOT NULL DEFAULT 0,
status SMALLINT NOT NULL DEFAULT 10,
identitytype SMALLINT NOT NULL DEFAULT 10,
PRIMARY KEY (cuid)
);
COMMENT ON TABLE channeluser IS '用户组信息表';
COMMENT ON COLUMN channeluser.cuid IS '[用户组ID]';
COMMENT ON COLUMN channeluser.appid IS '[平台ID]';
COMMENT ON COLUMN channeluser.channeltype IS '[平台频道类型]';
COMMENT ON COLUMN channeluser.channelvalue IS '[平台频道ID]';
COMMENT ON COLUMN channeluser.userid IS '[订阅用户]';
COMMENT ON COLUMN channeluser.createtime IS '[创建时间]';
COMMENT ON COLUMN channeluser.lastaccepttime IS '[最后接收时间]';
COMMENT ON COLUMN channeluser.status IS '[状态]10正常42禁言';
COMMENT ON COLUMN channeluser.identitytype IS '[用户身份0游客10成员20管理员30群主]';
CREATE TABLE friendmessage (
messageid VARCHAR(64) NOT NULL DEFAULT '',
messagetype VARCHAR(32) NOT NULL DEFAULT '',
content TEXT NOT NULL,
senduserid INT NOT NULL DEFAULT 0,
receiveuserid INT NOT NULL DEFAULT 0,
createtime BIGINT NOT NULL DEFAULT 0,
status SMALLINT NOT NULL DEFAULT 20,
type VARCHAR(255) NOT NULL DEFAULT '',
title VARCHAR(255) NOT NULL DEFAULT '',
attachment VARCHAR(2048) NOT NULL DEFAULT '',
PRIMARY KEY (messageid)
);
COMMENT ON TABLE friendmessage IS '私聊内容表';
COMMENT ON COLUMN friendmessage.messageid IS '[私聊ID]发送人-时间戳';
COMMENT ON COLUMN friendmessage.messagetype IS '[消息类型]';
COMMENT ON COLUMN friendmessage.content IS '[私聊内容]';
COMMENT ON COLUMN friendmessage.senduserid IS '[发送人]';
COMMENT ON COLUMN friendmessage.receiveuserid IS '[接收人]';
COMMENT ON COLUMN friendmessage.createtime IS '[创建时间]';
COMMENT ON COLUMN friendmessage.status IS '[状态]10已发送20未发送21仅在线发送';
COMMENT ON COLUMN friendmessage.type IS '[消息类型]';
COMMENT ON COLUMN friendmessage.title IS '[消息标题]';
COMMENT ON COLUMN friendmessage.attachment IS '[消息附加信息]';
CREATE TABLE imuser (
userid INT NOT NULL,
guserid VARCHAR(64) NOT NULL DEFAULT '',
appid VARCHAR(8) NOT NULL DEFAULT '',
gender SMALLINT NOT NULL DEFAULT 0,
nickname VARCHAR(32) NOT NULL DEFAULT '',
face VARCHAR(128) NOT NULL DEFAULT '',
createtime BIGINT NOT NULL DEFAULT 0,
imtoken VARCHAR(125) DEFAULT '',
updatetime BIGINT NOT NULL DEFAULT 0,
lastaccepttime BIGINT NOT NULL DEFAULT 0,
status SMALLINT NOT NULL DEFAULT 10,
PRIMARY KEY (userid)
);
COMMENT ON TABLE imuser IS 'IM用户';
COMMENT ON COLUMN imuser.userid IS '[用户标识]';
COMMENT ON COLUMN imuser.guserid IS '[平台自用用户标识]';
COMMENT ON COLUMN imuser.appid IS '[关联平台标识]';
COMMENT ON COLUMN imuser.gender IS '[性别]';
COMMENT ON COLUMN imuser.nickname IS '[昵称]';
COMMENT ON COLUMN imuser.face IS '[头像]';
COMMENT ON COLUMN imuser.createtime IS '[创建时间]';
COMMENT ON COLUMN imuser.imtoken IS '[用户认证]';
COMMENT ON COLUMN imuser.updatetime IS '[修改时间]';
COMMENT ON COLUMN imuser.lastaccepttime IS '[接收时间]';
COMMENT ON COLUMN imuser.status IS '[状态]10正常40停用80删除';
--
INSERT INTO z_im.appinfo (appid, appname, appsecret, createtime, updatetime, status, checkfriend, checkblack, machineretract, hasnext) VALUES
('krlq2lp4', '应用A-开发服', '108319232efb4880bcb4f3323829692c', 0, 0, 10, 0, 0, 0, 0),
('xrkqglth', '应用A-测试服', '108319232efb4880bcb4f3323829692d', 0, 0, 10, 0, 0, 0, 0);
INSERT INTO imuser (userid, guserid, appid, gender, nickname, face, createtime, imtoken, updatetime, lastaccepttime, status) VALUES
(10001, '1784509137732849665', 'xrkqglth', 0, '', '', 1721373487374, 'c75ab6feda394d8c8b28371cda45ec12', 1748780429, 1748780429, 10),
(10002, '1784421470808907778', 'xrkqglth', 0, '', '', 1721377122233, '69ca1dcbebc645b78f84a9e88287382d', 1748780432, 1748780432, 10);

View File

@ -14,6 +14,7 @@
</properties>
<repositories>
<!-- https://nexus.1216.top/repo/ -->
<repository>
<id>maven-release</id>
<name>maven-nexus</name>
@ -56,6 +57,12 @@
<groupId>net.tccn</groupId>
<artifactId>zhub-client-redkale</artifactId>
<version>x.22.0</version>
<exclusions>
<exclusion>
<artifactId>redkale</artifactId>
<groupId>org.redkale</groupId>
</exclusion>
</exclusions>
</dependency>
<!--<dependency>

View File

@ -211,6 +211,9 @@ public class ImChatService extends BaseService {
public int getUserid(String appid, String guserid) {
ImUser user = zimSource.find(ImUser.class, FilterNode.create("appid", appid).and("guserid", guserid));
if (user == null) {
return 0;
}
return user.getUserid();
}

View File

@ -100,6 +100,10 @@ public class ImChatWebSocket extends WebSocket {
String mck = extmap.get("mck");
int targetguserid = chatService.getUserid(appid, guserid);
if (targetguserid == 0) {
sendTip("用户不存在", mck, 4001);
return;
}
FriendMessage message = FriendMessage.buildFriendMessage(bean.get("content"), userid, targetguserid);
// 禁言检查