浏览代码

1、 暂存报告
2、 报告关键字搜索

gengjunfang 1 月之前
父节点
当前提交
ee80b09266

+ 106 - 3
src/main/java/com/zskk/pacsonline/modules/report/controller/ReportController.java

@@ -1,27 +1,34 @@
 package com.zskk.pacsonline.modules.report.controller;
 
+import com.zskk.pacsonline.common.result.BaseDto;
 import com.zskk.pacsonline.component.aop.SystemLogHandler;
 import com.zskk.pacsonline.component.response.RestResult;
 import com.zskk.pacsonline.modules.report.dto.ReportDTO;
 import com.zskk.pacsonline.modules.report.dto.ReportDetailDTO;
+import com.zskk.pacsonline.modules.report.dto.ReportSearchDTO;
+import com.zskk.pacsonline.modules.report.entity.ReportTemp;
 import com.zskk.pacsonline.modules.report.service.ReportDetailService;
 import com.zskk.pacsonline.modules.report.service.ReportService;
-import com.zskk.pacsonline.modules.report.vo.ReportCreateVO;
-import com.zskk.pacsonline.modules.report.vo.ReportDetailQueryVO;
-import com.zskk.pacsonline.modules.report.vo.ReportUpdateVO;
+import com.zskk.pacsonline.modules.report.service.ReportTempService;
+import com.zskk.pacsonline.modules.report.vo.*;
+import com.zskk.pacsonline.utils.JwtUtil;
+import com.zskk.pacsonline.utils.PageUtil;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.responses.ApiResponses;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -44,6 +51,12 @@ public class ReportController {
     @Resource
     private ReportDetailService reportDetailService;
 
+    @Resource
+    private ReportTempService reportTempService;
+
+    @Resource
+    private JwtUtil jwtUtil;
+
     /**
      * 创建报告
      */
@@ -190,4 +203,94 @@ public class ReportController {
             return RestResult.error("查询失败:" + e.getMessage());
         }
     }
