diff --git a/bonus-admin/src/main/java/com/bonus/web/controller/common/SessionCheckController.java b/bonus-admin/src/main/java/com/bonus/web/controller/common/SessionCheckController.java new file mode 100644 index 0000000..330a51d --- /dev/null +++ b/bonus-admin/src/main/java/com/bonus/web/controller/common/SessionCheckController.java @@ -0,0 +1,35 @@ +package com.bonus.web.controller.common; + +import com.bonus.common.core.domain.AjaxResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +/** + * 会话检查控制器 + */ +@RestController +@RequestMapping("/api/session") +public class SessionCheckController { + +// @Autowired +// private SessionManagementService sessionManagementService; + + /** + * 检查会话状态 + */ + /*@GetMapping("/check") + public AjaxResult checkSession(HttpServletRequest request) { + String sessionId = request.getSession().getId(); + + if (sessionManagementService.isSessionForcedLogout(sessionId)) { + String message = sessionManagementService.getForceLogoutMessage(sessionId); + return AjaxResult.error(403, message).put("forceLogout", true); + } + + return AjaxResult.success().put("forceLogout", false); + }*/ +} \ No newline at end of file diff --git a/bonus-admin/src/main/java/com/bonus/web/controller/system/SysLoginController.java b/bonus-admin/src/main/java/com/bonus/web/controller/system/SysLoginController.java index 2486597..a91d8a5 100644 --- a/bonus-admin/src/main/java/com/bonus/web/controller/system/SysLoginController.java +++ b/bonus-admin/src/main/java/com/bonus/web/controller/system/SysLoginController.java @@ -24,6 +24,9 @@ import com.bonus.framework.web.service.TokenService; import com.bonus.system.service.ISysConfigService; import com.bonus.system.service.ISysMenuService; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * 登录验证 * @@ -54,11 +57,11 @@ public class SysLoginController * @return 结果 */ @PostMapping("/login") - public AjaxResult login(@RequestBody LoginBody loginBody) + public AjaxResult login(HttpServletRequest request, @RequestBody LoginBody loginBody) { AjaxResult ajax = AjaxResult.success(); // 生成令牌 - String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), + String token = loginService.login(request,loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), loginBody.getUuid()); ajax.put(Constants.TOKEN, token); return ajax; diff --git a/bonus-admin/src/main/java/com/bonus/web/controller/tool/FilesCustomizeClassifyController.java b/bonus-admin/src/main/java/com/bonus/web/controller/tool/FilesCustomizeClassifyController.java new file mode 100644 index 0000000..be33bd0 --- /dev/null +++ b/bonus-admin/src/main/java/com/bonus/web/controller/tool/FilesCustomizeClassifyController.java @@ -0,0 +1,107 @@ +package com.bonus.web.controller.tool; + +import com.bonus.common.annotation.RequiresPermissions; +import com.bonus.common.annotation.SysLog; +import com.bonus.common.core.controller.BaseController; +import com.bonus.common.core.domain.AjaxResult; +import com.bonus.common.core.page.TableDataInfo; +import com.bonus.common.enums.OperaType; +import com.bonus.common.utils.DateUtils; +import com.bonus.system.domain.KyFilesCustomizeClassify; +import com.bonus.system.domain.KyFilesMultiClassify; +import com.bonus.system.service.FilesCustomizeClassifyService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 档案自定义分类 + * @author 马三炮 + * @date 2025/9/11 + */ +@RestController +@RequestMapping("/files/customize") +@Slf4j +public class FilesCustomizeClassifyController extends BaseController { + + @Resource + private FilesCustomizeClassifyService filesCustomizeClassifyService; + + /** + * 获取档案自定义分类管理列表 + * @param kyFilesCustomizeClassify + * @return + */ + @SysLog(title = "档案自定义分类管理", businessType = OperaType.QUERY, module = "档案自定义分类管理->获取档案自定义分类管理列表", details = "获取档案自定义分类管理列表") + @RequiresPermissions("files:customize:list") + @GetMapping("/getKyFilesCustomizeClassifyList") + public TableDataInfo getKyFilesCustomizeClassifyList(KyFilesCustomizeClassify kyFilesCustomizeClassify) + { + startPage(); + List list = filesCustomizeClassifyService.getKyFilesCustomizeClassifyList(kyFilesCustomizeClassify); + return getDataTable(list); + } + + /** + * 新增档案自定义分类管理 + * @param kyFilesCustomizeClassify + * @return + */ + @SysLog(title = "档案自定义分类管理", businessType = OperaType.QUERY, module = "档案自定义分类管理->新增档案自定义分类管理", details = "新增档案自定义分类管理") + @RequiresPermissions("files:customize:add") + @PostMapping("/addKyFilesCustomizeClassify") + public AjaxResult addKyFilesCustomizeClassify(@Validated @RequestBody KyFilesCustomizeClassify kyFilesCustomizeClassify) + { + + kyFilesCustomizeClassify.setCreateUserId(getUserId()); + kyFilesCustomizeClassify.setCreateUserName(getUsername()); + kyFilesCustomizeClassify.setCreateTime(DateUtils.getNowDate()); + kyFilesCustomizeClassify.setUpdateUserId(getUserId()); + kyFilesCustomizeClassify.setUpdateUserName(getUsername()); + kyFilesCustomizeClassify.setUpdateTime(DateUtils.getNowDate()); + int res = filesCustomizeClassifyService.addKyFilesCustomizeClassify(kyFilesCustomizeClassify); + if (res==1){ + return toAjax(res); + }else { + return error("分类名称已存在"); + } + } + + /** + * 修改档案自定义分类管理 + * @param kyFilesCustomizeClassify + * @return + */ + @SysLog(title = "档案自定义分类管理", businessType = OperaType.QUERY, module = "档案自定义分类管理->修改档案自定义分类管理", details = "修改档案自定义分类管理") + @RequiresPermissions("files:customize:update") + @PostMapping("/updateKyFilesCustomizeClassify") + public AjaxResult updateKyFilesCustomizeClassify(@Validated @RequestBody KyFilesCustomizeClassify kyFilesCustomizeClassify) + { + + kyFilesCustomizeClassify.setUpdateUserId(getUserId()); + kyFilesCustomizeClassify.setUpdateUserName(getUsername()); + kyFilesCustomizeClassify.setUpdateTime(DateUtils.getNowDate()); + int res = filesCustomizeClassifyService.updateKyFilesCustomizeClassify(kyFilesCustomizeClassify); + if (res==1){ + return toAjax(res); + }else { + return error("分类名称已存在"); + } + } + + /** + * 修改档案自定义分类管理 + * @param kyFilesCustomizeClassify + * @return + */ + @SysLog(title = "档案自定义分类管理", businessType = OperaType.QUERY, module = "档案自定义分类管理->修改档案自定义分类管理", details = "修改档案自定义分类管理") + @RequiresPermissions("files:customize:del") + @PostMapping("/delKyFilesCustomizeClassify") + public AjaxResult delKyFilesCustomizeClassify(@Validated @RequestBody KyFilesCustomizeClassify kyFilesCustomizeClassify) + { + return toAjax(filesCustomizeClassifyService.delKyFilesCustomizeClassify(kyFilesCustomizeClassify)); + } +} diff --git a/bonus-admin/src/main/java/com/bonus/web/controller/tool/FilesMultiClassifyController.java b/bonus-admin/src/main/java/com/bonus/web/controller/tool/FilesMultiClassifyController.java new file mode 100644 index 0000000..c9701bf --- /dev/null +++ b/bonus-admin/src/main/java/com/bonus/web/controller/tool/FilesMultiClassifyController.java @@ -0,0 +1,107 @@ +package com.bonus.web.controller.tool; + +import com.bonus.common.annotation.RequiresPermissions; +import com.bonus.common.annotation.SysLog; +import com.bonus.common.core.controller.BaseController; +import com.bonus.common.core.domain.AjaxResult; +import com.bonus.common.core.page.TableDataInfo; +import com.bonus.common.enums.OperaType; +import com.bonus.common.utils.DateUtils; +import com.bonus.system.domain.KyDataClassify; +import com.bonus.system.domain.KyFilesMultiClassify; +import com.bonus.system.service.FilesMultiClassifyService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 档案多维度分类管理 + * @author 马三炮 + * @date 2025/9/11 + */ +@RestController +@RequestMapping("/files/multi") +@Slf4j +public class FilesMultiClassifyController extends BaseController { + + @Resource + private FilesMultiClassifyService filesMultiClassifyService; + + /** + * 获取档案多维度分类管理列表 + * @param kyFilesMultiClassify + * @return + */ + @SysLog(title = "档案多维度分类管理", businessType = OperaType.QUERY, module = "档案多维度分类管理->获取档案多维度分类管理列表", details = "获取档案多维度分类管理列表") + @RequiresPermissions("files:multi:list") + @GetMapping("/getKyFilesMultiClassifyList") + public TableDataInfo getKyFilesMultiClassifyList(KyFilesMultiClassify kyFilesMultiClassify) + { + startPage(); + List list = filesMultiClassifyService.selectKyFilesMultiClassifyList(kyFilesMultiClassify); + return getDataTable(list); + } + + /** + * 新增档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + @SysLog(title = "档案多维度分类管理", businessType = OperaType.QUERY, module = "档案多维度分类管理->新增档案多维度分类管理", details = "新增档案多维度分类管理") + @RequiresPermissions("files:multi:add") + @PostMapping("/addKyFilesMultiClassify") + public AjaxResult addKyFilesMultiClassify(@Validated @RequestBody KyFilesMultiClassify kyFilesMultiClassify) + { + + kyFilesMultiClassify.setCreateUserId(getUserId()); + kyFilesMultiClassify.setCreateUserName(getUsername()); + kyFilesMultiClassify.setCreateTime(DateUtils.getNowDate()); + kyFilesMultiClassify.setUpdateUserId(getUserId()); + kyFilesMultiClassify.setUpdateUserName(getUsername()); + kyFilesMultiClassify.setUpdateTime(DateUtils.getNowDate()); + int res = filesMultiClassifyService.addKyFilesMultiClassify(kyFilesMultiClassify); + if (res==1){ + return toAjax(res); + }else { + return error("分类名称已存在"); + } + } + + /** + * 修改档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + @SysLog(title = "档案多维度分类管理", businessType = OperaType.QUERY, module = "档案多维度分类管理->新增档案多维度分类管理", details = "新增档案多维度分类管理") + @RequiresPermissions("files:multi:update") + @PostMapping("/updateKyFilesMultiClassify") + public AjaxResult updateKyFilesMultiClassify(@Validated @RequestBody KyFilesMultiClassify kyFilesMultiClassify) + { + kyFilesMultiClassify.setUpdateUserId(getUserId()); + kyFilesMultiClassify.setUpdateUserName(getUsername()); + kyFilesMultiClassify.setUpdateTime(DateUtils.getNowDate()); + int res = filesMultiClassifyService.updateKyFilesMultiClassify(kyFilesMultiClassify); + if (res==1){ + return toAjax(res); + }else { + return error("分类名称已存在"); + } + } + + /** + * 删除档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + @SysLog(title = "档案多维度分类管理", businessType = OperaType.QUERY, module = "档案多维度分类管理->删除档案多维度分类管理", details = "删除档案多维度分类管理") + @RequiresPermissions("files:multi:del") + @PostMapping("/delKyFilesMultiClassify") + public AjaxResult delKyFilesMultiClassify(@Validated @RequestBody KyFilesMultiClassify kyFilesMultiClassify) + { + return toAjax(filesMultiClassifyService.delKyFilesMultiClassify(kyFilesMultiClassify)); + } + +} diff --git a/bonus-admin/src/main/java/com/bonus/web/controller/tool/KyDataClassifyController.java b/bonus-admin/src/main/java/com/bonus/web/controller/tool/KyDataClassifyController.java index 52c20e9..9966123 100644 --- a/bonus-admin/src/main/java/com/bonus/web/controller/tool/KyDataClassifyController.java +++ b/bonus-admin/src/main/java/com/bonus/web/controller/tool/KyDataClassifyController.java @@ -69,7 +69,13 @@ public class KyDataClassifyController extends BaseController { kyDataClassify.setUpdateUserId(getUserId()); kyDataClassify.setUpdateUserName(getUsername()); kyDataClassify.setUpdateTime(DateUtils.getNowDate()); - return toAjax(kyDataClassifyService.addKyDataClassify(kyDataClassify)); + int res = kyDataClassifyService.addKyDataClassify(kyDataClassify); + if (res==1){ + return toAjax(res); + }else { + return error("数据类型名称已存在"); + } + } /** @@ -109,6 +115,7 @@ public class KyDataClassifyController extends BaseController { * @return */ /*@PreAuthorize("@ss.hasPermi('data:classify:list')")*/ + @RequiresPermissions("data:Collect:list") @GetMapping("/listAll") public TableDataInfo listAll(KyDataClassify kyDataClassify) { diff --git a/bonus-common/pom.xml b/bonus-common/pom.xml index d0d1bc9..d378cb7 100644 --- a/bonus-common/pom.xml +++ b/bonus-common/pom.xml @@ -164,6 +164,11 @@ spring-session-data-redis + + com.fasterxml.jackson.core + jackson-databind + + \ No newline at end of file diff --git a/bonus-common/src/main/java/com/bonus/common/filter/RequestCoverFilter.java b/bonus-common/src/main/java/com/bonus/common/filter/RequestCoverFilter.java index ef51fb1..b669e50 100644 --- a/bonus-common/src/main/java/com/bonus/common/filter/RequestCoverFilter.java +++ b/bonus-common/src/main/java/com/bonus/common/filter/RequestCoverFilter.java @@ -218,8 +218,8 @@ public class RequestCoverFilter implements Filter { throw new CaptchaException("请求参数不正确"); } String calculatedHash = Sm3Util.encrypt(query); - log.debug("计算出的哈希值: {}", calculatedHash); - log.debug("提供的哈希值: {}", providedHmac); + log.info("计算出的哈希值: {}", calculatedHash); + log.info("提供的哈希值: {}", providedHmac); if (!calculatedHash.equals(providedHmac)) { log.error("参数完整性校验失败"); throw new CaptchaException("请求参数不正确"); @@ -279,6 +279,7 @@ public class RequestCoverFilter implements Filter { public QueryStringRequestWrapper(HttpServletRequest request, String queryString) { super(request); this.queryString = queryString; +// log.info("QueryStringRequestWrapper 接收到的参数: {}", queryString); } @Override @@ -295,7 +296,7 @@ public class RequestCoverFilter implements Filter { @Override public Map getParameterMap() { if (cachedParameterMap == null) { - cachedParameterMap = parseNestedQueryString(queryString); + cachedParameterMap = parseQueryString(queryString); } return cachedParameterMap; } @@ -311,52 +312,68 @@ public class RequestCoverFilter implements Filter { } /** - * 解析嵌套查询字符串为Map,支持 params[beginTime] 格式 + * 解析查询字符串,支持普通格式和嵌套格式 */ - private Map parseNestedQueryString(String queryString) { + private Map parseQueryString(String queryString) { Map parameterMap = new HashMap<>(); - if (queryString != null) { - try { - // 先URL解码 - String decodedQueryString = java.net.URLDecoder.decode(queryString, StandardCharsets.UTF_8.name()); - String[] pairs = decodedQueryString.split("&"); + if (queryString == null || queryString.trim().isEmpty()) { + return parameterMap; + } - for (String pair : pairs) { - String[] keyValue = pair.split("=", 2); - if (keyValue.length == 2) { - String key = keyValue[0]; - String value = keyValue[1]; +// log.info("开始解析查询字符串: {}", queryString); - // 处理嵌套参数格式(如 params[beginTime]) - if (key.startsWith("params[") && key.endsWith("]")) { - // 提取嵌套参数名,如从 "params[beginTime]" 提取 "beginTime" - String nestedKey = key.substring(7, key.length() - 1); + try { + // 先URL解码 + String decodedQueryString = java.net.URLDecoder.decode(queryString, StandardCharsets.UTF_8.name()); + String[] pairs = decodedQueryString.split("&"); - // 将嵌套参数转换为 params. 前缀的参数 - String paramsKey = "params[" + nestedKey + "]"; - parameterMap.put(paramsKey, new String[]{value}); - } else { - // 普通参数处理 - if (parameterMap.containsKey(key)) { - String[] existingValues = parameterMap.get(key); - String[] newValues = Arrays.copyOf(existingValues, existingValues.length + 1); - newValues[existingValues.length] = value; - parameterMap.put(key, newValues); - } else { - parameterMap.put(key, new String[]{value}); - } - } - } + for (String pair : pairs) { + if (pair == null || pair.trim().isEmpty()) { + continue; } - } catch (Exception e) { - log.warn("解析嵌套查询字符串失败,使用简单解析: {}", e.getMessage()); - return parseSimpleQueryString(queryString); + String[] keyValue = pair.split("=", 2); + if (keyValue.length >= 1) { + String key = keyValue[0].trim(); + String value = keyValue.length == 2 ? keyValue[1].trim() : ""; + + // 处理嵌套参数格式(如 params[beginTime]) + if (key.startsWith("params[") && key.endsWith("]")) { + String nestedKey = key.substring(7, key.length() - 1); + String paramsKey = "params[" + nestedKey + "]"; + addParameter(parameterMap, paramsKey, value); + } else { + // 处理普通参数(如 pageNum=1, pageSize=10) + addParameter(parameterMap, key, value); + } + } } + + } catch (Exception e) { + log.warn("解析查询字符串失败: {}", e.getMessage()); + // 失败时尝试简单解析 + return parseSimpleQueryString(queryString); } + +// log.info("解析后的参数Map: {}", parameterMap); return parameterMap; } + /** + * 添加参数到Map,支持多值参数 + */ + private void addParameter(Map parameterMap, String key, String value) { + if (parameterMap.containsKey(key)) { + String[] existingValues = parameterMap.get(key); + String[] newValues = Arrays.copyOf(existingValues, existingValues.length + 1); + newValues[existingValues.length] = value; + parameterMap.put(key, newValues); + } else { + parameterMap.put(key, new String[]{value}); + } +// log.info("添加参数: {} = {}", key, value); + } + /** * 简单解析查询字符串(备用方案) */ @@ -369,15 +386,7 @@ public class RequestCoverFilter implements Filter { if (keyValue.length == 2) { String key = keyValue[0]; String value = keyValue[1]; - - if (parameterMap.containsKey(key)) { - String[] existingValues = parameterMap.get(key); - String[] newValues = Arrays.copyOf(existingValues, existingValues.length + 1); - newValues[existingValues.length] = value; - parameterMap.put(key, newValues); - } else { - parameterMap.put(key, new String[]{value}); - } + addParameter(parameterMap, key, value); } } } diff --git a/bonus-common/src/main/java/com/bonus/common/utils/SafeUtil.java b/bonus-common/src/main/java/com/bonus/common/utils/SafeUtil.java index a4abf6f..4e69712 100644 --- a/bonus-common/src/main/java/com/bonus/common/utils/SafeUtil.java +++ b/bonus-common/src/main/java/com/bonus/common/utils/SafeUtil.java @@ -27,7 +27,7 @@ public class SafeUtil { "|<>|\\[\\]|\\(\\)|/|\"" + "|script|alert|svg|confirm|prompt|onload" + "|%3c|%3e|%2b|@|!|img|src" + - "|%|_)"; + "|%)"; /** * 检查特殊字符的正则表达式 diff --git a/bonus-framework/src/main/java/com/bonus/framework/config/SecurityConfig.java b/bonus-framework/src/main/java/com/bonus/framework/config/SecurityConfig.java index 17d23c6..29e6189 100644 --- a/bonus-framework/src/main/java/com/bonus/framework/config/SecurityConfig.java +++ b/bonus-framework/src/main/java/com/bonus/framework/config/SecurityConfig.java @@ -10,6 +10,7 @@ import org.springframework.security.authentication.dao.DaoAuthenticationProvider import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.session.SessionRegistry; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @@ -111,7 +112,7 @@ public class SecurityConfig .authorizeHttpRequests((requests) -> { permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll()); // 对于登录login 注册register 验证码captchaImage 允许匿名访问 - requests.antMatchers("/login", "/register", "/captchaImage").permitAll() + requests.antMatchers("/login", "/register", "/captchaImage","/session/check").permitAll() // 静态资源,可匿名访问 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() diff --git a/bonus-framework/src/main/java/com/bonus/framework/config/SessionConfig.java b/bonus-framework/src/main/java/com/bonus/framework/config/SessionConfig.java new file mode 100644 index 0000000..adb50da --- /dev/null +++ b/bonus-framework/src/main/java/com/bonus/framework/config/SessionConfig.java @@ -0,0 +1,30 @@ +package com.bonus.framework.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.session.SessionRegistry; +import org.springframework.security.core.session.SessionRegistryImpl; +import org.springframework.security.web.session.HttpSessionEventPublisher; + +/** + * Session管理配置 + */ +@Configuration +public class SessionConfig { + + /** + * 注册SessionRegistry bean + */ + @Bean + public SessionRegistry sessionRegistry() { + return new SessionRegistryImpl(); + } + + /** + * 注册HttpSessionEventPublisher,用于监听session创建和销毁事件 + */ + @Bean + public HttpSessionEventPublisher httpSessionEventPublisher() { + return new HttpSessionEventPublisher(); + } +} \ No newline at end of file diff --git a/bonus-framework/src/main/java/com/bonus/framework/filter/ReplayAttackFilter.java b/bonus-framework/src/main/java/com/bonus/framework/filter/ReplayAttackFilter.java index 9d46a66..0071f49 100644 --- a/bonus-framework/src/main/java/com/bonus/framework/filter/ReplayAttackFilter.java +++ b/bonus-framework/src/main/java/com/bonus/framework/filter/ReplayAttackFilter.java @@ -38,6 +38,7 @@ public class ReplayAttackFilter implements Filter { ignoreUrlPatterns.add("/smartArchives/logout"); ignoreUrlPatterns.add("/smartArchives/getInfo"); ignoreUrlPatterns.add("/smartArchives/getRouters"); + ignoreUrlPatterns.add("/smartArchives/session/check"); } @Autowired diff --git a/bonus-framework/src/main/java/com/bonus/framework/interceptor/ParamSecureHandler.java b/bonus-framework/src/main/java/com/bonus/framework/interceptor/ParamSecureHandler.java index e59688a..7edbc1b 100644 --- a/bonus-framework/src/main/java/com/bonus/framework/interceptor/ParamSecureHandler.java +++ b/bonus-framework/src/main/java/com/bonus/framework/interceptor/ParamSecureHandler.java @@ -5,6 +5,7 @@ import com.bonus.common.core.domain.AjaxResult; import com.bonus.common.utils.SafeUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.web.servlet.AsyncHandlerInterceptor; @@ -33,6 +34,7 @@ public class ParamSecureHandler implements AsyncHandlerInterceptor { ignoreUrlPatterns.add("/smartArchives/logout"); ignoreUrlPatterns.add("/smartArchives/getInfo"); ignoreUrlPatterns.add("/smartArchives/getRouters"); + ignoreUrlPatterns.add("/smartArchives/session/check"); } private String rnd = null; @@ -67,6 +69,7 @@ public class ParamSecureHandler implements AsyncHandlerInterceptor { } XssRequestWrapper requestWrapper = new XssRequestWrapper(request); +// System.err.println(JSON.toJSONString(request.getParameterMap())); /** * 校验参数是否合法 */ diff --git a/bonus-framework/src/main/java/com/bonus/framework/interceptor/XssRequestWrapper.java b/bonus-framework/src/main/java/com/bonus/framework/interceptor/XssRequestWrapper.java index 2eb3934..e5632e4 100644 --- a/bonus-framework/src/main/java/com/bonus/framework/interceptor/XssRequestWrapper.java +++ b/bonus-framework/src/main/java/com/bonus/framework/interceptor/XssRequestWrapper.java @@ -17,7 +17,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.regex.Matcher; import java.util.regex.Pattern; /** @@ -47,12 +46,12 @@ public class XssRequestWrapper extends HttpServletRequestWrapper { } String requestBody = stringBuilder.toString(); - // 进行XSS清理 - streamParam = xssClean(requestBody); + // 不变更请求体,只做检测 + streamParam = requestBody; body = streamParam.getBytes(request.getCharacterEncoding() != null ? request.getCharacterEncoding() : "UTF-8"); - // 检查安全性 + // 检查安全性(仅校验,不篡改) String queryStr = request.getQueryString(); setChecked(xssCleanNew(requestBody) && (queryStr == null || xssCleanNew(queryStr))); @@ -63,7 +62,8 @@ public class XssRequestWrapper extends HttpServletRequestWrapper { setChecked(false); } - queryString = xssClean(request.getQueryString()); + // 不对查询串做篡改,保持原样,防止影响参数绑定 + queryString = request.getQueryString(); } @Override @@ -166,18 +166,14 @@ public class XssRequestWrapper extends HttpServletRequestWrapper { private static final String regex9 = "vbscript:"; private static final String regex10 = "onload(.*?)="; - // 添加安全脚本模式 - public static final String SAFE_SCRIPT_PATTERN = "(\\||;|\\$|'|\\'|0x0d|0x0a|\\%27|\\%3B|<>|\\[\\]|\\(\\)|\"|script|alert|svg|confirm|prompt|onload|%3c|%3e|%2b|@|!|img|src)"; + // 安全模式:移除过度严格的字符级别清理,避免破坏 JSON/参数结构 + // public static final String SAFE_SCRIPT_PATTERN = "(\\||;|\\$|'|\\'|0x0d|0x0a|\\%27|\\%3B|_|.)"; private String xssClean(String value) { if (value == null) { return null; } - // 移除空字符串替换(这行代码没有实际效果) - // value = value.replaceAll("", ""); - - // 使用预编译的模式提高性能 value = Pattern.compile(regex1, Pattern.CASE_INSENSITIVE).matcher(value).replaceAll(""); value = Pattern.compile(regex2, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL).matcher(value).replaceAll(""); value = Pattern.compile(regex3, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL).matcher(value).replaceAll(""); @@ -188,8 +184,8 @@ public class XssRequestWrapper extends HttpServletRequestWrapper { value = Pattern.compile(regex8, Pattern.CASE_INSENSITIVE).matcher(value).replaceAll(""); value = Pattern.compile(regex9, Pattern.CASE_INSENSITIVE).matcher(value).replaceAll(""); value = Pattern.compile(regex10, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL).matcher(value).replaceAll(""); - // 添加额外的安全过滤 - value = Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE).matcher(value).replaceAll(""); + // 移除对普通字符的全量替换,防止破坏字段名/JSON结构 + // value = Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE).matcher(value).replaceAll(""); return value; } @@ -215,7 +211,8 @@ public class XssRequestWrapper extends HttpServletRequestWrapper { patterns.add(Pattern.compile(regex8, Pattern.CASE_INSENSITIVE)); patterns.add(Pattern.compile(regex9, Pattern.CASE_INSENSITIVE)); patterns.add(Pattern.compile(regex10, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL)); - patterns.add(Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE)); + // 移除过度严格的 SAFE_SCRIPT_PATTERN 检查 + // patterns.add(Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE)); for (Pattern pattern : patterns) { if (match(pattern, value)) { @@ -332,7 +329,8 @@ public class XssRequestWrapper extends HttpServletRequestWrapper { patterns.add(Pattern.compile(regex8, Pattern.CASE_INSENSITIVE)); patterns.add(Pattern.compile(regex9, Pattern.CASE_INSENSITIVE)); patterns.add(Pattern.compile(regex10, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL)); - patterns.add(Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE)); + // 移除过度严格的 SAFE_SCRIPT_PATTERN 检查 + // patterns.add(Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE)); for (Pattern pattern : patterns) { if (match(pattern, value)) { diff --git a/bonus-framework/src/main/java/com/bonus/framework/security/handle/LogoutSuccessHandlerImpl.java b/bonus-framework/src/main/java/com/bonus/framework/security/handle/LogoutSuccessHandlerImpl.java index 15f1f71..8f69a27 100644 --- a/bonus-framework/src/main/java/com/bonus/framework/security/handle/LogoutSuccessHandlerImpl.java +++ b/bonus-framework/src/main/java/com/bonus/framework/security/handle/LogoutSuccessHandlerImpl.java @@ -4,6 +4,7 @@ import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.Authentication; @@ -30,6 +31,7 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler @Autowired private TokenService tokenService; + /** * 退出处理 * @@ -43,6 +45,7 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler if (StringUtils.isNotNull(loginUser)) { String userName = loginUser.getUsername(); + String sessionId = request.getSession().getId(); // 删除用户缓存记录 tokenService.delLoginUser(loginUser.getToken()); // 记录用户退出日志 diff --git a/bonus-framework/src/main/java/com/bonus/framework/web/service/SysLoginService.java b/bonus-framework/src/main/java/com/bonus/framework/web/service/SysLoginService.java index 2906dc3..098c987 100644 --- a/bonus-framework/src/main/java/com/bonus/framework/web/service/SysLoginService.java +++ b/bonus-framework/src/main/java/com/bonus/framework/web/service/SysLoginService.java @@ -1,11 +1,14 @@ package com.bonus.framework.web.service; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import com.bonus.common.constant.CacheConstants; import com.bonus.common.constant.Constants; @@ -52,6 +55,8 @@ public class SysLoginService @Autowired private ISysConfigService configService; + + /** * 登录验证 * @@ -61,7 +66,7 @@ public class SysLoginService * @param uuid 唯一标识 * @return 结果 */ - public String login(String username, String password, String code, String uuid) + public String login(HttpServletRequest request,String username, String password, String code, String uuid) { // 验证码校验 validateCaptcha(username, code, uuid); diff --git a/bonus-system/src/main/java/com/bonus/system/domain/KyDataClassify.java b/bonus-system/src/main/java/com/bonus/system/domain/KyDataClassify.java index 256ab05..01c6c6b 100644 --- a/bonus-system/src/main/java/com/bonus/system/domain/KyDataClassify.java +++ b/bonus-system/src/main/java/com/bonus/system/domain/KyDataClassify.java @@ -84,11 +84,12 @@ public class KyDataClassify { this.dataTypeName = dataTypeName; } + @Size(min = 0, max = 255, message = "备注不能超过255个字符") public String getRemark() { return remark; } - @Size(min = 0, max = 255, message = "备注不能超过255个字符") + public void setRemark(String remark) { this.remark = remark; } diff --git a/bonus-system/src/main/java/com/bonus/system/domain/KyFilesCustomizeClassify.java b/bonus-system/src/main/java/com/bonus/system/domain/KyFilesCustomizeClassify.java new file mode 100644 index 0000000..5a0b1ed --- /dev/null +++ b/bonus-system/src/main/java/com/bonus/system/domain/KyFilesCustomizeClassify.java @@ -0,0 +1,157 @@ +package com.bonus.system.domain; + +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * @author 马三炮 + * @date 2025/9/11 + */ +public class KyFilesCustomizeClassify { + + /** + * id + */ + private Long id; + + /** + * 自定义分类名称 + */ + private String customizeClassifyName; + + /** + * 分类描述 + */ + private String classifyDesc; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 修改时间 + */ + private Date updateTime; + + /** + * 创建人 + */ + private Long createUserId; + + /** + * 创建人姓名 + */ + private String createUserName; + + /** + * 修改人 + */ + private Long updateUserId; + + /** + * 修改人姓名 + */ + private String updateUserName; + + /** + * 是否删除 0. 删除 1.未删除 + */ + private String delFlag; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + @Size(min = 0, max = 64, message = "自定义分类名称超过64个字符") + public String getCustomizeClassifyName() { + return customizeClassifyName; + } + + public void setCustomizeClassifyName(String customizeClassifyName) { + this.customizeClassifyName = customizeClassifyName; + } + @Size(min = 0, max = 255, message = "分类描述超过64个字符") + public String getClassifyDesc() { + return classifyDesc; + } + + public void setClassifyDesc(String classifyDesc) { + this.classifyDesc = classifyDesc; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Long getCreateUserId() { + return createUserId; + } + + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public Long getUpdateUserId() { + return updateUserId; + } + + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } + + public String getUpdateUserName() { + return updateUserName; + } + + public void setUpdateUserName(String updateUserName) { + this.updateUserName = updateUserName; + } + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + @Override + public String toString() { + return "KyFilesCustomizeClassify{" + + "id=" + id + + ", customizeClassifyName='" + customizeClassifyName + '\'' + + ", classifyDesc='" + classifyDesc + '\'' + + ", createTime=" + createTime + + ", updateTime=" + updateTime + + ", createUserId=" + createUserId + + ", createUserName='" + createUserName + '\'' + + ", updateUserId=" + updateUserId + + ", updateUserName='" + updateUserName + '\'' + + ", delFlag='" + delFlag + '\'' + + '}'; + } +} diff --git a/bonus-system/src/main/java/com/bonus/system/domain/KyFilesMultiClassify.java b/bonus-system/src/main/java/com/bonus/system/domain/KyFilesMultiClassify.java index c8f7b52..11f196b 100644 --- a/bonus-system/src/main/java/com/bonus/system/domain/KyFilesMultiClassify.java +++ b/bonus-system/src/main/java/com/bonus/system/domain/KyFilesMultiClassify.java @@ -26,6 +26,11 @@ public class KyFilesMultiClassify { */ private String dimension; + + /** + * 维度(字典表配置) + */ + private String dictLabel; /** * 分类描述 */ diff --git a/bonus-system/src/main/java/com/bonus/system/mapper/DataCollectDataMapper.java b/bonus-system/src/main/java/com/bonus/system/mapper/DataCollectDataMapper.java index 70ae43e..f2337ab 100644 --- a/bonus-system/src/main/java/com/bonus/system/mapper/DataCollectDataMapper.java +++ b/bonus-system/src/main/java/com/bonus/system/mapper/DataCollectDataMapper.java @@ -5,5 +5,10 @@ import com.bonus.system.domain.KyDataCollectData; import java.util.List; public interface DataCollectDataMapper { + /** + * 根据数据类型数据汇集管理列表 + * @param kyDataCollectData + * @return + */ List selectKyDataCollectDataList(KyDataCollectData kyDataCollectData); } diff --git a/bonus-system/src/main/java/com/bonus/system/mapper/FilesCustomizeClassifyMapper.java b/bonus-system/src/main/java/com/bonus/system/mapper/FilesCustomizeClassifyMapper.java new file mode 100644 index 0000000..38568eb --- /dev/null +++ b/bonus-system/src/main/java/com/bonus/system/mapper/FilesCustomizeClassifyMapper.java @@ -0,0 +1,17 @@ +package com.bonus.system.mapper; + +import com.bonus.system.domain.KyFilesCustomizeClassify; + +import java.util.List; + +public interface FilesCustomizeClassifyMapper { + List getKyFilesCustomizeClassifyList(KyFilesCustomizeClassify kyFilesCustomizeClassify); + + KyFilesCustomizeClassify getKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify); + + int addKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify); + + int updateKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify); + + int delKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify); +} diff --git a/bonus-system/src/main/java/com/bonus/system/mapper/FilesMultiClassifyMapper.java b/bonus-system/src/main/java/com/bonus/system/mapper/FilesMultiClassifyMapper.java new file mode 100644 index 0000000..15ea3e6 --- /dev/null +++ b/bonus-system/src/main/java/com/bonus/system/mapper/FilesMultiClassifyMapper.java @@ -0,0 +1,44 @@ +package com.bonus.system.mapper; + + +import com.bonus.system.domain.KyFilesMultiClassify; + +import java.util.List; + +public interface FilesMultiClassifyMapper { + + /** + * 获取档案多维度分类管理列表 + * @param kyFilesMultiClassify + * @return + */ + List selectKyFilesMultiClassifyList(KyFilesMultiClassify kyFilesMultiClassify); + + /** + * 新增档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + int addKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify); + + /** + * 根据名称查询档案多维度分类 + * @param kyFilesMultiClassify + * @return + */ + KyFilesMultiClassify getKyFilesMultiClassifyByClassifyName(KyFilesMultiClassify kyFilesMultiClassify); + + /** + * 修改档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + int updateKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify); + + /** + * 删除档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + int delKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify); +} diff --git a/bonus-system/src/main/java/com/bonus/system/mapper/KyDataClassifyMapper.java b/bonus-system/src/main/java/com/bonus/system/mapper/KyDataClassifyMapper.java index 4d6cb2b..2221c63 100644 --- a/bonus-system/src/main/java/com/bonus/system/mapper/KyDataClassifyMapper.java +++ b/bonus-system/src/main/java/com/bonus/system/mapper/KyDataClassifyMapper.java @@ -40,4 +40,11 @@ public interface KyDataClassifyMapper { * @return */ List listAll(KyDataClassify kyDataClassify); + + /** + * 根据名称查看数据 + * @param kyDataClassify + * @return + */ + KyDataClassify selectKyDataClassifyByDataTypeName(KyDataClassify kyDataClassify); } diff --git a/bonus-system/src/main/java/com/bonus/system/service/DataCollectDataService.java b/bonus-system/src/main/java/com/bonus/system/service/DataCollectDataService.java index 5848a88..1473ad4 100644 --- a/bonus-system/src/main/java/com/bonus/system/service/DataCollectDataService.java +++ b/bonus-system/src/main/java/com/bonus/system/service/DataCollectDataService.java @@ -5,5 +5,10 @@ import com.bonus.system.domain.KyDataCollectData; import java.util.List; public interface DataCollectDataService { + /** + * 根据数据类型数据汇集管理列表 + * @param kyDataCollectData + * @return + */ List selectKyDataCollectDataList(KyDataCollectData kyDataCollectData); } diff --git a/bonus-system/src/main/java/com/bonus/system/service/FilesCustomizeClassifyService.java b/bonus-system/src/main/java/com/bonus/system/service/FilesCustomizeClassifyService.java new file mode 100644 index 0000000..1ab1f2f --- /dev/null +++ b/bonus-system/src/main/java/com/bonus/system/service/FilesCustomizeClassifyService.java @@ -0,0 +1,15 @@ +package com.bonus.system.service; + +import com.bonus.system.domain.KyFilesCustomizeClassify; + +import java.util.List; + +public interface FilesCustomizeClassifyService { + List getKyFilesCustomizeClassifyList(KyFilesCustomizeClassify kyFilesCustomizeClassify); + + int addKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify); + + int updateKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify); + + int delKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify); +} diff --git a/bonus-system/src/main/java/com/bonus/system/service/FilesMultiClassifyService.java b/bonus-system/src/main/java/com/bonus/system/service/FilesMultiClassifyService.java new file mode 100644 index 0000000..f63b049 --- /dev/null +++ b/bonus-system/src/main/java/com/bonus/system/service/FilesMultiClassifyService.java @@ -0,0 +1,36 @@ +package com.bonus.system.service; + +import com.bonus.system.domain.KyDataClassify; +import com.bonus.system.domain.KyFilesMultiClassify; + +import java.util.List; + +public interface FilesMultiClassifyService { + /** + * 获取档案多维度分类管理列表 + * @param kyFilesMultiClassify + * @return + */ + List selectKyFilesMultiClassifyList(KyFilesMultiClassify kyFilesMultiClassify); + + /** + * 新增档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + int addKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify); + + /** + * 修改档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + int updateKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify); + + /** + * 删除档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + int delKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify); +} diff --git a/bonus-system/src/main/java/com/bonus/system/service/impl/DataCollectDataServiceImpl.java b/bonus-system/src/main/java/com/bonus/system/service/impl/DataCollectDataServiceImpl.java index 46aa230..e3a15b9 100644 --- a/bonus-system/src/main/java/com/bonus/system/service/impl/DataCollectDataServiceImpl.java +++ b/bonus-system/src/main/java/com/bonus/system/service/impl/DataCollectDataServiceImpl.java @@ -20,6 +20,11 @@ public class DataCollectDataServiceImpl implements DataCollectDataService { @Resource private DataCollectDataMapper dataCollectDataMapper; + /** + * 根据数据类型数据汇集管理列表 + * @param kyDataCollectData + * @return + */ @Override public List selectKyDataCollectDataList(KyDataCollectData kyDataCollectData) { return dataCollectDataMapper.selectKyDataCollectDataList(kyDataCollectData); diff --git a/bonus-system/src/main/java/com/bonus/system/service/impl/FilesCustomizeClassifyServiceImpl.java b/bonus-system/src/main/java/com/bonus/system/service/impl/FilesCustomizeClassifyServiceImpl.java new file mode 100644 index 0000000..d45d718 --- /dev/null +++ b/bonus-system/src/main/java/com/bonus/system/service/impl/FilesCustomizeClassifyServiceImpl.java @@ -0,0 +1,51 @@ +package com.bonus.system.service.impl; + +import com.bonus.common.utils.StringUtils; +import com.bonus.system.domain.KyFilesCustomizeClassify; +import com.bonus.system.mapper.FilesCustomizeClassifyMapper; +import com.bonus.system.service.FilesCustomizeClassifyService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author 马三炮 + * @date 2025/9/11 + */ +@Service +@Slf4j +public class FilesCustomizeClassifyServiceImpl implements FilesCustomizeClassifyService { + + @Resource + private FilesCustomizeClassifyMapper filesCustomizeClassifyMapper; + + @Override + public List getKyFilesCustomizeClassifyList(KyFilesCustomizeClassify kyFilesCustomizeClassify) { + return filesCustomizeClassifyMapper.getKyFilesCustomizeClassifyList(kyFilesCustomizeClassify); + } + + @Override + public int addKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify) { + KyFilesCustomizeClassify kyFilesCustomizeClassifyOld = filesCustomizeClassifyMapper.getKyFilesCustomizeClassify(kyFilesCustomizeClassify); + if (StringUtils.isNotNull(kyFilesCustomizeClassifyOld)){ + return 0; + } + return filesCustomizeClassifyMapper.addKyFilesCustomizeClassify(kyFilesCustomizeClassify); + } + + @Override + public int updateKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify) { + KyFilesCustomizeClassify kyFilesCustomizeClassifyOld = filesCustomizeClassifyMapper.getKyFilesCustomizeClassify(kyFilesCustomizeClassify); + if (StringUtils.isNotNull(kyFilesCustomizeClassifyOld) && !kyFilesCustomizeClassify.getId().equals(kyFilesCustomizeClassifyOld.getId())){ + return 0; + } + return filesCustomizeClassifyMapper.updateKyFilesCustomizeClassify(kyFilesCustomizeClassify); + } + + @Override + public int delKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify) { + return filesCustomizeClassifyMapper.delKyFilesCustomizeClassify(kyFilesCustomizeClassify); + } +} diff --git a/bonus-system/src/main/java/com/bonus/system/service/impl/FilesMultiClassifyServiceImpl.java b/bonus-system/src/main/java/com/bonus/system/service/impl/FilesMultiClassifyServiceImpl.java new file mode 100644 index 0000000..b8f8267 --- /dev/null +++ b/bonus-system/src/main/java/com/bonus/system/service/impl/FilesMultiClassifyServiceImpl.java @@ -0,0 +1,74 @@ +package com.bonus.system.service.impl; + +import com.bonus.common.utils.StringUtils; +import com.bonus.system.domain.KyDataClassify; +import com.bonus.system.domain.KyFilesMultiClassify; +import com.bonus.system.mapper.FilesMultiClassifyMapper; +import com.bonus.system.service.FilesMultiClassifyService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author 马三炮 + * @date 2025/9/11 + */ +@Service +@Slf4j +public class FilesMultiClassifyServiceImpl implements FilesMultiClassifyService { + + @Resource + private FilesMultiClassifyMapper filesMultiClassifyMapper; + + /** + * 获取档案多维度分类管理列表 + * @param kyFilesMultiClassify + * @return + */ + @Override + public List selectKyFilesMultiClassifyList(KyFilesMultiClassify kyFilesMultiClassify) { + return filesMultiClassifyMapper.selectKyFilesMultiClassifyList(kyFilesMultiClassify); + } + + /** + * 新增档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + @Override + public int addKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify) { + //查看分类名称是否存在 + KyFilesMultiClassify kyFilesMultiClassifyOld = filesMultiClassifyMapper.getKyFilesMultiClassifyByClassifyName(kyFilesMultiClassify); + if (StringUtils.isNotNull(kyFilesMultiClassifyOld)){ + return 0; + } + return filesMultiClassifyMapper.addKyFilesMultiClassify(kyFilesMultiClassify); + } + + /** + * 修改档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + @Override + public int updateKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify) { + //查看分类名称是否存在 + KyFilesMultiClassify kyFilesMultiClassifyOld = filesMultiClassifyMapper.getKyFilesMultiClassifyByClassifyName(kyFilesMultiClassify); + if (StringUtils.isNotNull(kyFilesMultiClassifyOld) && !kyFilesMultiClassify.getId().equals(kyFilesMultiClassifyOld.getId())){ + return 0; + } + return filesMultiClassifyMapper.updateKyFilesMultiClassify(kyFilesMultiClassify); + } + + /** + * 删除档案多维度分类管理 + * @param kyFilesMultiClassify + * @return + */ + @Override + public int delKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify) { + return filesMultiClassifyMapper.delKyFilesMultiClassify(kyFilesMultiClassify); + } +} diff --git a/bonus-system/src/main/java/com/bonus/system/service/impl/KyDataClassifyServiceImpl.java b/bonus-system/src/main/java/com/bonus/system/service/impl/KyDataClassifyServiceImpl.java index 380af4e..85811b2 100644 --- a/bonus-system/src/main/java/com/bonus/system/service/impl/KyDataClassifyServiceImpl.java +++ b/bonus-system/src/main/java/com/bonus/system/service/impl/KyDataClassifyServiceImpl.java @@ -3,6 +3,7 @@ package com.bonus.system.service.impl; import com.bonus.common.core.domain.entity.SysUser; import com.bonus.common.utils.DateUtils; import com.bonus.common.utils.SecurityUtils; +import com.bonus.common.utils.StringUtils; import com.bonus.system.domain.KyDataClassify; import com.bonus.system.mapper.KyDataClassifyMapper; import com.bonus.system.service.KyDataClassifyService; @@ -40,6 +41,11 @@ public class KyDataClassifyServiceImpl implements KyDataClassifyService { */ @Override public int addKyDataClassify(KyDataClassify kyDataClassify) { + //判读数据名称是否存在 + KyDataClassify kyDataClassifyOld = kyDataClassifyMapper.selectKyDataClassifyByDataTypeName(kyDataClassify); + if (StringUtils.isNotNull(kyDataClassifyOld)){ + return 0; + } return kyDataClassifyMapper.addKyDataClassify(kyDataClassify); } @@ -50,6 +56,11 @@ public class KyDataClassifyServiceImpl implements KyDataClassifyService { */ @Override public int updateKyDataClassify(KyDataClassify kyDataClassify) { + //判读数据名称是否存在 + KyDataClassify kyDataClassifyOld = kyDataClassifyMapper.selectKyDataClassifyByDataTypeName(kyDataClassify); + if (StringUtils.isNotNull(kyDataClassifyOld) && !kyDataClassify.getId().equals(kyDataClassifyOld.getId())){ + return 0; + } return kyDataClassifyMapper.updateKyDataClassify(kyDataClassify); } diff --git a/bonus-system/src/main/resources/mapper/system/DataCollectDataMapper.xml b/bonus-system/src/main/resources/mapper/system/DataCollectDataMapper.xml index 300d4ba..e0319dd 100644 --- a/bonus-system/src/main/resources/mapper/system/DataCollectDataMapper.xml +++ b/bonus-system/src/main/resources/mapper/system/DataCollectDataMapper.xml @@ -9,7 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" from da_ky_data_collect_data where del_flag = '1' - data_classify_id = #{dataClassifyId} + AND data_classify_id = #{dataClassifyId} diff --git a/bonus-system/src/main/resources/mapper/system/FilesCustomizeClassifyMapper.xml b/bonus-system/src/main/resources/mapper/system/FilesCustomizeClassifyMapper.xml new file mode 100644 index 0000000..e52e025 --- /dev/null +++ b/bonus-system/src/main/resources/mapper/system/FilesCustomizeClassifyMapper.xml @@ -0,0 +1,50 @@ + + + + + insert into da_ky_files_customize_classify + (customize_classify_name,classify_desc,create_time,update_time,create_user_id,create_user_name,update_user_id,update_user_name) + values (#{customizeClassifyName},#{classifyDesc},#{classifyDesc},#{createTime},#{updateTime},#{createUserId},#{createUserName},#{updateUserId},#{updateUserName}) + + + + update da_ky_files_customize_classify + + + customize_classify_name =#{customizeClassifyName}, + + + classify_desc =#{classifyDesc}, + + + update_user_id =#{updateUserId}, + + + update_user_name =#{updateUserName}, + + + update_time =#{updateTime}, + + + where id = #{id} + + + update da_ky_files_customize_classify set del_flag = '0' where id = #{id} + + + + + diff --git a/bonus-system/src/main/resources/mapper/system/FilesMultiClassifyMapper.xml b/bonus-system/src/main/resources/mapper/system/FilesMultiClassifyMapper.xml new file mode 100644 index 0000000..6844533 --- /dev/null +++ b/bonus-system/src/main/resources/mapper/system/FilesMultiClassifyMapper.xml @@ -0,0 +1,57 @@ + + + + + insert into da_ky_files_multi_classify + (classify_name,dimension,classify_desc,create_time,update_time,create_user_id,create_user_name,update_user_id,update_user_name) + values (#{classifyName},#{dimension},#{classifyDesc},#{createTime},#{updateTime},#{createUserId},#{createUserName},#{updateUserId},#{updateUserName}) + + + update da_ky_files_multi_classify + + + classify_name =#{classifyName}, + + + dimension =#{dimension}, + + + classify_desc =#{classifyDesc}, + + + update_user_id =#{updateUserId}, + + + update_user_name =#{updateUserName}, + + + update_time =#{updateTime}, + + + where id = #{id} + + + update da_ky_files_multi_classify set del_flag='0' where id = #{id} + + + + + + diff --git a/bonus-system/src/main/resources/mapper/system/KyDataClassifyMapper.xml b/bonus-system/src/main/resources/mapper/system/KyDataClassifyMapper.xml index b33de85..90eaa04 100644 --- a/bonus-system/src/main/resources/mapper/system/KyDataClassifyMapper.xml +++ b/bonus-system/src/main/resources/mapper/system/KyDataClassifyMapper.xml @@ -20,6 +20,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_user_name =#{updateUserName}, + + update_time =#{updateTime}, + + + remark =#{remark}, + where id = #{id} @@ -33,6 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and data_type_name LIKE CONCAT('%', #{dataTypeName}, '%') + order by create_time desc + diff --git a/bonus-system/src/main/resources/mapper/system/SysIpWhitelistMapper.xml b/bonus-system/src/main/resources/mapper/system/SysIpWhitelistMapper.xml index d74c12c..d7a3e4a 100644 --- a/bonus-system/src/main/resources/mapper/system/SysIpWhitelistMapper.xml +++ b/bonus-system/src/main/resources/mapper/system/SysIpWhitelistMapper.xml @@ -65,17 +65,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT COUNT(*) FROM da_ky_sys_ip_whitelist WHERE status = '0' - AND ( - (ip_address = #{ip} AND ip_address IS NOT NULL) - OR - (ip_range_start IS NOT NULL AND ip_range_end IS NOT NULL - AND INET_ATON(#{ip}) BETWEEN INET_ATON(ip_range_start) AND INET_ATON(ip_range_end)) - ) - AND ( + AND ( + (TRIM(ip_address) = #{ip}) + OR + (ip_range_start IS NOT NULL + AND ip_range_end IS NOT NULL + AND TRIM(ip_range_start) != '' + AND TRIM(ip_range_end) != '' + AND INET_ATON(#{ip}) BETWEEN + INET_ATON(TRIM(ip_range_start)) AND + INET_ATON(TRIM(ip_range_end))) + ) + AND ( (access_start_time IS NULL AND access_end_time IS NULL) - OR - (#{currentTime} BETWEEN access_start_time AND access_end_time) - ) + OR + (access_start_time <= #{currentTime} + AND access_end_time >= #{currentTime}) + )