package com.palmnest.service.dinner.manager;

import com.palmnest.application.bean.Page;
import com.palmnest.application.dto.MeetintDto;
import com.palmnest.application.dto.input.OrderDinnerInputDto;
import com.palmnest.model.dinner.MealCar;
import com.palmnest.model.dinner.OrderDinner;
import com.palmnest.service.GenericManager;

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

public interface OrderDinnerManager extends GenericManager<OrderDinner, Long> {
	/**
	 * 根据当前登录用户获取购物车的餐品
	 * 该方法获取的是封装好的标注了餐品是有效还是无效的
	 *
	 * @param consId
	 * @return
	 */
	List<MealCar> delMealCarByConsId(String consId);

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

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

	/**
	 * 确认送达后将当天所有有效的订单的状态改成待评价状态
	 *
	 * @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
	 * @param time
	 * @return
	 */
	List<Map<String, Object>> getSumOrder(String orgId, int dateType, String year, String time);

	/**
	 * 汇总个人餐品情况
	 *
	 * @param orgId
	 * @param dateType
	 * @param year
	 * @param time
	 * @return
	 */
	List<Map<String, Object>> getConsOrderList(String orgId, int dateType, String year, String time);

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

	/**
	 * 汇总部门
	 *
	 * @param orgId
	 * @param dateType
	 * @param year
	 * @param time
	 * @return
	 */
	List<Map<String, Object>> getDeptOrderList(String orgId, int dateType, String year, String time);

	List<OrderDinner> getOrderDinnerByParentOrderId(String parentId, String status);

	/**
	 * 获取系统时间大于数据字典中查询的时间，然后返回数据字典中设置的值
	 * 系统时间如果小于数据字典中设置的时间，返回空字符串
	 *
	 * @param elName
	 * @return
	 */
	String getOrderTime(String orgId, String elName);

	int isOver(String orgId, String elName);

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

	String getOrderTimeStr(String orgId, String elName);

	List<Map<String, Object>> getAllMealName(String orgId);

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

	/**
	 * 导出excel
	 *
	 * @param orgId
	 * @return
	 */
	List<Map<String, Object>> exportByAddress(String orgId,String date);

	String[] getTitles(List<Map<String, Object>> mapList, String[] arr, int type);

	/**
	 * 获取订餐统计总数、会议餐、普通餐、临时工作餐
	 *
	 * @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, String dateString);

	/**
	 * 获取会意识统计数据
	 *
	 * @param orgId
	 * @param dateType
	 * @param date
	 * @param endDate
	 * @return
	 */
	List<MeetintDto> getMeetingInfoList(String orgId, int dateType, String date, String endDate);
}
