implements StatisticsFlowService {
+
+}
diff --git a/springboot-backend/src/main/java/com/admin/service/impl/UserServiceImpl.java b/springboot-backend/src/main/java/com/admin/service/impl/UserServiceImpl.java
index ec9da1a..e49f5dd 100644
--- a/springboot-backend/src/main/java/com/admin/service/impl/UserServiceImpl.java
+++ b/springboot-backend/src/main/java/com/admin/service/impl/UserServiceImpl.java
@@ -1,5 +1,7 @@
package com.admin.service.impl;
+import cloud.tianai.captcha.application.ImageCaptchaApplication;
+import cloud.tianai.captcha.spring.plugins.secondary.SecondaryVerificationApplication;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.admin.common.dto.*;
@@ -7,28 +9,24 @@ import com.admin.common.lang.R;
import com.admin.common.utils.GostUtil;
import com.admin.common.utils.JwtUtil;
import com.admin.common.utils.Md5Util;
-import com.admin.entity.Forward;
-import com.admin.entity.Node;
-import com.admin.entity.Tunnel;
-import com.admin.entity.User;
-import com.admin.entity.UserTunnel;
+import com.admin.entity.*;
import com.admin.mapper.ForwardMapper;
import com.admin.mapper.UserMapper;
import com.admin.mapper.UserTunnelMapper;
-import com.admin.service.NodeService;
-import com.admin.service.TunnelService;
-import com.admin.service.UserService;
-import com.admin.service.UserTunnelService;
+import com.admin.service.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
/**
*
@@ -77,8 +75,7 @@ public class UserServiceImpl extends ServiceImpl implements Us
private static final String ERROR_GET_PACKAGE_INFO_FAILED = "获取套餐信息失败";
private static final String ERROR_CURRENT_PASSWORD_WRONG = "当前密码错误";
private static final String ERROR_PASSWORD_NOT_MATCH = "新密码和确认密码不匹配";
- private static final String SUCCESS_PASSWORD_UPDATE = "密码修改成功";
-
+
/** 默认账号密码 */
private static final String DEFAULT_USERNAME = "admin_user";
private static final String DEFAULT_PASSWORD = "admin_user";
@@ -112,28 +109,48 @@ public class UserServiceImpl extends ServiceImpl implements Us
@Resource
UserTunnelService userTunnelService;
+ @Resource
+ ViteConfigService viteConfigService;
+
+ @Resource
+ StatisticsFlowService statisticsFlowService;
+
+ @Resource
+ private ImageCaptchaApplication application;
+
// ========== 公共接口实现 ==========
/**
* 用户登录
- * 验证用户名密码,检查账户状态,生成JWT令牌
+ * 验证验证码、用户名密码,检查账户状态,生成JWT令牌
*
* @param loginDto 登录数据传输对象
* @return 登录结果响应,包含令牌和用户信息
*/
@Override
public R login(LoginDto loginDto) {
- // 1. 验证用户凭据
+
+ // 1. 验证验证码
+ ViteConfig viteConfig = viteConfigService.getOne(new QueryWrapper().eq("name", "captcha_enabled"));
+ if (viteConfig != null && Objects.equals(viteConfig.getValue(), "true")) {
+ if (StringUtils.isBlank(loginDto.getCaptchaId())) return R.err("验证码校验失败");
+ boolean valid = ((SecondaryVerificationApplication) application).secondaryVerification(loginDto.getCaptchaId());
+ if (!valid) return R.err("验证码校验失败");
+ }
+
+
+
+ // 2. 验证用户凭据
LoginValidationResult validationResult = validateUserCredentials(loginDto);
if (validationResult.isHasError()) {
return R.err(validationResult.getErrorMessage());
}
- // 2. 生成令牌并返回用户信息
+ // 3. 生成令牌并返回用户信息
User user = validationResult.getUser();
String token = JwtUtil.generateToken(user);
- // 3. 检查是否使用默认账号密码
+ // 4. 检查是否使用默认账号密码
boolean requirePasswordChange = isDefaultCredentials(loginDto.getUsername(), loginDto.getPassword());
return R.ok(MapUtil.builder()
@@ -238,6 +255,7 @@ public class UserServiceImpl extends ServiceImpl implements Us
try {
// 2. 级联删除用户相关数据
deleteUserRelatedData(id);
+ statisticsFlowService.remove(new QueryWrapper().eq("user_id", id));
// 3. 删除用户
boolean result = this.removeById(id);
return result ? R.ok(SUCCESS_DELETE_MSG) : R.err(ERROR_DELETE_FAILED);
@@ -345,6 +363,7 @@ public class UserServiceImpl extends ServiceImpl implements Us
// ========== 私有辅助方法 ==========
+
/**
* 验证用户登录凭据
*
@@ -655,12 +674,16 @@ public class UserServiceImpl extends ServiceImpl implements Us
// 3. 获取转发详情
List forwards = userMapper.getUserForwardDetails(user.getId().intValue());
+
+ // 4. 查询最近24小时流量信息,没有的补0
+ List statisticsFlows = getLast24HoursFlowStatistics(user.getId());
- // 4. 构造返回结果
+ // 5. 构造返回结果
UserPackageDto packageDto = new UserPackageDto();
packageDto.setUserInfo(userInfo);
packageDto.setTunnelPermissions(tunnelPermissions);
packageDto.setForwards(forwards);
+ packageDto.setStatisticsFlows(statisticsFlows);
return packageDto;
}
@@ -697,6 +720,104 @@ public class UserServiceImpl extends ServiceImpl implements Us
return userMapper.getUserTunnelDetails(userId.intValue());
}
+ /**
+ * 获取用户最近24小时的流量统计数据,没有数据的时间点补0
+ *
+ * @param userId 用户ID
+ * @return 最近24小时流量统计列表
+ */
+ private List getLast24HoursFlowStatistics(Long userId) {
+ try {
+ // 按ID倒序查最近24条记录(ID越大越新,时间就是23:00, 22:00, 21:00...这样倒序)
+ List recentFlows = statisticsFlowService.list(
+ new QueryWrapper()
+ .eq("user_id", userId)
+ .orderByDesc("id")
+ .last("LIMIT 24")
+ );
+
+ List result = new ArrayList<>(recentFlows);
+
+ // 如果查出来的记录不足24条,需要补0和对应的时间
+ if (result.size() < 24) {
+ // 获取最早记录的时间,继续往前推
+ int startHour = getCurrentHour();
+ if (!result.isEmpty()) {
+ // 从最后一条记录的时间继续往前推
+ String lastTime = result.get(result.size() - 1).getTime();
+ startHour = parseHour(lastTime) - 1;
+ }
+
+ // 补0到24条
+ while (result.size() < 24) {
+ if (startHour < 0) startHour = 23; // 跨天处理
+
+ StatisticsFlow emptyFlow = new StatisticsFlow();
+ emptyFlow.setUserId(userId);
+ emptyFlow.setFlow(0L);
+ emptyFlow.setTotalFlow(0L);
+ emptyFlow.setTime(String.format("%02d:00", startHour));
+ result.add(emptyFlow);
+
+ startHour--;
+ }
+ }
+
+ log.debug("用户 {} 获取到 {} 条实际记录,补齐为 {} 条24小时记录", userId, recentFlows.size(), result.size());
+ return result;
+
+ } catch (Exception e) {
+ log.error("获取用户 {} 最近24小时流量统计失败", userId, e);
+ // 返回24条全0数据,时间从当前小时往前推
+ return generateEmpty24HourData(userId);
+ }
+ }
+
+ /**
+ * 获取当前小时(0-23)
+ */
+ private int getCurrentHour() {
+ return java.time.LocalDateTime.now().getHour();
+ }
+
+ /**
+ * 解析时间字符串获取小时数
+ */
+ private int parseHour(String timeStr) {
+ try {
+ if (timeStr != null && timeStr.contains(":")) {
+ return Integer.parseInt(timeStr.split(":")[0]);
+ }
+ } catch (Exception e) {
+ // 解析失败,返回当前小时
+ }
+ return getCurrentHour();
+ }
+
+ /**
+ * 生成24小时全0数据(异常情况使用)
+ */
+ private List generateEmpty24HourData(Long userId) {
+ List result = new ArrayList<>();
+ int currentHour = getCurrentHour();
+
+ for (int i = 0; i < 24; i++) {
+ StatisticsFlow emptyFlow = new StatisticsFlow();
+ emptyFlow.setUserId(userId);
+ emptyFlow.setFlow(0L);
+ emptyFlow.setTotalFlow(0L);
+ emptyFlow.setTime(String.format("%02d:00", currentHour));
+ result.add(emptyFlow);
+
+ currentHour--;
+ if (currentHour < 0) currentHour = 23;
+ }
+
+ return result;
+ }
+
+
+
diff --git a/springboot-backend/src/main/resources/application.yml b/springboot-backend/src/main/resources/application.yml
index a9545ed..477f180 100644
--- a/springboot-backend/src/main/resources/application.yml
+++ b/springboot-backend/src/main/resources/application.yml
@@ -40,4 +40,10 @@ mybatis-plus:
jwt-secret: ${JWT_SECRET}
log-dir: ${LOG_DIR}
-server-addr: ${SERVER_ADDR}
+
+# 验证码配置
+captcha:
+ init-default-resource: true
+ secondary:
+ enabled: true
+ expire: 120000
diff --git a/springboot-backend/src/main/resources/bgimages/1.jpg b/springboot-backend/src/main/resources/bgimages/1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f96ca1f31f25bc26adad916a7a89a85c68b35ff9
GIT binary patch
literal 80339
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