Forráskód Böngészése

病理样本保存、编辑、详情

陈长荣 7 hónapja
szülő
commit
6428074a5c
15 módosított fájl, 674 hozzáadás és 43 törlés
  1. 2 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/file/entity/FileInfo.java
  2. 40 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/PathologicalPreExperiment.java
  3. 150 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/SamplePathological.java
  4. 9 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/PathologicalPreExperimentMapper.java
  5. 9 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/SamplePathologicalMapper.java
  6. 7 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/PathologicalPreExperimentService.java
  7. 16 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/SamplePathologicalService.java
  8. 11 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/PathologicalPreExperimentServiceImpl.java
  9. 0 1
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SampleAnimalServiceImpl.java
  10. 16 4
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SampleInfoServiceImpl.java
  11. 145 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SamplePathologicalServiceImpl.java
  12. 38 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/PreExperimentVo.java
  13. 182 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/SamplePathologicalVo.java
  14. 2 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/SampleSubmitVo.java
  15. 47 38
      jfcloud-gene-biz/src/main/resources/sql/sample_init.sql

+ 2 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/file/entity/FileInfo.java

@@ -3,6 +3,7 @@ package com.github.jfcloud.gene.file.entity;
 import com.github.jfcloud.gene.common.entity.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 
@@ -11,6 +12,7 @@ import java.io.Serializable;
  * file_info
  */
 @EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
 @Data
 public class FileInfo extends BaseEntity implements Serializable {
     private static final long serialVersionUID = 1L;

+ 40 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/PathologicalPreExperiment.java

@@ -0,0 +1,40 @@
+package com.github.jfcloud.gene.sample.entity;
+
+import com.github.jfcloud.gene.common.entity.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class PathologicalPreExperiment extends BaseEntity {
+
+    @Schema(description = "主键")
+    private Long id;
+
+    @Schema(description = "病理ID")
+    private Long pathologicalId;
+
+    @Schema(description = "检测方法  IF IHC")
+    private String detectMethod;
+
+    @Schema(description = "切片类型")
+    private String qplx;
+
+    @Schema(description = "封闭类型")
+    private String fblx;
+
+    @Schema(description = "修复条件")
+    private String xftj;
+
+    @Schema(description = "抗体信息")
+    private String ktxx;
+
+    @Schema(description = "组织编号")
+    private String zzbh;
+
+    @Schema(description = "实验结果")
+    private String syjg;
+}

+ 150 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/SamplePathological.java

@@ -0,0 +1,150 @@
+package com.github.jfcloud.gene.sample.entity;
+
+import com.github.jfcloud.gene.common.entity.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class SamplePathological extends BaseEntity {
+
+    private Long id;
+
+    @Schema(description = "样本ID")
+    private Long sampleId;
+
+    @Schema(description = "课题名称")
+    private String subjectName;
+
+    @Schema(description = "课题负责人")
+    private Long subjectLeaderId;
+
+    @Schema(description = "课题负责人姓名")
+    private String subjectLeaderName;
+
+    @Schema(description = "取材方式")
+    private String qcfs;
+
+    @Schema(description = "固定液类型")
+    private String gdy;
+
+    @Schema(description = "固定液类型-其他")
+    private String gdyQt;
+
+    @Schema(description = "修块脱水样本数量")
+    private Integer xkts;
+
+    @Schema(description = "石蜡包埋样本数量")
+    private Integer slbm;
+
+    @Schema(description = "石蜡切片-蜡块数量")
+    private Integer sllk;
+
+    @Schema(description = "石蜡切片-切片数量")
+    private Integer slqp;
+
+    @Schema(description = "冰冻切片-样本数量")
+    private Integer bdyb;
+
+    @Schema(description = "冰冻切片-切片数量")
+    private Integer bdqp;
+
+    @Schema(description = "HE染色切片数量")
+    private Integer he;
+
+    @Schema(description = "MASSON染色切片数量")
+    private Integer masson;
+
+    @Schema(description = "PSR染色切片数量")
+    private Integer psr;
+
+    @Schema(description = "PAS染色切片数量")
+    private Integer pas;
+
+    @Schema(description = "油红O染色切片数量")
+    private Integer yho;
+
+    @Schema(description = "FJB染色切片数量")
+    private Integer fjb;
+
+    @Schema(description = "EVG染色切片数量")
+    private Integer evg;
+
+    @Schema(description = "TUNEL染色切片数量")
+    private Integer tunel;
+
+    @Schema(description = "WGA染色切片数量")
+    private Integer wga;
+
+    @Schema(description = "其他染色切片数量")
+    private Integer qtqp;
+
+    @Schema(description = "免疫组化染色切片数量")
+    private Integer myzhqp;
+
+    @Schema(description = "免疫组化具体指标")
+    private String myzhzb;
+
+    @Schema(description = "免疫荧光染色切片数量")
+    private Integer myygqp;
+
+    @Schema(description = "免疫荧光具体指标")
+    private String myygzb;
+
+    @Schema(description = "切片扫描切片数量")
+    private Integer qpsmqp;
+
+    @Schema(description = "切片扫描染色类型")
+    private String qpsmrs;
+
+    @Schema(description = "阅片切片数量")
+    private Integer ypqp;
+
+    @Schema(description = "阅片切片染色类型")
+    private String yprs;
+
+    @Schema(description = "阅片说明")
+    private String ypsm;
+
+    @Schema(description = "检测种属(动物)")
+    private String jczs;
+
+    @Schema(description = "检测种属(其他)")
+    private String jczsQt;
+
+    @Schema(description = "检测方法(IF)")
+    private String jcff;
+
+    @Schema(description = "检测方法(其他)")
+    private String jcffQt;
+
+    @Schema(description = "特殊要求:加急,重复")
+    private String specialRequirements;
+
+    @Schema(description = "预实验")
+    private Boolean preExperiment;
+
+    @Schema(description = "预实验课题名称")
+    private String preSubjectName;
+
+    @Schema(description = "预实验申请人id")
+    private Long preApplicantId;
+
+    @Schema(description = "预实验申请人姓名")
+    private String preApplicantName;
+
+    @Schema(description = "预实验的内容")
+    private String preContent;
+
+    @Schema(description = "预实验的结论")
+    private String preConclusion;
+
+    @Schema(description = "预实验的实验日期")
+    private String preDate;
+
+    @Schema(description = "预实验的实验人员")
+    private String prePeople;
+}

+ 9 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/PathologicalPreExperimentMapper.java

@@ -0,0 +1,9 @@
+package com.github.jfcloud.gene.sample.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.jfcloud.gene.sample.entity.PathologicalPreExperiment;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PathologicalPreExperimentMapper extends BaseMapper<PathologicalPreExperiment> {
+}

+ 9 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/SamplePathologicalMapper.java

@@ -0,0 +1,9 @@
+package com.github.jfcloud.gene.sample.mapper;
+
+import com.github.jfcloud.common.data.datascope.JfcloudBaseMapper;
+import com.github.jfcloud.gene.sample.entity.SamplePathological;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SamplePathologicalMapper extends JfcloudBaseMapper<SamplePathological> {
+}

+ 7 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/PathologicalPreExperimentService.java

@@ -0,0 +1,7 @@
+package com.github.jfcloud.gene.sample.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.jfcloud.gene.sample.entity.PathologicalPreExperiment;
+
+public interface PathologicalPreExperimentService extends IService<PathologicalPreExperiment> {
+}

+ 16 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/SamplePathologicalService.java

@@ -0,0 +1,16 @@
+package com.github.jfcloud.gene.sample.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.jfcloud.gene.sample.entity.SamplePathological;
+import com.github.jfcloud.gene.sample.vo.SamplePathologicalVo;
+
+public interface SamplePathologicalService extends IService<SamplePathological> {
+
+    /**
+     * 获取病理样本详情
+     *
+     * @param sampleId
+     * @return
+     */
+    SamplePathologicalVo getDetail(Long sampleId);
+}

+ 11 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/PathologicalPreExperimentServiceImpl.java

@@ -0,0 +1,11 @@
+package com.github.jfcloud.gene.sample.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.jfcloud.gene.sample.entity.PathologicalPreExperiment;
+import com.github.jfcloud.gene.sample.mapper.PathologicalPreExperimentMapper;
+import com.github.jfcloud.gene.sample.service.PathologicalPreExperimentService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PathologicalPreExperimentServiceImpl extends ServiceImpl<PathologicalPreExperimentMapper, PathologicalPreExperiment> implements PathologicalPreExperimentService {
+}

+ 0 - 1
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SampleAnimalServiceImpl.java

@@ -150,7 +150,6 @@ public class SampleAnimalServiceImpl extends ServiceImpl<SampleAnimalMapper, Sam
             sampleCheckItemService.saveBatch(sampleCheckItems);
         }
 
