package com.iamberry.rent.face.order;

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

import com.iamberry.wechat.core.entity.rent.*;


/**
 * 租赁订单业务接口
 * @company	深圳爱贝源科技有限公司
 * @website www.iamberry.com
 * @author 	献
 * @tel		18271840547
 * @date	2017年3月10日
 */
public interface RentOrderService {

	/**
	 * 根据用户openid，查询已支付但为使用的激活码
	 * @param openId
	 * @return
	 * @author 献
	 * @Time   2017年3月10日
	 */
	List<RentOrderItem> listInitCode(String openId);
	
	/**
     * 根据openid 获取当前用户订单详情
     * 2017年3月10日
     * @author muzx
     * @param rentOrderDTO
     * @return
     */
	Map<String, Object> listRentOrder(RentOrderDTO rentOrderDTO);
    
	/**
	 * 添加租赁订单信息
	 * @param rentOrder
	 * @return
	 */
	Integer insertRentOrderInfo(RentOrder rentOrder);
	
	/**
	 * 批量添加租赁订单项数据
	 * @param list
	 * @return
	 */
	Integer insertRentOrderItemList(List<RentOrderItem> list);
	
	/**
	 * 跟据条件查询一条订单项数据
	 * @param rentOrderItem
	 * @return
	 */
	RentOrderItem getOrderItemByInitCode(RentOrderItem rentOrderItem);
	
	/**
	 * 添加订单和订单项信息
	 * @param rentOrder
	 * @param list
	 * @return
	 */
	Integer insertRentOrderAndItem(RentOrder rentOrder, List<RentOrderItem> list, ServiceCouponInfo couponInfo);
	
	/**
	 * 根据orderid查询租赁订单信息
	 * @param rentOrder
	 * @return
	 */
	RentOrder getRentOrderByOrderId(RentOrder rentOrder);
	
	/**
	 * 根据条件查询租赁订单项列表
	 * @param rentOrderItem
	 * @return
	 */
	List<RentOrderItem> listOrderItem(RentOrderItem rentOrderItem);
	
	/**
     * 修改订单状态
     * @param rentOrder
     * @return
     */
    boolean updateRentOrder(RentOrder rentOrder);
    
	/**
	 * 修改订单和订单项状态
	 * @param rentOrder
	 * @param rentOrderItem
	 * @return
	 */
	boolean updateOrderAndOrderItem(RentOrder rentOrder, RentOrderItem rentOrderItem, ServiceCouponInfo serviceCouponInfo);
	

	/**
     * 根据openid查询订单
     * @param rentOpenid
     * @return
     */
    List<RentOrderItem> getRentOrderByOpenId(String rentOpenid);
    
    /**
     * 将租赁订单推送至百胜
     * @param rentOrderId
     * @param rentOpenId
     * @return
     * @throws Exception
     */
    public boolean addRentOrderToEfast(String rentOrderId, String rentOpenId) throws Exception;
	
	/**
	 * 根据订单id 发货 并添加物流信息
	 * 2017年3月16日
	 * @author muzx
	 * @param rentOrder
	 * @return
	 */
	boolean deliverOrderByOrderId(RentOrder rentOrder);
	
	/**
	 * 根据订单创建时间和状态查询订单信息
	 * @param rentOrder
	 * @return
	 */
	List<RentOrder> listOrderByDeadline(RentOrder rentOrder);
	
	/**
	 * 修改订单，订单项，服务费抵扣券状态
	 * @param orderList
	 * @param couponList
	 * @return
	 */
	boolean updateOrderAndCoupon(List<String> orderList, List<Integer> couponList);
	
	/**
	 * 根据条件查询订单总数
	 * 2017年3月16日
	 * @author muzx
	 * @param rentOrderDto
	 * @return
	 */
	int countRentOrder(RentOrderDTO rentOrderDto);

	/**
	 * 修改租赁订单、订单项状态
	 * 2017年4月25日
	 * @author muzx
	 * @param rentOrder
	 * @return
	 */
	boolean updateOrderStatusAndItemStatus(RentOrder rentOrder );

	/**
	 * 退货
	 * @param rentOrder
	 * @return
	 */
	boolean updateReturnRentOrder(RentOrder rentOrder);

	/**
	 * 租赁订单退货申请
	 * 2017年5月10日
	 * @author muzx
	 * @param rentOrder
	 * @return
	 */
	boolean rentExitOrder(RentOrder rentOrder);
	/**
	 * 租赁订单换货申请
	 * 2017年4月25日
	 * @author muzx
	 * @param rentOrder
	 * @return
	 */
	boolean rentExchangeOrder( RentOrder rentOrder, RentExchangeInfo exchangeInfo);

	/**
	 * 处理租赁订单换货申请
	 * 2017年4月25日
	 * @author muzx
	 * @param order
	 * @return
	 */
	boolean opertionRentExchangeOrder(RentOrder order);

	/**
	 * 根据openid查询订单(押金抵扣卷使用)
	 * @param rentOpenid
	 * @return
	 */
	List<RentOrderItem> selectRentOrderByOpenId(String rentOpenid);

	/**
	 * 新增转账记录
	 * @param accountLogsInfo
	 * @return
	 */
	Integer addTransferRecord(AccountLogsInfo accountLogsInfo);

	/**
	 * 修改订单项
	 * @param rentOrderItem
	 * @return
	 */
	Integer update(RentOrderItem rentOrderItem);

	/**
	 * 后台处理订单退款
	 * 2017年5月8日
	 * @author muzx
	 * @param rentOrder
	 * @return
	 */
	boolean rentReturnMoneyRentOrder(RentOrder rentOrder) throws IllegalArgumentException;

	/**
	 * 修改服务费抵扣券和押金提取券状态
	 * @param serviceId
	 * @param pledgeId
	 * @return
	 */
	boolean updateServiceAndPledge(Integer serviceId, Integer pledgeId);
}
