09-14-netty新增其他类型系统房间

This commit is contained in:
2025-09-14 15:35:30 +08:00
parent b5cf663a2b
commit 868616ea26
6 changed files with 178 additions and 48 deletions

View File

@ -69,7 +69,7 @@ public class AttendanceReminderJob {
Set<Long> list1 = list.stream().map(SubConstructionUser::getSysUserId).collect(Collectors.toSet()); Set<Long> list1 = list.stream().map(SubConstructionUser::getSysUserId).collect(Collectors.toSet());
for (Long userId : list1) { for (Long userId : list1) {
chatServerHandler.sendSystemMessageToUser(userId, message); chatServerHandler.sendSystemMessageToUser(userId, message,"1");
} }
} }
@ -101,7 +101,7 @@ public class AttendanceReminderJob {
Set<Long> list1 = list.stream().map(SubConstructionUser::getSysUserId).collect(Collectors.toSet()); Set<Long> list1 = list.stream().map(SubConstructionUser::getSysUserId).collect(Collectors.toSet());
for (Long userId : list1) { for (Long userId : list1) {
chatServerHandler.sendSystemMessageToUser(userId, message); chatServerHandler.sendSystemMessageToUser(userId, message,"1");
} }
} }

View File

@ -312,7 +312,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
// 上传人脸照 // 上传人脸照
SysOssVo upload = ossService.upload(file); SysOssVo upload = ossService.upload(file);
attendance.setFacePic(upload.getOssId().toString()); attendance.setFacePic(upload.getOssId().toString());
chatServerHandler.sendSystemMessageToUser(userId, "打卡成功"); chatServerHandler.sendSystemMessageToUser(userId, "打卡成功","1");
boolean save = this.save(attendance); boolean save = this.save(attendance);
//插入工资 //插入工资
userSalaryDetailService.insertByAttendance(userId, attendance.getClockDate()); userSalaryDetailService.insertByAttendance(userId, attendance.getClockDate());

View File

@ -372,7 +372,7 @@ public class BusReissueCardServiceImpl extends ServiceImpl<BusReissueCardMapper,
.eq(BusAttendance::getId, bean.getAttendanceId()) .eq(BusAttendance::getId, bean.getAttendanceId())
.set(BusAttendance::getHandle, "1")); .set(BusAttendance::getHandle, "1"));
//发送通知 //发送通知
chatServerHandler.sendSystemMessageToUser(bean.getGangerId(),"["+bean.getUserName()+ "]"+"提交了新的补卡申请"); chatServerHandler.sendSystemMessageToUser(bean.getGangerId(),"["+bean.getUserName()+ "]"+"提交了新的补卡申请","1");
return bean.getId(); return bean.getId();
} }

View File

@ -218,7 +218,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl<HseSafetyInspect
if (req.getIsReply().equals("1")) { if (req.getIsReply().equals("1")) {
title = "您有新的安全巡检工单需要整改,请及时处理!"; title = "您有新的安全巡检工单需要整改,请及时处理!";
} }
chatServerHandler.sendSystemMessageToUser(correctorId, title); chatServerHandler.sendSystemMessageToUser(correctorId, title,"2");
} }
// 返回新写入的数据 // 返回新写入的数据
return safetyInspection.getId(); return safetyInspection.getId();
@ -470,7 +470,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl<HseSafetyInspect
BeanUtils.copyProperties(req, updateInspection); BeanUtils.copyProperties(req, updateInspection);
if (safetyInspection.getCreateBy() != null && safetyInspection.getIsReply().equals("1")) { if (safetyInspection.getCreateBy() != null && safetyInspection.getIsReply().equals("1")) {
chatServerHandler.sendSystemMessageToUser(safetyInspection.getCreateBy(), chatServerHandler.sendSystemMessageToUser(safetyInspection.getCreateBy(),
"安全巡检工单【" + safetyInspection.getCheckProject() + "】已整改,请及时复查!"); "安全巡检工单【" + safetyInspection.getCheckProject() + "】已整改,请及时复查!","2");
} }
// 填充默认值 // 填充默认值
updateInspection.setId(id); updateInspection.setId(id);

View File

