09-15-netty优化兼容其余类型,app版本模块
This commit is contained in:
		| @ -279,8 +279,8 @@ springdoc: | |||||||
| #      packages-to-scan: org.dromara.ctr | #      packages-to-scan: org.dromara.ctr | ||||||
|     - group: 24.招标模块 |     - group: 24.招标模块 | ||||||
|       packages-to-scan: org.dromara.tender |       packages-to-scan: org.dromara.tender | ||||||
|  |     - group: 25.app版本模块 | ||||||
|  |       packages-to-scan: org.dromara.app | ||||||
| # knife4j的增强配置,不需要增强可以不配 | # knife4j的增强配置,不需要增强可以不配 | ||||||
| knife4j: | knife4j: | ||||||
|   enable: true |   enable: true | ||||||
|  | |||||||
| @ -0,0 +1,65 @@ | |||||||
|  | package org.dromara.app.controller; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
|  | import org.dromara.app.domain.SysPackage; | ||||||
|  | import org.dromara.app.service.SysPackageServiceImpl; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.system.domain.vo.SysOssVo; | ||||||
|  | import org.dromara.system.service.impl.SysOssServiceImpl; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.transaction.annotation.Transactional; | ||||||
|  | import org.springframework.web.bind.annotation.GetMapping; | ||||||
|  | import org.springframework.web.bind.annotation.RequestMapping; | ||||||
|  | import org.springframework.web.bind.annotation.RestController; | ||||||
|  | import org.springframework.web.multipart.MultipartFile; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/app/sysPackage") | ||||||
|  | public class SysPackageController { | ||||||
|  |  | ||||||
|  |     @Autowired | ||||||
|  |     private SysOssServiceImpl sysOssService; | ||||||
|  |     @Autowired | ||||||
|  |     private SysPackageServiceImpl sysPackageService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取最新版本 | ||||||
|  |      */ | ||||||
|  |     @GetMapping("/getNewVersion") | ||||||
|  |     public R<List<SysPackage>> getNewVersion() { | ||||||
|  |         LambdaQueryWrapper<SysPackage> lambdaQueryWrapper =new LambdaQueryWrapper<>(); | ||||||
|  |         lambdaQueryWrapper.orderByDesc(SysPackage::getCreateTime); | ||||||
|  |         List<SysPackage> one = sysPackageService.list(lambdaQueryWrapper); | ||||||
|  |         return R.ok(one); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 上传最新安装包及版本 | ||||||
|  |      */ | ||||||
|  |     @Transactional | ||||||
|  |     @GetMapping("/uploadNewVersion") | ||||||
|  |     public R<SysPackage> uploadNewVersion(String version, String type, MultipartFile file) { | ||||||
|  |         SysOssVo upload = sysOssService.upload(file); | ||||||
|  |         if (upload == null){ | ||||||
|  |             return R.fail("上传失败"); | ||||||
|  |         } | ||||||
|  |         SysPackage sysPackage = new SysPackage(); | ||||||
|  |         sysPackage.setVersion( version); | ||||||
|  |         sysPackage.setFileId(upload.getOssId()); | ||||||
|  |         sysPackage.setFileUrl(upload.getUrl()); | ||||||
|  |         sysPackage.setType(type); | ||||||
|  |  | ||||||
|  |         boolean save = sysPackageService.save(sysPackage); | ||||||
|  |         if (!save){ | ||||||
|  |             return R.fail("保存失败"); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return R.ok(sysPackage); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,33 @@ | |||||||
|  | package org.dromara.app.domain; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableId; | ||||||
|  | import com.baomidou.mybatisplus.annotation.TableName; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  |  | ||||||
|  | @Data | ||||||
|  | @TableName("sys_package") | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | public class SysPackage extends BaseEntity { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     @TableId(value = "id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 0安卓1苹果2鸿蒙 | ||||||
|  |      */ | ||||||
|  |     private String type; | ||||||
|  |  | ||||||
|  |     private String version; | ||||||
|  |  | ||||||
|  |     private Long fileId; | ||||||
|  |  | ||||||
|  |     private String fileUrl; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,30 @@ | |||||||
|  | package org.dromara.app.domain.vo; | ||||||
|  |  | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import org.dromara.app.domain.SysPackage; | ||||||
|  |  | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = SysPackage.class) | ||||||
|  | public class SysPackageVo { | ||||||
|  |  | ||||||
|  |     @ExcelProperty("id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 0安卓1苹果2鸿蒙 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty("安装包类型(0安卓1苹果2鸿蒙)") | ||||||
|  |     private String type; | ||||||
|  |  | ||||||
|  |     @ExcelProperty("版本") | ||||||
|  |     private String version; | ||||||
|  |  | ||||||
|  |     private Long fileId; | ||||||
|  |  | ||||||
|  |     @ExcelProperty("安装包地址") | ||||||
|  |     private String fileUrl; | ||||||
|  | } | ||||||
| @ -0,0 +1,11 @@ | |||||||
|  | package org.dromara.app.mapper; | ||||||
|  |  | ||||||
|  | import org.apache.ibatis.annotations.Mapper; | ||||||
|  | import org.dromara.app.domain.SysPackage; | ||||||
|  | import org.dromara.app.domain.vo.SysPackageVo; | ||||||
|  | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||||
|  |  | ||||||
|  | @Mapper | ||||||
|  | public interface SysPackageMapper extends BaseMapperPlus<SysPackage, SysPackageVo> { | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,10 @@ | |||||||
|  | package org.dromara.app.service; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||||
|  | import org.dromara.app.domain.SysPackage; | ||||||
|  | import org.dromara.app.mapper.SysPackageMapper; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  |  | ||||||
|  | @Service | ||||||
|  | public class SysPackageServiceImpl extends ServiceImpl<SysPackageMapper, SysPackage> { | ||||||
|  | } | ||||||
| @ -27,6 +27,8 @@ import org.springframework.beans.factory.annotation.Autowired; | |||||||
| import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||||
| import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||||
|  |  | ||||||
|  | import java.io.File; | ||||||
|  | import java.io.FileOutputStream; | ||||||
| import java.text.SimpleDateFormat; | import java.text.SimpleDateFormat; | ||||||
| import java.util.*; | import java.util.*; | ||||||
| import java.util.concurrent.ConcurrentHashMap; | import java.util.concurrent.ConcurrentHashMap; | ||||||
| @ -171,6 +173,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket | |||||||
|                 } |                 } | ||||||
|                 JSONObject message = new JSONObject(); |                 JSONObject message = new JSONObject(); | ||||||
|                 message.put("type", "3"); |                 message.put("type", "3"); | ||||||
|  |                 message.put("messageType","txt"); | ||||||
|                 message.put("unReadCount", roomCounts); |                 message.put("unReadCount", roomCounts); | ||||||
|                 log.info("发送所有未读消息:{}",message); |                 log.info("发送所有未读消息:{}",message); | ||||||
|                 if(message.get("unReadCount") != null && !roomCounts.isEmpty()) { |                 if(message.get("unReadCount") != null && !roomCounts.isEmpty()) { | ||||||
| @ -293,7 +296,9 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket | |||||||
| //            "type":"0", | //            "type":"0", | ||||||
| //            "from":"66666666", | //            "from":"66666666", | ||||||
| //            "roomId": "1", | //            "roomId": "1", | ||||||
| //            "message": "testing" | //            "messageType":"text" | ||||||
|  | //            "fileName":"" | ||||||
|  | //            "message": "testing" base64 | ||||||
| //        } | //        } | ||||||
|         //0聊天推送的正常消息  1前端主动发送消息以确认消息收到 3发送离线后未读消息列表 |         //0聊天推送的正常消息  1前端主动发送消息以确认消息收到 3发送离线后未读消息列表 | ||||||
|         //前端判断当前聊天框跟消息接收ID一致后,收到消息后,主动发送消息给服务端,确认该消息收到 |         //前端判断当前聊天框跟消息接收ID一致后,收到消息后,主动发送消息给服务端,确认该消息收到 | ||||||
| @ -334,6 +339,48 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket | |||||||
|                     }else { |                     }else { | ||||||
|                         userRoomCountMap.put(id + "+" + RoomId, userRoomCountMap.get(id + "+" + RoomId) + 1); |                         userRoomCountMap.put(id + "+" + RoomId, userRoomCountMap.get(id + "+" + RoomId) + 1); | ||||||
|                     } |                     } | ||||||
|  |                     //发送消息完成后添加聊天记录 | ||||||
|  |                     ChatHistory chatHistory = new ChatHistory(); | ||||||
|  |                     chatHistory.setMessageDate(new Date()); | ||||||
|  |                     chatHistory.setGeterId(Long.valueOf(RoomId)); | ||||||
|  |                     chatHistory.setSenderId(sysUserVo.getUserId()); | ||||||
|  |                     chatHistory.setIsRead("1"); | ||||||
|  |                     chatHistory.setMessageType(jsonObject.get("messageType").toString()); | ||||||
|  |  | ||||||
|  |                     if (!jsonObject.get("messageType").equals("text")){ | ||||||
|  |  | ||||||
|  |                         //将携带base64转为文件然后进行存储 赋值url | ||||||
|  |                         String base64Data = jsonObject.get("message").toString(); | ||||||
|  |  | ||||||
|  |                         // 移除可能的数据URL前缀 | ||||||
|  |                         if (base64Data.contains(",")) { | ||||||
|  |                             base64Data = base64Data.substring(base64Data.indexOf(",") + 1); | ||||||
|  |                         } | ||||||
|  |                         byte[] fileBytes = Base64.getDecoder().decode(base64Data); | ||||||
|  |  | ||||||
|  |                         // 创建临时文件 | ||||||
|  |                         File tempFile = File.createTempFile("",  jsonObject.get("fileName").toString()); | ||||||
|  |                         tempFile.deleteOnExit(); | ||||||
|  |  | ||||||
|  |                         // 写入文件 | ||||||
|  |                         try (FileOutputStream fos = new FileOutputStream(tempFile)) { | ||||||
|  |                             fos.write(fileBytes); | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         SysOssVo upload = sysOssService.upload(tempFile); | ||||||
|  |                         chatHistory.setMessageFileId(upload.getOssId()); | ||||||
|  |  | ||||||
|  |                         jsonObject.put("message", jsonObject.get("fileName")); | ||||||
|  |  | ||||||
|  |                     } | ||||||
|  |                     chatHistory.setMessage(String.valueOf(jsonObject)); | ||||||
|  |                     chatHistoryService.save(chatHistory); | ||||||
|  |  | ||||||
|  |                     //将房间最后消息及时间存储 | ||||||
|  |                     byId.setLastMessage(jsonObject.get("message").toString()); | ||||||
|  |                     byId.setLastMessageTime(new Date()); | ||||||
|  |                     chatGroupService.updateById(byId); | ||||||
|  |  | ||||||
|                     //通过每个用户ID拿到该用户所有通道实例 |                     //通过每个用户ID拿到该用户所有通道实例 | ||||||
|                     List<ChannelHandlerContext> channelHandlerContexts = userChannelMap.get(id.toString()); |                     List<ChannelHandlerContext> channelHandlerContexts = userChannelMap.get(id.toString()); | ||||||
|                     //如果满足则说明用户在线 |                     //如果满足则说明用户在线 | ||||||
| @ -346,19 +393,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket | |||||||
|                             log.info("发送消息{}", jsonObject); |                             log.info("发送消息{}", jsonObject); | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                     //发送消息完成后添加聊天记录 |  | ||||||
|                     ChatHistory chatHistory = new ChatHistory(); |  | ||||||
|                     chatHistory.setMessageDate(new Date()); |  | ||||||
|                     chatHistory.setGeterId(Long.valueOf(RoomId)); |  | ||||||
|                     chatHistory.setSenderId(sysUserVo.getUserId()); |  | ||||||
|                     chatHistory.setIsRead("1"); |  | ||||||
|                     chatHistory.setMessage(String.valueOf(jsonObject)); |  | ||||||
|                     chatHistoryService.save(chatHistory); |  | ||||||
|  |  | ||||||
|                     //将房间最后消息及时间存储 |  | ||||||
|                     byId.setLastMessage(jsonObject.get("message").toString()); |  | ||||||
|                     byId.setLastMessageTime(new Date()); |  | ||||||
|                     chatGroupService.updateById(byId); |  | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|             } |             } | ||||||
| @ -392,6 +427,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket | |||||||
|             JSONObject message = new JSONObject(); |             JSONObject message = new JSONObject(); | ||||||
|             message.put("type", "1"); |             message.put("type", "1"); | ||||||
|             message.put("unReadCount", temp); |             message.put("unReadCount", temp); | ||||||
|  |             message.put("messageType","txt"); | ||||||
|             //发送 |             //发送 | ||||||
|             sendMessage(ctx, message.toString()); |             sendMessage(ctx, message.toString()); | ||||||
|         } |         } | ||||||
| @ -553,7 +589,6 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket | |||||||
|         } |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|         //发送消息后 将该房间未读消息数加1 |         //发送消息后 将该房间未读消息数加1 | ||||||
|         if (userRoomCountMap.containsKey(userId+"+"+groupServiceOne.getId())){ |         if (userRoomCountMap.containsKey(userId+"+"+groupServiceOne.getId())){ | ||||||
|             //该房间未读消息数加1 |             //该房间未读消息数加1 | ||||||
| @ -585,6 +620,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket | |||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
|         jsonObject.put("unReadCount", temp); |         jsonObject.put("unReadCount", temp); | ||||||
|  |         jsonObject.put("messageType", "txt"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -598,6 +634,7 @@ public class ChatServerHandler extends SimpleChannelInboundHandler<TextWebSocket | |||||||
|  |  | ||||||
|         JSONObject jsonObject = new JSONObject(); |         JSONObject jsonObject = new JSONObject(); | ||||||
|         jsonObject.put("type", "5"); |         jsonObject.put("type", "5"); | ||||||
|  |         jsonObject.put("messageType","txt"); | ||||||
|         jsonObject.put("roomInfo", chatGroup); |         jsonObject.put("roomInfo", chatGroup); | ||||||
|  |  | ||||||
|         for (ChannelHandlerContext channelHandlerContext : channelHandlerContexts) { |         for (ChannelHandlerContext channelHandlerContext : channelHandlerContexts) { | ||||||
|  | |||||||
| @ -21,13 +21,6 @@ public class ChatHistory implements Serializable { | |||||||
|     @TableId(value = "id") |     @TableId(value = "id") | ||||||
|     private Long id; |     private Long id; | ||||||
|  |  | ||||||
|     /*** |  | ||||||
|      * 0私聊1群聊 |  | ||||||
|      */ |  | ||||||
| //    private String type; |  | ||||||
|  |  | ||||||
| //    private Long groupId; |  | ||||||
|  |  | ||||||
|     private Long senderId; |     private Long senderId; | ||||||
|  |  | ||||||
|     /*** |     /*** | ||||||
| @ -35,6 +28,18 @@ public class ChatHistory implements Serializable { | |||||||
|      */ |      */ | ||||||
|     private Long geterId; |     private Long geterId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 消息类型: txt,file,img,audio | ||||||
|  |      */ | ||||||
|  |     private String messageType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 消息文件地址 | ||||||
|  |      */ | ||||||
|  |     private String messageAddress; | ||||||
|  |  | ||||||
|  |     private Long messageFileId; | ||||||
|  |  | ||||||
|     private String message; |     private String message; | ||||||
|  |  | ||||||
|     private Date messageDate; |     private Date messageDate; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user