Просмотр исходного кода

Update 添加样品界面可以查看关联的实验详情

Yue 1 месяц назад
Родитель
Сommit
400788196e

+ 9 - 0
SERVER/ChickenFarmV3/vb-modules/vb-experiment/src/main/java/cn/vber/experiment/controller/SampleController.java

@@ -2,6 +2,7 @@ package cn.vber.experiment.controller;
 
 import java.util.List;
 
+import cn.vber.experiment.domain.vo.ExperimentVo;
 import cn.vber.experiment.domain.vo.SampleFlowVo;
 import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
@@ -131,4 +132,12 @@ public class SampleController extends BaseController {
     public R<List<SampleFlowVo>> queryFlowLogs(@NotNull(message = "主键不能为空") @PathVariable Long id) {
         return R.ok(sampleService.queryFlowLogs(id));
     }
+
+    @SaCheckPermission("experiment:sample:query")
+    @Log(title = "实验样本", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @GetMapping("/queryExperiment/{id}")
+    public R<ExperimentVo> queryExperimentBySampleId(@NotNull(message = "主键不能为空") @PathVariable Long id) {
+        return R.ok(sampleService.queryExperimentBySampleId(id));
+    }
 }

+ 7 - 0
SERVER/ChickenFarmV3/vb-modules/vb-experiment/src/main/java/cn/vber/experiment/service/ISampleService.java

@@ -1,12 +1,14 @@
 package cn.vber.experiment.service;
 
 import cn.vber.experiment.domain.Sample;
+import cn.vber.experiment.domain.vo.ExperimentVo;
 import cn.vber.experiment.domain.vo.SampleFlowVo;
 import cn.vber.experiment.domain.vo.SampleVo;
 import cn.vber.experiment.domain.bo.SampleBo;
 import cn.vber.common.mybatis.core.page.TableDataInfo;
 import cn.vber.common.mybatis.core.page.PageQuery;
 import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
 
 import java.util.Collection;
 import java.util.List;
@@ -65,4 +67,9 @@ public interface ISampleService {
      * 查询实验样本详情
      */
     SampleVo querySample(Long id);
+
+    /**
+     * 根据样本id查询实验信息
+     */
+    ExperimentVo queryExperimentBySampleId(Long id);
 }

+ 1 - 2
SERVER/ChickenFarmV3/vb-modules/vb-experiment/src/main/java/cn/vber/experiment/service/impl/ExperimentServiceImpl.java

@@ -59,9 +59,8 @@ public class ExperimentServiceImpl implements IExperimentService {
      */
     @Override
     public ExperimentVo queryById(Long id) {
-        List<ExperimentSampleVo> sampleList = experimentSampleMapper.selectVoList(new LambdaQueryWrapper<ExperimentSample>().eq(ExperimentSample::getExperimentId, id));
-
         ExperimentVo experimentVo = baseMapper.selectVoById(id);
+        List<ExperimentSampleVo> sampleList = experimentSampleMapper.selectVoList(new LambdaQueryWrapper<ExperimentSample>().eq(ExperimentSample::getExperimentId, id));
         experimentVo.setSampleList(sampleList);
         return experimentVo;
     }

+ 28 - 0
SERVER/ChickenFarmV3/vb-modules/vb-experiment/src/main/java/cn/vber/experiment/service/impl/SampleServiceImpl.java

@@ -5,12 +5,18 @@ import cn.vber.common.core.service.SampleService;
 import cn.vber.common.core.utils.DateUtils;
 import cn.vber.common.core.utils.MapstructUtils;
 import cn.vber.common.core.utils.StringUtils;
+import cn.vber.common.mybatis.core.mapper.BaseMapperPlus;
 import cn.vber.common.mybatis.core.page.TableDataInfo;
 import cn.vber.common.mybatis.core.page.PageQuery;
 import cn.vber.common.satoken.utils.LoginHelper;
+import cn.vber.experiment.domain.ExperimentSample;
 import cn.vber.experiment.domain.SampleFlow;
+import cn.vber.experiment.domain.vo.ExperimentSampleVo;
+import cn.vber.experiment.domain.vo.ExperimentVo;
 import cn.vber.experiment.domain.vo.SampleFlowVo;
 import cn.vber.experiment.enums.SampleStatusEnum;
+import cn.vber.experiment.mapper.ExperimentMapper;
+import cn.vber.experiment.mapper.ExperimentSampleMapper;
 import cn.vber.experiment.mapper.SampleFlowMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -40,6 +46,8 @@ public class SampleServiceImpl implements ISampleService, SampleService {
 
     private final SampleMapper baseMapper;
     private final SampleFlowMapper flowMapper;
+    private final ExperimentSampleMapper experimentSampleMapper;
+    private final ExperimentMapper experimentMapper;
 
     /**
      * 查询实验样本
@@ -193,6 +201,26 @@ public class SampleServiceImpl implements ISampleService, SampleService {
         return sample;
     }
 
+    @Override
+    public ExperimentVo queryExperimentBySampleId(Long id) {
+        Sample sample = baseMapper.selectById(id);
+        if (sample == null) {
+            throw new ServiceException("查询样本不存在");
+        }
+        if (!Objects.equals(sample.getSampleStatus(), SampleStatusEnum.EXPERIMENTING.getStatus())) {
+            throw new ServiceException("样本状态错误");
+        }
+        ExperimentSample experimentSample = experimentSampleMapper.selectList(new LambdaQueryWrapper<ExperimentSample>()
+                .eq(ExperimentSample::getSampleId, id)).get(0);
+        if (experimentSample == null) {
+            throw new ServiceException("样本未加入实验");
+        }
+        ExperimentVo experimentVo = experimentMapper.selectVoById(experimentSample.getExperimentId());
+        List<ExperimentSampleVo> sampleList = experimentSampleMapper.selectVoList(new LambdaQueryWrapper<ExperimentSample>().eq(ExperimentSample::getExperimentId, experimentSample.getExperimentId()));
+        experimentVo.setSampleList(sampleList);
+        return experimentVo;
+    }
+
     @Override
     public String selectNameById(long id) {
         return baseMapper.selectById(id).getSampleName();

+ 6 - 0
UI/VB.VUE/src/api/experiment/_sample.ts

@@ -88,6 +88,12 @@ class sampleApi {
 			url: "/experiment/sample/queryFlowLogs/" + id
 		})
 	}
+
+	queryExperiment = (id: string | number) => {
+		return Rs.get({
+			url: "/experiment/sample/queryExperiment/" + id
+		})
+	}
 }
 
 export default sampleApi

+ 31 - 2
UI/VB.VUE/src/views/experiment/sample/_sample.vue

@@ -4,6 +4,7 @@ import dayjs from "dayjs"
 import ChickenModal from "@v/common/modal/chickenModal.vue"
 import vueQr from "vue-qr/src/packages/vue-qr.vue"
 import type { ToolBtn } from "@@@/table/models"
+import EDetail from "../experiment/_detail.vue"
 
 const props = withDefaults(
 	defineProps<{
@@ -364,6 +365,22 @@ function handleDownloadQr(id: string) {
 	a.download = `${qrModalData.value.taskName}签到二维码`
 	a.click()
 }
+
+const detailRef = ref()
+function handleDetail(row: any) {
+	apis.experiment.sampleApi.queryExperiment(row.id).then((res) => {
+		detailRef.value.open(res.data)
+	})
+}
+const pdfPreviewRef = ref()
+function handlePreviewPdf(file: string) {
+	const fileId = file.split("$")[0],
+		fileName = file.split("$")[1]
+	pdfPreviewRef.value.open({
+		fileId,
+		fileName
+	})
+}
 // function handlePrintQr(id: string) {
 // 	const printContent = document.querySelector("#" + id)
 // 	if (!printContent) return
@@ -507,7 +524,16 @@ function handleDownloadQr(id: string) {
 						</el-button>
 					</vb-tooltip>
 				</template>
-				<template v-if="row.sampleStatus == 4">
+				<template v-if="row.sampleStatus == 3">
+					<vb-tooltip v-if="checkBtnShow('destroy', row)" content="实验详情" placement="top">
+						<el-button link type="warning" @click="handleDetail(row)">
+							<template #icon>
+								<VbIcon icon-name="book-open" icon-type="duotone" class="fs-3"></VbIcon>
+							</template>
+						</el-button>
+					</vb-tooltip>
+				</template>
+				<template v-if="row.sampleStatus == 1 || row.sampleStatus == 4">
 					<vb-tooltip v-if="checkBtnShow('delete', row)" content="删除" placement="top">
 						<el-button
 							link
@@ -578,7 +604,7 @@ function handleDownloadQr(id: string) {
 			<template #body>
 				<el-table :data="flowData" :show-header="false">
 					<!-- <el-table-column label="序号" type="index" width="60" align="center"></el-table-column> -->
-					<el-table-column label="序号" width="60" prop="id" align="center"></el-table-column>
+					<el-table-column label="序号" width="100" prop="id" align="center"></el-table-column>
 					<el-table-column label="操作人" prop="handlerName" align="center"></el-table-column>
 					<el-table-column label="操作时间" prop="handleTime" align="center">
 						<template #default="{ row }">
@@ -588,5 +614,8 @@ function handleDownloadQr(id: string) {
 				</el-table>
 			</template>
 		</VbModal>
+		<EDetail ref="detailRef"></EDetail>
+
+		<VbPdfPreview ref="pdfPreviewRef" />
 	</div>
 </template>