From 12ca95224ab1465c4a7904539646cf966923042a Mon Sep 17 00:00:00 2001 From: llh <756459687@qq.com> Date: Tue, 3 Mar 2026 08:52:00 +0800 Subject: [PATCH] feat:init --- doc/sql/llm_20260208_pg.sql | 13 ++++++++ doc/sql/llm_20260208_pg_表结构.xlsx | Bin 0 -> 43454 bytes doc/sql/sql_tables_with_cnname(1).xlsx | Bin 0 -> 25440 bytes llm-guard-auth/pom.xml | 31 +++++++++++++++--- .../datascope/aspect/DataScopeAspect.java | 6 ++-- llm-guard-gateway/pom.xml | 29 ++++++++++++++-- llm-guard-modules/llm-guard-biz/pom.xml | 29 ++++++++++++++-- llm-guard-modules/llm-guard-system/pom.xml | 30 +++++++++++++++-- .../mapper/system/SysConfigMapper.xml | 8 ++--- .../resources/mapper/system/SysDeptMapper.xml | 10 +++--- .../mapper/system/SysDictDataMapper.xml | 4 +-- .../mapper/system/SysDictTypeMapper.xml | 8 ++--- .../mapper/system/SysLogininforMapper.xml | 2 +- .../resources/mapper/system/SysMenuMapper.xml | 22 ++++++------- .../mapper/system/SysNoticeMapper.xml | 4 +-- .../mapper/system/SysOperLogMapper.xml | 2 +- .../resources/mapper/system/SysPostMapper.xml | 4 +-- .../resources/mapper/system/SysRoleMapper.xml | 8 ++--- .../resources/mapper/system/SysUserMapper.xml | 16 ++++----- 19 files changed, 166 insertions(+), 60 deletions(-) create mode 100644 doc/sql/llm_20260208_pg_表结构.xlsx create mode 100644 doc/sql/sql_tables_with_cnname(1).xlsx diff --git a/doc/sql/llm_20260208_pg.sql b/doc/sql/llm_20260208_pg.sql index 36bbe75..4facda3 100644 --- a/doc/sql/llm_20260208_pg.sql +++ b/doc/sql/llm_20260208_pg.sql @@ -539,6 +539,7 @@ CREATE TABLE d_acl_ip_rule ( is_deleted INT NOT NULL DEFAULT 0, PRIMARY KEY (id) ); +COMMENT ON TABLE d_acl_ip_rule IS '访问控制-IP黑白名单规则'; CREATE INDEX idx_acl_ip_scope_status ON d_acl_ip_rule (scope_code, status); CREATE INDEX idx_acl_ip_priority ON d_acl_ip_rule (priority); @@ -557,6 +558,7 @@ CREATE TABLE d_acl_endpoint_rule ( is_deleted INT NOT NULL DEFAULT 0, PRIMARY KEY (id) ); +COMMENT ON TABLE d_acl_endpoint_rule IS '访问控制-接口封堵规则'; CREATE INDEX idx_acl_ep_scope_status ON d_acl_endpoint_rule (scope_code, status); CREATE INDEX idx_acl_ep_match_type ON d_acl_endpoint_rule (match_type); @@ -577,6 +579,7 @@ CREATE TABLE d_acl_custom_rule ( PRIMARY KEY (id), CONSTRAINT uk_acl_custom_rule_code UNIQUE (rule_code) ); +COMMENT ON TABLE d_acl_custom_rule IS '访问控制-自定义组合规则'; CREATE INDEX idx_acl_custom_scope_status ON d_acl_custom_rule (scope_code, status); CREATE INDEX idx_acl_custom_priority ON d_acl_custom_rule (priority); @@ -593,6 +596,7 @@ CREATE TABLE d_acl_custom_condition ( PRIMARY KEY (id), CONSTRAINT fk_acl_condition_rule FOREIGN KEY (rule_id) REFERENCES d_acl_custom_rule(id) ON DELETE CASCADE ); +COMMENT ON TABLE d_acl_custom_condition IS '访问控制-组合规则条件明细'; CREATE INDEX idx_acl_condition_rule_seq ON d_acl_custom_condition (rule_id, seq_no); -- ========================= @@ -616,6 +620,7 @@ CREATE TABLE d_content_policy ( PRIMARY KEY (id), CONSTRAINT uk_content_policy_code UNIQUE (policy_code) ); +COMMENT ON TABLE d_content_policy IS '内容管控-合规策略'; CREATE INDEX idx_content_policy_scope_status ON d_content_policy (scope_code, status); CREATE TABLE d_content_dlp_rule ( @@ -635,6 +640,7 @@ CREATE TABLE d_content_dlp_rule ( PRIMARY KEY (id), CONSTRAINT uk_content_dlp_code UNIQUE (rule_code) ); +COMMENT ON TABLE d_content_dlp_rule IS '内容管控-DLP识别规则'; CREATE INDEX idx_content_dlp_scope_status ON d_content_dlp_rule (scope_code, status); CREATE TABLE d_content_mask_policy ( @@ -654,6 +660,7 @@ CREATE TABLE d_content_mask_policy ( PRIMARY KEY (id), CONSTRAINT uk_content_mask_policy_code UNIQUE (policy_code) ); +COMMENT ON TABLE d_content_mask_policy IS '内容管控-脱敏策略'; CREATE INDEX idx_content_mask_scope_status ON d_content_mask_policy (scope_code, status); -- ========================= @@ -676,6 +683,7 @@ CREATE TABLE d_attack_switch ( PRIMARY KEY (id), CONSTRAINT uk_attack_switch_scope_key UNIQUE (scope_code, switch_key) ); +COMMENT ON TABLE d_attack_switch IS '攻击防护-开关矩阵'; CREATE INDEX idx_attack_switch_scope_sort ON d_attack_switch (scope_code, sort_order); CREATE TABLE d_attack_rule ( @@ -695,6 +703,7 @@ CREATE TABLE d_attack_rule ( PRIMARY KEY (id), CONSTRAINT uk_attack_rule_code UNIQUE (rule_code) ); +COMMENT ON TABLE d_attack_rule IS '攻击防护-注入/提示词规则'; CREATE INDEX idx_attack_rule_scope_category ON d_attack_rule (scope_code, category); CREATE INDEX idx_attack_rule_status ON d_attack_rule (status); @@ -713,6 +722,7 @@ CREATE TABLE d_attack_signature ( is_deleted INT NOT NULL DEFAULT 0, PRIMARY KEY (id) ); +COMMENT ON TABLE d_attack_signature IS '攻击防护-特征库'; CREATE INDEX idx_attack_signature_scope_status ON d_attack_signature (scope_code, status); CREATE INDEX idx_attack_signature_rule_code ON d_attack_signature (rule_code); @@ -731,6 +741,7 @@ CREATE TABLE d_log_attack_policy ( is_deleted INT NOT NULL DEFAULT 0, PRIMARY KEY (id) ); +COMMENT ON TABLE d_log_attack_policy IS '攻击防护-日志策略'; CREATE INDEX idx_log_attack_policy_scope_status ON d_log_attack_policy (scope_code, status); -- ========================= @@ -773,6 +784,7 @@ CREATE TABLE d_log_alert_event ( PRIMARY KEY (id), CONSTRAINT uk_alert_event_no UNIQUE (event_no) ); +COMMENT ON TABLE d_log_alert_event IS '告警命中日志主表(记录请求触发的告警)'; CREATE INDEX idx_alert_request ON d_log_alert_event (request_id); CREATE INDEX idx_alert_trace ON d_log_alert_event (trace_id); CREATE INDEX idx_alert_scope_time ON d_log_alert_event (scope_code, occurred_at); @@ -798,4 +810,5 @@ CREATE TABLE d_log_alert_hit ( PRIMARY KEY (id), CONSTRAINT fk_log_alert_hit_event FOREIGN KEY (event_id) REFERENCES d_log_alert_event(id) ON DELETE CASCADE ); +COMMENT ON TABLE d_log_alert_hit IS '告警命中日志明细表(一条事件可包含多条命中明细)'; CREATE INDEX idx_alert_hit_event ON d_log_alert_hit (event_id, hit_order); diff --git a/doc/sql/llm_20260208_pg_表结构.xlsx b/doc/sql/llm_20260208_pg_表结构.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..81b36e71ab6ea105e876ad0b5992b71dae9a6306 GIT binary patch literal 43454 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 y7^4_nfj+@JeTWfrtVg3qG5W0c1mpM=Gv-eeL literal 0 HcmV?d00001 diff --git a/doc/sql/sql_tables_with_cnname(1).xlsx b/doc/sql/sql_tables_with_cnname(1).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e826b31d0df4ce271aa7bf5136b33a4acf055eec GIT binary patch literal 25440 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 - + ${project.artifactId} - org.springframework.boot - spring-boot-maven-plugin + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + + com.llm.guard.auth.LlmAuthApplication + true + lib/ + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.6.1 + copy-dependencies + package - repackage + copy-dependencies + + ${project.build.directory}/lib + false + diff --git a/llm-guard-common/llm-guard-common-datascope/src/main/java/com/llm/guard/common/datascope/aspect/DataScopeAspect.java b/llm-guard-common/llm-guard-common-datascope/src/main/java/com/llm/guard/common/datascope/aspect/DataScopeAspect.java index ff971e4..588c6a4 100644 --- a/llm-guard-common/llm-guard-common-datascope/src/main/java/com/llm/guard/common/datascope/aspect/DataScopeAspect.java +++ b/llm-guard-common/llm-guard-common-datascope/src/main/java/com/llm/guard/common/datascope/aspect/DataScopeAspect.java @@ -122,11 +122,11 @@ public class DataScopeAspect if (scopeCustomIds.size() > 1) { // 多个自定数据权限使用in查询,避免多次拼接。 - sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id in ({}) ) ", deptAlias, String.join(",", scopeCustomIds))); + sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM d_sys_role_dept WHERE role_id in ({}) ) ", deptAlias, String.join(",", scopeCustomIds))); } else { - sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId())); + sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM d_sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId())); } } else if (DATA_SCOPE_DEPT.equals(dataScope)) @@ -135,7 +135,7 @@ public class DataScopeAspect } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) { - sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )", deptAlias, user.getDeptId(), user.getDeptId())); + sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM d_sys_dept WHERE dept_id = {} or concat(',', ancestors, ',') like concat('%,', {}, ',%') )", deptAlias, user.getDeptId(), user.getDeptId())); } else if (DATA_SCOPE_SELF.equals(dataScope)) { diff --git a/llm-guard-gateway/pom.xml b/llm-guard-gateway/pom.xml index dfdd642..c0d95ce 100644 --- a/llm-guard-gateway/pom.xml +++ b/llm-guard-gateway/pom.xml @@ -107,13 +107,36 @@ ${project.artifactId} - org.springframework.boot - spring-boot-maven-plugin + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + + com.llm.guard.gateway.LlmGatewayApplication + true + lib/ + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.6.1 + copy-dependencies + package - repackage + copy-dependencies + + ${project.build.directory}/lib + false + diff --git a/llm-guard-modules/llm-guard-biz/pom.xml b/llm-guard-modules/llm-guard-biz/pom.xml index d728d68..35931bf 100644 --- a/llm-guard-modules/llm-guard-biz/pom.xml +++ b/llm-guard-modules/llm-guard-biz/pom.xml @@ -115,13 +115,36 @@ ${project.artifactId} - org.springframework.boot - spring-boot-maven-plugin + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + + com.llm.guard.biz.LlmBizApplication + true + lib/ + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.6.1 + copy-dependencies + package - repackage + copy-dependencies + + ${project.build.directory}/lib + false + diff --git a/llm-guard-modules/llm-guard-system/pom.xml b/llm-guard-modules/llm-guard-system/pom.xml index 98cf30b..a060d9b 100644 --- a/llm-guard-modules/llm-guard-system/pom.xml +++ b/llm-guard-modules/llm-guard-system/pom.xml @@ -79,17 +79,41 @@ + ${project.artifactId} - org.springframework.boot - spring-boot-maven-plugin + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + + com.llm.guard.system.LlmSystemApplication + true + lib/ + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.6.1 + copy-dependencies + package - repackage + copy-dependencies + + ${project.build.directory}/lib + false + diff --git a/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysConfigMapper.xml b/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysConfigMapper.xml index 5b862bb..f9b327a 100644 --- a/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysConfigMapper.xml +++ b/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysConfigMapper.xml @@ -51,10 +51,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND config_key like concat('%', #{configKey}, '%') - and date_format(create_time,'%Y%m%d') >= date_format(#{params.beginTime},'%Y%m%d') + and date(create_time) >= date(#{params.beginTime}) - and date_format(create_time,'%Y%m%d') <= date_format(#{params.endTime},'%Y%m%d') + and date(create_time) <= date(#{params.endTime}) @@ -85,7 +85,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{configType}, #{createBy}, #{remark}, - sysdate() + now() ) @@ -98,7 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" config_type = #{configType}, update_by = #{updateBy}, remark = #{remark}, - update_time = sysdate() + update_time = now() where config_id = #{configId} diff --git a/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysDeptMapper.xml b/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysDeptMapper.xml index a2afa30..4406f52 100644 --- a/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -73,11 +73,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -79,7 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" status = #{status}, remark = #{remark}, update_by = #{updateBy}, - update_time = sysdate() + update_time = now() where dict_id = #{dictId} @@ -98,7 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{status}, #{remark}, #{createBy}, - sysdate() + now() ) diff --git a/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysLogininforMapper.xml b/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysLogininforMapper.xml index 5540bb0..356fe48 100644 --- a/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysLogininforMapper.xml +++ b/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysLogininforMapper.xml @@ -15,7 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into d_sys_logininfor (user_name, status, ipaddr, msg, access_time) - values (#{userName}, #{status}, #{ipaddr}, #{msg}, sysdate()) + values (#{userName}, #{status}, #{ipaddr}, #{msg}, now()) @@ -141,7 +141,7 @@ order_num = #{orderNum}, path = #{path}, component = #{component}, - `query` = #{query}, + query = #{query}, route_name = #{routeName}, is_frame = #{isFrame}, is_cache = #{isCache}, @@ -152,7 +152,7 @@ icon = #{icon}, remark = #{remark}, update_by = #{updateBy}, - update_time = sysdate() + update_time = now() where menu_id = #{menuId} @@ -165,7 +165,7 @@ order_num, path, component, - `query`, + query, route_name, is_frame, is_cache, @@ -195,7 +195,7 @@ #{icon}, #{remark}, #{createBy}, - sysdate() + now() ) @@ -203,4 +203,4 @@ delete from d_sys_menu where menu_id = #{menuId} - \ No newline at end of file + diff --git a/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysNoticeMapper.xml b/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysNoticeMapper.xml index 2d404c5..6fb2214 100644 --- a/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysNoticeMapper.xml +++ b/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysNoticeMapper.xml @@ -58,7 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{status}, #{remark}, #{createBy}, - sysdate() + now() ) @@ -70,7 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" notice_content = #{noticeContent}, status = #{status}, update_by = #{updateBy}, - update_time = sysdate() + update_time = now() where notice_id = #{noticeId} diff --git a/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysOperLogMapper.xml index 3cbea48..bdcef9a 100644 --- a/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysOperLogMapper.xml +++ b/llm-guard-modules/llm-guard-system/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -30,7 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into d_sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_param, json_result, status, error_msg, cost_time, oper_time) - values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, sysdate()) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, now())