|
@@ -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;
|
|
|
+ }
|
|
|
+}
|