package com.jsowell.pile.service;

import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.dto.IndexQueryDTO;
import com.jsowell.pile.dto.QueryPileDTO;
import com.jsowell.pile.dto.ReplaceMerchantStationDTO;
import com.jsowell.pile.vo.base.PileInfoVO;
import com.jsowell.pile.vo.uniapp.PersonalPileInfoVO;
import com.jsowell.pile.vo.uniapp.PileConnectorDetailVO;
import com.jsowell.pile.vo.web.IndexGeneralSituationVO;
import com.jsowell.pile.vo.web.PileDetailVO;

import java.util.List;

/**
 * 设备管理Service接口
 *
 * @author jsowell
 * @date 2022-08-26
 */
public interface IPileBasicInfoService {
	/**
	 * 查询设备管理
	 *
	 * @param id 设备管理主键
	 * @return 设备管理
	 */
	PileBasicInfo selectPileBasicInfoById(Long id);

	PileBasicInfo selectPileBasicInfoBySN(String pileSn);

	/**
	 * 查询设备管理列表
	 *
	 * @param pileBasicInfo 设备管理
	 * @return 设备管理集合
	 */
	List<PileBasicInfo> selectPileBasicInfoList(PileBasicInfo pileBasicInfo);

	/**
	 * 新增设备管理
	 *
	 * @param pileBasicInfo 设备管理
	 * @return 结果
	 */
	int insertPileBasicInfo(PileBasicInfo pileBasicInfo);

	/**
	 * 修改设备管理
	 *
	 * @param pileBasicInfo 设备管理
	 * @return 结果
	 */
	int updatePileBasicInfo(PileBasicInfo pileBasicInfo);

	/**
	 * 批量删除设备管理
	 *
	 * @param ids 需要删除的设备管理主键集合
	 * @return 结果
	 */
	int deletePileBasicInfoByIds(Long[] ids);

	/**
	 * 删除设备管理信息
	 *
	 * @param id 设备管理主键
	 * @return 结果
	 */
	int deletePileBasicInfoById(Long id);

	/**
	 * 查询列表
	 */
	List<PileDetailVO> queryPileInfos(QueryPileDTO dto);

	List<PileDetailVO> queryPileInfoList(QueryPileDTO queryPileDTO);

	/**
	 * 通过pileId更改运营商、站点信息
	 *
	 * @param dto 前台参数
	 * @return 结果
	 */
	int replaceMerchantStationByPileIds(ReplaceMerchantStationDTO dto);

	/**
	 * 通过桩id查询basic信息
	 *
	 * @param id 桩id
	 * @return 结果集合
	 */
	PileDetailVO selectBasicInfoById(Long id);

	PileInfoVO selectPileInfoBySn(String pileSn);

	/**
	 * 通过站点id查询桩集合
	 *
	 * @param stationIdList 站点id
	 * @return 桩集合
	 */
	List<PileDetailVO> selectPileListByStationIds(List<Long> stationIdList);

	/**
	 * 通过桩编号查询站点id
	 * @param sn 桩编号
	 * @return 站点id
	 */
	// String selectStationIdBySn(String sn);

	/**
	 * uniApp通过桩号查询桩详情
	 * @param pileSn 桩号
	 * @return
	 */
	// PileDetailVO uniAppGetPileDetailByPileSn(String pileSn);

	/**
	 * 修改状态
	 * @param frameType
	 * @param pileSn
	 * @param connectorCode
	 * @param status
	 * @param putGunType
	 */
	void updateStatus(String frameType, String pileSn, String connectorCode, String status, String putGunType);

	/**
	 * 充电时保存实时数据到redis
	 * @param realTimeMonitorData 实时数据
	 */
	void saveRealTimeMonitorData2Redis(RealTimeMonitorData realTimeMonitorData);

	PileConnectorDetailVO queryPileConnectorDetail(String pileConnectorCode);

	String getPileQrCodeUrl(String pileSn);

	// 更新充电桩的sim卡信息
	void updatePileSimInfo(String pileSn, String iccid);


	/**
	 * 后管首页基本信息查询
	 *
	 * @param dto 站点Id
	 * @return 首页基本信息
	 */
	public IndexGeneralSituationVO getGeneralSituation(IndexQueryDTO dto);

	/**
	 * 通过会员id查询个人桩列表
	 * @param memberId
	 * @return
	 */
	List<PersonalPileInfoVO> getPileInfoByMemberId(String memberId);

	/**
	 * 联联平台用，通过站点id查询桩列表信息
	 * @param stationId
	 * @return
	 */
	List<PileBasicInfo> getPileListByStationId(String stationId);
}
