Sfoglia il codice sorgente

动物影像保存、编辑、详情

陈长荣 2 mesi fa
parent
commit
51d3e5403c
26 ha cambiato i file con 827 aggiunte e 4 eliminazioni
  1. 133 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/lis/dto/QuarantineOrderRequest.java
  2. 20 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/lis/dto/QuarantineOrderResponse.java
  3. 42 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/LiveImagingDetail.java
  4. 69 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/MicroCtDetail.java
  5. 68 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/SampleAnimalImaging.java
  6. 48 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/UltrasoundDetail.java
  7. 9 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/LiveImagingDetailMapper.java
  8. 9 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/MicroCtDetailMapper.java
  9. 9 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/SampleAnimalImagingMapper.java
  10. 9 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/UltrasoundDetailMapper.java
  11. 7 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/LiveImagingDetailService.java
  12. 7 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/MicroCtDetailService.java
  13. 16 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/SampleAnimalImagingService.java
  14. 7 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/UltrasoundDetailService.java
  15. 11 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/LiveImagingDetailServiceImpl.java
  16. 11 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/MicroCtDetailServiceImpl.java
  17. 127 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SampleAnimalImagingServiceImpl.java
  18. 12 2
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SampleAnimalServiceImpl.java
  19. 8 2
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SampleInfoServiceImpl.java
  20. 1 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SamplePathologicalServiceImpl.java
  21. 11 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/UltrasoundDetailServiceImpl.java
  22. 31 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/LiveImagingVo.java
  23. 58 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/MicroCtVo.java
  24. 65 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/SampleAnimalImagingVo.java
  25. 2 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/SampleSubmitVo.java
  26. 37 0
      jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/UltrasoundVo.java

+ 133 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/lis/dto/QuarantineOrderRequest.java

@@ -0,0 +1,133 @@
+package com.github.jfcloud.gene.lis.dto;
+
+import lombok.Data;
+
+/**
+ * 检疫商品订单记录请求参数
+ */
+@Data
+public class QuarantineOrderRequest {
+
+    /**
+     * 请求机构id
+     */
+    private String clientId;
+
+    /**
+     * 订单业务唯一键(请求方订单业务id唯一标识)
+     */
+    private String businessId;
+
+    /**
+     * 订单名称
+     */
+    private String orderName;
+
+    /**
+     * 下单人名称(下单用户名称)
+     */
+    private String orderingUserName;
+
+    /**
+     * 用户下单时间yyyy-MM-dd HH:mm:ss
+     */
+    private String orderingTime;
+
+    /**
+     * 检测类型1 商品,2检疫项
+     */
+    private Integer checkType;
+
+    /**
+     * 商品编号,取自检疫商品数据的productSn
+     */
+    private String productId;
+
+    /**
+     * 商品名称,取自检疫商品数据的productName
+     */
+    private String productName;
+
+    /**
+     * 宠物基础信息
+     */
+    private PetBaseInfoDTO petBaseInfoDTO;
+
+
+    /**
+     * 宠物基础信息DTO
+     */
+    @Data
+    public static class PetBaseInfoDTO {
+
+        /**
+         * 宠物id 唯一标识
+         */
+        private String petId;
+
+        /**
+         * 宠物类型Code,取自字典:goods_detection_type
+         */
+        private Integer goodsDetectionType;
+
+        /**
+         * 宠物品种Code,调用动物品种列表接口获取
+         */
+        private String petTypeCode;
+
+        /**
+         * 宠物名称
+         */
+        private String petName;
+
+        /**
+         * 宠物主名称
+         */
+        private String petOwnerName;
+
+        /**
+         * 宠物主联系电话
+         */
+        private String petOwnerPhone;
+
+        /**
+         * 宠物性别 1公 2母
+         */
+        private Integer petGender;
+
+        /**
+         * 宠物年龄--年
+         */
+        private Integer ageYear;
+
+        /**
+         * 宠物年龄--月
+         */
+        private Integer ageMonth;
+
+        /**
+         * 是否绝育 0未绝育 1已绝育
+         */
+        private Integer neutered;
+
+        /**
+         * 疫苗情况
+         */
+        private String vaccineDescription;
+
+        /**
+         * 驱虫情况说明
+         */
+        private String insecticideDescription;
+
+        /**
+         * 既往病史说明
+         */
+        private String diseaseDescription;
+
+        /**
+         * 既往用药史说明
+         */
+        private String medicineDescription;
+    }
+}

