package com.palmnest.dao.dinner;

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

import com.palmnest.application.bean.Page;
import com.palmnest.application.dto.input.OrderDinnerInputDto;
import com.palmnest.dao.GenericDao;
import com.palmnest.model.dinner.OrderDinner;

public interface OrderDinnerDao extends GenericDao<OrderDinner, Long> {

	/**
	 * 获取该用户创建的订单
	 *
	 * @param consId
	 * @param orgId
	 * @return
	 */
	List<OrderDinner> findByCons(String consId, String orgId, String status);

	/**
	 * PC/WECHAT端获取订餐列表
	 *
	 * @param dto
	 * @return
	 */
	Page findList(OrderDinnerInputDto dto, int pageSize, int pageNo);

	/**
	 * 确认送达后将当天所有有效的订单的状态改成待评价状态
	 *
	 * @param orgId
	 * @return
	 */
	int updateOrderStatus(String orgId, String consId);

	/**
	 * 获取该用户创建的订单
	 *
	 * @param consId
	 * @param orgId
	 * @return
	 */
	List<OrderDinner> findByConsId(String consId, String orgId);

	/**
	 * 获取该项目下第一条数据创建的时间
	 *
	 * @param orgId
	 * @return
	 */
	String getTopCreateTime(String orgId);

	/**
	 * 获取个人订单统计
	 *
	 * @param orgId    项目
	 * @param dateType 1年2季度3月
	 * @param year     年份
	 * @param time     时间【dateType=1时，该字段不需要填，dateType=2时，time的值有1-4个季度，
	 *                 dateType=3时，time的值有1-12个月】
	 * @return
	 */
	List<Map<String, Object>> getConsumerOrderList(String orgId, int dateType, String year, String time);

	/**
	 * 规格数量
	 *
	 * @param orgId    项目
	 * @param dateType 1年2季度3月
	 * @param year     年份
	 * @param time     时间【dateType=1时，该字段不需要填，dateType=2时，time的值有1-4个季度，
	 *                 dateType=3时，time的值有1-12个月】
	 * @return
	 */
	List<Map<String, Object>> getSpecOrderList(String orgId, int dateType, String year, String time);

	/**
	 * 主食数量
	 *
	 * @param orgId    项目
	 * @param dateType 1年2季度3月
	 * @param year     年份
	 * @param time     时间【dateType=1时，该字段不需要填，dateType=2时，time的值有1-4个季度，
	 *                 dateType=3时，time的值有1-12个月】
	 * @return
	 */
	List<Map<String, Object>> getStapleFoodOrderList(String orgId, int dateType, String year, String time);

	/**
	 * 会议餐份数、单品份数、工作餐份数
	 *
	 * @param orgId
	 * @param dateType
	 * @param year
	 * @param time
	 * @return
	 */
	int getMeetCount(String orgId, int dateType, String year, String time, int type);

	/**
	 * 会议餐份数、单品份数、工作餐份数
	 *
	 * @param orgId
	 * @param dateType
	 * @param year
	 * @param time
	 * @return
	 */
	int getMeetCountByDept(String orgId, int dateType, String year, String time, int type, String dept);

	/**
	 * 临时工做餐份数
	 *
	 * @param orgId
	 * @param dateType
	 * @param year
	 * @param time
	 * @param type
	 * @return
	 */
	int getTempFoodCountByDept(String orgId, int dateType, String year, String time, int type, String deptOrComp, int isDept);

	/**
	 * 根据所有部门汇总主食
	 *
	 * @param orgId
	 * @param dateType
	 * @param year
	 * @param time
	 * @return
	 */
	List<Map<String, Object>> getFoodListByDept(String orgId, int dateType, String year, String time);

	/**
	 * 根据所有部门汇总规格
	 *
	 * @param orgId
	 * @param dateType
	 * @param year
	 * @param time
	 * @return
	 */
	List<Map<String, Object>> getSpecListByDept(String orgId, int dateType, String year, String time);

	/**
	 * 该项目下所有有效的订单
	 *
	 * @param orgId
	 * @return
	 */
	List<OrderDinner> getOrderDinnerByOrgId(String orgId, String status);

	/**
	 * 汇总星级评价单数
	 *
	 * @param orgId
	 * @param dateType
	 * @param year
	 * @param time
	 * @return
	 */
	List<Map<String, Object>> getStarOrderList(String orgId, int dateType, String year, String time);

	/**
	 * 获取订单详情根据父级订单id
	 *
	 * @param orderId
	 * @return
	 */
	List<OrderDinner> getOrderInfoByParentOrderId(String orderId, String status);

	/**
	 * 这些项目下所有有效的订单
	 *
	 * @return
	 */
	int updateOrderDinnerByTime(String orgIds, String time);

	/**
	 * 获取订餐下面的所有餐品名字
	 *
	 * @return
	 */
	List<Map<String, Object>> getAllMealName(String orgId);

	List<Map<String, Object>> getUserByAddress(String orgId, String addressId);

	List<Map<String, Object>> getDeptByAddress(String orgId, String addressId);

	/**
	 * 获取餐品排行榜
	 *
	 * @param orgId
	 * @return
	 */
	List<Map<String, Object>> getMealRanking(String orgId);

	/**
	 * 根据地址获取相应地址下领导
	 *
	 * @param orgId
	 * @param addressId
	 * @return
	 */
	List<Map<String, Object>> getUserByOrgAddress(String orgId, String addressId, String addressOrgId);

	/**
	 * 根据用户及餐品id获取餐品相关的下单数量
	 *
	 * @param userId
	 * @param itemId    历史餐品名
	 * @param itemOrgId 现餐品名
	 * @return
	 */
	int getCountByUserAndMeal(String userId, String itemId, String itemOrgId);

	int getCountByUserAndMealFood(String userId, String foodId, String foodOrgId,String date);

	/**
	 * 根据地址获取相应地址下的部门
	 *
	 * @param orgId
	 * @param addressId
	 * @return
	 */
	List<Map<String, Object>> getDeptByOrgAddress(String orgId, String addressId, String addressOrgId,String date);

	/**
	 * 根据部门及餐品id获取餐品相关的下单数量
	 *
	 * @param deptId
	 * @param itemId    历史餐品名
	 * @param itemOrgId 现餐品名
	 * @return
	 */
	int getCountByDeptAndMeal(String deptId, String itemId, String itemOrgId,String date);

	int getCountByDeptAndMealFood(String addressId, String addressOrgId, String deptId, String foodId, String foodOrgId,String date);

	/**
	 * 获取该部门或者用户的订餐情况
	 *
	 * @param orgId
	 * @param userId
	 * @param deptId
	 * @return
	 */
	List<Map<String, Object>> getCountByUserOrDept(String orgId, String userId, String addressId, String addressOrgId, String deptId,String date);

	List<Map<String, Object>> getCountByAddress(String orgId, String addressId, String addressOrgId,String date);

	/**
	 * 获取订餐统计总数、会议餐、普通餐、临时工作餐
	 *
	 * @param dateType 1年2季度3月4周\日
	 * @param date
	 * @param endDate
	 * @return
	 */
	List<Map<String, Object>> getDinnerDataByInfo(String orgId, int dateType, String date, String endDate);

	/**
	 * 获取访客统计 (通行次数、员工通行次数、访客通行次数、二维码通行次数、实体卡通行次数)
	 *
	 * @param orgId
	 * @param dateType
	 * @param date
	 * @param endDate
	 * @return
	 */
	List<Map<String, Object>> getVisitorDataByInfo(String orgId, int dateType, String date, String endDate);

	/**
	 * 平台活跃度统计
	 *
	 * @param orgId
	 * @param dateType
	 * @param date
	 * @param endDate
	 * @return
	 */
	List<Map<String, Object>> getPlatformDataByInfo(String orgId, int dateType, String date, String endDate);

	/**
	 * 获取条件下相应项目的相应人数
	 *
	 * @param orgId
	 * @return
	 */
	List<Map<String, Object>> getOrgUser(String orgId, int dateType, String date, String endDate);

	/**
	 * 新增用户统计
	 *
	 * @param orgId
	 * @param dateType
	 * @param date
	 * @param endDate
	 * @return
	 */
	List<Map<String, Object>> getUserDataByInfo(String orgId, int dateType, String date, String endDate);
}
