docs(specs): 会诊管理模块三甲要求深度分析 — 完成度80%,核心差距是时限控制
铁律15+17: 深度分析现有模块是否满足三甲要求 分析结论: - 后端: 19个API,完整CRUD+流程+签名+费用(✅) - 前端: 4个页面共120KB,功能丰富(✅) - 状态: 6状态完整生命周期(✅) - 总分: 80/100,基本可用 未满足的三甲要求: 1. 急会诊10分钟到位时限校验 ❌ (最高优先级) 2. 科间会诊48小时完成时限校验 ❌ (最高优先级) 3. 会诊时限监控面板 ❌ (高优先级) 4. 会诊与病历集成 ❌ (中优先级) 5. MDT多学科会诊 ❌ (中优先级) 6. 会诊记录打印 ❌ (中优先级) 建议: 在现有代码基础上增强时限控制逻辑,无需重建
This commit is contained in:
178
MD/specs/CONSULTATION_MODULE_ANALYSIS.md
Normal file
178
MD/specs/CONSULTATION_MODULE_ANALYSIS.md
Normal file
@@ -0,0 +1,178 @@
|
||||
# 会诊管理模块 — 三甲要求深度分析
|
||||
|
||||
> **文档类型**: 模块能力分析
|
||||
> **版本**: v1.0
|
||||
> **编制日期**: 2026-06-06
|
||||
> **三甲依据**: 《三级医院评审标准(2022版)》会诊管理制度
|
||||
|
||||
---
|
||||
|
||||
## 一、三甲对会诊管理的要求
|
||||
|
||||
### 1.1 评审标准条款
|
||||
- **核心制度**: 会诊制度是十八项医疗核心制度之一
|
||||
- **急会诊**: 急会诊10分钟内到位
|
||||
- **科间会诊**: 48小时内完成
|
||||
- **全院会诊**: 由医务部组织
|
||||
- **疑难病例**: 多学科会诊(MDT)
|
||||
- **病历要求**: 会诊记录必须写入病历
|
||||
|
||||
### 1.2 会诊类型与时限要求
|
||||
|
||||
| 会诊类型 | 时限要求 | 主持人 | 三甲依据 |
|
||||
|---------|---------|--------|---------|
|
||||
| 科间会诊 | 48小时内完成 | 主治医师以上 | 会诊制度 |
|
||||
| 急会诊 | 10分钟内到位 | 二线值班医师 | 会诊制度 |
|
||||
| 院内大会诊 | 24小时内安排 | 科主任/医务部 | 会诊制度 |
|
||||
| 多学科会诊(MDT) | 72小时内安排 | 科主任/医务部 | 疑难病例管理 |
|
||||
| 远程会诊 | 按约定时间 | 相关专科 | 互联网诊疗 |
|
||||
| 院外会诊 | 按约定时间 | 被邀医院指定 | 外出会诊管理 |
|
||||
|
||||
---
|
||||
|
||||
## 二、现有模块能力分析
|
||||
|
||||
### 2.1 后端能力(19个API)
|
||||
|
||||
| API | 功能 | 三甲要求 | 状态 |
|
||||
|-----|------|---------|------|
|
||||
| GET /list | 获取会诊列表 | 基础查询 | ✅ |
|
||||
| POST /query | 多条件查询 | 高级查询 | ✅ |
|
||||
| POST /queryPage | 分页查询 | 分页支持 | ✅ |
|
||||
| POST /save | 保存会诊申请 | 创建功能 | ✅ |
|
||||
| POST /submit | 提交会诊申请 | 流程流转 | ✅ |
|
||||
| POST /cancel | 作废会诊申请 | 流程控制 | ✅ |
|
||||
| POST /complete | 完成会诊 | 流程完结 | ✅ |
|
||||
| GET /department-tree | 科室树 | 科室选择 | ✅ |
|
||||
| GET /my-invitations | 我的邀请 | 被邀查看 | ✅ |
|
||||
| GET /activities | 会诊项目 | 费用关联 | ✅ |
|
||||
| GET /confirmation/pending | 待确认列表 | 被邀确认 | ✅ |
|
||||
| POST /confirmation/confirm | 确认会诊 | 流程流转 | ✅ |
|
||||
| POST /confirmation/cancelConfirm | 取消确认 | 流程回退 | ✅ |
|
||||
| POST /confirmation/sign | 签名会诊 | 电子签名 | ✅ |
|
||||
| GET /confirmation/detail | 确认详情 | 详情查看 | ✅ |
|
||||
| GET /confirmation/opinions | 会诊意见 | 意见记录 | ✅ |
|
||||
| GET /detail/{id} | 申请详情 | 详情查看 | ✅ |
|
||||
| POST /charge-items | 关联费用 | 费用管理 | ✅ |
|
||||
| POST /confirm-charge-items | 确认收费 | 费用确认 | ✅ |
|
||||
|
||||
### 2.2 状态流转
|
||||
|
||||
```
|
||||
新开(0) → 已提交(10) → 已确认(20) → 已签名(30) → 已完成(40)
|
||||
↓
|
||||
已取消(50)
|
||||
```
|
||||
|
||||
| 状态 | 值 | 允许操作 | 说明 |
|
||||
|------|-----|---------|------|
|
||||
| 新开 | 0 | 编辑/删除/提交 | 草稿状态 |
|
||||
| 已提交 | 10 | 作废 | 等待被邀确认 |
|
||||
| 已确认 | 20 | 签名/取消确认 | 被邀医生已确认 |
|
||||
| 已签名 | 30 | 完成 | 被邀医生已签名 |
|
||||
| 已完成 | 40 | 查看 | 会诊结束 |
|
||||
| 已取消 | 50 | 查看 | 作废状态 |
|
||||
|
||||
### 2.3 前端页面(4个,共~120KB)
|
||||
|
||||
| 页面 | 大小 | 功能 |
|
||||
|------|------|------|
|
||||
| consultationapplication | 27KB | 会诊申请管理(搜索/表格/新增弹窗/提交/作废) |
|
||||
| consultationconfirmation | 24KB | 会诊确认管理(待确认列表/确认/签名/意见) |
|
||||
| consultationconfirmation(clinic) | 21KB | 门诊会诊确认(另一套实现) |
|
||||
| consultation.vue(doctorstation) | 50KB | 医生站会诊组件(嵌入医生工作站) |
|
||||
|
||||
### 2.4 数据模型
|
||||
|
||||
| 字段 | 说明 | ✅/❌ |
|
||||
|------|------|-------|
|
||||
| consultationId | 会诊单号 | ✅ |
|
||||
| patientId/Name | 患者信息 | ✅ |
|
||||
| encounterId | 就诊ID | ✅ |
|
||||
| department | 申请科室 | ✅ |
|
||||
| requestingPhysician | 申请医生 | ✅ |
|
||||
| invitedList | 被邀医生列表 | ✅ |
|
||||
| consultationDate | 会诊日期 | ✅ |
|
||||
| consultationPurpose | 会诊目的 | ✅ |
|
||||
| provisionalDiagnosis | 初步诊断 | ✅ |
|
||||
| consultationUrgency | 紧急程度(1普通/2紧急) | ✅ |
|
||||
| consultationActivityName | 会诊类型(院内/远程等) | ✅ |
|
||||
| consultationStatus | 会诊状态 | ✅ |
|
||||
| consultationOpinion | 会诊意见 | ✅ |
|
||||
| signingPhysician | 签名医生 | ✅ |
|
||||
| signingTime | 签名时间 | ✅ |
|
||||
| submitFlag | 提交标记 | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 三、能力差距分析
|
||||
|
||||
### 3.1 已满足的三甲要求
|
||||
|
||||
| # | 要求 | 实现情况 | 评价 |
|
||||
|---|------|---------|------|
|
||||
| 1 | 会诊申请流程 | save→submit→confirm→sign→complete | ✅ 完整 |
|
||||
| 2 | 科间会诊 | 支持科室选择+被邀医生 | ✅ 完整 |
|
||||
| 3 | 会诊意见记录 | consultationOpinion字段+意见列表 | ✅ 完整 |
|
||||
| 4 | 电子签名 | signConsultation接口 | ✅ 完整 |
|
||||
| 5 | 费用关联 | chargeItems+confirmChargeItems | ✅ 完整 |
|
||||
| 6 | 分页查询 | queryPage接口 | ✅ 完整 |
|
||||
| 7 | 会诊项目管理 | activities接口 | ✅ 完整 |
|
||||
| 8 | 状态流转 | 6状态完整生命周期 | ✅ 完整 |
|
||||
|
||||
### 3.2 未满足/待完善的三甲要求
|
||||
|
||||
| # | 要求 | 当前状态 | 差距 | 优先级 |
|
||||
|---|------|---------|------|--------|
|
||||
| 1 | **急会诊时限控制** | 有紧急程度字段(1普通/2紧急),但无10分钟到位时限校验 | ❌ 缺失时限逻辑 | 🔴 高 |
|
||||
| 2 | **科间会诊48h时限** | 无48小时完成时限校验和提醒 | ❌ 缺失时限逻辑 | 🔴 高 |
|
||||
| 3 | **会诊类型细分** | 有consultationActivityName(院内/远程),但缺科间/全院/MDT分类 | ⚠️ 不够细 | 🟡 中 |
|
||||
| 4 | **会诊时限监控面板** | 无超时预警/统计面板 | ❌ 缺失 | 🔴 高 |
|
||||
| 5 | **会诊与病历集成** | 会诊记录未自动归档到病历 | ❌ 缺失 | 🟡 中 |
|
||||
| 6 | **MDT多学科会诊** | 无MDT专项流程(多科室同时参与) | ❌ 缺失 | 🟡 中 |
|
||||
| 7 | **会诊记录打印** | 无标准格式会诊记录单打印 | ❌ 缺失 | 🟡 中 |
|
||||
| 8 | **会诊统计报表** | 无会诊完成率/及时率统计 | ❌ 缺失 | 🟡 中 |
|
||||
| 9 | **会诊与医嘱联动** | 会诊完成后未自动触发后续医嘱建议 | ❌ 缺失 | 🟢 低 |
|
||||
| 10 | **远程会诊** | 有远程会诊项目,但无视频/图文远程对接 | ⚠️ 框架有 | 🟢 低 |
|
||||
|
||||
---
|
||||
|
||||
## 四、总体评价
|
||||
|
||||
### 4.1 完成度评分
|
||||
|
||||
| 维度 | 满分 | 得分 | 说明 |
|
||||
|------|------|------|------|
|
||||
| 会诊流程 | 25 | 22 | save→submit→confirm→sign→complete完整 |
|
||||
| 数据模型 | 20 | 18 | 字段齐全,缺时限相关字段 |
|
||||
| 前端页面 | 20 | 18 | 4个页面共120KB,功能丰富 |
|
||||
| 业务规则 | 20 | 12 | 有状态校验,缺时限控制 |
|
||||
| 集成能力 | 15 | 10 | 有费用集成,缺病历/医嘱集成 |
|
||||
| **总分** | **100** | **80** | **基本可用,需补全时限控制** |
|
||||
|
||||
### 4.2 结论
|
||||
|
||||
**现有会诊管理模块已完成约80%**,核心流程(申请→确认→签名→完成)完整可用。主要差距在于:
|
||||
|
||||
1. **时限控制缺失**(最关键):急会诊10分钟到位、科间会诊48小时完成的时限校验和提醒完全没有
|
||||
2. **监控面板缺失**:无法实时查看会诊超时情况
|
||||
3. **病历集成缺失**:会诊记录未自动归档到病历
|
||||
|
||||
### 4.3 补全建议
|
||||
|
||||
**优先级1(必须做)**:增加时限控制逻辑
|
||||
- 急会诊:提交后10分钟内未确认→自动升级通知
|
||||
- 科间会诊:提交后48小时未完成→超时预警
|
||||
- 在ConsultationAppServiceImpl中增加时限校验
|
||||
|
||||
**优先级2(应该做)**:增加会诊时限监控面板
|
||||
- 前端增加超时统计卡片
|
||||
- 实时显示待处理/已超时/已完成数量
|
||||
|
||||
**优先级3(可以做)**:会诊记录打印+病历归档
|
||||
|
||||
---
|
||||
|
||||
> **结论**: 会诊管理模块基本满足三甲要求,核心差距是**时限控制**。
|
||||
> 建议在现有代码基础上增强时限校验逻辑,无需重建。
|
||||
|
||||
@@ -0,0 +1,161 @@
|
||||
package com.healthlink.his.web.preopmanage.controller;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.core.common.core.domain.R;
|
||||
import com.healthlink.his.preop.domain.PreopDiscussion;
|
||||
import com.healthlink.his.preop.domain.PreopParticipant;
|
||||
import com.healthlink.his.preop.service.IPreopDiscussionService;
|
||||
import com.healthlink.his.preop.service.IPreopParticipantService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
@RestController
|
||||
@RequestMapping("/preop-discussion")
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class PreopDiscussionController {
|
||||
private final IPreopDiscussionService discussionService;
|
||||
private final IPreopParticipantService participantService;
|
||||
@GetMapping("/page")
|
||||
public R<?> getPage(@RequestParam(value = "patientName", required = false) String patientName,
|
||||
@RequestParam(value = "surgeryLevel", required = false) Integer surgeryLevel,
|
||||
@RequestParam(value = "status", required = false) Integer status,
|
||||
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
|
||||
LambdaQueryWrapper<PreopDiscussion> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.like(StringUtils.hasText(patientName), PreopDiscussion::getPatientName, patientName)
|
||||
.eq(surgeryLevel != null, PreopDiscussion::getSurgeryLevel, surgeryLevel)
|
||||
.eq(status != null, PreopDiscussion::getStatus, status)
|
||||
.orderByDesc(PreopDiscussion::getCreateTime);
|
||||
return R.ok(discussionService.page(new Page<>(pageNo, pageSize), wrapper));
|
||||
}
|
||||
@GetMapping("/detail")
|
||||
public R<?> getDetail(@RequestParam Long id) {
|
||||
PreopDiscussion discussion = discussionService.getById(id);
|
||||
if (discussion == null) return R.fail("讨论记录不存在");
|
||||
List<PreopParticipant> participants = participantService.list(
|
||||
new LambdaQueryWrapper<PreopParticipant>().eq(PreopParticipant::getDiscussionId, id));
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("discussion", discussion);
|
||||
result.put("participants", participants);
|
||||
return R.ok(result);
|
||||
}
|
||||
@PostMapping("/add")
|
||||
@Transactional
|
||||
public R<?> add(@RequestBody Map<String, Object> params) {
|
||||
PreopDiscussion discussion = new PreopDiscussion();
|
||||
discussion.setEncounterId(Long.valueOf(params.get("encounterId").toString()));
|
||||
discussion.setSurgeryId(params.get("surgeryId") != null ? Long.valueOf(params.get("surgeryId").toString()) : null);
|
||||
discussion.setPatientId(Long.valueOf(params.get("patientId").toString()));
|
||||
discussion.setPatientName((String) params.get("patientName"));
|
||||
discussion.setDiscussionType(Integer.valueOf(params.get("discussionType").toString()));
|
||||
discussion.setSurgeryLevel(Integer.valueOf(params.get("surgeryLevel").toString()));
|
||||
discussion.setPreopDiagnosis((String) params.get("preopDiagnosis"));
|
||||
discussion.setSurgeryName((String) params.get("surgeryName"));
|
||||
discussion.setSurgeryIndication((String) params.get("surgeryIndication"));
|
||||
discussion.setMainPlan((String) params.get("mainPlan"));
|
||||
discussion.setBackupPlan((String) params.get("backupPlan"));
|
||||
discussion.setAnesthesiaType((String) params.get("anesthesiaType"));
|
||||
discussion.setRisksAndCountermeasures((String) params.get("risksAndCountermeasures"));
|
||||
discussion.setPostopNotes((String) params.get("postopNotes"));
|
||||
discussion.setDiscussionConclusion(params.get("discussionConclusion") != null ? Integer.valueOf(params.get("discussionConclusion").toString()) : null);
|
||||
discussion.setDiscussionResult((String) params.get("discussionResult"));
|
||||
discussion.setHostUserId(params.get("hostUserId") != null ? Long.valueOf(params.get("hostUserId").toString()) : null);
|
||||
discussion.setHostUserName((String) params.get("hostUserName"));
|
||||
discussion.setStatus(0);
|
||||
discussion.setDiscussionTime(params.get("discussionTime") != null ? new Date((Long) params.get("discussionTime")) : null);
|
||||
discussion.setDiscussionLocation((String) params.get("discussionLocation"));
|
||||
boolean saved = discussionService.save(discussion);
|
||||
if (!saved) return R.fail("保存失败");
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Map<String, Object>> participantList = (List<Map<String, Object>>) params.get("participants");
|
||||
if (participantList != null) {
|
||||
for (Map<String, Object> p : participantList) {
|
||||
PreopParticipant participant = new PreopParticipant();
|
||||
participant.setDiscussionId(discussion.getId());
|
||||
participant.setUserId(Long.valueOf(p.get("userId").toString()));
|
||||
participant.setUserName((String) p.get("userName"));
|
||||
participant.setRole((String) p.get("role"));
|
||||
participant.setTitle((String) p.get("title"));
|
||||
participant.setSignStatus(0);
|
||||
participantService.save(participant);
|
||||
}
|
||||
}
|
||||
return R.ok("创建成功");
|
||||
}
|
||||
@PutMapping("/submit")
|
||||
public R<?> submit(@RequestParam Long id) {
|
||||
PreopDiscussion discussion = discussionService.getById(id);
|
||||
if (discussion == null) return R.fail("记录不存在");
|
||||
if (discussion.getStatus() != 0) return R.fail("只有草稿状态可以提交");
|
||||
discussion.setStatus(1);
|
||||
discussionService.updateById(discussion);
|
||||
return R.ok("已提交,等待参与者签名");
|
||||
}
|
||||
@PutMapping("/sign")
|
||||
public R<?> sign(@RequestParam Long discussionId, @RequestParam Long userId, @RequestParam(required = false) String signImage) {
|
||||
PreopParticipant participant = participantService.getOne(
|
||||
new LambdaQueryWrapper<PreopParticipant>()
|
||||
.eq(PreopParticipant::getDiscussionId, discussionId)
|
||||
.eq(PreopParticipant::getUserId, userId));
|
||||
if (participant == null) return R.fail("您不是该讨论的参与者");
|
||||
if (participant.getSignStatus() == 1) return R.fail("您已签名");
|
||||
participant.setSignStatus(1);
|
||||
participant.setSignTime(new Date());
|
||||
participant.setSignImage(signImage);
|
||||
participantService.updateById(participant);
|
||||
return R.ok("签名成功");
|
||||
}
|
||||
@PutMapping("/review")
|
||||
public R<?> review(@RequestParam Long id, @RequestParam Integer action, @RequestParam(required = false) String remark) {
|
||||
PreopDiscussion discussion = discussionService.getById(id);
|
||||
if (discussion == null) return R.fail("记录不存在");
|
||||
if (discussion.getStatus() != 2) return R.fail("只有待审核状态可以审核");
|
||||
long unsignedCount = participantService.count(
|
||||
new LambdaQueryWrapper<PreopParticipant>()
|
||||
.eq(PreopParticipant::getDiscussionId, id)
|
||||
.eq(PreopParticipant::getSignStatus, 0));
|
||||
if (unsignedCount > 0) return R.fail("还有" + unsignedCount + "位参与者未签名");
|
||||
if (action == 1) {
|
||||
discussion.setStatus(3);
|
||||
discussionService.updateById(discussion);
|
||||
return R.ok("审核通过");
|
||||
} else {
|
||||
discussion.setStatus(5);
|
||||
discussionService.updateById(discussion);
|
||||
return R.ok("已驳回");
|
||||
}
|
||||
}
|
||||
@GetMapping("/check-required")
|
||||
public R<?> checkRequired(@RequestParam Long surgeryId, @RequestParam Integer surgeryLevel) {
|
||||
if (surgeryLevel <= 2) {
|
||||
return R.ok(Map.of("required", false, "message", "一/二级手术无需强制术前讨论"));
|
||||
}
|
||||
long count = discussionService.count(
|
||||
new LambdaQueryWrapper<PreopDiscussion>()
|
||||
.eq(PreopDiscussion::getSurgeryId, surgeryId)
|
||||
.in(PreopDiscussion::getStatus, 3, 4));
|
||||
if (count == 0) {
|
||||
return R.ok(Map.of("required", true, "message", surgeryLevel + "级手术必须完成术前讨论后才能进行手术审批"));
|
||||
}
|
||||
return R.ok(Map.of("required", false, "message", "术前讨论已完成"));
|
||||
}
|
||||
@GetMapping("/statistics")
|
||||
public R<?> getStatistics() {
|
||||
Map<String, Object> stats = new HashMap<>();
|
||||
stats.put("total", discussionService.count());
|
||||
stats.put("draft", discussionService.count(new LambdaQueryWrapper<PreopDiscussion>().eq(PreopDiscussion::getStatus, 0)));
|
||||
stats.put("pending", discussionService.count(new LambdaQueryWrapper<PreopDiscussion>().eq(PreopDiscussion::getStatus, 1)));
|
||||
stats.put("reviewing", discussionService.count(new LambdaQueryWrapper<PreopDiscussion>().eq(PreopDiscussion::getStatus, 2)));
|
||||
stats.put("completed", discussionService.count(new LambdaQueryWrapper<PreopDiscussion>().eq(PreopDiscussion::getStatus, 3)));
|
||||
stats.put("rejected", discussionService.count(new LambdaQueryWrapper<PreopDiscussion>().eq(PreopDiscussion::getStatus, 5)));
|
||||
return R.ok(stats);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.healthlink.his.preop.domain;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.core.common.core.domain.HisBaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import java.util.Date;
|
||||
@Data
|
||||
@TableName("sys_preop_discussion")
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class PreopDiscussion extends HisBaseEntity {
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
private Long encounterId;
|
||||
private Long surgeryId;
|
||||
private Long patientId;
|
||||
private String patientName;
|
||||
private Integer discussionType;
|
||||
private Integer surgeryLevel;
|
||||
private String preopDiagnosis;
|
||||
private String surgeryName;
|
||||
private String surgeryIndication;
|
||||
private String mainPlan;
|
||||
private String backupPlan;
|
||||
private String anesthesiaType;
|
||||
private String risksAndCountermeasures;
|
||||
private String postopNotes;
|
||||
private Integer discussionConclusion;
|
||||
private String discussionResult;
|
||||
private Long hostUserId;
|
||||
private String hostUserName;
|
||||
private Integer status;
|
||||
private Date discussionTime;
|
||||
private String discussionLocation;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.healthlink.his.preop.domain;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.core.common.core.domain.HisBaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import java.util.Date;
|
||||
@Data
|
||||
@TableName("sys_preop_participant")
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class PreopParticipant extends HisBaseEntity {
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
private Long discussionId;
|
||||
private Long userId;
|
||||
private String userName;
|
||||
private String role;
|
||||
private String title;
|
||||
private Integer signStatus;
|
||||
private Date signTime;
|
||||
private String signImage;
|
||||
private String opinion;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.healthlink.his.preop.mapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.healthlink.his.preop.domain.PreopDiscussion;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
@Mapper
|
||||
public interface PreopDiscussionMapper extends BaseMapper<PreopDiscussion> {}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.healthlink.his.preop.mapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.healthlink.his.preop.domain.PreopParticipant;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
@Mapper
|
||||
public interface PreopParticipantMapper extends BaseMapper<PreopParticipant> {}
|
||||
@@ -0,0 +1,4 @@
|
||||
package com.healthlink.his.preop.service;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.healthlink.his.preop.domain.PreopDiscussion;
|
||||
public interface IPreopDiscussionService extends IService<PreopDiscussion> {}
|
||||
@@ -0,0 +1,4 @@
|
||||
package com.healthlink.his.preop.service;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.healthlink.his.preop.domain.PreopParticipant;
|
||||
public interface IPreopParticipantService extends IService<PreopParticipant> {}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.healthlink.his.preop.service.impl;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.healthlink.his.preop.domain.PreopDiscussion;
|
||||
import com.healthlink.his.preop.mapper.PreopDiscussionMapper;
|
||||
import com.healthlink.his.preop.service.IPreopDiscussionService;
|
||||
import org.springframework.stereotype.Service;
|
||||
@Service
|
||||
public class PreopDiscussionServiceImpl extends ServiceImpl<PreopDiscussionMapper, PreopDiscussion> implements IPreopDiscussionService {}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.healthlink.his.preop.service.impl;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.healthlink.his.preop.domain.PreopParticipant;
|
||||
import com.healthlink.his.preop.mapper.PreopParticipantMapper;
|
||||
import com.healthlink.his.preop.service.IPreopParticipantService;
|
||||
import org.springframework.stereotype.Service;
|
||||
@Service
|
||||
public class PreopParticipantServiceImpl extends ServiceImpl<PreopParticipantMapper, PreopParticipant> implements IPreopParticipantService {}
|
||||
Reference in New Issue
Block a user