+ 20 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/lis/dto/QuarantineOrderResponse.java

@@ -0,0 +1,20 @@
+package com.github.jfcloud.gene.lis.dto;
+
+import lombok.Data;
+
+/**
+ * 检疫商品订单记录响应参数
+ */
+@Data
+public class QuarantineOrderResponse {
+
+    /**
+     * 订单编号(系统唯一)
+     */
+    private String quarantineOrderKey;
+
+    /**
+     * 订单业务唯一键(请求方订单业务id唯一标识)
+     */
+    private String businessId;
+}

+ 42 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/LiveImagingDetail.java

@@ -0,0 +1,42 @@
+package com.github.jfcloud.gene.sample.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+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;
+
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@Data
+public class LiveImagingDetail extends Model {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @Schema(description = "动物影像ID")
+    private Long imagingId;
+
+    @Schema(description = "活体成像类型")
+    private String imagingType;
+
+    @Schema(description = "荧光基团/荧光染料")
+    private String fluorophore;
+
+    @Schema(description = "激发光波长(单位:mm)")
+    private String excitationWavelength;
+
+    @Schema(description = "发射光波长(单位:mm)")
+    private String emissionWavelength;
+
+    @Schema(description = "荧光素酶")
+    private String luciferase;
+
+    @Schema(description = "荧光素底物")
+    private String luciferinSubstrate;
+
+    @Schema(description = "具体需求指标")
+    private String specificRequirements;
+}

+ 69 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/MicroCtDetail.java

@@ -0,0 +1,69 @@
+package com.github.jfcloud.gene.sample.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+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;
+
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@Data
+public class MicroCtDetail extends Model {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @Schema(description = "动物影像ID")
+    private Long imagingId;
+
+    @Schema(description = "骨骼目标区域")
+    private String boneArea;
+
+    @Schema(description = "骨骼目标区域-其他")
+    private String boneAreaOther;
+
+    @Schema(description = "骨植入位置")
+    private String boneImplantPosition;
+
+    @Schema(description = "骨植入位置-其他")
+    private String boneImplantPositionOther;
+
+    @Schema(description = "开孔直径(单位:mm)")
+    private String trepanningDiameter;
+
+    @Schema(description = "开孔深度(单位:mm)")
+    private String trepanningDepth;
+
+    @Schema(description = "材料预处理")
+    private String preprocess;
+
+    @Schema(description = "材料预处理-其他")
+    private String preprocessOther;
+
+    @Schema(description = "材料性质")
+    private String materialProperties;
+
+    @Schema(description = "材料性质-其他")
+    private String materialPropertiesOther;
+
+    @Schema(description = "数据要求")
+    private String dataRequirements;
+
+    @Schema(description = "数据要求-其他")
+    private String dataRequirementsOther;
+
+    @Schema(description = "图片要求")
+    private String imageRequirements;
+
+    @Schema(description = "roi形态")
+    private String roiForm;
+
+    @Schema(description = "roi-其他(重点观察缺损区内部)")
+    private String roiOther1;
+
+    @Schema(description = "roi-其他要求")
+    private String roiOther2;
+}

+ 68 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/SampleAnimalImaging.java

