package cn.newfeifan.mall.module.distri.service.ordercalc;

import java.time.LocalDateTime;
import java.util.*;
import javax.validation.*;

import cn.newfeifan.mall.module.distri.controller.admin.ordercalc.vo.*;
import cn.newfeifan.mall.module.distri.dal.dataobject.ordercalc.OrderCalcDO;
import cn.newfeifan.mall.framework.common.pojo.PageResult;
import cn.newfeifan.mall.module.distri.mq.message.order.DistriOrderMessage;

/**
 * 订单产生数据计算 Service 接口
 *
 * @author 非繁人
 */
public interface OrderCalcService {

    /**
     * 创建订单产生数据计算
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createOrderCalc(@Valid OrderCalcSaveReqVO createReqVO);

    /**
     * 更新订单产生数据计算
     *
     * @param updateReqVO 更新信息
     */
    void updateOrderCalc(@Valid OrderCalcSaveReqVO updateReqVO);

    /**
     * 删除订单产生数据计算
     *
     * @param id 编号
     */
    void deleteOrderCalc(Long id);

    /**
     * 获得订单产生数据计算
     *
     * @param id 编号
     * @return 订单产生数据计算
     */
    OrderCalcDO getOrderCalc(Long id);

    /**
     * 获得订单产生数据计算分页
     *
     * @param pageReqVO 分页查询
     * @return 订单产生数据计算分页
     */
    PageResult<OrderCalcDO> getOrderCalcPage(OrderCalcPageReqVO pageReqVO);

    /**
     * 计算订单信息
     * @param tradeOrderDO
     */
    void calc(List<DistriOrderMessage> tradeOrderDO);


    List<OrderCalcDO> queryTodayCalcByUserIds(LocalDateTime todayStart, LocalDateTime todayEnd);

}