package com.yc.ship.module.trade.dal.mysql.bill;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
import com.yc.ship.module.trade.controller.admin.bill.vo.BillPageReqVO;
import com.yc.ship.module.trade.controller.admin.bill.vo.BillRespVO;
import com.yc.ship.module.trade.controller.admin.bill.vo.BillSaveReqVO;
import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeDetailRespVO;
import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderPageReqVO;
import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespVO;
import com.yc.ship.module.trade.dal.dataobject.bill.BillDO;
import com.yc.ship.module.trade.dal.dataobject.bill.BillStoreDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 旅行社账单 Mapper
 *
 * @author 管理员
 */
@Mapper
public interface BillMapper extends BaseMapperX<BillDO> {

    default PageResult<BillDO> selectPage(BillPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<BillDO>()
                .eqIfPresent(BillDO::getBillStatus, reqVO.getBillStatus())
                .eqIfPresent(BillDO::getOrderNum, reqVO.getOrderNum())
                .eqIfPresent(BillDO::getOperatorId, reqVO.getOperatorId())
                .likeIfPresent(BillDO::getOperatorName, reqVO.getOperatorName())
                .eqIfPresent(BillDO::getSellAmount, reqVO.getSellAmount())
                .eqIfPresent(BillDO::getCreditPay, reqVO.getCreditPay())
                .betweenIfPresent(BillDO::getPayTime, reqVO.getPayTime())
                .betweenIfPresent(BillDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(BillDO::getId));
    }
    @TenantIgnore
    IPage<BillRespVO> getBillStorePage(IPage<BillRespVO> page, @Param("vo") BillPageReqVO vo);
    @TenantIgnore
    IPage<BillRespVO> getBillPage(IPage<BillRespVO> page, @Param("vo") BillPageReqVO vo);
    @TenantIgnore
    IPage<BillRespVO> getPage(IPage<BillRespVO> page, @Param("vo") BillPageReqVO vo,@Param("ids") List<Long> ids);
    @TenantIgnore
    List<BillDO> getBillAgencyById(@Param("agencyId") Long agencyId);
    List<BillStoreDO> getBillStoreOver();

    List<BillDO> getBillOver();
    List<TradeOrderRespVO> getOrderList(@Param("vo") BillSaveReqVO vo);

    IPage<TradeOrderRespVO> getOrderPage(IPage<TradeOrderRespVO> page, @Param("vo") TradeOrderPageReqVO vo);
    @TenantIgnore
    TradeOrderRespVO getOrderById(@Param("id") Long id);
    @TenantIgnore
    int updateOrderIsBill(@Param("orderId") Long orderId, @Param("isBill") Integer isBill);
    @TenantIgnore
    List<TradeDetailRespVO> getOrderIdDetail(@Param("orderId") Long orderId);
    @TenantIgnore
    TradeOrderRespVO getPayOrderData(@Param("id") Long id);
    @TenantIgnore
    TradeOrderRespVO getPayOrderWithChangeData(@Param("id") Long id);
    int updateOrderByBillId (@Param("id") Long id);
    int deleteStoreBillByBillId (@Param("id") Long id);
    int deleteBillByBillId (@Param("id") Long id);
    int deleteBillOrderByBillId (@Param("id") Long id);
}