# A7-4 日志管理 + A7-5 数据字典逐页对比矩阵(票 05) 范围:A7-4-1 用户操作日志(175 控件)/ A7-4-2 登录日志(162)/ A7-4-3 批量操作日志(188)/ A7-5-1 数据字典(380)。预期:日志三页全缺码,数据字典对照 DictGroup/DictItem 共 13 端点。 ## 一、A7-4 日志管理三页——全缺码(全局日志接口不存在) | 原型页 | 筛选条件 | 列表列 | 特有交互 | |---|---|---|---| | A7-4-1 用户操作日志 | 所属组织(模糊)/操作人(模糊)/时间范围(默认最近 7-30 天)/类型(全部/登录/查询/新增/修改/删除/处理/导入/导出) | 8 列:操作时间/操作人/所属组织/账号名称/操作IP地址/操作类型/操作内容/操作结果(成功/失败) | 时间倒序+分页 | | A7-4-2 登录日志 | 所属组织/操作人/时间范围(默认 7 天)/类型(全部/登录/退出) | 7 列:操作时间/操作人/所属组织/账号名称/操作IP地址/状态/操作类型 | 同上 | | A7-4-3 批量操作日志 | 所属组织/操作人/时间范围/状态(全部/成功/失败/**部分成功**) | 10 列:NO./操作时间/操作人/所属组织/账号名称/操作IP地址/操作类型(导入/导出/修改/删除)/**操作页面**/操作结果(含计数明细文本)/操作(下载) | ①行复选框+顶部「批量下载」打包下载结果文件;②单行「下载」按钮(导入错误报告/导出 Excel/批量修改删除明细);③结果文件保留 **90 天**,超期提示「文件已过期」 | 三页权限口径一致:仅系统管理员及审计权限角色可见。 **端点设计素材**(`/api/log` 下,模块归属为拍板项): - POST /operation/page —— OperationLogPageParam:deptName/operatorName/timeFrom/timeTo/opType(枚举 8 项) - POST /login/page —— LoginLogPageParam:同上,opType 枚举(登录/退出) - POST /batch/page —— BatchLogPageParam:同上,result(成功/失败/部分成功) - POST /batch/download —— ids[] 打包下载结果文件 - GET /batch/file?id= —— 单条结果文件下载(90 天有效期校验) - 出参公共列:opTime/operatorName/deptName/account/ip/opType/content|page/result;写入侧(无页面):由采集机制落库 **实现形态决策素材**(现有域内日志实体映射,票 06 拍板): - OpportunityOplog(oppId 轴):opKind/logType/entityName/fieldName/oldValue/newValue/bizRef/snapshotJson/opSource——服务商机详情轨迹页 - CustomerOplog(customerId 轴):action(11 枚举)/detail/operatorId/operatorName/operatorDeptName 快照——服务客户详情轨迹页 - LeadHistory(leadId 轴):opType(11 枚举)/detail(JSON)/opUserDeptName 快照——服务线索详情轨迹页 - **三表共同缺口**:均无操作 IP、账号名称、全局统一操作类型(登录/查询/导入/导出…)、成功失败结果、操作页面字段;以业务 ID 为轴,无「按人/组织」全局审计轴 → 原型页面无法由现有表直接支撑 - 方案 A:新全局日志表 + AOP/拦截器统一采集(域内三表保留继续服务详情页轨迹)——贴合原型、不动存量 DDL - 方案 B:聚合三表 UNION 查询——需三表补列(IP/账号/结果/页面)、异构枚举映射复杂、跨库分页代价高 - 依赖项:批量操作结果文件(导入错误报告/导出 Excel/批量修改明细)现状无统一文件落盘+保留期管理,方案 A 需一并设计文件存储与清理 ## 二、A7-5 数据字典——无缺码,能力全覆盖 | 原型元素 | 现状 | 结论 | |---|---|---| | 字典分组页签(默认):查询(分组名称/编码模糊)+ 列表 7 列(名称/编码/**字典数量**/排序号/状态/描述/操作:编辑/停用/删除)+ 新增/编辑弹窗(*名称/*编码[创建后不可改]/排序号/描述/状态) | DictGroupController page/saveOrUpdate/delete/status/enabled-list;DictGroupDTO name/code/sortNo/status/description/builtin/**itemCount**(含启用+停用,与原型口径一致) | 覆盖 | | 字典列表页签:查询(keyword/分组/状态)+ 列表 10 列(名称/编码/键值/**二级字典项**/分组名称/排序号/默认值/状态/描述/操作)+ 新增/编辑弹窗(*分组/*编码/排序号/描述/状态/*名称/*键值/默认值/**是否增加二级字典项**+*二级字典项) | DictItemController page/saveOrUpdate/delete/force-delete/status/set-default/enabled-list/tree;ItemPageParam groupId+status+keyword;DictItemDTO name/code/**value**/groupId/groupName/**isDefault**/**referenced**/**effectiveSelectable**/**parentId**(两级树超集) | 覆盖 | | 业务规则:编码创建后不可改+服务端唯一;被引用禁删(提示「该字典已被引用,无法删除」);每分组最多一个启用默认、设新自动取消原默认;**默认项禁止停用**;停用分组→不能新建项+组内项不进选择器(自身可启用但提示暂不可用);历史数据回显原值标记已停用;二级项为独立字典行(独立编码)、两级联动 | referenced 实时计数、set-default 事务换默认、effectiveSelectable 失活标记、parentId+tree 两级树——机制全部具备 | 覆盖 | | 排序规则:有排序号升序在前→无号排后→同号按创建时间 | 列表 orderBy 由 service 实现(顺带核过列表语义) | 覆盖 | | 权限:菜单/页面/接口仅**平台超级管理员** | 现有细粒度权限点 @PreAuthorize(PERM_GROUP_*/PERM_ITEM_*)——种子仅授超管角色即等效,非代码缺口 | 备注 | 两个验证点(执行票顺带核,不构成缺口):①「默认项禁止停用」服务层阻断校验是否已实现;②「未被引用才可改分组」编辑约束是否已实现(referenced 已有,UI 联动逻辑属前端)。 ## 三、tag 对账(票 05 范围,累计 12 处) | Controller | 现状 tag | 待修 | |---|---|---| | DictGroupController | A7 后台管理/数据字典/分组 | 「A7 后台管理/系统设置/数据字典/分组」+ 方法级多值挂「A7 后台管理/业务规则/商机规则/商机相关字典」(A7-3-2-6 共用,ADR-0024) | | DictItemController | A7 后台管理/数据字典/字典项 | 同上两组 | ## 四、缺口汇总(票 05) - **缺码(重)**:日志管理 3 页 5 端点 + 全局日志表与采集机制(方案 A/B 票 06 拍板);批量操作结果文件落盘与 90 天保留期管理。 - **tag 待修 2 处**(累计 12 处):crm-dict 两 Controller 补「系统设置」一级 + 商机相关字典多值 tags。 - **无缺码**:A7-5 数据字典页(含二级字典项、默认值、引用校验全部命中现有实现)。 - **拍板项**:日志实现形态(A 新表+AOP / B 聚合三表);批量操作日志是否本期交付(重接口边界)。