package com.palmnest.service.dinner.service;

import com.palmnest.application.bean.AppResultDto;
import com.palmnest.application.bean.Page;
import com.palmnest.application.dto.WebPageResultDto;
import com.palmnest.application.dto.WeekMealCarDto;
import com.palmnest.application.dto.input.MealCarInputDto;
import com.palmnest.application.dto.input.OrderDinnerInputDto;
import com.palmnest.model.dinner.OrderDinner;

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

public interface OrderDinnerService {
	/**
	 * 加入购物车
	 *
	 * @param carDto
	 * @return
	 */
	AppResultDto joinMealCar(List<MealCarInputDto> carDto, List<MealCarInputDto> removeCarDto, String orgId, String openId);

	/**
	 * 删除数量或清除购物车
	 *
	 * @param openId                 操作用户
	 * @param id(会议餐会减少数量，账号的餐是直接删除)
	 * @param type
	 * @return
	 */
	AppResultDto removeMealCar(String orgId, String openId, String id, int type);

	/**
	 * 提交订单
	 *
	 * @param openId
	 * @param orgId
	 * @return
	 */
	AppResultDto submitDinnerOrder(String openId, String orgId, List<WeekMealCarDto> list);

	/**
	 * 获取购物车
	 *
	 * @param openId
	 * @return
	 */
	AppResultDto gainMealCarList(String orgId, String openId, int isOver);

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

	/**
	 * 获取订单详情
	 *
	 * @param id
	 * @return
	 */
	AppResultDto findById(Long id);

	/**
	 * 获取订单
	 *
	 * @param id
	 * @return
	 */
	OrderDinner getById(Long id);

	/**
	 * 取消订单
	 *
	 * @param id
	 * @return
	 */
	AppResultDto cancelOrderDinner(Long id, String openId, String orgId);

	/**
	 * 获取当天下的所有的订单详情列表
	 *
	 * @param orgId
	 * @return
	 */
	AppResultDto getAllOrderInfo(String orgId, String openId);

	/**
	 * 确认订单
	 *
	 * @param orgId
	 * @param openId
	 * @return
	 */
	AppResultDto confirmService(String orgId, String openId);

	/**
	 * 导出今日订餐汇总
	 *
	 * @param orgId
	 * @return
	 */
	AppResultDto exportExcel(String orgId);

	/**
	 * 评价后修改订单表的星级字段
	 *
	 * @param id
	 * @param star
	 * @param consId
	 * @return
	 */
	String updateOrderByStar(Long id, int star, String consId);

	/**
	 * 统计数据
	 *
	 * @param orgId    项目
	 * @param type     数据类型  1订餐统计2评价统计3部门统计4个人统计5性别统计
	 * @param dateType 统计周期
	 * @param time
	 * @return
	 */
	WebPageResultDto getDataStatistics(String orgId, int type, int dateType, String year, String time, int operationType, int pageSize, int pageNo);

	/**
	 * 获取该项目下最开始新增数据的创建时间
	 *
	 * @param orgId
	 * @return
	 */
	String getTopCreateTime(String orgId);

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

	/**
	 * 推送客服消息(确认餐品已送达)
	 *
	 * @param orgId
	 */
	void sendWechatMessage(String orgId, List<OrderDinner> list);

	/**
	 * 获取该用户所有的购物车数量
	 *
	 * @param userId
	 * @param orgId
	 * @return
	 */
	int getMealCarList(String userId, String orgId);

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

	/**
	 * 获取该用户下购物车中相应时间下相应餐品的数量
	 *
	 * @param orgId
	 * @param userId
	 * @param time
	 * @param mealId
	 * @return
	 */
	int getMealCarCountByMealId(String orgId, String userId, String time, String mealId);

	/**
	 * 提交临时工作餐
	 *
	 * @param parement
	 * @return
	 */
	AppResultDto submitTempOrder(Map<String, Object> parement);

	/**
	 * 餐品排行榜
	 *
	 * @param orgId
	 * @return
	 */
	AppResultDto getMealRanking(String orgId);

	String setPath(String fileName);

	void getOrderInfoTask(String orgId);

	void getOrderInfoTask2(String orgId,String sysDate);
}
