Pārlūkot izejas kodu

添加了项目文档,并添加了专案审核时查看历史审核记录的功能

luocaiyang 3 nedēļas atpakaļ
vecāks
revīzija
24a4a0ba3a

+ 31 - 1
.qoder/repowiki/zh/content/后端架构/API控制器设计/申诉管理控制器.md

@@ -1,4 +1,4 @@
-# 申诉管理控制器
+申诉管理控制器
 
 <cite>
 **本文档引用的文件**
@@ -12,8 +12,16 @@
 - [IDoAction.cs](file://wispro.sp.share/IDoAction.cs)
 - [AppealRecord.cs](file://wospro.sp.entity/AppealRecord.cs)
 - [AppealType.cs](file://wospro.sp.entity/AppealType.cs)
+- [AppealRecordFilter.cs](file://wispro.sp.share/AppealRecordFilter.cs) - *新增在按案例编号过滤功能中*
 </cite>
 
+## 更新摘要
+**变更内容**
+- 新增对按案例编号过滤申诉记录功能的详细说明
+- 更新架构概述和详细组件分析部分以反映新的过滤功能
+- 增加对AppealRecordFilter数据模型的描述
+- 更新相关代码示例和序列图以包含新的过滤逻辑
+
 ## 目录
 1. [引言](#引言)
 2. [核心组件](#核心组件)
@@ -198,6 +206,28 @@ APPEAL_RECORD }o--|| PERFORMANCE_ITEM : "关联"
 - [AppealRecord.cs](file://wospro.sp.entity/AppealRecord.cs#L9-L46)
 - [AppealType.cs](file://wospro.sp.entity/AppealType.cs#L9-L53)
 
+### 过滤功能增强分析
+为满足按案例编号查询申诉记录的需求,系统对申诉查询功能进行了增强。通过引入AppealRecordFilter过滤器类,实现了多维度的申诉记录查询能力。该功能允许用户根据申诉类型、创建人、审核人、创建时间、审核时间以及案例编号等条件进行精确过滤。
+
+```mermaid
+sequenceDiagram
+participant User as "用户"
+participant Controller as "申诉控制器"
+participant Filter as "过滤器"
+participant Database as "数据库"
+User->>Controller : 发送查询请求(含案例编号)
+Controller->>Filter : 创建AppealRecordFilter实例
+Filter->>Filter : 设置案例编号过滤条件
+Controller->>Database : 执行包含案例编号的复合查询
+Database-->>Controller : 返回过滤后的申诉记录
+Controller-->>User : 返回查询结果
+Note over User,Database : 按案例编号过滤申诉记录流程
+```
+
+**图示来源**
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L785-L843)
+- [AppealRecordFilter.cs](file://wispro.sp.share/AppealRecordFilter.cs#L1-L29)
+
 ## 依赖分析
 申诉管理控制器的依赖关系清晰,主要依赖于数据库上下文、文件任务服务和各种处理器。通过依赖注入机制,控制器与具体实现解耦,提高了代码的可测试性和可维护性。控制器与处理器之间的依赖通过反射机制动态建立,使得系统具有良好的扩展性。
 

+ 421 - 0
.qoder/repowiki/zh/content/核心功能模块/项目评审历史记录查看.md

@@ -0,0 +1,421 @@
+# 项目评审历史记录查看
+
+<cite>
+**本文引用的文件列表**
+- [AppealRecords.razor.cs](file://wispro.sp.web/Pages/AppCase/AppealRecords.razor.cs)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs)
+- [AppealRecordFilter.cs](file://wispro.sp.share/AppealRecordFilter.cs)
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs)
+- [AppealRecord.cs](file://wospro.sp.entity/AppealRecord.cs)
+- [WorkflowEngineController.cs](file://wispro.sp.api/Controllers/WorkflowEngineController.cs)
+- [CaseManager.razor.cs](file://wispro.sp.web/Pages/AppCase/CaseManager.razor.cs)
+- [MyCaselist.razor.cs](file://wispro.sp.web/Pages/AppCase/MyCaselist.razor.cs)
+- [PerformanceItemServices.cs](file://wispro.sp.web/Services/PerformanceItemServices.cs)
+- [SSTable.razor.cs](file://wispro.sp.web/Components/SSTable.razor.cs)
+- [Welcome.razor.cs](file://wispro.sp.web/Pages/Welcome.razor.cs)
+</cite>
+
+## 目录
+1. [简介](#简介)
+2. [项目结构](#项目结构)
+3. [核心组件](#核心组件)
+4. [架构总览](#架构总览)
+5. [详细组件分析](#详细组件分析)
+6. [依赖关系分析](#依赖关系分析)
+7. [性能考量](#性能考量)
+8. [故障排查指南](#故障排查指南)
+9. [结论](#结论)
+
+## 简介
+本文件聚焦于“项目评审历史记录查看”能力,围绕前端页面、服务层、API 控制器以及实体模型之间的协作进行系统化梳理。目标是帮助读者快速理解如何在系统中查看某位用户发起或经其审核的历史申诉记录,并了解这些记录的来源、筛选条件、详情展示与导出等关键流程。
+
+## 项目结构
+该功能主要分布在以下模块:
+- 前端 Blazor 页面:AppCase 下的申诉记录列表与详情展示组件。
+- 服务层:前端通过服务封装 HTTP 请求,调用后端 API。
+- API 层:提供申诉记录查询、过滤、详情字段加载、审核处理等接口。
+- 实体层:申诉记录、申诉类型、输入字段值、附件等数据模型。
+- 工作流引擎:与申诉流程相关的定义与执行(用于扩展或联动)。
+
+```mermaid
+graph TB
+subgraph "前端(Web)"
+AR["AppealRecords<br/>申诉记录列表"]
+SS["SSTable<br/>通用表格组件"]
+CM["CaseManager<br/>案件管理"]
+MC["MyCaselist<br/>我的案件列表"]
+WT["Welcome<br/>欢迎页(变更审核人)"]
+end
+subgraph "服务层(Web)"
+ATS["AppealTypeService<br/>申诉服务"]
+PIS["PerformanceItemServices<br/>绩效项服务"]
+end
+subgraph "API(后端)"
+AC["AppealController<br/>申诉控制器"]
+WEC["WorkflowEngineController<br/>工作流引擎控制器"]
+end
+subgraph "实体(Entity)"
+ARE["AppealRecord<br/>申诉记录"]
+FIL["AppealRecordFilter<br/>申诉记录过滤器"]
+end
+AR --> ATS
+SS --> ATS
+CM --> ATS
+MC --> ATS
+WT --> ATS
+ATS --> AC
+ATS --> PIS
+AC --> ARE
+AC --> FIL
+WEC --> AC
+```
+
+图表来源
+- [AppealRecords.razor.cs](file://wispro.sp.web/Pages/AppCase/AppealRecords.razor.cs#L1-L95)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L1-L250)
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L670-L785)
+- [AppealRecordFilter.cs](file://wispro.sp.share/AppealRecordFilter.cs#L1-L30)
+- [AppealRecord.cs](file://wospro.sp.entity/AppealRecord.cs#L1-L47)
+- [WorkflowEngineController.cs](file://wispro.sp.api/Controllers/WorkflowEngineController.cs#L675-L754)
+
+章节来源
+- [AppealRecords.razor.cs](file://wispro.sp.web/Pages/AppCase/AppealRecords.razor.cs#L1-L95)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L1-L250)
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L670-L785)
+- [AppealRecordFilter.cs](file://wispro.sp.share/AppealRecordFilter.cs#L1-L30)
+- [AppealRecord.cs](file://wospro.sp.entity/AppealRecord.cs#L1-L47)
+- [WorkflowEngineController.cs](file://wispro.sp.api/Controllers/WorkflowEngineController.cs#L675-L754)
+
+## 核心组件
+- 申诉记录列表页面:负责加载当前用户的申诉记录,支持按类型、创建人、审核人、时间范围、案件编号等条件筛选,并可展开查看详情。
+- 申诉服务:封装 HTTP 调用,提供获取记录、按过滤器查询、获取输入字段值、附件、变更审核人等方法。
+- 申诉控制器:提供查询、过滤、详情字段映射、审核处理等接口;并对序列化输出做轻量裁剪以避免循环引用。
+- 过滤器模型:统一承载前端筛选参数,便于后端按需构建查询。
+- 实体模型:包含申诉记录、输入字段值、附件等,支撑前后端交互。
+
+章节来源
+- [AppealRecords.razor.cs](file://wispro.sp.web/Pages/AppCase/AppealRecords.razor.cs#L1-L95)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L83-L137)
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L670-L785)
+- [AppealRecordFilter.cs](file://wispro.sp.share/AppealRecordFilter.cs#L1-L30)
+- [AppealRecord.cs](file://wospro.sp.entity/AppealRecord.cs#L1-L47)
+
+## 架构总览
+下图展示了“查看评审历史记录”的端到端调用链路:前端页面通过服务层发起请求,后端控制器处理业务逻辑并返回数据,前端渲染列表与详情。
+
+```mermaid
+sequenceDiagram
+participant U as "用户"
+participant AR as "AppealRecords 页面"
+participant ATS as "AppealTypeService"
+participant AC as "AppealController"
+participant DB as "数据库"
+U->>AR : 打开“申诉记录”页面
+AR->>ATS : 获取用户申诉记录(默认无参)
+ATS->>AC : GET Appeal/GetAppealRecords?userId=0
+AC->>DB : 查询申诉记录(含关联对象)
+DB-->>AC : 返回记录集合
+AC-->>ATS : 返回记录集合(已裁剪)
+ATS-->>AR : 返回记录集合
+AR-->>U : 渲染列表(含描述、状态、操作)
+U->>AR : 点击“搜索”
+AR->>ATS : Post Appeal/QueryByFilter(带筛选条件)
+ATS->>AC : POST Appeal/QueryByFilter
+AC->>DB : 条件查询(类型/用户/时间/案件编号)
+DB-->>AC : 返回筛选结果
+AC-->>ATS : 返回筛选结果
+ATS-->>AR : 更新列表
+```
+
+图表来源
+- [AppealRecords.razor.cs](file://wispro.sp.web/Pages/AppCase/AppealRecords.razor.cs#L31-L74)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L109-L113)
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L786-L800)
+
+## 详细组件分析
+
+### 组件A:申诉记录列表页面(AppealRecords)
+职责
+- 初始化加载用户相关申诉记录。
+- 提供筛选面板,支持按申诉类型、创建人、审核人、创建/审核时间范围、案件编号等条件查询。
+- 展示每条记录的摘要描述(含创建时间、申请人、被审人、状态等),点击可查看详情。
+- 加载详情时,拉取输入字段值(初审/复审)、附件列表,并根据状态决定是否显示复审字段。
+
+关键交互
+- 初始化:调用服务获取记录列表。
+- 搜索:将筛选条件传入服务,服务再调用后端接口。
+- 查看详情:分别加载初审字段与复审字段(若已审核)。
+
+```mermaid
+flowchart TD
+Start(["进入页面"]) --> LoadDefault["加载默认记录(无参)"]
+LoadDefault --> ShowList["渲染列表"]
+ShowList --> TogglePanel["展开/收起筛选面板"]
+TogglePanel --> Search["点击搜索"]
+Search --> BuildFilter["构造筛选条件"]
+BuildFilter --> CallService["调用服务查询"]
+CallService --> CallAPI["调用后端接口"]
+CallAPI --> RenderList["更新列表"]
+RenderList --> ClickDetail["点击行查看详情"]
+ClickDetail --> LoadFields["加载初审/复审字段"]
+LoadFields --> LoadFiles["加载附件列表"]
+LoadFiles --> ShowDetail["显示详情弹窗/面板"]
+ShowDetail --> End(["完成"])
+```
+
+图表来源
+- [AppealRecords.razor.cs](file://wispro.sp.web/Pages/AppCase/AppealRecords.razor.cs#L31-L95)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L109-L137)
+
+章节来源
+- [AppealRecords.razor.cs](file://wispro.sp.web/Pages/AppCase/AppealRecords.razor.cs#L1-L95)
+
+### 组件B:申诉服务(AppealTypeService)
+职责
+- 封装 HTTP 请求,统一调用后端 Appeal 接口。
+- 提供获取记录、按过滤器查询、获取输入字段、附件、创建申诉、审核、变更审核人等方法。
+- 对异常进行捕获与包装,保证前端稳定。
+
+关键点
+- 用户记录查询:支持按用户 ID 或默认查询。
+- 过滤查询:将前端筛选对象序列化后 POST 至后端。
+- 变更审核人:调用后端接口更新记录的审核人并刷新列表。
+
+```mermaid
+classDiagram
+class AppealTypeService {
++getAppealRecord(id)
++GetInputFieldValues(id,state)
++GetItems()
++GetItems(item)
++GetUserAppeals(userid?)
++GetUserAppeals(filter)
++GetItem(id)
++GetInputFields(typeid,state)
++GetAppealRecordAttachFiles(recordId)
++CreateAppeal(model)
++ReviewerAppeal(model)
++ChangeReviewer(changedRecord)
++GetCaseCoefficientStatistics(customerId,calmonthId)
++ExportCustomerCCSFile(calmonthId)
+}
+```
+
+图表来源
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L1-L250)
+
+章节来源
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L1-L250)
+
+### 组件C:申诉控制器(AppealController)
+职责
+- 提供申诉类型、输入字段、附件、申诉记录、统计等接口。
+- 支持按过滤器查询申诉记录,包含多维筛选条件。
+- 在审核时,将输入字段值映射到目标对象字段,并触发相关处理逻辑。
+- 对返回数据进行序列化裁剪,避免循环引用导致的传输问题。
+
+关键点
+- 记录查询:支持按用户 ID、是否需要审核、排序等条件。
+- 过滤查询:按类型、案件编号、创建人、审核人、时间范围等条件组合查询。
+- 序列化裁剪:对关联对象的关键字段进行替换,减少冗余数据。
+
+```mermaid
+sequenceDiagram
+participant ATS as "AppealTypeService"
+participant AC as "AppealController"
+participant DB as "数据库"
+ATS->>AC : GET Appeal/GetAppealRecords(userId)
+AC->>DB : 查询申诉记录(含关联对象)
+DB-->>AC : 返回记录集合
+AC-->>ATS : 返回记录集合(已裁剪)
+ATS->>AC : POST Appeal/QueryByFilter(filter)
+AC->>DB : 条件查询(类型/用户/时间/案件编号)
+DB-->>AC : 返回筛选结果
+AC-->>ATS : 返回筛选结果
+```
+
+图表来源
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L670-L785)
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L786-L800)
+
+章节来源
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L670-L785)
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L786-L800)
+
+### 组件D:过滤器模型(AppealRecordFilter)
+职责
+- 统一承载前端筛选参数,包括申诉类型、创建人、审核人、创建/审核时间范围、案件编号、排序字段等。
+- 作为服务层与控制器之间的契约,确保筛选条件传递一致。
+
+```mermaid
+classDiagram
+class AppealRecordFilter {
++int AppealTypeId
++string CreateUser
++string Reviewer
++DateTime? beginCreateTime
++DateTime? endCreateTime
++string CaseNo
++DateTime? beginReviewTime
++DateTime? endReviewTime
++string SortField
+}
+```
+
+图表来源
+- [AppealRecordFilter.cs](file://wispro.sp.share/AppealRecordFilter.cs#L1-L30)
+
+章节来源
+- [AppealRecordFilter.cs](file://wispro.sp.share/AppealRecordFilter.cs#L1-L30)
+
+### 组件E:实体模型(AppealRecord)
+职责
+- 描述一次申诉的基本信息:创建人、创建时间、状态、审核人、审核时间、类型、关联的绩效项等。
+- 作为前后端交互的数据载体,支撑列表展示与详情加载。
+
+```mermaid
+classDiagram
+class AppealRecord {
++int Id
++Staff Creater
++int CreaterId
++DateTime CreateTime
++AttachFile[] AttachFiles
++string Reason
++int State
++Staff Reviewer
++int? ReviewerId
++string ReviewerMemo
++DateTime? ReviewTime
++AppealType Type
++int TypeId
++int? ItemId
++PerformanceItem Item
+}
+```
+
+图表来源
+- [AppealRecord.cs](file://wospro.sp.entity/AppealRecord.cs#L1-L47)
+
+章节来源
+- [AppealRecord.cs](file://wospro.sp.entity/AppealRecord.cs#L1-L47)
+
+### 组件F:详情展示与附件加载(SSTable)
+职责
+- 在列表中点击某条记录后,加载该记录的输入字段值(初审/复审)与附件列表。
+- 根据记录状态决定是否加载复审字段,提升用户体验与数据完整性。
+
+```mermaid
+sequenceDiagram
+participant AR as "AppealRecords"
+participant ATS as "AppealTypeService"
+participant AC as "AppealController"
+AR->>ATS : GetInputFieldValues(recordId, state=0)
+ATS->>AC : GET Appeal/GetInputFieldValues
+AC-->>ATS : 返回初审字段值
+ATS-->>AR : 初审字段值
+AR->>ATS : GetAppealRecordAttachFiles(recordId)
+ATS->>AC : GET Appeal/GetAppealRecordAttachFiles
+AC-->>ATS : 返回附件列表
+ATS-->>AR : 附件列表
+AR->>ATS : 若已审核则加载复审字段(state=1)
+ATS->>AC : GET Appeal/GetInputFieldValues
+AC-->>ATS : 返回复审字段值
+ATS-->>AR : 复审字段值
+```
+
+图表来源
+- [SSTable.razor.cs](file://wispro.sp.web/Components/SSTable.razor.cs#L43-L89)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L37-L41)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L133-L137)
+
+章节来源
+- [SSTable.razor.cs](file://wispro.sp.web/Components/SSTable.razor.cs#L43-L89)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L37-L41)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L133-L137)
+
+### 组件G:工作流引擎(扩展能力)
+职责
+- 提供工作流的新增、删除、步骤/动作/转移条件维护、导出为图片等能力。
+- 与申诉流程可结合使用,用于定义审批路径、输入校验与流转规则。
+
+```mermaid
+classDiagram
+class WorkflowEngineController {
++AddNew(workflowObject)
++DeleteWorkflow(workflowId)
++SaveStep(stepObj)
++SaveAction(action)
++SaveTransfer(transfer)
++GetAllWorkflows()
++GetWorkflow(workflowId)
++GetSteps(workflowId)
++GetActions(workflowId)
++GetTrasfers(workflowId)
++ExportToImage(workflowId)
+}
+```
+
+图表来源
+- [WorkflowEngineController.cs](file://wispro.sp.api/Controllers/WorkflowEngineController.cs#L47-L114)
+- [WorkflowEngineController.cs](file://wispro.sp.api/Controllers/WorkflowEngineController.cs#L675-L754)
+
+章节来源
+- [WorkflowEngineController.cs](file://wispro.sp.api/Controllers/WorkflowEngineController.cs#L47-L114)
+- [WorkflowEngineController.cs](file://wispro.sp.api/Controllers/WorkflowEngineController.cs#L675-L754)
+
+## 依赖关系分析
+- 前端页面依赖服务层,服务层依赖后端 API。
+- 服务层与控制器之间通过统一的契约(过滤器模型、实体模型)进行数据交换。
+- 控制器内部可能调用工作流引擎控制器以实现流程定义与执行(视具体业务场景而定)。
+
+```mermaid
+graph LR
+AR["AppealRecords 页面"] --> ATS["AppealTypeService"]
+ATS --> AC["AppealController"]
+ATS --> PIS["PerformanceItemServices"]
+AC --> ARE["AppealRecord 实体"]
+AC --> FIL["AppealRecordFilter"]
+AC --> WEC["WorkflowEngineController"]
+```
+
+图表来源
+- [AppealRecords.razor.cs](file://wispro.sp.web/Pages/AppCase/AppealRecords.razor.cs#L1-L95)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L1-L250)
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L670-L785)
+- [AppealRecordFilter.cs](file://wispro.sp.share/AppealRecordFilter.cs#L1-L30)
+- [AppealRecord.cs](file://wospro.sp.entity/AppealRecord.cs#L1-L47)
+- [WorkflowEngineController.cs](file://wispro.sp.api/Controllers/WorkflowEngineController.cs#L675-L754)
+
+章节来源
+- [AppealRecords.razor.cs](file://wispro.sp.web/Pages/AppCase/AppealRecords.razor.cs#L1-L95)
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L1-L250)
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L670-L785)
+- [AppealRecordFilter.cs](file://wispro.sp.share/AppealRecordFilter.cs#L1-L30)
+- [AppealRecord.cs](file://wospro.sp.entity/AppealRecord.cs#L1-L47)
+- [WorkflowEngineController.cs](file://wispro.sp.api/Controllers/WorkflowEngineController.cs#L675-L754)
+
+## 性能考量
+- 列表查询建议分页与懒加载:前端应限制每页大小并仅在需要时加载详情字段与附件,避免一次性拉取大量数据。
+- 过滤条件尽量精确:使用时间范围、案件编号等高选择性字段,减少数据库扫描。
+- 序列化裁剪:后端对返回对象进行字段裁剪,降低网络传输体积与前端解析成本。
+- 并发控制:批量操作(如导出、刷新)应避免重复触发,前端应设置防抖与状态提示。
+
+## 故障排查指南
+- 无法加载记录
+  - 检查服务层调用是否成功返回,关注异常捕获与错误消息。
+  - 确认后端接口是否正确处理过滤条件,是否存在空值或非法参数。
+- 详情字段为空
+  - 确认记录状态是否已审核,复审字段仅在状态大于 0 时加载。
+  - 检查后端映射逻辑是否正确,确保字段值已保存至对应对象。
+- 变更审核人失败
+  - 检查服务层调用是否返回成功标志,前端根据返回结果提示用户。
+  - 确认后端接口权限与参数校验是否通过。
+
+章节来源
+- [AppealTypeService.cs](file://wispro.sp.web/Services/AppealTypeService.cs#L220-L224)
+- [AppealController.cs](file://wispro.sp.api/Controllers/AppealController.cs#L670-L785)
+- [SSTable.razor.cs](file://wispro.sp.web/Components/SSTable.razor.cs#L43-L89)
+
+## 结论
+“项目评审历史记录查看”功能由前端页面、服务层与后端 API 协同完成,具备完善的筛选、详情加载与附件展示能力。通过统一的过滤器模型与实体契约,系统实现了清晰的职责分离与良好的扩展性。建议在生产环境中进一步优化分页与并发控制,确保在大数据量场景下的响应性能与稳定性。

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
.qoder/repowiki/zh/meta/repowiki-metadata.json