package com.ssj.service.sys.fx.service;

import java.util.List;
import java.util.Map;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.ssj.bean.sys.fx.domain.Merchant;
import com.ssj.framework.core.common.service.BaseService;

public interface MerchantService extends BaseService<Merchant, String> {
	
	//导入商户数据，生成帐号
	String importMerchants(List<Merchant> list,Map<String,String> password);
	
	//绑定微信用户
	boolean bindingMerchantByUser(String userId,String posCode,String password);
	
	//posCode得到商户
	Merchant getMerchantByPosCode(String posCode);
	
	//libId得到商户
	Merchant getMerchantByLibId(String libId);
	
	//ParentPosCode得到商户
	List<Merchant> getMerchantByParentPosCode(String ParentPosCode);
	
	//orgCode得到商户
	List<Merchant> getMerchantByLikeOrgCode(String orgCode);
	
	//posCode得到商户
	List<Merchant> getMerchantByLikePosCode(String posCode);
	
	//所有商户
	List<Merchant> findMerchantByPage();
	
	//imei范围查询
	Page<Merchant> findMerchantByPage(Map<String, Object> params, Pageable sp);
	
	//没有上级的商户，并且不为SSJ-FX的
	List<Merchant> findMerchantByNotParent();
	
	/**
	 * 2020年1月14日16:48:39
	 *  分配学币  上下级分配
	 */
	void allotByMerchant(String fromMerchant,String toMerchant,Integer num,Integer type);
	
	/**
	 * 2020年1月14日16:48:39
	 *   自营  结算扣币定时任务
	 */
	void runSummaryByMerchant();
	
	/**
	 * 2020年1月14日16:48:39
	 *   代理  结算扣币定时任务
	 */
	void runSummaryByMerchant_Agent();
	
	/**
	 * 2020年4月8日15:34:17
	 * 新版_扣币定时任务
	 */
	void runSummaryByMerchant_new();
	
	/**
	 * 2020年2月11日14:57:45
	 * 同步学币数量
	 * 商户表 -> 机构表
	 */
	void syncMerchantByLibJoin(String merchantId);

	/**
	 * 2020年2月11日14:57:45
	 * 同步学币数量
	 * 机构表 -> 商户表
	 */
	void syncLibJoinByMerchant(String libId);
	
	/**
	 * 异常记录保存操作的
	 * @param userId
	 * @param id
	 */
	void syncRecordByMerchant(String loginName,String id,String ip,String title);
	
    /**
	 * 上一结算日，机构是否正常扣币，如果不正常，表示结算扣币不足，禁止校长端手动添加服务。
	 * @param libId
	 * @return
	 * true 正常
	 * false 不正常
	 */
	boolean isBuckleLibServiceByLibId(String libId);
	
	/**
	 * 查出所有上级，列表中排序返回，上级--》上上级--》上上上级--》....。直到总部的”广州指点商户“的下级为终点。
	 * @param parentMerchants
	 * @param merchant
	 */
	void findParentMerchantList(List<Merchant> parentMerchants,Merchant merchant);
	
	/**
	 * 计算并设置更新所有的上下级的结算时间
	 * @param merchant
	 */
	void computeMerchantSummaryTime(Merchant merchant);
	
	/**
	 * 计算并设置更新所有的上下级的结算时间
	 * @param merchant
	 */
	void updateSubMerchantSummaryTime(Merchant merchant);
	
	
	//通过vipId查出这个绑定机构对应的商户
	Merchant getMerchantByVipId(String vipId);
	
	boolean unboundVipIdByLibIdToRedis(String vipId,String libId);
	//通过vipId查出这个绑定机构对应的商户,两个月内绑定的商户
	Merchant getDefaultMerchantByVipId(String vipId);
	


}
