版本更新

This commit is contained in:
Zhang.WH
2025-09-03 15:54:41 +08:00
parent 0b93d16b64
commit 8f82322d10
3290 changed files with 154339 additions and 23829 deletions

View File

@@ -0,0 +1,79 @@
package com.openhis.web.pharmacyDispensarymanage.appservice;
import javax.servlet.http.HttpServletRequest;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensarySearchParam;
/**
* 药房共通方法
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyDispensaryCommonService {
/**
* 单据初始化
*
* @return 初始化信息
*/
PharmacyDispensaryInitDto init();
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
R<?> getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request);
/**
* 单据列表
*
* @param purchaseOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @param locationFlg 仓库flg
* @param supplyType 单据类型
* @return 订货单据分页列表
*/
R<?> getPage(PharmacyDispensarySearchParam purchaseOrderSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request,String locationFlg,Integer supplyType);
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> deleteOrder(String busNo);
// /**
// * 提交审批
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// R<?> submitApproval(String busNo);
// /**
// * 同意审批
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// R<?> agreeApproval(String busNo);
// /**
// * 撤回审批
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// R<?> withdrawApproval(String busNo);
}

View File

@@ -0,0 +1,40 @@
package com.openhis.web.pharmacyDispensarymanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
/**
* 药房发药单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyDispensaryDispensingOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 发药单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 发药单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 添加/编辑发药单
*
* @param dispenseIdList 药品发放id
* @return 操作结果
*/
boolean addOrEditDispensingOrder(List<Long> dispenseIdList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.pharmacyDispensarymanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
/**
* 药房损益单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyDispensaryProfitLossOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 损益单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 损益单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑损益单
*
* @param profitLossOrderDtoList 损益信息
* @return 操作结果
*/
R<?> addOrEditProfitLossOrder(List<PharmacyDispensaryDetailDto> profitLossOrderDtoList);
}

View File

