feat(medicalOrderSet): 优化医嘱组套功能实现

- 实现医嘱基础列表的分页功能,添加loading状态和缓存机制
- 添加防抖处理和组织机构ID参数支持,优化性能表现
- 实现医嘱组套的完整编辑功能,包括增删改查操作界面
- 添加医嘱组套预览、应用和管理功能模块
- 实现西医组套筛选功能,确保tcmFlag参数正确传递
- 优化医嘱组套数据结构,完善明细项信息处理逻辑
- 添加表单验证和错误处理,提升用户体验和系统稳定性
- 重构代码结构,采用响应式设计提高可维护性
This commit is contained in:
2026-03-17 09:57:21 +08:00
parent 03939fb232
commit 8a7d2abb4a
30 changed files with 2066 additions and 543 deletions

View File

@@ -30,9 +30,10 @@ public interface IOrdersGroupPackageAppService {
*
* @param packageTypeEnum 类型枚举
* @param searchKey 模糊查询关键字
* @param tcmFlag 中医标识0-西医 1-中医
* @return 组合套餐
*/
List<OrdersGroupPackageQueryDto> getGroupPackage(Integer packageTypeEnum, String searchKey);
List<OrdersGroupPackageQueryDto> getGroupPackage(Integer packageTypeEnum, String searchKey, Integer tcmFlag);
/**
* 查询组合套餐明细
@@ -54,8 +55,9 @@ public interface IOrdersGroupPackageAppService {
* 查询组合套餐,供开立医嘱使用
*
* @param organizationId 患者挂号对应的科室id
* @param tcmFlag 中医标识0-西医 1-中医
* @return 组合套餐
*/
OrdersGroupPackageUseDto getGroupPackageForOrder(Long organizationId);
OrdersGroupPackageUseDto getGroupPackageForOrder(Long organizationId, Integer tcmFlag);
}

View File

