diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/JwtUtils.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/JwtUtils.java index a6be530..41a9643 100644 --- a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/JwtUtils.java +++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/JwtUtils.java @@ -31,7 +31,7 @@ public class JwtUtils if (!StringUtils.isEmpty(username)){ String encyrptUserName = Sm4Utils.encrypt(username); claims.put(SecurityConstants.DETAILS_USERNAME, encyrptUserName); - System.out.print("****createToken里加密用户名是:" + encyrptUserName); +// System.out.print("****createToken里加密用户名是:" + encyrptUserName); } return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact(); } @@ -48,7 +48,7 @@ public class JwtUtils String username = getValue(claims, SecurityConstants.DETAILS_USERNAME); if (!StringUtils.isEmpty(username)){ String decryUsername = Sm4Utils.decrypt(username); - System.out.print("****parseToken里解密用户名是:" + decryUsername); +// System.out.print("****parseToken里解密用户名是:" + decryUsername); claims.put(SecurityConstants.DETAILS_USERNAME, decryUsername); } return claims; diff --git a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/interceptor/ParamSecureHandler.java b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/interceptor/ParamSecureHandler.java index 7e0a2cf..2d33ead 100644 --- a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/interceptor/ParamSecureHandler.java +++ b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/interceptor/ParamSecureHandler.java @@ -25,7 +25,7 @@ import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE; public class ParamSecureHandler implements AsyncHandlerInterceptor { private static final String [] WHITE_URL = { - "/login", "/isAdmin", "/isLogin" ,"/register","/user/register","/operlog/addLogs","/job/edit","/user/resetPwd","/user/profile/updatePwd","/user/confirmPassword"}; + "/login", "/isAdmin", "/isLogin" ,"/register","/user/register","/operlog/addLogs","/job/edit","/user","/user/resetPwd","/user/profile/updatePwd","/user/confirmPassword"}; private String rnd = null; public static String ur = "/"; diff --git a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/utils/SecurityUtils.java b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/utils/SecurityUtils.java index a5614bf..eed0f78 100644 --- a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/utils/SecurityUtils.java +++ b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/utils/SecurityUtils.java @@ -119,9 +119,10 @@ public class SecurityUtils //$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2 //$2a$10$zvlw3Mu8M.j.MhAChrYwluj88ziX6lVD3AoRrBQpwKMcdIZvKMoR2 // String msg= encryptPassword("Admin@1234"); - String msg= encryptPassword("15888888888"); +// String msg= encryptPassword("15888888888"); // boolean rest = matchesPassword("Bonus$2024","$2a$10$8JaKSUAU.K.mceU1.YQbd.wP4EJzbrsIscjAwPlfDR7wAWV6s/BGa"); -// String msg = Sm4Utils.encrypt("Bonus$2026"); + String msg = Sm4Utils.encrypt("Bonus$2026"); +// String msg = Sm4Utils.decrypt("4eb762402e0ce5ef9d0028e2d622c53bc8ea1d7680ea4416975e4cc23b4ef7f0"); System.err.println(msg); // System.err.println(rest); } diff --git a/bonus-modules/bonus-file/src/main/java/com/bonus/file/service/impl/MinioSysFileServiceImpl.java b/bonus-modules/bonus-file/src/main/java/com/bonus/file/service/impl/MinioSysFileServiceImpl.java deleted file mode 100644 index 5a74ebf..0000000 --- a/bonus-modules/bonus-file/src/main/java/com/bonus/file/service/impl/MinioSysFileServiceImpl.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.bonus.file.service.impl; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -import com.bonus.common.core.utils.file.MimeTypeUtils; -import com.bonus.file.service.ISysFileService; -import io.minio.RemoveObjectArgs; -import org.apache.commons.io.IOUtils; -import com.bonus.file.utils.FileDownloadUtils; -import com.bonus.system.api.domain.SysFile; -import io.minio.GetObjectArgs; -import io.minio.errors.MinioException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; -import com.alibaba.nacos.common.utils.IoUtils; -import com.bonus.file.config.MinioConfig; -import com.bonus.file.utils.FileUploadUtils; -import io.minio.MinioClient; -import io.minio.PutObjectArgs; - -import javax.servlet.http.HttpServletResponse; - -/** - * Minio 文件存储 - * - * @author bonus - */ -@Service -@ConditionalOnProperty(name = "storage.type", havingValue = "minio") -public class MinioSysFileServiceImpl implements ISysFileService -{ - @Autowired - private MinioConfig minioConfig; - - @Autowired - private MinioClient client; - - /** - * Minio文件上传接口 - * - * @param file 上传的文件 - * @return 访问地址 - * @throws Exception - */ - @Override - public SysFile uploadFile(MultipartFile file) throws Exception - { - //验证文件扩展名和大小 - FileUploadUtils.assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); - - String fileName = FileUploadUtils.extractFilename(file); - InputStream inputStream = file.getInputStream(); - PutObjectArgs args = PutObjectArgs.builder() - .bucket(minioConfig.getBucketName()) - .object(fileName) - .stream(inputStream, file.getSize(), -1) - .contentType(file.getContentType()) - .build(); - client.putObject(args); - IoUtils.closeQuietly(inputStream); - return SysFile.builder().url(minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName).name(fileName).build(); - } - - /** - * Minio文件上传接口 - * - * @param files 上传的文件 - * @return 访问地址 - */ - @Override - public List uploadFiles(MultipartFile[] files) throws Exception { - List sysFiles = new ArrayList<>(); - for (MultipartFile file : files) { - SysFile sysFile = uploadFile(file); - sysFiles.add(sysFile); - } - return sysFiles; - } - - /** - * Minio文件下载接口,待测试 - * - * @param response 响应对象 - * @param urlStr 文件URL地址 - * @return 是否成功 - */ - @Override - public void downloadFile(HttpServletResponse response, String urlStr) throws Exception - { - String fileName = com.bonus.file.utils.FileUtils.setResponseHeaderByUrl(response, urlStr); - if (fileName == null){ - throw new Exception("Can't get fileName" + urlStr); - } - try { - // 获取文件的输入流 - GetObjectArgs args = GetObjectArgs.builder() - .bucket(minioConfig.getBucketName()) - .object(fileName) - .build(); - InputStream inputStream = client.getObject(args); - - // 将文件流写入响应 - IOUtils.copy(inputStream, response.getOutputStream()); - response.flushBuffer(); - inputStream.close(); - } catch (MinioException e) { - throw new Exception("Error occurred while downloading file from Minio" + urlStr, e); - } - } - - /** - * Minio文件删除接口,待测试 - * - * @param urlStr 文件URL地址 - * @return 是否删除成功 - */ - @Override - public void deleteFile(String urlStr) throws Exception - { - String fileName = urlStr.substring(urlStr.lastIndexOf("/") + 1); - try { - // 删除文件 - RemoveObjectArgs args = RemoveObjectArgs.builder() - .bucket(minioConfig.getBucketName()) - .object(fileName) - .build(); - client.removeObject(args); - } catch (MinioException e) { - throw new Exception("Error occurred while deleting file from Minio", e); - } - } -} diff --git a/bonus-modules/bonus-job/src/main/java/com/bonus/job/task/SysTask.java b/bonus-modules/bonus-job/src/main/java/com/bonus/job/task/SysTask.java index b30140d..c011b64 100644 --- a/bonus-modules/bonus-job/src/main/java/com/bonus/job/task/SysTask.java +++ b/bonus-modules/bonus-job/src/main/java/com/bonus/job/task/SysTask.java @@ -24,10 +24,13 @@ public class SysTask /** * 30天 */ - final static int LAST_LOGIN_TIME_INTERVAL = 30*24*60; + final static int LAST_LOGIN_TIME_INTERVAL = 90*24*60; @Resource private SysJobMapper mapper; + /** + *如果用户超过3个月未登录,则修改为停用状态 + */ public void checkUserLastLoginTime(){ try{ SysUser user = new SysUser(); @@ -54,6 +57,9 @@ public class SysTask } } + /** + *临时用户有时间限制,自创建起三个月则修改为停用状态 + */ public void checkUserPermanent(){ try{ SysUser user = new SysUser(); @@ -61,7 +67,7 @@ public class SysTask List sysUsers = mapper.selectUserList(user); sysUsers.forEach(item -> { long minutes = DateUtils.minutesBetween(item.getCreateTime(), DateUtils.getNowDate()); - if (minutes >= LAST_LOGIN_TIME_INTERVAL*3){ + if (minutes >= LAST_LOGIN_TIME_INTERVAL){ int i = mapper.updateUser(item.getUserId()); if (i>0){ logger.error("修改用户状态,用户id为:{},用户名为:{}",item.getUserId(),item.getUserName()); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysConfigServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysConfigServiceImpl.java index 4d94d25..af63753 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysConfigServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysConfigServiceImpl.java @@ -87,6 +87,14 @@ public class SysConfigServiceImpl implements ISysConfigService @Override public List selectConfigList(SysConfig config) { + if (config.getConfigName() != null) { + String str = config.getConfigName().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + config.setConfigName(str); + } + if (config.getConfigKey() != null) { + String str = config.getConfigKey().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + config.setConfigKey(str); + } return configMapper.selectConfigList(config); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysDeptServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysDeptServiceImpl.java index d447006..00a1a1d 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysDeptServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysDeptServiceImpl.java @@ -60,6 +60,10 @@ public class SysDeptServiceImpl implements ISysDeptService } catch (Exception e) { e.printStackTrace(); } + if (dept.getDeptName() != null) { + String str = dept.getDeptName().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + dept.setDeptName(str); + } return deptMapper.selectDeptList(dept); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysDictTypeServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysDictTypeServiceImpl.java index 2ec124a..69779cc 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysDictTypeServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysDictTypeServiceImpl.java @@ -50,6 +50,15 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService @Override public List selectDictTypeList(SysDictType dictType) { + if (dictType.getDictName() != null) { + String str = dictType.getDictName().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + dictType.setDictName(str); + } + if (dictType.getDictType() != null) { + String str = dictType.getDictType().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + dictType.setDictType(str); + } + return dictTypeMapper.selectDictTypeList(dictType); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java index 57ba247..906ee11 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java @@ -1,6 +1,5 @@ package com.bonus.system.service.impl; -import com.bonus.config.SystemConfig; import com.bonus.system.warning.SysWarning; import com.bonus.system.warning.WaringLogEvent; import com.google.common.collect.Maps; @@ -17,9 +16,7 @@ import com.bonus.common.core.utils.global.SystemGlobal; import com.bonus.system.api.domain.SysLogsVo; import com.bonus.system.api.model.LoginUser; import com.bonus.system.mapper.SysLogMapper; -import com.mysql.cj.xdevapi.Warning; import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.scripting.xmltags.ForEachSqlNode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.scheduling.annotation.Async; @@ -54,6 +51,7 @@ public class SysLogServiceImpl implements ISysLogService { @Transactional(rollbackFor = Exception.class) public AjaxResult saveLogs(SysLogsVo sysLog) { try { + //如果是异常日志 if(SystemGlobal.LOG_ERR.equals(sysLog.getErrType()) && StringUtils.isEmpty(sysLog.getModel())) { SysLogsVo sysLog1=mapper.getModule(sysLog.getOperUri()); @@ -69,6 +67,14 @@ public class SysLogServiceImpl implements ISysLogService { if (sysLog.getLogType() == 2) { sysLog.setWarningStatus("0"); } + if (sysLog.getOperaUserName() != null) { + String str = sysLog.getOperaUserName().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + sysLog.setOperaUserName(str); + } + if (sysLog.getIp() != null) { + String str = sysLog.getIp().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + sysLog.setIp(str); + } mapper.saveLogs(sysLog); if (sysLog.getLogType() == 2) { eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(sysLog.getLogId(),sysLog.getErrType() ,sysLog.getIp(),sysLog.getOperaUserName(),sysLog.getOperTime(),"0"))); @@ -110,6 +116,14 @@ public class SysLogServiceImpl implements ISysLogService { if (sysLog.getLogType() == 2) { sysLog.setWarningStatus("0"); } + if (sysLog.getOperaUserName() != null) { + String str = sysLog.getOperaUserName().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + sysLog.setOperaUserName(str); + } + if (sysLog.getIp() != null) { + String str = sysLog.getIp().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + sysLog.setIp(str); + } mapper.saveLogs(sysLog); if (sysLog.getLogType() == 2) { eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(loginUuid, "越权访问", ip, user.getUsername(), DateUtils.getTime(),"0"))); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysMenuServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysMenuServiceImpl.java index 6d63a4b..c93f74a 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysMenuServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysMenuServiceImpl.java @@ -66,6 +66,10 @@ public class SysMenuServiceImpl implements ISysMenuService @Override public List selectMenuList(SysMenu menu, Long userId) { + if (menu.getMenuName() != null) { + String str = menu.getMenuName().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + menu.setMenuName(str); + } List menuList = menuMapper.selectMenuList(menu); return menuList; } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysOperLogServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysOperLogServiceImpl.java index de2864f..6596518 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysOperLogServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysOperLogServiceImpl.java @@ -106,6 +106,14 @@ public class SysOperLogServiceImpl implements ISysOperLogService sysLogsVo.setWarningStatus("0"); eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(sysLogsVo.getLogId(), sysLogsVo.getErrType(), sysLogsVo.getIp(), sysLogsVo.getOperaUserName(), sysLogsVo.getOperTime(), "0"))); } + if (sysLogsVo.getOperaUserName() != null) { + String str = sysLogsVo.getOperaUserName().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + sysLogsVo.setOperaUserName(str); + } + if (sysLogsVo.getIp() != null) { + String str = sysLogsVo.getIp().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + sysLogsVo.setIp(str); + } return operLogMapper.addLogs(sysLogsVo); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysPostServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysPostServiceImpl.java index 15a1013..03dcd5b 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysPostServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysPostServiceImpl.java @@ -35,6 +35,15 @@ public class SysPostServiceImpl implements ISysPostService @Override public List selectPostList(SysPost post) { + if (post.getPostCode() != null) { + String str = post.getPostCode().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + post.setPostCode(str); + } + if (post.getPostName() != null) { + String str = post.getPostName().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + post.setPostName(str); + } + return postMapper.selectPostList(post); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysRoleServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysRoleServiceImpl.java index 9fbb4e0..f68cb20 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysRoleServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysRoleServiceImpl.java @@ -65,6 +65,14 @@ public class SysRoleServiceImpl implements ISysRoleService } catch (Exception e) { e.printStackTrace(); } + if (role.getRoleName() != null) { + String str = role.getRoleName().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + role.setRoleName(str); + } + if (role.getRoleKey() != null) { + String str = role.getRoleKey().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + role.setRoleKey(str); + } return roleMapper.selectRoleList(role); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java index af04904..eab786c 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java @@ -1,11 +1,13 @@ package com.bonus.system.service.impl; +import com.bonus.common.core.constant.Constants; import com.bonus.common.core.constant.UserConstants; import com.bonus.common.core.domain.R; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.SpringUtils; import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.utils.bean.BeanValidators; +import com.bonus.common.core.utils.encryption.Sm4Utils; import com.bonus.common.core.utils.sms.SmsUtils; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.web.domain.BaseEntity; @@ -93,6 +95,14 @@ public class SysUserServiceImpl implements ISysUserService { } catch (Exception e) { e.printStackTrace(); } + if (user.getUserName() != null) { + String userName =user.getUserName().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + user.setUserName(userName); + } + if (user.getPhonenumber() != null) { + String phone =user.getPhonenumber().replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + user.setPhonenumber(phone); + } List sysUsers = userMapper.selectUserList(user); return sysUsers; } @@ -152,7 +162,7 @@ public class SysUserServiceImpl implements ISysUserService { */ @Override public SysUser selectUserByPhotoNumber(String photoNumber) { - return userMapper.selectUserByPhoneNumber(photoNumber); + return userMapper.selectUserByPhoneNumber(Sm4Utils.encrypt(photoNumber)); } /** @@ -163,7 +173,7 @@ public class SysUserServiceImpl implements ISysUserService { */ @Override public SysUser selectUserByEmail(String email) { - return userMapper.selectUserByEmail(email); + return userMapper.selectUserByEmail(Sm4Utils.encrypt(email)); } /** @@ -242,7 +252,7 @@ public class SysUserServiceImpl implements ISysUserService { @Override public boolean checkPhoneUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); - SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); + SysUser info = userMapper.checkPhoneUnique(Sm4Utils.encrypt(user.getPhonenumber())); if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } @@ -258,7 +268,7 @@ public class SysUserServiceImpl implements ISysUserService { @Override public boolean checkEmailUnique(SysUser user) { Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); - SysUser info = userMapper.checkEmailUnique(user.getEmail()); + SysUser info = userMapper.checkEmailUnique(Sm4Utils.encrypt(user.getEmail())); if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { return UserConstants.NOT_UNIQUE; } diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/system/SysUserMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/system/SysUserMapper.xml index 68b00c0..157ee17 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -94,9 +94,16 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +