Bladeren bron

Merge branch 'dev-meta' of xiongzhu/raex_back into master

sunkean 3 jaren geleden
bovenliggende
commit
0fba02710e

+ 22 - 6
src/main/java/com/izouma/nineth/domain/PublicScreenChat.java

@@ -19,15 +19,31 @@ import java.time.LocalDateTime;
 @ApiModel("元宇宙用户聊天信息")
 public class PublicScreenChat extends BaseEntity {
 
-    @ApiModelProperty("发送方姓名")
-    @ExcelProperty("发送方姓名")
+    @ApiModelProperty("发送方昵称")
+    @ExcelProperty("发送方昵称")
     @Searchable
-    private String fromNickName;
+    private String nickname;
 
-    @ApiModelProperty("发送方id")
-    @ExcelProperty("发送方id")
+    @ApiModelProperty("发送方用户id")
+    @ExcelProperty("发送方用户id")
     @Searchable
-    private String fromUserId;
+    private String userId;
+
+    @ApiModelProperty("勋章等级")
+    @ExcelProperty("勋章等级")
+    private int level;
+
+    @ApiModelProperty("境界")
+    @ExcelProperty("境界")
+    private String realm;
+
+    @ApiModelProperty("头衔")
+    @ExcelProperty("头衔")
+    private String title;
+
+    @ApiModelProperty("头像")
+    @ExcelProperty("头像")
+    private String avatar;
 
     @ApiModelProperty("消息内容")
     @ExcelProperty("消息内容")

+ 0 - 23
src/main/java/com/izouma/nineth/dto/MetaWebsocketMessage.java

@@ -1,23 +0,0 @@
-package com.izouma.nineth.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@ApiModel("元宇宙websocket通用返回消息")
-public class MetaWebsocketMessage {
-
-    @ApiModelProperty("消息类型 1 -> " +
-            "上线 2 -> 下线 " +
-            "3 -> 重复登陆")
-    private Integer type;
-
-    @ApiModelProperty("提示语")
-    private String tip;
-
-}

+ 12 - 0
src/main/java/com/izouma/nineth/service/PurchaseLevelService.java

@@ -22,4 +22,16 @@ public class PurchaseLevelService {
         return new PageWrapper<>(page.getContent(), page.getPageable().getPageNumber(),
                 page.getPageable().getPageSize(), page.getTotalElements());
     }
+
+    public PurchaseLevel findPurchaseLevelByLevel(int level) {
+        int maxStartLevel = purchaseLevelRepo.findMaxStartLevel();
+        PurchaseLevel purchaseLevel;
+        if (level >= maxStartLevel) {
+            purchaseLevel = purchaseLevelRepo.findByStartLevel(maxStartLevel);
+        } else {
+            purchaseLevel = purchaseLevelRepo.findByLevel(level);
+        }
+        return purchaseLevel;
+    }
+
 }

+ 7 - 9
src/main/java/com/izouma/nineth/web/MetaPlayerInfoController.java

@@ -4,8 +4,12 @@ import cn.hutool.core.collection.CollectionUtil;
 import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.exception.BusinessException;
-import com.izouma.nineth.repo.*;
+import com.izouma.nineth.repo.MetaPlayerOfflineInfoRepo;
+import com.izouma.nineth.repo.MetaPlayerWearRepo;
+import com.izouma.nineth.repo.MetaUserRepo;
+import com.izouma.nineth.repo.UserRepo;
 import com.izouma.nineth.service.MetaPlayerInfoService;