@@ -1,8 +1,16 @@
package com.openhis.web.personalization.appservice.impl;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.core.common.core.domain.R;
import com.core.common.exception.ServiceException;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.SecurityUtils;
import com.openhis.common.constant.PromptMsgConstant;
@@ -18,13 +26,8 @@ import com.openhis.web.doctorstation.dto.AdviceBaseDto;
import com.openhis.web.personalization.appservice.IOrdersGroupPackageAppService;
import com.openhis.web.personalization.dto.*;
import com.openhis.web.personalization.mapper.OrdersGroupPackageAppMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.core.framework.datasource.DynamicDataSourceContextHolder.log;
/**
* 组合套餐 实现类
@@ -61,10 +64,12 @@ public class OrdersGroupPackageAppServiceImpl implements IOrdersGroupPackageAppS
if (BindingType.PERSONAL.getValue().equals(packageTypeEnum)
&& ordersGroupPackageSaveDto.getPractitionerId() == null) {
throw new ServiceException("个人组套需选择人员");
// throw new ServiceException("个人组套需选择人员");
ordersGroupPackageSaveDto.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId());
} else if (BindingType.ORGANIZATION.getValue().equals(packageTypeEnum)
&& ordersGroupPackageSaveDto.getOrganizationId() == null) {
throw new ServiceException("科室组套需选择科室");
// throw new ServiceException("科室组套需选择科室");
ordersGroupPackageSaveDto.setOrganizationId(SecurityUtils.getLoginUser().getOrgId());
}
// 保存主表
OrdersGroupPackage ordersGroupPackage = new OrdersGroupPackage();
@@ -73,6 +78,7 @@ public class OrdersGroupPackageAppServiceImpl implements IOrdersGroupPackageAppS
ordersGroupPackage.setPackageTypeEnum(packageTypeEnum);// 组套包类型
ordersGroupPackage.setOrganizationId(ordersGroupPackageSaveDto.getOrganizationId()); // 科室id
ordersGroupPackage.setPractitionerId(ordersGroupPackageSaveDto.getPractitionerId()); // 参与者id
ordersGroupPackage.setTcmFlag(ordersGroupPackageSaveDto.getTcmFlag()); // 中医标识
ordersGroupPackageService.saveOrUpdate(ordersGroupPackage);
// 编辑场景时,先删除原有的明细再新增
@@ -96,6 +102,7 @@ public class OrdersGroupPackageAppServiceImpl implements IOrdersGroupPackageAppS
ordersGroupPackageDetail.setMethodCode(ordersGroupPackageDetailSaveDto.getMethodCode()); // 给药途径
ordersGroupPackageDetail.setDoseQuantity(ordersGroupPackageDetailSaveDto.getDoseQuantity()); // 小单位单次剂量
ordersGroupPackageDetail.setGroupId(ordersGroupPackageDetailSaveDto.getGroupId()); // 组号
ordersGroupPackageDetail.setTherapyEnum(ordersGroupPackageDetailSaveDto.getTherapyEnum()); // 治疗类型
ordersGroupPackageDetailService.save(ordersGroupPackageDetail);
}
@@ -107,12 +114,14 @@ public class OrdersGroupPackageAppServiceImpl implements IOrdersGroupPackageAppS
*
* @param packageTypeEnum 类型枚举
* @param searchKey 模糊查询关键字
* @param tcmFlag 中医标识
* @return 组合套餐
*/
@Override
public List<OrdersGroupPackageQueryDto> getGroupPackage(Integer packageTypeEnum, String searchKey) {
public List<OrdersGroupPackageQueryDto> getGroupPackage(Integer packageTypeEnum, String searchKey,
Integer tcmFlag) {
List<OrdersGroupPackageQueryDto> groupPackage =
ordersGroupPackageAppMapper.getGroupPackage(packageTypeEnum, null, null, searchKey);
ordersGroupPackageAppMapper.getGroupPackage(packageTypeEnum, null, null, searchKey, tcmFlag);
for (OrdersGroupPackageQueryDto ordersGroupPackageQueryDto : groupPackage) {
ordersGroupPackageQueryDto.setPackageTypeEnum_enumText(
EnumUtils.getInfoByValue(BindingType.class, ordersGroupPackageQueryDto.getPackageTypeEnum()));
@@ -151,19 +160,23 @@ public class OrdersGroupPackageAppServiceImpl implements IOrdersGroupPackageAppS
* 查询组合套餐,供开立医嘱使用
*
* @param organizationId 患者挂号对应的科室id
* @param tcmFlag 中医标识
* @return 组合套餐
*/
@Override
public OrdersGroupPackageUseDto getGroupPackageForOrder(Long organizationId) {
public OrdersGroupPackageUseDto getGroupPackageForOrder(Long organizationId, Integer tcmFlag) {
OrdersGroupPackageUseDto ordersGroupPackageUseDto = new OrdersGroupPackageUseDto();
// 当前参参与者id
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
// 当前登录账号的科室id
Long orgId = SecurityUtils.getLoginUser().getOrgId();
log.info("[getGroupPackageForOrder] 当前登录用户 practitionerId: {}, orgId: {}", practitionerId, orgId);
// 个人组套
List<OrdersGroupPackageQueryDto> personalGroupPackage =
ordersGroupPackageAppMapper.getGroupPackage(BindingType.PERSONAL.getValue(), null, practitionerId, null);
List<OrdersGroupPackageQueryDto> personalGroupPackage = ordersGroupPackageAppMapper
.getGroupPackage(BindingType.PERSONAL.getValue(), null, practitionerId, null, tcmFlag);
log.info("[getGroupPackageForOrder] 个人组套查询结果数: {}", personalGroupPackage.size());
if (!personalGroupPackage.isEmpty()) {
List<OrdersGroupPackageDto> personalList = personalGroupPackage.stream().map(queryDto -> {
OrdersGroupPackageDto dto = new OrdersGroupPackageDto();
@@ -208,10 +221,13 @@ public class OrdersGroupPackageAppServiceImpl implements IOrdersGroupPackageAppS
});
}
ordersGroupPackageUseDto.setPersonalList(personalList);
log.info("[getGroupPackageForOrder] 个人组套已设置,数量: {}", personalList.size());
} else {
log.info("[getGroupPackageForOrder] 个人组套查询结果为空");
}
// 科室组套
List<OrdersGroupPackageQueryDto> organizationGroupPackage =
ordersGroupPackageAppMapper.getGroupPackage(BindingType.ORGANIZATION.getValue(), orgId, null, null);
List<OrdersGroupPackageQueryDto> organizationGroupPackage = ordersGroupPackageAppMapper
.getGroupPackage(BindingType.ORGANIZATION.getValue(), orgId, null, null, tcmFlag);
if (!organizationGroupPackage.isEmpty()) {
List<OrdersGroupPackageDto> organizationList = organizationGroupPackage.stream().map(queryDto -> {
OrdersGroupPackageDto dto = new OrdersGroupPackageDto();
@@ -260,7 +276,7 @@ public class OrdersGroupPackageAppServiceImpl implements IOrdersGroupPackageAppS
// 全院组套
List<OrdersGroupPackageQueryDto> hospitalGroupPackage =
ordersGroupPackageAppMapper.getGroupPackage(BindingType.HOSPITAL.getValue(), null, null, null);
ordersGroupPackageAppMapper.getGroupPackage(BindingType.HOSPITAL.getValue(), null, null, null, tcmFlag);
if (!hospitalGroupPackage.isEmpty()) {
List<OrdersGroupPackageDto> hospitalList = hospitalGroupPackage.stream().map(queryDto -> {
OrdersGroupPackageDto dto = new OrdersGroupPackageDto();

View File

@@ -65,33 +65,39 @@ public class OrdersGroupPackageController {
* 查询个人组套
*
* @param searchKey 模糊查询关键字
* @param tcmFlag 中医标识0-西医 1-中医
* @return 个人组套
*/
@GetMapping(value = "/get-personal")
public R<?> getPersonal(@RequestParam(value = "searchKey", defaultValue = "") String searchKey) {
return R.ok(ordersGroupPackageAppService.getGroupPackage(BindingType.PERSONAL.getValue(), searchKey));
public R<?> getPersonal(@RequestParam(value = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "tcmFlag", defaultValue = "0") Integer tcmFlag) {
return R.ok(ordersGroupPackageAppService.getGroupPackage(BindingType.PERSONAL.getValue(), searchKey, tcmFlag));
}
/**
* 查询科室组套
*
* @param searchKey 模糊查询关键字
* @param tcmFlag 中医标识0-西医 1-中医
* @return 科室组套
*/
@GetMapping(value = "/get-organization")
public R<?> getOrganization(@RequestParam(value = "searchKey", defaultValue = "") String searchKey) {
return R.ok(ordersGroupPackageAppService.getGroupPackage(BindingType.ORGANIZATION.getValue(), searchKey));
public R<?> getOrganization(@RequestParam(value = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "tcmFlag", defaultValue = "0") Integer tcmFlag) {
return R.ok(ordersGroupPackageAppService.getGroupPackage(BindingType.ORGANIZATION.getValue(), searchKey, tcmFlag));
}
/**
* 查询全院组套
*
* @param searchKey 模糊查询关键字
* @param tcmFlag 中医标识0-西医 1-中医
* @return 全院组套
*/
@GetMapping(value = "/get-hospital")
public R<?> getHospital(@RequestParam(value = "searchKey", defaultValue = "") String searchKey) {
return R.ok(ordersGroupPackageAppService.getGroupPackage(BindingType.HOSPITAL.getValue(), searchKey));
public R<?> getHospital(@RequestParam(value = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "tcmFlag", defaultValue = "0") Integer tcmFlag) {
return R.ok(ordersGroupPackageAppService.getGroupPackage(BindingType.HOSPITAL.getValue(), searchKey, tcmFlag));
}
/**
@@ -120,12 +126,13 @@ public class OrdersGroupPackageController {
* 查询组合套餐,供开立医嘱使用
*
* @param organizationId 患者挂号对应的科室id
* @param tcmFlag 中医标识0-西医 1-中医,不传则不过滤
* @return 组合套餐
*/
@GetMapping(value = "/group-package-for-order")
public R<?>
getGroupPackageForOrder(@RequestParam(value = "organizationId", defaultValue = "0") Long organizationId) {
return R.ok(ordersGroupPackageAppService.getGroupPackageForOrder(organizationId));
public R<?> getGroupPackageForOrder(@RequestParam(value = "organizationId", required = false) Long organizationId,
@RequestParam(value = "tcmFlag", required = false) Integer tcmFlag) {
return R.ok(ordersGroupPackageAppService.getGroupPackageForOrder(organizationId, tcmFlag));
}
}

View File

@@ -63,4 +63,9 @@ public class OrdersGroupPackageDetailSaveDto {
*/
private Long groupId;
/**
* 治疗类型1-长期 2-临时
*/
private Integer therapyEnum;
}

View File

@@ -48,6 +48,11 @@ public class OrdersGroupPackageSaveDto {
@JsonSerialize(using = ToStringSerializer.class)
private Long practitionerId;
/**
* 中医标识0-西医 1-中医
*/
private Integer tcmFlag;
/**
* 明细集合
*/

View File

@@ -26,11 +26,12 @@ public interface OrdersGroupPackageAppMapper {
* @param organizationId 科室id
* @param practitionerId 参与者id
* @param searchKey 模糊查询关键字
* @param tcmFlag 中医标识0-西医 1-中医
* @return 组合套餐
*/
List<OrdersGroupPackageQueryDto> getGroupPackage(@Param("packageTypeEnum") Integer packageTypeEnum,
@Param("organizationId") Long organizationId, @Param("practitionerId") Long practitionerId,
@Param("searchKey") String searchKey);
@Param("searchKey") String searchKey, @Param("tcmFlag") Integer tcmFlag);
/**
* 查询组合套餐明细