
package com.tmerclub.cloud.delivery.mapper;

import com.tmerclub.cloud.api.delivery.vo.ShopTransportVO;
import com.tmerclub.cloud.common.order.vo.TransfeeFreeVO;
import com.tmerclub.cloud.common.order.vo.TransportVO;
import com.tmerclub.cloud.delivery.dto.TransportDTO;
import com.tmerclub.cloud.delivery.model.Transport;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 运费模板
 *
 * @author tmerclub
 * @date 2020-12-07 15:10:01
 */
public interface TransportMapper {

    /**
     * 获取运费模板列表
     *
     * @param transportDTO
     * @return 运费模板列表
     */
    List<TransportVO> list(@Param("transportDTO") TransportDTO transportDTO);

    /**
     * 保存运费模板
     *
     * @param transport 运费模板
     */
    void save(@Param("transport") Transport transport);

    /**
     * 更新运费模板
     *
     * @param transport 运费模板
     */
    void updateById(@Param("transport") Transport transport);

    /**
     * 根据运费模板id删除运费模板
     *
     * @param transportId
     */
    void deleteById(@Param("transportId") Long transportId);

    /**
     * 根据运费模板id获取运费模板和运费项及对应城市
     *
     * @param transportId 运费模板id
     * @return
     */
    TransportVO getTransportAndTransfeeAndTranscityById(@Param("transportId") Long transportId);

    /**
     * 根据运费模板id获取运费包邮项及对应城市
     *
     * @param transportId 运费模板id
     * @return
     */
    List<TransfeeFreeVO> getTransFeeFreeAndTransCityFreeByTransportId(@Param("transportId") Long transportId);

    /**
     * 根据店铺id获取所有的运费模板列表
     *
     * @param tenantId
     * @param sysType
     * @return
     */
    List<TransportVO> listTransport(@Param("tenantId") Long tenantId, @Param("sysType") Integer sysType);

    /**
     * 统计该运费模板名称使用的数量
     *
     * @param shopId      店铺id
     * @param transName   运费模板名称
     * @param sysType     系统类型
     * @param transportId 运费模板id
     * @return 使用的数量
     */
    int countByTransName(@Param("shopId") Long shopId, @Param("transName") String transName, @Param("sysType") Integer sysType, @Param("transportId") Long transportId);

    /**
     * 统计该店铺下的包邮模板数量
     *
     * @param isFreeFee
     * @param shopId
     * @param sysType
     * @return
     */
    int countByFreeAndShopId(@Param("isFreeFee") Integer isFreeFee,
                             @Param("shopId") Long shopId,
                             @Param("sysType") Integer sysType,
                             @Param("transportId") Long transportId);

    /**
     * 获取运费模板列表
     * @param ids
     * @return
     */
    List<ShopTransportVO> listTransportByIds(@Param("ids") List<Long> ids);
}