@@ -0,0 +1,68 @@
+package com.github.jfcloud.gene.sample.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+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 SampleAnimalImaging extends BaseEntity {
+
+    @TableId(type = IdType.INPUT)
+    private Long id;
+
+    @Schema(description = "样本ID")
+    private Long sampleId;
+
+    @Schema(description = "课题组")
+    private String researchGroup;
+
+    private String requirements;
+
+    @Schema(description = "对比方法")
+    private String contrast;
+
+    @Schema(description = "实验目的")
+    private String experimentPurpose;
+
+    @Schema(description = "实验周期(是否定期检测)")
+    private String experimentPeriod;
+
+    @Schema(description = "动物类型")
+    private String animalType;
+
+    @Schema(description = "动物类型-其他")
+    private String animalTypeOther;
+
+    @Schema(description = "品系")
+    private String animalStrain;
+
+    @Schema(description = "数量")
+    private Integer animalQuantity;
+
+    @Schema(description = "性别")
+    private String animalGender;
+
+    @Schema(description = "周/月龄")
+    private String animalAge;
+
+    @Schema(description = "建模信息及分组")
+    private String modelInfo;
+
+    @Schema(description = "预期结果")
+    private String expectedResult;
+
+    @Schema(description = "是否已有该类型成像的动物影像")
+    private String hasPriorImaging;
+
+    @Schema(description = "前期发表论文")
+    private String priorPublications;
+
+    @Schema(description = "备注")
+    private String imagingRemarks;
+}

+ 48 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/UltrasoundDetail.java

@@ -0,0 +1,48 @@
+package com.github.jfcloud.gene.sample.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+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;
+
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@Data
+public class UltrasoundDetail extends Model {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @Schema(description = "动物影像ID")
+    private Long imagingId;
+
+    @Schema(description = "心脏区域")
+    private String heartArea;
+
+    @Schema(description = "心脏区域-其他")
+    private String heartAreaOther;
+
+    @Schema(description = "血管区域")
+    private String vesselArea;
+
+    @Schema(description = "血管区域-其他")
+    private String vesselAreaOther;
+
+    @Schema(description = "腹部区域")
+    private String abdomenArea;
+
+    @Schema(description = "腹部区域-其他")
+    private String abdomenAreaOther;
+
+    @Schema(description = "心超数据")
+    private String heartData;
+
+    @Schema(description = "其他数据")
+    private String otherData;
+
+    @Schema(description = "图片要求")
+    private String imageRequirements;
+}

+ 9 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/LiveImagingDetailMapper.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.LiveImagingDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface LiveImagingDetailMapper extends BaseMapper<LiveImagingDetail> {
+}

+ 9 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/MicroCtDetailMapper.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.MicroCtDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface MicroCtDetailMapper extends BaseMapper<MicroCtDetail> {
+}

+ 9 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/SampleAnimalImagingMapper.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.SampleAnimalImaging;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SampleAnimalImagingMapper extends JfcloudBaseMapper<SampleAnimalImaging> {
+}

+ 9 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/UltrasoundDetailMapper.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.UltrasoundDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface UltrasoundDetailMapper extends BaseMapper<UltrasoundDetail> {
+}

+ 7 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/LiveImagingDetailService.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.LiveImagingDetail;
+
+public interface LiveImagingDetailService extends IService<LiveImagingDetail> {
+}

+ 7 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/MicroCtDetailService.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.MicroCtDetail;
+
+public interface MicroCtDetailService extends IService<MicroCtDetail> {
+}

+ 16 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/SampleAnimalImagingService.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.SampleAnimalImaging;
+import com.github.jfcloud.gene.sample.vo.SampleAnimalImagingVo;
+
+public interface SampleAnimalImagingService extends IService<SampleAnimalImaging> {
+
+    /**
+     * 获取动物影像信息
+     *
+     * @param sampleId
+     * @return
+     */
+    SampleAnimalImagingVo getDetail(Long sampleId);
+}

+ 7 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/UltrasoundDetailService.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.UltrasoundDetail;
+
+public interface UltrasoundDetailService extends IService<UltrasoundDetail> {
+}

+ 11 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/LiveImagingDetailServiceImpl.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.LiveImagingDetail;
+import com.github.jfcloud.gene.sample.mapper.LiveImagingDetailMapper;
+import com.github.jfcloud.gene.sample.service.LiveImagingDetailService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class LiveImagingDetailServiceImpl extends ServiceImpl<LiveImagingDetailMapper, LiveImagingDetail> implements LiveImagingDetailService {
+}

+ 11 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/MicroCtDetailServiceImpl.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.MicroCtDetail;
+import com.github.jfcloud.gene.sample.mapper.MicroCtDetailMapper;
+import com.github.jfcloud.gene.sample.service.MicroCtDetailService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MicroCtDetailServiceImpl extends ServiceImpl<MicroCtDetailMapper, MicroCtDetail> implements MicroCtDetailService {
+}

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

