版本更新

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,83 @@
package com.openhis.web.pharmacyWarehousemanage.appservice;
import javax.servlet.http.HttpServletRequest;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* 药库共通方法
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyWarehouseCommonService {
/**
* 单据初始化
*
* @return 初始化信息
*/
PharmacyWarehouseInitDto init();
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
R<?> getMedicationInfo(PharmacyWarehouseSearchParam 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(PharmacyWarehouseSearchParam 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,22 @@
package com.openhis.web.pharmacyWarehousemanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
/**
* 药库单据
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyWarehouseDocumentManagementService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.pharmacyWarehousemanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
/**
* 药库损益单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyWarehouseProfitLossOrderService {
/**
* 单据初始化
*
* @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<PharmacyWarehouseDetailDto> profitLossOrderDtoList);
}

View File

@@ -0,0 +1,49 @@
package com.openhis.web.pharmacyWarehousemanage.appservice;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* 药库订货单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyWarehousePurchaseOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 订货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 订货单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑采购单
*
* @param purchaseOrderDtoList 采购信息
* @return 操作结果
*/
R<?> addOrEditPurchaseOrder(List<PharmacyWarehouseDetailDto> purchaseOrderDtoList);
}

View File

@@ -0,0 +1,114 @@
package com.openhis.web.pharmacyWarehousemanage.appservice;
import javax.servlet.http.HttpServletRequest;
import com.core.common.core.domain.R;
import com.openhis.web.inventorymanage.dto.ItemChargeDetailDto;
import com.openhis.web.inventorymanage.dto.ReceiptApprovalSearchParam;
import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import java.util.List;
/**
* 药库审批方法
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyWarehouseReceiptApprovalService {
/**
* 采购单同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> purchaseOrderAgreeApproval(String busNo);
/**
* 根据单据号获取供应单据及供应项相关详细信息
*
* @param busNo 单据号
* @return 供应单据及供应项相关详细信息
*/
List<SupplyItemDetailDto> getSupplyItemDetail(String busNo);
/**
* 获取物品的价格信息
*
* @param itemIdList 物品id
* @return 价格信息
*/
List<ItemChargeDetailDto> getItemChargeDetail(List<Long> itemIdList);
/**
* 入库单据审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> purchaseInventoryApproved(String busNo);
/**
* 采购退货审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> purchaseReturnApproved(String busNo);
/**
* 领用出库审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> requisitionIssueApproved(String busNo);
/**
* 领用退库审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> returnIssueApproved(String busNo);
/**
* 报损单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> lossReportApproved(String busNo);
/**
* 商品盘点审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> productStocktakingApproved(String busNo);
//
// /**
// * 商品调拨审批通过
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// R<?> productTransferApproved(String busNo);
//
// /**
// * 审批驳回
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// R<?> reject(String busNo);
}

View File

@@ -0,0 +1,50 @@
package com.openhis.web.pharmacyWarehousemanage.appservice;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
/**
* 药库退货单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyWarehouseReturnOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 退货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退货单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑采购单
*
* @param returnOrderDtoList 采购信息
* @return 操作结果
*/
R<?> addOrEditReturnOrder(List<PharmacyWarehouseDetailDto> returnOrderDtoList);
}

View File

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

View File

@@ -0,0 +1,50 @@
package com.openhis.web.pharmacyWarehousemanage.appservice;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
/**
* 药库进货单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyWarehouseStockInOrderService {
/**
* 单据初始化
*
* @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<PharmacyWarehouseDetailDto> stockInOrderDtoList);
}

View File

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

View File

@@ -0,0 +1,47 @@
package com.openhis.web.pharmacyWarehousemanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
/**
* 药库盘点单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IPharmacyWarehouseStocktakingOrderService {
/**
* 单据初始化
*
* @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<PharmacyWarehouseDetailDto> stocktakingOrderDtoList);
}

View File

@@ -0,0 +1,273 @@
package com.openhis.web.pharmacyWarehousemanage.appservice.impl;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.common.utils.HisQueryUtils;
import com.openhis.web.common.appservice.ICommonService;
import com.openhis.web.common.dto.InventoryItemDto;
import com.openhis.web.common.dto.UnitDto;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseMedicationInfoDto;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehousePurchaseOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.openhis.administration.domain.Location;
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.web.common.dto.LocationDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
/**
* 药库共通
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyWarehouseCommonServiceImpl implements IPharmacyWarehouseCommonService {
@Resource
private ISupplierService supplierService;
@Resource
private IPractitionerService practitionerService;
@Resource
private ISupplyRequestService supplyRequestService;
@Resource
private PharmacyWarehouseCommonMapper pharmacyWarehouseCommonMapper;
@Resource
private ICommonService commonServiceImpl;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public PharmacyWarehouseInitDto init() {
PharmacyWarehouseInitDto orderInitDto = new PharmacyWarehouseInitDto();
// 查询供应商列表
List<Supplier> supplierList = supplierService.getList();
// 查询经手人列表
List<Practitioner> practitionerList = practitionerService.getList();
// 经手人信息
List<PharmacyWarehouseInitDto.LongOption> practitionerListOption = practitionerList.stream()
.map(practitioner -> new PharmacyWarehouseInitDto.LongOption(practitioner.getId(), practitioner.getName()))
.collect(Collectors.toList());
// 供应商信息
List<PharmacyWarehouseInitDto.SupplierOption> supplierListOption =
supplierList.stream().map(supplier -> new PharmacyWarehouseInitDto.SupplierOption(supplier.getId(),
supplier.getName(), supplier.getPhone())).collect(Collectors.toList());
// 审批状态
List<PharmacyWarehouseInitDto.IntegerOption> supplyStatusOption = Stream.of(SupplyStatus.values()).map(
supplyStatus -> new PharmacyWarehouseInitDto.IntegerOption(supplyStatus.getValue(), supplyStatus.getInfo()))
.collect(Collectors.toList());
// 包装情况
List<PharmacyWarehouseInitDto.IntegerOption> packagingConditionOption = Stream.of(PackagingCondition.values())
.map(packagingCondition -> new PharmacyWarehouseInitDto.IntegerOption(packagingCondition.getValue(),
packagingCondition.getInfo()))
.collect(Collectors.toList());
// 验收结果
List<PharmacyWarehouseInitDto.IntegerOption> acceptanceResultOption = Stream.of(AcceptanceResult.values())
.map(acceptanceResult -> new PharmacyWarehouseInitDto.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(PharmacyWarehouseSearchParam purchaseOrderSearchParam, Integer pageNo,
Integer pageSize, String searchKey, HttpServletRequest request) {
Long locationId = purchaseOrderSearchParam.getLocationId();
purchaseOrderSearchParam.setLocationId(null);
Long supplierId = null;
// 为药库订货时需要传参数supplierId
if (purchaseOrderSearchParam.getTypeEnum() != null
&& purchaseOrderSearchParam.getTypeEnum().equals(SupplyType.CABINET_PURCHASE.getValue())) {
supplierId = purchaseOrderSearchParam.getSupplierId();
purchaseOrderSearchParam.setSupplierId(null);
purchaseOrderSearchParam.setTypeEnum(null);
}
// 构建查询条件
QueryWrapper<PharmacyWarehouseSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(purchaseOrderSearchParam, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.Name, CommonConstants.FieldName.PyStr)), request);
// 设置排序
queryWrapper.orderByDesc(CommonConstants.FieldName.Name);
Page<PharmacyWarehouseMedicationInfoDto> medicationInfoDto = pharmacyWarehouseCommonMapper
.getMedicationInfo(new Page<>(pageNo, pageSize), queryWrapper, locationId, supplierId);
for (PharmacyWarehouseMedicationInfoDto item : medicationInfoDto.getRecords()) {
List<PharmacyWarehouseMedicationInfoDto.Option> unitList = new ArrayList<>();
unitList
.add(new PharmacyWarehouseMedicationInfoDto.Option(item.getUnitCode(), item.getUnitCode_dictText()));
unitList.add(
new PharmacyWarehouseMedicationInfoDto.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(PharmacyWarehouseSearchParam 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<PharmacyWarehouseSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(purchaseOrderSearchParam, searchKey,
new HashSet<>(
Arrays.asList(CommonConstants.FieldName.SupplyBusNo, CommonConstants.FieldName.ApplicantName)),
request);
// 设置排序
queryWrapper.orderByDesc(CommonConstants.FieldName.SupplyBusNo);
// 查询订货单分页列表
Page<PharmacyWarehouseDto> purchaseOrderDtoPage = pharmacyWarehouseCommonMapper
.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));
}
// /**
// * 提交审批
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// @Override
// public R<?> submitApproval(String busNo) {
// // 单据提交审核
// boolean result = supplyRequestService.submitApproval(busNo);
// return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
// : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
// }
// /**
// * 同意审批
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// @Override
// public R<?> agreeApproval(String busNo) {
// // 单据同意审核
// List<SupplyRequest> result = supplyRequestService.agreeRequest(busNo, DateUtils.getNowDate());
// return result == null ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
// : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
// }
// /**
// * 撤回审批
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// @Override
// public R<?> withdrawApproval(String busNo) {
// // 撤回审核
// boolean result = supplyRequestService.withdrawApproval(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,184 @@
package com.openhis.web.pharmacyWarehousemanage.appservice.impl;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import com.openhis.administration.domain.Location;
import com.openhis.administration.domain.Organization;
import com.openhis.common.enums.*;
import com.openhis.web.common.appservice.ICommonService;
import com.openhis.web.common.dto.LocationDto;
import org.springframework.beans.BeanUtils;
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.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseDocumentManagementService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseDocumentManagementMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药库单据
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyWarehouseDocumentManagementServiceImpl implements IPharmacyWarehouseDocumentManagementService {
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Resource
private ICommonService commonServiceImpl;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyWarehouseInitDto purchaseOrderInitDto = pharmacyWarehouseCommonService.init();
// 单据类型
List<PharmacyWarehouseInitDto.IntegerOption> cabinetTypeOption = new ArrayList<>();
cabinetTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.CABINET_PURCHASE.getValue(),
SupplyType.CABINET_PURCHASE.getInfo()));
cabinetTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.CABINET_STOCKIN.getValue(),
SupplyType.CABINET_STOCKIN.getInfo()));
cabinetTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.CABINET_RETURN.getValue(),
SupplyType.CABINET_RETURN.getInfo()));
cabinetTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.CABINET_STOCKOUT.getValue(),
SupplyType.CABINET_STOCKOUT.getInfo()));
cabinetTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.CABINET_PRODUCT_RETURN.getValue(),
SupplyType.CABINET_PRODUCT_RETURN.getInfo()));
cabinetTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.CABINET_PRPFITLOSS.getValue(),
SupplyType.CABINET_PRPFITLOSS.getInfo()));
cabinetTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.CABINET_STOCKTAKING.getValue(),
SupplyType.CABINET_STOCKTAKING.getInfo()));
// 单据类型
List<PharmacyWarehouseInitDto.IntegerOption> pharmacyTypeOption = new ArrayList<>();
pharmacyTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.PURCHASE_REQUISITION.getValue(),
SupplyType.PURCHASE_REQUISITION.getInfo()));
pharmacyTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.PURCHASE_STOCKIN.getValue(),
SupplyType.PURCHASE_STOCKIN.getInfo()));
pharmacyTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.PURCHASE_RETURN.getValue(),
SupplyType.PURCHASE_RETURN.getInfo()));
pharmacyTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.PURCHASE_PRPFITLOSS.getValue(),
SupplyType.PURCHASE_PRPFITLOSS.getInfo()));
pharmacyTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.PURCHASE_STOCKTAKING.getValue(),
SupplyType.PURCHASE_STOCKTAKING.getInfo()));
pharmacyTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.PURCHASE_TRANSFERIN.getValue(),
SupplyType.PURCHASE_TRANSFERIN.getInfo()));
pharmacyTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.PURCHASE_TRANSFEROUT.getValue(),
SupplyType.PURCHASE_TRANSFEROUT.getInfo()));
pharmacyTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.DISPENSING_ORDER.getValue(),
SupplyType.DISPENSING_ORDER.getInfo()));
// 单据类型
List<PharmacyWarehouseInitDto.IntegerOption> warehouseTypeOption = new ArrayList<>();
warehouseTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.MATERIAL_PURCHASE.getValue(),
SupplyType.MATERIAL_PURCHASE.getInfo()));
warehouseTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.MATERIAL_STOCKIN.getValue(),
SupplyType.MATERIAL_STOCKIN.getInfo()));
warehouseTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.MATERIAL_RETURN.getValue(),
SupplyType.MATERIAL_RETURN.getInfo()));
warehouseTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.MATERIAL_STOCKOUT.getValue(),
SupplyType.MATERIAL_STOCKOUT.getInfo()));
warehouseTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.MATERIAL_PRODUCT_RETURN.getValue(),
SupplyType.MATERIAL_PRODUCT_RETURN.getInfo()));
warehouseTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.MATERIAL_PRPFITLOSS.getValue(),
SupplyType.MATERIAL_PRPFITLOSS.getInfo()));
warehouseTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.MATERIAL_STOCKTAKING.getValue(),
SupplyType.MATERIAL_STOCKTAKING.getInfo()));
warehouseTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.MATERIAL_TRANSFERIN.getValue(),
SupplyType.MATERIAL_TRANSFERIN.getInfo()));
warehouseTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.MATERIAL_TRANSFEROUT.getValue(),
SupplyType.MATERIAL_TRANSFEROUT.getInfo()));
// 单据类型
List<PharmacyWarehouseInitDto.IntegerOption> departmentTypeOption = new ArrayList<>();
departmentTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.DEPARTMENT_REQUISITION.getValue(),
SupplyType.DEPARTMENT_REQUISITION.getInfo()));
departmentTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.DEPARTMENT_STOCKIN.getValue(),
SupplyType.DEPARTMENT_STOCKIN.getInfo()));
departmentTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.DEPARTMENT_RETURN.getValue(),
SupplyType.DEPARTMENT_RETURN.getInfo()));
departmentTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.DEPARTMENT_PRPFITLOSS.getValue(),
SupplyType.DEPARTMENT_PRPFITLOSS.getInfo()));
departmentTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.DEPARTMENT_STOCKTAKING.getValue(),
SupplyType.DEPARTMENT_STOCKTAKING.getInfo()));
departmentTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.DEPARTMENT_TRANSFERIN.getValue(),
SupplyType.DEPARTMENT_TRANSFERIN.getInfo()));
departmentTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.DEPARTMENT_TRANSFEROUT.getValue(),
SupplyType.DEPARTMENT_TRANSFEROUT.getInfo()));
departmentTypeOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyType.DISPENSING_ORDER.getValue(),
SupplyType.DISPENSING_ORDER.getInfo()));
// 药库列表
List<PharmacyWarehouseInitDto.item> cabinetList = new ArrayList<>();
PharmacyWarehouseInitDto.item cabinetListItem;
for (LocationDto item : commonServiceImpl.getCabinetList()) {
cabinetListItem = new PharmacyWarehouseInitDto.item();
BeanUtils.copyProperties(item, cabinetListItem);
cabinetList.add(cabinetListItem);
}
// 药房列表
List<PharmacyWarehouseInitDto.item> pharmacyList = new ArrayList<>();
PharmacyWarehouseInitDto.item pharmacyListItem;
for (LocationDto item : commonServiceImpl.getPharmacyList()) {
pharmacyListItem = new PharmacyWarehouseInitDto.item();
BeanUtils.copyProperties(item, pharmacyListItem);
pharmacyList.add(pharmacyListItem);
}
// 仓库列表
List<PharmacyWarehouseInitDto.item> warehouseList = new ArrayList<>();
PharmacyWarehouseInitDto.item warehouseListItem;
for (LocationDto item : commonServiceImpl.getWarehouseList()) {
warehouseListItem = new PharmacyWarehouseInitDto.item();
BeanUtils.copyProperties(item, warehouseListItem);
warehouseList.add(warehouseListItem);
}
// 仓库列表
List<PharmacyWarehouseInitDto.item> departmentList = new ArrayList<>();
PharmacyWarehouseInitDto.item departmentListItem;
for (Organization item : commonServiceImpl.departmentList()) {
departmentListItem = new PharmacyWarehouseInitDto.item();
BeanUtils.copyProperties(item, departmentListItem);
departmentList.add(departmentListItem);
}
// 库房类型
List<PharmacyWarehouseInitDto.WarehouseOption> typeOption = new ArrayList<>();
typeOption.add(new PharmacyWarehouseInitDto.WarehouseOption(LocationForm.CABINET.getValue(),
LocationForm.CABINET.getInfo(), cabinetList, cabinetTypeOption));
typeOption.add(new PharmacyWarehouseInitDto.WarehouseOption(LocationForm.PHARMACY.getValue(),
LocationForm.PHARMACY.getInfo(), pharmacyList, pharmacyTypeOption));
typeOption.add(new PharmacyWarehouseInitDto.WarehouseOption(LocationForm.WAREHOUSE.getValue(),
LocationForm.WAREHOUSE.getInfo(), warehouseList, warehouseTypeOption));
typeOption.add(new PharmacyWarehouseInitDto.WarehouseOption(LocationForm.DEPARTMENT.getValue(),
LocationForm.DEPARTMENT.getInfo(), departmentList, departmentTypeOption));
purchaseOrderInitDto.setWarehouseTypeOption(typeOption);
return R.ok(purchaseOrderInitDto);
}
}

View File

@@ -0,0 +1,170 @@
package com.openhis.web.pharmacyWarehousemanage.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.common.enums.*;
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.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseProfitLossOrderService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseProfitLossOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药库损益单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyWarehouseProfitLossOrderServiceImpl implements IPharmacyWarehouseProfitLossOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private PharmacyWarehouseCommonMapper pharmacyWarehouseCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyWarehouseInitDto purchaseOrderInitDto = pharmacyWarehouseCommonService.init();
// 单据分类
List<PharmacyWarehouseInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(),
SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo()));
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(),
SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo()));
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.PREPARATION_CONSUMPTION.getValue(),
SupplyCategory.PREPARATION_CONSUMPTION.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<PharmacyWarehouseDetailDto> profitLossOrderDtoDetailPage =
pharmacyWarehouseCommonMapper.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<PharmacyWarehouseDetailDto.Option> unitList;
for (PharmacyWarehouseDetailDto item : profitLossOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyWarehouseDetailDto.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.LOSS_BUS_NO.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑损益单
*
* @param profitLossOrderDtoList 损益信息
* @return 操作结果
*/
@Override
public R<?> addOrEditProfitLossOrder(List<PharmacyWarehouseDetailDto> 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 (PharmacyWarehouseDetailDto item : profitLossOrderDtoList) {
SupplyRequest supplyRequest =
new SupplyRequest().setBusNo(item.getBusNo()).setTypeEnum(SupplyType.CABINET_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()).setSupplierId(item.getSupplierId())
.setReason(item.getReason()).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,170 @@
package com.openhis.web.pharmacyWarehousemanage.appservice.impl;
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.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.administration.domain.Practitioner;
import com.openhis.administration.domain.Supplier;
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.common.utils.HisQueryUtils;
import com.openhis.web.common.dto.LocationDto;
import com.openhis.web.common.dto.UnitDto;
import com.openhis.web.inventorymanage.dto.*;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehousePurchaseOrderService;
import com.openhis.web.pharmacyWarehousemanage.dto.*;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehousePurchaseOrderMapper;
import com.openhis.workflow.domain.SupplyDelivery;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyDeliveryService;
import com.openhis.workflow.service.ISupplyRequestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 药库订货单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyWarehousePurchaseOrderServiceImpl implements IPharmacyWarehousePurchaseOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private PharmacyWarehouseCommonMapper pharmacyWarehouseCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyWarehouseInitDto purchaseOrderInitDto = pharmacyWarehouseCommonService.init();
// 单据分类
List<PharmacyWarehouseInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.PURCHASE_PLAN_GENERATION.getValue(),
SupplyCategory.PURCHASE_PLAN_GENERATION.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<PharmacyWarehouseDetailDto> purchaseOrderDtoDetailPage =
pharmacyWarehouseCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
purchaseOrderDtoDetailPage.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<PharmacyWarehouseDetailDto.Option> unitList;
for (PharmacyWarehouseDetailDto item : purchaseOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText()
));
item.setUnitList(unitList);
}
return R.ok(purchaseOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.PHARMACY_WAREHOUSE_PURCHASE.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑采购单
*
* @param purchaseOrderDtoList 采购信息
* @return 操作结果
*/
@Override
public R<?> addOrEditPurchaseOrder(List<PharmacyWarehouseDetailDto> purchaseOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(purchaseOrderDtoList.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 (PharmacyWarehouseDetailDto item : purchaseOrderDtoList) {
SupplyRequest supplyRequest =
new SupplyRequest().setBusNo(item.getBusNo()).setTypeEnum(SupplyType.CABINET_PURCHASE.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity())
.setSpecificationInventory(item.getSpecificationInventory()).setPrice(item.getPrice())
.setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice())
.setTotalRetailPrice(item.getTotalRetailPrice()).setPurposeTypeEnum(LocationForm.CABINET.getValue())
.setPurposeLocationId(item.getPurposeLocationId()).setSupplierId(item.getSupplierId())
.setApplicantId(item.getApplicantId()).setApplyTime(item.getApplyTime()).setReason(item.getReason())
.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,984 @@
package com.openhis.web.pharmacyWarehousemanage.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.exception.ServiceException;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.SecurityUtils;
import com.openhis.administration.domain.ChargeItemDefDetail;
import com.openhis.administration.service.IChargeItemDefDetailService;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
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.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReceiptApprovalService;
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 PharmacyWarehouseReceiptApprovalServiceImpl implements IPharmacyWarehouseReceiptApprovalService {
@Autowired
private ITraceNoAppService traceNoAppService;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private ISupplyDeliveryService supplyDeliveryService;
@Autowired
private IChargeItemDefDetailService chargeItemDefAppService;
@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<?> purchaseOrderAgreeApproval(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<?> purchaseInventoryApproved(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));
}
// 获取供应的物品
List<Long> itemIdList = supplyRequestService.getItem(agreedList);
// 获取项目价格相关信息
List<ItemChargeDetailDto> chargeDetailList = this.getItemChargeDetail(itemIdList);
List<ChargeItemDefDetail> chargeItemDefDetailList;
if (!chargeDetailList.isEmpty()) {
// 生成与之前定价不同的定价子表数据
chargeItemDefDetailList = this.creatChargeItemDetail(agreedList, chargeDetailList);
if (!chargeItemDefDetailList.isEmpty()) {
for (ChargeItemDefDetail chargeItemDefDetail : chargeItemDefDetailList) {
// 增加项目定价子表数据
chargeItemDefAppService.addChargeItemDefApp(chargeItemDefDetail);
}
}
}
// 查询供应项目的详细信息
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.CABINET_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<?> purchaseReturnApproved(String busNo) {
// // 根据原始单据号查询信息
// List<SupplyRequest> supplyRequest = supplyRequestService.getSupplyByOriginalBusNo(busNo);
// if (!supplyRequest.isEmpty()) {
// // 将原始单据号信息的状态改为已失效
// boolean flg = supplyRequestService.updateStatusEnumByBusNo(supplyRequest.get(0).getBusNo());
// if (!flg) {
// R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
// }
// }
// 获取当前时间
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));
}
// 退货数量等于库存数量时,删除库存数据
if (minQuantity.compareTo(BigDecimal.ZERO) == 0) {
inventoryItemService.removeById(inventoryItemSource.getId());
}
}
}
// 追加追溯码信息
boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(),
SupplyType.CABINET_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));
}
/**
* 药库出库单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> requisitionIssueApproved(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 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(),
minQuantitySource, now);
if (!aBooleanSource) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
}
// 追加追溯码信息
boolean flg = traceNoAppService.addTraceNoManage(supplyItemDetailList, TraceNoStatus.OUT.getValue(),
SupplyType.CABINET_STOCKOUT.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<?> returnIssueApproved(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 minQuantityPurpose = inventoryItemPurpose.getQuantity();
// 计算盘点后库存数量,结果取小单位
// 供应申请的物品计量单位与包装单位相同
if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getUnitCode())) {
// 源仓库库存+(退库数量*拆零比)
minQuantityPurpose = minQuantityPurpose
.add(supplyItemDetailDto.getPartPercent().multiply(supplyItemDetailDto.getItemQuantity()));
} else if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) {
// 供应申请的物品计量单位与最小单位相同
// 源仓库库存+退库数量
minQuantityPurpose = minQuantityPurpose.add(supplyItemDetailDto.getItemQuantity());
}
// 更新目的仓库库存数量
Boolean bBooleanPurpose = inventoryItemService.updateInventoryQuantity(inventoryItemPurpose.getId(),
minQuantityPurpose, 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.CABINET_PRODUCT_RETURN.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<?> lossReportApproved(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.CABINET_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<?> productStocktakingApproved(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 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.CABINET_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 List<SupplyItemDetailDto> getSupplyItemDetail(String busNo) {
return receiptApprovalMapper.selectSupplyDetail(busNo, DispenseStatus.COMPLETED.getValue());
}
/**
* 获取物品的价格信息
*
* @param itemIdList 物品id
* @return 价格信息
*/
@Override
public List<ItemChargeDetailDto> getItemChargeDetail(List<Long> itemIdList) {
// todo未来会移到charge相关的service中
if (!itemIdList.isEmpty()) {
return receiptApprovalMapper.selectChargeDetail(itemIdList);
}
return null;
}
/**
* 入库项价格验证
*
* @param agreedList 供应单据
* @param chargeDetailList 项目价格
* @return 价格定义子表数据
*/
private List<ChargeItemDefDetail> creatChargeItemDetail(List<SupplyRequest> agreedList,
List<ItemChargeDetailDto> chargeDetailList) {
List<ChargeItemDefDetail> resultList = new ArrayList<>();
// 将各个项目的定价信息按项目id分组
Map<Long, List<ItemChargeDetailDto>> chargeDetailGroup =
chargeDetailList.stream().collect(Collectors.groupingBy(ItemChargeDetailDto::getInstanceId));
for (SupplyRequest supplyRequest : agreedList) {
Long itemId = supplyRequest.getItemId();
// 通过供应项目id匹配项目定价
List<ItemChargeDetailDto> details = chargeDetailGroup.get(itemId);
if (details == null)
continue;
boolean shouldSkip = false;
for (ItemChargeDetailDto detail : details) {
// 如果入库项的批次与定价中的批次相同
if (detail.getConditionValue().equals(supplyRequest.getLotNumber())) {
// 无论价格是否相同都跳过这条记录
shouldSkip = true;
break;
}
}
if (!shouldSkip) {
// 新增对应项目的价格定义子表
resultList.addAll(this.addChargeItemDefApp(supplyRequest.getLotNumber(), supplyRequest.getPrice(),
supplyRequest.getRetailPrice(), details.get(0).getDefinitionId()));
}
}
return resultList;
}
/**
* 添加项目定价子表信息
*
* @param conditionValue 命中值
* @param price 进价
* @param retailPrice 售价
* @param definitionId 主表id
* @return 子表信息
*/
private List<ChargeItemDefDetail> addChargeItemDefApp(String conditionValue, BigDecimal price,
BigDecimal retailPrice, Long definitionId) {
List<ChargeItemDefDetail> chargeItemDefDetailList = new ArrayList<>();
ChargeItemDefDetail chargeItemDefDetail = new ChargeItemDefDetail();
chargeItemDefDetail
// 命中条件:批号
.setConditionCode(ConditionCode.LOT_NUMBER_COST.getCode())
// 命中值
.setConditionValue(conditionValue)
// 主表id
.setDefinitionId(definitionId)
// 进价
.setAmount(price);
chargeItemDefDetailList.add(chargeItemDefDetail);
chargeItemDefDetail = new ChargeItemDefDetail();
chargeItemDefDetail
// 命中条件:批号
.setConditionCode(ConditionCode.LOT_NUMBER_PRICE.getCode())
// 命中值
.setConditionValue(conditionValue)
// 主表id
.setDefinitionId(definitionId)
// 售价
.setAmount(retailPrice);
chargeItemDefDetailList.add(chargeItemDefDetail);
return chargeItemDefDetailList;
}
/**
* 医保库存相关进销存接口
*
* @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,173 @@
package com.openhis.web.pharmacyWarehousemanage.appservice.impl;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.openhis.common.enums.*;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.dto.*;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper;
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.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.utils.EnumUtils;
import com.openhis.common.utils.HisQueryUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReturnOrderService;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseReturnOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药库退货单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyWarehouseReturnOrderServiceImpl implements IPharmacyWarehouseReturnOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private PharmacyWarehouseCommonMapper pharmacyWarehouseCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyWarehouseInitDto purchaseOrderInitDto = pharmacyWarehouseCommonService.init();
// 单据分类
List<PharmacyWarehouseInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyWarehouseInitDto.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<PharmacyWarehouseDetailDto> returnOrderDtoDetailPage =
pharmacyWarehouseCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
returnOrderDtoDetailPage.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<PharmacyWarehouseDetailDto.Option> unitList;
for (PharmacyWarehouseDetailDto item : returnOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(returnOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.RETURN_BUS_NO.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑退货单
*
* @param returnOrderDtoList 采购信息
* @return 操作结果
*/
@Override
public R<?> addOrEditReturnOrder(List<PharmacyWarehouseDetailDto> returnOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(returnOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
//添加原始单据号
if(returnOrderDtoList.get(0).getOriginalBusNo()!=null){
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.addOriginalBusNo(returnOrderDtoList.get(0).getOriginalBusNo(), returnOrderDtoList.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 (PharmacyWarehouseDetailDto item : returnOrderDtoList) {
SupplyRequest supplyRequest =
new SupplyRequest().setBusNo(item.getBusNo()).setTypeEnum(SupplyType.CABINET_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()).setPrice(item.getPrice())
.setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice())
.setTotalRetailPrice(item.getTotalRetailPrice()).setBatchInventory(item.getBatchInventory())
.setOccurrenceTime(item.getOccurrenceTime()).setEndTime(item.getEndTime())
.setLotNumber(item.getLotNumber()).setInvoiceNo(item.getInvoiceNo()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId())
.setReason(item.getReason()).setSourceTypeEnum(LocationForm.CABINET.getValue())
.setSourceLocationId(item.getSourceLocationId()).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,176 @@
package com.openhis.web.pharmacyWarehousemanage.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.common.enums.*;
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.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReturnToWarehouseOrderService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseReturnToWarehouseOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药库退库单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyWarehouseReturnToWarehouseOrderServiceImpl implements IPharmacyWarehouseReturnToWarehouseOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private PharmacyWarehouseCommonMapper pharmacyWarehouseCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyWarehouseInitDto purchaseOrderInitDto = pharmacyWarehouseCommonService.init();
// 单据分类
List<PharmacyWarehouseInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyWarehouseInitDto.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<PharmacyWarehouseDetailDto> returnToWarehouseOrderDtoDetailPage =
pharmacyWarehouseCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
returnToWarehouseOrderDtoDetailPage.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<PharmacyWarehouseDetailDto.Option> unitList;
for (PharmacyWarehouseDetailDto item : returnToWarehouseOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText()
));
item.setUnitList(unitList);
}
return R.ok(returnToWarehouseOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.RETURN_ISSUE_NUM.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑退库单
*
* @param returnToWarehouseOrderDtoList 退库信息
* @return 操作结果
*/
@Override
public R<?> addOrEditReturnToWarehouseOrder(List<PharmacyWarehouseDetailDto> returnToWarehouseOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(returnToWarehouseOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
//添加原始单据号
if(returnToWarehouseOrderDtoList.get(0).getOriginalBusNo()!=null){
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.addOriginalBusNo(returnToWarehouseOrderDtoList.get(0).getOriginalBusNo(), returnToWarehouseOrderDtoList.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 (PharmacyWarehouseDetailDto item : returnToWarehouseOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.CABINET_PRODUCT_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()).setPrice(item.getPrice())
.setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice())
.setTotalRetailPrice(item.getTotalRetailPrice()).setBatchInventory(item.getBatchInventory())
.setSpecificationInventory(item.getSpecificationInventory()).setStartTime(item.getStartTime())
.setEndTime(item.getEndTime()).setPractitionerId(item.getPractitionerId())
.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,202 @@
package com.openhis.web.pharmacyWarehousemanage.appservice.impl;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.core.common.exception.ServiceException;
import com.core.common.utils.SecurityUtils;
import com.openhis.administration.domain.ChargeItemDefDetail;
import com.openhis.common.enums.*;
import com.openhis.common.enums.ybenums.YbInvChgType;
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.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.dto.*;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper;
import com.openhis.workflow.domain.InventoryItem;
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.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.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.utils.EnumUtils;
import com.openhis.common.utils.HisQueryUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseStockInOrderService;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseStockInOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药库进货单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyWarehouseStockInOrderServiceImpl implements IPharmacyWarehouseStockInOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private PharmacyWarehouseCommonMapper pharmacyWarehouseCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyWarehouseInitDto purchaseOrderInitDto = pharmacyWarehouseCommonService.init();
// 单据分类
List<PharmacyWarehouseInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption
.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.PURCHASED_DRUGS_WAREHOUSING.getValue(),
SupplyCategory.PURCHASED_DRUGS_WAREHOUSING.getInfo()));
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(
SupplyCategory.HOMEMADE_DRUGS_WAREHOUSING.getValue(), SupplyCategory.HOMEMADE_DRUGS_WAREHOUSING.getInfo()));
supplyCategoryOption
.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.CONSIGNMENT_DRUGS_WAREHOUSING.getValue(),
SupplyCategory.CONSIGNMENT_DRUGS_WAREHOUSING.getInfo()));
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(
SupplyCategory.OTHER_DRUGS_WAREHOUSING.getValue(), SupplyCategory.OTHER_DRUGS_WAREHOUSING.getInfo()));
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(
SupplyCategory.DONATED_DRUGS_WAREHOUSING.getValue(), SupplyCategory.DONATED_DRUGS_WAREHOUSING.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<PharmacyWarehouseDetailDto> stockInOrderDtoDetailPage =
pharmacyWarehouseCommonMapper.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()));
// 包装情况
e.setPackagingConditionEnum_enumText(
EnumUtils.getInfoByValue(PackagingCondition.class, e.getPackagingConditionEnum()));
// 验收结果
e.setAcceptanceResultEnum_enumText(
EnumUtils.getInfoByValue(AcceptanceResult.class, e.getAcceptanceResultEnum()));
});
List<PharmacyWarehouseDetailDto.Option> unitList;
for (PharmacyWarehouseDetailDto item : stockInOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyWarehouseDetailDto.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_NUM.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑进货单
*
* @param stockInOrderDtoList 进货信息
* @return 操作结果
*/
@Override
public R<?> addOrEditStockInOrder(List<PharmacyWarehouseDetailDto> 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 (PharmacyWarehouseDetailDto item : stockInOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.CABINET_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())
.setBatchInventory(item.getBatchInventory()).setSpecificationInventory(item.getSpecificationInventory())
.setPrice(item.getPrice()).setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice())
.setTotalRetailPrice(item.getTotalRetailPrice()).setStartTime(item.getStartTime())
.setEndTime(item.getEndTime()).setPractitionerId(item.getPractitionerId())
.setLotNumber(item.getLotNumber()).setInvoiceNo(item.getInvoiceNo()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setPurposeTypeEnum(LocationForm.CABINET.getValue())
.setPurposeLocationId(item.getPurposeLocationId()).setPackagingConditionEnum(item.getPackagingConditionEnum())
.setAcceptanceResultEnum(item.getAcceptanceResultEnum()).setSupplierId(item.getSupplierId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setReason(item.getReason())
.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,181 @@
package com.openhis.web.pharmacyWarehousemanage.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.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseStockOutOrderService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseStockOutOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药库出库单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyWarehouseStockOutOrderServiceImpl implements IPharmacyWarehouseStockOutOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private PharmacyWarehouseCommonMapper pharmacyWarehouseCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyWarehouseInitDto purchaseOrderInitDto = pharmacyWarehouseCommonService.init();
// 单据分类
List<PharmacyWarehouseInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.IN_HOSPITAL_OUTBOUND.getValue(),
SupplyCategory.IN_HOSPITAL_OUTBOUND.getInfo()));
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getValue(),
SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getInfo()));
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.OTHER_OUTBOUND.getValue(),
SupplyCategory.OTHER_OUTBOUND.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<PharmacyWarehouseDetailDto> stockOutOrderDtoDetailPage =
pharmacyWarehouseCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
stockOutOrderDtoDetailPage.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<PharmacyWarehouseDetailDto.Option> unitList;
for (PharmacyWarehouseDetailDto item : stockOutOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText()
));
item.setUnitList(unitList);
}
return R.ok(stockOutOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.REQUISITION_NUM.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑出库单
*
* @param stockOutOrderDtoList 出库信息
* @return 操作结果
*/
@Override
public R<?> addOrEditStockOutOrder(List<PharmacyWarehouseDetailDto> stockOutOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(stockOutOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
//添加原始单据号
if(stockOutOrderDtoList.get(0).getOriginalBusNo()!=null){
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.addOriginalBusNo(stockOutOrderDtoList.get(0).getOriginalBusNo(), stockOutOrderDtoList.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 (PharmacyWarehouseDetailDto item : stockOutOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.CABINET_STOCKOUT.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()).setPractitionerId(item.getPractitionerId())
.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,167 @@
package com.openhis.web.pharmacyWarehousemanage.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.common.enums.*;
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.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseStocktakingOrderService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper;
import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseStocktakingOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 药库盘点单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class PharmacyWarehouseStocktakingOrderServiceImpl implements IPharmacyWarehouseStocktakingOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private PharmacyWarehouseCommonMapper pharmacyWarehouseCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
PharmacyWarehouseInitDto purchaseOrderInitDto = pharmacyWarehouseCommonService.init();
// 单据分类
List<PharmacyWarehouseInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(
SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo()));
supplyCategoryOption.add(new PharmacyWarehouseInitDto.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<PharmacyWarehouseDetailDto> stocktakingOrderDtoDetailPage =
pharmacyWarehouseCommonMapper.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<PharmacyWarehouseDetailDto.Option> unitList;
for (PharmacyWarehouseDetailDto item : stocktakingOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new PharmacyWarehouseDetailDto.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.STOCKTAKING_NUM.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑盘点单
*
* @param stocktakingOrderDtoList 盘点信息
* @return 操作结果
*/
@Override
public R<?> addOrEditStocktakingOrder(List<PharmacyWarehouseDetailDto> 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 (PharmacyWarehouseDetailDto item : stocktakingOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.CABINET_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()).setSupplierId(item.getSupplierId())
.setTraceNo(item.getTraceNo()).setTraceNoUnitCode(item.getTraceNoUnitCode())
.setReasonCode(item.getReasonCode()).setReason(item.getReason())
.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,68 @@
package com.openhis.web.pharmacyWarehousemanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.openhis.common.enums.LocationForm;
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.SupplyType;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReceiptApprovalService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseDocumentManagementService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药库单据管理
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-warehouse/documentManagement")
@Slf4j
public class PharmacyWarehouseDocumentManagementController {
@Autowired
private IPharmacyWarehouseDocumentManagementService pharmacyWarehouseDocumentManagementService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
/**
* 单据管理初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyWarehouseDocumentManagementService.init();
}
/**
* 单据管理单据列表
*
* @param documentManagementSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 单据管理据分页列表
*/
@GetMapping(value = "/documentManagement-page")
public R<?> getPage(PharmacyWarehouseSearchParam documentManagementSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyWarehouseCommonService.getPage(documentManagementSearchParam, pageNo, pageSize, searchKey, request,
null, null);
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.pharmacyWarehousemanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.openhis.common.enums.LocationForm;
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.SupplyType;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReceiptApprovalService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseProfitLossOrderService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药库损益单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-warehouse/profitLoss-order")
@Slf4j
public class PharmacyWarehouseProfitLossOrderController {
@Autowired
private IPharmacyWarehouseProfitLossOrderService pharmacyWarehouseProfitLossOrderService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private IPharmacyWarehouseReceiptApprovalService pharmacyWarehouseReceiptApprovalService;
/**
* 损益单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyWarehouseProfitLossOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyWarehouseSearchParam 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 pharmacyWarehouseCommonService.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(PharmacyWarehouseSearchParam 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 pharmacyWarehouseCommonService.getPage(profitLossOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.CABINET_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 pharmacyWarehouseProfitLossOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyWarehouseProfitLossOrderService.getBusNo();
}
/**
* 添加/编辑损益单
*
* @param profitLossOrderDtoList 损益信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-profitLossOrder")
public R<?> addOrEditProfitLossOrder(@Validated @RequestBody List<PharmacyWarehouseDetailDto> profitLossOrderDtoList) {
return pharmacyWarehouseProfitLossOrderService.addOrEditProfitLossOrder(profitLossOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-profitLossOrder")
public R<?> deleteProfitLossOrder(@RequestParam String busNo) {
return pharmacyWarehouseCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyWarehouseReceiptApprovalService.lossReportApproved(busNo);
}
}

View File

@@ -0,0 +1,159 @@
package com.openhis.web.pharmacyWarehousemanage.controller;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehousePurchaseOrderService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReceiptApprovalService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* 药库订货单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-warehouse/purchase-order")
@Slf4j
public class PharmacyWarehousePurchaseOrderController {
@Autowired
private IPharmacyWarehousePurchaseOrderService pharmacyWarehousePurchaseOrderService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private IPharmacyWarehouseReceiptApprovalService pharmacyWarehouseReceiptApprovalService;
/**
* 订货单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyWarehousePurchaseOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyWarehouseSearchParam 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 pharmacyWarehouseCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 订货单单据列表
*
* @param purchaseOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 订货单据分页列表
*/
@GetMapping(value = "/purchase-order-page")
public R<?> getPage(PharmacyWarehouseSearchParam 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 pharmacyWarehouseCommonService.getPage(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.CABINET_PURCHASE.getValue());
}
/**
* 订货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 订货单单据详情
*/
@GetMapping(value = "/purchase-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyWarehousePurchaseOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyWarehousePurchaseOrderService.getBusNo();
}
/**
* 添加/编辑采购单
*
* @param purchaseOrderDtoList 采购信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-purchaseOrder")
public R<?> addOrEditPurchaseOrder(@Validated @RequestBody List<PharmacyWarehouseDetailDto> purchaseOrderDtoList) {
return pharmacyWarehousePurchaseOrderService.addOrEditPurchaseOrder(purchaseOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-purchaseOrder")
public R<?> deletePurchaseOrder(@RequestParam String busNo) {
return pharmacyWarehouseCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyWarehouseReceiptApprovalService.purchaseOrderAgreeApproval(busNo);
}
// /**
// * 提交审批
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// @PutMapping("/submit-approval")
// public R<?> submitApproval(@RequestParam String busNo) {
// return pharmacyWarehouseCommonService.submitApproval(busNo);
// }
//
// /**
// * 撤回审批
// *
// * @param busNo 单据号
// * @return 操作结果
// */
// @PutMapping("/withdraw-approval")
// public R<?> withdrawApproval(@RequestParam String busNo) {
// return pharmacyWarehouseCommonService.withdrawApproval(busNo);
// }
}

View File

@@ -0,0 +1,140 @@
package com.openhis.web.pharmacyWarehousemanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReceiptApprovalService;
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.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReturnOrderService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药库退货单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-warehouse/return-order")
@Slf4j
public class PharmacyWarehouseReturnOrderController {
@Autowired
private IPharmacyWarehouseReturnOrderService pharmacyWarehouseReturnOrderService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private IPharmacyWarehouseReceiptApprovalService pharmacyWarehouseReceiptApprovalService;
/**
* 退货单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyWarehouseReturnOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyWarehouseSearchParam 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 pharmacyWarehouseCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 退货单单据列表
*
* @param returnOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 退货单据分页列表
*/
@GetMapping(value = "/return-order-page")
public R<?> getPage(PharmacyWarehouseSearchParam returnOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyWarehouseCommonService.getPage(returnOrderSearchParam, pageNo, pageSize, searchKey, request,
"1", SupplyType.CABINET_RETURN.getValue());
}
/**
* 退货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退货单单据详情
*/
@GetMapping(value = "/return-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyWarehouseReturnOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyWarehouseReturnOrderService.getBusNo();
}
/**
* 添加/编辑采购单
*
* @param returnOrderDtoList 采购信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-returnOrder")
public R<?> addOrEditReturnOrder(@Validated @RequestBody List<PharmacyWarehouseDetailDto> returnOrderDtoList) {
return pharmacyWarehouseReturnOrderService.addOrEditReturnOrder(returnOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-returnOrder")
public R<?> deleteReturnOrder(@RequestParam String busNo) {
return pharmacyWarehouseCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyWarehouseReceiptApprovalService.purchaseReturnApproved(busNo);
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.pharmacyWarehousemanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.openhis.common.enums.LocationForm;
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.SupplyType;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReceiptApprovalService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReturnToWarehouseOrderService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药库退库单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-warehouse/returnToWarehouse-order")
@Slf4j
public class PharmacyWarehouseReturnToWarehouseOrderController {
@Autowired
private IPharmacyWarehouseReturnToWarehouseOrderService pharmacyWarehouseReturnToWarehouseOrderService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private IPharmacyWarehouseReceiptApprovalService pharmacyWarehouseReceiptApprovalService;
/**
* 退库单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyWarehouseReturnToWarehouseOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyWarehouseSearchParam 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 pharmacyWarehouseCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 退库单单据列表
*
* @param returnToWarehouseOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 退库单据分页列表
*/
@GetMapping(value = "/returnToWarehouse-order-page")
public R<?> getPage(PharmacyWarehouseSearchParam returnToWarehouseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyWarehouseCommonService.getPage(returnToWarehouseOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.CABINET_PRODUCT_RETURN.getValue());
}
/**
* 退库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退库单单据详情
*/
@GetMapping(value = "/returnToWarehouse-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyWarehouseReturnToWarehouseOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyWarehouseReturnToWarehouseOrderService.getBusNo();
}
/**
* 添加/编辑退库单
*
* @param returnToWarehouseOrderDtoList 退库信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-returnToWarehouseOrder")
public R<?> addOrEditReturnToWarehouseOrder(@Validated @RequestBody List<PharmacyWarehouseDetailDto> returnToWarehouseOrderDtoList) {
return pharmacyWarehouseReturnToWarehouseOrderService.addOrEditReturnToWarehouseOrder(returnToWarehouseOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-returnToWarehouseOrder")
public R<?> deleteReturnToWarehouseOrder(@RequestParam String busNo) {
return pharmacyWarehouseCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyWarehouseReceiptApprovalService.returnIssueApproved(busNo);
}
}

View File

@@ -0,0 +1,139 @@
package com.openhis.web.pharmacyWarehousemanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReceiptApprovalService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import liquibase.pro.packaged.S;
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.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseStockInOrderService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药库进货单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-warehouse/stockIn-order")
@Slf4j
public class PharmacyWarehouseStockInOrderController {
@Autowired
private IPharmacyWarehouseStockInOrderService pharmacyWarehouseStockInOrderService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private IPharmacyWarehouseReceiptApprovalService pharmacyWarehouseReceiptApprovalService;
/**
* 进货单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyWarehouseStockInOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyWarehouseSearchParam 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 pharmacyWarehouseCommonService.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(PharmacyWarehouseSearchParam 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 pharmacyWarehouseCommonService.getPage(stockInOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.CABINET_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 pharmacyWarehouseStockInOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyWarehouseStockInOrderService.getBusNo();
}
/**
* 添加/编辑进货单
*
* @param stockInOrderDtoList 进货信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-stockInOrder")
public R<?> addOrEditStockInOrder(@Validated @RequestBody List<PharmacyWarehouseDetailDto> stockInOrderDtoList) {
return pharmacyWarehouseStockInOrderService.addOrEditStockInOrder(stockInOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-stockInOrder")
public R<?> deleteStockInOrder(@RequestParam String busNo) {
return pharmacyWarehouseCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyWarehouseReceiptApprovalService.purchaseInventoryApproved(busNo);
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.pharmacyWarehousemanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.openhis.common.enums.LocationForm;
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.SupplyType;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReceiptApprovalService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseStockOutOrderService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药库出库单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-warehouse/stockOut-order")
@Slf4j
public class PharmacyWarehouseStockOutOrderController {
@Autowired
private IPharmacyWarehouseStockOutOrderService pharmacyWarehouseStockOutOrderService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private IPharmacyWarehouseReceiptApprovalService pharmacyWarehouseReceiptApprovalService;
/**
* 出库单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyWarehouseStockOutOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyWarehouseSearchParam 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 pharmacyWarehouseCommonService.getMedicationInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 出库单单据列表
*
* @param stockOutOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 出库单据分页列表
*/
@GetMapping(value = "/stockOut-order-page")
public R<?> getPage(PharmacyWarehouseSearchParam stockOutOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return pharmacyWarehouseCommonService.getPage(stockOutOrderSearchParam, pageNo, pageSize, searchKey, request,
"1", SupplyType.CABINET_STOCKOUT.getValue());
}
/**
* 出库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 出库单单据详情
*/
@GetMapping(value = "/stockOut-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return pharmacyWarehouseStockOutOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyWarehouseStockOutOrderService.getBusNo();
}
/**
* 添加/编辑出库单
*
* @param stockOutOrderDtoList 出库信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-stockOutOrder")
public R<?> addOrEditStockOutOrder(@Validated @RequestBody List<PharmacyWarehouseDetailDto> stockOutOrderDtoList) {
return pharmacyWarehouseStockOutOrderService.addOrEditStockOutOrder(stockOutOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-stockOutOrder")
public R<?> deleteStockOutOrder(@RequestParam String busNo) {
return pharmacyWarehouseCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyWarehouseReceiptApprovalService.requisitionIssueApproved(busNo);
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.pharmacyWarehousemanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.openhis.common.enums.LocationForm;
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.SupplyType;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseStocktakingOrderService;
import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReceiptApprovalService;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 药库盘点单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/pharmacy-warehouse/stocktaking-order")
@Slf4j
public class PharmacyWarehouseStocktakingOrderController {
@Autowired
private IPharmacyWarehouseStocktakingOrderService pharmacyWarehouseStocktakingOrderService;
@Autowired
private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService;
@Autowired
private IPharmacyWarehouseReceiptApprovalService pharmacyWarehouseReceiptApprovalService;
/**
* 盘点单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return pharmacyWarehouseStocktakingOrderService.init();
}
/**
* 获取药品
*
* @param purchaseOrderSearchParam 查询条件
* @return 药品信息
*/
@GetMapping(value = "/medication-info")
public R<?> getMedicationInfo(PharmacyWarehouseSearchParam 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 pharmacyWarehouseCommonService.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(PharmacyWarehouseSearchParam 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 pharmacyWarehouseCommonService.getPage(stocktakingOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.CABINET_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 pharmacyWarehouseStocktakingOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return pharmacyWarehouseStocktakingOrderService.getBusNo();
}
/**
* 添加/编辑盘点单
*
* @param stocktakingOrderDtoList 盘点信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-stocktakingOrder")
public R<?> addOrEditStocktakingOrder(@Validated @RequestBody List<PharmacyWarehouseDetailDto> stocktakingOrderDtoList) {
return pharmacyWarehouseStocktakingOrderService.addOrEditStocktakingOrder(stocktakingOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-stocktakingOrder")
public R<?> deleteStocktakingOrder(@RequestParam String busNo) {
return pharmacyWarehouseCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return pharmacyWarehouseReceiptApprovalService.productStocktakingApproved(busNo);
}
}

View File

@@ -0,0 +1,212 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.pharmacyWarehousemanage.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 lombok.Data;
import lombok.experimental.Accessors;
/**
* 单据详细信息
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class PharmacyWarehouseDetailDto 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;
/** 禁用日期 */
private Date occurrenceTime;
/**
* 单位列表
*/
private List<PharmacyWarehouseDetailDto.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.pharmacyWarehousemanage.dto;
import java.io.Serializable;
import java.math.BigDecimal;
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 PharmacyWarehouseDto 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,140 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.pharmacyWarehousemanage.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 PharmacyWarehouseInitDto implements Serializable {
/**
* 单据号
*/
private String busNo;
/**
* 库房类型列表
*/
private List<PharmacyWarehouseInitDto.WarehouseOption> warehouseTypeOption;
/**
* 库房列表
*/
private List<PharmacyWarehouseInitDto.LongOption> warehouseOption;
/**
* 供应商列表
*/
private List<PharmacyWarehouseInitDto.SupplierOption> supplierOption;
/**
* 人员列表
*/
private List<PharmacyWarehouseInitDto.LongOption> practitionerOption;
/**
* 审批状态
*/
private List<PharmacyWarehouseInitDto.IntegerOption> supplyStatusOptions;
/**
* 单据类型
*/
private List<PharmacyWarehouseInitDto.IntegerOption> supplyTypeOptions;
/**
* 单据分类
*/
private List<PharmacyWarehouseInitDto.IntegerOption> supplyCategoryOptions;
/**
* 包装情况
*/
private List<PharmacyWarehouseInitDto.IntegerOption> packagingConditionOptions;
/**
* 包装情况
*/
private List<PharmacyWarehouseInitDto.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 WarehouseOption {
private Integer value;
private String label;
private List<item> locationOption;
private List<IntegerOption> orderOption;
public WarehouseOption(Integer value, String label,List<item> locationOption,List<IntegerOption> orderOption) {
this.value = value;
this.label = label;
this.locationOption = locationOption;
this.orderOption = orderOption;
}
}
@Data
public static class item {
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
private String name;
}
}

View File

@@ -0,0 +1,121 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.pharmacyWarehousemanage.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 com.openhis.web.common.dto.UnitDto;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 药品信息
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class PharmacyWarehouseMedicationInfoDto 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,58 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.pharmacyWarehousemanage.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 PharmacyWarehouseSearchParam 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.pharmacyWarehousemanage.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.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseMedicationInfoDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
/**
* 药库共通 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyWarehouseCommonMapper {
/**
* 根据供应商获取药品
*
* @param page 分页
* @param queryWrapper 查询条件
* @param locationId 仓库id
* @return 药品信息
*/
Page<PharmacyWarehouseMedicationInfoDto> getMedicationInfo(
@Param("page") Page<PharmacyWarehouseMedicationInfoDto> page,
@Param(Constants.WRAPPER) QueryWrapper<PharmacyWarehouseSearchParam> queryWrapper,
@Param("locationId") Long locationId, @Param("supplierId") Long supplierId);
/**
* 查询订货单分页列表
*
* @param page 分页
* @param queryWrapper 查询条件
* @param originalBusNoFlg 再生成单据号flg
* @param locationFlg 仓库flg
* @return 订货单分页列表
*/
Page<PharmacyWarehouseDto> getPage(@Param("page") Page<PharmacyWarehouseDto> page,
@Param(Constants.WRAPPER) QueryWrapper<PharmacyWarehouseSearchParam> queryWrapper,
@Param("originalBusNoFlg") String originalBusNoFlg, @Param("locationFlg") String locationFlg);
/**
* 查询单据详情
*
* @param page 分页
* @param busNo 单据号
* @return 单据详情
*/
Page<PharmacyWarehouseDetailDto> getDetailPage(@Param("page") Page<PharmacyWarehouseDetailDto> page,
@Param("busNo") String busNo);
}

View File

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

View File

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

View File

@@ -0,0 +1,22 @@
package com.openhis.web.pharmacyWarehousemanage.mapper;
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.pharmacyWarehousemanage.dto.PharmacyWarehouseMedicationInfoDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
/**
* 药库订货单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyWarehousePurchaseOrderMapper {
}

View File

@@ -0,0 +1,23 @@
package com.openhis.web.pharmacyWarehousemanage.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.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseMedicationInfoDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
/**
* 药库进货单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyWarehouseReturnOrderMapper {
}

View File

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

View File

@@ -0,0 +1,23 @@
package com.openhis.web.pharmacyWarehousemanage.mapper;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDto;
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.pharmacyWarehousemanage.dto.PharmacyWarehouseMedicationInfoDto;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
/**
* 药库进货单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface PharmacyWarehouseStockInOrderMapper {
}

View File

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

View File

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