# 报告驳回接口说明 ## 原PHP项目接口分析 ### 接口信息 - **路由**: `report/rejectAudit` - **方法**: POST - **功能**: 审核医生驳回已书写的报告 ### 入参 ```php { "report_id": "报告ID", "reject_reason": "驳回原因" } ``` ### 实现逻辑 (ReportService.php line 450-477) #### 1. 获取报告信息 ```php $field = ['report_doctor_id','exam_id']; $write = $this->reportDao->getReportById($id,$field); ``` - 根据报告ID查询报告的书写医生ID和检查ID #### 2. 权限验证 ```php $now_authority = $this->reportDao->getDoctorClass($user['id']); $now_authority = explode(',',$now_authority); if(!in_array('3',$now_authority)) { $this->throwError('do_not_have_permission',0005); } ``` - 从 `doctor_class` 表查询当前医生的权限分类 - 检查是否包含权限码 `3`(审核权限) - 如果没有权限则抛出异常 #### 3. 更新检查状态为"审核驳回" ```php $this->reportDao->updateExamStatus($write['exam_id'], 12); ``` - 更新 `exams` 表的 `exam_status` 字段为 12(审核驳回) #### 4. 清空审核医生信息 ```php $this->reportDao->updateReport($write['exam_id'], 1, [ 'review_doctor_id' => null, 'review_doctor_name' => null, 'review_datetime' => null ]); ``` - 清空 `report` 表中的审核相关字段 - 第2个参数 `1` 表示本地报告(type=1) #### 5. 创建消息通知 ```php $data = [ 'id' => UUIDUtils::uuid(), 'title' => '您写的报告有最新消息,请注意查收', 'content' => $user['realname'].'医师驳回了您写得报告,驳回原因是:'.$reason, 'count' => '1', 'type' => '9', 'ctime' => date('Y-m-d H:i:s', time()), 'exam_id' => $write['exam_id'], 'doctor_id' => $write['report_doctor_id'] ]; $this->reportDao->insertMessage($data); ``` - 插入一条消息到 `message` 表 - 消息类型为 `9`(报告驳回通知) - 通知对象为书写报告的医生 - 消息内容包含驳回原因 #### 6. 返回结果 ```php return true; ``` ## 状态码说明 ### exam_status 状态值 - `7`: 已写报告 - `8`: 已审报告 - `12`: 审核驳回 ### message.type 消息类型 - `9`: 报告驳回通知 ## 权限说明 ### doctor_class 权限分类 驳回操作需要权限码 `3`(审核权限) 权限码说明: - `1`: 书写权限 - `2`: 审核权限(推测) - `3`: 审核驳回权限 - 多个权限用逗号分隔,如 "1,3" ## 数据库操作 ### 涉及的表 1. **report** - 报告表 - 清空审核医生相关字段 2. **exams** - 检查表 - 更新 exam_status = 12 3. **message** - 消息表 - 插入驳回通知消息 4. **doctor_class** - 医生权限分类表 - 查询医生权限 ## 业务流程 ``` 1. 审核医生发起驳回 ↓ 2. 验证权限(必须有权限码3) ↓ 3. 查询报告信息(获取书写医生ID和检查ID) ↓ 4. 更新检查状态为"审核驳回"(exam_status=12) ↓ 5. 清空报告的审核医生信息 ↓ 6. 创建消息通知书写医生 ↓ 7. 返回成功 ``` ## Java实现要点 ### 1. 接口设计 ```java POST /api/report/reject { "reportId": "报告ID", "rejectReason": "驳回原因" } ``` ### 2. 需要实现的功能 - [ ] 权限验证(检查医生是否有审核权限) - [ ] 查询报告信息 - [ ] 更新检查状态为12(审核驳回) - [ ] 清空报告的审核医生信息 - [ ] 创建消息通知 - [ ] 事务处理 ### 3. 需要的实体和VO - [ ] ReportRejectVO - 驳回请求参数 - [ ] Message 实体(如果还没有) - [ ] DoctorClass 实体(权限分类,如果还没有) ### 4. 注意事项 - 操作需要在事务中执行 - 需要记录操作日志 - 消息通知可能需要推送到前端 - 驳回后报告重新回到"已写报告"状态,可以重新审核