+
+    /**
+     * 暂存报告
+     */
+    @Operation(
+        summary = "暂存报告",
+        description = "保存当前医生的报告草稿,本地/远程逻辑与旧版一致;未传报告ID时会自动创建"
+    )
+    @ApiResponses(value = {
+        @ApiResponse(responseCode = "200", description = "暂存成功"),
+        @ApiResponse(responseCode = "400", description = "参数错误"),
+        @ApiResponse(responseCode = "500", description = "服务器内部错误")
+    })
+    @SystemLogHandler("暂存报告|新增")
+    @PostMapping("/stage")
+    public RestResult<?> stageReport(
+            @Parameter(description = "暂存报告参数", required = true, schema = @Schema(implementation = ReportTempSaveVO.class))
+            @RequestBody @Valid ReportTempSaveVO saveVO) {
+        try {
+            ReportTemp draft = reportTempService.saveTempReport(saveVO);
+            Map<String, String> result = new HashMap<>();
+            result.put("reportId", draft.getReportId());
+            result.put("tempId", draft.getId());
+            return RestResult.ok("暂存成功", result);
+        } catch (RuntimeException e) {
+            return RestResult.error(e.getMessage());
+        } catch (Exception e) {
+            return RestResult.error("暂存失败:" + e.getMessage());
+        }
+    }
+
+    /**
+     * 报告关键字搜索(本地报告)
+     */
+    @Operation(
+        summary = "报告关键字搜索",
+        description = "按关键字模糊查询本地报告的印象/描述并高亮返回,机构ID从token获取"
+    )
+    @ApiResponses(value = {
+        @ApiResponse(responseCode = "200", description = "查询成功"),
+        @ApiResponse(responseCode = "400", description = "参数错误"),
+        @ApiResponse(responseCode = "401", description = "未授权"),
+        @ApiResponse(responseCode = "500", description = "服务器内部错误")
+    })
+    @SystemLogHandler("报告关键字搜索|查询")
+    @PostMapping("/search")
+    public RestResult<?> searchReport(
+            @Parameter(description = "关键字搜索参数", required = true, schema = @Schema(implementation = ReportKeywordQueryVO.class))
+            @RequestBody @Valid ReportKeywordQueryVO queryVO,
+            HttpServletRequest request) {
+        try {
+            String token = getTokenFromRequest(request);
+            String institutionId = jwtUtil.getCurrentOrgFromToken(token);
+            if (org.apache.commons.lang3.StringUtils.isBlank(institutionId)) {
+                return RestResult.error("无法获取机构信息");
+            }
+
+            List<ReportSearchDTO> list = reportService.searchReportByKeyword(queryVO, institutionId);
+            highlightKeyword(list, queryVO.getFuzzySearch());
+            BaseDto result = PageUtil.listToBaseDto(list);
+            return RestResult.ok("查询成功", result);
+        } catch (RuntimeException e) {
+            return RestResult.error(e.getMessage());
+        } catch (Exception e) {
+            return RestResult.error("查询失败:" + e.getMessage());
+        }
+    }
+
+    private void highlightKeyword(List<ReportSearchDTO> list, String keyword) {
+        if (list == null || StringUtils.isBlank(keyword)) {
+            return;
+        }
+        String highlight = "<span style='color:red'>" + keyword + "</span>";
+        for (ReportSearchDTO dto : list) {
+            if (StringUtils.isNotBlank(dto.getImpression())) {
+                dto.setImpression(dto.getImpression().replace(keyword, highlight));
+            }
+            if (StringUtils.isNotBlank(dto.getDescription())) {
+                dto.setDescription(dto.getDescription().replace(keyword, highlight));
+            }
+        }
+    }
+
+    private String getTokenFromRequest(HttpServletRequest request) {
+        String token = request.getHeader("Authorization");
+        if (StringUtils.isBlank(token)) {
+            token = request.getHeader("token");
+        }
+        return token;
+    }
 }

+ 36 - 0
src/main/java/com/zskk/pacsonline/modules/report/dto/ReportSearchDTO.java

@@ -0,0 +1,36 @@
+package com.zskk.pacsonline.modules.report.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 报告关键字搜索结果
+ */
+@Data
+@Schema(description = "报告关键字搜索结果")
+public class ReportSearchDTO {
+
+    @Schema(description = "患者姓名")
+    private String name;
+
+    @Schema(description = "影像所见(已高亮)")
+    private String description;
+
+    @Schema(description = "诊断印象(已高亮)")
+    private String impression;
+
+    @Schema(description = "检查ID")
+    private String examId;
+
+    @Schema(description = "studyId")
+    private String studyId;
+
+    @Schema(description = "报告ID")
+    private String reportId;
+
+    @Schema(description = "检查类别")
+    private String examClass;
+
+    @Schema(description = "检查状态")
+    private Integer examStatus;
+}

+ 27 - 3
src/main/java/com/zskk/pacsonline/modules/report/entity/ReportTemp.java

