feat(check): T7.3 DICOM image capture + structured report - add AppService layer, align routes to /check/image/* and /check/report/*, add @PreAuthorize infection:check:edit/list
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
package com.healthlink.his.web.check.appservice;
|
||||
|
||||
import com.core.common.core.domain.R;
|
||||
import com.healthlink.his.check.domain.DicomPrintRecord;
|
||||
import com.healthlink.his.check.domain.RadiologyImage;
|
||||
import com.healthlink.his.check.domain.RadiologyImageReport;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IRadiologyImageAppService {
|
||||
|
||||
R<?> saveImage(RadiologyImage image);
|
||||
|
||||
R<?> getImagesByApplyId(Long applyId);
|
||||
|
||||
R<?> getImagesByExamId(Long examId);
|
||||
|
||||
R<?> saveReport(RadiologyImageReport report);
|
||||
|
||||
R<?> getReportPage(String status, String patientName, Integer pageNo, Integer pageSize);
|
||||
|
||||
R<?> submitReport(Long id);
|
||||
|
||||
R<?> verifyReport(Long id, String doctor);
|
||||
|
||||
R<?> savePrintRecord(DicomPrintRecord record);
|
||||
|
||||
R<?> getPrintPage(Integer pageNo, Integer pageSize);
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
package com.healthlink.his.web.check.appservice.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.core.common.core.domain.R;
|
||||
import com.healthlink.his.check.domain.DicomPrintRecord;
|
||||
import com.healthlink.his.check.domain.RadiologyImage;
|
||||
import com.healthlink.his.check.domain.RadiologyImageReport;
|
||||
import com.healthlink.his.check.service.IDicomPrintRecordService;
|
||||
import com.healthlink.his.check.service.IRadiologyImageReportService;
|
||||
import com.healthlink.his.check.service.IRadiologyImageService;
|
||||
import com.healthlink.his.web.check.appservice.IRadiologyImageAppService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class RadiologyImageAppServiceImpl implements IRadiologyImageAppService {
|
||||
|
||||
private final IRadiologyImageService imageService;
|
||||
private final IRadiologyImageReportService reportService;
|
||||
private final IDicomPrintRecordService printService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<?> saveImage(RadiologyImage image) {
|
||||
image.setCreateTime(new Date());
|
||||
imageService.save(image);
|
||||
return R.ok(image);
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<?> getImagesByApplyId(Long applyId) {
|
||||
LambdaQueryWrapper<RadiologyImage> w = new LambdaQueryWrapper<>();
|
||||
w.eq(RadiologyImage::getApplyId, applyId)
|
||||
.orderByAsc(RadiologyImage::getInstanceNumber);
|
||||
return R.ok(imageService.list(w));
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<?> getImagesByExamId(Long examId) {
|
||||
LambdaQueryWrapper<RadiologyImage> w = new LambdaQueryWrapper<>();
|
||||
w.eq(RadiologyImage::getApplyId, examId)
|
||||
.orderByAsc(RadiologyImage::getInstanceNumber);
|
||||
return R.ok(imageService.list(w));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<?> saveReport(RadiologyImageReport report) {
|
||||
if (report.getId() == null) {
|
||||
report.setStatus("DRAFT");
|
||||
report.setCreateTime(new Date());
|
||||
reportService.save(report);
|
||||
} else {
|
||||
report.setUpdateTime(new Date());
|
||||
reportService.updateById(report);
|
||||
}
|
||||
return R.ok(report);
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<?> getReportPage(String status, String patientName, Integer pageNo, Integer pageSize) {
|
||||
LambdaQueryWrapper<RadiologyImageReport> w = new LambdaQueryWrapper<>();
|
||||
w.eq(StringUtils.hasText(status), RadiologyImageReport::getStatus, status)
|
||||
.like(StringUtils.hasText(patientName), RadiologyImageReport::getPatientName, patientName)
|
||||
.orderByDesc(RadiologyImageReport::getCreateTime);
|
||||
return R.ok(reportService.page(new Page<>(pageNo, pageSize), w));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<?> submitReport(Long id) {
|
||||
RadiologyImageReport r = reportService.getById(id);
|
||||
if (r == null) {
|
||||
return R.fail("报告不存在");
|
||||
}
|
||||
r.setStatus("REPORTED");
|
||||
r.setReportTime(new Date());
|
||||
reportService.updateById(r);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<?> verifyReport(Long id, String doctor) {
|
||||
RadiologyImageReport r = reportService.getById(id);
|
||||
if (r == null) {
|
||||
return R.fail("报告不存在");
|
||||
}
|
||||
r.setStatus("VERIFIED");
|
||||
r.setVerifyDoctor(doctor);
|
||||
r.setVerifyTime(new Date());
|
||||
reportService.updateById(r);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<?> savePrintRecord(DicomPrintRecord record) {
|
||||
record.setPrintTime(new Date());
|
||||
record.setCreateTime(new Date());
|
||||
printService.save(record);
|
||||
return R.ok(record);
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<?> getPrintPage(Integer pageNo, Integer pageSize) {
|
||||
LambdaQueryWrapper<DicomPrintRecord> w = new LambdaQueryWrapper<>();
|
||||
w.orderByDesc(DicomPrintRecord::getPrintTime);
|
||||
return R.ok(printService.page(new Page<>(pageNo, pageSize), w));
|
||||
}
|
||||
}
|
||||
@@ -1,132 +1,81 @@
|
||||
package com.healthlink.his.web.check.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.core.common.core.domain.R;
|
||||
import com.healthlink.his.check.domain.*;
|
||||
import com.healthlink.his.check.service.*;
|
||||
import com.healthlink.his.check.domain.DicomPrintRecord;
|
||||
import com.healthlink.his.check.domain.RadiologyImage;
|
||||
import com.healthlink.his.check.domain.RadiologyImageReport;
|
||||
import com.healthlink.his.web.check.appservice.IRadiologyImageAppService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/radiology-image")
|
||||
@RequestMapping("/check")
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class RadiologyImageController {
|
||||
|
||||
private final IRadiologyImageService imageService;
|
||||
private final IRadiologyImageReportService reportService;
|
||||
private final IDicomPrintRecordService printService;
|
||||
private final IRadiologyImageAppService radiologyImageAppService;
|
||||
|
||||
// ==================== 图像管理 ====================
|
||||
|
||||
/** 图像列表 */
|
||||
@GetMapping("/list")
|
||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:list')")
|
||||
public R<?> getImageList(@RequestParam("applyId") Long applyId) {
|
||||
LambdaQueryWrapper<RadiologyImage> w = new LambdaQueryWrapper<>();
|
||||
w.eq(RadiologyImage::getApplyId, applyId)
|
||||
.orderByAsc(RadiologyImage::getInstanceNumber);
|
||||
return R.ok(imageService.list(w));
|
||||
@PostMapping("/image/save")
|
||||
@PreAuthorize("@ss.hasPermi('infection:check:edit')")
|
||||
public R<?> saveImage(@RequestBody RadiologyImage image) {
|
||||
return radiologyImageAppService.saveImage(image);
|
||||
}
|
||||
|
||||
/** 上传影像图像 */
|
||||
@PostMapping("/upload")
|
||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:add')")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<?> uploadImage(@RequestBody RadiologyImage img) {
|
||||
img.setCreateTime(new Date());
|
||||
imageService.save(img);
|
||||
return R.ok(img);
|
||||
@GetMapping("/image/list/{examId}")
|
||||
@PreAuthorize("@ss.hasPermi('infection:check:list')")
|
||||
public R<?> getImageList(@PathVariable Long examId) {
|
||||
return radiologyImageAppService.getImagesByExamId(examId);
|
||||
}
|
||||
|
||||
// ==================== 图文报告 ====================
|
||||
// ==================== 结构化报告 ====================
|
||||
|
||||
@PostMapping("/report/save")
|
||||
@PreAuthorize("@ss.hasPermi('infection:check:edit')")
|
||||
public R<?> saveReport(@RequestBody RadiologyImageReport report) {
|
||||
return radiologyImageAppService.saveReport(report);
|
||||
}
|
||||
|
||||
/** 报告分页查询 */
|
||||
@GetMapping("/report/page")
|
||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:report:list')")
|
||||
@PreAuthorize("@ss.hasPermi('infection:check:list')")
|
||||
public R<?> getReportPage(
|
||||
@RequestParam(value = "status", required = false) String status,
|
||||
@RequestParam(value = "patientName", required = false) String patientName,
|
||||
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
|
||||
LambdaQueryWrapper<RadiologyImageReport> w = new LambdaQueryWrapper<>();
|
||||
w.eq(StringUtils.hasText(status), RadiologyImageReport::getStatus, status)
|
||||
.like(StringUtils.hasText(patientName), RadiologyImageReport::getPatientName, patientName)
|
||||
.orderByDesc(RadiologyImageReport::getCreateTime);
|
||||
return R.ok(reportService.page(new Page<>(pageNo, pageSize), w));
|
||||
return radiologyImageAppService.getReportPage(status, patientName, pageNo, pageSize);
|
||||
}
|
||||
|
||||
/** 新建报告(草稿) */
|
||||
@PostMapping("/report/add")
|
||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:report:add')")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<?> addReport(@RequestBody RadiologyImageReport r) {
|
||||
r.setStatus("DRAFT");
|
||||
r.setCreateTime(new Date());
|
||||
reportService.save(r);
|
||||
return R.ok(r);
|
||||
}
|
||||
|
||||
/** 提交报告 */
|
||||
@PutMapping("/report/submit/{id}")
|
||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:report:edit')")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@PreAuthorize("@ss.hasPermi('infection:check:edit')")
|
||||
public R<?> submitReport(@PathVariable Long id) {
|
||||
RadiologyImageReport r = reportService.getById(id);
|
||||
if (r == null) {
|
||||
return R.fail("报告不存在");
|
||||
}
|
||||
r.setStatus("REPORTED");
|
||||
r.setReportTime(new Date());
|
||||
reportService.updateById(r);
|
||||
return R.ok();
|
||||
return radiologyImageAppService.submitReport(id);
|
||||
}
|
||||
|
||||
/** 审核报告 */
|
||||
@PutMapping("/report/verify/{id}")
|
||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:report:edit')")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@PreAuthorize("@ss.hasPermi('infection:check:edit')")
|
||||
public R<?> verifyReport(@PathVariable Long id,
|
||||
@RequestParam("doctor") String doctor) {
|
||||
RadiologyImageReport r = reportService.getById(id);
|
||||
if (r == null) {
|
||||
return R.fail("报告不存在");
|
||||
}
|
||||
r.setStatus("VERIFIED");
|
||||
r.setVerifyDoctor(doctor);
|
||||
r.setVerifyTime(new Date());
|
||||
reportService.updateById(r);
|
||||
return R.ok();
|
||||
return radiologyImageAppService.verifyReport(id, doctor);
|
||||
}
|
||||
|
||||
// ==================== DICOM打印 ====================
|
||||
|
||||
/** DICOM打印记录 */
|
||||
@PostMapping("/print")
|
||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:print:add')")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@PreAuthorize("@ss.hasPermi('infection:check:edit')")
|
||||
public R<?> printDicom(@RequestBody DicomPrintRecord p) {
|
||||
p.setPrintTime(new Date());
|
||||
p.setCreateTime(new Date());
|
||||
printService.save(p);
|
||||
return R.ok(p);
|
||||
return radiologyImageAppService.savePrintRecord(p);
|
||||
}
|
||||
|
||||
/** 打印记录分页 */
|
||||
@GetMapping("/print/page")
|
||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:print:list')")
|
||||
@PreAuthorize("@ss.hasPermi('infection:check:list')")
|
||||
public R<?> getPrintPage(
|
||||
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
|
||||
LambdaQueryWrapper<DicomPrintRecord> w = new LambdaQueryWrapper<>();
|
||||
w.orderByDesc(DicomPrintRecord::getPrintTime);
|
||||
return R.ok(printService.page(new Page<>(pageNo, pageSize), w));
|
||||
return radiologyImageAppService.getPrintPage(pageNo, pageSize);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import request from '@/utils/request'
|
||||
export function getReportPage(p){return request({url:'/radiology-image/report/page',method:'get',params:p})}
|
||||
export function addReport(d){return request({url:'/radiology-image/report/add',method:'post',data:d})}
|
||||
export function submitReport(id){return request({url:'/radiology-image/report/submit/'+id,method:'put'})}
|
||||
export function verifyReport(id,doctor){return request({url:'/radiology-image/report/verify/'+id,method:'put',params:{doctor}})}
|
||||
export function getImageList(p){return request({url:'/radiology-image/list',method:'get',params:p})}
|
||||
export function printDicom(d){return request({url:'/radiology-image/print',method:'post',data:d})}
|
||||
export function getReportPage(p){return request({url:'/check/report/page',method:'get',params:p})}
|
||||
export function addReport(d){return request({url:'/check/report/save',method:'post',data:d})}
|
||||
export function submitReport(id){return request({url:'/check/report/submit/'+id,method:'put'})}
|
||||
export function verifyReport(id,doctor){return request({url:'/check/report/verify/'+id,method:'put',params:{doctor}})}
|
||||
export function getImageList(examId){return request({url:'/check/image/list/'+examId,method:'get'})}
|
||||
export function printDicom(d){return request({url:'/check/print',method:'post',data:d})}
|
||||
|
||||
Reference in New Issue
Block a user