@Dict注解缺陷修复

This commit is contained in:
Wang.Huan
2025-03-12 15:45:29 +08:00
parent 189b801b51
commit 7999a35355
3 changed files with 89 additions and 67 deletions

View File

@@ -3,6 +3,18 @@
*/ */
package com.openhis.web.basicservice.controller; package com.openhis.web.basicservice.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.servlet.http.HttpServletRequest;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -22,18 +34,9 @@ import com.openhis.common.utils.EnumUtils;
import com.openhis.common.utils.HisQueryUtils; import com.openhis.common.utils.HisQueryUtils;
import com.openhis.web.basicservice.dto.*; import com.openhis.web.basicservice.dto.*;
import com.openhis.web.basicservice.mapper.HealthcareServiceBizMapper; import com.openhis.web.basicservice.mapper.HealthcareServiceBizMapper;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* 服务管理 controller * 服务管理 controller
@@ -57,11 +60,12 @@ public class HealthcareServiceController {
HealthcareServiceInitDto healthcareServiceInitDto = new HealthcareServiceInitDto(); HealthcareServiceInitDto healthcareServiceInitDto = new HealthcareServiceInitDto();
// 活动标记 // 活动标记
List<HealthcareServiceInitDto.activeFlagOption> activeFlagOptions = Stream.of(AccountStatus.values()) List<HealthcareServiceInitDto.activeFlagOption> activeFlagOptions = Stream.of(AccountStatus.values())
.map(status -> new HealthcareServiceInitDto.activeFlagOption(status.getValue(), status.getInfo())) .map(status -> new HealthcareServiceInitDto.activeFlagOption(status.getValue(), status.getInfo()))
.collect(Collectors.toList()); .collect(Collectors.toList());
healthcareServiceInitDto.setActiveFlagOptions(activeFlagOptions); healthcareServiceInitDto.setActiveFlagOptions(activeFlagOptions);
// 是否需要预约 // 是否需要预约
List<HealthcareServiceInitDto.appointmentRequiredFlagOption> appointmentRequiredFlagOptions = Stream.of(WhetherContainUnknown.values()) List<HealthcareServiceInitDto.appointmentRequiredFlagOption> appointmentRequiredFlagOptions =
Stream.of(WhetherContainUnknown.values())
.map(wh -> new HealthcareServiceInitDto.appointmentRequiredFlagOption(wh.getValue(), wh.getInfo())) .map(wh -> new HealthcareServiceInitDto.appointmentRequiredFlagOption(wh.getValue(), wh.getInfo()))
.collect(Collectors.toList()); .collect(Collectors.toList());
healthcareServiceInitDto.setAppointmentRequiredFlagOptions(appointmentRequiredFlagOptions); healthcareServiceInitDto.setAppointmentRequiredFlagOptions(appointmentRequiredFlagOptions);
@@ -74,9 +78,11 @@ public class HealthcareServiceController {
@PostMapping(value = "/healthcare-service") @PostMapping(value = "/healthcare-service")
public R<?> add(@Validated @RequestBody HealthcareServiceAddOrUpdateParam healthcareServiceAddOrUpdateParam) { public R<?> add(@Validated @RequestBody HealthcareServiceAddOrUpdateParam healthcareServiceAddOrUpdateParam) {
// 服务管理-表单数据 // 服务管理-表单数据
HealthcareServiceFormData healthcareServiceFormData = healthcareServiceAddOrUpdateParam.getHealthcareServiceFormData(); HealthcareServiceFormData healthcareServiceFormData =
healthcareServiceAddOrUpdateParam.getHealthcareServiceFormData();
// 费用定价-表单数据 // 费用定价-表单数据
ChargeItemDefinitionFormData chargeItemDefinitionFormData = healthcareServiceAddOrUpdateParam.getChargeItemDefinitionFormData(); ChargeItemDefinitionFormData chargeItemDefinitionFormData =
healthcareServiceAddOrUpdateParam.getChargeItemDefinitionFormData();
// 服务管理-新增 // 服务管理-新增
HealthcareService healthcareService = new HealthcareService(); HealthcareService healthcareService = new HealthcareService();
BeanUtils.copyProperties(healthcareServiceFormData, healthcareService); BeanUtils.copyProperties(healthcareServiceFormData, healthcareService);
@@ -84,38 +90,39 @@ public class HealthcareServiceController {
// 同时保存费用定价 // 同时保存费用定价
ChargeItemDefinition chargeItemDefinition = new ChargeItemDefinition(); ChargeItemDefinition chargeItemDefinition = new ChargeItemDefinition();
BeanUtils.copyProperties(chargeItemDefinitionFormData, chargeItemDefinition); BeanUtils.copyProperties(chargeItemDefinitionFormData, chargeItemDefinition);
boolean res = iChargeItemDefinitionService.addChargeItemDefinitionByHealthcareService(healthcareServiceAfterAdd, chargeItemDefinition); boolean res = iChargeItemDefinitionService.addChargeItemDefinitionByHealthcareService(healthcareServiceAfterAdd,
return res ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00001, new Object[]{"服务管理"})) : chargeItemDefinition);
R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); return res ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00001, new Object[] {"服务管理"}))
: R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null));
} }
/** /**
* 服务管理 分页查询 * 服务管理 分页查询
* *
* @param healthcareServiceDto 查询条件 * @param healthcareServiceDto 查询条件
* @param searchKey 模糊查询关键字 * @param searchKey 模糊查询关键字
* @param pageNo 当前页码 * @param pageNo 当前页码
* @param pageSize 查询条数 * @param pageSize 查询条数
* @param request 请求数据 * @param request 请求数据
* @return 列表信息 * @return 列表信息
*/ */
@GetMapping(value = "/healthcare-service-page") @GetMapping(value = "/healthcare-service-page")
public R<?> getHealthcareServicePage(HealthcareServiceDto healthcareServiceDto, public R<?> getHealthcareServicePage(HealthcareServiceDto healthcareServiceDto,
@RequestParam(value = "searchKey", defaultValue = "") String searchKey, @RequestParam(value = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
// 构建查询条件 // 构建查询条件
QueryWrapper<HealthcareServiceDto> queryWrapper = HisQueryUtils.buildQueryWrapper(healthcareServiceDto, searchKey, QueryWrapper<HealthcareServiceDto> queryWrapper = HisQueryUtils.buildQueryWrapper(healthcareServiceDto,
new HashSet<>(Arrays.asList("name", "charge_name")), request); searchKey, new HashSet<>(Arrays.asList("name", "charge_name")), request);
IPage<HealthcareServiceDto> healthcareServicePage = healthcareServiceBizMapper.getHealthcareServicePage( IPage<HealthcareServiceDto> healthcareServicePage = healthcareServiceBizMapper.getHealthcareServicePage(
new Page<>(pageNo, pageSize), CommonConstants.TableName.ADM_HEALTHCARE_SERVICE, queryWrapper); new Page<>(pageNo, pageSize), CommonConstants.TableName.ADM_HEALTHCARE_SERVICE, queryWrapper);
healthcareServicePage.getRecords().forEach(e -> { healthcareServicePage.getRecords().forEach(e -> {
// 活动标记-枚举类回显赋值 // 活动标记-枚举类回显赋值
e.setActiveFlag_enumText(EnumUtils.getInfoByValue(AccountStatus.class, e.getActiveFlag())); e.setActiveFlag_enumText(EnumUtils.getInfoByValue(AccountStatus.class, e.getActiveFlag()));
// 预约要求-枚举类回显赋值 // 预约要求-枚举类回显赋值
e.setAppointmentRequiredFlag_enumText(EnumUtils.getInfoByValue(WhetherContainUnknown.class, e.getAppointmentRequiredFlag())); e.setAppointmentRequiredFlag_enumText(
} EnumUtils.getInfoByValue(WhetherContainUnknown.class, e.getAppointmentRequiredFlag()));
); });
return R.ok(healthcareServicePage, MessageUtils.createMessage(PromptMsgConstant.Common.M00009, null)); return R.ok(healthcareServicePage, MessageUtils.createMessage(PromptMsgConstant.Common.M00009, null));
} }
@@ -130,18 +137,20 @@ public class HealthcareServiceController {
HealthcareServiceDto healthcareServiceDto = new HealthcareServiceDto(); HealthcareServiceDto healthcareServiceDto = new HealthcareServiceDto();
healthcareServiceDto.setId(id); healthcareServiceDto.setId(id);
// 构建查询条件 // 构建查询条件
QueryWrapper<HealthcareServiceDto> queryWrapper = HisQueryUtils.buildQueryWrapper(healthcareServiceDto, null, QueryWrapper<HealthcareServiceDto> queryWrapper =
null, null); HisQueryUtils.buildQueryWrapper(healthcareServiceDto, null, null, null);
IPage<HealthcareServiceDto> healthcareServicePage = healthcareServiceBizMapper.getHealthcareServicePage( IPage<HealthcareServiceDto> healthcareServicePage = healthcareServiceBizMapper
new Page<>(1, 1), CommonConstants.TableName.ADM_HEALTHCARE_SERVICE, queryWrapper); .getHealthcareServicePage(new Page<>(1, 1), CommonConstants.TableName.ADM_HEALTHCARE_SERVICE, queryWrapper);
HealthcareServiceDto healthcareServiceDtoDetail = healthcareServicePage.getRecords().get(0); HealthcareServiceDto healthcareServiceDtoDetail = healthcareServicePage.getRecords().get(0);
// 枚举赋值 // 枚举赋值
healthcareServiceDtoDetail.setActiveFlag_enumText(EnumUtils.getInfoByValue(AccountStatus.class, healthcareServiceDtoDetail.getActiveFlag())) healthcareServiceDtoDetail
.setAppointmentRequiredFlag_enumText(EnumUtils.getInfoByValue(WhetherContainUnknown.class, healthcareServiceDtoDetail.getAppointmentRequiredFlag())); .setActiveFlag_enumText(
EnumUtils.getInfoByValue(AccountStatus.class, healthcareServiceDtoDetail.getActiveFlag()))
.setAppointmentRequiredFlag_enumText(EnumUtils.getInfoByValue(WhetherContainUnknown.class,
healthcareServiceDtoDetail.getAppointmentRequiredFlag()));
return R.ok(healthcareServiceDtoDetail); return R.ok(healthcareServiceDtoDetail);
} }
/** /**
* 服务管理 编辑 * 服务管理 编辑
* *
@@ -151,12 +160,13 @@ public class HealthcareServiceController {
@PutMapping(value = "/healthcare-service") @PutMapping(value = "/healthcare-service")
public R<?> edit(@Validated @RequestBody HealthcareServiceAddOrUpdateParam healthcareServiceAddOrUpdateParam) { public R<?> edit(@Validated @RequestBody HealthcareServiceAddOrUpdateParam healthcareServiceAddOrUpdateParam) {
// 服务管理-表单数据 // 服务管理-表单数据
HealthcareServiceFormData healthcareServiceFormData = healthcareServiceAddOrUpdateParam.getHealthcareServiceFormData(); HealthcareServiceFormData healthcareServiceFormData =
healthcareServiceAddOrUpdateParam.getHealthcareServiceFormData();
HealthcareService healthcareService = new HealthcareService(); HealthcareService healthcareService = new HealthcareService();
BeanUtils.copyProperties(healthcareServiceFormData, healthcareService); BeanUtils.copyProperties(healthcareServiceFormData, healthcareService);
boolean res = iHealthcareServiceService.updateHealthcareService(healthcareService); boolean res = iHealthcareServiceService.updateHealthcareService(healthcareService);
return res ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"服务管理"})) : return res ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"服务管理"}))
R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
} }
/** /**
@@ -175,13 +185,12 @@ public class HealthcareServiceController {
// 同时删除非同定价 // 同时删除非同定价
for (Long id : idsList) { for (Long id : idsList) {
LambdaQueryWrapper<ChargeItemDefinition> QueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ChargeItemDefinition> QueryWrapper = new LambdaQueryWrapper<>();
QueryWrapper.eq(ChargeItemDefinition::getInstanceId, id). QueryWrapper.eq(ChargeItemDefinition::getInstanceId, id).eq(ChargeItemDefinition::getInstanceTable,
eq(ChargeItemDefinition::getInstanceTable, CommonConstants.TableName.ADM_HEALTHCARE_SERVICE); CommonConstants.TableName.ADM_HEALTHCARE_SERVICE);
iChargeItemDefinitionService.remove(QueryWrapper); iChargeItemDefinitionService.remove(QueryWrapper);
} }
return res ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00005, new Object[]{"服务管理"})) : return res ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00005, new Object[] {"服务管理"}))
R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null)); : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00006, null));
} }
} }

View File

@@ -1,12 +1,13 @@
package com.openhis.web.basicservice.mapper; package com.openhis.web.basicservice.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.openhis.web.basicservice.dto.HealthcareServiceDto; import com.openhis.web.basicservice.dto.HealthcareServiceDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
/** /**
* 服务管理 自定义Mapper * 服务管理 自定义Mapper
@@ -17,13 +18,13 @@ public interface HealthcareServiceBizMapper {
/** /**
* 服务管理 分页查询 * 服务管理 分页查询
* *
* @param page 分页参数 * @param page 分页参数
* @param tableName 定价表名 * @param tableName 定价表名
* @param queryWrapper 查询条件 * @param queryWrapper 查询条件
* @return 列表信息 * @return 列表信息
*/ */
IPage<HealthcareServiceDto> getHealthcareServicePage(@Param("page") Page<HealthcareServiceDto> page, IPage<HealthcareServiceDto> getHealthcareServicePage(@Param("page") Page<HealthcareServiceDto> page,
@Param("tableName") String tableName, @Param("tableName") String tableName,
@Param(Constants.WRAPPER) QueryWrapper<HealthcareServiceDto> queryWrapper); @Param(Constants.WRAPPER) QueryWrapper<HealthcareServiceDto> queryWrapper);
} }

