版本更新
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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));
|
||||
// }
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
// }
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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() {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user