@@ -0,0 +1,127 @@
+package com.github.jfcloud.gene.sample.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+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.sample.entity.LiveImagingDetail;
+import com.github.jfcloud.gene.sample.entity.MicroCtDetail;
+import com.github.jfcloud.gene.sample.entity.SampleAnimalImaging;
+import com.github.jfcloud.gene.sample.entity.UltrasoundDetail;
+import com.github.jfcloud.gene.sample.mapper.SampleAnimalImagingMapper;
+import com.github.jfcloud.gene.sample.service.*;
+import com.github.jfcloud.gene.sample.vo.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class SampleAnimalImagingServiceImpl extends ServiceImpl<SampleAnimalImagingMapper, SampleAnimalImaging> implements SampleAnimalImagingService, SampleEditService {
+
+    private final LiveImagingDetailService liveImagingDetailService;
+    private final MicroCtDetailService microCtDetailService;
+    private final UltrasoundDetailService ultrasoundDetailService;
+
+    @Override
+    public void removeBySampleId(Long sampleId) {
+        List<SampleAnimalImaging> imagings = list(new LambdaQueryWrapper<>(SampleAnimalImaging.class)
+                .select(SampleAnimalImaging::getId)
+                .eq(SampleAnimalImaging::getSampleId, sampleId));
+        if (imagings.isEmpty()) {
+            return;
+        }
+
+        Set<Long> imgIdSet = imagings.stream().map(SampleAnimalImaging::getId).collect(Collectors.toSet());
+        removeBatchByIds(imgIdSet);
+        liveImagingDetailService.remove(new LambdaQueryWrapper<>(LiveImagingDetail.class).in(LiveImagingDetail::getImagingId, imgIdSet));
+        microCtDetailService.remove(new LambdaQueryWrapper<>(MicroCtDetail.class).in(MicroCtDetail::getImagingId, imgIdSet));
+        ultrasoundDetailService.remove(new LambdaQueryWrapper<>(UltrasoundDetail.class).in(UltrasoundDetail::getImagingId, imgIdSet));
+    }
+
+    @Override
+    public void save(Long sampleId, SampleSubmitVo vo) {
+        SampleAnimalImagingVo animalImaging = vo.getAnimalImaging();
+        Assert.notNull(animalImaging, "动物影像不能为空");
+        removeBySampleId(sampleId);
+
+        SampleAnimalImaging sampleAnimalImaging = BeanUtil.copyProperties(animalImaging, SampleAnimalImaging.class);
+        sampleAnimalImaging.setId(CustomIdGenerator.nextId());
+        sampleAnimalImaging.setSampleId(sampleId);
+        sampleAnimalImaging.insert();
+
+        // 保存活体成像信息
+        LiveImagingVo liveImaging = animalImaging.getLiveImaging();
+        if (liveImaging != null) {
+            LiveImagingDetail liveImagingDetail = BeanUtil.copyProperties(liveImaging, LiveImagingDetail.class);
+            liveImagingDetail.setImagingId(sampleAnimalImaging.getId());
+            liveImagingDetail.insert();
+        }
+
+        // 保存Micro-CT信息
+        MicroCtVo microCt = animalImaging.getMicroCt();
+        if (microCt != null) {
+            MicroCtDetail microCtDetail = BeanUtil.copyProperties(microCt, MicroCtDetail.class);
+            microCtDetail.setImagingId(sampleAnimalImaging.getId());
+            microCtDetail.insert();
+        }
+
+        // 保存超声信息
+        UltrasoundVo ultrasound = animalImaging.getUltrasound();
+        if (ultrasound != null) {
+            UltrasoundDetail ultrasoundDetail = BeanUtil.copyProperties(ultrasound, UltrasoundDetail.class);
+            ultrasoundDetail.setImagingId(sampleAnimalImaging.getId());
+            ultrasoundDetail.insert();
+        }
+
+        log.info("保存动物影像成功");
+        generate(sampleId);
+    }
+
+    @Override
+    public void generate(Long sampleId) {
+
+    }
+
+    @Override
+    public SampleAnimalImagingVo getDetail(Long sampleId) {
+        SampleAnimalImaging animalImaging = getOne(new LambdaQueryWrapper<>(SampleAnimalImaging.class)
+                .eq(SampleAnimalImaging::getSampleId, sampleId)
+                .eq(SampleAnimalImaging::getDeleted, WhetherEnum.NO.getCode()));
+        if (animalImaging == null) {
+            return null;
+        }
+
+        SampleAnimalImagingVo animalImagingVo = BeanUtil.copyProperties(animalImaging, SampleAnimalImagingVo.class);
+        // 获取 活体成像信息
+        LiveImagingDetail liveImagingDetail = liveImagingDetailService.getOne(new LambdaQueryWrapper<>(LiveImagingDetail.class)
+                .eq(LiveImagingDetail::getImagingId, animalImaging.getId()));
+        if (liveImagingDetail != null) {
+            LiveImagingVo liveImagingVo = BeanUtil.copyProperties(liveImagingDetail, LiveImagingVo.class);
+            animalImagingVo.setLiveImaging(liveImagingVo);
+        }
+        // 获取Micro-CT信息
+        MicroCtDetail microCtDetail = microCtDetailService.getOne(new LambdaQueryWrapper<>(MicroCtDetail.class)
+                .eq(MicroCtDetail::getImagingId, animalImaging.getId()));
+        if (microCtDetail != null) {
+            MicroCtVo microCtVo = BeanUtil.copyProperties(microCtDetail, MicroCtVo.class);
+            animalImagingVo.setMicroCt(microCtVo);
+        }
+        // 获取超声信息
+        UltrasoundDetail ultrasoundDetail = ultrasoundDetailService.getOne(new LambdaQueryWrapper<>(UltrasoundDetail.class)
+                .eq(UltrasoundDetail::getImagingId, animalImaging.getId()));
+        if (ultrasoundDetail != null) {
+            UltrasoundVo ultrasoundVo = BeanUtil.copyProperties(ultrasoundDetail, UltrasoundVo.class);
+            animalImagingVo.setUltrasound(ultrasoundVo);
+        }
+
+        return animalImagingVo;
+    }
+}

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

