新增了dockerfile,修改了病例新增、登陆逻辑

This commit is contained in:
wucongxing8150 2025-06-25 13:18:20 +08:00
parent 4c74b0dd01
commit a5197591bc
16 changed files with 803 additions and 646 deletions

View File

@ -21,10 +21,11 @@ RUN mkdir -p /root/.m2 && \
# 复制项目代码
COPY pom.xml .
COPY src ./src
COPY sa-admin ./sa-admin
COPY sa-common ./sa-common
# 构建项目
RUN mvn clean package -DskipTests
RUN mvn clean package -Dmaven.test.skip=true -P dev
# 第二阶段:使用更小的 Java8 JDK 镜像运行
FROM eclipse-temurin:8-jdk-alpine
@ -32,7 +33,7 @@ FROM eclipse-temurin:8-jdk-alpine
WORKDIR /app
# 复制构建产物
COPY --from=builder /app/target/*.jar app.jar
COPY --from=builder /app/sa-admin/target/*.jar app.jar
# 暴露端口(请替换成你实际应用端口)
EXPOSE 5477

View File

@ -0,0 +1,16 @@
package net.lab1024.sa.admin.module.app.medicalrecord.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.lab1024.sa.admin.module.app.medicalrecord.domain.MedicalRecordAbstracEntity;
import net.lab1024.sa.admin.module.app.medicalrecord.domain.MedicalRecordPrognosisEntity;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
@Mapper
@Component
public interface MedicalRecorPrognosisDao extends BaseMapper<MedicalRecordPrognosisEntity> {
@Delete("delete from t_caseplatform_case_prognosis where case_id=#{medicalRecordId}")
int deleteByCaseId(Long medicalRecordId);
}

View File

@ -34,11 +34,6 @@ public class MedicalRecordAbstracEntity {
*/
private String abstractStr;
/**
* 病历摘要 图片
*/
private String abstractImg;
/**
* 创建时间
*/
@ -49,10 +44,10 @@ public class MedicalRecordAbstracEntity {
*/
private LocalDateTime updateTime;
public MedicalRecordAbstracEntity(Long caseId, String abstractStr, String abstractImg, LocalDateTime createTime) {
this.caseId = caseId;
this.abstractStr = abstractStr;
this.abstractImg = abstractImg;
this.createTime = createTime;
}
// public MedicalRecordAbstracEntity(Long caseId, String abstractStr, String abstractImg, LocalDateTime createTime) {
// this.caseId = caseId;
// this.abstractStr = abstractStr;
// this.abstractImg = abstractImg;
// this.createTime = createTime;
// }
}

View File