@@ -32,12 +32,30 @@ public class ReportTemp implements Serializable {
     @TableField("report_id")
     private String reportId;
 
+    /**
+     * 检查ID
+     */
+    @TableField("exam_id")
+    private String examId;
+
     /**
      * 医生ID
      */
     @TableField("doctor_id")
     private String doctorId;
 
+    /**
+     * 是否远程(1:远程,2:本地)
+     */
+    @TableField("is_remote")
+    private Integer isRemote;
+
+    /**
+     * 远程申请单ID
+     */
+    @TableField("remote_application_id")
+    private String remoteApplicationId;
+
     /**
      * 影像所见
      */
@@ -50,6 +68,12 @@ public class ReportTemp implements Serializable {
     @TableField("impression")
     private String impression;
 
+    /**
+     * 阴阳性
+     */
+    @TableField("report_result")
+    private String reportResult;
+
     /**
      * 创建时间
      */
@@ -57,8 +81,8 @@ public class ReportTemp implements Serializable {
     private Date createTime;
 
     /**
-     * 更新时间
+     * 状态(1:正常,0:删除)
      */
-    @TableField("update_time")
-    private Date updateTime;
+    @TableField("status")
+    private Integer status;
 }

+ 21 - 0
src/main/java/com/zskk/pacsonline/modules/report/mapper/RemoteApplicationMapper.java

@@ -0,0 +1,21 @@
+package com.zskk.pacsonline.modules.report.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+/**
+ * 远程申请单查询
+ */
+@Mapper
+public interface RemoteApplicationMapper {
+
+    /**
+     * 根据检查ID查询远程申请单ID
+     *
+     * @param examId 检查ID
+     * @return 远程申请单ID
+     */
+    @Select("SELECT id FROM remote_application WHERE exam_id = #{examId} LIMIT 1")
+    String selectIdByExamId(@Param("examId") String examId);
+}

+ 24 - 0
src/main/java/com/zskk/pacsonline/modules/report/mapper/ReportSearchMapper.java

@@ -0,0 +1,24 @@
+package com.zskk.pacsonline.modules.report.mapper;
+
+import com.zskk.pacsonline.modules.report.dto.ReportSearchDTO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 报告关键字搜索
+ */
+@Mapper
+public interface ReportSearchMapper {
+
+    /**
+     * 关键字搜索报告(仅本地报告)
+     *
+     * @param institutionId 机构ID
+     * @param keyword       关键字
+     * @return 报告列表
+     */
+    List<ReportSearchDTO> searchReportByKeyword(@Param("institutionId") String institutionId,
+                                                @Param("keyword") String keyword);
+}

+ 26 - 0
src/main/java/com/zskk/pacsonline/modules/report/mapper/xml/ReportSearchMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zskk.pacsonline.modules.report.mapper.ReportSearchMapper">
+
+    <select id="searchReportByKeyword" resultType="com.zskk.pacsonline.modules.report.dto.ReportSearchDTO">
+        SELECT
+            e.name,
+            r.impression,
+            r.description,
+            e.id AS examId,
+            e.studyid AS studyId,
+            r.id AS reportId,
+            e.exam_class AS examClass,
+            e.exam_status AS examStatus
+        FROM report r
+            LEFT JOIN exams e ON e.id = r.exam_id
+        WHERE
+            e.institution_id = #{institutionId}
+            AND r.type = '1'
+            AND (
+                r.impression LIKE CONCAT('%', #{keyword}, '%')
+                OR r.description LIKE CONCAT('%', #{keyword}, '%')
+            )
+    </select>
+
+</mapper>

+ 12 - 0
src/main/java/com/zskk/pacsonline/modules/report/service/ReportService.java

@@ -5,6 +5,10 @@ import com.zskk.pacsonline.modules.report.entity.Report;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zskk.pacsonline.modules.report.vo.ReportCreateVO;
 import com.zskk.pacsonline.modules.report.vo.ReportUpdateVO;
+import com.zskk.pacsonline.modules.report.vo.ReportKeywordQueryVO;
+import com.zskk.pacsonline.modules.report.dto.ReportSearchDTO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -43,4 +47,12 @@ public interface ReportService extends IService<Report> {
      * @return 报告详情
      */
     ReportDTO getReportByExamId(String examId);
+
+    /**
+     * 关键字搜索报告(仅本地报告)
+     * @param queryVO 搜索参数
+     * @param institutionId 机构ID(从token获取)
+     * @return 报告列表
+     */
+    List<ReportSearchDTO> searchReportByKeyword(ReportKeywordQueryVO queryVO, String institutionId);
 }

+ 18 - 0
src/main/java/com/zskk/pacsonline/modules/report/service/ReportTempService.java

@@ -0,0 +1,18 @@
+package com.zskk.pacsonline.modules.report.service;
+
+import com.zskk.pacsonline.modules.report.entity.ReportTemp;
+import com.zskk.pacsonline.modules.report.vo.ReportTempSaveVO;
+
+/**
+ * 报告暂存服务
+ */
+public interface ReportTempService {
+
+    /**
+     * 暂存报告内容
+     *
+     * @param saveVO 入参
+     * @return 最新暂存记录
+     */
+    ReportTemp saveTempReport(ReportTempSaveVO saveVO);
+}

+ 2 - 1
src/main/java/com/zskk/pacsonline/modules/report/service/impl/ReportDetailServiceImpl.java

@@ -460,7 +460,8 @@ public class ReportDetailServiceImpl implements ReportDetailService {
         LambdaQueryWrapper<ReportTemp> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(ReportTemp::getReportId, reportId)
                .eq(ReportTemp::getDoctorId, userId)
-               .orderByDesc(ReportTemp::getUpdateTime)
+               .eq(ReportTemp::getStatus, 1)
+               .orderByDesc(ReportTemp::getCreateTime)
                .last("LIMIT 1");
 
         return reportTempMapper.selectOne(wrapper);

+ 16 - 0
src/main/java/com/zskk/pacsonline/modules/report/service/impl/ReportServiceImpl.java

@@ -1,18 +1,24 @@
 package com.zskk.pacsonline.modules.report.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.pagehelper.PageHelper;
 import com.zskk.pacsonline.modules.report.dto.ReportDTO;
+import com.zskk.pacsonline.modules.report.dto.ReportSearchDTO;
 import com.zskk.pacsonline.modules.report.entity.Report;
 import com.zskk.pacsonline.modules.report.mapper.ReportMapper;
+import com.zskk.pacsonline.modules.report.mapper.ReportSearchMapper;
 import com.zskk.pacsonline.modules.report.service.ReportService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zskk.pacsonline.modules.report.vo.ReportCreateVO;
+import com.zskk.pacsonline.modules.report.vo.ReportKeywordQueryVO;
 import com.zskk.pacsonline.modules.report.vo.ReportUpdateVO;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
+import java.util.List;
+import javax.annotation.Resource;
 
 /**
  * <p>
@@ -25,6 +31,9 @@ import java.util.Date;
 @Service
 public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportService {
 
+    @Resource
+    private ReportSearchMapper reportSearchMapper;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String createReport(ReportCreateVO createVO) {
@@ -119,4 +128,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         BeanUtils.copyProperties(report, reportDTO);
         return reportDTO;
     }
+
+    @Override
+    public List<ReportSearchDTO> searchReportByKeyword(ReportKeywordQueryVO queryVO, String institutionId) {
+        PageHelper.startPage(queryVO.getPageNum(), queryVO.getPageSize());
+        String keyword = queryVO.getFuzzySearch();
+        return reportSearchMapper.searchReportByKeyword(institutionId, keyword);
+    }
 }

+ 188 - 0
src/main/java/com/zskk/pacsonline/modules/report/service/impl/ReportTempServiceImpl.java

@@ -0,0 +1,188 @@
+package com.zskk.pacsonline.modules.report.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zskk.pacsonline.modules.doctor.entity.Doctors;
+import com.zskk.pacsonline.modules.doctor.mapper.DoctorsMapper;
+import com.zskk.pacsonline.modules.report.entity.Report;
+import com.zskk.pacsonline.modules.report.entity.ReportTemp;
+import com.zskk.pacsonline.modules.report.mapper.RemoteApplicationMapper;
+import com.zskk.pacsonline.modules.report.mapper.ReportMapper;
+import com.zskk.pacsonline.modules.report.mapper.ReportTempMapper;
+import com.zskk.pacsonline.modules.report.service.ReportTempService;
+import com.zskk.pacsonline.modules.report.vo.ReportTempSaveVO;
+import com.zskk.pacsonline.security.LoginUser;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * 报告暂存服务实现
+ */
+@Slf4j
+@Service
+public class ReportTempServiceImpl implements ReportTempService {
+
+    @Resource
+    private ReportTempMapper reportTempMapper;
+
+    @Resource
+    private ReportMapper reportMapper;
+
+    @Resource
+    private DoctorsMapper doctorsMapper;
+
+    @Resource
+    private RemoteApplicationMapper remoteApplicationMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public ReportTemp saveTempReport(ReportTempSaveVO saveVO) {
+        String doctorId = getCurrentDoctorId();
+        if (StringUtils.isBlank(doctorId)) {
+            throw new RuntimeException("无法获取当前医生信息");
+        }
+
+        Integer isRemote = saveVO.getIsRemote();
+        if (isRemote == null) {
+            throw new RuntimeException("报告类型不能为空");
+        }
+
+        // 如果没有报告ID,则自动生成报告
+        String reportId = StringUtils.defaultIfBlank(saveVO.getReportId(), null);
+        if (StringUtils.isBlank(reportId)) {
+            reportId = createReport(saveVO.getExamId(), isRemote);
+        }
+
+        String remoteApplicationId = null;
+        if (isRemote == 1) {
+            remoteApplicationId = getRemoteApplicationId(saveVO.getExamId());
+        }
+
+        ReportTemp draft = findDraft(reportId, doctorId);
+        Date now = new Date();
+        String reportResult = StringUtils.defaultIfBlank(saveVO.getReportResult(), "1");
+
+        if (draft == null) {
+            draft = new ReportTemp();
+            draft.setReportId(reportId);
+            draft.setExamId(saveVO.getExamId());
+            draft.setDoctorId(doctorId);
+            draft.setIsRemote(isRemote);
+            draft.setRemoteApplicationId(remoteApplicationId);
+            draft.setDescription(saveVO.getDescription());
+            draft.setImpression(saveVO.getImpression());
+            draft.setReportResult(reportResult);
+            draft.setCreateTime(now);
+            draft.setStatus(1);
+
+            int rows = reportTempMapper.insert(draft);
+            if (rows <= 0) {
+                throw new RuntimeException("暂存失败");
+            }
+            log.info("新增暂存报告,reportId={}, doctorId={}", reportId, doctorId);
+        } else {
+            draft.setExamId(saveVO.getExamId());
+            draft.setIsRemote(isRemote);
+            draft.setRemoteApplicationId(remoteApplicationId);
+            draft.setDescription(saveVO.getDescription());
+            draft.setImpression(saveVO.getImpression());
+            draft.setReportResult(reportResult);
+            draft.setCreateTime(now);
+            draft.setStatus(1);
+
+            int rows = reportTempMapper.updateById(draft);
+            if (rows <= 0) {
+                throw new RuntimeException("暂存失败");
+            }
+            log.info("更新暂存报告,reportId={}, doctorId={}", reportId, doctorId);
+        }
+
+        return draft;
+    }
+
+    private ReportTemp findDraft(String reportId, String doctorId) {
+        LambdaQueryWrapper<ReportTemp> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ReportTemp::getReportId, reportId)
+               .eq(ReportTemp::getDoctorId, doctorId)
+               .eq(ReportTemp::getStatus, 1)
+               .last("LIMIT 1");
+        return reportTempMapper.selectOne(wrapper);
+    }
+
+    private String createReport(String examId, Integer isRemote) {
+        Report report = new Report();
+        report.setExamId(examId);
+        String type = (isRemote != null && isRemote == 2) ? "1" : "2";
+        report.setType(type);
+
+        if (StringUtils.equals(type, "2")) {
+            report.setRemoteApplicationId(getRemoteApplicationId(examId));
+        }
+
+        report.setReportResult("1");
+        Date now = new Date();
+        report.setCreateTime(now);
+        report.setUpdatedTime(now);
+
+        int rows = reportMapper.insert(report);
+        if (rows <= 0) {
+            throw new RuntimeException("创建报告失败");
+        }
+        log.info("自动创建报告成功,reportId={}", report.getId());
+        return report.getId();
+    }
+
+    private String getRemoteApplicationId(String examId) {
+        if (StringUtils.isBlank(examId)) {
+            return null;
+        }
+        String raId = remoteApplicationMapper.selectIdByExamId(examId);
+        if (StringUtils.isBlank(raId)) {
+            throw new RuntimeException("未找到对应的远程申请单");
+        }
+        return raId;
+    }
+
+    private String getCurrentDoctorId() {
+        try {
+            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+            if (authentication == null || authentication.getPrincipal() == null) {
+                log.warn("未找到登录用户信息");
+                return null;
+            }
+
+            Object principal = authentication.getPrincipal();
+            if (!(principal instanceof LoginUser)) {
+                log.warn("Principal 不是 LoginUser 类型: {}", principal.getClass().getName());
+                return null;
+            }
+
+            LoginUser loginUser = (LoginUser) principal;
+            if (loginUser.getUser() == null || StringUtils.isBlank(loginUser.getUser().getId())) {
+                log.warn("LoginUser 中未找到用户信息");
+                return null;
+            }
+
+            String sysUserId = loginUser.getUser().getId();
+            LambdaQueryWrapper<Doctors> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(Doctors::getUid, sysUserId).last("LIMIT 1");
+
+            Doctors doctor = doctorsMapper.selectOne(wrapper);
+            if (doctor == null) {
+                log.warn("未找到系统用户对应的医生信息,sysUserId={}", sysUserId);
+                return null;
+            }
+
+            return doctor.getId();
+        } catch (Exception e) {
+            log.error("获取当前医生ID失败", e);
+            return null;
+        }
+    }
+}

+ 30 - 0
src/main/java/com/zskk/pacsonline/modules/report/vo/ReportKeywordQueryVO.java

@@ -0,0 +1,30 @@
+package com.zskk.pacsonline.modules.report.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 报告关键字搜索入参
+ */
+@Data
+@Schema(description = "报告关键字搜索参数")
+public class ReportKeywordQueryVO {
+
+    @Schema(description = "关键字", required = true, example = "头痛")
+    @NotBlank(message = "关键字不能为空")
+    private String fuzzySearch;
+
+    @Schema(description = "页码,从1开始", required = true, example = "1")
+    @NotNull(message = "页码不能为空")
+    @Min(value = 1, message = "页码至少为1")
+    private Integer pageNum;
+
+    @Schema(description = "每页数量", required = true, example = "10")
+    @NotNull(message = "每页数量不能为空")
+    @Min(value = 1, message = "每页数量至少为1")
+    private Integer pageSize;
+}

+ 37 - 0
src/main/java/com/zskk/pacsonline/modules/report/vo/ReportTempSaveVO.java

@@ -0,0 +1,37 @@
+package com.zskk.pacsonline.modules.report.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 暂存报告入参
+ */
+@Data
+@Schema(description = "暂存报告参数")
+public class ReportTempSaveVO {
+
+    @Schema(description = "检查ID", required = true)
+    @NotBlank(message = "检查ID不能为空")
+    private String examId;
+
+    @Schema(description = "报告ID,传空时自动创建")
+    private String reportId;
+
+    @Schema(description = "是否远程:1=远程,2=本地", required = true, example = "2")
+    @NotNull(message = "报告类型不能为空")
+    private Integer isRemote;
+
+    @Schema(description = "影像所见", required = true)
+    @NotBlank(message = "影像所见不能为空")
+    private String description;
+
+    @Schema(description = "诊断印象", required = true)
+    @NotBlank(message = "诊断印象不能为空")
+    private String impression;
+
+    @Schema(description = "阴阳性结果(默认1阴性)", example = "1")
+    private String reportResult;
+}