-
         log.info("保存动物样本送检信息成功");
         generate(sampleId);
     }

+ 16 - 4
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SampleInfoServiceImpl.java

@@ -27,7 +27,6 @@ import com.github.jfcloud.gene.sample.enums.SampleTypeEnum;
 import com.github.jfcloud.gene.sample.mapper.SampleInfoMapper;
 import com.github.jfcloud.gene.sample.service.SampleEditService;
 import com.github.jfcloud.gene.sample.service.SampleInfoService;
-import com.github.jfcloud.gene.sample.vo.SampleAnimalVo;
 import com.github.jfcloud.gene.sample.vo.SampleAuditVo;
 import com.github.jfcloud.gene.sample.vo.SamplePageVo;
 import com.github.jfcloud.gene.sample.vo.SampleSubmitVo;
@@ -45,6 +44,7 @@ import java.util.*;
 public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleInfo> implements SampleInfoService {
 
     private final SampleAnimalServiceImpl sampleAnimalService;
+    private final SamplePathologicalServiceImpl samplePathologicalService;
     private final FlowFileVersionService fileVersionService;
     private final UserIdNameCache userIdNameCache;
     private final FlowAuditService flowAuditService;
@@ -56,6 +56,9 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
         if (SampleTypeEnum.ANIMAL.getType().equals(type)) {
             return sampleAnimalService;
         }
+        if (SampleTypeEnum.PATHOLOGICAL.getType().equals(type)) {
+            return samplePathologicalService;
+        }
 
         log.error("样本检测类型参数错误 type={}", type);
         throw new IllegalArgumentException("样本检测类型参数错误");
@@ -184,10 +187,19 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
         if (StrUtil.isNotBlank(sampleInfo.getInspector())) {
             detailDto.setInspector(JSONArray.parseArray(sampleInfo.getInspector()));
         }
-        if (SampleTypeEnum.ANIMAL.getType().equals(sampleInfo.getType())) {
-            SampleAnimalVo detail = sampleAnimalService.getDetail(id);
-            detailDto.setAnimal(detail);
+
+        SampleTypeEnum typeEnum = Objects.requireNonNull(SampleTypeEnum.resolve(sampleInfo.getType()));
+        switch (typeEnum) {
+            case PATHOLOGICAL:
+                detailDto.setPathological(samplePathologicalService.getDetail(id));
+                break;
+            case ANIMAL:
+                detailDto.setAnimal(sampleAnimalService.getDetail(id));
+                break;
+            case ANIMAL_IMAGE:
+                break;
         }
+
         return detailDto;
     }
 

+ 145 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SamplePathologicalServiceImpl.java

@@ -0,0 +1,145 @@
+package com.github.jfcloud.gene.sample.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.jfcloud.gene.common.constant.WhetherEnum;
+import com.github.jfcloud.gene.common.util.CustomIdGenerator;
+import com.github.jfcloud.gene.file.entity.FileInfo;
+import com.github.jfcloud.gene.file.service.FileInfoService;
+import com.github.jfcloud.gene.file.vo.FileVo;
+import com.github.jfcloud.gene.sample.entity.PathologicalPreExperiment;
+import com.github.jfcloud.gene.sample.entity.SamplePathological;
+import com.github.jfcloud.gene.sample.mapper.SamplePathologicalMapper;
+import com.github.jfcloud.gene.sample.service.PathologicalPreExperimentService;
+import com.github.jfcloud.gene.sample.service.SampleEditService;
+import com.github.jfcloud.gene.sample.service.SamplePathologicalService;
+import com.github.jfcloud.gene.sample.vo.PreExperimentVo;
+import com.github.jfcloud.gene.sample.vo.SamplePathologicalVo;
+import com.github.jfcloud.gene.sample.vo.SampleSubmitVo;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class SamplePathologicalServiceImpl extends ServiceImpl<SamplePathologicalMapper, SamplePathological> implements SamplePathologicalService, SampleEditService {
+
+    /**
+     * 病理样本-样本信息附件类型
+     */
+    public static final String PATHOLOGICAL_SAMPLE_INFO = "pathological.sampleInfo";
+    /**
+     * 病理样本-抗体信息附件类型
+     */
+    public static final String PATHOLOGICAL_ANTIBODY_INFO = "pathological.antibodyInfo";
+    private final PathologicalPreExperimentService preExperimentService;
+    private final FileInfoService fileInfoService;
+
+    @Override
+    public void removeBySampleId(Long sampleId) {
+        List<SamplePathological> pathologicalList = list(new LambdaQueryWrapper<>(SamplePathological.class)
+                .select(SamplePathological::getId)
+                .eq(SamplePathological::getSampleId, sampleId));
+        if (pathologicalList.isEmpty()) {
+            return;
+        }
+
+        Set<Long> idSet = pathologicalList.stream().map(SamplePathological::getId).collect(Collectors.toSet());
+        removeBatchByIds(idSet);
+
+        preExperimentService.remove(new LambdaQueryWrapper<>(PathologicalPreExperiment.class).in(PathologicalPreExperiment::getPathologicalId, idSet));
+    }
+
+    @Override
+    public void save(Long sampleId, SampleSubmitVo vo) {
+        SamplePathologicalVo pathological = vo.getPathological();
+        Assert.notNull(pathological, "病理样本送检不能为空");
+        removeBySampleId(sampleId);
+
+        //保存病理样本送检信息
+        SamplePathological samplePathological = BeanUtil.copyProperties(pathological, SamplePathological.class);
+        samplePathological.setId(CustomIdGenerator.nextId());
+        samplePathological.setSampleId(sampleId);
+        samplePathological.insert();
+
+        //保存预实验列表
+        List<PathologicalPreExperiment> preExperiments = BeanUtil.copyToList(pathological.getExperiments(), PathologicalPreExperiment.class);
+        preExperiments.forEach(item -> item.setPathologicalId(samplePathological.getId()));
+        preExperimentService.saveBatch(preExperiments);
+
+        //保存附件列表
+        List<FileInfo> fileInfos = new ArrayList<>();
+        pathological.getSampleInfoFiles().forEach(f -> {
+                    FileInfo fileInfo = new FileInfo()
+                            .setRelateId(samplePathological.getId())
+                            .setType(PATHOLOGICAL_SAMPLE_INFO)
+                            .setName(f.getName())
+                            .setUrl(f.getUrl());
+                    fileInfos.add(fileInfo);
+                });
+        pathological.getAntibodyInfoFiles().forEach(f -> {
+                    FileInfo fileInfo = new FileInfo()
+                            .setRelateId(samplePathological.getId())
+                            .setType(PATHOLOGICAL_ANTIBODY_INFO)
+                            .setName(f.getName())
+                            .setUrl(f.getUrl());
+                    fileInfos.add(fileInfo);
+                });
+        if (CollUtil.isNotEmpty(fileInfos)) {
+            fileInfoService.saveBatch(fileInfos);
+        }
+
+        log.info("保存病理样本送检信息成功");
+        generate(sampleId);
+    }
+
+    @Override
+    public void generate(Long sampleId) {
+
+    }
+
+    @Override
+    public SamplePathologicalVo getDetail(Long sampleId) {
+        SamplePathological samplePathological = getOne(new LambdaQueryWrapper<>(SamplePathological.class)
+                .eq(SamplePathological::getSampleId, sampleId)
+                .eq(SamplePathological::getDeleted, WhetherEnum.NO.getCode()));
+        if (samplePathological == null) {
+            return null;
+        }
+
+        SamplePathologicalVo pathologicalVo = BeanUtil.copyProperties(samplePathological, SamplePathologicalVo.class);
+
+        //预实验列表
+        List<PathologicalPreExperiment> preExperiments = preExperimentService.list(new LambdaQueryWrapper<>(PathologicalPreExperiment.class)
+                .eq(PathologicalPreExperiment::getPathologicalId, samplePathological.getId()));
+        pathologicalVo.getExperiments().addAll(BeanUtil.copyToList(preExperiments, PreExperimentVo.class));
+
+        //附件列表
+        List<FileInfo> fileInfos = fileInfoService.list(new LambdaQueryWrapper<>(FileInfo.class)
+                .eq(FileInfo::getRelateId, samplePathological.getId())
+                .eq(FileInfo::getDeleted, WhetherEnum.NO.getCode())
+                .orderByAsc(FileInfo::getId));
+        if (CollUtil.isNotEmpty(fileInfos)) {
+            pathologicalVo.getSampleInfoFiles().addAll(fileInfos.stream()
+                    .filter(item -> PATHOLOGICAL_SAMPLE_INFO.equals(item.getType()))
+                    .map(item -> BeanUtil.copyProperties(item, FileVo.class))
+                    .collect(Collectors.toList()));
+
+            pathologicalVo.getAntibodyInfoFiles().addAll(fileInfos.stream()
+                    .filter(item -> PATHOLOGICAL_ANTIBODY_INFO.equals(item.getType()))
+                    .map(item -> BeanUtil.copyProperties(item, FileVo.class))
+                    .collect(Collectors.toList()));
+        }
+
+        return pathologicalVo;
+    }
+}

+ 38 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/PreExperimentVo.java

@@ -0,0 +1,38 @@
+package com.github.jfcloud.gene.sample.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.Size;
+
+@Accessors(chain = true)
+@Data
+public class PreExperimentVo {
+
+    @Schema(description = "检测方法", example = "IF IHC")
+    private String detectMethod;
+
+    @Schema(description = "切片类型")
+    @Size(max = 255, message = "切片类型不能超过255个字符")
+    private String qplx;
+
+    @Schema(description = "封闭类型")
+    @Size(max = 255, message = "封闭类型不能超过255个字符")
+    private String fblx;
+
+    @Schema(description = "修复条件")
+    @Size(max = 255, message = "修复条件不能超过255个字符")
+    private String xftj;
+
+    @Schema(description = "抗体信息")
+    @Size(max = 255, message = "抗体信息不能超过255个字符")
+    private String ktxx;
+
+    @Schema(description = "组织编号")
+    @Size(max = 255, message = "组织编号不能超过255个字符")
+    private String zzbh;
+
+    @Schema(description = "实验结果")
+    private String syjg;
+}

+ 182 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/SamplePathologicalVo.java

@@ -0,0 +1,182 @@
+package com.github.jfcloud.gene.sample.vo;
+
+import com.github.jfcloud.gene.file.vo.FileVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.Size;
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class SamplePathologicalVo {
+
+    @Schema(description = "课题名称")
+    private String subjectName;
+
+    @Schema(description = "课题负责人")
+    private Long subjectLeaderId;
+
+    @Schema(description = "课题负责人姓名")
+    private String subjectLeaderName;
+
+    @Schema(description = "取材方式", example = "常规,穿刺")
+    private String qcfs;
+
+    @Schema(description = "固定液类型", example = "常规,Carnoy液")
+    private String gdy;
+
+    @Schema(description = "固定液类型-其他")
+    private String gdyQt;
+
+    @Schema(description = "修块脱水样本数量")
+    @Min(value = -1L, message = "修块脱水样本数量不能小于-1")
+    private Integer xkts;
+
+    @Schema(description = "石蜡包埋样本数量")
+    @Min(value = -1L, message = "石蜡包埋样本数量不能小于-1")
+    private Integer slbm;
+
+    @Schema(description = "石蜡切片-蜡块数量")
+    @Min(value = -1L, message = "石蜡切片-蜡块数量不能小于-1")
+    private Integer sllk;
+
+    @Schema(description = "石蜡切片-切片数量")
+    @Min(value = -1L, message = "石蜡切片-切片数量不能小于-1")
+    private Integer slqp;
+
+    @Schema(description = "冰冻切片-样本数量")
+    @Min(value = -1L, message = "冰冻切片-样本数量不能小于-1")
+    private Integer bdyb;
+
+    @Schema(description = "冰冻切片-切片数量")
+    @Min(value = -1L, message = "冰冻切片-切片数量不能小于-1")
+    private Integer bdqp;
+
+    @Schema(description = "HE染色切片数量")
+    @Min(value = -1L, message = "HE染色切片数量不能小于-1")
+    private Integer he;
+
+    @Schema(description = "MASSON染色切片数量")
+    @Min(value = -1L, message = "MASSON染色切片数量不能小于-1")
+    private Integer masson;
+
+    @Schema(description = "PSR染色切片数量")
+    @Min(value = -1L, message = "PSR染色切片数量不能小于-1")
+    private Integer psr;
+
+    @Schema(description = "PAS染色切片数量")
+    @Min(value = -1L, message = "PAS染色切片数量不能小于-1")
+    private Integer pas;
+
+    @Schema(description = "油红O染色切片数量")
+    @Min(value = -1L, message = "油红O染色切片数量不能小于-1")
+    private Integer yho;
+
+    @Schema(description = "FJB染色切片数量")
+    @Min(value = -1L, message = "FJB染色切片数量不能小于-1")
+    private Integer fjb;
+
+    @Schema(description = "EVG染色切片数量")
+    @Min(value = -1L, message = "EVG染色切片数量不能小于-1")
+    private Integer evg;
+
+    @Schema(description = "TUNEL染色切片数量")
+    @Min(value = -1L, message = "TUNEL染色切片数量不能小于-1")
+    private Integer tunel;
+
+    @Schema(description = "WGA染色切片数量")
+    @Min(value = -1L, message = "WGA染色切片数量不能小于-1")
+    private Integer wga;
+
+    @Schema(description = "其他染色切片数量")
+    @Min(value = -1L, message = "其他染色切片数量不能小于-1")
+    private Integer qtqp;
+
+    @Schema(description = "免疫组化染色切片数量")
+    @Min(value = -1L, message = "免疫组化染色切片数量不能小于-1")
+    private Integer myzhqp;
+
+    @Schema(description = "免疫组化具体指标")
+    @Size(max = 255, message = "免疫组化具体指标不能超过255个字符")
+    private String myzhzb;
+
+    @Schema(description = "免疫荧光染色切片数量")
+    @Min(value = -1L, message = "免疫荧光染色切片数量不能小于-1")
+    private Integer myygqp;
+
+    @Schema(description = "免疫荧光具体指标")
+    @Size(max = 255, message = "免疫荧光染色切片数量不能超过255个字符")
+    private String myygzb;
+
+    @Schema(description = "切片扫描切片数量")
+    @Min(value = -1L, message = "切片扫描切片数量不能小于-1")
+    private Integer qpsmqp;
+
+    @Schema(description = "切片扫描染色类型")
+    @Size(max = 255, message = "切片扫描染色类型不能超过255个字符")
+    private String qpsmrs;
+
+    @Schema(description = "阅片切片数量")
+    @Min(value = -1L, message = "阅片切片数量不能小于-1")
+    private Integer ypqp;
+
+    @Schema(description = "阅片切片染色类型")
+    @Size(max = 255, message = "阅片切片染色类型不能超过255个字符")
+    private String yprs;
+
+    @Schema(description = "阅片说明")
+    @Size(max = 255, message = "阅片切片染色类型不能超过255个字符")
+    private String ypsm;
+
+    @Schema(description = "检测种属(动物)")
+    private String jczs;
+
+    @Schema(description = "检测种属(其他)")
+    private String jczsQt;
+
+    @Schema(description = "检测方法(IF)")
+    private String jcff;
+
+    @Schema(description = "检测方法(其他)")
+    private String jcffQt;
+
+    @Schema(description = "特殊要求:加急,重复")
+    private String specialRequirements;
+
+    @Schema(description = "预实验")
+    private Boolean preExperiment;
+
+    @Schema(description = "预实验课题名称")
+    @Size(max = 255, message = "预实验课题名称不能超过255个字符")
+    private String preSubjectName;
+
+    @Schema(description = "预实验申请人id")
+    private Long preApplicantId;
+
+    @Schema(description = "预实验申请人姓名")
+    private String preApplicantName;
+
+    @Schema(description = "预实验的内容")
+    @Size(max = 255, message = "预实验的内容不能超过255个字符")
+    private String preContent;
+
+    @Schema(description = "预实验的结论")
+    private String preConclusion;
+
+    @Schema(description = "预实验的实验日期")
+    private String preDate;
+
+    @Schema(description = "预实验的实验人员,json字符串")
+    private String prePeople;
+
+    @Schema(description = "预实验列表")
+    private List<PreExperimentVo> experiments = new ArrayList<>();
+
+    @Schema(description = "样本信息附件列表")
+    private List<FileVo> sampleInfoFiles = new ArrayList<>();
+
+    @Schema(description = "抗体信息附件列表")
+    private List<FileVo> antibodyInfoFiles = new ArrayList<>();
+}

+ 2 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/SampleSubmitVo.java

@@ -62,4 +62,6 @@ public class SampleSubmitVo {
     private String projectManageName;
 
     private SampleAnimalVo animal;
+
+    private SamplePathologicalVo pathological;
 }

+ 47 - 38
jfcloud-gene-biz/src/main/resources/sql/sample_init.sql

@@ -155,43 +155,44 @@ CREATE TABLE IF NOT EXISTS `sample_check_item`
 
 CREATE TABLE IF NOT EXISTS sample_pathological
 (
-    id                   BIGINT     not null PRIMARY KEY COMMENT '主键',
-    sample_id            BIGINT     not null COMMENT '样本ID',
+    id                   BIGINT       not null PRIMARY KEY COMMENT '主键',
+    sample_id            BIGINT       not null COMMENT '样本ID',
     subject_name         VARCHAR(255) COMMENT '课题名称',
-    subject_leader       BIGINT COMMENT '课题负责人',
+    subject_leader_id    BIGINT COMMENT '课题负责人',
+    subject_leader_name  VARCHAR(50) COMMENT '课题负责人姓名',
 
     qcfs                 VARCHAR(50) COMMENT '取材方式',
     gdy                  VARCHAR(50) COMMENT '固定液类型',
     gdy_qt               VARCHAR(255) COMMENT '固定液类型-其他',
 
-    xkts                 INT        not null default '-1' COMMENT '修块脱水样本数量',
-    slbm                 INT        not null default '-1' COMMENT '石蜡包埋样本数量',
-
-    sllk                 INT        not null default '-1' COMMENT '石蜡切片-蜡块数量',
-    slqp                 INT        not null default '-1' COMMENT '石蜡切片-切片数量',
-    bdyb                 INT        not null default '-1' COMMENT '冰冻切片-样本数量',
-    bdqp                 INT        not null default '-1' COMMENT '冰冻切片-切片数量',
-
-    he                   INT        not null default '-1' COMMENT 'HE染色切片数量',
-    masson               INT        not null default '-1' COMMENT 'MASSON染色切片数量',
-    psr                  INT        not null default '-1' COMMENT 'PSR染色切片数量',
-    pas                  INT        not null default '-1' COMMENT 'PAS染色切片数量',
-    yho                  INT        not null default '-1' COMMENT '油红O染色切片数量',
-    fjb                  INT        not null default '-1' COMMENT 'FJB染色切片数量',
-    evg                  INT        not null default '-1' COMMENT 'EVG染色切片数量',
-    tunel                INT        not null default '-1' COMMENT 'TUNEL染色切片数量',
-    wga                  INT        not null default '-1' COMMENT 'WGA染色切片数量',
-    qtqp                 INT        not null default '-1' COMMENT '其他染色切片数量',
-
-    myzh                 INT        not null default '-1' COMMENT '免疫组化染色切片数量',
-    myzhzb               VARCHAR(255) COMMENT '免疫组化具体指标',
-    myyg                 INT        not null default '-1' COMMENT '免疫荧光染色切片数量',
-    myygzb               VARCHAR(255) COMMENT '免疫荧光具体指标',
-    qpsm                 INT        not null default '-1' COMMENT '切片扫描切片数量',
-    qpsmlx               VARCHAR(255) COMMENT '切片扫描染色类型',
-    ypsl                 INT        not null default '-1' COMMENT '阅片切片数量',
-    yplx                 VARCHAR(255) COMMENT '阅片切片染色类型',
-    ypsm                 VARCHAR(255) COMMENT '阅片说明',
+    xkts                 INT          not null default '-1' COMMENT '修块脱水样本数量',
+    slbm                 INT          not null default '-1' COMMENT '石蜡包埋样本数量',
+
+    sllk                 INT          not null default '-1' COMMENT '石蜡切片-蜡块数量',
+    slqp                 INT          not null default '-1' COMMENT '石蜡切片-切片数量',
+    bdyb                 INT          not null default '-1' COMMENT '冰冻切片-样本数量',
+    bdqp                 INT          not null default '-1' COMMENT '冰冻切片-切片数量',
+
+    he                   INT          not null default '-1' COMMENT 'HE染色切片数量',
+    masson               INT          not null default '-1' COMMENT 'MASSON染色切片数量',
+    psr                  INT          not null default '-1' COMMENT 'PSR染色切片数量',
+    pas                  INT          not null default '-1' COMMENT 'PAS染色切片数量',
+    yho                  INT          not null default '-1' COMMENT '油红O染色切片数量',
+    fjb                  INT          not null default '-1' COMMENT 'FJB染色切片数量',
+    evg                  INT          not null default '-1' COMMENT 'EVG染色切片数量',
+    tunel                INT          not null default '-1' COMMENT 'TUNEL染色切片数量',
+    wga                  INT          not null default '-1' COMMENT 'WGA染色切片数量',
+    qtqp                 INT          not null default '-1' COMMENT '其他染色切片数量',
+
+    myzhqp               INT          not null default '-1' COMMENT '免疫组化染色切片数量',
+    myzhzb               VARCHAR(255) null COMMENT '免疫组化具体指标',
+    myygqp               INT          not null default '-1' COMMENT '免疫荧光染色切片数量',
+    myygzb               VARCHAR(255) null COMMENT '免疫荧光具体指标',
+    qpsmqp               INT          not null default '-1' COMMENT '切片扫描切片数量',
+    qpsmrs               VARCHAR(255) null COMMENT '切片扫描染色类型',
+    ypqp                 INT          not null default '-1' COMMENT '阅片切片数量',
+    yprs                 VARCHAR(255) null COMMENT '阅片切片染色类型',
+    ypsm                 VARCHAR(255) null COMMENT '阅片说明',
 
     jczs                 VARCHAR(50) COMMENT '检测种属(动物)',
     jczs_qt              VARCHAR(255) COMMENT '检测种属(其他)',
@@ -199,17 +200,28 @@ CREATE TABLE IF NOT EXISTS sample_pathological
     jcff_qt              VARCHAR(255) COMMENT '检测方法(其他)',
 
     special_requirements VARCHAR(255) COMMENT '特殊要求:加急,重复',
-    pre_experiment       TINYINT(1) NOT NULL DEFAULT 0 COMMENT '预实验',
+    pre_experiment       TINYINT(1)   NOT NULL DEFAULT 0 COMMENT '预实验',
     pre_subject_name     VARCHAR(255) COMMENT '预实验课题名称',
     pre_applicant_id     BIGINT COMMENT '预实验申请人id',
     pre_applicant_name   VARCHAR(100) COMMENT '预实验申请人姓名',
-    pre_content          VARCHAR(255) COMMENT '预实验的内容'
+    pre_content          VARCHAR(255) COMMENT '预实验的内容',
+    pre_conclusion       TEXT COMMENT '预实验的结论',
+    pre_date             VARCHAR(30) COMMENT '预实验的实验日期',
+    pre_people           JSON COMMENT '预实验的实验人员',
+
+    deleted                      char(1)      NOT null default '0' COMMENT '是否被删除',
+    create_by                    varchar(255) COMMENT '创建人',
+    create_time                  DATETIME     NULL COMMENT '创建时间',
+    update_by                    varchar(255) COMMENT '更新人',
+    update_time                  DATETIME     NULL COMMENT '更新时间',
+    tenant_id                    bigint COMMENT '租户ID',
+    dept_id                      bigint COMMENT '部门ID'
 ) COMMENT '病理计划申请表';
 
 
 CREATE TABLE IF NOT EXISTS pathological_pre_experiment
 (
-    id              BIGINT not null PRIMARY KEY COMMENT '主键',
+    id              BIGINT not null PRIMARY KEY auto_increment COMMENT '主键',
     pathological_id BIGINT not null COMMENT '病理ID',
     detect_method   VARCHAR(30) COMMENT '检测方法  IF IHC',
 
@@ -218,10 +230,7 @@ CREATE TABLE IF NOT EXISTS pathological_pre_experiment
     xftj            VARCHAR(500) COMMENT '修复条件',
     ktxx            VARCHAR(255) COMMENT '抗体信息',
     zzbh            VARCHAR(255) COMMENT '组织编号',
-    syjg            TEXT COMMENT '实验结果',
-    syjl            VARCHAR(255) COMMENT '实验结论',
-    syrq            VARCHAR(30) COMMENT '实验日期',
-    syr             VARCHAR(255) COMMENT '实验人'
+    syjg            TEXT COMMENT '实验结果'
 ) COMMENT '病理预实验表';
 
 CREATE TABLE `sys_error_log`