diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/config/PhysicalToolManageController.java b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/config/PhysicalToolManageController.java index 8f648402..0410410a 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/config/PhysicalToolManageController.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/config/PhysicalToolManageController.java @@ -1,11 +1,12 @@ package com.supervision.manage.controller.config; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.supervision.manage.pojo.vo.PhysicalToolReqVO; +import com.supervision.manage.pojo.vo.PhysicalToolVO; import com.supervision.manage.service.PhysicalToolManageService; import com.supervision.model.ConfigPhysicalTool; import com.supervision.vo.ask.ConfigPhysicalToolResVO; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -34,10 +35,28 @@ public class PhysicalToolManageController { return physicalToolManageService.queryConfigPhysicalToolPage(toolName, type, requireLocation, pageNum, pageSize); } + @ApiModelProperty("查询体格检查工具详细信息") + @GetMapping("queryConfigPhysicalToolDetail") + public PhysicalToolVO queryConfigPhysicalToolDetail(String id) { + return physicalToolManageService.queryConfigPhysicalToolDetail(id); + } + @ApiOperation("保存体格工具") @PostMapping("saveConfigPhysicalTool") - public void saveConfigPhysicalTool(@RequestBody PhysicalToolReqVO physicalToolReqVO){ - physicalToolManageService.saveConfigPhysicalTool(physicalToolReqVO); + public void saveConfigPhysicalTool(@RequestBody PhysicalToolVO physicalToolVO) { + physicalToolManageService.saveConfigPhysicalTool(physicalToolVO); + } + + @ApiOperation("修改体格工具") + @PostMapping("modifyConfigPhysicalTool") + public void modifyConfigPhysicalTool(@RequestBody PhysicalToolVO physicalToolVO) { + physicalToolManageService.modifyConfigPhysicalTool(physicalToolVO); + } + + @ApiOperation("删除体格工具") + @GetMapping("deleteConfigPhysicalTool") + public void deleteConfigPhysicalTool(String id) { + physicalToolManageService.deleteConfigPhysicalTool(id); } } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/PhysicalToolReqVO.java b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/PhysicalToolVO.java similarity index 79% rename from virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/PhysicalToolReqVO.java rename to virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/PhysicalToolVO.java index 2f2c742a..f3aa36b2 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/PhysicalToolReqVO.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/PhysicalToolVO.java @@ -3,7 +3,6 @@ package com.supervision.manage.pojo.vo; import com.supervision.model.ConfigPhysicalTool; import com.supervision.model.DefaultPhysicalIndicator; import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -12,7 +11,7 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) @Data @ApiModel(parent = ConfigPhysicalTool.class) -public class PhysicalToolReqVO extends ConfigPhysicalTool { +public class PhysicalToolVO extends ConfigPhysicalTool { private List defaultPhysicalIndicatorList; diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/PhysicalToolManageService.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/PhysicalToolManageService.java index 8b86b7ca..22ef449d 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/PhysicalToolManageService.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/PhysicalToolManageService.java @@ -1,7 +1,7 @@ package com.supervision.manage.service; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.supervision.manage.pojo.vo.PhysicalToolReqVO; +import com.supervision.manage.pojo.vo.PhysicalToolVO; import com.supervision.model.ConfigPhysicalTool; import com.supervision.vo.ask.ConfigPhysicalToolResVO; import org.springframework.web.bind.annotation.RequestBody; @@ -13,6 +13,12 @@ public interface PhysicalToolManageService { IPage queryConfigPhysicalToolPage(String toolName, String type, Integer requireLocation, Integer pageNum, Integer pageSize); - void saveConfigPhysicalTool(PhysicalToolReqVO physicalToolReqVO); + PhysicalToolVO queryConfigPhysicalToolDetail(String id); + + void saveConfigPhysicalTool(PhysicalToolVO physicalToolVO); + + void modifyConfigPhysicalTool(PhysicalToolVO physicalToolVO); + + void deleteConfigPhysicalTool(String id); } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/PhysicalToolManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/PhysicalToolManageServiceImpl.java index a12a4fcb..d171fc37 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/PhysicalToolManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/PhysicalToolManageServiceImpl.java @@ -1,17 +1,26 @@ package com.supervision.manage.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.supervision.manage.pojo.vo.PhysicalToolReqVO; +import com.supervision.exception.BusinessException; +import com.supervision.manage.pojo.vo.PhysicalToolVO; import com.supervision.manage.service.PhysicalToolManageService; import com.supervision.model.ConfigPhysicalTool; +import com.supervision.model.DefaultPhysicalIndicator; +import com.supervision.model.DiseasePhysical; import com.supervision.service.ConfigPhysicalToolService; +import com.supervision.service.DefaultPhysicalIndicatorService; +import com.supervision.service.DiseasePhysicalService; import com.supervision.vo.ask.ConfigPhysicalToolResVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -22,6 +31,10 @@ public class PhysicalToolManageServiceImpl implements PhysicalToolManageService private final ConfigPhysicalToolService configPhysicalToolService; + private final DefaultPhysicalIndicatorService defaultPhysicalIndicatorService; + + private final DiseasePhysicalService diseasePhysicalService; + @Override public List queryPhysicalToolList() { return configPhysicalToolService.queryPhysicalToolList(); @@ -29,16 +42,87 @@ public class PhysicalToolManageServiceImpl implements PhysicalToolManageService @Override public IPage queryConfigPhysicalToolPage(String toolName, String type, Integer requireLocation, - Integer pageNum, Integer pageSize) { - return configPhysicalToolService.lambdaQuery().like(StrUtil.isNotBlank(toolName),ConfigPhysicalTool::getToolName,toolName) - .eq(StrUtil.isNotBlank(type),ConfigPhysicalTool::getType,type) - .eq(ObjectUtil.isNotEmpty(requireLocation),ConfigPhysicalTool::getRequireLocation,requireLocation) - .page(new Page<>(pageNum,pageSize)); + Integer pageNum, Integer pageSize) { + return configPhysicalToolService.lambdaQuery().like(StrUtil.isNotBlank(toolName), ConfigPhysicalTool::getToolName, toolName) + .eq(StrUtil.isNotBlank(type), ConfigPhysicalTool::getType, type) + .eq(ObjectUtil.isNotEmpty(requireLocation), ConfigPhysicalTool::getRequireLocation, requireLocation) + .page(new Page<>(pageNum, pageSize)); } + @Override + public PhysicalToolVO queryConfigPhysicalToolDetail(String id) { + ConfigPhysicalTool configPhysicalTool = configPhysicalToolService.getById(id); + PhysicalToolVO bean = BeanUtil.toBean(configPhysicalTool, PhysicalToolVO.class); + List list = defaultPhysicalIndicatorService.lambdaQuery().eq(DefaultPhysicalIndicator::getItemId, id).list(); + if (CollUtil.isNotEmpty(list)) { + bean.setDefaultPhysicalIndicatorList(list); + } + return bean; + } @Override - public void saveConfigPhysicalTool(PhysicalToolReqVO physicalToolReqVO) { + @Transactional(rollbackFor = Exception.class) + public void saveConfigPhysicalTool(PhysicalToolVO physicalToolVO) { + Assert.notBlank(physicalToolVO.getToolName(), () -> new BusinessException("体格检查工具名称不能为空")); + Assert.notBlank(physicalToolVO.getType(), () -> new BusinessException("体格检查工具类型不能为空")); + // 校验,相同类型下,不允许存在相同名称的工具 + Integer nameCount = configPhysicalToolService.lambdaQuery().eq(ConfigPhysicalTool::getType, physicalToolVO.getType()) + .eq(ConfigPhysicalTool::getToolName, physicalToolVO.getToolName()).count(); + if (nameCount > 0) { + throw new BusinessException("体格检查工具类型:" + physicalToolVO.getType() + " 存在重复名称"); + } + // 保存体格检查工具 + configPhysicalToolService.save(physicalToolVO); + // 保存体格检查工具的正常值 + if (CollUtil.isNotEmpty(physicalToolVO.getDefaultPhysicalIndicatorList())) { + List defaultPhysicalIndicatorList = physicalToolVO.getDefaultPhysicalIndicatorList(); + for (DefaultPhysicalIndicator defaultPhysicalIndicator : defaultPhysicalIndicatorList) { + defaultPhysicalIndicator.setItemId(physicalToolVO.getId()); + if (physicalToolVO.getRequireLocation() == 1) { + Assert.notEmpty(defaultPhysicalIndicator.getLocationId(), () -> new BusinessException("需检查位的体格检查项,检查位置不能为空")); + } + defaultPhysicalIndicatorService.save(defaultPhysicalIndicator); + } + } + } + @Override + @Transactional(rollbackFor = Exception.class) + public void modifyConfigPhysicalTool(PhysicalToolVO physicalToolVO) { + Assert.notBlank(physicalToolVO.getId(), () -> new BusinessException("体格检查工具ID不能为空")); + Assert.notBlank(physicalToolVO.getToolName(), () -> new BusinessException("体格检查工具名称不能为空")); + Assert.notBlank(physicalToolVO.getType(), () -> new BusinessException("体格检查工具类型不能为空")); + // 校验,相同类型下,不允许存在除这个ID相同名称的工具 + Integer nameCount = configPhysicalToolService.lambdaQuery().eq(ConfigPhysicalTool::getType, physicalToolVO.getType()) + .ne(ConfigPhysicalTool::getId, physicalToolVO.getId()) + .eq(ConfigPhysicalTool::getToolName, physicalToolVO.getToolName()).count(); + if (nameCount > 0) { + throw new BusinessException("体格检查工具类型:" + physicalToolVO.getType() + " 存在重复名称"); + } + // 保存体格检查工具的正常值 + if (CollUtil.isNotEmpty(physicalToolVO.getDefaultPhysicalIndicatorList())) { + List defaultPhysicalIndicatorList = physicalToolVO.getDefaultPhysicalIndicatorList(); + for (DefaultPhysicalIndicator defaultPhysicalIndicator : defaultPhysicalIndicatorList) { + defaultPhysicalIndicator.setItemId(physicalToolVO.getId()); + if (physicalToolVO.getRequireLocation() == 1) { + Assert.notEmpty(defaultPhysicalIndicator.getLocationId(), () -> new BusinessException("需检查位的体格检查项,检查位置不能为空")); + } + defaultPhysicalIndicatorService.saveOrUpdate(defaultPhysicalIndicator); + } + } + + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteConfigPhysicalTool(String id) { + // 删除之前,校验这个工具是否在某些地方已经被配置了,如果配置了,就不允许删除 + Integer count = diseasePhysicalService.lambdaQuery().eq(DiseasePhysical::getToolId, id).count(); + if (0 > count) { + throw new BusinessException("工具已被使用,不允许删除"); + } + configPhysicalToolService.removeById(id); + defaultPhysicalIndicatorService.lambdaUpdate().eq(DefaultPhysicalIndicator::getItemId, id).remove(); } }