package com.palmnest.dao.estateserve;

import com.palmnest.application.bean.Page;
import com.palmnest.dao.GenericDao;
import com.palmnest.model.estateserve.FaceProjectInfo;
import com.palmnest.model.estateserve.UserImageInfo;
import com.palmnest.model.estateserve.VisitorInfo;
import com.palmnest.model.estateserve.VisitorOrder;

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

/**
 * 访客模块 Dao
 *
 * @author HJY
 */
public interface VisitorInFoDao extends GenericDao<Object, Integer> {

	/**
	 * 获取来访时间最大的自增值
	 *
	 * @return
	 */
	public Integer getVisitorCodeMaxCount(String visitorStartTime);

	/**
	 * 根据时间获取当前对象
	 *
	 * @param visitorStartTime
	 * @return
	 */
	public Map<String, Object> getVisitorCode(String visitorStartTime);

	/**
	 * 根据主键ID 查询该访客的信息
	 *
	 * @param visitorId
	 * @return
	 */
	public Map<String, Object> getVistorInfo(String visitorId);

	/**
	 * 根据预约单ID查询同行的人数
	 *
	 * @param visitorOrderId
	 * @return
	 */
	public Integer getVistorInfoCount(String visitorOrderId);

	/**
	 * 根据主键ID 查询访客信息
	 *
	 * @param visitorId
	 * @return
	 */
	public VisitorInfo getVisitorInfo(String visitorId);

	/**
	 * 根据预订单主键ID查询预订单信息
	 *
	 * @param visitorOrderId
	 * @return
	 */
	public VisitorOrder getVisitorOrder(Integer visitorOrderId);

	/**
	 * 根据订单ID 查询人数
	 *
	 * @param visitorOrderId
	 * @return
	 */
	public List<VisitorInfo> getVisitorInfoList(Integer visitorOrderId);

	/**
	 * 根据用户ID查询 图片
	 *
	 * @param userId
	 * @return
	 */
	public UserImageInfo getUserImageInfo(Integer userId);

	/**
	 * 根据员工的openId 查询 该员工预约单日期的集合
	 *
	 * @param openId
	 * @return
	 */
	public List<Map<String, Object>> getVisitorTime(String openId, String userType);

	/**
	 * 根据日期查询 该时间段下的预约单
	 *
	 * @param dateTime
	 * @return
	 */
	public List<Map<String, Object>> getVisitorList(String dateTime, String openId, String userType);

	/**
	 * 根据访客openId和标识查询 访客填写信息
	 *
	 * @param visitorOpenId
	 * @param visitorIdentification
	 * @return
	 */
	public VisitorInfo getVisitorInfo(String visitorOpenId, String visitorIdentification);

	/**
	 * 查询预约记录单
	 *
	 * @return
	 */
	public Page getVisitorOrderInfoList(Map<String, String> params, String orgIdS, Integer pageNo);
	
	public List<Map<String, Object>> expVisitorOrderInfoList(Map<String, String> params, String orgIdS);

	/**
	 * 根据用户ID查询 图片
	 *
	 * @param userId
	 * @return
	 */
	public List<UserImageInfo> getUserImageInfo(Integer userId, String type);

	/**
	 * 删除用户底库头像信息
	 *
	 * @param userId 用户ID
	 * @param type   类型 （1-员工，2-访客）
	 */
	public void deleteUserImageInfoByUserId(Integer userId, String type);

	/**
	 * 更新用户底库头像信息
	 *
	 * @param userId 用户ID
	 * @param type   类型 （1-员工，2-访客）
	 */
	public void updateUserImageInfoByUserId(Integer userId, String type);

	/**
	 * 根据图片唯一ID查询 图片
	 *
	 * @param imageUrlId
	 * @return
	 */
	public UserImageInfo getUserImageInfoById(Integer imageUrlId);

	/**
	 * 根据访客openId 检索最近提交信息
	 *
	 * @param visitorOpenId
	 * @return
	 */
	public VisitorInfo getVisItorInfo(String visitorOpenId);

	/**
	 * 根据项目或企业ID和类型查询相对应的授权账号信息
	 *
	 * @param projectId 项目或企业ID
	 * @param type      1-项目，2企业
	 * @return
	 */
	public FaceProjectInfo getFaceProjectInfo(Integer projectId, String type);

	/**
	 * 根据项目或企业ID和类型查询相对应的授权账号信息
	 *
	 * @param projectId 项目或企业ID
	 * @param type      1-项目，2企业
	 * @return
	 */
	public List<FaceProjectInfo> getFaceProjectInfoList();

	/**
	 * @param qrcodeKey
	 * @return
	 */
	public VisitorOrder getOrderByQrcodeKey(String qrcodeKey);

	VisitorInfo getLastVisitorInfoByMobile(String telephone);

	VisitorInfo getVisitorInfoByQrCode(String qrCode);
	
	public VisitorOrder getOrderByLingLingId(String linglingId);

	void updateVisitorOrder(Integer orderId,String linglingId,String qrcodeKey,Integer codeId);
}