@@ -75,10 +75,20 @@ public class SampleAnimalServiceImpl extends ServiceImpl<SampleAnimalMapper, Sam
         removeBatchByIds(sampleAnimalIdSet);
 
         //删除委托单
-        inspectionCommissionMapper.delete(new LambdaQueryWrapper<>(InspectionCommission.class).in(InspectionCommission::getSampleAnimalId, sampleAnimalIdSet));
+        List<InspectionCommission> inspectionCommissions = inspectionCommissionMapper.selectList(new LambdaQueryWrapper<>(InspectionCommission.class)
+                .select(InspectionCommission::getId)
+                .in(InspectionCommission::getSampleAnimalId, sampleAnimalIdSet));
+        Set<Long> commissionIdSet = inspectionCommissions.stream().map(InspectionCommission::getId).collect(Collectors.toSet());
+        inspectionCommissionMapper.deleteBatchIds(commissionIdSet);
+        commissionDetailService.remove(new LambdaQueryWrapper<>(CommissionDetail.class).in(CommissionDetail::getInspectionCommissionId, commissionIdSet));
 
         //删除送检申请单
-        checkOrderMapper.delete(new LambdaQueryWrapper<>(SampleCheckOrder.class).in(SampleCheckOrder::getSampleAnimalId, sampleAnimalIdSet));
+        List<SampleCheckOrder> orders = checkOrderMapper.selectList(new LambdaQueryWrapper<>(SampleCheckOrder.class)
+                .select(SampleCheckOrder::getId)
+                .in(SampleCheckOrder::getSampleAnimalId, sampleAnimalIdSet));
+        Set<Long> orderIdSet = orders.stream().map(SampleCheckOrder::getId).collect(Collectors.toSet());
+        checkOrderMapper.deleteBatchIds(orderIdSet);
+        sampleCheckItemService.remove(new LambdaQueryWrapper<>(SampleCheckItem.class).in(SampleCheckItem::getCheckOrderId, orderIdSet));
     }
 
     @Transactional(rollbackFor = Exception.class)

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

