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;
|
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.core.common.core.domain.R;
|
||||||
import com.healthlink.his.check.domain.*;
|
import com.healthlink.his.check.domain.DicomPrintRecord;
|
||||||
import com.healthlink.his.check.service.*;
|
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.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
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 org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/radiology-image")
|
@RequestMapping("/check")
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class RadiologyImageController {
|
public class RadiologyImageController {
|
||||||
|
|
||||||
private final IRadiologyImageService imageService;
|
private final IRadiologyImageAppService radiologyImageAppService;
|
||||||
private final IRadiologyImageReportService reportService;
|
|
||||||
private final IDicomPrintRecordService printService;
|
|
||||||
|
|
||||||
// ==================== 图像管理 ====================
|
// ==================== 图像管理 ====================
|
||||||
|
|
||||||
/** 图像列表 */
|
@PostMapping("/image/save")
|
||||||
@GetMapping("/list")
|
@PreAuthorize("@ss.hasPermi('infection:check:edit')")
|
||||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:list')")
|
public R<?> saveImage(@RequestBody RadiologyImage image) {
|
||||||
public R<?> getImageList(@RequestParam("applyId") Long applyId) {
|
return radiologyImageAppService.saveImage(image);
|
||||||
LambdaQueryWrapper<RadiologyImage> w = new LambdaQueryWrapper<>();
|
|
||||||
w.eq(RadiologyImage::getApplyId, applyId)
|
|
||||||
.orderByAsc(RadiologyImage::getInstanceNumber);
|
|
||||||
return R.ok(imageService.list(w));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 上传影像图像 */
|
@GetMapping("/image/list/{examId}")
|
||||||
@PostMapping("/upload")
|
@PreAuthorize("@ss.hasPermi('infection:check:list')")
|
||||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:add')")
|
public R<?> getImageList(@PathVariable Long examId) {
|
||||||
@Transactional(rollbackFor = Exception.class)
|
return radiologyImageAppService.getImagesByExamId(examId);
|
||||||
public R<?> uploadImage(@RequestBody RadiologyImage img) {
|
|
||||||
img.setCreateTime(new Date());
|
|
||||||
imageService.save(img);
|
|
||||||
return R.ok(img);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== 图文报告 ====================
|
// ==================== 结构化报告 ====================
|
||||||
|
|
||||||
|
@PostMapping("/report/save")
|
||||||
|
@PreAuthorize("@ss.hasPermi('infection:check:edit')")
|
||||||
|
public R<?> saveReport(@RequestBody RadiologyImageReport report) {
|
||||||
|
return radiologyImageAppService.saveReport(report);
|
||||||
|
}
|
||||||
|
|
||||||
/** 报告分页查询 */
|
|
||||||
@GetMapping("/report/page")
|
@GetMapping("/report/page")
|
||||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:report:list')")
|
@PreAuthorize("@ss.hasPermi('infection:check:list')")
|
||||||
public R<?> getReportPage(
|
public R<?> getReportPage(
|
||||||
@RequestParam(value = "status", required = false) String status,
|
@RequestParam(value = "status", required = false) String status,
|
||||||
@RequestParam(value = "patientName", required = false) String patientName,
|
@RequestParam(value = "patientName", required = false) String patientName,
|
||||||
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||||
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
|
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
|
||||||
LambdaQueryWrapper<RadiologyImageReport> w = new LambdaQueryWrapper<>();
|
return radiologyImageAppService.getReportPage(status, patientName, pageNo, pageSize);
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 新建报告(草稿) */
|
|
||||||
@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}")
|
@PutMapping("/report/submit/{id}")
|
||||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:report:edit')")
|
@PreAuthorize("@ss.hasPermi('infection:check:edit')")
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public R<?> submitReport(@PathVariable Long id) {
|
public R<?> submitReport(@PathVariable Long id) {
|
||||||
RadiologyImageReport r = reportService.getById(id);
|
return radiologyImageAppService.submitReport(id);
|
||||||
if (r == null) {
|
|
||||||
return R.fail("报告不存在");
|
|
||||||
}
|
|
||||||
r.setStatus("REPORTED");
|
|
||||||
r.setReportTime(new Date());
|
|
||||||
reportService.updateById(r);
|
|
||||||
return R.ok();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 审核报告 */
|
|
||||||
@PutMapping("/report/verify/{id}")
|
@PutMapping("/report/verify/{id}")
|
||||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:report:edit')")
|
@PreAuthorize("@ss.hasPermi('infection:check:edit')")
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public R<?> verifyReport(@PathVariable Long id,
|
public R<?> verifyReport(@PathVariable Long id,
|
||||||
@RequestParam("doctor") String doctor) {
|
@RequestParam("doctor") String doctor) {
|
||||||
RadiologyImageReport r = reportService.getById(id);
|
return radiologyImageAppService.verifyReport(id, doctor);
|
||||||
if (r == null) {
|
|
||||||
return R.fail("报告不存在");
|
|
||||||
}
|
|
||||||
r.setStatus("VERIFIED");
|
|
||||||
r.setVerifyDoctor(doctor);
|
|
||||||
r.setVerifyTime(new Date());
|
|
||||||
reportService.updateById(r);
|
|
||||||
return R.ok();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== DICOM打印 ====================
|
// ==================== DICOM打印 ====================
|
||||||
|
|
||||||
/** DICOM打印记录 */
|
|
||||||
@PostMapping("/print")
|
@PostMapping("/print")
|
||||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:print:add')")
|
@PreAuthorize("@ss.hasPermi('infection:check:edit')")
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public R<?> printDicom(@RequestBody DicomPrintRecord p) {
|
public R<?> printDicom(@RequestBody DicomPrintRecord p) {
|
||||||
p.setPrintTime(new Date());
|
return radiologyImageAppService.savePrintRecord(p);
|
||||||
p.setCreateTime(new Date());
|
|
||||||
printService.save(p);
|
|
||||||
return R.ok(p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 打印记录分页 */
|
|
||||||
@GetMapping("/print/page")
|
@GetMapping("/print/page")
|
||||||
@PreAuthorize("@ss.hasPermi('check:radiologyImage:print:list')")
|
@PreAuthorize("@ss.hasPermi('infection:check:list')")
|
||||||
public R<?> getPrintPage(
|
public R<?> getPrintPage(
|
||||||
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||||
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
|
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize) {
|
||||||
LambdaQueryWrapper<DicomPrintRecord> w = new LambdaQueryWrapper<>();
|
return radiologyImageAppService.getPrintPage(pageNo, pageSize);
|
||||||
w.orderByDesc(DicomPrintRecord::getPrintTime);
|
|
||||||
return R.ok(printService.page(new Page<>(pageNo, pageSize), w));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
export function getReportPage(p){return request({url:'/radiology-image/report/page',method:'get',params:p})}
|
export function getReportPage(p){return request({url:'/check/report/page',method:'get',params:p})}
|
||||||
export function addReport(d){return request({url:'/radiology-image/report/add',method:'post',data:d})}
|
export function addReport(d){return request({url:'/check/report/save',method:'post',data:d})}
|
||||||
export function submitReport(id){return request({url:'/radiology-image/report/submit/'+id,method:'put'})}
|
export function submitReport(id){return request({url:'/check/report/submit/'+id,method:'put'})}
|
||||||
export function verifyReport(id,doctor){return request({url:'/radiology-image/report/verify/'+id,method:'put',params:{doctor}})}
|
export function verifyReport(id,doctor){return request({url:'/check/report/verify/'+id,method:'put',params:{doctor}})}
|
||||||
export function getImageList(p){return request({url:'/radiology-image/list',method:'get',params:p})}
|
export function getImageList(examId){return request({url:'/check/image/list/'+examId,method:'get'})}
|
||||||
export function printDicom(d){return request({url:'/radiology-image/print',method:'post',data:d})}
|
export function printDicom(d){return request({url:'/check/print',method:'post',data:d})}
|
||||||
|
|||||||
Reference in New Issue
Block a user