sendSmsCode(String mobile) {
+ String codeObj = RedisUtils.get(CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.APPSMS.getType() + StringPool.AT + mobile);
- if (StrUtil.isNotBlank(codeObj)) {
- log.info("手机号验证码未过期:{},{}", mobile, codeObj);
- return R.ok(Boolean.FALSE, MsgUtils.getMessage(ErrorCodes.SYS_APP_SMS_OFTEN));
- }
+ if (StrUtil.isNotBlank(codeObj)) {
+ log.info("手机号验证码未过期:{},{}", mobile, codeObj);
+ return R.ok(Boolean.FALSE, MsgUtils.getMessage(AppErrorCodes.APP_SMS_OFTEN));
+ }
- String code = RandomUtil.randomNumbers(Integer.parseInt(SecurityConstants.CODE_SIZE));
- log.debug("手机号生成验证码成功:{},{}", mobile, code);
- RedisUtils.set(CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.APPSMS.getType() + StringPool.AT + mobile, code, SecurityConstants.CODE_TIME);
- return R.ok(Boolean.TRUE);
- }
+ String code = RandomUtil.randomNumbers(Integer.parseInt(SecurityConstants.CODE_SIZE));
+ log.debug("手机号生成验证码成功:{},{}", mobile, code);
+ RedisUtils.set(CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.APPSMS.getType() + StringPool.AT + mobile, code, SecurityConstants.CODE_TIME);
+ return R.ok(Boolean.TRUE);
+ }
}
diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppRoleServiceImpl.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppRoleServiceImpl.java
index b4a8293a4..7d620e75d 100644
--- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppRoleServiceImpl.java
+++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppRoleServiceImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
@@ -17,16 +17,20 @@
package com.pig4cloud.pigx.app.service.impl;
import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.pig4cloud.pigx.app.api.entity.AppPageEntity;
import com.pig4cloud.pigx.app.api.entity.AppRole;
+import com.pig4cloud.pigx.app.api.enums.AppErrorCodes;
+import com.pig4cloud.pigx.app.api.enums.PageTypeEnums;
import com.pig4cloud.pigx.app.api.vo.AppRoleExcelVO;
+import com.pig4cloud.pigx.app.mapper.AppPageMapper;
import com.pig4cloud.pigx.app.mapper.AppRoleMapper;
import com.pig4cloud.pigx.app.service.AppRoleService;
-import com.pig4cloud.pigx.common.core.exception.ErrorCodes;
import com.pig4cloud.pigx.common.core.util.MsgUtils;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.excel.vo.ErrorMessage;
-import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.validation.BindingResult;
@@ -35,79 +39,86 @@ import java.util.List;
import java.util.Set;
/**
- * app角色表
+ * APP角色服务实现类
+ *
+ * 提供对APP角色相关的业务操作实现。
*
- * @author aeizzz
- * @date 2022-12-07 09:52:03
+ * @author lengleng
+ * @date 2025/05/29
*/
@Service
-@AllArgsConstructor
+@RequiredArgsConstructor
public class AppRoleServiceImpl extends ServiceImpl implements AppRoleService {
- @Override
- public List findRolesByUserId(Long userId) {
- return baseMapper.listRolesByUserId(userId);
- }
+ private final AppPageMapper appPageMapper;
- /**
- * 删除用户的同时,把role_menu关系删除
- * @param ids roleIds
- */
- @Override
- public Boolean deleteRoleByIds(Long[] ids) {
- this.removeBatchByIds(CollUtil.toList(ids));
- return Boolean.TRUE;
- }
+ private final AppRoleMapper appRoleMapper;
- /**
- * 导入角色
- * @param excelVOList
- * @param bindingResult
- * @return
- */
- @Override
- public R importRole(List excelVOList, BindingResult bindingResult) {
- // 通用校验获取失败的数据
- List errorMessageList = (List) bindingResult.getTarget();
+ @Override
+ public List findRolesByUserId(Long userId) {
+ return baseMapper.listRolesByUserId(userId);
+ }
- // 个性化校验逻辑
- List roleList = this.list();
+ /**
+ * 删除用户的同时,把role_menu关系删除
+ *
+ * @param ids roleIds
+ */
+ @Override
+ public Boolean deleteRoleByIds(Long[] ids) {
+ this.removeBatchByIds(CollUtil.toList(ids));
+ return Boolean.TRUE;
+ }
- // 执行数据插入操作 组装 RoleDto
- for (AppRoleExcelVO excel : excelVOList) {
- Set errorMsg = new HashSet<>();
- // 检验角色名称或者角色编码是否存在
- boolean existRole = roleList.stream()
- .anyMatch(appRole -> excel.getRoleName().equals(appRole.getRoleName())
- || excel.getRoleCode().equals(appRole.getRoleCode()));
+ /**
+ * 导入角色
+ *
+ * @param excelVOList
+ * @param bindingResult
+ * @return
+ */
+ @Override
+ public R importRole(List excelVOList, BindingResult bindingResult) {
+ // 通用校验获取失败的数据
+ List errorMessageList = (List) bindingResult.getTarget();
- if (existRole) {
- errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_NAMEORCODE_EXISTING, excel.getRoleName(),
- excel.getRoleCode()));
- }
+ // 个性化校验逻辑
+ List roleList = this.list();
- // 数据合法情况
- if (CollUtil.isEmpty(errorMsg)) {
- insertExcelRole(excel);
- }
- else {
- // 数据不合法情况
- errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg));
- }
- }
- if (CollUtil.isNotEmpty(errorMessageList)) {
- return R.failed(errorMessageList);
- }
- return R.ok();
+ // 执行数据插入操作 组装 RoleDto
+ for (AppRoleExcelVO excel : excelVOList) {
+ Set errorMsg = new HashSet<>();
+ // 检验角色名称或者角色编码是否存在
+ boolean existRole = roleList.stream()
+ .anyMatch(appRole -> excel.getRoleName().equals(appRole.getRoleName())
+ || excel.getRoleCode().equals(appRole.getRoleCode()));
- }
+ if (existRole) {
+ errorMsg.add(MsgUtils.getMessage(AppErrorCodes.APP_ROLE_NAMEORCODE_EXISTING, excel.getRoleName(),
+ excel.getRoleCode()));
+ }
- private void insertExcelRole(AppRoleExcelVO excel) {
- AppRole appRole = new AppRole();
- appRole.setRoleName(excel.getRoleName());
- appRole.setRoleDesc(excel.getRoleDesc());
- appRole.setRoleCode(excel.getRoleCode());
- this.save(appRole);
- }
+ // 数据合法情况
+ if (CollUtil.isEmpty(errorMsg)) {
+ insertExcelRole(excel);
+ } else {
+ // 数据不合法情况
+ errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg));
+ }
+ }
+ if (CollUtil.isNotEmpty(errorMessageList)) {
+ return R.failed(errorMessageList);
+ }
+ return R.ok();
+
+ }
+
+ private void insertExcelRole(AppRoleExcelVO excel) {
+ AppRole appRole = new AppRole();
+ appRole.setRoleName(excel.getRoleName());
+ appRole.setRoleDesc(excel.getRoleDesc());
+ appRole.setRoleCode(excel.getRoleCode());
+ this.save(appRole);
+ }
}
diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppSocialDetailsServiceImpl.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppSocialDetailsServiceImpl.java
index fdfec8740..47b9bd033 100644
--- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppSocialDetailsServiceImpl.java
+++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppSocialDetailsServiceImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserRoleServiceImpl.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserRoleServiceImpl.java
index bc31adebc..0eeab146e 100644
--- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserRoleServiceImpl.java
+++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserRoleServiceImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserServiceImpl.java b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserServiceImpl.java
index 4381f7617..1ecccb968 100644
--- a/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserServiceImpl.java
+++ b/pigx-app-server/pigx-app-server-biz/src/main/java/com/pig4cloud/pigx/app/service/impl/AppUserServiceImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
@@ -29,6 +29,7 @@ import com.pig4cloud.pigx.app.api.dto.AppUserInfo;
import com.pig4cloud.pigx.app.api.entity.AppRole;
import com.pig4cloud.pigx.app.api.entity.AppUser;
import com.pig4cloud.pigx.app.api.entity.AppUserRole;
+import com.pig4cloud.pigx.app.api.enums.AppErrorCodes;
import com.pig4cloud.pigx.app.api.vo.AppUserExcelVO;
import com.pig4cloud.pigx.app.api.vo.AppUserVO;
import com.pig4cloud.pigx.app.mapper.AppUserMapper;
@@ -39,7 +40,6 @@ import com.pig4cloud.pigx.common.core.constant.CacheConstants;
import com.pig4cloud.pigx.common.core.constant.CommonConstants;
import com.pig4cloud.pigx.common.core.constant.enums.LoginTypeEnum;
import com.pig4cloud.pigx.common.core.constant.enums.UserTypeEnum;
-import com.pig4cloud.pigx.common.core.exception.ErrorCodes;
import com.pig4cloud.pigx.common.core.util.MsgUtils;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.data.cache.RedisUtils;
@@ -72,328 +72,338 @@ import java.util.Set;
@Slf4j
public class AppUserServiceImpl extends ServiceImpl implements AppUserService {
- /**
- * 密码编码器,用于密码加密
- */
- private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();
+ /**
+ * 密码编码器,用于密码加密
+ */
+ private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();
- /**
- * 用户角色关联服务
- */
- private final AppUserRoleService appUserRoleService;
+ /**
+ * 用户角色关联服务
+ */
+ private final AppUserRoleService appUserRoleService;
- /**
- * 角色服务
- */
- private final AppRoleService appRoleService;
+ /**
+ * 角色服务
+ */
+ private final AppRoleService appRoleService;
- /**
- * 缓存管理器
- */
- private final CacheManager cacheManager;
+ /**
+ * 缓存管理器
+ */
+ private final CacheManager cacheManager;
- /**
- * 更新用户信息
- * @param userDTO 用户数据传输对象
- * @return 更新结果
- */
- @Override
- @CacheEvict(value = CacheConstants.USER_DETAILS_MINI, key = "#userDTO.username")
- public Boolean updateUser(AppUserDTO userDTO) {
- // 创建用户实体并复制属性
- AppUser appUser = new AppUser();
- BeanUtils.copyProperties(userDTO, appUser);
+ /**
+ * 更新用户信息
+ *
+ * @param userDTO 用户数据传输对象
+ * @return 更新结果
+ */
+ @Override
+ @CacheEvict(value = CacheConstants.USER_DETAILS_MINI, key = "#userDTO.username")
+ public Boolean updateUser(AppUserDTO userDTO) {
+ // 创建用户实体并复制属性
+ AppUser appUser = new AppUser();
+ BeanUtils.copyProperties(userDTO, appUser);
- // 如果密码不为空,进行加密处理
- if (StrUtil.isNotBlank(userDTO.getPassword())) {
- appUser.setPassword(ENCODER.encode(userDTO.getPassword()));
- }
- // 更新用户基本信息
- this.updateById(appUser);
+ // 如果密码不为空,进行加密处理
+ if (StrUtil.isNotBlank(userDTO.getPassword())) {
+ appUser.setPassword(ENCODER.encode(userDTO.getPassword()));
+ }
+ // 更新用户基本信息
+ this.updateById(appUser);
- // 删除用户与角色的关联关系
- appUserRoleService.remove(Wrappers.lambdaQuery().eq(AppUserRole::getUserId, appUser.getUserId()));
- // 重新建立用户与角色的关联关系
- userDTO.getRole().forEach(roleId -> {
- AppUserRole appUserRole = new AppUserRole();
- appUserRole.setRoleId(roleId);
- appUserRole.setUserId(userDTO.getUserId());
- appUserRole.insert();
- });
+ // 删除用户与角色的关联关系
+ appUserRoleService.remove(Wrappers.lambdaQuery().eq(AppUserRole::getUserId, appUser.getUserId()));
+ // 重新建立用户与角色的关联关系
+ userDTO.getRole().forEach(roleId -> {
+ AppUserRole appUserRole = new AppUserRole();
+ appUserRole.setRoleId(roleId);
+ appUserRole.setUserId(userDTO.getUserId());
+ appUserRole.insert();
+ });
- // 清除以手机号为key的用户缓存
- AppUser appUserInfo = baseMapper.selectById(userDTO.getUserId());
- cacheManager.getCache(CacheConstants.USER_DETAILS_MINI).evict(appUserInfo.getPhone());
- return Boolean.TRUE;
- }
+ // 清除以手机号为key的用户缓存
+ AppUser appUserInfo = baseMapper.selectById(userDTO.getUserId());
+ cacheManager.getCache(CacheConstants.USER_DETAILS_MINI).evict(appUserInfo.getPhone());
+ return Boolean.TRUE;
+ }
- /**
- * 新增用户
- * @param userDTO 用户数据传输对象
- * @return 保存结果
- */
- @Override
- public Boolean saveUser(AppUserDTO userDTO) {
- // 创建用户实体并复制属性
- AppUser appUser = new AppUser();
- BeanUtils.copyProperties(userDTO, appUser);
- // 设置删除标志为正常状态
- appUser.setDelFlag(CommonConstants.STATUS_NORMAL);
- // 对密码进行加密
- appUser.setPassword(ENCODER.encode(userDTO.getPassword()));
- // 插入用户记录
- baseMapper.insert(appUser);
+ /**
+ * 新增用户
+ *
+ * @param userDTO 用户数据传输对象
+ * @return 保存结果
+ */
+ @Override
+ public Boolean saveUser(AppUserDTO userDTO) {
+ // 创建用户实体并复制属性
+ AppUser appUser = new AppUser();
+ BeanUtils.copyProperties(userDTO, appUser);
+ // 设置删除标志为正常状态
+ appUser.setDelFlag(CommonConstants.STATUS_NORMAL);
+ // 对密码进行加密
+ appUser.setPassword(ENCODER.encode(userDTO.getPassword()));
+ // 插入用户记录
+ baseMapper.insert(appUser);
- // 如果角色列表不为空,建立用户与角色的关联关系
- if (CollUtil.isNotEmpty(userDTO.getRole())) {
- List userRoleList = userDTO.getRole().stream().map(roleId -> {
- AppUserRole userRole = new AppUserRole();
- userRole.setUserId(appUser.getUserId());
- userRole.setRoleId(roleId);
- return userRole;
- }).toList();
- // 批量保存用户角色关联
- appUserRoleService.saveBatch(userRoleList);
- }
- return Boolean.TRUE;
- }
+ // 如果角色列表不为空,建立用户与角色的关联关系
+ if (CollUtil.isNotEmpty(userDTO.getRole())) {
+ List userRoleList = userDTO.getRole().stream().map(roleId -> {
+ AppUserRole userRole = new AppUserRole();
+ userRole.setUserId(appUser.getUserId());
+ userRole.setRoleId(roleId);
+ return userRole;
+ }).toList();
+ // 批量保存用户角色关联
+ appUserRoleService.saveBatch(userRoleList);
+ }
+ return Boolean.TRUE;
+ }
- /**
- * 查询全部用户(用于Excel导出)
- * @param appUser 查询条件
- * @return 用户Excel视图对象列表
- */
- @Override
- public List listUser(AppUserDTO appUser) {
- // 查询所有用户
- List appUsers = baseMapper.selectList(null);
- // 将用户实体转换为Excel视图对象
- List appUserExcelVOS = appUsers.stream().map(item -> {
- AppUserExcelVO appUserExcelVO = new AppUserExcelVO();
- BeanUtils.copyProperties(item, appUserExcelVO);
- return appUserExcelVO;
- }).toList();
- return appUserExcelVOS;
- }
+ /**
+ * 查询全部用户(用于Excel导出)
+ *
+ * @param appUser 查询条件
+ * @return 用户Excel视图对象列表
+ */
+ @Override
+ public List listUser(AppUserDTO appUser) {
+ // 查询所有用户
+ List appUsers = baseMapper.selectList(null);
+ // 将用户实体转换为Excel视图对象
+ List appUserExcelVOS = appUsers.stream().map(item -> {
+ AppUserExcelVO appUserExcelVO = new AppUserExcelVO();
+ BeanUtils.copyProperties(item, appUserExcelVO);
+ return appUserExcelVO;
+ }).toList();
+ return appUserExcelVOS;
+ }
- /**
- * 分页查询用户(包含角色信息)
- * @param page 分页参数
- * @param appUserDTO 查询条件
- * @return 分页结果
- */
- @Override
- public IPage getUsersWithRolePage(Page page, AppUserDTO appUserDTO) {
- return baseMapper.getUserVosPage(page, appUserDTO);
- }
+ /**
+ * 分页查询用户(包含角色信息)
+ *
+ * @param page 分页参数
+ * @param appUserDTO 查询条件
+ * @return 分页结果
+ */
+ @Override
+ public IPage getUsersWithRolePage(Page page, AppUserDTO appUserDTO) {
+ return baseMapper.getUserVosPage(page, appUserDTO);
+ }
- /**
- * 查询用户详细信息(包含角色和权限)
- * @param user 用户对象
- * @return 用户信息对象
- */
- @Override
- public AppUserInfo findUserInfo(AppUser user) {
- // 创建用户信息对象
- AppUserInfo info = new AppUserInfo();
- info.setAppUser(user);
+ /**
+ * 查询用户详细信息(包含角色和权限)
+ *
+ * @param user 用户对象
+ * @return 用户信息对象
+ */
+ @Override
+ public AppUserInfo findUserInfo(AppUser user) {
+ // 创建用户信息对象
+ AppUserInfo info = new AppUserInfo();
+ info.setAppUser(user);
- // 设置角色列表(ID数组)
- List roleIds = appRoleService.findRolesByUserId(user.getUserId())
- .stream()
- .map(AppRole::getRoleId)
- .toList();
- info.setRoles(ArrayUtil.toArray(roleIds, Long.class));
+ // 设置角色列表(ID数组)
+ List roleIds = appRoleService.findRolesByUserId(user.getUserId())
+ .stream()
+ .map(AppRole::getRoleId)
+ .toList();
+ info.setRoles(ArrayUtil.toArray(roleIds, Long.class));
- // 设置权限列表(暂为空)
- Set permissions = new HashSet<>();
- info.setPermissions(ArrayUtil.toArray(permissions, String.class));
- return info;
- }
+ // 设置权限列表(暂为空)
+ Set permissions = new HashSet<>();
+ info.setPermissions(ArrayUtil.toArray(permissions, String.class));
+ return info;
+ }
- /**
- * 更新用户个人信息
- * @param userDTO 用户数据传输对象
- * @return 操作结果
- */
- @Override
- @CacheEvict(value = CacheConstants.USER_DETAILS_MINI, key = "#userDTO.username")
- public R updateUserInfo(AppUserDTO userDTO) {
- // 获取当前登录用户
- PigxUser user = SecurityUtils.getUser();
+ /**
+ * 更新用户个人信息
+ *
+ * @param userDTO 用户数据传输对象
+ * @return 操作结果
+ */
+ @Override
+ @CacheEvict(value = CacheConstants.USER_DETAILS_MINI, key = "#userDTO.username")
+ public R updateUserInfo(AppUserDTO userDTO) {
+ // 获取当前登录用户
+ PigxUser user = SecurityUtils.getUser();
- // C端客户修改手机号需要验证短信验证码
- if (UserTypeEnum.TOC.getStatus().equals(user.getUserType()) && StrUtil.isNotBlank(userDTO.getPhone())) {
- // 构建验证码缓存key
- String key = CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.APPSMS.getType() + StringPool.AT
- + userDTO.getPhone();
- // 获取缓存中的验证码
- String codeObj = RedisUtils.get(key);
+ // C端客户修改手机号需要验证短信验证码
+ if (UserTypeEnum.TOC.getStatus().equals(user.getUserType()) && StrUtil.isNotBlank(userDTO.getPhone())) {
+ // 构建验证码缓存key
+ String key = CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.APPSMS.getType() + StringPool.AT
+ + userDTO.getPhone();
+ // 获取缓存中的验证码
+ String codeObj = RedisUtils.get(key);
- // 验证码不匹配,返回错误
- if (!userDTO.getMobileCode().equals(codeObj)) {
- return R.failed("验证码错误");
- }
- }
+ // 验证码不匹配,返回错误
+ if (!userDTO.getMobileCode().equals(codeObj)) {
+ return R.failed("验证码错误");
+ }
+ }
- // 更新密码(如果提供了新密码)
- if (StrUtil.isNotBlank(userDTO.getPassword())) {
- userDTO.setPassword(ENCODER.encode(userDTO.getPassword()));
- }
+ // 更新密码(如果提供了新密码)
+ if (StrUtil.isNotBlank(userDTO.getPassword())) {
+ userDTO.setPassword(ENCODER.encode(userDTO.getPassword()));
+ }
- // 获取原用户信息并更新
- AppUser appUser = baseMapper.selectById(userDTO.getUserId());
- BeanUtils.copyProperties(userDTO, appUser);
+ // 获取原用户信息并更新
+ AppUser appUser = baseMapper.selectById(userDTO.getUserId());
+ BeanUtils.copyProperties(userDTO, appUser);
- // 清除以手机号为key的用户缓存
- cacheManager.getCache(CacheConstants.USER_DETAILS_MINI).evict(user.getPhone());
- return R.ok(this.updateById(appUser));
- }
+ // 清除以手机号为key的用户缓存
+ cacheManager.getCache(CacheConstants.USER_DETAILS_MINI).evict(user.getPhone());
+ return R.ok(this.updateById(appUser));
+ }
- /**
- * 根据用户ID查询用户视图对象
- * @param userId 用户ID
- * @return 用户视图对象
- */
- @Override
- public AppUserVO selectUserVoById(Long userId) {
- return baseMapper.getUserVoById(userId);
- }
+ /**
+ * 根据用户ID查询用户视图对象
+ *
+ * @param userId 用户ID
+ * @return 用户视图对象
+ */
+ @Override
+ public AppUserVO selectUserVoById(Long userId) {
+ return baseMapper.getUserVoById(userId);
+ }
- /**
- * 批量删除用户
- * @param ids 用户ID数组
- * @return 删除结果
- */
- @Override
- public Boolean deleteAppUserByIds(Long[] ids) {
- // 获取缓存对象
- Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS_MINI);
- // 清除用户缓存
- for (AppUser appUser : baseMapper.selectByIds(CollUtil.toList(ids))) {
- cache.evict(appUser.getUsername());
- }
+ /**
+ * 批量删除用户
+ *
+ * @param ids 用户ID数组
+ * @return 删除结果
+ */
+ @Override
+ public Boolean deleteAppUserByIds(Long[] ids) {
+ // 获取缓存对象
+ Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS_MINI);
+ // 清除用户缓存
+ for (AppUser appUser : baseMapper.selectByIds(CollUtil.toList(ids))) {
+ cache.evict(appUser.getUsername());
+ }
- // 删除用户角色关联关系
- this.appUserRoleService
- .remove(Wrappers.lambdaQuery().in(AppUserRole::getUserId, CollUtil.toList(ids)));
+ // 删除用户角色关联关系
+ this.appUserRoleService
+ .remove(Wrappers.lambdaQuery().in(AppUserRole::getUserId, CollUtil.toList(ids)));
- // 删除用户记录
- this.removeBatchByIds(CollUtil.toList(ids));
+ // 删除用户记录
+ this.removeBatchByIds(CollUtil.toList(ids));
- return Boolean.TRUE;
- }
+ return Boolean.TRUE;
+ }
- /**
- * 注册APP用户
- * @param appUser 用户数据传输对象
- * @return 操作结果
- */
- @Override
- public R registerAppUser(AppUserDTO appUser) {
- // 检查手机号是否已被注册
- List appUserList = baseMapper
- .selectList(Wrappers.lambdaQuery().eq(AppUser::getPhone, appUser.getPhone()));
+ /**
+ * 注册APP用户
+ *
+ * @param appUser 用户数据传输对象
+ * @return 操作结果
+ */
+ @Override
+ public R registerAppUser(AppUserDTO appUser) {
+ // 检查手机号是否已被注册
+ List appUserList = baseMapper
+ .selectList(Wrappers.lambdaQuery().eq(AppUser::getPhone, appUser.getPhone()));
- if (CollUtil.isNotEmpty(appUserList)) {
- return R.failed("手机号已注册,请使用验证码直接登录");
- }
+ if (CollUtil.isNotEmpty(appUserList)) {
+ return R.failed("手机号已注册,请使用验证码直接登录");
+ }
- // 验证短信验证码
- String key = CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.APPSMS.getType() + StringPool.AT
- + appUser.getPhone();
- String codeObj = RedisUtils.get(key);
+ // 验证短信验证码
+ String key = CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.APPSMS.getType() + StringPool.AT
+ + appUser.getPhone();
+ String codeObj = RedisUtils.get(key);
- if (!appUser.getMobileCode().equals(codeObj)) {
- return R.failed("验证码错误");
- }
+ if (!appUser.getMobileCode().equals(codeObj)) {
+ return R.failed("验证码错误");
+ }
- // 创建用户并保存
- AppUser app = new AppUser();
- BeanUtils.copyProperties(appUser, app);
- appUser.setUsername(app.getPhone()); // 默认使用手机号作为用户名
- appUser.setDelFlag(CommonConstants.STATUS_NORMAL);
- appUser.setPassword(ENCODER.encode(appUser.getPassword()));
- baseMapper.insert(appUser);
- return null;
- }
+ // 创建用户并保存
+ AppUser app = new AppUser();
+ BeanUtils.copyProperties(appUser, app);
+ appUser.setUsername(app.getPhone()); // 默认使用手机号作为用户名
+ appUser.setDelFlag(CommonConstants.STATUS_NORMAL);
+ appUser.setPassword(ENCODER.encode(appUser.getPassword()));
+ baseMapper.insert(appUser);
+ return null;
+ }
- /**
- * 导入用户(从Excel导入)
- * @param excelVOList Excel数据列表
- * @param bindingResult 数据校验结果
- * @return 导入结果
- */
- @Override
- public R importUser(List excelVOList, BindingResult bindingResult) {
- // 获取通用校验失败的数据
- List errorMessageList = (List) bindingResult.getTarget();
+ /**
+ * 导入用户(从Excel导入)
+ *
+ * @param excelVOList Excel数据列表
+ * @param bindingResult 数据校验结果
+ * @return 导入结果
+ */
+ @Override
+ public R importUser(List excelVOList, BindingResult bindingResult) {
+ // 获取通用校验失败的数据
+ List errorMessageList = (List) bindingResult.getTarget();
- // 获取现有用户和角色列表,用于校验
- List userList = this.list();
- List roleList = appRoleService.list();
+ // 获取现有用户和角色列表,用于校验
+ List userList = this.list();
+ List roleList = appRoleService.list();
- // 遍历Excel数据进行处理
- for (AppUserExcelVO excel : excelVOList) {
- Set errorMsg = new HashSet<>();
+ // 遍历Excel数据进行处理
+ for (AppUserExcelVO excel : excelVOList) {
+ Set errorMsg = new HashSet<>();
- // 校验用户名是否已存在
- boolean exsitUserName = userList.stream()
- .anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
+ // 校验用户名是否已存在
+ boolean exsitUserName = userList.stream()
+ .anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
- if (exsitUserName) {
- errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername()));
- }
+ if (exsitUserName) {
+ errorMsg.add(MsgUtils.getMessage(AppErrorCodes.APP_USER_USERNAME_EXISTING, excel.getUsername()));
+ }
- // 校验角色名称是否合法
- List roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA);
- List roleCollList = roleList.stream()
- .filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
- .toList();
+ // 校验角色名称是否合法
+ List roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA);
+ List roleCollList = roleList.stream()
+ .filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
+ .toList();
- if (roleCollList.size() != roleNameList.size()) {
- errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_ROLENAME_INEXISTENCE, excel.getRoleNameList()));
- }
+ if (roleCollList.size() != roleNameList.size()) {
+ errorMsg.add(MsgUtils.getMessage(AppErrorCodes.APP_ROLE_ROLENAME_INEXISTENCE, excel.getRoleNameList()));
+ }
- // 数据合法时执行插入
- if (CollUtil.isEmpty(errorMsg)) {
- insertExcelUser(excel, roleCollList);
- }
- else {
- // 记录不合法数据的错误信息
- errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg));
- }
- }
+ // 数据合法时执行插入
+ if (CollUtil.isEmpty(errorMsg)) {
+ insertExcelUser(excel, roleCollList);
+ } else {
+ // 记录不合法数据的错误信息
+ errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg));
+ }
+ }
- // 存在错误信息时返回失败
- if (CollUtil.isNotEmpty(errorMessageList)) {
- return R.failed(errorMessageList);
- }
- return R.ok(null, MsgUtils.getMessage(ErrorCodes.SYS_USER_IMPORT_SUCCEED));
- }
+ // 存在错误信息时返回失败
+ if (CollUtil.isNotEmpty(errorMessageList)) {
+ return R.failed(errorMessageList);
+ }
+ return R.ok(null, MsgUtils.getMessage(AppErrorCodes.APP_USER_IMPORT_SUCCEED));
+ }
- /**
- * 插入Excel导入的用户数据
- * @param excel Excel用户数据
- * @param roleCollList 角色列表
- */
- private void insertExcelUser(AppUserExcelVO excel, List roleCollList) {
- // 创建用户DTO并设置基本信息
- AppUserDTO userDTO = new AppUserDTO();
- userDTO.setUsername(excel.getUsername());
- userDTO.setPhone(excel.getPhone());
- userDTO.setNickname(excel.getNickname());
- userDTO.setName(excel.getName());
- userDTO.setEmail(excel.getEmail());
- // 批量导入时初始密码设置为手机号
- userDTO.setPassword(userDTO.getPhone());
+ /**
+ * 插入Excel导入的用户数据
+ *
+ * @param excel Excel用户数据
+ * @param roleCollList 角色列表
+ */
+ private void insertExcelUser(AppUserExcelVO excel, List roleCollList) {
+ // 创建用户DTO并设置基本信息
+ AppUserDTO userDTO = new AppUserDTO();
+ userDTO.setUsername(excel.getUsername());
+ userDTO.setPhone(excel.getPhone());
+ userDTO.setNickname(excel.getNickname());
+ userDTO.setName(excel.getName());
+ userDTO.setEmail(excel.getEmail());
+ // 批量导入时初始密码设置为手机号
+ userDTO.setPassword(userDTO.getPhone());
- // 获取角色ID列表
- List roleIdList = roleCollList.stream().map(AppRole::getRoleId).toList();
- userDTO.setRole(roleIdList);
+ // 获取角色ID列表
+ List roleIdList = roleCollList.stream().map(AppRole::getRoleId).toList();
+ userDTO.setRole(roleIdList);
- // 保存用户
- this.saveUser(userDTO);
- }
+ // 保存用户
+ this.saveUser(userDTO);
+ }
}
diff --git a/pigx-app-server/pigx-app-server-biz/src/main/resources/mapper/AppRoleMapper.xml b/pigx-app-server/pigx-app-server-biz/src/main/resources/mapper/AppRoleMapper.xml
index 0da7d0018..e00f6c9e0 100644
--- a/pigx-app-server/pigx-app-server-biz/src/main/resources/mapper/AppRoleMapper.xml
+++ b/pigx-app-server/pigx-app-server-biz/src/main/resources/mapper/AppRoleMapper.xml
@@ -2,7 +2,7 @@
+ 2.5.2
+ 4.7.8-20251028.120007
+ 2.9.12.1-17
3.0.3
4.0.1
1.15.3
@@ -42,7 +44,7 @@
1.7.0
7.1
0.21.0
- 2.17.1
+ 2.25.2
1.59.1
0.33.0
1.0.0
@@ -52,7 +54,7 @@
1.4.7
2.0.1
2.20.1
- 2.3
+ 2.4.1
2.16.1
3.1
@@ -186,6 +188,22 @@
pigx-flow-api
${pigx.version}
+
+
+ com.pig4cloud
+ pigx-common-milvus
+ ${pigx.version}
+
+
+ com.pig4cloud
+ pigx-common-mcp
+ ${pigx.version}
+
+
+ com.pig4cloud
+ pigx-common-neo4j
+ ${pigx.version}
+
io.github.pig-mesh.ai
@@ -463,6 +481,12 @@
nacos-client
${nacos.client.version}
+
+
+ org.quartz-scheduler
+ quartz
+ ${quartz.version}
+
org.apache.logging.log4j
diff --git a/pigx-common/pigx-common-core/pom.xml b/pigx-common/pigx-common-core/pom.xml
index cc8e456fb..7a806d938 100644
--- a/pigx-common/pigx-common-core/pom.xml
+++ b/pigx-common/pigx-common-core/pom.xml
@@ -1,7 +1,7 @@
@@ -216,9 +222,6 @@
repackage
-
- CLASSIC
-
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/PigxAdminApplication.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/PigxAdminApplication.java
index 3bbf726ca..503448481 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/PigxAdminApplication.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/PigxAdminApplication.java
@@ -1,6 +1,6 @@
/*
*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/DynamicRouteInitRunner.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/DynamicRouteInitRunner.java
index 106c691f0..d834bc53b 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/DynamicRouteInitRunner.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/DynamicRouteInitRunner.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysAuditLogController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysAuditLogController.java
index 5736b94c2..4e6919b43 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysAuditLogController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysAuditLogController.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysClientController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysClientController.java
index ea774643d..960dc7f5f 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysClientController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysClientController.java
@@ -1,6 +1,6 @@
/*
*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDeptController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDeptController.java
index 193994188..1b0830e9e 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDeptController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDeptController.java
@@ -1,6 +1,6 @@
/*
*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDictController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDictController.java
index 43e511fcb..75db60d2b 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDictController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDictController.java
@@ -1,6 +1,6 @@
/*
*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysFileController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysFileController.java
index 8b3e37b9d..126f08858 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysFileController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysFileController.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysI18nController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysI18nController.java
index 055650251..5d1ec1030 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysI18nController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysI18nController.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysLogController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysLogController.java
index f86658be1..12ff0d888 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysLogController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysLogController.java
@@ -1,6 +1,6 @@
/*
*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysMenuController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysMenuController.java
index 9ca8e83f4..8979d5a47 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysMenuController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysMenuController.java
@@ -1,6 +1,6 @@
/*
*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysMessageController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysMessageController.java
index a9a78a766..79a2a0f67 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysMessageController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysMessageController.java
@@ -183,17 +183,20 @@ public class SysMessageController {
/**
* 发送短信验证码
- * @param mobile 手机号
- * @return {@link R }
+ *
+ * @param mobile 手机号
+ * @param registered 是否已注册,默认true
+ * @return 发送结果
*/
@Inner(value = false)
@GetMapping("/send/smsCode")
- public R sendSmsCode(@RequestParam String mobile) {
- return sysMessageService.sendSmsCode(mobile);
+ public R sendSmsCode(@RequestParam String mobile, @RequestParam(required = false, defaultValue = "true") boolean registered) {
+ return sysMessageService.sendSmsCode(mobile, registered);
}
/**
* 发送短信
+ *
* @param messageSmsDTO 消息 短信 DTO
* @return {@link R }
*/
@@ -204,6 +207,7 @@ public class SysMessageController {
/**
* 发送邮件
+ *
* @param messageEmailDTO 留言内容 电子邮件 DTO
* @return {@link R }
*/
@@ -214,17 +218,18 @@ public class SysMessageController {
/**
* 发送 webhook
+ *
* @param messageHookDTO 消息挂钩 DTO
* @return {@link R }
*/
@PostMapping("/send/hook")
public R sendWebhook(@Valid @RequestBody MessageHookDTO messageHookDTO) {
- return sysMessageService.sendHook(messageHookDTO);
- }
+ return sysMessageService.sendHook(messageHookDTO);
+ }
- @GetMapping("/list/hook")
- public R listHookBizCode(MessageHookDTO messageHookDTO) {
- return sysMessageService.listHookBizCode(messageHookDTO);
- }
+ @GetMapping("/list/hook")
+ public R listHookBizCode(MessageHookDTO messageHookDTO) {
+ return sysMessageService.listHookBizCode(messageHookDTO);
+ }
}
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysPostController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysPostController.java
index 37b58ff9d..985e16b98 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysPostController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysPostController.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysPublicParamController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysPublicParamController.java
index 9e89c2111..2a1a69172 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysPublicParamController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysPublicParamController.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRoleController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRoleController.java
index 6c1c4ab86..85dd4d041 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRoleController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRoleController.java
@@ -1,6 +1,6 @@
/*
*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRouteConfController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRouteConfController.java
index 6fd568656..7d91afca7 100755
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRouteConfController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysRouteConfController.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysScheduleController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysScheduleController.java
index ba28d2c1f..a96ab4926 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysScheduleController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysScheduleController.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysSocialDetailsController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysSocialDetailsController.java
index e32724de8..76f50c45b 100755
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysSocialDetailsController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysSocialDetailsController.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
+ * Copyright (c) 2018-2026, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysSystemInfoController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysSystemInfoController.java
index b4e24f8f0..080593810 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysSystemInfoController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysSystemInfoController.java
@@ -1,5 +1,7 @@
package com.pig4cloud.pigx.admin.controller;
+import com.pig4cloud.pigx.admin.api.constant.UpmsErrorCodes;
+import com.pig4cloud.pigx.common.core.util.MsgUtils;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.data.cache.RedisUtils;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
@@ -22,36 +24,37 @@ import java.util.*;
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class SysSystemInfoController {
- /**
- * 缓存监控
- * @return R