@@ -45,6 +45,7 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
 
     private final SampleAnimalServiceImpl sampleAnimalService;
     private final SamplePathologicalServiceImpl samplePathologicalService;
+    private final SampleAnimalImagingServiceImpl sampleAnimalImagingService;
     private final FlowFileVersionService fileVersionService;
     private final UserIdNameCache userIdNameCache;
     private final FlowAuditService flowAuditService;
@@ -59,6 +60,9 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
         if (SampleTypeEnum.PATHOLOGICAL.getType().equals(type)) {
             return samplePathologicalService;
         }
+        if (SampleTypeEnum.ANIMAL_IMAGE.getType().equals(type)) {
+            return sampleAnimalImagingService;
+        }
 
         log.error("样本检测类型参数错误 type={}", type);
         throw new IllegalArgumentException("样本检测类型参数错误");
@@ -188,8 +192,9 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
             detailDto.setInspector(JSONArray.parseArray(sampleInfo.getInspector()));
         }
 
-        SampleTypeEnum typeEnum = Objects.requireNonNull(SampleTypeEnum.resolve(sampleInfo.getType()));
-        switch (typeEnum) {
+        SampleTypeEnum typeEnum = SampleTypeEnum.resolve(sampleInfo.getType());
+        Assert.notNull(typeEnum, "未知样本类型 type=" + sampleInfo.getType());
+        switch (Objects.requireNonNull(typeEnum)) {
             case PATHOLOGICAL:
                 detailDto.setPathological(samplePathologicalService.getDetail(id));
                 break;
@@ -197,6 +202,7 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
                 detailDto.setAnimal(sampleAnimalService.getDetail(id));
                 break;
             case ANIMAL_IMAGE:
+                detailDto.setAnimalImaging(sampleAnimalImagingService.getDetail(id));
                 break;
         }
 

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

@@ -57,6 +57,7 @@ public class SamplePathologicalServiceImpl extends ServiceImpl<SamplePathologica
         removeBatchByIds(idSet);
 
         preExperimentService.remove(new LambdaQueryWrapper<>(PathologicalPreExperiment.class).in(PathologicalPreExperiment::getPathologicalId, idSet));
+        fileInfoService.remove(new LambdaQueryWrapper<>(FileInfo.class).in(FileInfo::getRelateId, idSet));
     }
 
     @Override

+ 11 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/UltrasoundDetailServiceImpl.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.UltrasoundDetail;
+import com.github.jfcloud.gene.sample.mapper.UltrasoundDetailMapper;
+import com.github.jfcloud.gene.sample.service.UltrasoundDetailService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UltrasoundDetailServiceImpl extends ServiceImpl<UltrasoundDetailMapper, UltrasoundDetail> implements UltrasoundDetailService {
+}

+ 31 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/LiveImagingVo.java

@@ -0,0 +1,31 @@
+package com.github.jfcloud.gene.sample.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Accessors(chain = true)
+@Data
+public class LiveImagingVo {
+
+    @Schema(description = "活体成像类型", example = "荧光成像,生物发光")
+    private String imagingType;
+
+    @Schema(description = "荧光基团/荧光染料")
+    private String fluorophore;
+
+    @Schema(description = "激发光波长(单位:mm)")
+    private String excitationWavelength;
+
+    @Schema(description = "发射光波长(单位:mm)")
+    private String emissionWavelength;
+
+    @Schema(description = "荧光素酶")
+    private String luciferase;
+
+    @Schema(description = "荧光素底物")
+    private String luciferinSubstrate;
+
+    @Schema(description = "具体需求指标")
+    private String specificRequirements;
+}

+ 58 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/MicroCtVo.java

