药品目录更新

This commit is contained in:
liuhongrui
2025-03-27 17:52:01 +08:00
parent 547b776666
commit 7b312aeb2c
10 changed files with 266 additions and 134 deletions

View File

@@ -1,6 +1,9 @@
package com.openhis.web.datadictionary.appservice;
import com.openhis.administration.domain.ChargeItemDefinition;
import com.openhis.administration.domain.DeviceDefinition;
import com.openhis.medication.domain.MedicationDetail;
import com.openhis.web.datadictionary.dto.DeviceManageUpDto;
import com.openhis.web.datadictionary.dto.MedicationManageUpDto;
/**
@@ -19,4 +22,20 @@ public interface IItemDefinitionService {
*/
boolean addItem(MedicationManageUpDto medicationManageUpDto, MedicationDetail medicationDetail);
// /**
// * 添加器材的项目定价
// *
// * @param deviceManageUpDto 器材目录信息
// * @param deviceDefinition 器材信息
// */
// boolean addItem(DeviceManageUpDto deviceManageUpDto, DeviceDefinition deviceDefinition);
/**
* 修改项目定价表
*
* @param chargeItemDefinition 项目定价表信息
*/
boolean updateItem(ChargeItemDefinition chargeItemDefinition);
}

View File

@@ -8,6 +8,7 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.openhis.web.datadictionary.dto.MedicationSearchParam;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
@@ -32,14 +33,11 @@ public interface IMedicationManageAppService {
* 药品目录查询
*
* @param searchKey 查询条件
* @param ybMatchFlag 查询条件-是否对码
* @param statusEnum 查询条件-状态
* @param categoryCode 查询条件-药品分类
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 药品目录查询结果
*/
R<?> getMedicationList(String searchKey, Integer ybMatchFlag, Integer statusEnum, String categoryCode,
R<?> getMedicationList(MedicationSearchParam medicationSearchParam,String searchKey,
Integer pageNo, Integer pageSize, HttpServletRequest request);
/**

View File

@@ -3,6 +3,8 @@ package com.openhis.web.datadictionary.appservice.impl;
import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.openhis.common.enums.ConditionCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -34,6 +36,7 @@ public class ItemDefinitionServiceImpl implements IItemDefinitionService {
@Autowired
IChargeItemDefDetailService chargeItemDefDetailService;
/**
* 添加项目定价
*
@@ -52,7 +55,7 @@ public class ItemDefinitionServiceImpl implements IItemDefinitionService {
// .setOrgId(SecurityUtils.getLoginUser().getOrgId())
.setOrgId(1l)// todo 没数据先写死
// 财务类别
.setTypeCode(medicationManageUpDto.getMinimalFee())
.setTypeCode(medicationManageUpDto.getTypeCode())
// 医保类别
.setYbType(medicationManageUpDto.getYbType()).setConditionFlag(Whether.YES.getValue())
.setPrice(medicationManageUpDto.getRetailPrice());
@@ -62,17 +65,17 @@ public class ItemDefinitionServiceImpl implements IItemDefinitionService {
List<ChargeItemDefDetail> shargeItemDefDetails = new ArrayList<>();
ChargeItemDefDetail chargeItemDefDetail1 = new ChargeItemDefDetail();
chargeItemDefDetail1.setDefinitionId(chargeItemDefinition.getId())
// 单位+批次unit,pici 用,符号拼装
.setConditionCode(StringUtils.joinStrings(
medicationManageUpDto.getDoseUnitCode_dictText() + "," + medicationManageUpDto.getLotNumber()))
// 条件:采购
.setConditionCode(ConditionCode.PROCUREMENT.getCode())
// 购入价
.setAmount(medicationManageUpDto.getPurchasePrice());
ChargeItemDefDetail chargeItemDefDetail2 = new ChargeItemDefDetail();
chargeItemDefDetail2.setDefinitionId(chargeItemDefinition.getId())
// 单位+批次unit,pici 用,符号拼装
.setConditionCode(StringUtils.joinStrings(
medicationManageUpDto.getDoseUnitCode_dictText() + "," + medicationManageUpDto.getLotNumber()))
// 条件:单位
.setConditionCode(ConditionCode.UNIT.getCode())
//单位枚举
.setConditionValue(medicationManageUpDto.getUnitCode())
// 零售价
.setAmount(medicationManageUpDto.getRetailPrice());
@@ -80,9 +83,8 @@ public class ItemDefinitionServiceImpl implements IItemDefinitionService {
ChargeItemDefDetail chargeItemDefDetail3 = new ChargeItemDefDetail();
chargeItemDefDetail3.setDefinitionId(chargeItemDefinition.getId())
// 单位+批次unit,pici 用,符号拼装
.setConditionCode(StringUtils.joinStrings(
medicationManageUpDto.getDoseUnitCode_dictText() + "," + medicationManageUpDto.getLotNumber()))
// 条件:限制
.setConditionCode(ConditionCode.LIMIT.getCode())
// 最高零售价
.setAmount(medicationManageUpDto.getMaximumRetailPrice());
@@ -94,4 +96,22 @@ public class ItemDefinitionServiceImpl implements IItemDefinitionService {
return false;
}
/**
* 修改项目定价表
*
* @param chargeItemDefinition 项目定价表信息
*/
@Override
public boolean updateItem(ChargeItemDefinition chargeItemDefinition) {
// 关联项目和代码位为key更新表
LambdaUpdateWrapper<ChargeItemDefinition> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(ChargeItemDefinition::getInstanceId, chargeItemDefinition.getInstanceId());
updateWrapper.eq(ChargeItemDefinition::getInstanceTable, chargeItemDefinition.getInstanceTable())
.set(ChargeItemDefinition::getYbType, chargeItemDefinition.getYbType())
.set(ChargeItemDefinition::getTypeCode, chargeItemDefinition.getTypeCode());
return chargeItemDefinitionService.update(null, updateWrapper);
}
}

View File

@@ -4,6 +4,8 @@
package com.openhis.web.datadictionary.appservice.impl;
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;
@@ -14,10 +16,11 @@ import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
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.core.common.core.domain.R;
import com.core.common.core.domain.entity.SysDictData;
@@ -27,6 +30,7 @@ import com.core.common.utils.SecurityUtils;
import com.core.common.utils.bean.BeanUtils;
import com.core.common.utils.poi.ExcelUtil;
import com.core.system.service.ISysDictTypeService;
import com.openhis.administration.domain.ChargeItemDefinition;
import com.openhis.administration.domain.Supplier;
import com.openhis.administration.service.ISupplierService;
import com.openhis.common.constant.CommonConstants;
@@ -36,6 +40,7 @@ import com.openhis.common.enums.PermissionLimit;
import com.openhis.common.enums.PublicationStatus;
import com.openhis.common.enums.Whether;
import com.openhis.common.utils.EnumUtils;
import com.openhis.common.utils.HisQueryUtils;
import com.openhis.medication.domain.Medication;
import com.openhis.medication.domain.MedicationDefinition;
import com.openhis.medication.domain.MedicationDetail;
@@ -46,6 +51,7 @@ import com.openhis.web.datadictionary.appservice.IMedicationManageAppService;
import com.openhis.web.datadictionary.dto.MedicationManageDto;
import com.openhis.web.datadictionary.dto.MedicationManageInitDto;
import com.openhis.web.datadictionary.dto.MedicationManageUpDto;
import com.openhis.web.datadictionary.dto.MedicationSearchParam;
import com.openhis.web.datadictionary.mapper.MedicationManageSearchMapper;
/**
@@ -137,26 +143,19 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
* @return 药品目录查询结果
*/
@Override
public R<?> getMedicationList(@RequestParam(value = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "ybMatchFlag", defaultValue = "-1") Integer ybMatchFlag,
@RequestParam(value = "statusEnum", defaultValue = "-1") Integer statusEnum,
@RequestParam(value = "categoryCode", defaultValue = "") String categoryCode,
public R<?> getMedicationList(MedicationSearchParam medicationSearchParam,
@RequestParam(value = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
// 分页设置
Integer offset = (pageNo - 1) * pageSize;
// 获取租户ID
Integer tenantId = SecurityUtils.getLoginUser().getTenantId();
// 查询药品目录列表
List<MedicationManageDto> medicationDetailList = medicationManageSearchMapper.getPage(searchKey, ybMatchFlag,
statusEnum, categoryCode, tenantId, pageSize, offset);
// 查询总记录数
long total =
medicationManageSearchMapper.getPageCount(searchKey, ybMatchFlag, statusEnum, categoryCode, tenantId);
// 创建Page对象并设置属性
Page<MedicationManageDto> medicationManageDtoPage = new Page<>(pageNo, pageSize, total);
medicationManageDtoPage.setRecords(medicationDetailList);
// 构建查询条件
QueryWrapper<MedicationManageDto> queryWrapper = HisQueryUtils.buildQueryWrapper(medicationSearchParam,
searchKey, new HashSet<>(Arrays.asList("name", "name_en", "merchandise_name", "bus_no", "py_str", "wb_str",
"merchandise_py_str", "merchandise_wb_str")),
null);
IPage<MedicationManageDto> medicationManageDtoPage =
medicationManageSearchMapper.getPage(new Page<>(pageNo, pageSize), queryWrapper);
// 枚举类回显赋值
medicationManageDtoPage.getRecords().forEach(e -> {
@@ -216,10 +215,21 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
medicationDefinition
.setMerchandiseWbStr(ChineseConvertUtils.toWBFirstLetter(medicationDefinition.getMerchandiseName()));
ChargeItemDefinition chargeItemDefinition = new ChargeItemDefinition();
chargeItemDefinition.setYbType(medicationManageUpDto.getYbType())
.setTypeCode(medicationManageUpDto.getTypeCode())
.setInstanceTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION)
.setInstanceId(medicationManageUpDto.getMedicationDefId());
// 更新子表药品信息
if (medicationService.updateById(medication)) {
// 更新主表药品信息
return medicationDefinitionService.updateById(medicationDefinition)
boolean updateMedicationDefinition = medicationDefinitionService.updateById(medicationDefinition);
// 更新价格表
boolean updateChargeItemDefinition = itemDefinitionServic.updateItem(chargeItemDefinition);
return (updateMedicationDefinition && updateChargeItemDefinition)
? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"药品目录"}))
: R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
} else {
@@ -317,7 +327,7 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
// 添加药品成功后,添加相应的条件价格表信息
boolean insertItemDefinitionSuccess = itemDefinitionServic.addItem(medicationManageUpDto, medicationDetail);
return (insertMedicationSuccess || insertItemDefinitionSuccess)
return (insertMedicationSuccess && insertItemDefinitionSuccess)
? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"药品目录"}))
: R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00008, null));
} else {

View File

@@ -5,6 +5,7 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.openhis.web.datadictionary.dto.MedicationSearchParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -44,22 +45,18 @@ public class MedicationManageController {
/**
* 查询药品目录分页列表
*
* @param searchKey 查询条件
* @param statusEnum 查询条件-状态
* @param ybMatchFlag 查询条件-是否对码
* @param categoryCode 查询条件-药品分类
* @param medicationSearchParam 查询条件
* @param searchKey 模糊查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return
*/
@GetMapping("/information-page")
public R<?> getMedicationList(@RequestParam(value = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "ybMatchFlag", defaultValue = "-1") Integer ybMatchFlag,
@RequestParam(value = "statusEnum", defaultValue = "-1") Integer statusEnum,
@RequestParam(value = "categoryCode", defaultValue = "") String categoryCode,
public R<?> getMedicationList(
MedicationSearchParam medicationSearchParam,@RequestParam(value = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
return medicationManageAppService.getMedicationList(searchKey, ybMatchFlag, statusEnum, categoryCode, pageNo,
return medicationManageAppService.getMedicationList(medicationSearchParam,searchKey,pageNo,
pageSize, request);
}

View File

@@ -142,7 +142,9 @@ public class MedicationManageDto {
private String merchandiseWbStr;
/** 药品单位 */
@Dict(dictCode = "unit_code")
private String unitCode;
private String unitCode_dictText;
/** 最小单位 */
@Dict(dictCode = "unit_code")
@@ -156,8 +158,9 @@ public class MedicationManageDto {
private BigDecimal partPercent;
/** 剂量形式 */
@Dict(dictCode = "dose_from_code")
private Integer doseFrom;
private String doseFrom_enumText;
private String doseFrom_dictText;
/** 批准文号 */
private String approvalNumber;
@@ -236,11 +239,6 @@ public class MedicationManageDto {
/** 生产厂家名称 */
private String manufacturerName;
/** 常规单位 */
@Dict(dictCode = "unit_code")
private String baseUnitCode;
private String baseUnitCode_dictText;
/** 当前库存数量(常规单位) */
private String baseQuantity;
@@ -256,5 +254,12 @@ public class MedicationManageDto {
/** 单次最大用药频次 */
private String maxRateCode;
/** 医保类别 */
private String ybType;
/** 财务类别 */
@Dict(dictCode = "fin_type_code")
private String typeCode;
private String typeCode_dictText;
}

View File

@@ -121,7 +121,9 @@ public class MedicationManageUpDto {
private String merchandiseWbStr;
/** 药品单位 */
@Dict(dictCode = "unit_code")
private String unitCode;
private String unitCode_dictText;
/** 最小单位 */
private String minUnitCode;
@@ -136,7 +138,9 @@ public class MedicationManageUpDto {
private BigDecimal partPercent;
/** 剂量形式 */
@Dict(dictCode = "dose_from_code")
private Integer doseFrom;
private String doseFrom_dictText;
/** 批准文号 */
private String approvalNumber;
@@ -194,8 +198,10 @@ public class MedicationManageUpDto {
/** 医保类别 */
private String ybType;
/** 最小费用 */
private String minimalFee;
/** 财务类别 */
@Dict(dictCode = "fin_type_code")
private String typeCode;
private String typeCode_dictText;
/** 单次最小用药频次 */
private String minRateCode;
@@ -205,6 +211,7 @@ public class MedicationManageUpDto {
/** 药品状态 */
private Integer statusEnum;
private String statusEnum_enumText;
/** 拆分属性 */
private Integer partAttributeEnum;
@@ -227,5 +234,7 @@ public class MedicationManageUpDto {
/** 用量限定 */
private BigDecimal usageLimit;
/** 系统类别???? */
}

View File

@@ -0,0 +1,22 @@
package com.openhis.web.datadictionary.dto;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 药品查询信息
*
* @author liuhr
* @date 2025/3/27
*/
@Data
@Accessors(chain = true)
public class MedicationSearchParam {
/** 医保是否对码 */
private Integer ybMatchFlag;
/** 药品状态 */
private Integer statusEnum;
/** 药品分类 */
private String categoryCode;
}

View File

@@ -2,6 +2,11 @@ package com.openhis.web.datadictionary.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.outpatientmanage.dto.OutpatientInfusionRecordDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@@ -17,35 +22,18 @@ import com.openhis.web.datadictionary.dto.MedicationManageDto;
*/
@Repository
public interface MedicationManageSearchMapper extends BaseMapper<ChargeItemDefinition> {
/**
* 药品目录分页查询
*
* @param searchKey 模糊查询条件
* @param ybMatchFlag 是否对码
* @param statusEnum 状态
* @param categoryCode 分类
* @param tenantId 租户
* @param pageSize
* @param offset
* @return
*/
List<MedicationManageDto> getPage(@Param("searchKey") String searchKey, @Param("ybMatchFlag") Integer ybMatchFlag,
@Param("statusEnum") Integer statusEnum, @Param("categoryCode") String categoryCode,
@Param("tenantId") Integer tenantId, @Param("pageSize") Integer pageSize, @Param("offset") Integer offset);
/**
* 药品目录分页查询
*
* @param searchKey 模糊查询条件
* @param ybMatchFlag 是否对码
* @param statusEnum 状态
* @param categoryCode 分类
* @param tenantId 租户
*
* @param page 分页
* @param queryWrapper 查询条件
* @return
*/
Long getPageCount(@Param("searchKey") String searchKey, @Param("ybMatchFlag") Integer ybMatchFlag,
@Param("statusEnum") Integer statusEnum, @Param("categoryCode") String categoryCode,
@Param("tenantId") Integer tenantId);
IPage<MedicationManageDto> getPage(
@Param("page") Page<OutpatientInfusionRecordDto> page,
@Param(Constants.WRAPPER) QueryWrapper<MedicationManageDto> queryWrapper);
/**
* 药品详情