@@ -0,0 +1,90 @@
package com.openhis.web.pharmacyDispensarymanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.inventorymanage.dto.ItemChargeDetailDto;
import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto;
/**
* 药房审批方法
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyDispensaryReceiptApprovalService {
/**
* 请领单同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> requisitionOrderAgreeApproval(String busNo);
/**
* 药房入库单据审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> stockInOrderAgreeApproved(String busNo);
/**
* 药库退库审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> returnToWarehouseAgreeApproved(String busNo);
// /**
// * 药房发药审批通过
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// R<?> dispensingAgreeApproved(String busNo);
/**
* 药房损益单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> profitLossAgreeApproved(String busNo);
/**
* 药房盘点单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> stocktakingAgreepproved(String busNo);
/**
* 药房调入单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> transferInAgreeApproved(String busNo);
/**
* 药房调出单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> transferOutAgreeApproved(String busNo);
/**
* 根据单据号获取供应单据及供应项相关详细信息
*
* @param busNo 单据号
* @return 供应单据及供应项相关详细信息
*/
List<SupplyItemDetailDto> getSupplyItemDetail(String busNo);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.pharmacyDispensarymanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
/**
* 药房请领单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyDispensaryRequisitionOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 请领单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 请领单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑采购单
*
* @param requisitionOrderDtoList 采购信息
* @return 操作结果
*/
R<?> addOrEditRequisitionOrder(List<PharmacyDispensaryDetailDto> requisitionOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.pharmacyDispensarymanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
/**
* 药房退库单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyDispensaryReturnToWarehouseOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 退库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退库单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑退库单
*
* @param returnToDispensaryOrderDtoList 退库信息
* @return 操作结果
*/
R<?> addOrEditReturnToWarehouseOrder(List<PharmacyDispensaryDetailDto> returnToDispensaryOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.pharmacyDispensarymanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
/**
* 药房入库单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyDispensaryStockInOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 入库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 入库单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑入库单
*
* @param stockInOrderDtoList 入库信息
* @return 操作结果
*/
R<?> addOrEditStockInOrder(List<PharmacyDispensaryDetailDto> stockInOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.pharmacyDispensarymanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
/**
* 药房盘点单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyDispensaryStocktakingOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 盘点单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 盘点单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑盘点单
*
* @param stocktakingOrderDtoList 盘点信息
* @return 操作结果
*/
R<?> addOrEditStocktakingOrder(List<PharmacyDispensaryDetailDto> stocktakingOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.pharmacyDispensarymanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
/**
* 药房调入单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyDispensaryTransferInOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 调入单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调入单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑采购单
*
* @param transferInOrderDtoList 采购信息
* @return 操作结果
*/
R<?> addOrEditTransferInOrder(List<PharmacyDispensaryDetailDto> transferInOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.pharmacyDispensarymanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
/**
* 药房调出单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyDispensaryTransferOutOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 调出单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调出单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑采购单
*
* @param transferOutOrderDtoList 采购信息
* @return 操作结果
*/
R<?> addOrEditTransferOutOrder(List<PharmacyDispensaryDetailDto> transferOutOrderDtoList);
}

View File

@@ -0,0 +1,228 @@
package com.openhis.web.pharmacyDispensarymanage.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;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.openhis.workflow.domain.SupplyRequest;
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.utils.AssignSeqUtil;
import com.core.common.utils.MessageUtils;
import com.openhis.administration.domain.Practitioner;
import com.openhis.administration.domain.Supplier;
import com.openhis.administration.service.ILocationService;
import com.openhis.administration.service.IPractitionerService;
import com.openhis.administration.service.ISupplierService;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.AcceptanceResult;
import com.openhis.common.enums.PackagingCondition;
import com.openhis.common.enums.SupplyStatus;
import com.openhis.common.enums.SupplyType;
import com.openhis.common.utils.EnumUtils;
import com.openhis.common.utils.HisQueryUtils;
import com.openhis.web.common.appservice.ICommonService;
import com.openhis.web.common.dto.LocationDto;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryMedicationInfoDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensarySearchParam;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryRequisitionOrderMapper;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药房共通
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyDispensaryCommonServiceImpl implements IPharmacyDispensaryCommonService {
@Resource
private ISupplierService supplierService;
@Resource
private IPractitionerService practitionerService;
@Resource
private ISupplyRequestService supplyRequestService;
@Resource
private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper;
@Resource
private ICommonService commonServiceImpl;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public PharmacyDispensaryInitDto init() {
PharmacyDispensaryInitDto orderInitDto = new PharmacyDispensaryInitDto();
// 查询供应商列表
List<Supplier> supplierList = supplierService.getList();
// 查询经手人列表
List<Practitioner> practitionerList = practitionerService.getList();
// 经手人信息
List<PharmacyDispensaryInitDto.LongOption> practitionerListOption = practitionerList.stream()
.map(practitioner -> new PharmacyDispensaryInitDto.LongOption(practitioner.getId(), practitioner.getName()))
.collect(Collectors.toList());
// 供应商信息
List<PharmacyDispensaryInitDto.SupplierOption> supplierListOption = supplierList.stream()
.map(supplier -> new PharmacyDispensaryInitDto.SupplierOption(supplier.getId(), supplier.getName() ,supplier.getPhone()))
.collect(Collectors.toList());
// 审批状态
List<PharmacyDispensaryInitDto.IntegerOption> supplyStatusOption = Stream.of(SupplyStatus.values()).map(
supplyStatus -> new PharmacyDispensaryInitDto.IntegerOption(supplyStatus.getValue(), supplyStatus.getInfo()))
.collect(Collectors.toList());
// 包装情况
List<PharmacyDispensaryInitDto.IntegerOption> packagingConditionOption = Stream.of(PackagingCondition.values())
.map(packagingCondition -> new PharmacyDispensaryInitDto.IntegerOption(packagingCondition.getValue(),
packagingCondition.getInfo()))
.collect(Collectors.toList());
// 验收结果
List<PharmacyDispensaryInitDto.IntegerOption> acceptanceResultOption = Stream.of(AcceptanceResult.values())
.map(acceptanceResult -> new PharmacyDispensaryInitDto.IntegerOption(acceptanceResult.getValue(),
acceptanceResult.getInfo()))
.collect(Collectors.toList());
// 仓库列表
List<LocationDto> cabinetList = commonServiceImpl.getCabinetList();
// 药房列表
List<LocationDto> pharmacyList = commonServiceImpl.getPharmacyList();
orderInitDto.setCabinetListOptions(cabinetList).setPharmacyListOptions(pharmacyList).setSupplierOption(supplierListOption)
.setPractitionerOption(practitionerListOption).setSupplyStatusOptions(supplyStatusOption)
.setPackagingConditionOptions(packagingConditionOption)
.setAcceptanceResultoryOptions(acceptanceResultOption);
return orderInitDto;
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@Override
public R<?> getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam, Integer pageNo,
Integer pageSize, String searchKey, HttpServletRequest request) {
Long locationId = purchaseOrderSearchParam.getLocationId();
purchaseOrderSearchParam.setLocationId(null);
Long supplierId = purchaseOrderSearchParam.getSupplierId();
purchaseOrderSearchParam.setSupplierId(null);
// 构建查询条件
QueryWrapper<PharmacyDispensarySearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(purchaseOrderSearchParam, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.Name, CommonConstants.FieldName.PyStr)), request);
// 设置排序
queryWrapper.orderByDesc(CommonConstants.FieldName.Name);
Page<PharmacyDispensaryMedicationInfoDto> medicationInfoDto = pharmacyDispensaryCommonMapper
.getMedicationInfo(new Page<>(pageNo, pageSize), queryWrapper, locationId, supplierId);
for (PharmacyDispensaryMedicationInfoDto item : medicationInfoDto.getRecords()) {
List<PharmacyDispensaryMedicationInfoDto.Option> unitList = new ArrayList<>();
unitList
.add(new PharmacyDispensaryMedicationInfoDto.Option(item.getUnitCode(), item.getUnitCode_dictText()));
unitList.add(
new PharmacyDispensaryMedicationInfoDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(medicationInfoDto);
}
/**
* 单据列表
*
* @param purchaseOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @param locationFlg 仓库flg
* @param supplyType 单据类型
* @return 订货单据分页列表
*/
@Override
public R<?> getPage(PharmacyDispensarySearchParam purchaseOrderSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request, String locationFlg,Integer supplyType) {
//判断哪个画面使用
if (supplyType != null) {
purchaseOrderSearchParam.setTypeEnum(supplyType);
}
// if (locationForm != null) {
// purchaseOrderSearchParam.setLocationTypeEnum(locationForm);
// }
String originalBusNoFlg = purchaseOrderSearchParam.getOriginalBusNoFlg();
purchaseOrderSearchParam.setOriginalBusNoFlg(null);
// 构建查询条件
QueryWrapper<PharmacyDispensarySearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(purchaseOrderSearchParam, searchKey,
new HashSet<>(
Arrays.asList(CommonConstants.FieldName.SupplyBusNo, CommonConstants.FieldName.ApplicantName)),
request);
// 设置排序
queryWrapper.orderByDesc(CommonConstants.FieldName.SupplyBusNo);
// 查询订货单分页列表
Page<PharmacyDispensaryDto> purchaseOrderDtoPage =
pharmacyDispensaryCommonMapper.getPage(new Page<>(pageNo, pageSize), queryWrapper,originalBusNoFlg, locationFlg);
purchaseOrderDtoPage.getRecords().forEach(e -> {
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
return R.ok(purchaseOrderDtoPage);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> deleteOrder(String busNo) {
// 根据原始单据号查询信息
List<SupplyRequest> supplyRequest = supplyRequestService.getSupplyByOriginalBusNo(busNo);
if (!supplyRequest.isEmpty()) {
// 将原始单据号信息的原始单据号删除
boolean flg = supplyRequestService.updateByBusNo(supplyRequest.get(0).getBusNo());
if (!flg) {
R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
// 删除单据
boolean result = supplyRequestService.removeByBusNo(busNo);
return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
: R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}

View File

@@ -0,0 +1,185 @@
package com.openhis.web.pharmacyDispensarymanage.appservice.impl;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import com.openhis.medication.domain.MedicationDispense;
import com.openhis.medication.domain.MedicationRequest;
import com.openhis.medication.service.IMedicationDispenseService;
import com.openhis.medication.service.IMedicationRequestService;
import com.openhis.workflow.domain.SupplyDelivery;
import com.openhis.workflow.service.ISupplyDeliveryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryDispensingOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryDispensingOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药房发药单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyDispensaryDispensingOrderServiceImpl implements IPharmacyDispensaryDispensingOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Resource
private ISupplyDeliveryService supplyDeliveryService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper;
@Autowired
private PharmacyDispensaryDispensingOrderMapper pharmacyDispensaryDispensingOrderMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init();
// 单据分类
List<PharmacyDispensaryInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption
.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getValue(),
SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getInfo()));
supplyCategoryOption
.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_DISPENSING.getValue(),
SupplyCategory.INPATIENT_PATIENT_DISPENSING.getInfo()));
supplyCategoryOption.add(
new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getValue(),
SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 发药单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 发药单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<PharmacyDispensaryDetailDto> dispensingOrderDtoDetailPage =
pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
dispensingOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
return R.ok(dispensingOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 单据号
*/
public String getBusNo() {
return assignSeqUtil.getSeqByDay(AssignSeqEnum.DISPENSING_ORDER.getPrefix(), 4);
}
/**
* 添加/编辑发药单
*
* @param dispenseIdList 药品发放id
* @return 操作结果
*/
@Override
public boolean addOrEditDispensingOrder(List<Long> dispenseIdList) {
// 获取单据号
String busNo = this.getBusNo();
// 获取更表所需信息
List<PharmacyDispensaryDetailDto> detailDto =
pharmacyDispensaryDispensingOrderMapper.getInfo(dispenseIdList, DispenseStatus.COMPLETED.getValue());
List<SupplyRequest> supplyRequestList = new ArrayList<>();
SupplyRequest supplyRequest;
List<SupplyDelivery> supplyDeliveryList = new ArrayList<>();
SupplyDelivery supplyDelivery;
for (PharmacyDispensaryDetailDto item : detailDto) {
// 供应申请
supplyRequest = new SupplyRequest().setBusNo(busNo).setTypeEnum(SupplyType.DISPENSING_ORDER.getValue())
.setStatusEnum(SupplyStatus.AGREE.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity())
.setLotNumber(item.getLotNumber())
.setSourceTypeEnum(LocationForm.PHARMACY.getValue()).setSourceLocationId(item.getSourceLocationId())
.setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue())
.setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId())
.setApplyTime(item.getApplyTime()).setApproverId(item.getApproverId())
.setApprovalTime(item.getApprovalTime());
supplyRequestList.add(supplyRequest);
// 供应发放
supplyDelivery = new SupplyDelivery().setRequestId(supplyRequest.getId())
.setStatusEnum(DispenseStatus.COMPLETED.getValue()).setTypeEnum(supplyRequest.getTypeEnum())
.setItemTable(supplyRequest.getItemTable()).setItemId(supplyRequest.getItemId())
.setBasedOnTable(CommonConstants.TableName.MED_MEDICATION_DISPENSE).setBasedOnIds(item.getDispenseIds())
.setUnitCode(supplyRequest.getUnitCode()).setQuantity(supplyRequest.getItemQuantity())
.setLotNumber(supplyRequest.getLotNumber())
.setPractitionerId(supplyRequest.getApplicantId()).setOccurrenceTime(supplyRequest.getApprovalTime())
.setReceiverId(supplyRequest.getPurposeLocationId()).setReceiveTime(supplyRequest.getApprovalTime());
supplyDeliveryList.add(supplyDelivery);
}
// 更新供应请求表
boolean requestFlg = supplyRequestService.saveBatch(supplyRequestList);
if (!requestFlg) {
return false;
}
// 更新供应发放表
boolean deliveryFlg = supplyDeliveryService.saveBatch(supplyDeliveryList);
if (!deliveryFlg) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,174 @@
package com.openhis.web.pharmacyDispensarymanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryProfitLossOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryProfitLossOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药房损益单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyDispensaryProfitLossOrderServiceImpl implements IPharmacyDispensaryProfitLossOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init();
// 单据分类
List<PharmacyDispensaryInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(),
SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo()));
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(),
SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo()));
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.STANDBY_RESCUE_MEDICINES.getValue(),
SupplyCategory.STANDBY_RESCUE_MEDICINES.getInfo()));
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getValue(),
SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getInfo()));
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.DONATED_MEDICINES.getValue(),
SupplyCategory.DONATED_MEDICINES.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 损益单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 损益单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<PharmacyDispensaryDetailDto> profitLossOrderDtoDetailPage =
pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
profitLossOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<PharmacyDispensaryDetailDto.Option> unitList;
for (PharmacyDispensaryDetailDto item : profitLossOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText()
));
item.setUnitList(unitList);
}
return R.ok(profitLossOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_PRPFITLOSS.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑损益单
*
* @param profitLossOrderDtoList 损益信息
* @return 操作结果
*/
@Override
public R<?> addOrEditProfitLossOrder(List<PharmacyDispensaryDetailDto> profitLossOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(profitLossOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (PharmacyDispensaryDetailDto item : profitLossOrderDtoList) {
SupplyRequest supplyRequest =
new SupplyRequest().setBusNo(item.getBusNo()).setTypeEnum(SupplyType.PURCHASE_PRPFITLOSS.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setPrice(item.getPrice())
.setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice())
.setTotalRetailPrice(item.getTotalRetailPrice()).setBatchInventory(item.getBatchInventory())
.setSpecificationInventory(item.getSpecificationInventory()).setStartTime(item.getStartTime())
.setEndTime(item.getEndTime()).setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setReason(item.getReason())
.setPurposeTypeEnum(LocationForm.PHARMACY.getValue()).setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId())
.setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,933 @@
package com.openhis.web.pharmacyDispensarymanage.appservice.impl;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.core.common.core.domain.R;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.SecurityUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.DispenseStatus;
import com.openhis.common.enums.SupplyType;
import com.openhis.common.enums.TraceNoStatus;
import com.openhis.common.enums.Whether;
import com.openhis.common.enums.ybenums.YbInvChgType;
import com.openhis.common.enums.ybenums.YbRxFlag;
import com.openhis.medication.domain.MedicationDispense;
import com.openhis.medication.service.IMedicationDispenseService;
import com.openhis.web.inventorymanage.appservice.IReceiptApprovalAppService;
import com.openhis.web.inventorymanage.appservice.ITraceNoAppService;
import com.openhis.web.inventorymanage.assembler.InventoryManageAssembler;
import com.openhis.web.inventorymanage.dto.ItemChargeDetailDto;
import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto;
import com.openhis.web.inventorymanage.mapper.ReceiptApprovalMapper;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReceiptApprovalService;
import com.openhis.workflow.domain.DeviceDispense;
import com.openhis.workflow.domain.InventoryItem;
import com.openhis.workflow.domain.SupplyDelivery;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.IDeviceDispenseService;
import com.openhis.workflow.service.IInventoryItemService;
import com.openhis.workflow.service.ISupplyDeliveryService;
import com.openhis.workflow.service.ISupplyRequestService;
import com.openhis.yb.dto.Medical3503Param;
import com.openhis.yb.dto.MedicalInventory3501Param;
import com.openhis.yb.dto.MedicalInventory3502Param;
import com.openhis.yb.dto.MedicalPurchase3504Param;
import com.openhis.yb.service.YbManager;
/**
* 药房审批
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyDispensaryReceiptApprovalServiceImpl implements IPharmacyDispensaryReceiptApprovalService {
@Autowired
private ITraceNoAppService traceNoAppService;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private ISupplyDeliveryService supplyDeliveryService;
@Autowired
private IInventoryItemService inventoryItemService;
@Autowired
private ReceiptApprovalMapper receiptApprovalMapper;
@Autowired
private YbManager ybService;
@Autowired
private IMedicationDispenseService medicationDispenseService;
@Autowired
private IDeviceDispenseService deviceDispenseService;
@Autowired
private IReceiptApprovalAppService receiptApprovalAppService;
/**
* 请领单同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> requisitionOrderAgreeApproval(String busNo) {
// 获取当前时间
Date now = DateUtils.getNowDate();
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.agreeRequest(busNo, now);
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// // 获取审批通过后的供应请求id列表
// List<Long> supplyReqIdList = agreedList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
//
// // 校验(已经审批通过的单号(发放状态是已完成),不能再重复审批通过)
// boolean validation = supplyDeliveryService.supplyDeliveryValidation(supplyReqIdList);
// if (validation) {
// throw new ServiceException("请勿重复审批");
// }
// // 根据单据,生成供应发放单
// List<SupplyDelivery> deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now);
// if (deliveredList.isEmpty()) {
// return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
// }
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
/**
* 药房入库单据审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> stockInOrderAgreeApproved(String busNo) {
// 获取当前时间
Date now = DateUtils.getNowDate();
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.agreeRequest(busNo, now);
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 根据单据,发放物品
List<SupplyDelivery> deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now);
if (deliveredList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 查询供应项目的详细信息
List<SupplyItemDetailDto> supplyItemDetailList = this.getSupplyItemDetail(busNo);
// 返回信息
String returnMsg = null;
if (!supplyItemDetailList.isEmpty()) {
InventoryItem inventoryItemPurpose = null;
// 新增库存信息
List<SupplyItemDetailDto> supplyList = new ArrayList<>();
for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) {
// 根据项目id,产品批号仓库id 查询仓库库存表信息
List<InventoryItem> inventoryItemList = inventoryItemService.selectInventoryByItemId(
supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(),
supplyItemDetailDto.getPurposeLocationId(), SecurityUtils.getLoginUser().getTenantId());
if (!inventoryItemList.isEmpty()) {
inventoryItemPurpose = inventoryItemList.get(0);
}
if (inventoryItemPurpose == null) {
// 新增库存信息
supplyList.add(supplyItemDetailDto);
} else {
// 最小数量(最小单位库存数量)
BigDecimal minQuantity = inventoryItemPurpose.getQuantity();
// 计算盘点后库存数量,结果取小单位
// 供应申请的物品计量单位与包装单位相同
if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) {
// 源仓库库存+(调拨数量*拆零比)
minQuantity = minQuantity
.add(supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity()));
} else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) {
// 供应申请的物品计量单位与最小单位相同
// 源仓库库存+调拨数量
minQuantity = minQuantity.add(supplyItemDetailDto.getItemQuantity());
}
// 更新源仓库库存数量
Boolean aBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItemPurpose.getId(), minQuantity, now);
if (!aBoolean) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
}
if (!supplyList.isEmpty()) {
// 将供应项目的详细信息装配为库存项目
List<InventoryItem> inventoryItemList = InventoryManageAssembler.assembleInventoryItem(supplyList);
// 入库
inventoryItemService.stockIn(inventoryItemList);
}
// 追加追溯码信息
boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(),
SupplyType.PURCHASE_STOCKIN.getValue());
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 调用医保商品采购接口 todo 药房相关医保接口未对应
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
List<String> uploadFailedNoList =
this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.PURCHASE_IN, false, true, false, now);
if (!uploadFailedNoList.isEmpty()) {
returnMsg = "3503商品采购上传错误错误项目编码" + uploadFailedNoList;
} else {
returnMsg = "3503商品采购上传成功";
}
}
}
return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
/**
* 药库退库审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> returnToWarehouseAgreeApproved(String busNo) {
// 获取当前时间
Date now = DateUtils.getNowDate();
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.agreeRequest(busNo, now);
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 根据单据,发放物品
List<SupplyDelivery> deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now);
if (deliveredList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 查询供应项目的详细信息
List<SupplyItemDetailDto> supplyItemDetailList = this.getSupplyItemDetail(busNo);
// 返回信息
String returnMsg = null;
if (!supplyItemDetailList.isEmpty()) {
for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) {
// 根据项目id,产品批号目的仓库id 查询仓库库存表信息
List<InventoryItem> inventoryItemList = inventoryItemService.selectInventoryByItemId(
supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(),
supplyItemDetailDto.getSourceLocationId(), SecurityUtils.getLoginUser().getTenantId());
InventoryItem inventoryItemSource;
if (!inventoryItemList.isEmpty()) {
inventoryItemSource = inventoryItemList.get(0);
// 最小数量(最小单位库存数量)
BigDecimal minQuantity = inventoryItemSource.getQuantity();
// 计算退货后库存数量,结果取小单位
// 供应申请的物品计量单位与包装单位相同
if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) {
if (minQuantity.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) {
// 库存数量不足
return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null));
} else {
// 仓库库存-(退货数量*拆零比)
minQuantity = minQuantity.subtract(
supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity()));
}
} else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) {
if (minQuantity.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) {
// 库存数量不足
return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null));
} else {
// 供应申请的物品计量单位与最小单位相同
// 仓库库存-退货数量
minQuantity = minQuantity.subtract(supplyItemDetailDto.getItemQuantity());
}
}
// 更新仓库库存数量
Boolean aBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItemSource.getId(), minQuantity, now);
if (!aBoolean) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
}
// 追加追溯码信息
boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(),
SupplyType.PURCHASE_RETURN.getValue());
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 调用医保采购退货接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
List<String> uploadFailedNoList =
this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.RETURN_OUT, false, false, true, now);
if (!uploadFailedNoList.isEmpty()) {
returnMsg = "3504采购退货上传错误错误项目编码" + uploadFailedNoList;
}
}
}
return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
//
// /**
// * 药房发药审批通过 todo 发药只查询,没有审批
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// @Override
// public R<?> dispensingAgreeApproved(String busNo) {
// // 获取当前时间
// Date now = DateUtils.getNowDate();
// // 审批单据并返回单据详情
// List<SupplyRequest> agreedList = supplyRequestService.agreeRequest(busNo, now);
// if (agreedList.isEmpty()) {
// return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
// }
// // 根据单据,发放物品
// List<SupplyDelivery> deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now);
// if (deliveredList.isEmpty()) {
// return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
// }
//
// // 查询供应项目的详细信息
// List<SupplyItemDetailDto> supplyItemDetailList = this.getSupplyItemDetail(busNo);
//
// if (!supplyItemDetailList.isEmpty()) {
//
// for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) {
// // 根据项目id,产品批号源仓库id 查询源仓库库存表信息
// List<InventoryItem> inventoryItemSourceList = inventoryItemService.selectInventoryByItemId(
// supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(),
// supplyItemDetailDto.getSourceLocationId(), SecurityUtils.getLoginUser().getTenantId());
// InventoryItem inventoryItemSource = new InventoryItem();
// if (!inventoryItemSourceList.isEmpty()) {
// inventoryItemSource = inventoryItemSourceList.get(0);
//
// // 包装数量(常规单位库存数量) 更新库存数量方法中没用到
// BigDecimal baseQuantitySource = inventoryItemSource.getQuantity();
// // 最小数量(最小单位库存数量)
// BigDecimal minQuantitySource = inventoryItemSource.getQuantity();
//
// // 供应申请的物品计量单位与包装单位相同
// if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) {
// if (minQuantitySource.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) {
// // 库存数量不足
// return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null));
// } else {
// // 源仓库库存-(领用数量*拆零比)
// minQuantitySource = minQuantitySource.subtract(
// supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity()));
// }
// } else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) {
// if (minQuantitySource.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) {
// // 库存数量不足
// return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null));
// } else {
// // 供应申请的物品计量单位与最小单位相同
// // 源仓库库存-领用数量
// minQuantitySource = minQuantitySource.subtract(supplyItemDetailDto.getItemQuantity());
// }
// }
// // 更新源仓库库存数量
// Boolean aBooleanSource = inventoryItemService.updateInventoryQuantity(inventoryItemSource.getId(),
// baseQuantitySource, minQuantitySource, now, supplyItemDetailDto.getTraceNo());
//
// if (!aBooleanSource) {
// return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
// }
// }
// }
//
// }
// return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
// }
/**
* 药房损益单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> profitLossAgreeApproved(String busNo) {
// 获取当前时间
Date now = DateUtils.getNowDate();
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.agreeRequest(busNo, now);
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 根据单据,生成供应发放单
List<SupplyDelivery> deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now);
if (deliveredList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 返回信息
String returnMsg = null;
// 查询供应项目的详细信息
List<SupplyItemDetailDto> supplyItemDetailList = this.getSupplyItemDetail(busNo);
if (!supplyItemDetailList.isEmpty()) {
for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) {
// 根据id产品批号仓库 查询库存表信息
List<InventoryItem> inventoryItemList = inventoryItemService.selectInventoryByItemId(
supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(),
supplyItemDetailDto.getPurposeLocationId(), SecurityUtils.getLoginUser().getTenantId());
InventoryItem inventoryItem = new InventoryItem();
if (!inventoryItemList.isEmpty()) {
inventoryItem = inventoryItemList.get(0);
// 最小数量(最小单位库存数量)
BigDecimal minQuantity = null;
// 计算报损后库存数量,结果取小单位
// 供应申请的物品计量单位与包装单位相同
if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) {
// 数量*拆零比
minQuantity =
supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity());
} else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) {
// 供应申请的物品计量单位与最小单位相同
// 数量
minQuantity = supplyItemDetailDto.getItemQuantity();
}
// 更新库存数量
Boolean aBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItem.getId(), minQuantity, now);
if (!aBoolean) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
}
// 追加追溯码信息
boolean flg =
traceNoAppService.updateTraceNoList(supplyItemDetailList, SupplyType.PURCHASE_PRPFITLOSS.getValue());
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 调用医保库存变更接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
List<String> uploadFailedNoList = this.ybInventoryIntegrated(supplyItemDetailList,
YbInvChgType.DESTRUCTION, false, false, false, now);
if (!uploadFailedNoList.isEmpty()) {
returnMsg = "3502库存变更上传错误错误项目编码" + uploadFailedNoList;
}
}
}
return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
/**
* 药房盘点单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> stocktakingAgreepproved(String busNo) {
// 获取当前时间
Date now = DateUtils.getNowDate();
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.agreeRequest(busNo, now);
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 根据单据,生成供应发放单
List<SupplyDelivery> deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now);
if (deliveredList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 查询供应项目的详细信息
List<SupplyItemDetailDto> supplyItemDetailList = this.getSupplyItemDetail(busNo);
// 首次盘存列表
List<SupplyItemDetailDto> firstSupplyItemDetailList = new ArrayList<>();
// 药品/耗材发放列表
List<MedicationDispense> medicationDispenses = null;
List<DeviceDispense> deviceDispenses = null;
// 返回信息
String stocktakingReturnMsg = null;
String changeReturnMsg = null;
if (!supplyItemDetailList.isEmpty()) {
// 获取盘盈列表itemQuantity > 0
List<SupplyItemDetailDto> positiveList = supplyItemDetailList.stream()
.filter(item -> item.getItemQuantity() != null && item.getItemQuantity().compareTo(BigDecimal.ZERO) > 0)
.collect(Collectors.toList());
// 获取盘亏列表itemQuantity < 0
List<SupplyItemDetailDto> negativeList = supplyItemDetailList.stream()
.filter(item -> item.getItemQuantity() != null && item.getItemQuantity().compareTo(BigDecimal.ZERO) < 0)
.collect(Collectors.toList());
for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) {
// 根据id产品批号仓库 查询库存表信息
List<InventoryItem> inventoryItemList = inventoryItemService.selectInventoryByItemId(
supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(),
supplyItemDetailDto.getPurposeLocationId(), SecurityUtils.getLoginUser().getTenantId());
// 查看该批号的药品/耗材是否发放过(用于证明是否首次盘存)
if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(supplyItemDetailDto.getItemTable())) {
medicationDispenses = medicationDispenseService.list(new LambdaQueryWrapper<MedicationDispense>()
.eq(MedicationDispense::getLotNumber, supplyItemDetailDto.getLotNumber()));
if (medicationDispenses.isEmpty()) {
firstSupplyItemDetailList.add(supplyItemDetailDto);
}
} else if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(supplyItemDetailDto.getItemTable())) {
deviceDispenses = deviceDispenseService.list(new LambdaQueryWrapper<DeviceDispense>()
.in(DeviceDispense::getLotNumber, supplyItemDetailDto.getLotNumber()));
if (deviceDispenses.isEmpty()) {
firstSupplyItemDetailList.add(supplyItemDetailDto);
}
}
if (!inventoryItemList.isEmpty()) {
InventoryItem inventoryItem = inventoryItemList.get(0);
// 包装数量(常规单位库存数量) 更新库存数量方法中没用到
BigDecimal baseQuantity = inventoryItem.getQuantity();
// 最小数量(最小单位库存数量)
BigDecimal minQuantity = null;
// 计算盘点后库存数量,结果取小单位
// 供应申请的物品计量单位与包装单位相同
if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) {
minQuantity =
supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getTotalQuantity());
// 供应申请的物品计量单位与最小单位相同
} else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) {
minQuantity = supplyItemDetailDto.getTotalQuantity();
}
// 更新库存数量
Boolean aBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItem.getId(), minQuantity, now);
if (!aBoolean) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
String ybSwitch =
SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
// 如果首次盘点信息不为空
if (!firstSupplyItemDetailList.isEmpty()) {
// 调用医保盘存接口,盘盈
List<String> uploadFailedNoList = this.ybInventoryIntegrated(firstSupplyItemDetailList,
YbInvChgType.INVENTORY_GAIN, true, false, false, now);
if (!uploadFailedNoList.isEmpty()) {
stocktakingReturnMsg = "3501盘存上传错误错误项目编码" + uploadFailedNoList;
}
}
List<String> uploadFailedGainList = null;
List<String> uploadFailedLossList = null;
if (!positiveList.isEmpty()) {
// 调用医保库存变更接口,盘盈
uploadFailedGainList = this.ybInventoryIntegrated(positiveList, YbInvChgType.INVENTORY_GAIN,
false, false, false, now);
}
if (!negativeList.isEmpty()) {
// 调用医保库存变更接口,盘亏
uploadFailedLossList = this.ybInventoryIntegrated(negativeList, YbInvChgType.INVENTORY_LOSS,
false, false, false, now);
}
if (uploadFailedGainList != null || uploadFailedLossList != null) {
changeReturnMsg = "3502库存变更上传错误错误项目编码" + uploadFailedGainList + uploadFailedLossList;
}
}
}
// 追加追溯码信息
boolean flg =
traceNoAppService.updateTraceNoList(supplyItemDetailList, SupplyType.PURCHASE_STOCKTAKING.getValue());
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
return R.ok(stocktakingReturnMsg + changeReturnMsg,
MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
/**
* 药房调入单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> transferInAgreeApproved(String busNo) {
// 获取当前时间
Date now = DateUtils.getNowDate();
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.agreeRequest(busNo, now);
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 根据单据,发放物品
List<SupplyDelivery> deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now);
if (deliveredList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 查询供应项目的详细信息
List<SupplyItemDetailDto> supplyItemDetailList = this.getSupplyItemDetail(busNo);
if (!supplyItemDetailList.isEmpty()) {
// 新增库存信息
List<SupplyItemDetailDto> supplylList = new ArrayList<>();
for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) {
// 根据项目id,产品批号目的仓库id 查询目的仓库库存表信息
List<InventoryItem> inventoryItemPurposeList = inventoryItemService.selectInventoryByItemId(
supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(),
supplyItemDetailDto.getPurposeLocationId(), SecurityUtils.getLoginUser().getTenantId());
InventoryItem inventoryItemPurpose = null;
if (!inventoryItemPurposeList.isEmpty()) {
inventoryItemPurpose = inventoryItemPurposeList.get(0);
}
if (inventoryItemPurpose == null) {
// 新增库存信息
supplylList.add(supplyItemDetailDto);
} else {
// 包装数量(常规单位库存数量) 更新库存数量方法中没用到
BigDecimal baseQuantity = inventoryItemPurpose.getQuantity();
// 最小数量(最小单位库存数量)
BigDecimal minQuantity = inventoryItemPurpose.getQuantity();
// 计算盘点后库存数量,结果取小单位
// 供应申请的物品计量单位与包装单位相同
if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) {
// 源仓库库存+(退库数量*拆零比)
minQuantity = minQuantity
.add(supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity()));
} else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) {
// 供应申请的物品计量单位与最小单位相同
// 源仓库库存+退库数量
minQuantity = minQuantity.add(supplyItemDetailDto.getItemQuantity());
}
// 更新目的仓库库存数量
Boolean bBooleanPurpose =
inventoryItemService.updateInventoryQuantity(inventoryItemPurpose.getId(), minQuantity, now);
if (!bBooleanPurpose) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
}
if (!supplylList.isEmpty()) {
// 将供应项目的详细信息装配为库存项目
List<InventoryItem> inventoryItemList = InventoryManageAssembler.assembleInventoryItem(supplylList);
// 入库
inventoryItemService.stockIn(inventoryItemList);
}
// 追加追溯码信息
boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.IN.getValue(),
SupplyType.PURCHASE_TRANSFERIN.getValue());
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
/**
* 药房调出单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> transferOutAgreeApproved(String busNo) {
// 获取当前时间
Date now = DateUtils.getNowDate();
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.agreeRequest(busNo, now);
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 根据单据,发放物品
List<SupplyDelivery> deliveredList = supplyDeliveryService.createCompletedSupplyDelivery(agreedList, now);
if (deliveredList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
// 查询供应项目的详细信息
List<SupplyItemDetailDto> supplyItemDetailList = this.getSupplyItemDetail(busNo);
if (!supplyItemDetailList.isEmpty()) {
for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) {
// 根据项目id,产品批号目的仓库id 查询目的仓库库存表信息
List<InventoryItem> inventoryItemSourceList = inventoryItemService.selectInventoryByItemId(
supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(),
supplyItemDetailDto.getSourceLocationId(), SecurityUtils.getLoginUser().getTenantId());
InventoryItem inventoryItemSource = null;
if (!inventoryItemSourceList.isEmpty()) {
inventoryItemSource = inventoryItemSourceList.get(0);
// 包装数量(常规单位库存数量) 更新库存数量方法中没用到
BigDecimal baseQuantity = inventoryItemSource.getQuantity();
// 最小数量(最小单位库存数量)
BigDecimal minQuantity = inventoryItemSource.getQuantity();
// 计算盘点后库存数量,结果取小单位
// 供应申请的物品计量单位与包装单位相同
if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) {
if (minQuantity.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) {
// 库存数量不足
return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null));
} else {
// 源仓库库存-(退库数量*拆零比)
minQuantity = minQuantity.subtract(
supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity()));
}
} else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) {
if (minQuantity.compareTo(supplyItemDetailDto.getItemQuantity()) < 0) {
// 库存数量不足
return R.fail(MessageUtils.createMessage("操作失败,库存数量不足", null));
} else {
// 供应申请的物品计量单位与最小单位相同
// 源仓库库存-退库数量
minQuantity = minQuantity.subtract(supplyItemDetailDto.getItemQuantity());
}
}
// 更新目的仓库库存数量
Boolean bBooleanSource =
inventoryItemService.updateInventoryQuantity(inventoryItemSource.getId(), minQuantity, now);
if (!bBooleanSource) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
}
// 追加追溯码信息
boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(),
SupplyType.PURCHASE_TRANSFEROUT.getValue());
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
/**
* 根据单据号获取供应单据及供应项相关详细信息
*
* @param busNo 单据号
* @return 供应单据及供应项相关详细信息
*/
@Override
public List<SupplyItemDetailDto> getSupplyItemDetail(String busNo) {
return receiptApprovalMapper.selectSupplyDetail(busNo, DispenseStatus.COMPLETED.getValue());
}
/**
* 医保库存相关进销存接口
*
* @param supplyItemDetailList 供应申请项目详细信息
* @param ybInvChgType 库存变更类型
* @param firstFlag 首次盘存标识
* @param now 库存变更时间
* @return 上传失败的id集合
*/
private List<String> ybInventoryIntegrated(List<SupplyItemDetailDto> supplyItemDetailList,
YbInvChgType ybInvChgType, Boolean firstFlag, Boolean purchaseFlag, Boolean returnFlag, Date now) {
List<String> uploadFailedNoList = new ArrayList<>();
R<?> result;
R<?> firstResult = R.ok();
R<?> returnResult = R.ok();
R<?> purchaseResult = R.ok();
for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) {
if (supplyItemDetailDto.getYbNo() == null) {
continue;
}
switch (ybInvChgType) {
case ALLOCATION_IN:
case ALLOCATION_OUT:
case INVENTORY_GAIN:
case INVENTORY_LOSS:
case DESTRUCTION:
case OTHER_IN:
case OTHER_OUT:
case DONATION_IN:
case DONATION_RETURN_OUT:
case PURCHASE_IN:
case RETURN_OUT:
if (firstFlag) {
firstResult =
ybService.uploadInventoryCount(getMedicalInventory3501Param(supplyItemDetailDto, now), now);
if (firstResult.getCode() != 200) {
uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo());
}
}
if (returnFlag) {
returnResult =
ybService.cancelProcurement(getMedicalPurchase3504Param(supplyItemDetailDto, now));
if (returnResult.getCode() != 200) {
uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo());
}
}
if (purchaseFlag) {
purchaseResult = ybService.procurement(getMedical3503Param(supplyItemDetailDto, now));
if (purchaseResult.getCode() != 200) {
uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo());
}
}
result = ybService.updateInventoryCount(
getMedicalInventory3502Param(supplyItemDetailDto, now, ybInvChgType.getValue()));
if (result.getCode() != 200) {
uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo());
}
break;
default:
throw new IllegalArgumentException("未知的库存变更类型: " + ybInvChgType);
}
}
return uploadFailedNoList;
}
private MedicalPurchase3504Param getMedicalPurchase3504Param(SupplyItemDetailDto supplyItemDetailDto, Date now) {
MedicalPurchase3504Param medicalPurchase3504Param = new MedicalPurchase3504Param();
medicalPurchase3504Param.setMedListCodg(supplyItemDetailDto.getYbNo())
.setFixmedinsBchno(supplyItemDetailDto.getLotNumber())
.setFixmedinsHilistId(supplyItemDetailDto.getItemBusNo())
.setFixmedinsHilistName(supplyItemDetailDto.getItemTable())
.setSplerName(supplyItemDetailDto.getSupplierName()).setPurcInvoNo(supplyItemDetailDto.getInvoiceNo())
.setManuDate(supplyItemDetailDto.getStartTime()).setExpyEnd(supplyItemDetailDto.getEndTime())
.setPurcRetnCnt(supplyItemDetailDto.getItemQuantity()).setPurcRetnStoinTime(now)
.setPurcRetnOpterName(supplyItemDetailDto.getPractitionerName());
if (YbRxFlag.IMPORTANT_HERBAL_SLICES.getCode() == supplyItemDetailDto.getRxFlag()) {
medicalPurchase3504Param.setRxFlag(YbRxFlag.IMPORTANT_HERBAL_SLICES.getName());
} else if (YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getCode() == supplyItemDetailDto.getRxFlag()) {
medicalPurchase3504Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName());
} else if (YbRxFlag.SELF_PREPARED_MEDICATION.getCode() == supplyItemDetailDto.getRxFlag()) {
medicalPurchase3504Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName());
}
return medicalPurchase3504Param;
}
private Medical3503Param getMedical3503Param(SupplyItemDetailDto supplyItemDetailDto, Date now) {
Medical3503Param medical3503Param = new Medical3503Param();
medical3503Param.setMedListCodg(supplyItemDetailDto.getYbNo())
.setFixmedinsBchno(supplyItemDetailDto.getLotNumber())
.setFixmedinsHilistId(supplyItemDetailDto.getItemBusNo())
.setFixmedinsHilistName(supplyItemDetailDto.getItemTable())
.setSplerName(supplyItemDetailDto.getSupplierName()).setManuLotnum(supplyItemDetailDto.getLotNumber())
.setProdentpName(supplyItemDetailDto.getManufacturerText())
.setAprvno(supplyItemDetailDto.getApprovalNumber()).setManuDate(supplyItemDetailDto.getStartTime())
.setExpyEnd(supplyItemDetailDto.getEndTime()).setPurcRetnCnt(supplyItemDetailDto.getItemQuantity())
.setPurcRetnStoinTime(now).setPurcRetnOpterName(supplyItemDetailDto.getPractitionerName());
if (YbRxFlag.IMPORTANT_HERBAL_SLICES.getCode() == supplyItemDetailDto.getRxFlag()) {
medical3503Param.setRxFlag(YbRxFlag.IMPORTANT_HERBAL_SLICES.getName());
} else if (YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getCode() == supplyItemDetailDto.getRxFlag()) {
medical3503Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName());
} else if (YbRxFlag.SELF_PREPARED_MEDICATION.getCode() == supplyItemDetailDto.getRxFlag()) {
medical3503Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName());
}
return medical3503Param;
}
private MedicalInventory3502Param getMedicalInventory3502Param(SupplyItemDetailDto supplyItemDetailDto, Date now,
String ybInvChgType) {
MedicalInventory3502Param medicalInventory3502Param = new MedicalInventory3502Param();
// 查库存信息
List<InventoryItem> inventoryItemList =
inventoryItemService.selectInventoryByItemId(supplyItemDetailDto.getItemId(),
supplyItemDetailDto.getLotNumber(), null, SecurityUtils.getLoginUser().getTenantId());
// 查询商品价格信息
List<ItemChargeDetailDto> itemChargeDetailList =
receiptApprovalAppService.getItemChargeDetail(List.of(supplyItemDetailDto.getItemId()));
if (!inventoryItemList.isEmpty() && !itemChargeDetailList.isEmpty()) {
// 获取该项目所有的数量(最小单位)
BigDecimal totalQuantity = inventoryItemList.stream()
.map(item -> item.getQuantity() != null ? item.getQuantity() : BigDecimal.ZERO)
.reduce(BigDecimal.ZERO, BigDecimal::add);
// 最小单位售卖价格
BigDecimal minPrice = BigDecimal.ZERO;
Optional<BigDecimal> price = itemChargeDetailList.stream()
.filter(x -> x.getConditionValue().equals(supplyItemDetailDto.getLotNumber()))
.map(ItemChargeDetailDto::getSellPrice).findFirst();
if (price.isPresent()) {
if (supplyItemDetailDto.getPartPercent().compareTo(BigDecimal.ZERO) > 0) {
minPrice = price.get().divide(supplyItemDetailDto.getPartPercent(), RoundingMode.HALF_UP);
}
}
// 转换为JSON
JSONArray medicalTraceNo = new JSONArray();
// 获取追溯码信息
if (supplyItemDetailDto.getTraceNo() != null) {
List<String> traceNoList =
Arrays.stream(supplyItemDetailDto.getTraceNo().split(CommonConstants.Common.COMMA))
.map(String::trim).filter(s -> !s.isEmpty()).collect(Collectors.toList());
for (String traceNo : traceNoList) {
Map<String, String> traceNoMap = new HashMap<>();
traceNoMap.put("drug_trac_codg", traceNo);
medicalTraceNo.add(traceNoMap);
}
}
medicalInventory3502Param.setMedListCodg(supplyItemDetailDto.getYbNo()).setInvChgType(ybInvChgType)
.setFixmedinsHilistId(supplyItemDetailDto.getItemBusNo())
.setFixmedinsHilistName(supplyItemDetailDto.getItemTable())
.setFixmedinsBchno(supplyItemDetailDto.getLotNumber()).setPric(minPrice).setCnt(totalQuantity)
.setInvChgTime(now).setDrugtracinfo(medicalTraceNo);
if (YbRxFlag.IMPORTANT_HERBAL_SLICES.getCode() == supplyItemDetailDto.getRxFlag()) {
medicalInventory3502Param.setRxFlag(YbRxFlag.IMPORTANT_HERBAL_SLICES.getName());
} else if (YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getCode() == supplyItemDetailDto.getRxFlag()) {
medicalInventory3502Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName());
} else if (YbRxFlag.SELF_PREPARED_MEDICATION.getCode() == supplyItemDetailDto.getRxFlag()) {
medicalInventory3502Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName());
}
}
return medicalInventory3502Param;
}
private MedicalInventory3501Param getMedicalInventory3501Param(SupplyItemDetailDto supplyItemDetailDto, Date date) {
MedicalInventory3501Param medicalInventory3501Param = new MedicalInventory3501Param();
// 查库存信息
List<InventoryItem> inventoryItemList =
inventoryItemService.selectInventoryByItemId(supplyItemDetailDto.getItemId(),
supplyItemDetailDto.getLotNumber(), null, SecurityUtils.getLoginUser().getTenantId());
if (!inventoryItemList.isEmpty()) {
// 获取该项目所有的数量(最小单位)
BigDecimal totalQuantity = inventoryItemList.stream()
.map(item -> item.getQuantity() != null ? item.getQuantity() : BigDecimal.ZERO)
.reduce(BigDecimal.ZERO, BigDecimal::add);
medicalInventory3501Param.setMedListCodg(supplyItemDetailDto.getYbNo())
.setFixmedinsHilistId(supplyItemDetailDto.getItemBusNo())
.setFixmedinsHilistName(supplyItemDetailDto.getItemTable()).setInvdate(date).setInvCnt(totalQuantity)
.setFixmedinsBchno(supplyItemDetailDto.getLotNumber()).setManuDate(supplyItemDetailDto.getStartTime())
.setExpyEnd(supplyItemDetailDto.getEndTime());
if (YbRxFlag.IMPORTANT_HERBAL_SLICES.getCode() == supplyItemDetailDto.getRxFlag()) {
medicalInventory3501Param.setRxFlag(YbRxFlag.IMPORTANT_HERBAL_SLICES.getName());
} else if (YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getCode() == supplyItemDetailDto.getRxFlag()) {
medicalInventory3501Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName());
} else if (YbRxFlag.SELF_PREPARED_MEDICATION.getCode() == supplyItemDetailDto.getRxFlag()) {
medicalInventory3501Param.setRxFlag(YbRxFlag.WESTERN_AND_CHINESE_PATENT_MEDICINE.getName());
}
}
return medicalInventory3501Param;
}
}

