/*
 * Copyright ©2023 CJB-CNIT Team. All rights reserved
 */
package com.openhis.web.reportmanage.mapper;

import java.math.BigDecimal;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.openhis.web.reportmanage.dto.AmountNumberDto;

/**
 * 月末结算报表 mapper
 *
 * @author liuhr
 * @date 2025-07-25
 */
@Repository
public interface MonthlySettlementReportMapper {

    /**
     * 期初，期末金额查询
     *
     * @param locationId 库房名称
     * @param time 时间
     * @return 期初，期末金额查询
     */
    BigDecimal selectAmount(@Param("locationId") Long locationId, @Param("time") String time);

    /**
     * 采购入库查询
     *
     * @param locationId 库房名称
     * @param typeEnum 类型（采购入库:1,）
     * @param agree 单据状态：同意
     * @param completed 事件状态：已完成
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 采购金额单据数查询
     */
    AmountNumberDto selectAmountNumber(@Param("locationId") Long locationId, @Param("typeEnum") Integer typeEnum,
        @Param("agree") Integer agree, @Param("completed") Integer completed, @Param("startTime") String startTime,
        @Param("endTime") String endTime);

    /**
     * 调拨入库查询
     *
     * @param locationId 库房名称
     * @param productTransfer 商品调拨
     * @param productBatchTransfer 商品批量调拨
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 调拨入库金额单据数查询
     */
    AmountNumberDto selectTransferInAmountNumber(@Param("locationId") Long locationId,
        @Param("productTransfer") Integer productTransfer, @Param("productBatchTransfer") Integer productBatchTransfer,
        @Param("agree") Integer agree, @Param("completed") Integer completed, @Param("startTime") String startTime,
        @Param("endTime") String endTime);

    /**
     * 调拨出库查询
     *
     * @param locationId 库房名称
     * @param productTransfer 商品调拨
     * @param productBatchTransfer 商品批量调拨
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 调拨金额单据数查询
     */
    AmountNumberDto selectTransferOutAmountNumber(@Param("locationId") Long locationId,
        @Param("productTransfer") Integer productTransfer, @Param("productBatchTransfer") Integer productBatchTransfer,
        @Param("agree") Integer agree, @Param("completed") Integer completed, @Param("startTime") String startTime,
        @Param("endTime") String endTime);

    /**
     * 盘点查询
     *
     * @param locationId 库房名称
     * @param productStocktaking 商品盘点
     * @param productBatchStocktaking 商品批量盘点
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 盘点金额单据数查询
     */
    AmountNumberDto selectProfitLossAmountNumber(@Param("locationId") Long locationId,
        @Param("productStocktaking") Integer productStocktaking,
        @Param("productBatchStocktaking") Integer productBatchStocktaking, @Param("agree") Integer agree,
        @Param("completed") Integer completed, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 报损查询
     *
     * @param locationId 库房名称
     * @param lossReportForm 报损单
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 报损金额单据数查询
     */
    AmountNumberDto selectLossAmountNumber(@Param("locationId") Long locationId,
        @Param("lossReportForm") Integer lossReportForm, @Param("agree") Integer agree,
        @Param("completed") Integer completed, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 药品耗材发放查询
     *
     * @param locationId 库房名称
     * @param medReqTableName 药品请求
     * @param devReqTableName 耗材请求
     * @param completed 请求状态:已完成
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 药品耗材发放金额查询
     */
    BigDecimal selectDrugIssue(@Param("locationId") Long locationId, @Param("completed") Integer completed,
        @Param("agree") Integer agree, @Param("medReqTableName") String medReqTableName,
        @Param("devReqTableName") String devReqTableName, @Param("startTime") String startTime,
        @Param("endTime") String endTime);

}
