package com.sckw.contract.api;

import com.sckw.contract.api.model.dto.res.*;
import com.sckw.contract.api.model.vo.TradeContractGoodsDto;
import com.sckw.contract.api.model.vo.TradeContractResDto;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * @author czh
 * @desc 合同远程接口
 * @date 2023/7/19
 */
public interface RemoteContractService {

    /**
     * @param contractId 合同id集合
     * @return Map<Long, ContractCommonInfoResDto>
     * @desc: 查合同基本信息
     * @author: czh
     * @date: 2023/7/20
     */
    Map<Long, ContractCommonInfoResDto> queryContractBaseInfo(List<Long> contractId);

    /**
     * @param contractId 合同id  performedAmount履约量
     * @desc: 更新已履约量
     * @author: czh
     * @date: 2023/8/31
     */
    void updatePerformed(Long contractId, BigDecimal performedAmount);

    /**
     * @param entId 企业id
     * @return Map<Integer, Integer>
     * @desc: 根据企业id统计企业下的有效合同个数
     * @author: czh
     * @date: 2023/9/8
     */
    Map<Integer, Integer> queryContractValidCount(Long entId, List<Long> enterpriseIds);


    /**
     * @param contractNo
     * @param acceptId   承运企业id
     * @param consignId  托运企业id
     * @return
     */
    ContractLogisticsOrderResDto getContractByContractNo(String contractNo, Long acceptId, Long consignId);

    /**
     * 根据贸易合同id查询物流合同信息
     *
     * @param tradeOrderContractId 贸易合同id
     * @return 贸易合同和物流合同信息
     */
    ContractLogisticsAndTradeOrderResDto queryContractByContractId(Long tradeOrderContractId, Long tradeId);

    /**
     * 查询贸易合同
     *
     * @param tradeContractId
     * @return
     */
    TradeContractResDto queryTradeContract(Long tradeContractId, Long goodsId);

    /**
     * 查询最新的签约合同
     *
     * @param entId   买方企业
     * @param goodsId
     * @return
     */
    TradeContractGoodsDto queryTradeContractNew(Long entId, Long goodsId, LocalDateTime time);

    /**
     * 查询物流合同信息
     */
    List<ContractLogisticsOrderResDto> queryContractLogisticsOrder(LogisticsOrderDto logisticsOrderDto);

    /**
     * 查询贸易合同信息
     */
    List<ContractTradeOrderInfo> queryContractTradeOrder(ContractTradeOrderDto contractTradeOrderDto);
}