@ -247,7 +247,7 @@ public class HseViolationRecordServiceImpl extends ServiceImpl<HseViolationRecor
} }
if (req.getCorrectorId() != null) { if (req.getCorrectorId() != null) {
chatServerHandler.sendSystemMessageToUser(req.getCorrectorId(), chatServerHandler.sendSystemMessageToUser(req.getCorrectorId(),
"您有一份新的违章工单,请及时处理!工单号为:" + violationRecord.getId()); "您有一份新的违章工单,请及时处理!工单号为:" + violationRecord.getId(),"2");
} }
boolean result = this.updateById(violationRecord); boolean result = this.updateById(violationRecord);
if (!result) { if (!result) {

View File

@ -141,6 +141,12 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
//拿到该用户所参与的房间列表 //拿到该用户所参与的房间列表
List<ChatGroup> chatGroups = chatGroupService.list(queryWrapper); List<ChatGroup> chatGroups = chatGroupService.list(queryWrapper);
boolean isHaveSystemRoom = false; boolean isHaveSystemRoom = false;
//考勤
boolean isHaveAttendanceRoom = false;
//安全
boolean isHaveSafeRoom = false;
//质量
boolean isHaveQualityRoom = false;
if (chatGroups != null && !chatGroups.isEmpty()) { if (chatGroups != null && !chatGroups.isEmpty()) {
HashMap<String, Object> roomCounts = new HashMap<>(); HashMap<String, Object> roomCounts = new HashMap<>();
for (ChatGroup chatGroup : chatGroups) { for (ChatGroup chatGroup : chatGroups) {
@ -155,9 +161,18 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
userRoomCountMap.put(loginUser.getUserId()+"+"+chatGroup.getId().toString(), list.size()); userRoomCountMap.put(loginUser.getUserId()+"+"+chatGroup.getId().toString(), list.size());
} }
//在遍历的同时寻找是否有系统消息房间 //在遍历的同时寻找是否有系统消息房间
if (chatGroup.getMembers().contains("[99")){ if (!isHaveSystemRoom && chatGroup.getMembers().contains("[99")){
isHaveSystemRoom = true; isHaveSystemRoom = true;
} }
if (!isHaveAttendanceRoom && chatGroup.getMembers().contains("[100")){
isHaveAttendanceRoom = true;
}
if (!isHaveSafeRoom && chatGroup.getMembers().contains("[101")){
isHaveSafeRoom = true;
}
if (!isHaveQualityRoom && chatGroup.getMembers().contains("[102")){
isHaveQualityRoom = true;
}
} }
JSONObject message = new JSONObject(); JSONObject message = new JSONObject();
message.put("type", "3"); message.put("type", "3");
@ -175,8 +190,30 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
chatGroupService.save(chatGroup); chatGroupService.save(chatGroup);
//初次创建系统房间后 发送一条初始化信息 //初次创建系统房间后 发送一条初始化信息
sendSystemMessageToUser(loginUser.getUserId(),"注册已顺利完成,为确保您正常参与工作,请联系分包管理员确认所属项目及班组。"); sendSystemMessageToUser(loginUser.getUserId(),"注册已顺利完成,为确保您正常参与工作,请联系分包管理员确认所属项目及班组。","0");
} }
if (!isHaveAttendanceRoom){
ChatGroup chatGroup = new ChatGroup();
chatGroup.setType(String.valueOf(2));
chatGroup.setMembers("[100, "+loginUser.getUserId()+"]");
chatGroupService.save(chatGroup);
}
if (!isHaveSafeRoom){
ChatGroup chatGroup = new ChatGroup();
chatGroup.setType(String.valueOf(2));
chatGroup.setMembers("[101, "+loginUser.getUserId()+"]");
chatGroupService.save(chatGroup);
}
if (!isHaveQualityRoom){
ChatGroup chatGroup = new ChatGroup();
chatGroup.setType(String.valueOf(2));
chatGroup.setMembers("[102, "+loginUser.getUserId()+"]");
chatGroupService.save(chatGroup);
}
} }
super.userEventTriggered(ctx, evt); super.userEventTriggered(ctx, evt);
} }
@ -293,13 +330,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
//如果满足则说明用户在线 //如果满足则说明用户在线
if (channelHandlerContexts != null && !channelHandlerContexts.isEmpty()) { if (channelHandlerContexts != null && !channelHandlerContexts.isEmpty()) {
//构建所有房间的未读消息数 //构建所有房间的未读消息数
HashMap<String,Object> temp = new HashMap<>(); setValue(id, jsonObject);
userRoomCountMap.forEachKey(0, (value) -> {
if (value.contains(id.toString())){
temp.put(value,userRoomCountMap.get(value));
}
});
jsonObject.put("unReadCount", temp);
//给每个通道发送对应消息 //给每个通道发送对应消息
for (ChannelHandlerContext handlerContext : channelHandlerContexts) { for (ChannelHandlerContext handlerContext : channelHandlerContexts) {
sendMessage(handlerContext, jsonObject.toString()); sendMessage(handlerContext, jsonObject.toString());
@ -379,8 +410,8 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
//通过userId进行发送消息 //通过userId进行发送消息
@Transactional @Transactional
public void sendSystemMessageToUser(Long userId, String message){ public void sendSystemMessageToUser(Long userId, String message,String value){
// /现在已用type0 1 3 4用于服务端发送消息到系统消息房间(暂定为0) // /现在已用type0 1 3 (暂定为0)
// { // {
// "type":"4", // "type":"4",
// "message": "testing" // "message": "testing"
@ -389,10 +420,16 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
jsonObject.put("type", "0"); jsonObject.put("type", "0");
jsonObject.put("message", message); jsonObject.put("message", message);
//生成系统消息的聊天记录 //初始化变量
LambdaQueryWrapper<ChatGroup> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ChatGroup> lambdaQueryWrapper = new LambdaQueryWrapper<>();
ChatGroup groupServiceOne;
switch (value){
//1:系统消息
case "0" ->{
//生成系统消息的聊天记录
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[99, "+userId+"]"); lambdaQueryWrapper.eq(ChatGroup::getMembers,"[99, "+userId+"]");
ChatGroup groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper); groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
//如果给成员发送系统消息 而该成员还没有建立过连接从而没有群聊房间 则创建该成员系统消息房间 //如果给成员发送系统消息 而该成员还没有建立过连接从而没有群聊房间 则创建该成员系统消息房间
if (groupServiceOne == null){ if (groupServiceOne == null){
groupServiceOne = new ChatGroup(); groupServiceOne = new ChatGroup();
@ -414,6 +451,94 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
chatHistory.setMessageDate(new Date()); chatHistory.setMessageDate(new Date());
chatHistory.setIsRead("1");//未读 chatHistory.setIsRead("1");//未读
chatHistoryService.save(chatHistory); chatHistoryService.save(chatHistory);
}
//2:考勤消息
case "1" ->{
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[100, "+userId+"]");
groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
//如果给成员发送考勤消息 而该成员还没有建立过连接从而没有考勤房间 则创建该成员考勤消息房间
if (groupServiceOne == null){
groupServiceOne = new ChatGroup();
groupServiceOne.setType(String.valueOf(2));
groupServiceOne.setMembers("[100, "+userId+"]");
groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date());
chatGroupService.save(groupServiceOne);
}else {
groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date());
chatGroupService.updateById(groupServiceOne);
}
ChatHistory chatHistory = new ChatHistory();
//发送方设置为100 表示系统消息中的考勤消息
chatHistory.setSenderId(100L);
chatHistory.setGeterId(groupServiceOne.getId());
chatHistory.setMessage(jsonObject.toString());
chatHistory.setMessageDate(new Date());
chatHistory.setIsRead("1");//未读
chatHistoryService.save(chatHistory);
}
//安全消息
case "2" ->{
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[101, "+userId+"]");
groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
//如果给成员发送安全消息 而该成员还没有建立过连接从而没有安全消息 则创建该成员安全消息房间
if (groupServiceOne == null){
groupServiceOne = new ChatGroup();
groupServiceOne.setType(String.valueOf(2));
groupServiceOne.setMembers("[101, "+userId+"]");
groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date());
chatGroupService.save(groupServiceOne);
}else {
groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date());
chatGroupService.updateById(groupServiceOne);
}
ChatHistory chatHistory = new ChatHistory();
//发送方设置为101 表示系统消息中的安全消息
chatHistory.setSenderId(101L);
chatHistory.setGeterId(groupServiceOne.getId());
chatHistory.setMessage(jsonObject.toString());
chatHistory.setMessageDate(new Date());
chatHistory.setIsRead("1");//未读
chatHistoryService.save(chatHistory);
}
//质量消息
case "3" ->{
lambdaQueryWrapper.eq(ChatGroup::getMembers,"[102, "+userId+"]");
groupServiceOne = chatGroupService.getOne(lambdaQueryWrapper);
//如果给成员发送质量消息 而该成员还没有建立过连接从而没有质量消息 则创建该成员质量消息房间
if (groupServiceOne == null){
groupServiceOne = new ChatGroup();
groupServiceOne.setType(String.valueOf(2));
groupServiceOne.setMembers("[102, "+userId+"]");
groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date());
chatGroupService.save(groupServiceOne);
}else {
groupServiceOne.setLastMessage(message);
groupServiceOne.setLastMessageTime(new Date());
chatGroupService.updateById(groupServiceOne);
}
ChatHistory chatHistory = new ChatHistory();
//发送方设置为102 表示系统消息中的质量消息
chatHistory.setSenderId(102L);
chatHistory.setGeterId(groupServiceOne.getId());
chatHistory.setMessage(jsonObject.toString());
chatHistory.setMessageDate(new Date());
chatHistory.setIsRead("1");//未读
chatHistoryService.save(chatHistory);
}
default -> {
return;
}
}
//发送消息后 将该房间未读消息数加1 //发送消息后 将该房间未读消息数加1
@ -431,6 +556,15 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
//给每个通道发送对应消息 //给每个通道发送对应消息
for (ChannelHandlerContext handlerContext : channelHandlerContexts) { for (ChannelHandlerContext handlerContext : channelHandlerContexts) {
//同时发送所有未读消息给前端进行渲染 //同时发送所有未读消息给前端进行渲染
setValue(userId, jsonObject);
sendMessage(handlerContext, jsonObject.toString());
}
}
}
//设置未读消息数
private void setValue(Long userId, JSONObject jsonObject) {
HashMap<String,Object> temp = new HashMap<>(); HashMap<String,Object> temp = new HashMap<>();
userRoomCountMap.forEachKey(0, (value) -> { userRoomCountMap.forEachKey(0, (value) -> {
if (value.contains(userId.toString())){ if (value.contains(userId.toString())){
@ -438,10 +572,6 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket
} }
}); });
jsonObject.put("unReadCount", temp); jsonObject.put("unReadCount", temp);
sendMessage(handlerContext, jsonObject.toString());
}
}
} }