package cn.iocoder.yudao.module.system.dal.mysql.biz;


import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.sys.vo.ServiceItemPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.sys.vo.SysChargeCategoryPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.biz.ServiceItemDO;
import cn.iocoder.yudao.module.system.dal.dataobject.biz.SysChargeCategoryDO;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface SysServiceIemMapper extends BaseMapperX<ServiceItemDO> {

    List<SysChargeCategoryDO> findPage(IPage<SysChargeCategoryDO> page, @Param("pageReqVO")SysChargeCategoryPageReqVO pageReqVO);

    List<ServiceItemDO> selectListPage(@Param("page") IPage<ServiceItemDO> page,
                                       @Param("pageVO") ServiceItemPageReqVO pageReqVO);


    default PageResult<ServiceItemDO> selectPage(ServiceItemPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ServiceItemDO>()
                .likeIfPresent(ServiceItemDO::getItemName, reqVO.getItemName())
                .eqIfPresent(ServiceItemDO::getServiceWay, reqVO.getServiceWay())
                .eqIfPresent(ServiceItemDO::getDistributionChannel, reqVO.getDistributionChannel())
                .eqIfPresent(ServiceItemDO::getChargeCategoryId, reqVO.getChargeCategoryId())
                .eqIfPresent(ServiceItemDO::getOverheadChargeId, reqVO.getOverheadChargeId())
                .eqIfPresent(ServiceItemDO::getStatus, reqVO.getStatus())
                .eqIfPresent(ServiceItemDO::getOrgType, reqVO.getOrgType())
                .in(ServiceItemDO::getTenantId, reqVO.getTenantIds())
                .eq(ServiceItemDO::getDeleted, false)
                .orderByDesc(ServiceItemDO::getId));
    }
}