@@ -0,0 +1,58 @@
+package com.github.jfcloud.gene.sample.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Accessors(chain = true)
+@Data
+public class MicroCtVo {
+
+    @Schema(description = "骨骼目标区域", example = "根骨,尺骨")
+    private String boneArea;
+
+    @Schema(description = "骨骼目标区域-其他")
+    private String boneAreaOther;
+
+    @Schema(description = "骨植入位置", example = "关节平台")
+    private String boneImplantPosition;
+
+    @Schema(description = "骨植入位置-其他")
+    private String boneImplantPositionOther;
+
+    @Schema(description = "开孔直径(单位:mm)")
+    private String trepanningDiameter;
+
+    @Schema(description = "开孔深度(单位:mm)")
+    private String trepanningDepth;
+
+    @Schema(description = "材料预处理", example = "材料表面及内部钙涂层材")
+    private String preprocess;
+
+    @Schema(description = "材料预处理-其他")
+    private String preprocessOther;
+
+    @Schema(description = "材料性质", example = "塑料,水泥")
+    private String materialProperties;
+
+    @Schema(description = "材料性质-其他")
+    private String materialPropertiesOther;
+
+    @Schema(description = "数据要求", example = "Tb.Sp")
+    private String dataRequirements;
+
+    @Schema(description = "数据要求-其他")
+    private String dataRequirementsOther;
+
+    @Schema(description = "图片要求")
+    private String imageRequirements;
+
+    @Schema(description = "roi形态")
+    private String roiForm;
+
+    @Schema(description = "roi-其他(重点观察缺损区内部)")
+    private String roiOther1;
+
+    @Schema(description = "roi-其他要求")
+    private String roiOther2;
+}

+ 65 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/SampleAnimalImagingVo.java

@@ -0,0 +1,65 @@
+package com.github.jfcloud.gene.sample.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class SampleAnimalImagingVo {
+
+    @Schema(description = "课题组")
+    private String researchGroup;
+
+    @Schema(description = "需求说明", example = "活体成像,超声,Micro-CT显像")
+    private String requirements;
+
+    @Schema(description = "实验目的")
+    private String experimentPurpose;
+
+    @Schema(description = "实验周期")
+    private String experimentPeriod;
+
+    @Schema(description = "对比方法")
+    private String contrast;
+
+    @Schema(description = "动物类型")
+    private String animalType;
+
+    @Schema(description = "动物类型-其他")
+    private String animalTypeOther;
+
+    @Schema(description = "品系")
+    private String animalStrain;
+
+    @Schema(description = "数量")
+    private Integer animalQuantity;
+
+    @Schema(description = "性别")
+    private String animalGender;
+
+    @Schema(description = "周/月龄")
+    private String animalAge;
+
+    @Schema(description = "建模信息及分组")
+    private String modelInfo;
+
+    @Schema(description = "预期结果")
+    private String expectedResult;
+
+    @Schema(description = "是否已有该类型成像的动物影像")
+    private String hasPriorImaging;
+
+    @Schema(description = "前期发表论文")
+    private String priorPublications;
+
+    @Schema(description = "备注")
+    private String imagingRemarks;
+
+    @Schema(description = "活体成像检测")
+    private LiveImagingVo liveImaging = new LiveImagingVo();
+
+    @Schema(description = "Micro-CT检测")
+    private MicroCtVo microCt = new MicroCtVo();
+
+    @Schema(description = "超声检测")
+    private UltrasoundVo ultrasound = new UltrasoundVo();
+}

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

@@ -64,4 +64,6 @@ public class SampleSubmitVo {
     private SampleAnimalVo animal;
 
     private SamplePathologicalVo pathological;
+
+    private SampleAnimalImagingVo animalImaging;
 }

+ 37 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/UltrasoundVo.java

@@ -0,0 +1,37 @@
+package com.github.jfcloud.gene.sample.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Accessors(chain = true)
+@Data
+public class UltrasoundVo {
+
+    @Schema(description = "心脏区域", example = "左心室长轴")
+    private String heartArea;
+
+    @Schema(description = "心脏区域-其他")
+    private String heartAreaOther;
+
+    @Schema(description = "血管区域", example = "肺动脉")
+    private String vesselArea;
+
+    @Schema(description = "血管区域-其他")
+    private String vesselAreaOther;
+
+    @Schema(description = "腹部区域", example = "肝脏")
+    private String abdomenArea;
+
+    @Schema(description = "腹部区域-其他")
+    private String abdomenAreaOther;
+
+    @Schema(description = "心超数据", example = "LVAWd")
+    private String heartData;
+
+    @Schema(description = "其他数据")
+    private String otherData;
+
+    @Schema(description = "图片要求")
+    private String imageRequirements;
+}