Kaynağa Gözat

动物影像模版附件

陈长荣 7 ay önce
ebeveyn
işleme
0b0d1a6b7e

+ 1 - 3
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/file/service/impl/FileInfoServiceImpl.java

@@ -25,7 +25,6 @@ import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.docx4j.Docx4J;
-import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
@@ -79,8 +78,7 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
         try (InputStream inputStream = WordUtil.exportWord(modelName, dataMap);
              ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             //转化为docx文件
-            WordprocessingMLPackage pkg = Docx4J.load(inputStream);
-            Docx4J.save(pkg, out);
+            Docx4J.save(Docx4J.load(inputStream), out);
 
             //上传至文件服务器
             byte[] byteArray = out.toByteArray();

+ 2 - 4
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/PathologicalPreExperiment.java

@@ -1,15 +1,13 @@
 package com.github.jfcloud.gene.sample.entity;
 
-import com.github.jfcloud.gene.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 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 {
+public class PathologicalPreExperiment extends Model {
 
     @Schema(description = "主键")
     private Long id;

+ 3 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/SampleInfo.java

@@ -37,6 +37,9 @@ public class SampleInfo extends BaseEntity {
     @Schema(description = "申请人电话")
     private String applicantPhone;
 
+    @Schema(description = "申请人邮箱")
+    private String applicantEmail;
+
     @Schema(description = "申请时间")
     private LocalDateTime applyTime;
 

+ 3 - 3
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/enums/SampleTypeEnum.java

@@ -32,9 +32,9 @@ public enum SampleTypeEnum {
     }
 
     public static SampleTypeEnum resolve(String type) {
-        for (SampleTypeEnum value : values()) {
-            if (value.name().equals(type)) {
-                return value;
+        for (SampleTypeEnum e : values()) {
+            if (e.getType().equals(type)) {
+                return e;
             }
         }
         return null;

+ 36 - 3
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SampleAnimalImagingServiceImpl.java

@@ -7,6 +7,7 @@ import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -23,8 +24,11 @@ import com.github.jfcloud.gene.sample.mapper.SampleAnimalImagingMapper;
 import com.github.jfcloud.gene.sample.mapper.SampleInfoMapper;
 import com.github.jfcloud.gene.sample.service.*;
 import com.github.jfcloud.gene.sample.vo.*;
+import com.github.jfcloud.gene.util.LocalWord;
 import com.github.jfcloud.gene.util.WordDataService;
 import com.github.jfcloud.gene.util.WordUtil;
+import com.github.jfcloud.rich.vo.HtmlParseVo;
+import com.github.jfcloud.rich.word.WordNodeFactory;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -65,7 +69,7 @@ public class SampleAnimalImagingServiceImpl extends ServiceImpl<SampleAnimalImag
 
     @Override
     public void save(Long sampleId, SampleSubmitVo vo) {
-        SampleAnimalImagingVo animalImaging = vo.getAnimalImaging();
+        SampleAnimalImagingVo animalImaging = vo.getAnimalImage();
         Assert.notNull(animalImaging, "动物影像不能为空");
         removeBySampleId(sampleId);
 
@@ -118,8 +122,28 @@ public class SampleAnimalImagingServiceImpl extends ServiceImpl<SampleAnimalImag
         wordDataService.fillDocCreator(dataMap);
         JSONObject sampleInfoObj = JSON.parseObject(JSON.toJSONStringWithDateFormat(sampleInfo, DatePattern.NORM_DATETIME_PATTERN));
         dataMap.put("sampleInfo", sampleInfoObj);
+
+        //需求说明,避免Micro-CT显像与CT显像混合
+        animalImagingVo.setRequirements(animalImagingVo.getRequirements().replace("Micro-CT显像", "Micro-CT"));
+        //活体成像-具体需求
+        HtmlParseVo srParseVo = WordNodeFactory.html2xml(animalImagingVo.getLiveImaging().getSpecificRequirements());
+        animalImagingVo.getLiveImaging().setSpecificRequirements(srParseVo.getContent());
+        //超声-图片要求
+        HtmlParseVo imgParseVo = WordNodeFactory.html2xml(animalImagingVo.getUltrasound().getImageRequirements());
+        animalImagingVo.getUltrasound().setImageRequirements(imgParseVo.getContent());
+        //MicroCT-图片要求
+        HtmlParseVo ctImgParseVo = WordNodeFactory.html2xml(animalImagingVo.getMicroCt().getImageRequirements());
+        animalImagingVo.getMicroCt().setImageRequirements(ctImgParseVo.getContent());
+
         JSONObject animalImagingObj = JSON.parseObject(JSON.toJSONStringWithDateFormat(animalImagingVo, DatePattern.NORM_DATETIME_PATTERN));
-        dataMap.put("animalImaging", animalImagingObj);
+        dataMap.put("animalImage", animalImagingObj);
+
+        //富文本图片
+        JSONArray images = new JSONArray();
+        dataMap.put("images", images);
+        images.fluentAddAll(srParseVo.getImageCache())
+                .fluentAddAll(imgParseVo.getImageCache())
+                .fluentAddAll(ctImgParseVo.getImageCache());
 
         //检测人员
         if (StrUtil.isNotEmpty(sampleInfo.getInspector())) {
@@ -134,7 +158,13 @@ public class SampleAnimalImagingServiceImpl extends ServiceImpl<SampleAnimalImag
         }
 
         //申请时间
-        sampleInfoObj.put("applyTime", DateUtil.format(sampleInfo.getApplyTime(), DatePattern.NORM_DATE_PATTERN));
+        String applyDateStr = DateUtil.format(sampleInfo.getApplyTime(), DatePattern.NORM_DATE_PATTERN);
+        String[] applyDateSplit = applyDateStr.split("-");
+        sampleInfoObj.put("applyTime", applyDateStr);
+        sampleInfoObj.put("applyYear", applyDateSplit[0]);
+        sampleInfoObj.put("applyMonth", applyDateSplit[1]);
+        sampleInfoObj.put("applyDay", applyDateSplit[2]);
+
         //待提交状态下不显示申请人和申请日期
         if (!GeneStatusEnum.SUBMIT_STATUS.contains(sampleInfo.getStatus())) {
             dataMap.put("createDateStr", DateUtil.format(sampleInfo.getApplyTime(), DatePattern.CHINESE_DATE_PATTERN));
@@ -177,6 +207,9 @@ public class SampleAnimalImagingServiceImpl extends ServiceImpl<SampleAnimalImag
         sampleInfoObj.put("expiryDate", WordUtil.padString(sampleInfo.getExpiryDate(), 12));
 
         String modelName = "animalImaging.ftl";
+        if (LocalWord.exportWord(modelName, dataMap, fileName)) {
+            return;
+        }
         fileInfoService.uploadFileWithFileName(modelName, fileName, sampleInfo.getId(), sampleInfo.getStatus(), dataMap);
     }
 

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

@@ -202,7 +202,7 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
                 detailDto.setAnimal(sampleAnimalService.getDetail(id));
                 break;
             case ANIMAL_IMAGE:
-                detailDto.setAnimalImaging(sampleAnimalImagingService.getDetail(id));
+                detailDto.setAnimalImage(sampleAnimalImagingService.getDetail(id));
                 break;
         }
 

+ 5 - 1
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/SampleSubmitVo.java

@@ -37,6 +37,10 @@ public class SampleSubmitVo {
     @Size(max = 50, message = "申请人电话长度不能超过50个字符")
     private String applicantPhone;
 
+    @Schema(description = "申请人邮箱")
+    @Size(max = 100, message = "申请人邮箱长度不能超过100个字符")
+    private String applicantEmail;
+
     @Schema(description = "申请时间", example = "2022-01-01")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate applyTime;
@@ -65,5 +69,5 @@ public class SampleSubmitVo {
 
     private SamplePathologicalVo pathological;
 
-    private SampleAnimalImagingVo animalImaging;
+    private SampleAnimalImagingVo animalImage;
 }

Dosya farkı çok büyük olduğundan ihmal edildi
+ 312 - 217
jfcloud-gene-biz/src/main/resources/ftlTemplate/animalImaging.ftl


+ 93 - 8
jfcloud-gene-biz/src/main/resources/sql/sample_init.sql

@@ -9,6 +9,7 @@ CREATE TABLE IF NOT EXISTS sample_info
     applicant_id        bigint       NULL COMMENT '申请人id',
     applicant_name      varchar(255) NULL COMMENT '申请人名称',
     applicant_phone     varchar(255) NULL COMMENT '申请人电话',
+    applicant_email     varchar(100) NULL COMMENT '申请人邮箱',
     apply_time          DATETIME     NULL COMMENT '申请时间',
     inspector           JSON         NULL COMMENT '检测人员',
     remark              TEXT         NULL COMMENT '备注',
@@ -209,13 +210,13 @@ CREATE TABLE IF NOT EXISTS sample_pathological
     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'
+    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 '病理计划申请表';
 
 
@@ -243,4 +244,88 @@ CREATE TABLE `sys_error_log`
     `detail`      longtext     NULL COMMENT '具体描述',
     `create_time` timestamp    NULL NULL COMMENT '创建时间',
     `create_by`   bigint       NULL COMMENT '创建人'
-) comment '系统异常记录';
+) comment '系统异常记录';
+
+CREATE TABLE sample_animal_imaging
+(
+    id                 BIGINT PRIMARY KEY COMMENT 'ID',
+    sample_id          BIGINT   not null COMMENT '样本ID',
+    research_group     VARCHAR(100) COMMENT '课题组',
+    requirements       VARCHAR(255) COMMENT '需求说明',
+    experiment_purpose TEXT COMMENT '实验目的',
+    experiment_period  VARCHAR(100) COMMENT '实验周期',
+    contrast            VARCHAR(300) COMMENT '对比方法',
+    -- 动物信息
+    animal_type        VARCHAR(255) COMMENT '动物类型',
+    animal_type_other  VARCHAR(255) COMMENT '动物类型-其他',
+    animal_strain      VARCHAR(100) COMMENT '品系',
+    animal_quantity    INT COMMENT '数量',
+    animal_gender      VARCHAR(50) COMMENT '性别',
+    animal_age         VARCHAR(50) COMMENT '周/月龄',
+    model_info         TEXT COMMENT '建模信息及分组',
+    expected_result    TEXT COMMENT '预期结果',
+    has_prior_imaging  TEXT COMMENT '是否已有该类型成像的动物影像',
+    prior_publications TEXT COMMENT '前期发表论文',
+    imaging_remarks    TEXT 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 '动物影像检测分析申请表';
+
+-- 子表1:活体成像检测专用信息
+CREATE TABLE live_imaging_detail
+(
+    id                    INT PRIMARY KEY AUTO_INCREMENT COMMENT '活体成像记录ID',
+    imaging_id            bigint NOT NULL COMMENT '动物影像ID',
+    imaging_type          VARCHAR(100) COMMENT '活体成像类型',
+    fluorophore           VARCHAR(100) COMMENT '荧光基团/荧光染料',
+    excitation_wavelength VARCHAR(20) COMMENT '激发光波长(单位:mm)',
+    emission_wavelength   VARCHAR(20) COMMENT '发射光波长(单位:mm)',
+    luciferase            VARCHAR(100) COMMENT '荧光素酶',
+    luciferin_substrate   VARCHAR(100) COMMENT '荧光素底物',
+    specific_requirements TEXT COMMENT '具体需求指标'
+) COMMENT '活体成像检测详情表';
+
+-- 子表2:超声检测专用信息
+CREATE TABLE ultrasound_detail
+(
+    id                 INT PRIMARY KEY AUTO_INCREMENT COMMENT '超声检测记录ID',
+    imaging_id         bigint NOT NULL COMMENT '动物影像ID',
+    heart_area         VARCHAR(255) COMMENT '心脏区域',
+    heart_area_other   VARCHAR(255) COMMENT '心脏区域-其他',
+    vessel_area        VARCHAR(255) COMMENT '血管区域',
+    vessel_area_other  VARCHAR(255) COMMENT '血管区域-其他',
+    abdomen_area       VARCHAR(255) COMMENT '腹部区域',
+    abdomen_area_other VARCHAR(255) COMMENT '腹部区域-其他',
+    heart_data         VARCHAR(255) COMMENT '心超数据',
+    other_data         VARCHAR(255) COMMENT '其他数据',
+    image_requirements TEXT COMMENT '图片要求'
+) COMMENT '超声检测详情表';
+
+-- 子表3:Micro-CT检测专用信息
+CREATE TABLE micro_ct_detail
+(
+    id                          INT PRIMARY KEY AUTO_INCREMENT COMMENT 'Micro-CT检测记录ID',
+    imaging_id                  bigint NOT NULL COMMENT '动物影像ID',
+    bone_area                   VARCHAR(255) COMMENT '骨骼目标区域',
+    bone_area_other             VARCHAR(255) COMMENT '骨骼目标区域-其他',
+    bone_implant_position       VARCHAR(255) COMMENT '骨植入位置',
+    bone_implant_position_other VARCHAR(255) COMMENT '骨植入位置-其他',
+    trepanning_diameter         VARCHAR(20) COMMENT '开孔直径(单位:mm)',
+    trepanning_depth            VARCHAR(20) COMMENT '开孔深度(单位:mm)',
+    preprocess                  VARCHAR(255) COMMENT '材料预处理',
+    preprocess_other            VARCHAR(255) COMMENT '材料预处理-其他',
+    material_properties         VARCHAR(255) COMMENT '材料性质',
+    material_properties_other   VARCHAR(255) COMMENT '材料性质-其他',
+    data_requirements           VARCHAR(255) COMMENT '数据要求',
+    data_requirements_other     VARCHAR(255) COMMENT '数据要求-其他',
+    image_requirements          TEXT COMMENT '图片要求',
+    roi_form                    TEXT COMMENT 'roi形态',
+    roi_other1                  TEXT COMMENT 'roi-其他(重点观察缺损区内部)',
+    roi_other2                  TEXT COMMENT 'roi-其他要求'
+) COMMENT 'Micro-CT检测详情表';

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor