package com.iamberry.wechat.face.drp;

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

import com.iamberry.wechat.core.entity.PageBean;
import com.iamberry.wechat.core.entity.PaperBean;
import com.iamberry.wechat.core.entity.ResultMsg;
import com.iamberry.wechat.core.entity.drp.ApplyPlaceLogs;
import com.iamberry.wechat.core.entity.drp.ApplyUserInfo;
import com.iamberry.wechat.core.entity.drp.PlaceInfo;
import com.iamberry.wechat.core.entity.order.ProbationOrderDto;
import com.iamberry.wechat.tools.ResponseJson;


/**
 * 
 * @author 欧阳明
 * @Description: 代理者信息服务-业务处理
 * @Date:2016年4月19日
 *
 */
public interface PlaceInfoService {

	/**
	 * 新增一个商户	(实现类有其他代码)
	 * @param placeInfo
	 * @return
	 */
	public ResultMsg addOne(PlaceInfo placeInfo);
	
	/**
	 * 新增一个分销商
	 * @param placeInfo
	 * @return
	 */
	public ResultMsg update(PlaceInfo placeInfo);
		
	/**
	 * 通过id 获取单个分销商的详情
	 */
	public PlaceInfo getPlaceInfoById(int id);
	
	/**
	 * 通过openid 获取单个分销商的详情
	 */
	public PlaceInfo getPlaceInfoByOpenId(String openid);
	
	/**
	 * 	通过placeInfo获取placeInfo对象
	 * @param placeInfo
	 * @return
	 */
	public PlaceInfo getOnePlaceInfoByInitcode(PlaceInfo placeInfo);
	
	/**
	 * 获取所有使用中的商户  (用在添加商户时搜索父级)
	 * 支持模糊条件查询：name userName roleId tel userNickname placePid
	 * 				supperId parentName
	 * 根据 place_create_date降序	分页
	 */
	public Map<String, Object> SearchPlaceInfo(PlaceInfo placeInfo);
	
	/**
	 * 分页综合查询
	 * @param page
	 * @return
	 */
	public Map SearchPlaceInfoPage(PageBean page);
	
	/**
	 * 根据用户openid，获取对应的代理商信息
	 */
	public Integer selectPlaceIdByOpenId(String openId);
	
	/**
	 * 查询分销信息用于下载
	 * @param map
	 * @return
	 */
	public List<PlaceInfo> selectPlaceInfosForDownLoad(Map map);
	
	/**
	 * 批量更新分銷商信息
	 * @param placeInfos
	 * @return
	 */
	public int batchUpdate(List<PlaceInfo> placeInfos);
	
	/**
	 * 根据条件获取placeId
	 * @param placeInfo
	 * @return
	 */
	public List<PlaceInfo> getPlaceId(PlaceInfo placeInfo);

	/**
	 * 获取某一页的代理商申请修改信息记录
	 * @param bean
	 * @return
	 */
	public List<ApplyPlaceLogs> selectApplyPlaceLogs(int pageNO, int pageSize);

	/**
	 * 获取待处理的申请记录总条数
	 * @return
	 */
	public int getCount(int pageSize);

	/**
	 * 根据applyID更新信息
	 * @param applyID
	 * @return
	 */
	public int updateApplyStatus(ApplyPlaceLogs logs);
	
	/**
	 * 获取某一个用户的最近申请记录
	 * @param placeID
	 * @return
	 */
	public ApplyPlaceLogs selectApplyLogsByPlaceID(Integer placeID);
	
	/**
	 * 根据openid获取某一个用户的最近申请记录
	 * @param placeID
	 * @return
	 */
	public ApplyPlaceLogs selectApplyLogsByOpenID(String openID);
	
	/**
	 * 根据id，处理申请,后台
	 * @param applyID
	 * @param status
	 * @return
	 */
	public boolean handlerApplyLogs(Integer applyID, Integer status);
	
	/**
	 * 根据openid，处理商户是否需要完善信息
	 * @param openID
	 * @return
	 */
	public ResponseJson handlerPlaceInfo(String openID);
	
	/**
	 * 添加申请更新信息的处理
	 * @param applyPlaceLogs
	 * @return
	 */
	public ResponseJson addApplyPlaceLogs(ApplyPlaceLogs applyPlaceLogs);
	
	/**
	 * 根据openid获取一个正在使用的商户的信息(详情页面、修改页面)
	 * 2016年10月10日
	 * @param openid
	 * @return
	 */
	public ResponseJson selectPlaceInfoDetailByOpenId(String openid);
	
	/**
	 * 根据code，获取代理信息（ID）
	 * @param code
	 * @return
	 */
	public PlaceInfo selectOnePlaceInfoByCode(String code);
	
	/**
	 * 修改代理商的openid
	 * @param info
	 * @return
	 */
	public Integer updateOpenidById(PlaceInfo info);
	
	/**
	 * 添加申请代理信息
	 * @param info
	 * @return
	 */
	public Integer addApplyAgent(ApplyUserInfo applyUserInfo);
	
	/**
	 * 查询是否已存在申请代理信息
	 * @param info
	 * @return
	 */
	public Integer selectApplyAgentByTel(String userTel);
	
	/**
	 * 查询申请记录信息
	 * @param info
	 * @return
	 */
	public List<ApplyUserInfo> getApplyAgentList(ApplyUserInfo applyUserInfo);
	
	/**
	 * 查询申请记录信息条数
	 * @param info
	 * @return
	 */
	public Integer getApplyAgentCount(ApplyUserInfo applyUserInfo);
	
	/**
	 * 通过placepids查询商户信息
	 * @param placePids
	 * @return
	 */
	public PlaceInfo selectPlaceByPlacePids(Integer placePids);
	
	/**
	 * 查询VIP会员和金牌会员下线试用订单列表
	 * @param openId
	 * @return
	 */
	public List<ProbationOrderDto> selectVipProbationList(ProbationOrderDto probationOrderDto);
	
	/**
	 * 查询门店和钻石会员下线试用订单列表
	 * @param openId
	 * @return
	 */
	public List<ProbationOrderDto> selectStoreProbationList(ProbationOrderDto probationOrderDto);
	
	/**
	 * 查询合伙人下线试用订单列表
	 * @param openId
	 * @return
	 */
	public List<ProbationOrderDto> selectPartnerProbationList(ProbationOrderDto probationOrderDto);
	
	/**
	 * 查询VIP会员和金牌会员下线试用订单数量
	 * @param openId
	 * @return
	 */
	public Integer selectVipProbationNum(String openId);
	
	/**
	 * 查询门店和钻石会员下线试用订单数量
	 * @param openId
	 * @return
	 */
	public Integer selectStoreProbationNum(String openId);
	
	/**
	 * 查询合伙人下线试用订单数量
	 * @param openId
	 * @return
	 */
	public Integer selectPartnerProbationNum(String openId);
}
