This commit is contained in:
wangyang
2025-03-28 14:11:21 +08:00
parent b84cef1511
commit fe0178637b
2 changed files with 69 additions and 63 deletions

View File

@@ -1,19 +1,5 @@
package com.openhis.web.pharmacymanage.appservice.impl; package com.openhis.web.pharmacymanage.appservice.impl;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R; import com.core.common.core.domain.R;
@@ -34,6 +20,18 @@ import com.openhis.web.pharmacymanage.dto.*;
import com.openhis.web.pharmacymanage.mapper.WesternMedicineDispenseMapper; import com.openhis.web.pharmacymanage.mapper.WesternMedicineDispenseMapper;
import com.openhis.workflow.domain.InventoryItem; import com.openhis.workflow.domain.InventoryItem;
import com.openhis.workflow.service.IInventoryItemService; import com.openhis.workflow.service.IInventoryItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* 西药发放 应用实现类 * 西药发放 应用实现类
@@ -42,7 +40,7 @@ import com.openhis.workflow.service.IInventoryItemService;
* @date 2025/3/14 * @date 2025/3/14
*/ */
@Service @Service
public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDispenseAppService { public class IWesternMedicineDispenseAppServiceImpl implements IWesternMedicineDispenseAppService {
@Autowired @Autowired
private IOrganizationService iOrganizationService; private IOrganizationService iOrganizationService;
@@ -69,15 +67,14 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
// 获取科室下拉选列表 // 获取科室下拉选列表
List<Organization> organizationList = iOrganizationService.getList(OrganizationClass.CLINIC.getValue()); List<Organization> organizationList = iOrganizationService.getList(OrganizationClass.CLINIC.getValue());
List<PageInitDto.DepartmentOption> organizationOptions = organizationList.stream() List<PageInitDto.DepartmentOption> organizationOptions = organizationList.stream()
.map(organization -> new PageInitDto.DepartmentOption(organization.getId(), organization.getName())) .map(organization -> new PageInitDto.DepartmentOption(organization.getId(),
.collect(Collectors.toList()); organization.getName())).collect(Collectors.toList());
// 未发药原因下拉选列表 // 未发药原因下拉选列表
List<PageInitDto.NotPerformedReasonOption> notPerformedReasonOptions = List<PageInitDto.NotPerformedReasonOption> notPerformedReasonOptions =
Stream.of(NotPerformedReasonEnum.values()) Stream.of(NotPerformedReasonEnum.values()).map(notPerformedReason ->
.map(notPerformedReason -> new PageInitDto.NotPerformedReasonOption(notPerformedReason.getValue(), new PageInitDto.NotPerformedReasonOption(notPerformedReason.getValue(),
notPerformedReason.getInfo())) notPerformedReason.getInfo())).collect(Collectors.toList());
.collect(Collectors.toList());
initDto.setDepartmentOptions(organizationOptions).setNotPerformedReasonOptions(notPerformedReasonOptions); initDto.setDepartmentOptions(organizationOptions).setNotPerformedReasonOptions(notPerformedReasonOptions);
return R.ok(initDto); return R.ok(initDto);
@@ -93,32 +90,33 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
* @return 就诊病人列表 * @return 就诊病人列表
*/ */
@Override @Override
public R<?> getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam, Integer pageNo, public R<?> getEncounterInfoListPage(EncounterInfoSearchParam encounterInfoSearchParam,
Integer pageSize, HttpServletRequest request) { Integer pageNo,
Integer pageSize,
HttpServletRequest request) {
// 查询条件设定 // 查询条件设定
String condition = encounterInfoSearchParam.getCondition(); String condition = encounterInfoSearchParam.getCondition();
if (!condition.isEmpty()) { if (!condition.isEmpty()){
Pattern pattern = Pattern.compile(".*\\d.*"); Pattern pattern = Pattern.compile(".*\\d.*");
Matcher matcher = pattern.matcher(encounterInfoSearchParam.getCondition()); Matcher matcher = pattern.matcher(encounterInfoSearchParam.getCondition());
encounterInfoSearchParam.setIdCard(matcher.find() ? condition : ""); encounterInfoSearchParam.setIdCard(matcher.find() ? condition:"");
encounterInfoSearchParam.setPatientName(!matcher.find() ? condition : ""); encounterInfoSearchParam.setPatientName(!matcher.find() ? condition:"");
} }
// 构建查询条件 // 构建查询条件
QueryWrapper<EncounterInfoSearchParam> queryWrapper = QueryWrapper<EncounterInfoSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, null, null, request); HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam,null,null, request);
// 查询就诊病人列表 // 查询就诊病人列表
Page<EncounterInfoPageDto> encounterInfoPageDto = Page<EncounterInfoPageDto> encounterInfoPageDto = westernMedicineDispenseMapper.selectEncounterInfoListPage(
westernMedicineDispenseMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper); new Page<>(pageNo, pageSize), queryWrapper);
return R.ok(encounterInfoPageDto); return R.ok(encounterInfoPageDto);
} }
/** /**
* 查询处方单列表 * 查询处方单列表
*
* @param encounterId 就诊号 * @param encounterId 就诊号
* @return 处方单列表 * @return 处方单列表
*/ */
@@ -126,15 +124,15 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
public R<?> getPrescriptionInfo(Long encounterId) { public R<?> getPrescriptionInfo(Long encounterId) {
// 患者基本信息查询 // 患者基本信息查询
PrescriptionPatientInfoDto prescriptionPatientInfoDto = PrescriptionPatientInfoDto prescriptionPatientInfoDto = westernMedicineDispenseMapper.
westernMedicineDispenseMapper.selectPrescriptionPatientInfo(encounterId); selectPrescriptionPatientInfo(encounterId);
// 处方单信息查询 // 处方单信息查询
List<PrescriptionMedicineInfoDto> prescriptionMedicineInfoList = List<PrescriptionMedicineInfoDto> prescriptionMedicineInfoList = westernMedicineDispenseMapper.
westernMedicineDispenseMapper.selectPrescriptionMedicineInfoList(encounterId); selectPrescriptionMedicineInfoList(encounterId);
// 计算合计金额 // 计算合计金额
if (!prescriptionMedicineInfoList.isEmpty()) { if(!prescriptionMedicineInfoList.isEmpty()) {
BigDecimal totalPrice = new BigDecimal(0); BigDecimal totalPrice = new BigDecimal(0);
for (PrescriptionMedicineInfoDto item : prescriptionMedicineInfoList) { for (PrescriptionMedicineInfoDto item : prescriptionMedicineInfoList) {
totalPrice.add(item.getTotal_price()); totalPrice.add(item.getTotal_price());
@@ -151,7 +149,6 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
/** /**
* 处方单核对发药 * 处方单核对发药
*
* @param prescriptionNo 处方号 * @param prescriptionNo 处方号
* @return 处理结果 * @return 处理结果
*/ */
@@ -164,9 +161,9 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
boolean iInventoryItemUpdFlg = true; boolean iInventoryItemUpdFlg = true;
// 获取药品待发放和库存信息 // 获取药品待发放和库存信息
List<DispenseInventoryDto> dispenseInventoryList = List<DispenseInventoryDto> dispenseInventoryList = westernMedicineDispenseMapper.
westernMedicineDispenseMapper.selectDispenseInventoryInfoByPrescriptionNo(prescriptionNo); selectDispenseInventoryInfoByPrescriptionNo(prescriptionNo);
if (!dispenseInventoryList.isEmpty()) { if(!dispenseInventoryList.isEmpty()){
MedicationDispense medicationDispense; MedicationDispense medicationDispense;
InventoryItem inventoryItem; InventoryItem inventoryItem;
for (DispenseInventoryDto dispenseInventoryDto : dispenseInventoryList) { for (DispenseInventoryDto dispenseInventoryDto : dispenseInventoryList) {
@@ -192,23 +189,28 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
// 库存表项目设定 // 库存表项目设定
inventoryItem = new InventoryItem(); inventoryItem = new InventoryItem();
// 库存数量 // 库存数量
if (dispenseInventoryDto.getDispenseUnitCode() if (dispenseInventoryDto.getDispenseUnitCode().equals(dispenseInventoryDto.
.equals(dispenseInventoryDto.getInventoryBaseUnitCode())) { getInventoryBaseUnitCode())) {
// id // id
inventoryItem.setId(dispenseInventoryDto.getInventoryId()); inventoryItem.setId(dispenseInventoryDto.getInventoryId());
// 包装数量 // 包装数量
inventoryItem.setBaseQuantity(new BigDecimal(dispenseInventoryDto.getDispenseQuantity())); inventoryItem.setBaseQuantity(dispenseInventoryDto.getInventoryBaseQuantity().
min(new BigDecimal(dispenseInventoryDto.getDispenseQuantity())));
// 拆零数量拆零比×包装数量 // 拆零数量拆零比×包装数量
inventoryItem.setMinQuantity(dispenseInventoryDto.getPartPercent() inventoryItem.setMinQuantity(dispenseInventoryDto.getInventoryMinQuantity().
.multiply(new BigDecimal(dispenseInventoryDto.getDispenseQuantity()))); min(dispenseInventoryDto.getPartPercent().multiply(
} else if (dispenseInventoryDto.getDispenseUnitCode() new BigDecimal(dispenseInventoryDto.getDispenseQuantity()))));
.equals(dispenseInventoryDto.getInventoryMinUnitCode())) { } else if (dispenseInventoryDto.getDispenseUnitCode().equals(dispenseInventoryDto.
getInventoryMinUnitCode())) {
// id
inventoryItem.setId(dispenseInventoryDto.getInventoryId());
// 拆零数量 // 拆零数量
inventoryItem.setMinQuantity(new BigDecimal(dispenseInventoryDto.getDispenseQuantity())); inventoryItem.setMinQuantity(dispenseInventoryDto.getInventoryMinQuantity().min(
new BigDecimal(dispenseInventoryDto.getDispenseQuantity())));
// 包装数量拆零数量÷拆零比 // 包装数量拆零数量÷拆零比
inventoryItem.setBaseQuantity(new BigDecimal(dispenseInventoryDto.getDispenseQuantity()) inventoryItem.setBaseQuantity(dispenseInventoryDto.getInventoryBaseQuantity().min(
.divide(dispenseInventoryDto.getPartPercent(), RoundingMode.HALF_UP)); new BigDecimal(dispenseInventoryDto.getDispenseQuantity()).
divide(dispenseInventoryDto.getPartPercent(),RoundingMode.HALF_UP)));
} }
inventoryItemList.add(inventoryItem); inventoryItemList.add(inventoryItem);
} }
@@ -218,28 +220,28 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
// 库存更新 // 库存更新
iInventoryItemUpdFlg = iInventoryItemService.updateBatchById(inventoryItemList); iInventoryItemUpdFlg = iInventoryItemService.updateBatchById(inventoryItemList);
} }
return iMedicationDispenseUpdFlg && iInventoryItemUpdFlg return iMedicationDispenseUpdFlg && iInventoryItemUpdFlg ?
? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
: R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null));
} }
/** /**
* 作废 * 作废
*
* @param prescriptionNo 处方号 * @param prescriptionNo 处方号
* @param notPerformedReasonEnum 未发药原因 * @param notPerformedReasonEnum 未发药原因
* @return 处理结果 * @return 处理结果
*/ */
@Override @Override
public R<?> medicineCancel(String prescriptionNo, Integer notPerformedReasonEnum) { public R<?> medicineCancel(String prescriptionNo,
Integer notPerformedReasonEnum) {
List<MedicationDispense> medicationDispenseList = new ArrayList<>(); List<MedicationDispense> medicationDispenseList = new ArrayList<>();
boolean iMedicationDispenseUpdFlg = true; boolean iMedicationDispenseUpdFlg = true;
// 获取药品待发放记录 // 获取药品待发放记录
List<DispenseInventoryDto> dispenseInventoryList = List<DispenseInventoryDto> dispenseInventoryList = westernMedicineDispenseMapper.
westernMedicineDispenseMapper.selectDispenseInventoryInfoByPrescriptionNo(prescriptionNo); selectDispenseInventoryInfoByPrescriptionNo(prescriptionNo);
if (!dispenseInventoryList.isEmpty()) { if(!dispenseInventoryList.isEmpty()){
MedicationDispense medicationDispense; MedicationDispense medicationDispense;
for (DispenseInventoryDto dispenseInventoryDto : dispenseInventoryList) { for (DispenseInventoryDto dispenseInventoryDto : dispenseInventoryList) {
@@ -260,7 +262,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
// 药品发放更新 // 药品发放更新
iMedicationDispenseUpdFlg = iMedicationDispenseService.updateBatchById(medicationDispenseList); iMedicationDispenseUpdFlg = iMedicationDispenseService.updateBatchById(medicationDispenseList);
} }
return iMedicationDispenseUpdFlg ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) return iMedicationDispenseUpdFlg?
R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
: R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null));
} }
} }

View File

@@ -3,12 +3,12 @@
*/ */
package com.openhis.web.pharmacymanage.dto; package com.openhis.web.pharmacymanage.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
/** /**
* 就诊人员列表 * 就诊人员列表
* *
@@ -24,6 +24,9 @@ public class PrescriptionMedicineInfoDto implements Serializable {
/** 科室 */ /** 科室 */
private String departmentName; private String departmentName;
/** 项目类型 */
private String itemType;
/** 开单医生 */ /** 开单医生 */
private String doctorName; private String doctorName;