From ccd2fe9146c780bc14f6942808112856ff271c77 Mon Sep 17 00:00:00 2001 From: "Wang.Huan" Date: Sat, 15 Mar 2025 11:20:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BB=E5=98=B1=E6=9F=A5=E8=AF=A2=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IDoctorStationAdviceAppService.java | 10 ++ .../DoctorStationAdviceAppServiceImpl.java | 108 ++++++++++++++++-- .../DoctorStationAdviceController.java | 15 ++- .../web/doctorstation/dto/AdvicePriceDto.java | 6 + .../mapper/DoctorStationAdviceAppMapper.java | 33 ++++++ .../DoctorStationAdviceAppMapper.xml | 62 ++++++++++ 6 files changed, 225 insertions(+), 9 deletions(-) diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java index c4e8ab49..6af98657 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java @@ -8,6 +8,16 @@ import com.openhis.web.doctorstation.dto.AdviceBaseDto; */ public interface IDoctorStationAdviceAppService { + /** + * 查询医嘱信息 + * + * @param adviceBaseDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param locationId 药房id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 医嘱信息 + */ IPage getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId, Integer pageNo, Integer pageSize); diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java index 86dfc13d..a399b95b 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java @@ -1,12 +1,25 @@ package com.openhis.web.doctorstation.appservice.impl; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; + import javax.annotation.Resource; import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.ConditionCode; +import com.openhis.common.utils.HisQueryUtils; import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.AdviceInventoryDto; +import com.openhis.web.doctorstation.dto.AdvicePriceDto; import com.openhis.web.doctorstation.mapper.DoctorStationAdviceAppMapper; /** @@ -19,19 +32,100 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp DoctorStationAdviceAppMapper doctorStationAdviceAppMapper; /** + * 查询医嘱信息 * - * @param adviceBaseDto - * @param searchKey - * @param locationId - * @param pageNo - * @param pageSize - * @return + * @param adviceBaseDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param locationId 药房id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 医嘱信息 */ @Override public IPage getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId, Integer pageNo, Integer pageSize) { + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(adviceBaseDto, searchKey, + new HashSet<>(Arrays.asList("advice_name", "py_str", "wb_str")), null); + IPage adviceBaseInfo = + doctorStationAdviceAppMapper.getAdviceBaseInfo(new Page<>(pageNo, pageSize), + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, queryWrapper); + List adviceBaseDtoList = adviceBaseInfo.getRecords(); + // 医嘱定义ID集合 + List adviceDefinitionIdList = + adviceBaseDtoList.stream().map(AdviceBaseDto::getAdviceDefinitionId).collect(Collectors.toList()); + // 费用定价主表ID集合 + List chargeItemDefinitionIdList = + adviceBaseDtoList.stream().map(AdviceBaseDto::getChargeItemDefinitionId).collect(Collectors.toList()); + // 医嘱库存集合 + List adviceInventory = doctorStationAdviceAppMapper.getAdviceInventory(locationId, + adviceDefinitionIdList, CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR); + // 费用定价子表信息 + List childCharge = doctorStationAdviceAppMapper + .getChildCharge(ConditionCode.UNIT_PRODUCT_BATCH_NUM.getInfo(), chargeItemDefinitionIdList); + // 费用定价主表信息 + List mainCharge = doctorStationAdviceAppMapper.getMainCharge(chargeItemDefinitionIdList); + // 药品和耗材 + List medicationAndDeviceList = adviceBaseDtoList.stream() + .filter(e -> CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(e.getAdviceTableName()) + || CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(e.getAdviceTableName())) + .collect(Collectors.toList()); + // 药品和耗材-赋值 + String unitCode = ""; // 包装单位 + String minUnitCode; // 小单位 + Long chargeItemDefinitionId; // 费用定价主表ID + for (AdviceBaseDto baseDto : medicationAndDeviceList) { + // 每一条医嘱的库存集合信息 + List inventoryList = + adviceInventory.stream().filter(e -> baseDto.getAdviceDefinitionId().equals(e.getItemId()) + && baseDto.getAdviceTableName().equals(e.getItemTable())).collect(Collectors.toList()); + // 库存信息 + baseDto.setInventoryList(inventoryList); - return null; + unitCode = baseDto.getUnitCode(); + minUnitCode = baseDto.getMinUnitCode(); + chargeItemDefinitionId = baseDto.getChargeItemDefinitionId(); + + List priceDtoList = new ArrayList<>(); + // 库存信息里取 单位,产品批号 去匹配价格 + for (AdviceInventoryDto adviceInventoryDto : inventoryList) { + Long finalChargeItemDefinitionId = chargeItemDefinitionId; + String finalUnitCode = unitCode; + String finalMinUnitCode = minUnitCode; + // 匹配包装单位 + List advicePrice1 = childCharge.stream() + .filter(e -> e.getDefinitionId().equals(finalChargeItemDefinitionId) && e.getConditionValue() + .equals(String.format(CommonConstants.Common.COMMA, finalUnitCode, + adviceInventoryDto.getLotNumber()))) + .peek(e -> e.setUnitCode(finalUnitCode)) // 设置 unitCode + .collect(Collectors.toList()); + // 匹配最小单位 + List advicePrice2 = childCharge.stream() + .filter(e -> e.getDefinitionId().equals(finalChargeItemDefinitionId) && e.getConditionValue() + .equals(String.format(CommonConstants.Common.COMMA, finalMinUnitCode, + adviceInventoryDto.getLotNumber()))) + .peek(e -> e.setUnitCode(finalMinUnitCode)) // 设置 unitCode + .collect(Collectors.toList()); + priceDtoList.addAll(advicePrice1); + priceDtoList.addAll(advicePrice2); + } + // 价格信息 + baseDto.setPriceList(priceDtoList); + } + // 诊疗 + List activityList = adviceBaseDtoList.stream() + .filter(e -> CommonConstants.TableName.WOR_ACTIVITY_DEFINITION.equals(e.getAdviceTableName())) + .collect(Collectors.toList()); + // 诊疗-赋值 + for (AdviceBaseDto baseDto : activityList) { + List priceList = + mainCharge.stream().filter(e -> baseDto.getChargeItemDefinitionId().equals(e.getDefinitionId())) + .collect(Collectors.toList()); + // 价格信息 + baseDto.setPriceList(priceList); + } + return adviceBaseInfo; } } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java index 0f0a3171..4817d37a 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java @@ -26,13 +26,24 @@ public class DoctorStationAdviceController { private final IDoctorStationAdviceAppService iDoctorStationAdviceAppService; + /** + * 查询医嘱信息 + * + * @param adviceBaseDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param locationId 药房id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 医嘱信息 + */ @GetMapping(value = "/advice-base-info") public R getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, @RequestParam(value = "searchKey", defaultValue = "") String searchKey, - @RequestParam(value = "locationId") Long locationId, + @RequestParam(value = "locationId",required = false) Long locationId, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return null; + return R.ok( + iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId, pageNo, pageSize)); } } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdvicePriceDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdvicePriceDto.java index 0429f458..1e237789 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdvicePriceDto.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdvicePriceDto.java @@ -4,6 +4,7 @@ import java.math.BigDecimal; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.openhis.common.annotation.Dict; import lombok.Data; import lombok.experimental.Accessors; @@ -33,4 +34,9 @@ public class AdvicePriceDto { /** 价格 */ private BigDecimal price; + /** 单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java index 6274b3d2..4b9c83af 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java @@ -1,5 +1,7 @@ package com.openhis.web.doctorstation.mapper; +import java.util.List; + import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -8,6 +10,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.AdviceInventoryDto; +import com.openhis.web.doctorstation.dto.AdvicePriceDto; /** * 医生站-医嘱/处方 应用Mapper @@ -30,4 +34,33 @@ public interface DoctorStationAdviceAppMapper { @Param("activityTableName") String activityTableName, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + /** + * 查询医嘱库存 + * + * @param locationId 药房id + * @param adviceDefinitionIdList 医嘱定义ID集合 + * @param SqlCondition sql条件 + * @return 医嘱库存 + */ + List getAdviceInventory(@Param("locationId") Long locationId, + @Param("adviceDefinitionIdList") List adviceDefinitionIdList, @Param("SqlCondition") String SqlCondition); + + /** + * 查询 费用定价子表 + * + * @param conditionCode 命中条件 + * @param chargeItemDefinitionIdList 费用定价主表ID集合 + * @return 费用定价子表 + */ + List getChildCharge(@Param("conditionCode") String conditionCode, + @Param("chargeItemDefinitionIdList") List chargeItemDefinitionIdList); + + /** + * 查询 费用定价主表 + * + * @param chargeItemDefinitionIdList 费用定价主表ID集合 + * @return 费用定价子表 + */ + List getMainCharge(@Param("chargeItemDefinitionIdList") List chargeItemDefinitionIdList); + } diff --git a/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml index f12e9f96..33d1e52b 100644 --- a/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml +++ b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml @@ -116,4 +116,66 @@ ${ew.customSqlSegment} + + + + + + \ No newline at end of file