解决合并冲突

This commit is contained in:
2025-12-10 14:20:24 +08:00
parent e1385cb3e6
commit 18f6a845e6
804 changed files with 61881 additions and 13577 deletions

View File

@@ -1,6 +1,7 @@
package com.openhis.web.pharmacymanage.appservice;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacymanage.dto.MedDetailsSearchParam;
@@ -33,6 +34,9 @@ public interface IMedicationDetailsAppService {
R<?> getAmbPractitionerDetailPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request);
void makeExcelFile(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize, String searchKey,
HttpServletResponse response, HttpServletRequest request);
/**
* 门诊发药明细流水账
*
@@ -45,6 +49,7 @@ public interface IMedicationDetailsAppService {
*/
R<?> getAmbMedicationDispenseDetailPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo,
Integer pageSize, String searchKey, HttpServletRequest request);
}
// /**
// * 门诊/住院人员发药明细帐、住院耗材记账领用明细
@@ -71,5 +76,3 @@ public interface IMedicationDetailsAppService {
// */
// R<?> getMedRunningAccountPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize,
// String searchKey, HttpServletRequest request);
}

View File

@@ -3,9 +3,11 @@ package com.openhis.web.pharmacymanage.appservice;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacymanage.dto.MedicineSummarySearchParam;
import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam;
import com.openhis.web.pharmacymanage.dto.*;
/**
* 住院汇总发药 应用实现接口
@@ -23,31 +25,87 @@ public interface ISummaryDispenseMedicineAppService {
R<?> init();
/**
* 医嘱查询
* 分页查询住院病人列表
*
* @param admissionPageParam 查询条件
* @param startTime 开始时间
* @param endTime 结束时间
* @param searchKey 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
* @return 病人列表
*/
R<?> getEncounterInfoListPage(AdmissionPageParam admissionPageParam, String startTime, String endTime,
Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request);
void makeExcelFile(MedicineSummarySearchParam searchParam, Integer pageNo,
Integer pageSize, String searchKey,
HttpServletRequest request, HttpServletResponse response);
/**
* 住院汇总药品
*
* @param searchParam 查询信息
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 药品汇总
*/
R<?> getSummaryMedicationInfo(MedicineSummarySearchParam searchParam, Integer pageNo, Integer pageSize);
/**
* 住院汇总发药单
*
* @param searchParam 查询信息
* @param startTime 开始时间
* @param endTime 结束时间
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
* @return 药品汇总
*/
R<?> getSummaryFromInfo(FromSummarySearchParam searchParam, String startTime, String endTime, String searchKey,
Integer pageNo, Integer pageSize, HttpServletRequest request);
/**
* 住院药品汇总发药单详细
*
* @param searchParam 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
* @param searchKey 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
*/
R<?> getMedicationSummaryInfo(MedicineSummarySearchParam searchParam, String searchKey, Integer pageNo,
Integer pageSize, HttpServletRequest request);
R<?> getOrderInfo(FromSearchParam searchParam, String searchKey, Integer pageNo, Integer pageSize,
HttpServletRequest request);
/**
* 处方单核对发药
*
* @param searchParam 条件
* @param dispenseMedicineList 发药信息
* @return 处理结果
*/
R<?> SummaryDispenseMedicine(List<MedicineSummarySearchParam> searchParam);
R<?> SummaryDispenseMedicine(List<DispenseItemDto> dispenseMedicineList);
/**
* 作废
*
* @param deliveryIdList 供应发放id
* @param notPerformedReasonEnum 未发原因
* @param dispenseMedicineList 作废信息
* @return 处理结果
*/
R<?> dispenseCancel(List<Long> deliveryIdList, Integer notPerformedReasonEnum);
R<?> dispenseCancel(List<DispenseItemDto> dispenseMedicineList);
/**
* 退药处理
*
* @param dispenseMedicineList 退药清单
* @return 处理结果
*/
R<?> medicineReturn(List<DispenseItemDto> dispenseMedicineList);
}

View File