View File

@@ -0,0 +1,164 @@
package com.openhis.web.pharmacyDispensarymanage.appservice.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryRequisitionOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryRequisitionOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药房请领单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyDispensaryRequisitionOrderServiceImpl implements IPharmacyDispensaryRequisitionOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyDispensaryInitDto requisitionOrderInitDto = pharmacyDispensaryCommonService.init();
// 单据分类
List<PharmacyDispensaryInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.PURCHASE_APPLICATION.getValue(),
SupplyCategory.PURCHASE_APPLICATION.getInfo()));
requisitionOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(requisitionOrderInitDto);
}
/**
* 请领单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 请领单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<PharmacyDispensaryDetailDto> requisitionOrderDtoDetailPage =
pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
requisitionOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<PharmacyDispensaryDetailDto.Option> unitList;
for (PharmacyDispensaryDetailDto item : requisitionOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText()
));
item.setUnitList(unitList);
}
return R.ok(requisitionOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_REQUISITION.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑请领单
*
* @param requisitionOrderDtoList 请领信息
* @return 操作结果
*/
@Override
public R<?> addOrEditRequisitionOrder(List<PharmacyDispensaryDetailDto> requisitionOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(requisitionOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
for (PharmacyDispensaryDetailDto item : requisitionOrderDtoList) {
SupplyRequest supplyRequest =
new SupplyRequest().setBusNo(item.getBusNo()).setTypeEnum(SupplyType.PURCHASE_REQUISITION.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity())
.setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice())
.setSpecificationInventory(item.getSpecificationInventory()).setSupplierId(item.getSupplierId())
.setReason(item.getReason()).setSourceTypeEnum(LocationForm.CABINET.getValue())
.setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.PHARMACY.getValue())
.setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId())
.setApplyTime(item.getApplyTime()).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,169 @@
package com.openhis.web.pharmacyDispensarymanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReturnToWarehouseOrderService;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryReturnToWarehouseOrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReturnToWarehouseOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryReturnToWarehouseOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药房退库单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyDispensaryReturnToWarehouseOrderServiceImpl implements
IPharmacyDispensaryReturnToWarehouseOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init();
// 单据分类
List<PharmacyDispensaryInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 退库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退库单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<PharmacyDispensaryDetailDto> returnToDispensaryOrderDtoDetailPage =
pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
returnToDispensaryOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<PharmacyDispensaryDetailDto.Option> unitList;
for (PharmacyDispensaryDetailDto item : returnToDispensaryOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText()
));
item.setUnitList(unitList);
}
return R.ok(returnToDispensaryOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_RETURN.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑退库单
*
* @param returnToDispensaryOrderDtoList 退库信息
* @return 操作结果
*/
@Override
public R<?> addOrEditReturnToWarehouseOrder(List<PharmacyDispensaryDetailDto> returnToDispensaryOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(returnToDispensaryOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (PharmacyDispensaryDetailDto item : returnToDispensaryOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.PURCHASE_RETURN.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity())
.setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice())
.setStartTime(item.getStartTime()).setEndTime(item.getEndTime()).setLotNumber(item.getLotNumber())
.setTraceNo(item.getTraceNo()).setTraceNoUnitCode(item.getTraceNoUnitCode())
.setSupplierId(item.getSupplierId()).setReason(item.getReason())
.setSourceTypeEnum(LocationForm.PHARMACY.getValue()).setSourceLocationId(item.getSourceLocationId())
.setPurposeTypeEnum(LocationForm.CABINET.getValue()).setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,173 @@
package com.openhis.web.pharmacyDispensarymanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryStockInOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryStockInOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药房入库单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyDispensaryStockInOrderServiceImpl implements IPharmacyDispensaryStockInOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init();
// 单据分类
List<PharmacyDispensaryInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 入库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 入库单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<PharmacyDispensaryDetailDto> stockInOrderDtoDetailPage =
pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
stockInOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<PharmacyDispensaryDetailDto.Option> unitList;
for (PharmacyDispensaryDetailDto item : stockInOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(stockInOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_STOCKIN.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑入库单
*
* @param stockInOrderDtoList 入库信息
* @return 操作结果
*/
@Override
public R<?> addOrEditStockInOrder(List<PharmacyDispensaryDetailDto> stockInOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(stockInOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
//添加原始单据号
if(stockInOrderDtoList.get(0).getOriginalBusNo()!=null){
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.addOriginalBusNo(stockInOrderDtoList.get(0).getOriginalBusNo(), stockInOrderDtoList.get(0).getBusNo());
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (PharmacyDispensaryDetailDto item : stockInOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.PURCHASE_STOCKIN.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity())
.setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice())
.setStartTime(item.getStartTime()).setEndTime(item.getEndTime()).setLotNumber(item.getLotNumber())
.setTraceNo(item.getTraceNo()).setTraceNoUnitCode(item.getTraceNoUnitCode())
.setSupplierId(item.getSupplierId()).setReason(item.getReason())
.setSourceTypeEnum(LocationForm.CABINET.getValue()).setSourceLocationId(item.getSourceLocationId())
.setPurposeTypeEnum(LocationForm.PHARMACY.getValue()).setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,168 @@
package com.openhis.web.pharmacyDispensarymanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryStocktakingOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryStocktakingOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药房盘点单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyDispensaryStocktakingOrderServiceImpl implements IPharmacyDispensaryStocktakingOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init();
// 单据分类
List<PharmacyDispensaryInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(
SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo()));
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(
SupplyCategory.MONTHLY_STOCKTAKING.getValue(), SupplyCategory.MONTHLY_STOCKTAKING.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 盘点单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 盘点单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<PharmacyDispensaryDetailDto> stocktakingOrderDtoDetailPage =
pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
stocktakingOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<PharmacyDispensaryDetailDto.Option> unitList;
for (PharmacyDispensaryDetailDto item : stocktakingOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(stocktakingOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_STOCKTAKING.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑盘点单
*
* @param stocktakingOrderDtoList 盘点信息
* @return 操作结果
*/
@Override
public R<?> addOrEditStocktakingOrder(List<PharmacyDispensaryDetailDto> stocktakingOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList =
supplyRequestService.getSupplyByBusNo(stocktakingOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (PharmacyDispensaryDetailDto item : stocktakingOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.PURCHASE_STOCKTAKING.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity())
.setTotalQuantity(item.getTotalQuantity()).setPrice(item.getPrice()).setTotalPrice(item.getTotalPrice())
.setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice())
.setBatchInventory(item.getBatchInventory()).setLotNumber(item.getLotNumber())
.setTraceNo(item.getTraceNo()).setTraceNoUnitCode(item.getTraceNoUnitCode())
.setReasonCode(item.getReasonCode()).setReason(item.getReason())
.setPurposeTypeEnum(LocationForm.PHARMACY.getValue()).setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,166 @@
package com.openhis.web.pharmacyDispensarymanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryTransferInOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryTransferInOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药房调入单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyDispensaryTransferInOrderServiceImpl implements IPharmacyDispensaryTransferInOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init();
// 单据分类
List<PharmacyDispensaryInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 调入单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调入单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<PharmacyDispensaryDetailDto> transferInOrderDtoDetailPage =
pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
transferInOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<PharmacyDispensaryDetailDto.Option> unitList;
for (PharmacyDispensaryDetailDto item : transferInOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(transferInOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_TRANSFERIN.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑采购单
*
* @param transferInOrderDtoList 采购信息
* @return 操作结果
*/
@Override
public R<?> addOrEditTransferInOrder(List<PharmacyDispensaryDetailDto> transferInOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(transferInOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (PharmacyDispensaryDetailDto item : transferInOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.PURCHASE_TRANSFERIN.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue())
.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setRetailPrice(item.getPrice())
.setTotalRetailPrice(item.getTotalPrice()).setBatchInventory(item.getBatchInventory())
.setSpecificationInventory(item.getSpecificationInventory()).setEndTime(item.getEndTime())
.setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId())
.setReason(item.getReason()).setSourceTypeEnum(LocationForm.PHARMACY.getValue())
.setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.PHARMACY.getValue())
.setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,165 @@
package com.openhis.web.pharmacyDispensarymanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryTransferOutOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper;
import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryTransferOutOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药房调出单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyDispensaryTransferOutOrderServiceImpl implements IPharmacyDispensaryTransferOutOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyDispensaryInitDto purchaseOrderInitDto = pharmacyDispensaryCommonService.init();
// 单据分类
List<PharmacyDispensaryInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 调出单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调出单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<PharmacyDispensaryDetailDto> transferOutOrderDtoDetailPage =
pharmacyDispensaryCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
transferOutOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<PharmacyDispensaryDetailDto.Option> unitList;
for (PharmacyDispensaryDetailDto item : transferOutOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(transferOutOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PURCHASE_TRANSFEROUT.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑采购单
*
* @param transferOutOrderDtoList 采购信息
* @return 操作结果
*/
@Override
public R<?> addOrEditTransferOutOrder(List<PharmacyDispensaryDetailDto> transferOutOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(transferOutOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (PharmacyDispensaryDetailDto item : transferOutOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.PURCHASE_TRANSFEROUT.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue())
.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setRetailPrice(item.getPrice())
.setTotalRetailPrice(item.getTotalPrice()).setBatchInventory(item.getBatchInventory())
.setSpecificationInventory(item.getSpecificationInventory()).setEndTime(item.getEndTime())
.setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId())
.setReason(item.getReason()).setSourceTypeEnum(LocationForm.PHARMACY.getValue())
.setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.PHARMACY.getValue())
.setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,82 @@
package com.openhis.web.pharmacyDispensarymanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReceiptApprovalService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryDispensingOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensarySearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药房发药单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-dispensary/dispensing-order")
@Slf4j
public class PharmacyDispensaryDispensingOrderController {
@Autowired
private IPharmacyDispensaryDispensingOrderService pharmacyDispensaryDispensingOrderService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService;
/**
* 发药单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyDispensaryDispensingOrderService.init();
}
/**
* 发药单单据列表
*
* @param dispensingOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 发药单据分页列表
*/
@GetMapping(value = "/dispensing-order-page")
public R<?> getPage(PharmacyDispensarySearchParam dispensingOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getPage(dispensingOrderSearchParam, pageNo, pageSize, searchKey, request,
"1", SupplyType.DISPENSING_ORDER.getValue());
}
/**
* 发药单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 发药单单据详情
*/
@GetMapping(value = "/dispensing-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyDispensaryDispensingOrderService.getDetailPage(busNo, pageNo, pageSize);
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.pharmacyDispensarymanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryProfitLossOrderService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReceiptApprovalService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensarySearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药房损益单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-dispensary/profitLoss-order")
@Slf4j
public class PharmacyDispensaryProfitLossOrderController {
@Autowired
private IPharmacyDispensaryProfitLossOrderService pharmacyDispensaryProfitLossOrderService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService;
/**
* 损益单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyDispensaryProfitLossOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 损益单单据列表
*
* @param profitLossOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 损益单据分页列表
*/
@GetMapping(value = "/profitLoss-order-page")
public R<?> getPage(PharmacyDispensarySearchParam profitLossOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getPage(profitLossOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.PURCHASE_PRPFITLOSS.getValue());
}
/**
* 损益单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 损益单单据详情
*/
@GetMapping(value = "/profitLoss-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyDispensaryProfitLossOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyDispensaryProfitLossOrderService.getBusNo();
}
/**
* 添加/编辑损益单
*
* @param profitLossOrderDtoList 损益信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-profitLossOrder")
public R<?> addOrEditProfitLossOrder(@Validated @RequestBody List<PharmacyDispensaryDetailDto> profitLossOrderDtoList) {
return pharmacyDispensaryProfitLossOrderService.addOrEditProfitLossOrder(profitLossOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-profitLossOrder")
public R<?> deleteProfitLossOrder(@RequestParam String busNo) {
return pharmacyDispensaryCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyDispensaryReceiptApprovalService.profitLossAgreeApproved(busNo);
}
}

View File

@@ -0,0 +1,140 @@
package com.openhis.web.pharmacyDispensarymanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryRequisitionOrderService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReceiptApprovalService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensarySearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药房请领单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-dispensary/requisition-order")
@Slf4j
public class PharmacyDispensaryRequisitionOrderController {
@Autowired
private IPharmacyDispensaryRequisitionOrderService pharmacyDispensaryRequisitionOrderService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService;
/**
* 请领单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyDispensaryRequisitionOrderService.init();
}
/**
* 获取药品
*
* @param requisitionOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyDispensarySearchParam requisitionOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getMedicationInfo(requisitionOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 请领单单据列表
*
* @param requisitionOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 请领单据分页列表
*/
@GetMapping(value = "/requisition-order-page")
public R<?> getPage(PharmacyDispensarySearchParam requisitionOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getPage(requisitionOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.PURCHASE_REQUISITION.getValue());
}
/**
* 请领单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 请领单单据详情
*/
@GetMapping(value = "/requisition-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyDispensaryRequisitionOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyDispensaryRequisitionOrderService.getBusNo();
}
/**
* 添加/编辑采购单
*
* @param requisitionOrderDtoList 采购信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-requisitionOrder")
public R<?> addOrEditRequisitionOrder(@Validated @RequestBody List<PharmacyDispensaryDetailDto> requisitionOrderDtoList) {
return pharmacyDispensaryRequisitionOrderService.addOrEditRequisitionOrder(requisitionOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-requisitionOrder")
public R<?> deleteRequisitionOrder(@RequestParam String busNo) {
return pharmacyDispensaryCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyDispensaryReceiptApprovalService.requisitionOrderAgreeApproval(busNo);
}
}

View File

@@ -0,0 +1,139 @@
package com.openhis.web.pharmacyDispensarymanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReturnToWarehouseOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReceiptApprovalService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReturnToWarehouseOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensarySearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药房退库单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-dispensary/returnToWarehouse-order")
@Slf4j
public class PharmacyDispensaryReturnToWarehouseOrderController {
@Autowired
private IPharmacyDispensaryReturnToWarehouseOrderService pharmacyDispensaryReturnToWarehouseOrderService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService;
/**
* 退库单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyDispensaryReturnToWarehouseOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 退库单单据列表
*
* @param returnToDispensaryOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 退库单据分页列表
*/
@GetMapping(value = "/returnToDispensary-order-page")
public R<?> getPage(PharmacyDispensarySearchParam returnToDispensaryOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getPage(returnToDispensaryOrderSearchParam, pageNo, pageSize, searchKey, request,
"1", SupplyType.PURCHASE_RETURN.getValue());
}
/**
* 退库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退库单单据详情
*/
@GetMapping(value = "/returnToDispensary-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyDispensaryReturnToWarehouseOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyDispensaryReturnToWarehouseOrderService.getBusNo();
}
/**
* 添加/编辑退库单
*
* @param returnToDispensaryOrderDtoList 退库信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-returnToDispensaryOrder")
public R<?> addOrEditReturnToDispensaryOrder(@Validated @RequestBody List<PharmacyDispensaryDetailDto> returnToDispensaryOrderDtoList) {
return pharmacyDispensaryReturnToWarehouseOrderService.addOrEditReturnToWarehouseOrder(returnToDispensaryOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-returnToDispensaryOrder")
public R<?> deleteReturnToDispensaryOrder(@RequestParam String busNo) {
return pharmacyDispensaryCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyDispensaryReceiptApprovalService.returnToWarehouseAgreeApproved(busNo);
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.pharmacyDispensarymanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReceiptApprovalService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryStockInOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensarySearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药房入库单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-dispensary/stockIn-order")
@Slf4j
public class PharmacyDispensaryStockInOrderController {
@Autowired
private IPharmacyDispensaryStockInOrderService pharmacyDispensaryStockInOrderService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService;
/**
* 入库单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyDispensaryStockInOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 入库单单据列表
*
* @param stockInOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 入库单据分页列表
*/
@GetMapping(value = "/stockIn-order-page")
public R<?> getPage(PharmacyDispensarySearchParam stockInOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getPage(stockInOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.PURCHASE_STOCKIN.getValue());
}
/**
* 入库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 入库单单据详情
*/
@GetMapping(value = "/stockIn-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyDispensaryStockInOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyDispensaryStockInOrderService.getBusNo();
}
/**
* 添加/编辑入库单
*
* @param stockInOrderDtoList 入库信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-stockInOrder")
public R<?> addOrEditStockInOrder(@Validated @RequestBody List<PharmacyDispensaryDetailDto> stockInOrderDtoList) {
return pharmacyDispensaryStockInOrderService.addOrEditStockInOrder(stockInOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-stockInOrder")
public R<?> deleteStockInOrder(@RequestParam String busNo) {
return pharmacyDispensaryCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyDispensaryReceiptApprovalService.stockInOrderAgreeApproved(busNo);
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.pharmacyDispensarymanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReceiptApprovalService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryStocktakingOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensarySearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药房盘点单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-dispensary/stocktaking-order")
@Slf4j
public class PharmacyDispensaryStocktakingOrderController {
@Autowired
private IPharmacyDispensaryStocktakingOrderService pharmacyDispensaryStocktakingOrderService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService;
/**
* 盘点单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyDispensaryStocktakingOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 盘点单单据列表
*
* @param stocktakingOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 盘点单据分页列表
*/
@GetMapping(value = "/stocktaking-order-page")
public R<?> getPage(PharmacyDispensarySearchParam stocktakingOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getPage(stocktakingOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.PURCHASE_STOCKTAKING.getValue());
}
/**
* 盘点单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 盘点单单据详情
*/
@GetMapping(value = "/stocktaking-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyDispensaryStocktakingOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyDispensaryStocktakingOrderService.getBusNo();
}
/**
* 添加/编辑盘点单
*
* @param stocktakingOrderDtoList 盘点信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-stocktakingOrder")
public R<?> addOrEditStocktakingOrder(@Validated @RequestBody List<PharmacyDispensaryDetailDto> stocktakingOrderDtoList) {
return pharmacyDispensaryStocktakingOrderService.addOrEditStocktakingOrder(stocktakingOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-stocktakingOrder")
public R<?> deleteStocktakingOrder(@RequestParam String busNo) {
return pharmacyDispensaryCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyDispensaryReceiptApprovalService.stocktakingAgreepproved(busNo);
}
}

View File

@@ -0,0 +1,140 @@
package com.openhis.web.pharmacyDispensarymanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReceiptApprovalService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryTransferInOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensarySearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药房调入单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-dispensary/transferIn-order")
@Slf4j
public class PharmacyDispensaryTransferInOrderController {
@Autowired
private IPharmacyDispensaryTransferInOrderService pharmacyDispensaryTransferInOrderService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService;
/**
* 调入单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyDispensaryTransferInOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 调入单单据列表
*
* @param transferInOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 调入单据分页列表
*/
@GetMapping(value = "/transferIn-order-page")
public R<?> getPage(PharmacyDispensarySearchParam transferInOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getPage(transferInOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.PURCHASE_TRANSFERIN.getValue());
}
/**
* 调入单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调入单单据详情
*/
@GetMapping(value = "/transferIn-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyDispensaryTransferInOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyDispensaryTransferInOrderService.getBusNo();
}
/**
* 添加/编辑采购单
*
* @param transferInOrderDtoList 采购信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-transferInOrder")
public R<?> addOrEditTransferInOrder(@Validated @RequestBody List<PharmacyDispensaryDetailDto> transferInOrderDtoList) {
return pharmacyDispensaryTransferInOrderService.addOrEditTransferInOrder(transferInOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-transferInOrder")
public R<?> deleteTransferInOrder(@RequestParam String busNo) {
return pharmacyDispensaryCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyDispensaryReceiptApprovalService.transferInAgreeApproved(busNo);
}
}

View File

@@ -0,0 +1,140 @@
package com.openhis.web.pharmacyDispensarymanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReceiptApprovalService;
import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryTransferOutOrderService;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensarySearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药房调出单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-dispensary/transferOut-order")
@Slf4j
public class PharmacyDispensaryTransferOutOrderController {
@Autowired
private IPharmacyDispensaryTransferOutOrderService pharmacyDispensaryTransferOutOrderService;
@Autowired
private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService;
@Autowired
private IPharmacyDispensaryReceiptApprovalService pharmacyDispensaryReceiptApprovalService;
/**
* 调出单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyDispensaryTransferOutOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyDispensarySearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 调出单单据列表
*
* @param transferOutOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 调出单据分页列表
*/
@GetMapping(value = "/transferOut-order-page")
public R<?> getPage(PharmacyDispensarySearchParam transferOutOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyDispensaryCommonService.getPage(transferOutOrderSearchParam, pageNo, pageSize, searchKey, request,
"1", SupplyType.PURCHASE_TRANSFEROUT.getValue());
}
/**
* 调出单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调出单单据详情
*/
@GetMapping(value = "/transferOut-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyDispensaryTransferOutOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyDispensaryTransferOutOrderService.getBusNo();
}
/**
* 添加/编辑采购单
*
* @param transferOutOrderDtoList 采购信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-transferOutOrder")
public R<?> addOrEditTransferOutOrder(@Validated @RequestBody List<PharmacyDispensaryDetailDto> transferOutOrderDtoList) {
return pharmacyDispensaryTransferOutOrderService.addOrEditTransferOutOrder(transferOutOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-transferOutOrder")
public R<?> deleteTransferOutOrder(@RequestParam String busNo) {
return pharmacyDispensaryCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyDispensaryReceiptApprovalService.transferOutAgreeApproved(busNo);
}
}

View File

@@ -0,0 +1,216 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.pharmacyDispensarymanage.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.annotation.Dict;
import liquibase.pro.packaged.S;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 订购单信息
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class PharmacyDispensaryDetailDto implements Serializable {
/** ID */
@TableId(type = IdType.ASSIGN_ID)
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 单据号 */
private String busNo;
/** 再生成单据号 */
private String originalBusNo;
/** 药品编码 */
private String itemBusNo;
/** 物品id */
@JsonSerialize(using = ToStringSerializer.class)
private Long itemId;
/** 物品名称 */
private String itemName;
/** 规格 */
private String totalVolume;
/** 选择单位 */
@Dict(dictCode = "unit_code")
private String unitCode;
private String unitCode_dictText;
/** 常规单位 */
@Dict(dictCode = "unit_code")
private String maxUnitCode;
private String maxUnitCode_dictText;
/** 最小单位 */
@Dict(dictCode = "unit_code")
private String minUnitCode;
private String minUnitCode_dictText;
/** 拆零比 */
private String partPercent;
/** 数量 */
private BigDecimal itemQuantity;
/** 合计数量 */
private BigDecimal totalQuantity;
/** 单价 */
private BigDecimal price;
/** 总价 */
private BigDecimal totalPrice;
/** 零售价 */
private BigDecimal retailPrice;
/** 零价金额 */
private BigDecimal totalRetailPrice;
/** 厂家/产地 */
private String manufacturerText;
/** 批准文号 */
private String approvalNumber;
/** 批次库存 */
private BigDecimal batchInventory;
/** 规格库存 */
private BigDecimal specificationInventory;
/** 备注 */
private String remake;
/** 理由类型 */
private String reasonCode;
/** 摘要(理由) */
private String reason;
/** 供应商 */
@JsonSerialize(using = ToStringSerializer.class)
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier")
private Long supplierId;
private String supplierId_dictText;
/** 源仓库类型 */
private Integer sourceTypeEnum;
/** 源仓库 */
@JsonSerialize(using = ToStringSerializer.class)
private Long sourceLocationId;
/** 目的仓库类型 */
private Integer purposeTypeEnum;
/** 目的仓库 */
@JsonSerialize(using = ToStringSerializer.class)
private Long purposeLocationId;
/** 采购员 */
@JsonSerialize(using = ToStringSerializer.class)
private Long applicantId;
/** 审批人 */
@JsonSerialize(using = ToStringSerializer.class)
private Long approverId;
/** 审批时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date approvalTime;
/** 申请时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date applyTime;
/** 状态 */
private Integer statusEnum;
private String statusEnum_enumText;
/** 类型 */
private Integer typeEnum;
private String typeEnum_enumText;
/** 单据分类 */
private Integer categoryEnum;
private String categoryEnum_enumText;
/** 供应商联系人 */
private String phone;
/** 仓库员 */
@JsonSerialize(using = ToStringSerializer.class)
private Long practitionerId;
/** 发票号 */
private String invoiceNo;
/** 产品批号 */
private String lotNumber;
/** 生产日期 */
private Date startTime;
/** 失效日期 */
private Date endTime;
/** 追溯码*/
private String traceNo;
/** 追溯码单位 */
@Dict(dictCode = "unit_code")
private String traceNoUnitCode;
private String traceNoUnitCode_dictText;
/** 包装情况 */
private Integer packagingConditionEnum;
private String packagingConditionEnum_enumText;
/** 验收结果 */
private Integer acceptanceResultEnum;
private String acceptanceResultEnum_enumText;
/** 禁用日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date occurrenceTime;
/** 药品发放id */
private String dispenseIds;
/**
* 单位列表
*/
private List<Option> unitList;
@Data
public static class Option {
@Dict(dictCode = "unit_code")
private String value;
private String value_dictText;
public Option(String value, String value_dictText) {
this.value = value;
this.value_dictText = value_dictText;
}
public Option() {
}
}
}

View File

@@ -0,0 +1,72 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.pharmacyDispensarymanage.dto;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
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;
/**
* 订购单信息
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class PharmacyDispensaryDto implements Serializable {
/** 单据号 */
private String supplyBusNo;
/** 状态 */
private Integer statusEnum;
private String statusEnum_enumText;
/** 类型 */
private Integer typeEnum;
private String typeEnum_enumText;
/** 供应商 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier")
@JsonSerialize(using = ToStringSerializer.class)
private Long supplierId;
private String supplierId_dictText;
/** 仓库类型 */
private Integer locationTypeEnum;
private String locationTypeEnum_enumText;
/** 仓库 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_location")
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
private String locationId_dictText;
/** 采购员 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner")
@JsonSerialize(using = ToStringSerializer.class)
private Long applicantId;
private String applicantId_dictText;
/** 审批人 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner")
@JsonSerialize(using = ToStringSerializer.class)
private Long approverId;
private String approverId_dictText;
/** 审批时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date approvalTime;
/** 制单日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date applyTime;
}

View File

@@ -0,0 +1,146 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.pharmacyDispensarymanage.dto;
import java.io.Serializable;
import java.util.List;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.web.common.dto.LocationDto;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 订购单信息
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class PharmacyDispensaryInitDto implements Serializable {
/**
* 单据号
*/
private String busNo;
/**
* 库房类型列表
*/
private List<DispensaryOption> warehouseTypeOption;
/**
* 库房列表
*/
private List<LongOption> warehouseOption;
/**
* 供应商列表
*/
private List<SupplierOption> supplierOption;
/**
* 人员列表
*/
private List<LongOption> practitionerOption;
/**
* 审批状态
*/
private List<IntegerOption> supplyStatusOptions;
/**
* 单据类型
*/
private List<IntegerOption> supplyTypeOptions;
/**
* 单据分类
*/
private List<IntegerOption> supplyCategoryOptions;
/**
* 包装情况
*/
private List<IntegerOption> packagingConditionOptions;
/**
* 包装情况
*/
private List<IntegerOption> acceptanceResultoryOptions;
/**
* 仓库
*/
private List<LocationDto> cabinetListOptions;
/**
* 药房
*/
private List<LocationDto> pharmacyListOptions;
@Data
public static class LongOption {
@JsonSerialize(using = ToStringSerializer.class)
private Long value;
private String label;
public LongOption(Long value, String label) {
this.value = value;
this.label = label;
}
}
@Data
public static class SupplierOption {
@JsonSerialize(using = ToStringSerializer.class)
private Long value;
private String label;
private String phone;
public SupplierOption(Long value, String label, String phone) {
this.value = value;
this.label = label;
this.phone = phone;
}
}
@Data
public static class IntegerOption {
private Integer value;
private String label;
public IntegerOption(Integer value, String label) {
this.value = value;
this.label = label;
}
}
@Data
public static class DispensaryOption {
private Integer value;
private String label;
private List<LocationDto> locationOption;
private List<DispensaryItemOption> orderOption;
public DispensaryOption(Integer value, String label,List<LocationDto> locationOption,List<DispensaryItemOption> orderOption) {
this.value = value;
this.label = label;
this.locationOption = locationOption;
this.orderOption = orderOption;
}
}
@Data
public static class DispensaryItemOption {
private Integer value;
private String label;
public DispensaryItemOption(Integer value, String label) {
this.value = value;
this.label = label;
}
}
}

View File

@@ -0,0 +1,120 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.pharmacyDispensarymanage.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
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;
/**
* 药品信息
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class PharmacyDispensaryMedicationInfoDto implements Serializable {
/** 物品id */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 物品编号 */
private String busNo;
/** 物品名称 */
private String name;
/** 拼音码 */
private String pyStr;
/** 规格 */
private String totalVolume;
/** 包装单位 */
@Dict(dictCode = "unit_code")
private String unitCode;
private String unitCode_dictText;
/** 最小单位 */
@Dict(dictCode = "unit_code")
private String minUnitCode;
private String minUnitCode_dictText;
/** 拆零比 */
private BigDecimal partPercent;
/** 产品批号 */
private String lotNumber;
// /** 价格单位 */
// @Dict(dictCode = "unit_code")
// private String conditionUnitCode;
// private String conditionUnitCode_dictText;
/** 单价 */
private BigDecimal price;
/** 零售价 */
private BigDecimal retailPrice;
/** 厂家/产地 */
private String manufacturerText;
/** 批准文号 */
private String approvalNumber;
/** 库存最小警戒线 */
private BigDecimal itemMinQuantity;
/** 批次库存 */
private BigDecimal batchInventory;
/** 规格库存 */
private BigDecimal specificationInventory;
/** 供应商 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier")
@JsonSerialize(using = ToStringSerializer.class)
private Long supplierId;
private String supplierId_dictText;
/** 仓库 */
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
/** 生产日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date productionDate;
/** 失效日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date expirationDate;
/**
* 单位列表
*/
private List<Option> unitList;
@Data
public static class Option {
@Dict(dictCode = "unit_code")
private String value;
private String value_dictText;
public Option(String value, String value_dictText) {
this.value = value;
this.value_dictText = value_dictText;
}
}
}

View File

@@ -0,0 +1,57 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.pharmacyDispensarymanage.dto;
import java.io.Serializable;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 订购单查询条件
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class PharmacyDispensarySearchParam implements Serializable {
/** id */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 单据号 */
private String busNo;
/** 采购员 */
private String applicantName;
/** 项目名 */
private String name;
/** 拼音码 */
private String pyStr;
/** 供应商id */
@JsonSerialize(using = ToStringSerializer.class)
private Long supplierId;
/** 仓库类型 */
private Integer locationTypeEnum;
/** 仓库 */
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
/** 类型 */
private Integer typeEnum;
/** 单据状态 */
private Integer statusEnum;
/** 再生成单据号flg */
private String originalBusNoFlg;
}

View File

@@ -0,0 +1,58 @@
package com.openhis.web.pharmacyDispensarymanage.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryMedicationInfoDto;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensarySearchParam;
/**
* 药库共通 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyDispensaryCommonMapper {
/**
* 根据供应商获取药品
*
* @param page 分页
* @param queryWrapper 查询条件
* @param locationId 仓库id
* @return 药品信息
*/
Page<PharmacyDispensaryMedicationInfoDto> getMedicationInfo(
@Param("page") Page<PharmacyDispensaryMedicationInfoDto> page,
@Param(Constants.WRAPPER) QueryWrapper<PharmacyDispensarySearchParam> queryWrapper,
@Param("locationId") Long locationId, @Param("supplierId") Long supplierId);
/**
* 查询订货单分页列表
*
* @param page 分页
* @param queryWrapper 查询条件
* @param originalBusNoFlg 再生成单据号flg
* @param locationFlg 仓库flg
* @return 订货单分页列表
*/
Page<PharmacyDispensaryDto> getPage(@Param("page") Page<PharmacyDispensaryDto> page,
@Param(Constants.WRAPPER) QueryWrapper<PharmacyDispensarySearchParam> queryWrapper,
@Param("originalBusNoFlg") String originalBusNoFlg, @Param("locationFlg") String locationFlg);
/**
* 查询单据详情
*
* @param page 分页
* @param busNo 单据号
* @return 单据详情
*/
Page<PharmacyDispensaryDetailDto> getDetailPage(@Param("page") Page<PharmacyDispensaryDetailDto> page,
@Param("busNo") String busNo);
}

View File

@@ -0,0 +1,29 @@
package com.openhis.web.pharmacyDispensarymanage.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.openhis.common.enums.DispenseStatus;
import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 药房发药单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyDispensaryDispensingOrderMapper {
/**
* 获取更表所需信息
*
* @param dispenseIdList 药品发放id
* @param dispenseStatus 发放状态
* @return 单据详情
*/
List<PharmacyDispensaryDetailDto> getInfo(@Param("dispenseIdList") List<Long> dispenseIdList,@Param("dispenseStatus") Integer dispenseStatus);
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.pharmacyDispensarymanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 药房损益单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyDispensaryProfitLossOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.pharmacyDispensarymanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 药房请领单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyDispensaryRequisitionOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.pharmacyDispensarymanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 药房退库单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyDispensaryReturnToWarehouseOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.pharmacyDispensarymanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 药房入库单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyDispensaryStockInOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.pharmacyDispensarymanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 药房盘点单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyDispensaryStocktakingOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.pharmacyDispensarymanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 药房调入单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyDispensaryTransferInOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.pharmacyDispensarymanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 药房调出单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyDispensaryTransferOutOrderMapper {
}