From b6b26e591f218f47fedfbc8917cda033a8a7d2f9 Mon Sep 17 00:00:00 2001 From: yyb <1416014977@qq.com> Date: Mon, 26 May 2025 14:04:28 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=81=8A=E5=A4=A9=E5=AE=A4=E9=81=97?= =?UTF-8?q?=E6=BC=8F=E9=98=9F=E5=88=97=E6=B7=BB=E5=8A=A0=EF=BC=8Cdgb?= =?UTF-8?q?=E7=B3=BB=E5=88=97=E5=B9=B8=E8=BF=90=E5=80=BC=E5=85=A8=E7=BD=91?= =?UTF-8?q?=E6=8A=A5=E5=9D=97=E6=95=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../m2pool/system/api/model/LoginUser.java | 12 +++ .../auth/controller/TokenController.java | 14 ++++ .../m2pool/auth/service/SysLoginService.java | 84 +++++++++++++++++++ .../chat/config/WebSocketBrokerConfig.java | 2 +- .../com/m2pool/chat/constant/Destination.java | 2 +- .../chat/controller/ChatRoomController.java | 2 +- .../chat/coverter/CommonMessageConvert.java | 3 +- .../chat/listener/WebSocketEventListener.java | 8 +- .../service/impl/ChatMessageServiceImpl.java | 8 +- .../service/impl/ChatRoomServiceImpl.java | 2 +- .../chat/service/impl/StompServiceImpl.java | 9 +- .../pool/service/impl/PoolServiceImpl.java | 10 +-- .../java/com/m2pool/pool/utils/NodeRpc.java | 1 - m2pool-modules/pom.xml | 1 + 14 files changed, 136 insertions(+), 22 deletions(-) diff --git a/m2pool-api/api-system/src/main/java/com/m2pool/system/api/model/LoginUser.java b/m2pool-api/api-system/src/main/java/com/m2pool/system/api/model/LoginUser.java index 816e2d0..917323c 100644 --- a/m2pool-api/api-system/src/main/java/com/m2pool/system/api/model/LoginUser.java +++ b/m2pool-api/api-system/src/main/java/com/m2pool/system/api/model/LoginUser.java @@ -1,6 +1,8 @@ package com.m2pool.system.api.model; import com.m2pool.system.api.entity.SysUser; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -12,35 +14,45 @@ import java.util.Set; * @Author dy */ @Data +@ApiModel(description = "登录用户信息") public class LoginUser implements Serializable { private static final long serialVersionUID = 1L; /** 用户唯一标识 */ + @ApiModelProperty(value = "用户唯一标识") private String token; /** 用户名id */ + @ApiModelProperty(value = "用户名id") private Long userid; /** 用户名 */ + @ApiModelProperty(value = "用户名") private String username; /** 登录时间 */ + @ApiModelProperty(value = "登录时间") private Long loginTime; /** 过期时间 */ + @ApiModelProperty(value = "过期时间") private Long expireTime; /** 登录IP地址 */ + @ApiModelProperty(value = "登录IP地址") private String ipaddr; /** 权限列表 */ + @ApiModelProperty(value = "权限列表") private Set permissions; /** 角色列表 */ + @ApiModelProperty(value = "角色列表") private Set roles; /** 用户信息 */ + @ApiModelProperty(value = "用户详情信息对象") private SysUser sysUser; } diff --git a/m2pool-auth/src/main/java/com/m2pool/auth/controller/TokenController.java b/m2pool-auth/src/main/java/com/m2pool/auth/controller/TokenController.java index 1e7bed5..558592a 100644 --- a/m2pool-auth/src/main/java/com/m2pool/auth/controller/TokenController.java +++ b/m2pool-auth/src/main/java/com/m2pool/auth/controller/TokenController.java @@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; +import java.util.Map; /** @@ -49,6 +50,19 @@ public class TokenController { } + /** + * 后台管理系统登录 + * @param loginManageBody + * @return + */ + @PostMapping("managerLogin") + @ApiOperation(value = "后台管理系统登录") + public R> managerLogin(@RequestBody @Valid LoginManageBody loginManageBody) + { + return sysLoginService.managerLogin(loginManageBody); + } + + @PostMapping("registerCode") public R emailCode(@Validated @RequestBody GetEmailCodeEntity entity) { diff --git a/m2pool-auth/src/main/java/com/m2pool/auth/service/SysLoginService.java b/m2pool-auth/src/main/java/com/m2pool/auth/service/SysLoginService.java index ff70cb5..4c05816 100644 --- a/m2pool-auth/src/main/java/com/m2pool/auth/service/SysLoginService.java +++ b/m2pool-auth/src/main/java/com/m2pool/auth/service/SysLoginService.java @@ -28,7 +28,11 @@ import com.m2pool.system.api.model.LoginUser; import org.apache.ibatis.annotations.Update; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestBody; +import javax.validation.Valid; +import java.util.Map; +import java.util.Set; import java.util.concurrent.TimeUnit; @@ -232,6 +236,86 @@ public class SysLoginService { return R.success(tokenService.createToken(userInfo)); } + + public R> managerLogin(LoginManageBody loginManageBody){ + //邮箱 + String email = loginManageBody.getUserName(); + + //String password= loginBody.getPassword(); + String password=""; + + try { + password = RsaUtils.decryptByPrivateKey(loginManageBody.getPassword()); + password = StringUtils.clean(password); + }catch (Exception e){ + return R.fail(401,"加密密码传参有误"); + } + // 用户名或密码为空 错误 + if (StringUtils.isAnyBlank(email, password)) + { + recordLogininfor(email, Constants.LOGIN_FAIL, "邮箱/密码必须填写"); + throw new ServiceException("邮箱/密码必须填写"); + } + if(!StringUtils.isBlank(email)){ + if(!email.matches(EMAIL_REGEX)){ + throw new ServiceException("邮箱格式错误"); + } + }else { + throw new ServiceException("邮箱为必填项"); + } + + // 密码如果不在指定范围内 错误 + if (password.length() < UserConstants.PASSWORD_MIN_LENGTH + || password.length() > UserConstants.PASSWORD_MAX_LENGTH) + { + recordLogininfor(email, Constants.LOGIN_FAIL, "用户密码不在指定范围"); + throw new ServiceException("用户密码不在指定范围"); + } + // 查询用户信息 + R userResult = remoteUserService.getUserInfo(email, SecurityConstants.INNER); + + if (R.FAIL == userResult.getCode()) + { + throw new ServiceException(userResult.getMsg()); + } + + if (StringUtils.isNull(userResult.getData())) + { + recordLogininfor(email, Constants.LOGIN_FAIL, "登录用户不存在"); + throw new ServiceException("登录用户:" + email + " 不存在"); + } + LoginUser userInfo = userResult.getData(); + SysUser user = userResult.getData().getSysUser(); + Set roles = userInfo.getRoles(); + + + + if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + recordLogininfor(email, Constants.LOGIN_FAIL, "对不起,您的账号已被删除"); + throw new ServiceException("对不起,您的账号:" + email + " 已被删除"); + } + if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + recordLogininfor(email, Constants.LOGIN_FAIL, "用户已停用,请联系管理员"); + throw new ServiceException("对不起,您的账号:" + email + " 已停用"); + } + + if(!SecurityUtils.matchesPassword(password, user.getPassword())){ + throw new ServiceException("密码错误,请重新输入"); + } + + //必须是管理员才能登录 + if(!roles.contains("3")){ + recordLogininfor(email, Constants.LOGIN_FAIL, "对不起,您的账号没有权限不能登录后台管理"); + throw new ServiceException("对不起,您的账号:" + email + " 没有权限不能登录后台管理"); + } + + recordLogininfor(email, Constants.LOGIN_SUCCESS, "后台管理系统用户登录成功"); + + return R.success(tokenService.createToken(userInfo)); + } + public void logout(String loginName) { recordLogininfor(loginName, Constants.LOGOUT, "退出成功"); diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/config/WebSocketBrokerConfig.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/config/WebSocketBrokerConfig.java index a8b4886..c1cf3b0 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/config/WebSocketBrokerConfig.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/config/WebSocketBrokerConfig.java @@ -63,7 +63,7 @@ public class WebSocketBrokerConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { - config.enableSimpleBroker(Destination.TOPIC, Destination.QUEUE_USER,Destination.QUEUE_CUSTOMER) + config.enableSimpleBroker(Destination.TOPIC, Destination.QUEUE_USER,Destination.QUEUE_CUSTOMER,Destination.QUEUE_CLOSE_ROOM) .setHeartbeatValue(new long[] {10000, 10000}) .setTaskScheduler(new DefaultManagedTaskScheduler()); diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/constant/Destination.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/constant/Destination.java index b7e438e..c393e4b 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/constant/Destination.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/constant/Destination.java @@ -25,7 +25,7 @@ public class Destination { /** * 聊天室关闭 路径 */ - public static final String QUEUE_CLOSE_ROOM = "/close/room/"; + public static final String QUEUE_CLOSE_ROOM = "/queue/close/room/"; /** * stomp 默认群发 目的地 diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatRoomController.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatRoomController.java index b76d090..93ce92b 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatRoomController.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/controller/ChatRoomController.java @@ -49,4 +49,4 @@ public class ChatRoomController { public R updateRoom(@RequestBody CharRoomVo charRoomVo) { return chatRoomService.updateRoom(charRoomVo); } -} \ No newline at end of file +} diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/coverter/CommonMessageConvert.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/coverter/CommonMessageConvert.java index 637483a..e7556ff 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/coverter/CommonMessageConvert.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/coverter/CommonMessageConvert.java @@ -27,6 +27,7 @@ public class CommonMessageConvert implements MessageConverter { if (message.getPayload() instanceof byte[]) { try { String textPayload = new String((byte[]) message.getPayload(), StandardCharsets.UTF_8); + System.out.println("发送者发送到服务器的消息:"+textPayload); return JsonUtil.convertString2Object(textPayload,targetClass); } catch (Exception e) { throw new MessageDeliveryException( "消息格式错误"); @@ -46,8 +47,8 @@ public class CommonMessageConvert implements MessageConverter { @Override public Message toMessage(Object payload, MessageHeaders headers) { String str = JsonUtil.toJson(payload); + System.out.println("发送给接受者的消息:"+payload); byte[] bytes = str.getBytes(StandardCharsets.UTF_8); - System.out.println("发送给前端的消息"+new GenericMessage<>(bytes, headers)); return new GenericMessage<>(bytes, headers); } diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/listener/WebSocketEventListener.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/listener/WebSocketEventListener.java index 5fee3cd..61e1b22 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/listener/WebSocketEventListener.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/listener/WebSocketEventListener.java @@ -42,12 +42,14 @@ public class WebSocketEventListener implements ApplicationListener message = event.getMessage(); StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message); - if (user != null && accessor.getCommand() == StompCommand.DISCONNECT && TOURIST.equals(user.getType())) { + LOGGER.info("用户{}断开链接:用户类型{},消息类型{}",user.getName(), user.getType(), accessor.getCommand()); + if (accessor.getCommand() == StompCommand.DISCONNECT && TOURIST.equals(user.getType())) { //游客断开链接,通知客服删除游客聊天室 stompService.customerCloseRoom(user.getName()); // 删除数据库中游客数据 - chatRoomMapper.delete(new LambdaUpdateWrapper().eq(ChatRoom::getUserOneEmail, user.getName())); - chatMessageMapper.delete(new LambdaUpdateWrapper().eq(ChatMessage::getSendEmail, user.getName())); + int delete = chatRoomMapper.delete(new LambdaUpdateWrapper().eq(ChatRoom::getUserOneEmail, user.getName())); + int delete1 = chatMessageMapper.delete(new LambdaUpdateWrapper().eq(ChatMessage::getSendEmail, user.getName())); + LOGGER.info("删除游客聊天室个数:{},消息个数{}", delete,delete1); } } } diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatMessageServiceImpl.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatMessageServiceImpl.java index c4a62c0..9c3c4e1 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatMessageServiceImpl.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatMessageServiceImpl.java @@ -47,11 +47,15 @@ public class ChatMessageServiceImpl implements ChatMessageService { if(StringUtils.isEmpty(email)){ return R.fail("查询失败,用户标识或邮箱不能为空"); } + if(roomId == null){ + return R.fail("查询聊天消息失败,聊天室ID不能为空"); + } + //判断当前消息是否是七天内消息 if(id != null && id != 0){ chatMessage = chatMessageMapper.selectById(id); }else{ chatMessage = chatMessageMapper.selectOne(new LambdaQueryWrapper() - .eq(ChatMessage::getRoomId, roomId).last("LIMIT 1")); + .eq(ChatMessage::getRoomId, roomId).orderByDesc(ChatMessage::getId).last("LIMIT 1")); } List recentlyMessage; if(chatMessage != null){ @@ -95,4 +99,4 @@ public class ChatMessageServiceImpl implements ChatMessageService { } return R.fail("聊天室不存在"); } -} \ No newline at end of file +} diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatRoomServiceImpl.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatRoomServiceImpl.java index d4c43c9..b01da3b 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatRoomServiceImpl.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/ChatRoomServiceImpl.java @@ -107,4 +107,4 @@ public class ChatRoomServiceImpl extends ServiceImpl i } return R.fail("修改失败,不存在该聊天室"); } -} \ No newline at end of file +} diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java index c16a8b0..4f3917b 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java @@ -24,6 +24,7 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.Date; +import static com.alibaba.nacos.client.utils.EnvUtil.LOGGER; import static com.m2pool.chat.constant.UserType.CUSTOMER; @Service @@ -177,13 +178,13 @@ public class StompServiceImpl implements StompService { /** * 用于客服关闭断线客服端聊天室接口 - * @param roomId 游客与客服聊天室id, 实际为游客邮箱 + * @param userName 游客邮箱 * @return */ - public void customerCloseRoom(String roomId){ + public void customerCloseRoom(String userName){ messagingTemplate.convertAndSendToUser( webSocketConfig.getDefaultCustomerEmail(), - Destination.QUEUE + Destination.QUEUE_CLOSE_ROOM + webSocketConfig.getDefaultCustomerEmail(),roomId); + Destination.QUEUE_CLOSE_ROOM + webSocketConfig.getDefaultCustomerEmail(),userName); } -} \ No newline at end of file +} diff --git a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/PoolServiceImpl.java b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/PoolServiceImpl.java index fc8a3ea..80ef4e8 100644 --- a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/PoolServiceImpl.java +++ b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/PoolServiceImpl.java @@ -98,14 +98,8 @@ public class PoolServiceImpl implements PoolService { dto.setTotalDifficulty(PowerUnitUtils.difficultyFormat(info.getDifficulty())); - BigDecimal netPower; - if(pool.getBlockTime() != 0){ - netPower = BigDecimal.valueOf(info.getDifficulty().longValue() * 2 ^ 32 / pool.getBlockTime()); - }else{ - netPower = info.getPower(); - } //全网算力 调用转换工具 动态转换为数值+单位 - dto.setTotalPower(PowerUnitUtils.powerFormat(netPower,pool.getCoin())); + dto.setTotalPower(PowerUnitUtils.powerFormat(info.getPower(),pool.getCoin())); //System.out.println("dto"+dto); }else { System.out.println("未能从节点获取到信息"); @@ -113,6 +107,7 @@ public class PoolServiceImpl implements PoolService { BigDecimal price = redisService.getCacheObject(pool.getCoin() + "_price"); dto.setPrice(price.toEngineeringString()+ " USD"); + dto.setHeight(info.getHeight()); } //从enums中拿币种名、页面显示名、币种对应算法 @@ -120,6 +115,7 @@ public class PoolServiceImpl implements PoolService { dto.setName(pool.getName()); dto.setAlgorithm(pool.getAlgorithm()); + //从池子算力统计表pool_stats拿对应矿池算力 30m //从实时表拿24h double mhs = Convert.toDouble(poolMapper.getNowPoolDailyPower(pool.getMhs()+"_realv2"),0.0) * pool.getFac(); diff --git a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/utils/NodeRpc.java b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/utils/NodeRpc.java index 40896b2..025136d 100644 --- a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/utils/NodeRpc.java +++ b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/utils/NodeRpc.java @@ -30,7 +30,6 @@ public class NodeRpc{ public static String getResult(String coin,String method,String[] params) { NodeConfig config = (NodeConfig) EnumUtils.get(NodeConfig.class, coin); - System.out.println("----------执行rpc接口调用"); String uri ="http://"+config.getIp()+":"+config.getHost(); String auth =config.getUser()+":"+config.getPwd(); diff --git a/m2pool-modules/pom.xml b/m2pool-modules/pom.xml index 7c52f6c..93bd9f8 100644 --- a/m2pool-modules/pom.xml +++ b/m2pool-modules/pom.xml @@ -22,6 +22,7 @@ m2pool-file m2pool-oapi m2pool-chat + m2pool-manage