@@ -145,7 +145,7 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
// 构建查询条件
QueryWrapper<EncounterInfoSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.IdCard,
CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)),
request);
// 查询就诊病人列表
@@ -218,45 +218,45 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
List<Long> devDispenseIdList =
dispenseDeviceList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
// 获取库存信息
List<InventoryDto> inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null,
List<UnDispenseInventoryDto> inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 按每个药品分组
Map<Long, List<InventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId));
Map<Long, List<UnDispenseInventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId));
// 遍历每个分组校验库存状态
for (Map.Entry<Long, List<InventoryDto>> entry : groupedByItemId.entrySet()) {
List<InventoryDto> groupItems = entry.getValue();
if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum)
for (Map.Entry<Long, List<UnDispenseInventoryDto>> entry : groupedByItemId.entrySet()) {
List<UnDispenseInventoryDto> groupItems = entry.getValue();
if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum)
.allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) {
// 库存停供校验
return R.fail(groupItems.get(0).getItemName() + "库存已停供");
}
}
if (!inventoryList.isEmpty()) {
for (InventoryDto inventoryDto : inventoryList) {
if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) {
for (UnDispenseInventoryDto unDispenseInventoryDto : inventoryList) {
if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())) {
InventoryItem inventoryItem = new InventoryItem();
// 库存数量判定
if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) {
if (unDispenseInventoryDto.getDispenseUnit().equals(unDispenseInventoryDto.getInventoryUnitCode())) {
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量
BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity());
BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract(unDispenseInventoryDto.getQuantity());
// 库存数量判定
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
// 库存数量不足
return R.fail(inventoryDto.getItemName() + "当前库存数量不足");
return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足");
} else {
inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity);
inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity);
}
} else {
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量)
BigDecimal quantity = inventoryDto.getInventoryQuantity()
.subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity()));
BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity()
.subtract(unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity()));
// 库存数量判定
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
// 库存数量不足
return R.fail(inventoryDto.getItemName() + "当前库存数量不足");
return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足");
} else {
inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity);
inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity);
}
}
inventoryItemList.add(inventoryItem);
@@ -396,45 +396,45 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
.list(new LambdaQueryWrapper<DeviceDispense>().in(DeviceDispense::getDeviceReqId, devRequestIdList))
.stream().map(DeviceDispense::getId).collect(Collectors.toList());
// 获取库存信息
List<InventoryDto> inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null,
List<UnDispenseInventoryDto> inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 按每个耗材分组
Map<Long, List<InventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId));
Map<Long, List<UnDispenseInventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId));
// 遍历每个分组校验库存状态
for (Map.Entry<Long, List<InventoryDto>> entry : groupedByItemId.entrySet()) {
List<InventoryDto> groupItems = entry.getValue();
if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum)
for (Map.Entry<Long, List<UnDispenseInventoryDto>> entry : groupedByItemId.entrySet()) {
List<UnDispenseInventoryDto> groupItems = entry.getValue();
if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum)
.allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) {
// 库存停供校验
return R.fail(groupItems.get(0).getItemName() + "库存已停供");
}
}
if (!inventoryList.isEmpty()) {
for (InventoryDto inventoryDto : inventoryList) {
if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) {
for (UnDispenseInventoryDto unDispenseInventoryDto : inventoryList) {
if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())) {
InventoryItem inventoryItem = new InventoryItem();
// 库存数量判定
if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) {
if (unDispenseInventoryDto.getDispenseUnit().equals(unDispenseInventoryDto.getInventoryUnitCode())) {
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量
BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity());
BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract(unDispenseInventoryDto.getQuantity());
// 库存数量判定
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
// 库存数量不足
return R.fail(inventoryDto.getItemName() + "当前库存数量不足");
return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足");
} else {
inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity);
inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity);
}
} else {
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量)
BigDecimal quantity = inventoryDto.getInventoryQuantity()
.subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity()));
BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity()
.subtract(unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity()));
// 库存数量判定
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
// 库存数量不足
return R.fail(inventoryDto.getItemName() + "当前库存数量不足");
return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足");
} else {
inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity);
inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity);
}
}
inventoryItemList.add(inventoryItem);

View File