@ -5,6 +5,7 @@ import lombok.Data;
import net.lab1024.sa.admin.module.business.caseplatformcase.constant.CaseStatusEnum;
import net.lab1024.sa.admin.module.business.caseplatformcase.constant.CasetypeEnum;
import net.lab1024.sa.common.common.domain.PageParam;
import net.lab1024.sa.common.common.enumeration.DischargeStatusEnum;
import net.lab1024.sa.common.common.enumeration.GenderEnum;
import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum;
import net.lab1024.sa.common.common.validator.enumeration.CheckEnum;
@ -36,7 +37,7 @@ public class MedicalRecordAddForm {
@ApiModelPropertyEnum(GenderEnum.class)
@CheckEnum(value = GenderEnum.class, message = "性别错误")
private Integer sex;
private String sex;
@ApiModelProperty(value = "年龄", required = true)
@NotNull(message = "年龄 不能为空")
@ -47,23 +48,27 @@ public class MedicalRecordAddForm {
@NotNull(message = "入院时间 不能为空")
private LocalDateTime admissionTime;
@ApiModelPropertyEnum(value = CasetypeEnum.class, desc = "病历类型")
@CheckEnum(value = CasetypeEnum.class, message = "病历类型 错误", required = true)
private Integer caseType;
@ApiModelProperty(value = "治疗类型", required = true)
@NotNull(message = "治疗类型 不能为空")
private String caseType;
@ApiModelProperty(value = "基本信息图片", required = true)
@NotNull(message = "基本信息图片 不能为空")
@Length(min = 1, max = 1000, message = "基本信息图片 不能为空")
private String baseImg;
@ApiModelProperty(value = "主要诊断", required = true)
@NotNull(message = "主要诊断 不能为空")
private String mainDiagnose;
@ApiModelProperty(value = "患者病因", required = true)
@NotNull(message = "患者病因 不能为空")
private String diseaseCause;
@ApiModelProperty(value = "诱因", required = true)
@NotNull(message = "诱因 不能为空")
private String seductionReason;
/*************************临床资料 病历摘要***************************/
@ApiModelProperty(value = "临床资料 病历摘要 文字", required = true)
@NotNull(message = "主要诊断 文字 不能为空")
private String abstractStr;
@ApiModelProperty(value = "临床资料 病历摘要 图片", required = true)
private String abstractImg;
/*************************DPMAS***************************/
@ApiModelProperty(value = "DPMAS", required = true)
@NotNull(message = "DPMAS 不能为空")
@ -83,12 +88,18 @@ public class MedicalRecordAddForm {
@NotNull(message = "治疗后 检测时间 不能为空")
private LocalDateTime afterTime;
/**
* 最后一次治疗后 检测时间
*/
@ApiModelProperty(value = "最后一次治疗后 检测时间 ", required = true)
@NotNull(message = "最后一次治疗后 检测时间 不能为空")
private LocalDateTime lastTime;
/**
* 治疗前 总胆红素(umol/L)
*/
@ApiModelProperty(value = "治疗前 总胆红素", required = true)
@NotNull(message = "治疗前 总胆红素 不能为空")
@Length(min = 1, max = 10, message = "治疗前 总胆红素 输入不合法")
private String headTb;
/**
@ -96,20 +107,14 @@ public class MedicalRecordAddForm {
*/
@ApiModelProperty(value = "治疗后 总胆红素 ", required = true)
@NotNull(message = "治疗后 总胆红素 不能为空")
@Length(min = 1, max = 10, message = "治疗后 总胆红素 输入不合法")
private String afterTb;
/**
* 治疗前 白蛋白(g/L)
* 最后一次治疗后 总胆红素(umol/L)
*/
@ApiModelProperty(value = "治疗前 白蛋白", required = true)
private String headAlb;
/**
* 治疗后 白蛋白(g/L)
*/
@ApiModelProperty(value = "治疗后 白蛋白 ", required = true)
private String afterAlb;
@ApiModelProperty(value = "最后一次治疗后 总胆红素 ", required = true)
@NotNull(message = "最后一次治疗后 总胆红素 不能为空")
private String lastTb;
/**
* 治疗前 直接胆红素(umol/L)
@ -124,16 +129,10 @@ public class MedicalRecordAddForm {
private String afterDb;
/**
* 治疗前 凝血酶原活动度 (%)
* 最后一次治疗后 直接胆红素(umol/L)
*/
@ApiModelProperty(value = "治疗前 凝血酶原活动度", required = true)
private String headPta;
/**
* 治疗后 凝血酶原活动度 (%)
*/
@ApiModelProperty(value = "治疗后 凝血酶原活动度 ", required = true)
private String afterPta;
@ApiModelProperty(value = "最后一次治疗后 直接胆红素 ", required = true)
private String lastDb;
/**
* 治疗前 间接胆红素(umol/L)
@ -147,12 +146,95 @@ public class MedicalRecordAddForm {
@ApiModelProperty(value = "治疗后 间接胆红素 ", required = true)
private String afterIb;
/**
* 最后一次治疗后 间接胆红素(umol/L)
*/
@ApiModelProperty(value = "最后一次治疗后 间接胆红素 ", required = true)
private String lastIb;
/**
* 治疗前 丙氨酸氨基转移酶(U/L)
*/
@ApiModelProperty(value = "治疗前 丙氨酸氨基转移酶", required = true)
@NotNull(message = "治疗前 丙氨酸氨基转移酶 不能为空")
private String headAlt;
/**
* 治疗后 丙氨酸氨基转移酶 (U/L)
*/
@ApiModelProperty(value = "治疗后 丙氨酸氨基转移酶 ", required = true)
@NotNull(message = "治疗后 丙氨酸氨基转移酶 不能为空")
private String afterAlt;
/**
* 最后一次治疗后 丙氨酸氨基转移酶 (U/L)
*/
@ApiModelProperty(value = "最后一次治疗后 丙氨酸氨基转移酶 ", required = true)
@NotNull(message = "最后一次治疗后 丙氨酸氨基转移酶 不能为空")
private String lastAlt;
/**
* 治疗前 天门冬氨酸氨基转移酶 (U/L)
*/
@ApiModelProperty(value = "治疗前 天门冬氨酸氨基转移酶", required = true)
@NotNull(message = "治疗前 天门冬氨酸氨基转移酶 不能为空")
private String headAst;
/**
* 治疗后 天门冬氨酸氨基转移酶 (U/L)
*/
@ApiModelProperty(value = "治疗后 天门冬氨酸氨基转移酶 ", required = true)
@NotNull(message = "治疗后 天门冬氨酸氨基转移酶 不能为空")
private String afterAst;
/**
* 最后一次治疗后 天门冬氨酸氨基转移酶 (U/L)
*/
@ApiModelProperty(value = "最后一次治疗后 天门冬氨酸氨基转移酶 ", required = true)
@NotNull(message = "最后一次治疗后 天门冬氨酸氨基转移酶 不能为空")
private String lastAst;
/**
* 治疗前 白蛋白(g/L)
*/
@ApiModelProperty(value = "治疗前 白蛋白", required = true)
private String headAlb;
/**
* 治疗后 白蛋白(g/L)
*/
@ApiModelProperty(value = "治疗后 白蛋白 ", required = true)
private String afterAlb;
/**
* 最后一次治疗后 白蛋白(g/L)
*/
@ApiModelProperty(value = "最后一次治疗后 白蛋白 ", required = true)
private String lastAlb;
/**
* 治疗前 凝血酶原活动度 (%)
*/
@ApiModelProperty(value = "治疗前 凝血酶原活动度", required = true)
private String headPta;
/**
* 治疗后 凝血酶原活动度 (%)
*/
@ApiModelProperty(value = "治疗后 凝血酶原活动度 ", required = true)
private String afterPta;
/**
* 最后一次治疗后 凝血酶原活动度 (%)
*/
@ApiModelProperty(value = "最后一次治疗后 凝血酶原活动度 ", required = true)
private String lastPta;
/**
* 治疗前 国际标准化比值 INR
*/
@ApiModelProperty(value = "治疗前 国际标准化比值", required = true)
@NotNull(message = "治疗前 国际标准化比值 不能为空")
@Length(min = 1, max = 10, message = "治疗前 国际标准化比值 输入不合法")
private String headInr;
/**
@ -160,24 +242,32 @@ public class MedicalRecordAddForm {
*/
@ApiModelProperty(value = "治疗后 国际标准化比值 ", required = true)
@NotNull(message = "治疗后 国际标准化比值 不能为空")
@Length(min = 1, max = 10, message = "治疗后 国际标准化比值 输入不合法")
private String afterInr;
/**
* 治疗前 谷丙转氨 (U/L)
* 最后一次治疗后 国际标准化比值 INR
*/
@ApiModelProperty(value = "治疗前 谷丙转氨", required = true)
@NotNull(message = "治疗前 谷丙转氨 不能为空")
@Length(min = 1, max = 10, message = "治疗前 谷丙转氨 输入不合法")
private String headAlt;
@ApiModelProperty(value = "最后一次治疗后 国际标准化比值 ", required = true)
@NotNull(message = "最后一次治疗后 国际标准化比值 不能为空")
private String lastInr;
/**
* 治疗 谷丙转氨 (U/L)
* 治疗 C反应蛋白mg/L
*/
@ApiModelProperty(value = "治疗后 谷丙转氨 ", required = true)
@NotNull(message = "治疗后 谷丙转氨 不能为空")
@Length(min = 1, max = 10, message = "治疗后 谷丙转氨 输入不合法")
private String afterAlt;
@ApiModelProperty(value = "治疗前 C反应蛋白", required = true)
private String headCrp;
/**
* 治疗后 C反应蛋白mg/L
*/
@ApiModelProperty(value = "治疗后 C反应蛋白 ", required = true)
private String afterCrp;
/**
* 最后一次治疗后 C反应蛋白mg/L
*/
@ApiModelProperty(value = "最后一次治疗后 C反应蛋白 ", required = true)
private String lastCrp;
/**
* 治疗前 白介素6(ng/L)
@ -192,20 +282,10 @@ public class MedicalRecordAddForm {
private String afterIl6;
/**
* 治疗前 谷草转氨酶 (U/L)
* 最后一次治疗后 白介素6(ng/L)
*/
@ApiModelProperty(value = "治疗前 谷草转氨酶", required = true)
@NotNull(message = "治疗前 谷草转氨酶 不能为空")
@Length(min = 1, max = 10, message = "治疗前 谷草转氨酶 输入不合法")
private String headAst;
/**
* 治疗后 谷草转氨酶 (U/L)
*/
@ApiModelProperty(value = "治疗后 谷草转氨酶 ", required = true)
@NotNull(message = "治疗后 谷草转氨酶 不能为空")
@Length(min = 1, max = 10, message = "治疗后 谷草转氨酶 输入不合法")
private String afterAst;
@ApiModelProperty(value = "最后一次治疗后 白介素6 ", required = true)
private String lastIl6;
/**
* 治疗前 肿瘤坏死因子αμg/L
@ -219,8 +299,30 @@ public class MedicalRecordAddForm {
@ApiModelProperty(value = "治疗后 肿瘤坏死因子α ", required = true)
private String afterTnf;
@ApiModelProperty(value = "实验室检测 图片 图片", required = true)
@NotNull(message = "实验室检测 图片 不能为空")
@Length(min = 1, max = 1000, message = "实验室检测 图片 不能为空")
/**
* 最后一次治疗后 肿瘤坏死因子αμg/L
*/
@ApiModelProperty(value = "最后一次治疗后 肿瘤坏死因子α ", required = true)
private String lastTnf;
@ApiModelProperty(value = "报告单 图片", required = true)
@NotNull(message = "报告单 图片 不能为空")
private String checkImg;
/*************************疾病转归***************************/
@ApiModelProperty(value = "疾病转归 出院时间", required = true)
@NotNull(message = "疾病转归 出院时间 不能为空")
private LocalDateTime dischargeTime;
@ApiModelProperty(value = "住院天数", required = true)
@NotNull(message = "住院天数 不能为空")
private Integer day;
@ApiModelPropertyEnum(DischargeStatusEnum.class)
@CheckEnum(value = DischargeStatusEnum.class, message = "出院状态 错误")
private Integer dischargeStatus;
@ApiModelProperty(value = "疾病转归 出院情况", required = true)
@NotNull(message = "疾病转归 出院情况 不能为空")
private String dischargeSituation;
}

View File

@ -18,7 +18,6 @@ import lombok.Data;
@Data
@TableName("t_caseplatform_case_checkdata")
@Builder
public class MedicalRecordCheckdataEntity {
/**
@ -38,10 +37,15 @@ public class MedicalRecordCheckdataEntity {
private LocalDateTime headTime;
/**
* 治疗后 检测时间
* 治疗后 检测时间
*/
private LocalDateTime afterTime;
/**
* 最后一次治疗后 检测时间
*/
private LocalDateTime lastTime;
/**
* 治疗前 总胆红素(umol/L)
*/
@ -52,6 +56,11 @@ public class MedicalRecordCheckdataEntity {
*/
private String afterTb;
/**
* 最后一次治疗后 总胆红素(umol/L)
*/
private String lastTb;
/**
* 治疗前 白蛋白(g/L)
*/
@ -62,6 +71,11 @@ public class MedicalRecordCheckdataEntity {
*/
private String afterAlb;
/**
* 最后一次治疗后 白蛋白(g/L)
*/
private String lastAlb;
/**
* 治疗前 直接胆红素(umol/L)
*/
@ -72,6 +86,11 @@ public class MedicalRecordCheckdataEntity {
*/
private String afterDb;
/**
* 最后一次治疗后 直接胆红素(umol/L)
*/
private String lastDb;
/**
* 治疗前 凝血酶原活动度 (%)
*/
@ -82,6 +101,11 @@ public class MedicalRecordCheckdataEntity {
*/
private String afterPta;
/**
* 最后一次治疗后 凝血酶原活动度 (%)
*/
private String lastPta;
/**
* 治疗前 间接胆红素(umol/L)
*/
@ -92,6 +116,11 @@ public class MedicalRecordCheckdataEntity {
*/
private String afterIb;
/**
* 最后一次治疗后 间接胆红素(umol/L)
*/
private String lastIb;
/**
* 治疗前 国际标准化比值 INR
*/
@ -102,6 +131,11 @@ public class MedicalRecordCheckdataEntity {
*/
private String afterInr;
/**
* 最后一次治疗后 国际标准化比值 INR
*/
private String lastInr;
/**
* 治疗前 谷丙转氨 (U/L)
*/
@ -112,6 +146,11 @@ public class MedicalRecordCheckdataEntity {
*/
private String afterAlt;
/**
* 最后一次治疗后 谷丙转氨 (U/L)
*/
private String lastAlt;
/**
* 治疗前 白介素6(ng/L)
*/
@ -122,6 +161,11 @@ public class MedicalRecordCheckdataEntity {
*/
private String afterIl6;
/**
* 最后一次治疗后 白介素6(ng/L)
*/
private String lastIl6;
/**
* 治疗前 谷草转氨酶 (U/L)
*/
@ -132,6 +176,11 @@ public class MedicalRecordCheckdataEntity {
*/
private String afterAst;
/**
* 最后一次治疗后 谷草转氨酶 (U/L)
*/
private String lastAst;
/**
* 治疗前 肿瘤坏死因子αμg/L
*/
@ -142,6 +191,11 @@ public class MedicalRecordCheckdataEntity {
*/
private String afterTnf;
/**
* 最后一次治疗后 肿瘤坏死因子αμg/L
*/
private String lastTnf;
/**
* 图片
*/

View File

@ -3,6 +3,7 @@ package net.lab1024.sa.admin.module.app.medicalrecord.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.lab1024.sa.admin.module.business.caseplatformcase.constant.CasetypeEnum;
import net.lab1024.sa.common.common.enumeration.DischargeStatusEnum;
import net.lab1024.sa.common.common.enumeration.GenderEnum;
import net.lab1024.sa.common.common.swagger.ApiModelPropertyEnum;
import net.lab1024.sa.common.common.validator.enumeration.CheckEnum;
@ -38,29 +39,25 @@ public class MedicalRecordDetailVO {
@NotNull(message = "入院时间 不能为空")
private LocalDateTime admissionTime;
@ApiModelPropertyEnum(value = CasetypeEnum.class, desc = "病历类型")
@CheckEnum(value = CasetypeEnum.class, message = "病历类型 错误", required = true)
@ApiModelPropertyEnum(value = CasetypeEnum.class, desc = "治疗类型")
@CheckEnum(value = CasetypeEnum.class, message = "治疗类型 错误", required = true)
private List<Integer> caseTypeList;
@ApiModelPropertyEnum(value = CasetypeEnum.class, desc = "病历类型")
@CheckEnum(value = CasetypeEnum.class, message = "病历类型 错误", required = true)
@ApiModelProperty(value = "治疗类型", required = true)
@NotNull(message = "治疗类型 不能为空")
private String caseType;
@ApiModelPropertyEnum(value = CasetypeEnum.class, desc = "主要诊断")
@CheckEnum(value = CasetypeEnum.class, message = "主要诊断 错误", required = true)
@ApiModelProperty(value = "主要诊断", required = true)
@NotNull(message = "主要诊断 不能为空")
private String mainDiagnose;
@ApiModelPropertyEnum(value = CasetypeEnum.class, desc = "患者病因")
@CheckEnum(value = CasetypeEnum.class, message = "患者病因 错误", required = true)
@ApiModelProperty(value = "患者病因", required = true)
@NotNull(message = "患者病因 不能为空")
private String diseaseCause;
@ApiModelPropertyEnum(value = CasetypeEnum.class, desc = "诱因")
@CheckEnum(value = CasetypeEnum.class, message = "诱因 错误", required = true)
private String trigger;
// @ApiModelProperty(value = "基本信息图片", required = true)
// @NotNull(message = "基本信息图片 不能为空")
// private String baseImg;
@ApiModelProperty(value = "诱因", required = true)
@NotNull(message = "诱因 不能为空")
private String seductionReason;
@ApiModelProperty(value = "病例状态", required = true)
private Integer status;
@ -70,14 +67,9 @@ public class MedicalRecordDetailVO {
@NotNull(message = "临床资料 病历摘要 文字 不能为空")
private String abstractStr;
// @ApiModelProperty(value = "临床资料 病历摘要 图片", required = true)
// @NotNull(message = "临床资料 病历摘要 图片 不能为空")
// private String abstractImg;
/*************************DPMAS***************************/
@ApiModelProperty(value = "临床资料 病历摘要 图片", required = true)
@NotNull(message = "临床资料 病历摘要 图片 不能为空")
@ApiModelProperty(value = "人工肝治疗", required = true)
@NotNull(message = "人工肝治疗 不能为空")
private List<DpmsAddForm> dpmas;
@ -313,7 +305,24 @@ public class MedicalRecordDetailVO {
@ApiModelProperty(value = "最后一次治疗后 肿瘤坏死因子α ", required = true)
private String lastTnf;
@ApiModelProperty(value = "实验室检测 病历摘要 图片", required = true)
@NotNull(message = "实验室检测 图片 不能为空")
@ApiModelProperty(value = "报告单 图片", required = true)
@NotNull(message = "报告单 图片 不能为空")
private String checkImg;
/*************************疾病转归***************************/
@ApiModelProperty(value = "疾病转归 出院时间", required = true)
@NotNull(message = "疾病转归 出院时间 不能为空")
private LocalDateTime dischargeTime;
@ApiModelProperty(value = "住院天数", required = true)
@NotNull(message = "住院天数 不能为空")
private Integer day;
@ApiModelPropertyEnum(DischargeStatusEnum.class)
@CheckEnum(value = DischargeStatusEnum.class, message = "出院状态 错误")
private Integer dischargeStatus;
@ApiModelProperty(value = "疾病转归 出院情况", required = true)
@NotNull(message = "疾病转归 出院情况 不能为空")
private String dischargeSituation;
}

View File

@ -39,4 +39,9 @@ public class MedicalRecordDpmsEntity {
*/
private String dpmasImg;
/**
* 内容json
*/
private String content;
}

View File

@ -4,8 +4,12 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* 病历表 实体类
*
@ -29,11 +33,6 @@ public class MedicalRecordEntity {
*/
private Long userId;
/**
* 图片
*/
private String baseImg;
/**
* 入院时间
*/
@ -42,7 +41,7 @@ public class MedicalRecordEntity {
/**
* 病历类型
*/
private Integer caseType;
private String caseType;
/**
* 统计
@ -76,28 +75,44 @@ public class MedicalRecordEntity {
private Integer status;
/**
* 主要诊断
*/
private String mainDiagnose;
/**
* 患者病因
*/
private String diseaseCause;
/**
* 诱因
*/
private String seductionReason;
/**
* 修改时间
*/
private LocalDateTime updateTime;
public MedicalRecordEntity(Long userId, String baseImg, LocalDateTime admissionTime, Integer caseType, Long expertId, LocalDateTime createTime) {
this.userId = userId;
this.admissionTime = admissionTime;
this.caseType = caseType;
this.baseImg = baseImg;
this.expertId = expertId;
this.createTime = createTime;
}
// public MedicalRecordEntity(Long userId, String baseImg, LocalDateTime admissionTime, Integer caseType, Long expertId, LocalDateTime createTime) {
// this.userId = userId;
// this.admissionTime = admissionTime;
// this.caseType = caseType;
// this.baseImg = baseImg;
// this.expertId = expertId;
// this.createTime = createTime;
// }
public MedicalRecordEntity(Long id, Long userId, String baseImg, LocalDateTime admissionTime, Integer caseType, Long expertId, Integer status, LocalDateTime updateTime) {
this.id = id;
this.userId = userId;
this.admissionTime = admissionTime;
this.caseType = caseType;
this.baseImg = baseImg;
this.expertId = expertId;
this.status = status;
this.updateTime = updateTime;
}
// public MedicalRecordEntity(Long id, Long userId, String baseImg, LocalDateTime admissionTime, Integer caseType, Long expertId, Integer status, LocalDateTime updateTime) {
// this.id = id;
// this.userId = userId;
// this.admissionTime = admissionTime;
// this.caseType = caseType;
// this.baseImg = baseImg;
// this.expertId = expertId;
// this.status = status;
// this.updateTime = updateTime;
// }
}

View File

@ -0,0 +1,68 @@
package net.lab1024.sa.admin.module.app.medicalrecord.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 病历摘要表 实体类
*
* @Author HMM
* @Date 2024-01-11 15:18:32
* @Copyright gdxz
*/
/**
* 病例-疾病转归实体类
*/
@Data
@TableName("`t_caseplatform_case_prognosis`") // 指定数据库表名
public class MedicalRecordPrognosisEntity {
/**
* 主键id
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 疾病id
*/
@TableField("case_id")
private Long caseId;
/**
* 出院时间
*/
@TableField("discharge_time")
private LocalDateTime dischargeTime;
/**
* 住院天数
*/
@TableField("day")
private Integer day;
/**
* 出院状态1:好转 2:痊愈 3:恶化 4:死亡 5:移植
*/
@TableField("discharge_status")
private Integer dischargeStatus;
/**
* 出院情况
*/
@TableField("discharge_situation")
private String dischargeSituation;
// public MedicalRecordAbstracEntity(Long caseId, String abstractStr, String abstractImg, LocalDateTime createTime) {
// this.caseId = caseId;
// this.abstractStr = abstractStr;
// this.abstractImg = abstractImg;
// this.createTime = createTime;
// }
}

View File

@ -39,8 +39,6 @@ public class MedicalRecordUserEntity {
*/
private String uid;
/**
* 性别
*/
@ -61,12 +59,12 @@ public class MedicalRecordUserEntity {
*/
private LocalDateTime updateTime;
public MedicalRecordUserEntity(Long expertId, String name, String uid, Integer sex, Integer age, LocalDateTime createTime) {
this.expertId = expertId;
this.name = name;
this.uid = uid;
this.sex = sex;
this.age = age;
this.createTime = createTime;
}
// public MedicalRecordUserEntity(Long expertId, String name, String uid, Integer sex, Integer age, LocalDateTime createTime) {
// this.expertId = expertId;
// this.name = name;
// this.uid = uid;
// this.sex = sex;
// this.age = age;
// this.createTime = createTime;
// }
}

View File

@ -3,14 +3,11 @@ package net.lab1024.sa.admin.module.app.medicalrecord.service;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.lab1024.sa.admin.module.app.expert.admin.ExpertSignVO;
import net.lab1024.sa.admin.module.app.expert.service.ExpertSignService;
import net.lab1024.sa.admin.module.app.medicalrecord.dao.MedicalRecorAbstracDao;
import net.lab1024.sa.admin.module.app.medicalrecord.dao.MedicalRecorCheckDataDao;
import net.lab1024.sa.admin.module.app.medicalrecord.dao.MedicalRecorDao;
import net.lab1024.sa.admin.module.app.medicalrecord.dao.MedicalRecorDpmasDao;
import net.lab1024.sa.admin.module.app.medicalrecord.dao.MedicalRecorUserDao;
import net.lab1024.sa.admin.module.app.medicalrecord.dao.*;
import net.lab1024.sa.admin.module.app.medicalrecord.domain.*;
import net.lab1024.sa.admin.module.business.caseplatformcase.constant.CaseStatusEnum;
import net.lab1024.sa.admin.module.business.caseplatformcase.constant.CasetypeEnum;
@ -25,10 +22,13 @@ import net.lab1024.sa.common.module.support.config.domain.ConfigVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import static net.lab1024.sa.common.common.code.UserErrorCode.NO_PERMISSION_EDIT;
import static net.lab1024.sa.common.common.code.UserErrorCode.PROJECT_CLOSE;
@ -51,6 +51,9 @@ public class MedicalRecordService {
@Autowired
private MedicalRecorCheckDataDao medicalRecorCheckDataDao;
@Autowired
private MedicalRecorPrognosisDao medicalRecorPrognosisDao;
@Autowired
private ConfigService configService;
@ -68,15 +71,16 @@ public class MedicalRecordService {
public MedicalRecordDetailVO getDetail(Long MedicalRecordId){
MedicalRecordDetailVO detail = medicalRecorDao.getDetail(MedicalRecordId);
List<DpmsAddForm> dpmas = medicalRecorDpmasDao.getByCaseId(MedicalRecordId);
detail.setDpmas(dpmas);
if (detail != null){
List<DpmsAddForm> dpmas = medicalRecorDpmasDao.getByCaseId(MedicalRecordId);
detail.setDpmas(dpmas);
}
return detail;
}
@Transactional
public ResponseDTO<String> add(MedicalRecordAddForm addForm){
ConfigVO caseNum = configService.getConfig(ConfigKeyEnum.CaseNum);
int total = medicalRecorDao.getTotal();
if(Integer.parseInt(caseNum.getConfigValue()) <= total){
@ -92,57 +96,29 @@ public class MedicalRecordService {
/*************************前置 检查*****************************/
ResponseDTO check = check(SmartBeanUtil.copy(addForm, MedicalRecordUpdateForm.class), expertId);
if(!check.getOk()){
return check;
}
//病历类型
Integer caseType = addForm.getCaseType();
List<DpmsAddForm> dpmas = addForm.getDpmas();
//入院时间
LocalDateTime admissionTime = addForm.getAdmissionTime();
// 病历-用户
MedicalRecordUserEntity medicalRecordUser = new MedicalRecordUserEntity();
medicalRecordUser.setName(addForm.getName());
medicalRecordUser.setUid(addForm.getUid());
medicalRecordUser.setSex(Integer.valueOf(addForm.getSex()));
medicalRecordUser.setAge(addForm.getAge());
medicalRecordUser.setExpertId(expertId);
medicalRecordUser.setCreateTime(LocalDateTime.now());
int res = medicalRecorUserDao.insert(medicalRecordUser);
if (res <= 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
//患者id
String uid = addForm.getUid();
//临床资料 病历摘要 文字
String abstractStr = addForm.getAbstractStr();
//临床资料 病历摘要 图片
String abstractImg = addForm.getAbstractImg();
//治疗前 检测时间
LocalDateTime headTime = addForm.getHeadTime();
/**
* 治疗后 检测时间
*/
LocalDateTime afterTime = addForm.getAfterTime();
/*************************基本信息*****************************/
//姓名
String name = addForm.getName();
//性别
Integer sex = addForm.getSex();
//年龄
Integer age = addForm.getAge();
//基本信息图片
String baseImg = addForm.getBaseImg();
MedicalRecordUserEntity user = new MedicalRecordUserEntity(expertId, name, uid, sex, age, LocalDateTime.now());
medicalRecorUserDao.insert(user);
Long userId = user.getId();
/*************************病例主体***************************/
MedicalRecordEntity medicalRecord = new MedicalRecordEntity(userId, baseImg, admissionTime, caseType, expertId, LocalDateTime.now());
// 病例
MedicalRecordEntity medicalRecord = new MedicalRecordEntity();
medicalRecord.setUserId(medicalRecordUser.getId());
medicalRecord.setAdmissionTime(addForm.getAdmissionTime());
medicalRecord.setCaseType(addForm.getCaseType());
DateTime nowDate = DateUtil.date();
String statistics_date = DateUtil.format(nowDate, "yyyyMMdd");
@ -151,165 +127,103 @@ public class MedicalRecordService {
int quarter = DateUtil.quarter(nowDate);
String statistics_quarter = statistics_year + quarter;
medicalRecord.setStatisticsDay(Integer.parseInt(statistics_date));
medicalRecord.setStatisticsMonth(Integer.parseInt(statistics_month));
medicalRecord.setStatisticsQuarter(Integer.parseInt(statistics_quarter));
medicalRecord.setStatisticsYear(Integer.parseInt(statistics_year));
medicalRecorDao.insert(medicalRecord);
Long medicalRecordId = medicalRecord.getId();
medicalRecord.setStatisticsDay(Integer.valueOf(statistics_date));
medicalRecord.setStatisticsMonth(Integer.valueOf(statistics_month));
medicalRecord.setStatisticsQuarter(Integer.valueOf(statistics_quarter));
medicalRecord.setStatisticsYear(Integer.valueOf(statistics_year));
medicalRecord.setExpertId(expertId);
medicalRecord.setCreateTime(LocalDateTime.now());
medicalRecord.setStatus(0);
medicalRecord.setMainDiagnose(addForm.getMainDiagnose());
medicalRecord.setDiseaseCause(addForm.getDiseaseCause());
medicalRecord.setSeductionReason(addForm.getSeductionReason());
res = medicalRecorDao.insert(medicalRecord);
if (res <= 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
/*************************临床资料 病历摘要***************************/
// 病例-病历摘要
MedicalRecordAbstracEntity abstracEntity = new MedicalRecordAbstracEntity();
abstracEntity.setCaseId(medicalRecord.getId());
abstracEntity.setAbstractStr(addForm.getAbstractStr());
abstracEntity.setCreateTime(LocalDateTime.now());
res = medicalRecorAbstracDao.insert(abstracEntity);
if (res <= 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
MedicalRecordAbstracEntity abstracEntity = new MedicalRecordAbstracEntity(medicalRecordId, abstractStr, abstractImg, LocalDateTime.now());
medicalRecorAbstracDao.insert(abstracEntity);
/*************************DPMAS***************************/
//DPMAS
for(DpmsAddForm item:dpmas){
// 人工肝治疗
for(DpmsAddForm item: addForm.getDpmas()){
MedicalRecordDpmsEntity dp = new MedicalRecordDpmsEntity();
dp.setDpmasImg(item.getDpmasImg());
dp.setCaseId(medicalRecordId);
dp.setCaseId(medicalRecord.getId());
dp.setTreatTime(item.getTreatTime());
medicalRecorDpmasDao.insert(dp);
res = medicalRecorDpmasDao.insert(dp);
if (res <= 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
}
/*************************实验室数据***************************/
/**
* 治疗前 总胆红素(umol/L)
*/
String headTb = addForm.getHeadTb();
// 实验室检测
MedicalRecordCheckdataEntity medicalRecordCheckdata = new MedicalRecordCheckdataEntity();
medicalRecordCheckdata.setCaseId(medicalRecord.getId());
medicalRecordCheckdata.setHeadTime(addForm.getHeadTime());
medicalRecordCheckdata.setAfterTime(addForm.getAfterTime());
medicalRecordCheckdata.setLastTime(addForm.getLastTime());
medicalRecordCheckdata.setHeadTb(addForm.getHeadTb());
medicalRecordCheckdata.setAfterTb(addForm.getAfterTb());
medicalRecordCheckdata.setLastTb(addForm.getLastTb());
medicalRecordCheckdata.setHeadAlb(addForm.getHeadAlb());
medicalRecordCheckdata.setAfterAlb(addForm.getAfterAlb());
medicalRecordCheckdata.setLastAlb(addForm.getLastAlb());
medicalRecordCheckdata.setHeadDb(addForm.getHeadDb());
medicalRecordCheckdata.setAfterDb(addForm.getAfterDb());
medicalRecordCheckdata.setLastDb(addForm.getLastDb());
medicalRecordCheckdata.setHeadPta(addForm.getHeadPta());
medicalRecordCheckdata.setAfterPta(addForm.getAfterPta());
medicalRecordCheckdata.setLastPta(addForm.getLastPta());
medicalRecordCheckdata.setHeadIb(addForm.getHeadIb());
medicalRecordCheckdata.setAfterIb(addForm.getAfterIb());
medicalRecordCheckdata.setLastIb(addForm.getLastIb());
medicalRecordCheckdata.setHeadInr(addForm.getHeadInr());
medicalRecordCheckdata.setAfterInr(addForm.getAfterInr());
medicalRecordCheckdata.setLastInr(addForm.getLastInr());
medicalRecordCheckdata.setHeadAlt(addForm.getHeadAlt());
medicalRecordCheckdata.setAfterAlt(addForm.getAfterAlt());
medicalRecordCheckdata.setLastAlt(addForm.getLastAlt());
medicalRecordCheckdata.setHeadIl6(addForm.getHeadIl6());
medicalRecordCheckdata.setAfterIl6(addForm.getAfterIl6());
medicalRecordCheckdata.setLastIl6(addForm.getLastIl6());
medicalRecordCheckdata.setHeadAst(addForm.getHeadAst());
medicalRecordCheckdata.setAfterAst(addForm.getAfterAst());
medicalRecordCheckdata.setLastAst(addForm.getLastAst());
medicalRecordCheckdata.setHeadTnf(addForm.getHeadTnf());
medicalRecordCheckdata.setAfterTnf(addForm.getAfterTnf());
medicalRecordCheckdata.setLastTnf(addForm.getLastTnf());
medicalRecordCheckdata.setCheckImg(addForm.getCheckImg());
medicalRecordCheckdata.setCreateTime(LocalDateTime.now());
res = medicalRecorCheckDataDao.insert(medicalRecordCheckdata);
if (res <= 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
/**
* 治疗后 总胆红素(umol/L)
*/
String afterTb = addForm.getAfterTb();
// 疾病转归
MedicalRecordPrognosisEntity medicalRecordPrognosis = new MedicalRecordPrognosisEntity();
medicalRecordPrognosis.setCaseId(medicalRecord.getId());
medicalRecordPrognosis.setDischargeTime(addForm.getDischargeTime());
medicalRecordPrognosis.setDay(addForm.getDay());
medicalRecordPrognosis.setDischargeStatus(addForm.getDischargeStatus());
medicalRecordPrognosis.setDischargeSituation(addForm.getDischargeSituation());
res = medicalRecorPrognosisDao.insert(medicalRecordPrognosis);
if (res <= 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
/**
* 治疗前 白蛋白(g/L)
*/
String headAlb = addForm.getHeadAlb();
/**
* 治疗后 白蛋白(g/L)
*/
String afterAlb = addForm.getAfterAlb();
/**
* 治疗前 直接胆红素(umol/L)
*/
String headDb = addForm.getHeadDb();
/**
* 治疗后 直接胆红素(umol/L)
*/
String afterDb = addForm.getAfterDb();
/**
* 治疗前 凝血酶原活动度 (%)
*/
String headPta = addForm.getHeadPta();
/**
* 治疗后 凝血酶原活动度 (%)
*/
String afterPta = addForm.getAfterPta();
/**
* 治疗前 间接胆红素(umol/L)
*/
String headIb = addForm.getHeadIb();
/**
* 治疗后 间接胆红素(umol/L)
*/
String afterIb = addForm.getAfterIb();
/**
* 治疗前 国际标准化比值 INR
*/
String headInr = addForm.getHeadInr();
/**
* 治疗后 国际标准化比值 INR
*/
String afterInr = addForm.getAfterInr();
/**
* 治疗前 谷丙转氨 (U/L)
*/
String headAlt = addForm.getHeadAlt();
/**
* 治疗后 谷丙转氨 (U/L)
*/
String afterAlt = addForm.getAfterAlt();
/**
* 治疗前 白介素6(ng/L)
*/
String headIl6 = addForm.getHeadIl6();
/**
* 治疗后 白介素6(ng/L)
*/
String afterIl6 = addForm.getAfterIl6();
/**
* 治疗前 谷草转氨酶 (U/L)
*/
String headAst = addForm.getHeadAst();
/**
* 治疗后 谷草转氨酶 (U/L)
*/
String afterAst = addForm.getAfterAst();
/**
* 治疗前 肿瘤坏死因子αμg/L
*/
String headTnf = addForm.getHeadTnf();
/**
* 治疗后 肿瘤坏死因子αμg/L
*/
String afterTnf = addForm.getAfterTnf();
//实验室检测 病历摘要 图片
String checkImg = addForm.getCheckImg();
MedicalRecordCheckdataEntity CheckdataEntity = MedicalRecordCheckdataEntity.builder()
.afterAlb(afterAlb)
.afterAlt(afterAlt)
.afterAst(afterAst)
.afterDb(afterDb)
.afterIb(afterIb)
.afterIl6(afterIl6)
.afterInr(afterInr)
.afterPta(afterPta)
.afterTb(afterTb)
.afterTime(afterTime)
.afterTnf(afterTnf)
.headAst(headAst)
.headDb(headDb)
.headIb(headIb)
.headIl6(headIl6)
.headAlb(headAlb)
.headAlt(headAlt)
.headInr(headInr)
.headPta(headPta)
.headTb(headTb)
.headTime(headTime)
.headTnf(headTnf)
.headAlt(headAlt)
.headAlt(headAlt)
.checkImg(checkImg)
.createTime(LocalDateTime.now())
.caseId(medicalRecordId)
.build();
medicalRecorCheckDataDao.insert(CheckdataEntity);
return ResponseDTO.app_ok();
}
@ -317,356 +231,259 @@ public class MedicalRecordService {
public ResponseDTO<String> update(MedicalRecordUpdateForm updateForm){
Long expertId = SmartRequestUtil.getRequestUserId();
Long medicalRecordId = updateForm.getId();
MedicalRecordListVO recorDaoById = medicalRecorDao.getById(medicalRecordId);
if(recorDaoById == null){
return ResponseDTO.userErrorParam();
// 病例
LambdaQueryWrapper<MedicalRecordEntity> medicalRecordQueryWrapper = new LambdaQueryWrapper<>();
medicalRecordQueryWrapper.eq(MedicalRecordEntity::getId, medicalRecordId);
MedicalRecordEntity medicalRecord = medicalRecorDao.selectOne(medicalRecordQueryWrapper);
if (medicalRecord == null) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
/*************************前置 检查*****************************/
Integer status = recorDaoById.getStatus();
if(!status.equals(CaseStatusEnum.REFUSE.getValue())){
if (medicalRecord.getStatus() != 0){
return ResponseDTO.error(NO_PERMISSION_EDIT);
}
ResponseDTO check = check(updateForm, expertId);
/*************************前置 检查*****************************/
ResponseDTO check = check(updateForm, expertId);
if(!check.getOk()){
return check;
}
//病历类型
Integer caseType = updateForm.getCaseType();
List<DpmsAddForm> dpmas = updateForm.getDpmas();
//入院时间
LocalDateTime admissionTime = updateForm.getAdmissionTime();
//临床资料 病历摘要 文字
String abstractStr = updateForm.getAbstractStr();
//临床资料 病历摘要 图片
String abstractImg = updateForm.getAbstractImg();
//治疗前 检测时间
LocalDateTime headTime = updateForm.getHeadTime();
/**
* 治疗后 检测时间
*/
LocalDateTime afterTime = updateForm.getAfterTime();
/*************************基本信息*****************************/
//姓名
String name = updateForm.getName();
//性别
Integer sex = updateForm.getSex();
//年龄
Integer age = updateForm.getAge();
//基本信息图片
String baseImg = updateForm.getBaseImg();
//患者id
String uid = updateForm.getUid();
Long userId = recorDaoById.getUserId();
MedicalRecordUserEntity user = new MedicalRecordUserEntity(expertId, name, uid, sex, age, LocalDateTime.now());
user.setId(userId);
medicalRecorUserDao.updateById(user);
/*************************病例主体***************************/
MedicalRecordEntity medicalRecord = new MedicalRecordEntity(medicalRecordId, userId, baseImg, admissionTime, caseType, expertId, CaseStatusEnum.WAIT.getValue(), LocalDateTime.now());
medicalRecord.setAdmissionTime(updateForm.getAdmissionTime());
medicalRecord.setCaseType(updateForm.getCaseType());
medicalRecord.setMainDiagnose(updateForm.getMainDiagnose());
medicalRecord.setDiseaseCause(updateForm.getDiseaseCause());
medicalRecord.setSeductionReason(updateForm.getSeductionReason());
medicalRecorDao.updateById(medicalRecord);
/*************************临床资料 病历摘要***************************/
medicalRecorAbstracDao.deleteByCaseId(medicalRecordId);
MedicalRecordAbstracEntity abstracEntity = new MedicalRecordAbstracEntity(medicalRecordId, abstractStr, abstractImg, LocalDateTime.now());
medicalRecorAbstracDao.insert(abstracEntity);
/*************************DPMAS***************************/
//DPMAS
// 病历-用户
LambdaQueryWrapper<MedicalRecordUserEntity> medicalRecordUserQueryWrapper = new LambdaQueryWrapper<>();
medicalRecordUserQueryWrapper.eq(MedicalRecordUserEntity::getId, medicalRecord.getUserId());
MedicalRecordUserEntity medicalRecordUser = medicalRecorUserDao.selectOne(medicalRecordUserQueryWrapper);
if (medicalRecordUser == null) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
medicalRecordUser.setName(updateForm.getName());
medicalRecordUser.setUid(updateForm.getUid());
medicalRecordUser.setSex(Integer.valueOf(updateForm.getSex()));
medicalRecordUser.setAge(updateForm.getAge());
medicalRecorUserDao.updateById(medicalRecordUser);
// 病例-病历摘要
LambdaQueryWrapper<MedicalRecordAbstracEntity> medicalRecordAbstracQueryWrapper = new LambdaQueryWrapper<>();
medicalRecordAbstracQueryWrapper.eq(MedicalRecordAbstracEntity::getCaseId, medicalRecord.getId());
MedicalRecordAbstracEntity medicalRecorAbstrac = medicalRecorAbstracDao.selectOne(medicalRecordAbstracQueryWrapper);
if (medicalRecorAbstrac == null) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
if (!Objects.equals(updateForm.getAbstractStr(), medicalRecorAbstrac.getAbstractStr())){
medicalRecorAbstrac.setAbstractStr(updateForm.getAbstractStr());
medicalRecorAbstracDao.updateById(medicalRecorAbstrac);
}
// 人工肝治疗
medicalRecorDpmasDao.deleteByCaseId(medicalRecordId);
for(DpmsAddForm item:dpmas){
for(DpmsAddForm item: updateForm.getDpmas()){
MedicalRecordDpmsEntity dp = new MedicalRecordDpmsEntity();
dp.setDpmasImg(item.getDpmasImg());
dp.setCaseId(medicalRecordId);
dp.setCaseId(medicalRecord.getId());
dp.setTreatTime(item.getTreatTime());
medicalRecorDpmasDao.insert(dp);
int res = medicalRecorDpmasDao.insert(dp);
if (res <= 0){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
}
/*************************实验室数据***************************/
/**
* 治疗前 总胆红素(umol/L)
*/
String headTb = updateForm.getHeadTb();
// 实验室检测
LambdaQueryWrapper<MedicalRecordCheckdataEntity> medicalRecordCheckDataQueryWrapper = new LambdaQueryWrapper<>();
medicalRecordCheckDataQueryWrapper.eq(MedicalRecordCheckdataEntity::getCaseId, medicalRecord.getId());
MedicalRecordCheckdataEntity medicalRecordCheckData = medicalRecorCheckDataDao.selectOne(medicalRecordCheckDataQueryWrapper);
if (medicalRecordCheckData == null) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
/**
* 治疗后 总胆红素(umol/L)
*/
String afterTb = updateForm.getAfterTb();
medicalRecordCheckData.setHeadTime(updateForm.getHeadTime());
medicalRecordCheckData.setAfterTime(updateForm.getAfterTime());
medicalRecordCheckData.setLastTime(updateForm.getLastTime());
medicalRecordCheckData.setHeadTb(updateForm.getHeadTb());
medicalRecordCheckData.setAfterTb(updateForm.getAfterTb());
medicalRecordCheckData.setLastTb(updateForm.getLastTb());
medicalRecordCheckData.setHeadAlb(updateForm.getHeadAlb());
medicalRecordCheckData.setAfterAlb(updateForm.getAfterAlb());
medicalRecordCheckData.setLastAlb(updateForm.getLastAlb());
medicalRecordCheckData.setHeadDb(updateForm.getHeadDb());
medicalRecordCheckData.setAfterDb(updateForm.getAfterDb());
medicalRecordCheckData.setLastDb(updateForm.getLastDb());
medicalRecordCheckData.setHeadPta(updateForm.getHeadPta());
medicalRecordCheckData.setAfterPta(updateForm.getAfterPta());
medicalRecordCheckData.setLastPta(updateForm.getLastPta());
medicalRecordCheckData.setHeadIb(updateForm.getHeadIb());
medicalRecordCheckData.setAfterIb(updateForm.getAfterIb());
medicalRecordCheckData.setLastIb(updateForm.getLastIb());
medicalRecordCheckData.setHeadInr(updateForm.getHeadInr());
medicalRecordCheckData.setAfterInr(updateForm.getAfterInr());
medicalRecordCheckData.setLastInr(updateForm.getLastInr());
medicalRecordCheckData.setHeadAlt(updateForm.getHeadAlt());
medicalRecordCheckData.setAfterAlt(updateForm.getAfterAlt());
medicalRecordCheckData.setLastAlt(updateForm.getLastAlt());
medicalRecordCheckData.setHeadIl6(updateForm.getHeadIl6());
medicalRecordCheckData.setAfterIl6(updateForm.getAfterIl6());
medicalRecordCheckData.setLastIl6(updateForm.getLastIl6());
medicalRecordCheckData.setHeadAst(updateForm.getHeadAst());
medicalRecordCheckData.setAfterAst(updateForm.getAfterAst());
medicalRecordCheckData.setLastAst(updateForm.getLastAst());
medicalRecordCheckData.setHeadTnf(updateForm.getHeadTnf());
medicalRecordCheckData.setAfterTnf(updateForm.getAfterTnf());
medicalRecordCheckData.setLastTnf(updateForm.getLastTnf());
medicalRecordCheckData.setCheckImg(updateForm.getCheckImg());
medicalRecorCheckDataDao.updateById(medicalRecordCheckData);
/**
* 治疗前 白蛋白(g/L)
*/
String headAlb = updateForm.getHeadAlb();
// 疾病转归
LambdaQueryWrapper<MedicalRecordPrognosisEntity> medicalRecordPrognosisQueryWrapper = new LambdaQueryWrapper<>();
medicalRecordPrognosisQueryWrapper.eq(MedicalRecordPrognosisEntity::getCaseId, medicalRecord.getId());
MedicalRecordPrognosisEntity medicalRecordPrognosis = medicalRecorPrognosisDao.selectOne(medicalRecordPrognosisQueryWrapper);
if (medicalRecordPrognosis == null) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseDTO.userErrorParam("操作失败");
}
/**
* 治疗后 白蛋白(g/L)
*/
String afterAlb = updateForm.getAfterAlb();
medicalRecordPrognosis.setDischargeTime(updateForm.getDischargeTime());
medicalRecordPrognosis.setDay(updateForm.getDay());
medicalRecordPrognosis.setDischargeStatus(updateForm.getDischargeStatus());
medicalRecordPrognosis.setDischargeSituation(updateForm.getDischargeSituation());
medicalRecorPrognosisDao.updateById(medicalRecordPrognosis);
/**
* 治疗前 直接胆红素(umol/L)
*/
String headDb = updateForm.getHeadDb();
/**
* 治疗后 直接胆红素(umol/L)
*/
String afterDb = updateForm.getAfterDb();
/**
* 治疗前 凝血酶原活动度 (%)
*/
String headPta = updateForm.getHeadPta();
/**
* 治疗后 凝血酶原活动度 (%)
*/
String afterPta = updateForm.getAfterPta();
/**
* 治疗前 间接胆红素(umol/L)
*/
String headIb = updateForm.getHeadIb();
/**
* 治疗后 间接胆红素(umol/L)
*/
String afterIb = updateForm.getAfterIb();
/**
* 治疗前 国际标准化比值 INR
*/
String headInr = updateForm.getHeadInr();
/**
* 治疗后 国际标准化比值 INR
*/
String afterInr = updateForm.getAfterInr();
/**
* 治疗前 谷丙转氨 (U/L)
*/
String headAlt = updateForm.getHeadAlt();
/**
* 治疗后 谷丙转氨 (U/L)
*/
String afterAlt = updateForm.getAfterAlt();
/**
* 治疗前 白介素6(ng/L)
*/
String headIl6 = updateForm.getHeadIl6();
/**
* 治疗后 白介素6(ng/L)
*/
String afterIl6 = updateForm.getAfterIl6();
/**
* 治疗前 谷草转氨酶 (U/L)
*/
String headAst = updateForm.getHeadAst();
/**
* 治疗后 谷草转氨酶 (U/L)
*/
String afterAst = updateForm.getAfterAst();
/**
* 治疗前 肿瘤坏死因子αμg/L
*/
String headTnf = updateForm.getHeadTnf();
/**
* 治疗后 肿瘤坏死因子αμg/L
*/
String afterTnf = updateForm.getAfterTnf();
//实验室检测 病历摘要 图片
String checkImg = updateForm.getCheckImg();
MedicalRecordCheckdataEntity CheckdataEntity = MedicalRecordCheckdataEntity.builder()
.afterAlb(afterAlb)
.afterAlt(afterAlt)
.afterAst(afterAst)
.afterDb(afterDb)
.afterIb(afterIb)
.afterIl6(afterIl6)
.afterInr(afterInr)
.afterPta(afterPta)
.afterTb(afterTb)
.afterTime(afterTime)
.afterTnf(afterTnf)
.headAst(headAst)
.headDb(headDb)
.headIb(headIb)
.headIl6(headIl6)
.headAlb(headAlb)
.headAlt(headAlt)
.headInr(headInr)
.headPta(headPta)
.headTb(headTb)
.headTime(headTime)
.headTnf(headTnf)
.headAlt(headAlt)
.headAlt(headAlt)
.checkImg(checkImg)
.createTime(LocalDateTime.now())
.caseId(medicalRecordId)
.build();
medicalRecorCheckDataDao.deleteByCaseId(medicalRecordId);
medicalRecorCheckDataDao.insert(CheckdataEntity);
return ResponseDTO.app_ok();
}
// 检测参数
public ResponseDTO check(MedicalRecordUpdateForm form, Long expertId){
ConfigVO caseSwitch = configService.getConfig(ConfigKeyEnum.CaseSwitch);
if(caseSwitch.getConfigValue().equals("false")){
return ResponseDTO.error(PROJECT_CLOSE);
}
/*************************前置 检查*****************************/
// 检测基本信息
ResponseDTO check = checkCase(form, expertId);
if(!check.getOk()){
return check;
}
// 检测人工肝治疗
check = checkDpms(form, expertId);
if(!check.getOk()){
return check;
}
// 检测实验室检测
check = checkData(form, expertId);
if(!check.getOk()){
return check;
}
// 检测疾病转归
check = checkPrognosis(form, expertId);
if(!check.getOk()){
return check;
}
return ResponseDTO.app_ok();
}
// 检测基本信息
public ResponseDTO checkCase(MedicalRecordUpdateForm form, Long expertId){
//入院时间
LocalDateTime admissionTime = form.getAdmissionTime();
//患者id
String uid = form.getUid();
//获取全部病例
List<MedicalRecordDTO> admissionTimeByUid = medicalRecorDao.getAdmissionTimeByUid(expertId, uid);
for(MedicalRecordDTO dto:admissionTimeByUid){
if(dto.getId().equals(form.getId())){
continue;
}
long daysDiff = Duration.between(dto.getAdmissionTime(), admissionTime).toDays();
if(Math.abs(daysDiff) < 30){
return ResponseDTO.userErrorParam("同一患者记录入院时间必须间隔30天以上");
// 获取该患者的全部病例
LambdaQueryWrapper<MedicalRecordEntity> medicalRecordQueryWrapper = new LambdaQueryWrapper<>();
medicalRecordQueryWrapper.eq(MedicalRecordEntity::getUserId, uid);
List<MedicalRecordEntity> medicalRecords = medicalRecorDao.selectList(medicalRecordQueryWrapper);
for (MedicalRecordEntity medicalRecord: medicalRecords) {
// 判断是否是今天
// 同一个患者ID可以提交多份病例(入院时间不同)所有病例对比
boolean isSameDate = medicalRecord.getAdmissionTime().toLocalDate().isEqual(admissionTime.toLocalDate());
if (isSameDate){
return ResponseDTO.userErrorParam("患者入院时间和其他病例出现重复");
}
}
String baseImg = form.getBaseImg();
String[] baseImgNum = baseImg.split(",");
if(baseImgNum.length > 6){
return ResponseDTO.userErrorParam("病案照片应为(1-6张)");
medicalRecordQueryWrapper = new LambdaQueryWrapper<>();
medicalRecordQueryWrapper.eq(MedicalRecordEntity::getExpertId, expertId);
medicalRecords = medicalRecorDao.selectList(medicalRecordQueryWrapper);
if (medicalRecords.size() >= 20){
return ResponseDTO.userErrorParam("每人参与病例征集不得超过20例");
}
//临床资料 病历摘要 文字
String abstractStr = form.getAbstractStr();
return ResponseDTO.app_ok();
}
//临床资料 病历摘要 图片
String abstractImg = form.getAbstractImg();
if(StrUtil.isBlank(abstractStr+abstractImg)){
return ResponseDTO.userErrorParam("临床资料 病历摘要或者病历图片至少上传一项");
}
String[] abstractImgNum = abstractImg.split(",");
if(abstractImgNum.length > 6){
return ResponseDTO.userErrorParam("病历摘要图片照片应为(1-6张)");
}
//病历类型
Integer caseType = form.getCaseType();
// 检测人工肝治疗
public ResponseDTO checkDpms(MedicalRecordUpdateForm form, Long expertId){
List<DpmsAddForm> dpmas = form.getDpmas();
int size = dpmas.size();
if(caseType == CasetypeEnum.BEFORE.getValue()){
if(size == 0){
return ResponseDTO.userErrorParam("至少上传1次DPMAS数据");
}
}
if(caseType == CasetypeEnum.DEFAULT.getValue()){
if(size < 4){
return ResponseDTO.userErrorParam("至少上传4次DPMAS数据");
}
}
LocalDateTime firstTreatTime = dpmas.get(0).getTreatTime();//第一次治疗时间
//治疗时间 2024
int headYear = firstTreatTime.getYear();
if(headYear != 2024){
return ResponseDTO.userErrorParam("治疗时间限制在2024年1月1日-2024年12月31日!");
// 治疗时间
LocalDateTime target = LocalDateTime.of(2024, 10, 1, 0, 0);
boolean isAfter = dpmas.get(0).getTreatTime().isAfter(target);
if (!isAfter){
return ResponseDTO.userErrorParam("第一次治疗时间需在2024年10月1日之后");
}
LocalDateTime lastTreatTime = dpmas.get(size-1).getTreatTime();//最后一次治疗时间
if(firstTreatTime.toLocalDate().compareTo(admissionTime.toLocalDate()) < 0){
return ResponseDTO.userErrorParam("第1次治疗时间比患者基本信息入院时间后");
isAfter = dpmas.get(0).getTreatTime().isAfter(form.getAdmissionTime());
if (!isAfter){
return ResponseDTO.userErrorParam("第1次治疗时间需在入院时间后");
}
LocalDateTime temp = firstTreatTime;
for(int i=0;i<dpmas.size();i++){
LocalDateTime treatTime = dpmas.get(i).getTreatTime();
if(i > 0){
if(!treatTime.isAfter(temp)){
return ResponseDTO.userErrorParam(""+(i+1)+"次治疗时间必须在第"+i+"次治疗时间后!");
}
for (int i = 1; i < dpmas.size(); i++) {
LocalDateTime previous = dpmas.get(i - 1).getTreatTime();
LocalDateTime current = dpmas.get(i).getTreatTime();
if (current.isBefore(previous) || current.isEqual(previous)) {
throw new IllegalArgumentException("" + (i + 1) + " 次治疗时间必须晚于第 " + i + "");
}
String dpmasImg = dpmas.get(i).getDpmasImg();
String dpmasImg = dpmas.get(i - 1).getDpmasImg();
String[] dpmasImgNum = dpmasImg.split(",");
if(dpmasImgNum.length > 3){
return ResponseDTO.userErrorParam(""+(i+1)+"次治疗照片应为(1-3张)");
}
temp = treatTime;
}
int lastYear = lastTreatTime.getYear();
if(lastYear != 2024){
return ResponseDTO.userErrorParam("治疗时间限制在2024年1月1日-2024年12月31日!");
}
//治疗前 检测时间
LocalDateTime headTime = form.getHeadTime();
/**
* 治疗后 检测时间
*/
LocalDateTime afterTime = form.getAfterTime();
if(!afterTime.isAfter(headTime)){
return ResponseDTO.userErrorParam("治疗前检测时间:应该小于治疗后检测时间!");
}
if(caseType == CasetypeEnum.BEFORE.getValue()){
if((headTime.toLocalDate().compareTo(admissionTime.toLocalDate())) < 0 || (headTime.toLocalDate().compareTo(firstTreatTime.toLocalDate())) > 0){
return ResponseDTO.userErrorParam("治疗前检测时间应该在入院时间与第1次治疗时间之间");
}
if(size == 1){
if(afterTime.toLocalDate().compareTo(firstTreatTime.toLocalDate()) < 0){
return ResponseDTO.userErrorParam("治疗后检测时间应该在第1次治疗时间之后");
}
}
//治疗后检测时间应该在第一次治疗时间之后如果有第二次治疗时间在应该在第一次与第二次治疗时间之间
if(size >= 2){
LocalDateTime secondTreatTime = dpmas.get(1).getTreatTime();//第2次治疗时间
if((afterTime.toLocalDate().compareTo(firstTreatTime.toLocalDate())) < 0 || (afterTime.compareTo(secondTreatTime)) > 0){
return ResponseDTO.userErrorParam("治疗后检测时间应该在第1次与第2次治疗时间之间");
}
return ResponseDTO.userErrorParam(""+(i)+"次治疗照片应为(1-3张)");
}
}
if(caseType == CasetypeEnum.DEFAULT.getValue()){
if((headTime.toLocalDate().compareTo(admissionTime.toLocalDate())) < 0 || (headTime.toLocalDate().compareTo(firstTreatTime.toLocalDate())) > 0){
return ResponseDTO.userErrorParam("治疗前检测时间应该在入院时间与第1次治疗时间之间");
}
if(afterTime.toLocalDate().compareTo(lastTreatTime.toLocalDate()) < 0){
return ResponseDTO.userErrorParam("治疗后检测时间应该在最后1次治疗时间之后");
return ResponseDTO.app_ok();
}
// 实验室检测
public ResponseDTO checkData(MedicalRecordUpdateForm form, Long expertId){
if (form.getHeadTime() == null) {
return ResponseDTO.userErrorParam("首次人工肝治疗前检测时间不能为空");
}
if (form.getAfterTime() == null) {
return ResponseDTO.userErrorParam("首次人工肝治疗后检测时间不能为空");
}
if (!form.getHeadTime().isBefore(form.getAfterTime())) {
return ResponseDTO.userErrorParam("首次人工肝治疗前检测时间需早于首次人工肝治疗后检测时间");
}
if (form.getLastTime() != null && !form.getAfterTime().isBefore(form.getLastTime())) {
return ResponseDTO.userErrorParam("最后一次人工肝治疗后检测时间需早于首次人工肝治疗后检测时间");
}
if (form.getDpmas().size() > 1){
if (form.getLastTime() == null){
return ResponseDTO.userErrorParam("人工肝治疗次数大于1需填入最后一次人工肝治疗后检测时间");
}
}
@ -675,6 +492,38 @@ public class MedicalRecordService {
if(checkImgNum.length > 6){
return ResponseDTO.userErrorParam("实验室检测照片应为(1-6张)!");
}
return ResponseDTO.app_ok();
}
// 疾病转归
public ResponseDTO checkPrognosis(MedicalRecordUpdateForm form, Long expertId){
LocalDateTime admissionTime = form.getAdmissionTime();
LocalDateTime dischargeTime = form.getDischargeTime();
List<DpmsAddForm> dpmas = form.getDpmas();
if (admissionTime == null || dischargeTime == null) {
throw new IllegalArgumentException("入院时间和出院时间不能为空");
}
// 出院时间大于住院时间
boolean isAfter = dischargeTime.isAfter(admissionTime);
if (!isAfter){
return ResponseDTO.userErrorParam("疾病转归:出院时间需大于住院时间");
}
for (int i = 0; i < dpmas.size(); i++) {
LocalDateTime treatTime = dpmas.get(i).getTreatTime();
if (treatTime == null) {
return ResponseDTO.userErrorParam("人工肝治疗:" + "" + (i + 1) + " 次治疗时间不能为空");
}
if (treatTime.isBefore(admissionTime) || treatTime.isAfter(dischargeTime)) {
return ResponseDTO.userErrorParam("人工肝治疗:" + "" + (i + 1) + " 次治疗时间不在入院和出院时间之间");
}
}
return ResponseDTO.app_ok();
}
}

View File

@ -5,7 +5,7 @@ import lombok.Getter;
import net.lab1024.sa.common.common.enumeration.BaseEnum;
/**
* 病历类型
* 治疗类型
*
* @Author HMM
* @Date 2024-01-11T15:18:32
@ -15,8 +15,8 @@ import net.lab1024.sa.common.common.enumeration.BaseEnum;
@AllArgsConstructor
@Getter
public enum CasetypeEnum implements BaseEnum {
DEFAULT(1, "四次及以上疗程化"),
BEFORE(2, "早前期INR≤1.5"),
DEFAULT(1, "DPMAS及联合模式"),
BEFORE(2, "CA280及联合模式"),
;
private final Integer value;

View File

@ -33,12 +33,13 @@
t_caseplatform_case.*,
t_caseplatform_user.*,
t_caseplatform_case_abstract.*,
t_caseplatform_case_checkdata.*
t_caseplatform_case_checkdata.*,
t_caseplatform_case_prognosis.*
FROM t_caseplatform_case
left join t_caseplatform_user on t_caseplatform_case.user_id = t_caseplatform_user.id
left join t_caseplatform_case_abstract on t_caseplatform_case_abstract.case_id = t_caseplatform_case.id
left join t_caseplatform_case_checkdata on t_caseplatform_case_checkdata.case_id = t_caseplatform_case.id
left join t_caseplatform_case_prognosis on t_caseplatform_case_prognosis.case_id = t_caseplatform_case.id
where t_caseplatform_case.id = #{MedicalRecordId}
</select>

View File

@ -0,0 +1,42 @@
package net.lab1024.sa.common.common.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 出院状态枚举类
*
* @Author 1024创新实验室: 胡克
* @Date 2019/09/24 16:50
* @Wechat zhuoda1024
* @Email lab1024@163.com
* @Copyright 1024创新实验室 https://1024lab.net
*/
@AllArgsConstructor
@Getter
public enum DischargeStatusEnum implements BaseEnum {
/**
* 1 好转
*/
A(1, "好转"),
/**
* 2 痊愈
*/
B(2, "痊愈"),
/**
* 3 恶化
*/
C(3, "恶化"),
/**
* 4 死亡
*/
D(4, "死亡");
private final Integer value;
private final String desc;
}

View File

@ -19,19 +19,19 @@ public enum GenderEnum implements BaseEnum {
/**
* 0 未知
*/
UNKNOWN(0, "未知"),
UNKNOWN("0", "未知"),
/**
* 1 奇数为阳
*/
MAN(1, ""),
MAN("1", ""),
/**
* 2 偶数为阴
*/
WOMAN(2, "");
WOMAN("2", "");
private final Integer value;
private final String value;
private final String desc;
}

View File

@ -1,6 +1,7 @@
package net.lab1024.sa.common.common.interceptor;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.sa.common.common.annoation.NoNeedLogin;
import net.lab1024.sa.common.common.code.UserErrorCode;
import net.lab1024.sa.common.common.constant.RequestHeaderConst;
@ -30,6 +31,7 @@ import java.util.function.Function;
* @Email lab1024@163.com
* @Copyright 1024创新实验室 https://1024lab.net
*/
@Slf4j
public abstract class AbstractInterceptor implements HandlerInterceptor {
@Autowired