View File

@@ -1,18 +1,20 @@
package com.openhis.common.aspectj; package com.openhis.common.aspectj;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import java.lang.reflect.Field;
import com.core.common.core.domain.R; import java.util.List;
import com.openhis.common.annotation.Dict;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.lang.reflect.Field; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List; import com.core.common.core.domain.R;
import com.openhis.common.annotation.Dict;
@Aspect @Aspect
@Component @Component
@@ -21,19 +23,19 @@ public class DictAspect {
@Autowired @Autowired
private JdbcTemplate jdbcTemplate; // 使用 JdbcTemplate 执行 SQL private JdbcTemplate jdbcTemplate; // 使用 JdbcTemplate 执行 SQL
@Around("@annotation(org.springframework.web.bind.annotation.GetMapping) || " + @Around("@annotation(org.springframework.web.bind.annotation.GetMapping) || "
"@annotation(org.springframework.web.bind.annotation.PostMapping)") + "@annotation(org.springframework.web.bind.annotation.PostMapping)")
public Object aroundController(ProceedingJoinPoint joinPoint) throws Throwable { public Object aroundController(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = joinPoint.proceed(); // 执行原方法 Object result = joinPoint.proceed(); // 执行原方法
if (result instanceof R) { if (result instanceof R) {
// 如果返回值是 R<?>,提取其中的数据 // 如果返回值是 R<?>,提取其中的数据
R<?> response = (R<?>) result; R<?> response = (R<?>)result;
Object data = response.getData(); // 获取 R<?> 中的实际数据 Object data = response.getData(); // 获取 R<?> 中的实际数据
if (data instanceof Page) { if (data instanceof Page) {
// 如果数据是 Page 类型,处理分页数据 // 如果数据是 Page 类型,处理分页数据
Page<?> page = (Page<?>) data; Page<?> page = (Page<?>)data;
List<?> records = page.getRecords(); List<?> records = page.getRecords();
if (!records.isEmpty()) { if (!records.isEmpty()) {
for (Object obj : records) { for (Object obj : records) {
@@ -42,7 +44,7 @@ public class DictAspect {
} }
} else if (data instanceof List) { } else if (data instanceof List) {
// 如果数据是 List 类型,处理列表数据 // 如果数据是 List 类型,处理列表数据
List<?> list = (List<?>) data; List<?> list = (List<?>)data;
if (!list.isEmpty()) { if (!list.isEmpty()) {
for (Object obj : list) { for (Object obj : list) {
processDict(obj); // 处理每个 DTO 对象 processDict(obj); // 处理每个 DTO 对象
@@ -99,11 +101,21 @@ public class DictAspect {
if (StringUtils.isEmpty(dictTable)) { if (StringUtils.isEmpty(dictTable)) {
// 场景 1默认查询 sys_dict_data 表 // 场景 1默认查询 sys_dict_data 表
sql = "SELECT dict_label FROM sys_dict_data WHERE dict_type = ? AND dict_value::varchar = ? LIMIT 1"; sql = "SELECT dict_label FROM sys_dict_data WHERE dict_type = ? AND dict_value::varchar = ? LIMIT 1";
return jdbcTemplate.queryForObject(sql, String.class, dictCode, dictValue); try {
return jdbcTemplate.queryForObject(sql, String.class, dictCode, dictValue);
} catch (DataAccessException e) {
// 如果查询结果为空,返回 空字符串
return "";
}
} else { } else {
// 场景 2查询指定表 // 场景 2查询指定表
sql = String.format("SELECT %s FROM %s WHERE %s::varchar = ? LIMIT 1", dictText, dictTable, dictCode); sql = String.format("SELECT %s FROM %s WHERE %s::varchar = ? LIMIT 1", dictText, dictTable, dictCode);
return jdbcTemplate.queryForObject(sql, String.class, dictValue); try {
return jdbcTemplate.queryForObject(sql, String.class, dictValue);
} catch (DataAccessException e) {
// 如果查询结果为空,返回 空字符串
return "";
}
} }
} }
} }