@@ -1,27 +1,38 @@
package com.openhis.web.pharmacymanage.appservice.impl;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.openhis.administration.domain.Practitioner;
import com.openhis.administration.service.IPractitionerService;
import com.openhis.common.enums.*;
import com.openhis.web.pharmacymanage.dto.*;
import com.core.common.utils.poi.ExcelUtil;
import com.openhis.web.inventorymanage.dto.ReceiptPageDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.core.domain.entity.SysDictData;
import com.core.system.service.ISysDictTypeService;
import com.openhis.administration.domain.Practitioner;
import com.openhis.administration.service.IPractitionerService;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.enums.DispenseStatus;
import com.openhis.common.enums.EncounterClass;
import com.openhis.common.enums.PublicationStatus;
import com.openhis.common.enums.RequestStatus;
import com.openhis.common.utils.HisQueryUtils;
import com.openhis.web.pharmacymanage.appservice.IMedicationDetailsAppService;
import com.openhis.web.pharmacymanage.dto.MedDetailedAccountPageDto;
import com.openhis.web.pharmacymanage.dto.MedDetailsInitDto;
import com.openhis.web.pharmacymanage.dto.MedDetailsSearchParam;
import com.openhis.web.pharmacymanage.mapper.MedicationDetailsMapper;
import com.openhis.web.reportmanage.utils.ExcelFillerUtil;
/**
* 发药明细 应用实现类
@@ -35,14 +46,17 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer
@Autowired
private MedicationDetailsMapper medicationDetailsMapper;
@Autowired
private ISysDictTypeService sysDictTypeService;
@Autowired
private IPractitionerService iPractitionerService;
/**
* 获取页面初始化信息
*
* @return 初始化信息
*/
@Override
public R<?> init() {
@@ -87,12 +101,150 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer
Page<MedDetailedAccountPageDto> medDetailsPage =
medicationDetailsMapper.selectAmbPractitionerDetailPage(new Page<>(pageNo, pageSize), queryWrapper,
EncounterClass.AMB.getValue(), DispenseStatus.COMPLETED.getValue(), RequestStatus.COMPLETED.getValue(),
DispenseStatus.REFUNDED.getValue(), 1, flg);
DispenseStatus.REFUNDED.getValue(), 1, flg, CommonConstants.TableName.MED_MEDICATION_DEFINITION,
CommonConstants.TableName.ADM_DEVICE_DEFINITION);
return R.ok(medDetailsPage);
}
/**
* 发药明细导出
*
* @param medDetailsSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param response 响应数据
* @param request 请求数据
*
*/
@Override
public void makeExcelFile(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletResponse response, HttpServletRequest request) {
R<?> result = this.getAmbPractitionerDetailPage(medDetailsSearchParam, 1, 10000, searchKey, request);
if (result != null && result.getData() != null) {
// 先获取Page对象再获取其中的记录列表
Page<MedDetailedAccountPageDto> pageData = (Page<MedDetailedAccountPageDto>)result.getData();
List<MedDetailedAccountPageDto> dataList = pageData.getRecords();
// 获取字典数据
for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) {
String unitCode = medDetailedAccountPageDto.getUnitCode();
// 添加空值检查
if (unitCode != null && sysDictTypeService != null) {
// 缓存字典数据,避免重复查询
List<SysDictData> unitCodelist = sysDictTypeService.selectDictDataByType("unit_code");
if (unitCodelist != null) {
for (SysDictData dictData : unitCodelist) {
if (dictData != null && dictData.getDictValue() != null
&& dictData.getDictValue().equals(unitCode)) {
medDetailedAccountPageDto.setUnitCode_dictText(dictData.getDictLabel());
break;
}
}
}
}
}
// 将发药数量与单位拼接
for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) {
String unitCode_dictText = medDetailedAccountPageDto.getUnitCode_dictText();
Integer dispenseQuantity = medDetailedAccountPageDto.getDispenseQuantity();
// 将发药数量与单位拼接
medDetailedAccountPageDto.setDispenseQuantitystr(dispenseQuantity + unitCode_dictText);
}
// 将退药数量与单位拼接
for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) {
String unitCode_dictText = medDetailedAccountPageDto.getUnitCode_dictText();
Integer refundQuantity = medDetailedAccountPageDto.getRefundQuantity();
// 添加完整的空值检查和默认值处理
String unitText = (unitCode_dictText != null) ? unitCode_dictText : "";
if (refundQuantity == null) {
medDetailedAccountPageDto.setRefundQuantitystr("0.00" + unitCode_dictText);
} else if (refundQuantity == 0) {
medDetailedAccountPageDto.setRefundQuantitystr("0.00" + unitCode_dictText);
} else {
medDetailedAccountPageDto.setRefundQuantitystr(refundQuantity.toString() + unitCode_dictText);
}
}
// 将退药金额
for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) {
BigDecimal refundPrice = medDetailedAccountPageDto.getRefundPrice();
if (refundPrice == null) {
medDetailedAccountPageDto.setRefundPricestr("0.00" );
} else if (refundPrice.signum() == 0) {
medDetailedAccountPageDto.setRefundPricestr("0.00" );
} else {
refundPrice = refundPrice.setScale(6, RoundingMode.HALF_UP);
medDetailedAccountPageDto.setRefundPricestr(refundPrice.toString() );
}
}
//发药金额
for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) {
BigDecimal dispensePrice = medDetailedAccountPageDto.getDispensePrice();
if (dispensePrice == null) {
medDetailedAccountPageDto.setDispensePricestr("0.00" );
} else if (dispensePrice.signum() == 0) {
medDetailedAccountPageDto.setDispensePricestr("0.00" );
} else {
dispensePrice = dispensePrice.setScale(6, RoundingMode.HALF_UP);
medDetailedAccountPageDto.setDispensePricestr(dispensePrice.toString() );
}
}
// 添加项目类别
for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) {
String itemTable = medDetailedAccountPageDto.getItemTable();
if (itemTable != null) {
if(itemTable.equals("med_medication_definition")){
medDetailedAccountPageDto.setItemTable("药品");
}
if(itemTable.equals("adm_device_definition")){
medDetailedAccountPageDto.setItemTable("耗材");
}
}
else{
medDetailedAccountPageDto.setItemTable("未知类型");
}
}
//判断项目类别
try {
// 准备表头key对应DTO的字段名
//Map<String, String> headers = new LinkedHashMap<>();
// headers.put("practitionerName", "发药人");
// headers.put("dispenseNo", "发药单号");
// headers.put("medicationName", "药品项目");
// headers.put("itemTable", "项目类别");
// headers.put("busNo", "药品编码");
// headers.put("ybNo", "医保编码");
// headers.put("totalVolume", "规格");
// headers.put("dispenseQuantitystr", "发药数量");
// headers.put("dispensePricestr", "发药金额");
// headers.put("refundQuantitystr", "退药数量");
// headers.put("refundPricestr", "退药金额");
// headers.put("lotNumber", "生产批号");
// headers.put("manufacturerText", "厂家/产地");
// headers.put("supplierName", "供应商");
// headers.put("dispenseTime", "发药时间");
// 导出到Excel
// ExcelFillerUtil.makeExcelFile(response, dataList, headers, "发药明细", null);
// 导出到Excel
ExcelUtil<MedDetailedAccountPageDto> util = new ExcelUtil<MedDetailedAccountPageDto>(MedDetailedAccountPageDto.class);
util.exportExcel(response,dataList,"发药明细");
} catch (Exception e) {
e.printStackTrace();
System.out.printf("导出Excel失败" + e.getMessage());
}
}
}
/**
* 门诊发药明细流水账
*
@@ -117,7 +269,8 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer
Page<MedDetailedAccountPageDto> medDetailsPage =
medicationDetailsMapper.selectAmbPractitionerDetailPage(new Page<>(pageNo, pageSize), queryWrapper,
EncounterClass.AMB.getValue(), DispenseStatus.COMPLETED.getValue(), RequestStatus.COMPLETED.getValue(),
DispenseStatus.REFUNDED.getValue(), 2, flg);
DispenseStatus.REFUNDED.getValue(), 2, flg, CommonConstants.TableName.MED_MEDICATION_DEFINITION,
CommonConstants.TableName.ADM_DEVICE_DEFINITION);
return R.ok(medDetailsPage);

View File

@@ -8,9 +8,6 @@ import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.openhis.yb.dto.MedicalInventory3511Output;
import com.openhis.yb.dto.MedicalInventory3511Param;
import com.openhis.yb.service.YbHttpUtils;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONArray;
@@ -51,7 +48,9 @@ import com.openhis.workflow.service.IDeviceRequestService;
import com.openhis.workflow.service.IInventoryItemService;
import com.openhis.yb.domain.ClinicSettle;
import com.openhis.yb.dto.Medical3506Param;
import com.openhis.yb.dto.MedicalInventory3511Param;
import com.openhis.yb.service.IClinicSettleService;
import com.openhis.yb.service.YbHttpUtils;
import com.openhis.yb.service.YbManager;
/**
@@ -165,7 +164,7 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
Integer pageSize, HttpServletRequest request) {
// 构建查询条件
QueryWrapper<EncounterInfoDto> queryWrapper = HisQueryUtils.buildQueryWrapper(encounterInfoDto, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.IdCard,
CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)),
request);
// 查询退药患者分页列表
@@ -395,12 +394,12 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 获取库存信息
List<InventoryDto> inventoryList =
List<UnDispenseInventoryDto> inventoryList =
returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, medDispenseIdList,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
if (inventoryList != null && !inventoryList.isEmpty()) {
// 设置库存数量
for (InventoryDto inventory : inventoryList) {
for (UnDispenseInventoryDto inventory : inventoryList) {
// 库存表项目设定
InventoryItem inventoryItem = new InventoryItem();
// id
@@ -636,9 +635,6 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
} else if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(dispenseInventoryDto.getItemTable())) {
medical3506Param.setFixmedinsHilistName(CommonConstants.TableName.ADM_DEVICE_DEFINITION);
}
MedicalInventory3511Output medicalInventory3511Output =
ybHttpUtils.querySalesInfo(getMedical3511Param(dispenseInventoryDto));
medical3506Param.setMedinsProdSelNo(medicalInventory3511Output.getMedinsProdSelNo());
return medical3506Param;
}
@@ -649,7 +645,8 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE);
// TODO
medicalInventory3511Param.setFixmedinsCode(fixmedinsCode).setMedinsListCodg(dispenseInventoryDto.getYbNo())
.setFixmedinsBchno(dispenseInventoryDto.getLotNumber()).setBegndate(dispenseInventoryDto.getDispenseTime()).setEnddate(dispenseInventoryDto.getDispenseTime());
.setFixmedinsBchno(dispenseInventoryDto.getLotNumber()).setBegndate(dispenseInventoryDto.getDispenseTime())
.setEnddate(dispenseInventoryDto.getDispenseTime());
return medicalInventory3511Param;
}

View File

@@ -177,7 +177,7 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
// 构建查询条件
QueryWrapper<EncounterInfoSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.IdCard,
CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)),
request);
// 查询就诊病人列表
@@ -249,40 +249,43 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
List<Long> medDispenseIdList =
dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
// 获取库存信息
List<InventoryDto> inventoryList = returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
List<UnDispenseInventoryDto> inventoryList =
returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 按每个药品分组
Map<Long, List<InventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId));
Map<Long, List<UnDispenseInventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId));
// 遍历每个分组校验库存状态
for (Map.Entry<Long, List<InventoryDto>> entry : groupedByItemId.entrySet()) {
List<InventoryDto> groupItems = entry.getValue();
if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum)
for (Map.Entry<Long, List<UnDispenseInventoryDto>> entry : groupedByItemId.entrySet()) {
List<UnDispenseInventoryDto> groupItems = entry.getValue();
if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum)
.allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) {
// 库存停供校验
return R.fail(groupItems.get(0).getItemName() + "库存已停供");
}
}
if (!inventoryList.isEmpty()) {
for (InventoryDto inventoryDto : inventoryList) {
if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) {
for (UnDispenseInventoryDto unDispenseInventoryDto : inventoryList) {
if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())) {
// 库存数量判定
if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) {
if (unDispenseInventoryDto.getDispenseUnit()
.equals(unDispenseInventoryDto.getInventoryUnitCode())) {
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量
BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity());
BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity()
.subtract(unDispenseInventoryDto.getQuantity());
// 库存数量判定
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
// 库存数量不足
return R.fail(inventoryDto.getItemName() + "当前库存数量不足");
return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足");
}
} else {
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量)
BigDecimal quantity = inventoryDto.getInventoryQuantity()
.subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity()));
BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract(
unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity()));
// 库存数量判定
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
// 库存数量不足
return R.fail(inventoryDto.getItemName() + "当前库存数量不足");
return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足");
}
}
}
@@ -332,46 +335,50 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
// 获取发药单id列表
List<Long> medDispenseIdList =
dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
// 获取库存信息
List<InventoryDto> inventoryList = returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 获取药品发放库存信息
List<UnDispenseInventoryDto> inventoryList =
returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 按每个药品分组
Map<Long, List<InventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId));
Map<Long, List<UnDispenseInventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId));
// 遍历每个分组校验库存状态
for (Map.Entry<Long, List<InventoryDto>> entry : groupedByItemId.entrySet()) {
List<InventoryDto> groupItems = entry.getValue();
if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum)
for (Map.Entry<Long, List<UnDispenseInventoryDto>> entry : groupedByItemId.entrySet()) {
List<UnDispenseInventoryDto> groupItems = entry.getValue();
if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum)
.allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) {
// 库存停供校验
return R.fail(groupItems.get(0).getItemName() + "库存已停供");
}
}
if (!inventoryList.isEmpty()) {
for (InventoryDto inventoryDto : inventoryList) {
if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) {
for (UnDispenseInventoryDto unDispenseInventoryDto : inventoryList) {
if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())) {
InventoryItem inventoryItem = new InventoryItem();
// 库存数量判定
if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) {
if (unDispenseInventoryDto.getDispenseUnit()
.equals(unDispenseInventoryDto.getInventoryUnitCode())) {
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量
BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity());
BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity()
.subtract(unDispenseInventoryDto.getQuantity());
// 库存数量判定
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
// 库存数量不足
return R.fail(inventoryDto.getItemName() + "当前库存数量不足");
return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足");
} else {
inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity);
inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity);
}
} else {
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量)
BigDecimal quantity = inventoryDto.getInventoryQuantity()
.subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity()));
BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract(
unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity()));
// 库存数量判定
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
// 库存数量不足
return R.fail(inventoryDto.getItemName() + "当前库存数量不足");
return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足");
} else {
inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity);
inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity);
}
}
inventoryItemList.add(inventoryItem);

View File

@@ -1,7 +1,9 @@
package com.openhis.web.pharmacymanage.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.openhis.web.pharmacymanage.appservice.impl.MedicationDetailsAppServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -115,4 +117,14 @@ public class MedicationDetailsController {
// return medicationDetailsAppService.getMedRunningAccountPage(medDetailsSearchParam, pageNo, pageSize, searchKey,
// request);
// }
@GetMapping(value = "/excel-out")
public void exportExcel(MedDetailsSearchParam medDetailsSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey,
HttpServletRequest request, HttpServletResponse response) {
medicationDetailsAppService.makeExcelFile(medDetailsSearchParam, pageNo, pageSize, searchKey, response, request);
}
}

View File

@@ -2,6 +2,7 @@ package com.openhis.web.pharmacymanage.controller;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,7 +28,7 @@ import lombok.extern.slf4j.Slf4j;
@AllArgsConstructor
public class ReturnMedicineController {
@Autowired
@Resource
public IReturnMedicineAppService returnMedicineAppService;
/**

View File

@@ -4,16 +4,20 @@ import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam;
import com.openhis.web.pharmacymanage.dto.*;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacymanage.appservice.ISummaryDispenseMedicineAppService;
import com.openhis.web.pharmacymanage.dto.MedicineSummarySearchParam;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* 住院汇总发药
*
@@ -40,7 +44,63 @@ public class SummaryDispenseMedicineController {
}
/**
* 住院药品汇总发药单查询
* 分页查询住院病人列表
*
* @param admissionPageParam 查询条件
* @param startTime 开始时间
* @param endTime 结束时间
* @param searchKey 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
* @return 病人列表
*/
@GetMapping("/encounter-list")
public R<?> getEncounterInfoList(AdmissionPageParam admissionPageParam, String startTime, String endTime,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return medicineSummaryDispenseService.getEncounterInfoListPage(admissionPageParam, startTime, endTime, pageNo,
pageSize, searchKey, request);
}
/**
* 住院汇总药品
*
* @param searchParam 查询信息
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 药品汇总
*/
@GetMapping("/medication_summary-list")
public R<?> getSummaryMedicationInfo(MedicineSummarySearchParam searchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return medicineSummaryDispenseService.getSummaryMedicationInfo(searchParam, pageNo, pageSize);
}
/**
* 住院汇总发药单
*
* @param searchParam 查询条件
* @param startTime 开始时间
* @param endTime 结束时间
* @param searchKey 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
* @return 汇总单汇总
*/
@GetMapping("/from_summary-list")
public R<?> getSummaryFromInfo(FromSummarySearchParam searchParam, String startTime, String endTime,
String searchKey, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
return medicineSummaryDispenseService.getSummaryFromInfo(searchParam, startTime, endTime, searchKey, pageNo,
pageSize, request);
}
/**
* 住院药品汇总发药单详细
*
* @param searchParam 查询条件
* @param searchKey 模糊查询关键字
@@ -48,35 +108,77 @@ public class SummaryDispenseMedicineController {
* @param pageSize 查询条数
* @param request 请求数据
*/
@GetMapping("/medication_summary-list")
public R<?> getMedicationSummaryInfo(MedicineSummarySearchParam searchParam, String searchKey,
@GetMapping("/from-list")
public R<?> getFromInfo(FromSearchParam searchParam, String searchKey,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
return medicineSummaryDispenseService.getMedicationSummaryInfo(searchParam, searchKey, pageNo, pageSize,
request);
return medicineSummaryDispenseService.getOrderInfo(searchParam, searchKey, pageNo, pageSize, request);
}
/**
* 汇总发药
* 药品发药
*
* @param searchParam 条件
* @param dispenseMedicineList 发药信息
* @return 处理结果
*/
@PutMapping("/summary-dispense-medicine")
public R<?> SummaryDispenseMedicine(@RequestBody List<MedicineSummarySearchParam> searchParam) {
return medicineSummaryDispenseService.SummaryDispenseMedicine(searchParam);
public R<?> SummaryDispenseMedicine(@RequestBody List<DispenseItemDto> dispenseMedicineList) {
return medicineSummaryDispenseService.SummaryDispenseMedicine(dispenseMedicineList);
}
/**
* 作废
*
* @param deliveryIdList 供应发放id
* @param notPerformedReasonEnum 未发原因
* @param dispenseMedicineList 作废信息
* @return 处理结果
*/
@PutMapping("/dispense-cancel")
public R<?> dispenseCancel(@RequestBody List<Long> deliveryIdList, Integer notPerformedReasonEnum) {
return medicineSummaryDispenseService.dispenseCancel(deliveryIdList, notPerformedReasonEnum);
public R<?> dispenseCancel(@RequestBody List<DispenseItemDto> dispenseMedicineList) {
return medicineSummaryDispenseService.dispenseCancel(dispenseMedicineList);
}
/**
* 退药处理
*
* @param dispenseMedicineList 退药清单
* @return 处理结果
*/
@PutMapping("/medicine-return")
public R<?> medicineReturn(@RequestBody List<DispenseItemDto> dispenseMedicineList) {
return medicineSummaryDispenseService.medicineReturn(dispenseMedicineList);
}
/**
* 住院发药
*
* @param searchParam 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
*/
@GetMapping(value = "/excel-out")
public void excelOut(MedicineSummarySearchParam searchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10000") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey,
HttpServletRequest request,HttpServletResponse response) {
medicineSummaryDispenseService.makeExcelFile(searchParam, pageNo, pageSize, searchKey, request, response);
}
/**
* 住院药品汇总
*
* @param searchParam 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
*/
}

View File

@@ -2,6 +2,7 @@ package com.openhis.web.pharmacymanage.controller;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,7 +29,7 @@ import lombok.extern.slf4j.Slf4j;
@AllArgsConstructor
public class WesternMedicineDispenseController {
@Autowired
@Resource
public IWesternMedicineDispenseAppService westernMedicineDispenseService;
/**

View File

@@ -27,6 +27,9 @@ public class DispenseItemDto {
@JsonSerialize(using = ToStringSerializer.class)
private Long dispenseId;
/** 单据号 */
private String busNo;
/** 追溯码 */
private String traceNo;

View File

@@ -0,0 +1,12 @@
package com.openhis.web.pharmacymanage.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class FromSearchParam implements Serializable {
/** 单据号 */
private String busNo;
}

View File

@@ -0,0 +1,36 @@
package com.openhis.web.pharmacymanage.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.util.Date;
/**
* 汇总发药单信息
*
*/
@Data
public class FromSummaryDto {
/** 单据号 */
private String busNo;
/** 申请时间 */
private Date applyTime;
/** 领药人 */
@JsonSerialize(using = ToStringSerializer.class)
private Long applicantId;
private String applicantName;
/** 发放地点 */
@JsonSerialize(using = ToStringSerializer.class)
private Long sourceLocationId;
private String sourceLocationName;
/** 状态 */
private Integer statusEnum;
private String statusEnum_enumText;
}

View File

@@ -0,0 +1,16 @@
package com.openhis.web.pharmacymanage.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class FromSummarySearchParam implements Serializable {
/** 单据号 */
private String busNo;
/** 发药状态 */
private Integer statusEnum;
}

View File

@@ -6,6 +6,7 @@ package com.openhis.web.pharmacymanage.dto;
import java.math.BigDecimal;
import java.util.Date;
import com.core.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@@ -57,26 +58,37 @@ public class ItemDispenseOrderDto {
/**
* 发放药房
*/
@Excel(name = "发放药房",sort = 3)
private String locationName;
/**
* 批次号
*/
@Excel(name = "批次号",sort = 4)
private String lotNumber;
/**
* 科室
*/
@Excel(name = "科室",sort = 5)
private String departmentName;
/**
* 开单医生ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long doctorId;
/**
* 开单医生
*/
@Excel(name = "开单医生",sort = 6)
private String doctorName;
/**
* 发药医生
*/
@Excel(name = "发药医生",sort = 7)
private String dispenseDoctorName;
/**
@@ -84,37 +96,46 @@ public class ItemDispenseOrderDto {
*/
@Dict(dictCode = "med_category_code")
private String itemType;
@Excel(name = "项目类型",sort = 8)
private String itemType_dictText;
/**
* 发药状态
*/
private Integer statusEnum;
@Excel(name = "发药状态",sort = 9)
private String statusEnum_enumText;
/**
* 诊断名称
*/
@Excel(name = "诊断名称",sort = 10)
private String conditionName;
/**
* 处方号
*/
@Excel(name = "处方号",sort = 11)
private String prescriptionNo;
/**
* 项目名称
*/
@Excel(name = "项目名称",sort = 1,width = 30)
private String itemName;
/**
* 规格
*/
@Excel(name = "规格",sort = 2,width = 30)
private String totalVolume;
/**
* 单次剂量
*/
@Excel(name = "单次剂量",sort = 12)
private BigDecimal dose;
/**
@@ -122,6 +143,7 @@ public class ItemDispenseOrderDto {
*/
@Dict(dictCode = "rate_code")
private String rateCode;
@Excel(name = "用药频次",sort = 13)
private String rateCode_dictText;
/**
@@ -129,45 +151,58 @@ public class ItemDispenseOrderDto {
*/
@Dict(dictCode = "method_code")
private String methodCode;
@Excel(name = "用法",sort = 14)
private String methodCode_dictText;
/**
* 剂量单位
*/
@Dict(dictCode = "unit_code")
private String doseUnitCode;
@Excel(name = "剂量单位",sort = 15)
private String doseUnitCode_dictText;
/**
* 单位
*/
@Dict(dictCode = "unit_code")
private String unitCode;
@Excel(name = "单位",sort = 16)
private String unitCode_dictText;
/**
* 单次发药数
*/
@Excel(name = "单次发药数",sort = 17)
private Integer dispensePerQuantity;
/**
* 每次发药供应天数
*/
@Excel(name = "每次发药供应天数",sort = 18)
private Integer dispensePerDuration;
/**
* 数量
*/
@Excel(name = "数量",sort = 19)
private Integer quantity;
/**
* 单价
*/
@Excel(name = "单价",sort = 20)
private BigDecimal unitPrice;
/**
* 金额
*/
@Excel(name = "金额",sort = 21)
private BigDecimal totalPrice;
/**
* 组合号
@@ -179,28 +214,35 @@ public class ItemDispenseOrderDto {
* 就诊NO
*/
@JsonSerialize(using = ToStringSerializer.class)
@Excel(name = "就诊NO",sort = 24)
private String encounterBusNo;
/** 开具日期 */
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "开具日期",sort = 25, dateFormat = "yyyy-MM-dd HH:mm:ss",width = 25)
private Date reqAuthoredTime;
/** 皮试标志 */
@Excel(name = "皮试标志",sort = 26)
private Integer skinTestFlag;
/** 中药标识 */
@Excel(name = "中药标识",sort = 27)
private Integer tcmFlag;
/** 所在表 */
@Excel(name = "所在表",sort = 28,width = 30)
private String itemTable;
/**
* 生产厂家
*/
@Excel(name = "生产厂家",sort = 22,width = 35)
private String manufacturerText;
/**
* 追溯码
*/
@Excel(name = "追溯码",sort = 23)
private String traceNo;
}

View File

@@ -1,5 +1,9 @@
package com.openhis.web.pharmacymanage.dto;
import java.math.BigDecimal;
import java.util.Date;
import com.core.common.annotation.Excel;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.annotation.Dict;
@@ -7,9 +11,6 @@ import com.openhis.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date;
/**
* 发药明细账分页列表 dto
*
@@ -19,7 +20,6 @@ import java.util.Date;
@Data
@Accessors(chain = true)
public class MedDetailedAccountPageDto {
/** 门诊号 */
private String outpatientNo;
@@ -29,29 +29,54 @@ public class MedDetailedAccountPageDto {
/** 患者 */
private String patientName;
/** 项目类别 */
private String pinYin;
/** 接收发药数量 */
@Excel(name = "发药数量")
private String dispenseQuantitystr;
/** 接收发药金额 */
@Excel(name = "发药金额")
private String dispensePricestr;
/** 接收退药数量 */
@Excel(name = "退药数量")
private String refundQuantitystr;
/** 接收退药金额 */
@Excel(name = "退药金额")
private String refundPricestr;
/** 发药人 */
@JsonSerialize(using = ToStringSerializer.class)
private String practitionerId;
/** 发药人名称 */
@Excel(name = "发药人")
private String practitionerName;
/** 药品项目 */
@Excel(name = "药品项目")
private String medicationName;
/** 药品拼音 */
private String pyStr;
/** 项目编码 */
@Excel(name = "药品编码")
private String busNo;
/** 发药编码 */
@Excel(name = "发药单号")
private String dispenseNo;
/** 医保编码 */
@Excel(name = "医保编码")
private String ybNo;
/** 规格 */
@Excel(name = "规格")
private String totalVolume;
/** 发药数量 */
@@ -67,12 +92,15 @@ public class MedDetailedAccountPageDto {
private BigDecimal refundPrice;
/** 批号 */
@Excel(name = "生产批号")
private String lotNumber;
/** 厂商 */
@Excel(name = "厂家/产地")
private String manufacturerText;
/** 供应商 */
@Excel(name = "供应商")
private String supplierName;
/** 发药单位 */
@@ -86,6 +114,10 @@ public class MedDetailedAccountPageDto {
private String refundUnitCode_dictText;
/** 发药时间 */
@Excel(name = "发药时间", dateFormat="yyyy-MM-dd HH:mm:ss")
private Date dispenseTime;
/** 项目所在表 */
// @Excel(name = "项目类别")
private String itemTable;
}

View File

@@ -23,7 +23,6 @@ public class MedDetailsSearchParam {
private Long locationId;
/** 患者姓名 */
@Length(max = 2000)
private String patientName;
/** 发药人 */
@@ -40,4 +39,7 @@ public class MedDetailsSearchParam {
/** 门诊住院flg */
private Integer flag;
/** 项目所在表 */
private String itemTable;
}

View File

@@ -4,6 +4,7 @@
package com.openhis.web.pharmacymanage.dto;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -97,7 +98,7 @@ public class MedicineSummaryDto {
private String applicantName;
/** 申请时间 */
private Data applyTime;
private Date applyTime;
/**
* 状态

View File

@@ -21,6 +21,10 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class MedicineSummarySearchParam implements Serializable {
/** 就诊ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long encounterId;
/** 科室 */
@JsonSerialize(using = ToStringSerializer.class)
private Long orgId;

View File

@@ -11,14 +11,14 @@ import lombok.Data;
import lombok.experimental.Accessors;
/**
* 库存信息
* 待发放库存信息
*
* @author yangmo
* @date 2025-04-08
*/
@Data
@Accessors(chain = true)
public class InventoryDto implements Serializable {
public class UnDispenseInventoryDto implements Serializable {
/** 库存ID */
private Long inventoryId;
@@ -29,6 +29,12 @@ public class InventoryDto implements Serializable {
/** 项目ID */
private Long itemId;
/** 批号 */
private String lotNumber;
/** 发放药房id */
private Long locationId;
/** 拆零单位 */
private String inventoryUnitCode;

View File

@@ -24,12 +24,16 @@ public interface MedicationDetailsMapper {
* @param completed 发药状态:已发药
* @param refunded 发药状态:已退药
* @param dispenseEnum 统计类型
* @param medMedicationDefinition 药品
* @param admDeviceDefinition 耗材
* @return 门诊人员发药明细表
*/
Page<MedDetailedAccountPageDto> selectAmbPractitionerDetailPage(@Param("page") Page<MedDetailedAccountPageDto> page,
@Param(Constants.WRAPPER) QueryWrapper<MedDetailsSearchParam> queryWrapper, @Param("amb") Integer amb,
@Param("completed") Integer completed, @Param("agree") Integer agree, @Param("refunded") Integer refunded,
@Param("dispenseEnum") Integer dispenseEnum, @Param("flg") Integer flg);
@Param("dispenseEnum") Integer dispenseEnum, @Param("flg") Integer flg,
@Param("medMedicationDefinition") String medMedicationDefinition,
@Param("admDeviceDefinition") String admDeviceDefinition);
// /**
// * 门诊发药明细流水账

View File

@@ -11,7 +11,10 @@ import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.openhis.web.pharmacymanage.dto.*;
import com.openhis.web.pharmacymanage.dto.DispenseInventoryDto;
import com.openhis.web.pharmacymanage.dto.EncounterInfoDto;
import com.openhis.web.pharmacymanage.dto.ReturnMedicineInfoDto;
import com.openhis.web.pharmacymanage.dto.UnDispenseInventoryDto;
@Repository
public interface ReturnMedicineMapper {
@@ -25,7 +28,7 @@ public interface ReturnMedicineMapper {
* @return 退药患者分页列表
*/
Page<EncounterInfoDto> selectEncounterInfoListPage(@Param("page") Page<EncounterInfoDto> page,
@Param(Constants.WRAPPER) QueryWrapper<EncounterInfoDto> queryWrapper, @Param("amb") Integer amb);
@Param(Constants.WRAPPER) QueryWrapper<EncounterInfoDto> queryWrapper, @Param("amb") Integer amb);
/**
* 申请退药清单查询
@@ -55,7 +58,7 @@ public interface ReturnMedicineMapper {
* @param admDeviceDefinition 耗材定义表
* @return 待发药信息
*/
List<InventoryDto> selectInventoryInfoList(@Param("devDispenseIdList") List<Long> devDispenseIdList,
List<UnDispenseInventoryDto> selectInventoryInfoList(@Param("devDispenseIdList") List<Long> devDispenseIdList,
@Param("medDispenseIdList") List<Long> medDispenseIdList,
@Param("medMedicationDefinition") String medMedicationDefinition,
@Param("admDeviceDefinition") String admDeviceDefinition);

View File

@@ -3,6 +3,7 @@
*/
package com.openhis.web.pharmacymanage.mapper;
import com.openhis.web.pharmacymanage.dto.FromSearchParam;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@@ -20,12 +21,18 @@ public interface SummaryDispenseMedicineMapper {
*
* @param page 分页
* @param queryWrapper 查询条件
* @param medicationDefinition 药品定义
* @param deviceDefinition 耗材定义
* @return 汇总药品信息
*/
Page<MedicineSummaryDto> selectMedicationSummaryInfo(@Param("page") Page<MedicineSummaryDto> page,
@Param(Constants.WRAPPER) QueryWrapper<MedicineSummarySearchParam> queryWrapper,
@Param("medicationDefinition") String medicationDefinition, @Param("deviceDefinition") String deviceDefinition,
@Param("typeEnum") Integer typeEnum, @Param("categoryEnum") Integer categoryEnum);
@Param(Constants.WRAPPER) QueryWrapper<MedicineSummarySearchParam> queryWrapper);
/**
* 汇总药品信息列表查询
*
* @param page 分页
* @param queryWrapper 查询条件
* @return 汇总药品信息
*/
Page<MedicineSummaryDto> selectOrderInfo(@Param("page") Page<MedicineSummaryDto> page,
@Param(Constants.WRAPPER) QueryWrapper<FromSearchParam> queryWrapper);
}