会诊管理中 门诊会诊申请确认和门诊会诊申请管理模块全部功能的实现。包括数据库设计,前端UI设计,后端接口开发。
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
package com.openhis.web.consultation.appservice;
|
||||
|
||||
import com.openhis.web.consultation.dto.ConsultationActivityDto;
|
||||
import com.openhis.web.consultation.dto.ConsultationRequestDto;
|
||||
import com.openhis.web.consultation.dto.DepartmentTreeDto;
|
||||
import com.openhis.web.consultation.dto.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -23,6 +21,24 @@ public interface IConsultationAppService {
|
||||
*/
|
||||
List<ConsultationRequestDto> getConsultationList(Long encounterId);
|
||||
|
||||
/**
|
||||
* 查询会诊申请列表(支持多条件查询)
|
||||
*
|
||||
* @param dto 查询条件DTO
|
||||
* @return 会诊列表
|
||||
*/
|
||||
List<ConsultationRequestDto> queryConsultationList(ConsultationRequestDto dto);
|
||||
|
||||
/**
|
||||
* 分页查询会诊申请列表(支持多条件查询)
|
||||
*
|
||||
* @param dto 查询条件DTO
|
||||
* @param pageNum 页码
|
||||
* @param pageSize 每页大小
|
||||
* @return 分页结果
|
||||
*/
|
||||
com.baomidou.mybatisplus.extension.plugins.pagination.Page<ConsultationRequestDto> queryConsultationListPage(ConsultationRequestDto dto, Integer pageNum, Integer pageSize);
|
||||
|
||||
/**
|
||||
* 保存会诊申请
|
||||
*
|
||||
@@ -84,6 +100,55 @@ public interface IConsultationAppService {
|
||||
* @return 会诊项目列表
|
||||
*/
|
||||
List<ConsultationActivityDto> getConsultationActivities();
|
||||
|
||||
// ==================== 会诊确认相关接口 ====================
|
||||
|
||||
/**
|
||||
* 获取待确认的会诊列表(当前医生被邀请的会诊)
|
||||
*
|
||||
* @return 待确认的会诊列表
|
||||
*/
|
||||
List<ConsultationConfirmationDto> getPendingConfirmationList();
|
||||
|
||||
/**
|
||||
* 确认会诊
|
||||
*
|
||||
* @param dto 会诊确认DTO
|
||||
* @return 是否成功
|
||||
*/
|
||||
Boolean confirmConsultation(ConsultationConfirmationDto dto);
|
||||
|
||||
/**
|
||||
* 取消确认会诊
|
||||
*
|
||||
* @param consultationId 会诊申请单号
|
||||
* @return 是否成功
|
||||
*/
|
||||
Boolean cancelConfirmation(String consultationId);
|
||||
|
||||
/**
|
||||
* 签名会诊
|
||||
*
|
||||
* @param consultationId 会诊申请单号
|
||||
* @return 是否成功
|
||||
*/
|
||||
Boolean signConsultation(String consultationId);
|
||||
|
||||
/**
|
||||
* 获取会诊确认详情
|
||||
*
|
||||
* @param consultationId 会诊申请单号
|
||||
* @return 会诊确认详情
|
||||
*/
|
||||
ConsultationConfirmationDto getConfirmationDetail(String consultationId);
|
||||
|
||||
/**
|
||||
* 获取会诊意见列表
|
||||
*
|
||||
* @param consultationId 会诊申请单号
|
||||
* @return 会诊意见列表
|
||||
*/
|
||||
List<ConsultationOpinionDto> getConsultationOpinions(String consultationId);
|
||||
}
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,8 @@ package com.openhis.web.consultation.controller;
|
||||
import com.core.common.core.domain.R;
|
||||
import com.openhis.web.consultation.appservice.IConsultationAppService;
|
||||
import com.openhis.web.consultation.dto.ConsultationActivityDto;
|
||||
import com.openhis.web.consultation.dto.ConsultationConfirmationDto;
|
||||
import com.openhis.web.consultation.dto.ConsultationOpinionDto;
|
||||
import com.openhis.web.consultation.dto.ConsultationRequestDto;
|
||||
import com.openhis.web.consultation.dto.DepartmentTreeDto;
|
||||
import io.swagger.annotations.Api;
|
||||
@@ -49,6 +51,41 @@ public class ConsultationController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询会诊申请列表(支持多条件查询)
|
||||
*/
|
||||
@ApiOperation("查询会诊申请列表")
|
||||
@PostMapping("/query")
|
||||
public R<List<ConsultationRequestDto>> queryConsultationList(@RequestBody ConsultationRequestDto dto) {
|
||||
try {
|
||||
List<ConsultationRequestDto> list = consultationAppService.queryConsultationList(dto);
|
||||
return R.ok(list);
|
||||
} catch (Exception e) {
|
||||
log.error("查询会诊申请列表失败", e);
|
||||
return R.fail("查询会诊申请列表失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询会诊申请列表(支持多条件查询)
|
||||
*/
|
||||
@ApiOperation("分页查询会诊申请列表")
|
||||
@PostMapping("/queryPage")
|
||||
public R<com.baomidou.mybatisplus.extension.plugins.pagination.Page<ConsultationRequestDto>> queryConsultationListPage(
|
||||
@RequestBody ConsultationRequestDto dto,
|
||||
@ApiParam("页码") @RequestParam(required = false, defaultValue = "1") Integer pageNum,
|
||||
@ApiParam("每页大小") @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
|
||||
try {
|
||||
log.info("分页查询会诊申请列表,pageNum: {}, pageSize: {}", pageNum, pageSize);
|
||||
com.baomidou.mybatisplus.extension.plugins.pagination.Page<ConsultationRequestDto> page =
|
||||
consultationAppService.queryConsultationListPage(dto, pageNum, pageSize);
|
||||
return R.ok(page);
|
||||
} catch (Exception e) {
|
||||
log.error("分页查询会诊申请列表失败", e);
|
||||
return R.fail("分页查询会诊申请列表失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存会诊申请
|
||||
*/
|
||||
@@ -173,5 +210,99 @@ public class ConsultationController {
|
||||
return R.fail("获取会诊项目列表失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 会诊确认相关接口 ====================
|
||||
|
||||
/**
|
||||
* 获取待确认的会诊列表(当前医生被邀请的会诊)
|
||||
*/
|
||||
@ApiOperation("获取待确认的会诊列表")
|
||||
@GetMapping("/confirmation/pending")
|
||||
public R<List<ConsultationConfirmationDto>> getPendingConfirmationList() {
|
||||
try {
|
||||
List<ConsultationConfirmationDto> list = consultationAppService.getPendingConfirmationList();
|
||||
return R.ok(list);
|
||||
} catch (Exception e) {
|
||||
log.error("获取待确认会诊列表失败", e);
|
||||
return R.fail("获取待确认会诊列表失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 确认会诊
|
||||
*/
|
||||
@ApiOperation("确认会诊")
|
||||
@PostMapping("/confirmation/confirm")
|
||||
public R<String> confirmConsultation(@RequestBody ConsultationConfirmationDto dto) {
|
||||
try {
|
||||
Boolean result = consultationAppService.confirmConsultation(dto);
|
||||
return result ? R.ok("确认成功") : R.fail("确认失败");
|
||||
} catch (Exception e) {
|
||||
log.error("确认会诊失败", e);
|
||||
return R.fail("确认会诊失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消确认会诊
|
||||
*/
|
||||
@ApiOperation("取消确认会诊")
|
||||
@PostMapping("/confirmation/cancelConfirm")
|
||||
public R<String> cancelConfirmation(@ApiParam("会诊申请单号") @RequestParam String consultationId) {
|
||||
try {
|
||||
Boolean result = consultationAppService.cancelConfirmation(consultationId);
|
||||
return result ? R.ok("取消确认成功") : R.fail("取消确认失败");
|
||||
} catch (Exception e) {
|
||||
log.error("取消确认会诊失败", e);
|
||||
return R.fail("取消确认会诊失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 签名会诊
|
||||
*/
|
||||
@ApiOperation("签名会诊")
|
||||
@PostMapping("/confirmation/sign")
|
||||
public R<String> signConsultation(@ApiParam("会诊申请单号") @RequestParam String consultationId) {
|
||||
try {
|
||||
Boolean result = consultationAppService.signConsultation(consultationId);
|
||||
return result ? R.ok("签名成功") : R.fail("签名失败");
|
||||
} catch (Exception e) {
|
||||
log.error("签名会诊失败", e);
|
||||
return R.fail("签名会诊失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会诊确认详情
|
||||
*/
|
||||
@ApiOperation("获取会诊确认详情")
|
||||
@GetMapping("/confirmation/detail")
|
||||
public R<ConsultationConfirmationDto> getConfirmationDetail(
|
||||
@ApiParam("会诊申请单号") @RequestParam String consultationId) {
|
||||
try {
|
||||
ConsultationConfirmationDto detail = consultationAppService.getConfirmationDetail(consultationId);
|
||||
return R.ok(detail);
|
||||
} catch (Exception e) {
|
||||
log.error("获取会诊确认详情失败", e);
|
||||
return R.fail("获取会诊确认详情失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会诊意见列表
|
||||
*/
|
||||
@ApiOperation("获取会诊意见列表")
|
||||
@GetMapping("/confirmation/opinions")
|
||||
public R<List<ConsultationOpinionDto>> getConsultationOpinions(
|
||||
@ApiParam("会诊申请单号") @RequestParam String consultationId) {
|
||||
try {
|
||||
List<ConsultationOpinionDto> opinions = consultationAppService.getConsultationOpinions(consultationId);
|
||||
return R.ok(opinions);
|
||||
} catch (Exception e) {
|
||||
log.error("获取会诊意见列表失败", e);
|
||||
return R.fail("获取会诊意见列表失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,167 @@
|
||||
package com.openhis.web.consultation.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 会诊确认表实体类
|
||||
*
|
||||
* @author system
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
@TableName("consultation_confirmation")
|
||||
public class ConsultationConfirmation implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "id", type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 会诊申请ID(外键:consultation_request.id)
|
||||
*/
|
||||
@TableField("consultation_request_id")
|
||||
private Long consultationRequestId;
|
||||
|
||||
/**
|
||||
* 会诊申请单号
|
||||
*/
|
||||
@TableField("consultation_id")
|
||||
private String consultationId;
|
||||
|
||||
/**
|
||||
* 确认会诊的医生ID(操作【确认】按钮的当前医生ID)
|
||||
*/
|
||||
@TableField("confirming_physician_id")
|
||||
private Long confirmingPhysicianId;
|
||||
|
||||
/**
|
||||
* 确认会诊的医生姓名(操作【确认】按钮的当前医生姓名)
|
||||
*/
|
||||
@TableField("confirming_physician_name")
|
||||
private String confirmingPhysicianName;
|
||||
|
||||
/**
|
||||
* 代表科室ID(操作【确认】按钮的当前开单科室ID)
|
||||
*/
|
||||
@TableField("confirming_dept_id")
|
||||
private Long confirmingDeptId;
|
||||
|
||||
/**
|
||||
* 代表科室名称(操作【确认】按钮的当前开单科室)
|
||||
*/
|
||||
@TableField("confirming_dept_name")
|
||||
private String confirmingDeptName;
|
||||
|
||||
/**
|
||||
* 确认会诊的日期(操作【确认】按钮当前系统时间)
|
||||
*/
|
||||
@TableField("confirming_date")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date confirmingDate;
|
||||
|
||||
/**
|
||||
* 会诊状态:0-取消确认(作废),20-已确认(会诊医生已查看/同意,可写初步意见),30-已签名(已电子签名,意见最终生效),40-已完成(会诊报告已回写,流程关闭)
|
||||
*/
|
||||
@TableField("consultation_status")
|
||||
private Integer consultationStatus;
|
||||
|
||||
/**
|
||||
* 会诊意见(最多500字)
|
||||
*/
|
||||
@TableField("consultation_opinion")
|
||||
private String consultationOpinion;
|
||||
|
||||
/**
|
||||
* 会诊确认参加医师(多个医师信息,JSON格式)
|
||||
*/
|
||||
@TableField("confirming_physicians")
|
||||
private String confirmingPhysicians;
|
||||
|
||||
/**
|
||||
* 所有医生都确认的时间
|
||||
*/
|
||||
@TableField("all_confirmed_date")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date allConfirmedDate;
|
||||
|
||||
/**
|
||||
* 所有医生都签名的时间
|
||||
*/
|
||||
@TableField("all_signed_date")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date allSignedDate;
|
||||
|
||||
/**
|
||||
* 签名医生姓名
|
||||
*/
|
||||
@TableField("signature")
|
||||
private String signature;
|
||||
|
||||
/**
|
||||
* 签名医生ID
|
||||
*/
|
||||
@TableField("signature_physician_id")
|
||||
private Long signaturePhysicianId;
|
||||
|
||||
/**
|
||||
* 签名时间
|
||||
*/
|
||||
@TableField("signature_date")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureDate;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(value = "create_time", fill = FieldFill.INSERT)
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 更新时间(由 Java 代码维护)
|
||||
*/
|
||||
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
@TableField(value = "create_by", fill = FieldFill.INSERT)
|
||||
private String createBy;
|
||||
|
||||
/**
|
||||
* 更新人
|
||||
*/
|
||||
@TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
|
||||
private String updateBy;
|
||||
|
||||
/**
|
||||
* 租户ID
|
||||
*/
|
||||
@TableField("tenant_id")
|
||||
private Long tenantId;
|
||||
|
||||
/**
|
||||
* 逻辑删除标识:0-未删除,1-已删除
|
||||
*/
|
||||
@TableField("is_deleted")
|
||||
@TableLogic
|
||||
private Integer isDeleted;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@TableField("remark")
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -56,7 +56,13 @@ public class ConsultationInvited implements Serializable {
|
||||
private String invitedPhysicianName;
|
||||
|
||||
/**
|
||||
* 邀请状态(0-待确认,1-已确认,2-已拒绝)
|
||||
* 邀请状态(使用ConsultationStatusEnum)
|
||||
* 0-新开(待确认)
|
||||
* 10-已提交(待确认)
|
||||
* 20-已确认
|
||||
* 30-已签名
|
||||
* 40-已完成
|
||||
* 50-已取消(已拒绝)
|
||||
*/
|
||||
@TableField("invited_status")
|
||||
private Integer invitedStatus;
|
||||
@@ -69,11 +75,18 @@ public class ConsultationInvited implements Serializable {
|
||||
private Date confirmTime;
|
||||
|
||||
/**
|
||||
* 确认意见
|
||||
* 确认意见(格式:科室-医生:意见内容)
|
||||
*/
|
||||
@TableField("confirm_opinion")
|
||||
private String confirmOpinion;
|
||||
|
||||
/**
|
||||
* 签名时间
|
||||
*/
|
||||
@TableField("signature_time")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureTime;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
||||
@@ -218,6 +218,24 @@ public class ConsultationRequest implements Serializable {
|
||||
@TableField("cancel_reason")
|
||||
private String cancelReason;
|
||||
|
||||
/**
|
||||
* 已确认的医生数量
|
||||
*/
|
||||
@TableField("confirmed_count")
|
||||
private Integer confirmedCount;
|
||||
|
||||
/**
|
||||
* 已签名的医生数量
|
||||
*/
|
||||
@TableField("signed_count")
|
||||
private Integer signedCount;
|
||||
|
||||
/**
|
||||
* 被邀请的医生总数
|
||||
*/
|
||||
@TableField("invited_count")
|
||||
private Integer invitedCount;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
package com.openhis.web.consultation.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 会诊确认DTO
|
||||
*
|
||||
* @author system
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("会诊确认DTO")
|
||||
public class ConsultationConfirmationDto implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("主键ID")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("会诊申请ID")
|
||||
private Long consultationRequestId;
|
||||
|
||||
@ApiModelProperty("会诊申请单号")
|
||||
private String consultationId;
|
||||
|
||||
@ApiModelProperty("确认医生ID")
|
||||
private Long confirmingPhysicianId;
|
||||
|
||||
@ApiModelProperty("确认医生姓名")
|
||||
private String confirmingPhysicianName;
|
||||
|
||||
@ApiModelProperty("代表科室ID")
|
||||
private Long confirmingDeptId;
|
||||
|
||||
@ApiModelProperty("代表科室名称")
|
||||
private String confirmingDeptName;
|
||||
|
||||
@ApiModelProperty("确认日期")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date confirmingDate;
|
||||
|
||||
@ApiModelProperty("会诊状态:0-取消确认,20-已确认,30-已签名,40-已完成")
|
||||
private Integer consultationStatus;
|
||||
|
||||
@ApiModelProperty("会诊意见")
|
||||
private String consultationOpinion;
|
||||
|
||||
@ApiModelProperty("会诊确认参加医师")
|
||||
private String confirmingPhysician;
|
||||
|
||||
@ApiModelProperty("签名医生姓名")
|
||||
private String signature;
|
||||
|
||||
@ApiModelProperty("签名医生ID")
|
||||
private Long signaturePhysicianId;
|
||||
|
||||
@ApiModelProperty("签名时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureDate;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
// ========== 扩展字段(用于前端显示) ==========
|
||||
|
||||
@ApiModelProperty("患者姓名")
|
||||
private String patientName;
|
||||
|
||||
@ApiModelProperty("性别")
|
||||
private String genderText;
|
||||
|
||||
@ApiModelProperty("年龄")
|
||||
private Integer age;
|
||||
|
||||
@ApiModelProperty("就诊卡号")
|
||||
private String patientIdentifierNo;
|
||||
|
||||
@ApiModelProperty("申请科室")
|
||||
private String applyDept;
|
||||
|
||||
@ApiModelProperty("申请医师")
|
||||
private String applyDoctor;
|
||||
|
||||
@ApiModelProperty("申请时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date applyTime;
|
||||
|
||||
@ApiModelProperty("会诊时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date consultationDate;
|
||||
|
||||
@ApiModelProperty("紧急标志")
|
||||
private Boolean urgent;
|
||||
|
||||
@ApiModelProperty("会诊邀请对象")
|
||||
private String invitedObject;
|
||||
|
||||
@ApiModelProperty("病史及目的")
|
||||
private String consultationPurpose;
|
||||
|
||||
@ApiModelProperty("门诊诊断")
|
||||
private String provisionalDiagnosis;
|
||||
|
||||
@ApiModelProperty("提交医生")
|
||||
private String submittingPhysician;
|
||||
|
||||
@ApiModelProperty("提交时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date submittingTime;
|
||||
|
||||
// ========== 当前医生的个人状态 ==========
|
||||
|
||||
@ApiModelProperty("当前医生的邀请状态:0-待确认,1-已确认,2-已拒绝,3-已签名")
|
||||
private Integer myInvitedStatus;
|
||||
|
||||
@ApiModelProperty("当前医生的确认时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date myConfirmTime;
|
||||
|
||||
@ApiModelProperty("当前医生的签名时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date mySignatureTime;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.openhis.web.consultation.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 会诊意见DTO
|
||||
*
|
||||
* @author system
|
||||
* @date 2026-02-09
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("会诊意见DTO")
|
||||
public class ConsultationOpinionDto implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("医生ID")
|
||||
private Long physicianId;
|
||||
|
||||
@ApiModelProperty("医生姓名")
|
||||
private String physicianName;
|
||||
|
||||
@ApiModelProperty("科室ID")
|
||||
private Long deptId;
|
||||
|
||||
@ApiModelProperty("科室名称")
|
||||
private String deptName;
|
||||
|
||||
@ApiModelProperty("会诊意见(已包含科室-医生前缀)")
|
||||
private String opinion;
|
||||
|
||||
@ApiModelProperty("确认时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date confirmTime;
|
||||
|
||||
@ApiModelProperty("签名时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureTime;
|
||||
|
||||
@ApiModelProperty("状态:0-待确认,1-已确认,2-已拒绝,3-已签名")
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty("是否已签名")
|
||||
private Boolean isSigned;
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ public class ConsultationRequestDto implements Serializable {
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date consultationDate;
|
||||
|
||||
|
||||
/**
|
||||
* 申请时间
|
||||
*/
|
||||
@@ -132,7 +132,7 @@ public class ConsultationRequestDto implements Serializable {
|
||||
* 会诊项目名称(如:院内会诊、远程会诊等)
|
||||
*/
|
||||
private String consultationActivityName;
|
||||
|
||||
|
||||
/**
|
||||
* 紧急程度(1=普通,2=紧急)
|
||||
*/
|
||||
@@ -185,6 +185,34 @@ public class ConsultationRequestDto implements Serializable {
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date myConfirmTime;
|
||||
|
||||
// ==================== 会诊记录相关字段(会诊完成后显示) ====================
|
||||
|
||||
/**
|
||||
* 会诊邀请参加医师(已签名医生列表,格式:科室-姓名、科室-姓名)
|
||||
*/
|
||||
private String invitedPhysiciansText;
|
||||
|
||||
/**
|
||||
* 所属医生(第一个签名的医生)
|
||||
*/
|
||||
private String attendingPhysician;
|
||||
|
||||
/**
|
||||
* 代表科室(第一个签名医生的科室)
|
||||
*/
|
||||
private String representDepartment;
|
||||
|
||||
/**
|
||||
* 签名医生(第一个签名的医生)
|
||||
*/
|
||||
private String signPhysician;
|
||||
|
||||
/**
|
||||
* 签名时间(第一个签名医生的签名时间)
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signTime;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 邀请对象DTO
|
||||
@@ -38,6 +39,20 @@ public class InvitedObjectDto implements Serializable {
|
||||
* 医生姓名
|
||||
*/
|
||||
private String physicianName;
|
||||
|
||||
/**
|
||||
* 邀请状态:0=待确认,1=已确认,3=已签名
|
||||
*/
|
||||
private Integer invitedStatus;
|
||||
|
||||
/**
|
||||
* 确认时间
|
||||
*/
|
||||
private Date confirmTime;
|
||||
|
||||
/**
|
||||
* 签名时间
|
||||
*/
|
||||
private Date signatureTime;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ public enum ConsultationStatusEnum {
|
||||
* 判断是否可以编辑
|
||||
*/
|
||||
public boolean canEdit() {
|
||||
return this == NEW || this == SUBMITTED;
|
||||
return this == NEW;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -83,3 +83,6 @@ public enum ConsultationStatusEnum {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -49,3 +49,8 @@ public enum ConsultationUrgencyEnum {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -54,3 +54,7 @@ public enum InvitedStatusEnum {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.openhis.web.consultation.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.openhis.web.consultation.domain.ConsultationConfirmation;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 会诊确认Mapper接口
|
||||
*
|
||||
* @author system
|
||||
* @date 2026-02-06
|
||||
*/
|
||||
@Mapper
|
||||
public interface ConsultationConfirmationMapper extends BaseMapper<ConsultationConfirmation> {
|
||||
|
||||
/**
|
||||
* 物理删除确认记录(根据会诊申请ID)
|
||||
*
|
||||
* @param consultationRequestId 会诊申请ID
|
||||
* @return 删除的记录数
|
||||
*/
|
||||
@Delete("DELETE FROM consultation_confirmation WHERE consultation_request_id = #{consultationRequestId}")
|
||||
int physicalDeleteByRequestId(@Param("consultationRequestId") Long consultationRequestId);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
-- ============================================
|
||||
-- 修复会诊确认表的 NOT NULL 约束问题
|
||||
-- ============================================
|
||||
|
||||
-- 将 confirming_physician_id 等字段改为可空
|
||||
-- 因为在新的方案中,这些字段在所有医生确认后才会填充
|
||||
|
||||
ALTER TABLE hisdev.consultation_confirmation
|
||||
ALTER COLUMN confirming_physician_id DROP NOT NULL;
|
||||
|
||||
ALTER TABLE hisdev.consultation_confirmation
|
||||
ALTER COLUMN confirming_physician_name DROP NOT NULL;
|
||||
|
||||
ALTER TABLE hisdev.consultation_confirmation
|
||||
ALTER COLUMN confirming_dept_id DROP NOT NULL;
|
||||
|
||||
ALTER TABLE hisdev.consultation_confirmation
|
||||
ALTER COLUMN confirming_dept_name DROP NOT NULL;
|
||||
|
||||
ALTER TABLE hisdev.consultation_confirmation
|
||||
ALTER COLUMN confirming_date DROP NOT NULL;
|
||||
|
||||
-- 说明:
|
||||
-- 在新的方案中,consultation_confirmation 记录在所有医生确认后才创建
|
||||
-- 这些字段用于记录"最后一个确认的医生"或"代表性医生"
|
||||
-- 因此允许为 NULL,实际的医生信息存储在 confirming_physicians (JSON) 字段中
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
-- ============================================
|
||||
-- 会诊确认功能优化 - 数据库表结构修改 (PostgreSQL版本)
|
||||
-- ============================================
|
||||
|
||||
-- 1. 修改 consultation_request 表(添加计数字段)
|
||||
ALTER TABLE hisdev.consultation_request
|
||||
ADD COLUMN IF NOT EXISTS confirmed_count INT DEFAULT 0;
|
||||
|
||||
ALTER TABLE hisdev.consultation_request
|
||||
ADD COLUMN IF NOT EXISTS signed_count INT DEFAULT 0;
|
||||
|
||||
ALTER TABLE hisdev.consultation_request
|
||||
ADD COLUMN IF NOT EXISTS invited_count INT DEFAULT 0;
|
||||
|
||||
-- 2. 修改 consultation_invited 表(添加签名时间字段)
|
||||
ALTER TABLE hisdev.consultation_invited
|
||||
ADD COLUMN IF NOT EXISTS signature_time TIMESTAMP NULL;
|
||||
|
||||
-- 3. 修改 consultation_confirmation 表(优化字段)
|
||||
ALTER TABLE hisdev.consultation_confirmation
|
||||
ADD COLUMN IF NOT EXISTS all_confirmed_date TIMESTAMP NULL;
|
||||
|
||||
ALTER TABLE hisdev.consultation_confirmation
|
||||
ADD COLUMN IF NOT EXISTS all_signed_date TIMESTAMP NULL;
|
||||
|
||||
-- 检查 confirming_physicians 字段是否存在,如果不存在则添加
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = 'hisdev'
|
||||
AND table_name = 'consultation_confirmation'
|
||||
AND column_name = 'confirming_physicians'
|
||||
) THEN
|
||||
-- 如果 confirming_physician 存在,则重命名
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = 'hisdev'
|
||||
AND table_name = 'consultation_confirmation'
|
||||
AND column_name = 'confirming_physician'
|
||||
) THEN
|
||||
ALTER TABLE hisdev.consultation_confirmation
|
||||
RENAME COLUMN confirming_physician TO confirming_physicians;
|
||||
ELSE
|
||||
-- 如果都不存在,则新增
|
||||
ALTER TABLE hisdev.consultation_confirmation
|
||||
ADD COLUMN confirming_physicians TEXT;
|
||||
END IF;
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 4. 为现有数据初始化计数字段
|
||||
UPDATE hisdev.consultation_request cr
|
||||
SET invited_count = (
|
||||
SELECT COUNT(*)
|
||||
FROM hisdev.consultation_invited ci
|
||||
WHERE ci.consultation_request_id = cr.id
|
||||
AND ci.is_deleted = 0
|
||||
)
|
||||
WHERE cr.invited_count = 0 OR cr.invited_count IS NULL;
|
||||
|
||||
UPDATE hisdev.consultation_request cr
|
||||
SET confirmed_count = (
|
||||
SELECT COUNT(*)
|
||||
FROM hisdev.consultation_invited ci
|
||||
WHERE ci.consultation_request_id = cr.id
|
||||
AND ci.invited_status >= 1
|
||||
AND ci.is_deleted = 0
|
||||
)
|
||||
WHERE cr.confirmed_count = 0 OR cr.confirmed_count IS NULL;
|
||||
|
||||
UPDATE hisdev.consultation_request cr
|
||||
SET signed_count = (
|
||||
SELECT COUNT(*)
|
||||
FROM hisdev.consultation_invited ci
|
||||
WHERE ci.consultation_request_id = cr.id
|
||||
AND ci.invited_status >= 3
|
||||
AND ci.is_deleted = 0
|
||||
)
|
||||
WHERE cr.signed_count = 0 OR cr.signed_count IS NULL;
|
||||
|
||||
-- 5. 添加索引优化查询性能(如果不存在)
|
||||
CREATE INDEX IF NOT EXISTS idx_invited_status ON hisdev.consultation_invited(invited_status);
|
||||
CREATE INDEX IF NOT EXISTS idx_confirm_time ON hisdev.consultation_invited(confirm_time);
|
||||
|
||||
-- 6. 添加字段注释
|
||||
COMMENT ON COLUMN hisdev.consultation_request.confirmed_count IS '已确认的医生数量';
|
||||
COMMENT ON COLUMN hisdev.consultation_request.signed_count IS '已签名的医生数量';
|
||||
COMMENT ON COLUMN hisdev.consultation_request.invited_count IS '被邀请的医生总数';
|
||||
COMMENT ON COLUMN hisdev.consultation_invited.signature_time IS '签名时间';
|
||||
COMMENT ON COLUMN hisdev.consultation_confirmation.all_confirmed_date IS '所有医生都确认的时间';
|
||||
COMMENT ON COLUMN hisdev.consultation_confirmation.all_signed_date IS '所有医生都签名的时间';
|
||||
COMMENT ON COLUMN hisdev.consultation_confirmation.confirming_physicians IS '参与确认的医生列表(JSON格式)';
|
||||
|
||||
Reference in New Issue
Block a user