package com.jsowell.pile.mapper;

import com.jsowell.pile.domain.PileBillingDetail;
import com.jsowell.pile.domain.PileBillingRelation;
import com.jsowell.pile.domain.PileBillingTemplate;
import com.jsowell.pile.vo.web.BillingTemplateVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 计费模板Mapper接口
 *
 * @author jsowell
 * @date 2022-09-20
 */
@Repository
public interface PileBillingTemplateMapper {
	/**
	 * 查询计费模板
	 *
	 * @param id 计费模板主键
	 * @return 计费模板
	 */
	public PileBillingTemplate selectPileBillingTemplateById(Long id);

	/**
	 * 查询计费模板列表
	 *
	 * @param pileBillingTemplate 计费模板
	 * @return 计费模板集合
	 */
	public List<PileBillingTemplate> selectPileBillingTemplateList(PileBillingTemplate pileBillingTemplate);

	/**
	 * 新增计费模板
	 *
	 * @param pileBillingTemplate 计费模板
	 * @return 结果
	 */
	public int insertPileBillingTemplate(PileBillingTemplate pileBillingTemplate);

	/**
	 * 修改计费模板
	 *
	 * @param pileBillingTemplate 计费模板
	 * @return 结果
	 */
	public int updatePileBillingTemplate(PileBillingTemplate pileBillingTemplate);

	/**
	 * 删除计费模板
	 *
	 * @param id 计费模板主键
	 * @return 结果
	 */
	public int deletePileBillingTemplateById(Long id);

	/**
	 * 批量删除计费模板
	 *
	 * @param ids 需要删除的数据主键集合
	 * @return 结果
	 */
	public int deletePileBillingTemplateByIds(Long[] ids);

	/**
	 * 批量删除计费模板详情
	 *
	 * @param templateCodes 需要删除的templateCode集合
	 * @return 结果
	 */
	public int deletePileBillingDetailByTemplateCodes(@Param("templateCodes") List<String> templateCodes);

	/**
	 * 批量新增计费模板详情
	 *
	 * @param pileBillingDetailList 计费模板详情列表
	 * @return 结果
	 */
	public int batchPileBillingDetail(List<PileBillingDetail> pileBillingDetailList);


	/**
	 * 通过计费模板主键删除计费模板详情信息
	 *
	 * @param templateCode 计费模板code
	 * @return 结果
	 */
	public int deletePileBillingDetailByTemplateCode(String templateCode);

	/**
	 * 查询公共计费模板列表
	 * @return
	 */
	List<BillingTemplateVO> queryPublicBillingTemplateList();

	/**
	 * 根据站点id查询站点计费模板列表
	 * 根据发布时间倒序，最新一条就是目前正在使用的计费模板
	 * @param stationId 站点id
	 * @return
	 */
	List<BillingTemplateVO> queryStationBillingTemplateList(@Param("stationId") String stationId,
															@Param("stationDeptIds") List<String> stationDeptIds);

	/**
	 * 根据站点id查询站点计费模板列表
	 * 根据发布时间倒序，最新一条就是目前正在使用的计费模板
	 * @param stationId 站点id
	 * @return
	 */
	List<BillingTemplateVO> queryStationBillingTemplateListForUniApp(@Param("stationId") String stationId);

	/**
	 * 通过桩sn号查询计费模板
	 *
	 * @param pileSn 桩sn
	 * @return 计费模板编号
	 */
	BillingTemplateVO selectBillingTemplateByPileSn(@Param("pileSn") String pileSn);

	/**
	 * 通过计费模板id查询
	 * @param templateId 计费模板id
	 * @return
	 */
	BillingTemplateVO selectBillingTemplateByTemplateId(@Param("templateId") String templateId);

	/**
	 * 查询站点最新发布的计费模板
	 * @param stationId
	 * @return
	 */
	BillingTemplateVO selectBillingTemplateByStationId(@Param("stationId") String stationId);

	/**
	 * 通过模板id查询计费模板详情列表
	 */
	List<PileBillingDetail> queryBillingDetailByTemplateIds(@Param("templateIds") Long[] templateIds);

	/**
	 * 插入充电桩和计费模板关系
	 */
	void insertPileBillingRelation(List<PileBillingRelation> relationList);

	/**
	 * 根据桩号删除计费模板关系
	 * @param pileSnList
	 */
	void deleteRelationByPileSn(@Param("pileSnList") List<String> pileSnList);
}