+import com.izouma.nineth.service.PurchaseLevelService;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
@@ -27,7 +31,7 @@ public class MetaPlayerInfoController {
 
     private MetaUserRepo metaUserRepo;
 
-    private PurchaseLevelRepo purchaseLevelRepo;
+    private PurchaseLevelService purchaseLevelService;
 
     @GetMapping("/{userId}/detail")
     public MetaRestResult<MetaPlayerInfo> findMetaPlayerInfo(@PathVariable Long userId) {
@@ -38,13 +42,7 @@ public class MetaPlayerInfoController {
         MetaPlayerInfo metaPlayerInfo = new MetaPlayerInfo();
         metaPlayerInfo.setAvatar(user.getAvatar());
         metaPlayerInfo.setLevel(user.getLevel());
-        int maxStartLevel = purchaseLevelRepo.findMaxStartLevel();
-        PurchaseLevel purchaseLevel;
-        if (user.getLevel() >= maxStartLevel) {
-            purchaseLevel = purchaseLevelRepo.findByStartLevel(maxStartLevel);
-        } else {
-            purchaseLevel = purchaseLevelRepo.findByLevel(user.getLevel());
-        }
+        PurchaseLevel purchaseLevel = purchaseLevelService.findPurchaseLevelByLevel(user.getLevel());
         metaPlayerInfo.setRealm(purchaseLevel.getRealm());
         metaPlayerInfo.setTitle(purchaseLevel.getTitle());
         metaPlayerInfo.setNickname(user.getNickname());

+ 2 - 1
src/main/java/com/izouma/nineth/web/MetaSpatialInfoController.java

@@ -8,6 +8,7 @@ import com.izouma.nineth.repo.MetaSpatialInfoRepo;
 import com.izouma.nineth.service.MetaSpatialInfoService;
 import com.izouma.nineth.utils.ObjUtils;
 import com.izouma.nineth.utils.excel.ExcelUtils;
+import jodd.util.StringUtil;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
@@ -33,7 +34,7 @@ public class MetaSpatialInfoController extends BaseController {
                 throw new BusinessException("当前资产id已经存在");
             }
         }
-        if (Objects.nonNull(record.getHcTxHash())) {
+        if (StringUtil.isNotBlank(record.getHcTxHash())) {
             MetaSpatialInfo metaSpatialInfo = metaSpatialInfoRepo.findByHcTxHashAndDel(record.getHcTxHash(), false);
             if (Objects.nonNull(metaSpatialInfo) && !Objects.equals(metaSpatialInfo.getId(), record.getId())) {
                 throw new BusinessException("当前hash已经存在");

+ 74 - 43
src/main/java/com/izouma/nineth/websocket/PublicScreenChatWebsocket.java

@@ -2,8 +2,12 @@ package com.izouma.nineth.websocket;
 
 import com.alibaba.fastjson.JSON;
 import com.izouma.nineth.domain.PublicScreenChat;
-import com.izouma.nineth.dto.MetaWebsocketMessage;
+import com.izouma.nineth.domain.PurchaseLevel;
+import com.izouma.nineth.domain.User;
+import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.PublicScreenChatRepo;
+import com.izouma.nineth.repo.UserRepo;
+import com.izouma.nineth.service.PurchaseLevelService;
 import com.izouma.nineth.utils.ApplicationContextUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -32,10 +36,20 @@ public class PublicScreenChatWebsocket extends WebsocketCommon {
 
     private final String PREFIX = "meta-chat:";
 
+    private UserRepo userRepo;
+
+    private PurchaseLevelService purchaseLevelService;
+
     private void init() {
         if (Objects.isNull(publicScreenChatRepo)) {
             publicScreenChatRepo = (PublicScreenChatRepo) ApplicationContextUtil.getBean("publicScreenChatRepo");
         }
+        if (Objects.isNull(userRepo)) {
+            userRepo = (UserRepo) ApplicationContextUtil.getBean("userRepo");
+        }
+        if (Objects.isNull(purchaseLevelService)) {
+            purchaseLevelService = (PurchaseLevelService) ApplicationContextUtil.getBean("purchaseLevelService");
+        }
     }
 
     @OnOpen
@@ -43,29 +57,28 @@ public class PublicScreenChatWebsocket extends WebsocketCommon {
         init();
         // 判断当前玩家是否在其他地方登陆
         if (clients.containsKey(PREFIX.concat(userId))) {
-            String msg = String.format("玩家[%S]已在别处登陆,sessionId为[%S],正在为您关闭本连接", userId, session.getId());
-            log.info(msg);
-            // 关闭连接
-            MetaWebsocketMessage message = new MetaWebsocketMessage();
-            message.setType(3);
-            message.setTip(msg);
-            sendMessageTo(clients, JSON.toJSONString(message), PREFIX.concat(userId));
+            String msg = String.format("已在别处登陆,sessionId为[%S],正在为您关闭本连接", session.getId());
+            exceptionHandle(userId, msg);
             try {
-                log.info("关闭上次登陆的session连接");
+                log.info("关闭session连接");
                 clients.get(PREFIX.concat(userId)).close();
             } catch (Exception e) {
-                log.error("session close throw exception:", e);
+                exceptionHandle(userId, String.format("session close throw exception[%S]", e));
+                return;
             }
         }
         log.info("现在来连接的sessionId:" + session.getId() + "玩家id:" + userId + "玩家昵称" + nickName);
         clients.put(PREFIX.concat(userId), session);
-        PublicScreenChat publicScreenChat = new PublicScreenChat();
-        publicScreenChat.setFromNickName(nickName);
-        publicScreenChat.setFromUserId(userId);
-        publicScreenChat.setMessageInfo(String.format("玩家[%S][%S]进入大厅", userId, nickName));
-        publicScreenChat.setTime(LocalDateTime.now());
-        PublicScreenChat save = publicScreenChatRepo.save(publicScreenChat);
-        sendMessageToOther(clients, JSON.toJSONString(save), PREFIX.concat(userId));
+        String format = String.format("玩家[%S][%S]进入大厅", userId, nickName);
+        PublicScreenChat publicScreenChat;
+        try {
+            publicScreenChat = savePublicScreenChat(userId, format);
+        } catch (Exception e) {
+            String errMsg = String.format("玩家进入大厅,保存信息发生异常[%S]", e);
+            exceptionHandle(userId, errMsg);
+            return;
+        }
+        sendMessageToOther(clients, JSON.toJSONString(publicScreenChat), PREFIX.concat(userId));
     }
 
     @OnError
@@ -78,42 +91,36 @@ public class PublicScreenChatWebsocket extends WebsocketCommon {
     public void onClose(@PathParam("nickName") String nickName, @PathParam("userId") String userId, Session session) {
         init();
         log.info(String.format("sessionId:[%S] userId:[%S] is closed", session.getId(), userId));
-        PublicScreenChat publicScreenChat = new PublicScreenChat();
-        publicScreenChat.setFromNickName(nickName);
-        publicScreenChat.setFromUserId(userId);
-        publicScreenChat.setMessageInfo(String.format("玩家[%S][%S]离开大厅", userId, nickName));
-        publicScreenChat.setTime(LocalDateTime.now());
-        PublicScreenChat save = publicScreenChatRepo.save(publicScreenChat);
-        sendMessageToOther(clients, JSON.toJSONString(save), PREFIX.concat(userId));
+        String format = String.format("玩家[%S][%S]离开大厅", userId, nickName);
+        PublicScreenChat publicScreenChat;
+        try {
+            publicScreenChat = savePublicScreenChat(userId, format);
+        } catch (Exception e) {
+            String errMsg = String.format("玩家离开大厅,保存信息发生异常[%S]", e);
+            exceptionHandle(userId, errMsg);
+            return;
+        }
+        sendMessageToOther(clients, JSON.toJSONString(publicScreenChat), PREFIX.concat(userId));
         clients.remove(PREFIX.concat(userId));
     }
 
     @OnMessage
-    public void onMessage(@PathParam("nickName") String nickName, @PathParam("userId") String userId, String message) {
+    public void onMessage(@PathParam("userId") String userId, String message) {
         init();
         if (StringUtils.isBlank(message)) {
-            log.error("Illegal parameter : message can not be null");
+            String errMsg = "Illegal parameter : message can not be null";
+            exceptionHandle(userId, errMsg);
             return;
         }
-        PublicScreenChat publicScreenChat = JSON.parseObject(message, PublicScreenChat.class);
-        if (Objects.isNull(publicScreenChat)) {
-            log.error("metaChatResultMessage can not be null");
+        PublicScreenChat publicScreenChat;
+        try {
+            publicScreenChat = savePublicScreenChat(userId, message);
+        } catch (Exception e) {
+            String errMsg = String.format("玩家发送消息,保存信息发生异常[%S]", e);
+            exceptionHandle(userId, errMsg);
             return;
         }
-        if (StringUtils.isBlank(publicScreenChat.getMessageInfo())) {
-            log.error("Illegal parameter : messageInfo can not be null");
-            return;
-        }
-        if (StringUtils.isBlank(publicScreenChat.getFromNickName())) {
-            publicScreenChat.setFromNickName(nickName);
-        }
-        if (StringUtils.isBlank(publicScreenChat.getFromUserId())) {
-            publicScreenChat.setFromUserId(userId);
-        }
-        publicScreenChat.setTime(LocalDateTime.now());
-        // 消息入库
-        PublicScreenChat save = publicScreenChatRepo.save(publicScreenChat);
-        sendMessageToAll(clients, JSON.toJSONString(save), PREFIX.concat(userId));
+        sendMessageToAll(clients, JSON.toJSONString(publicScreenChat), PREFIX.concat(userId));
     }
 
     /**
@@ -135,5 +142,29 @@ public class PublicScreenChatWebsocket extends WebsocketCommon {
             }
         });
     }
+
+    private PublicScreenChat savePublicScreenChat(String userId, String messageInfo) {
+        User user = userRepo.findById(Long.parseLong(userId)).orElse(null);
+        if (Objects.isNull(user)) {
+            throw new BusinessException("用户信息不存在");
+        }
+        PublicScreenChat publicScreenChat = new PublicScreenChat();
+        publicScreenChat.setUserId(userId);
+        publicScreenChat.setAvatar(user.getAvatar());
+        publicScreenChat.setNickname(user.getNickname());
+        publicScreenChat.setLevel(user.getLevel());
+        PurchaseLevel purchaseLevel = purchaseLevelService.findPurchaseLevelByLevel(publicScreenChat.getLevel());
+        publicScreenChat.setRealm(purchaseLevel.getRealm());
+        publicScreenChat.setTitle(purchaseLevel.getTitle());
+        publicScreenChat.setMessageInfo(messageInfo);
+        publicScreenChat.setTime(LocalDateTime.now());
+        return publicScreenChatRepo.save(publicScreenChat);
+    }
+
+    private void exceptionHandle(String userId, String msg) {
+        log.error(msg);
+        // 推送消息给该玩家
+        sendMessageTo(clients, JSON.toJSONString(msg), PREFIX.concat(userId));
+    }
 }
 

+ 16 - 2
src/main/vue/src/views/PublicScreenChatList.vue

@@ -34,8 +34,22 @@
 			v-loading="fetchingData"
 		>
 			<el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
-			<el-table-column prop="fromNickName" label="用户昵称"> </el-table-column>
-			<el-table-column prop="fromUserId" label="用户id"> </el-table-column>
+			<el-table-column prop="nickname" label="用户昵称"> </el-table-column>
+			<el-table-column prop="userId" label="用户id"> </el-table-column>
+			<el-table-column prop="avatar" label="头像">
+				<template slot-scope="{ row }">
+					<el-image
+						style="width: 30px; height: 30px"
+						:src="row.avatar"
+						fit="cover"
+						:preview-src-list="[row.avatar]"
+					>
+					</el-image>
+				</template>
+			</el-table-column>
+			<el-table-column prop="level" label="等级"> </el-table-column>
+			<el-table-column prop="realm" label="境界"> </el-table-column>
+			<el-table-column prop="title" label="头衔"> </el-table-column>
 			<el-table-column prop="messageInfo" label="消息内容"> </el-table-column>
 			<el-table-column prop="time" label="消息发送时间"> </el-table-column>
 		</el-table>