package com.iotechn.unimall.admin.api.sys;

import com.iotechn.unimall.core.annotation.HttpMethod;
import com.iotechn.unimall.core.annotation.HttpOpenApi;
import com.iotechn.unimall.core.annotation.HttpParam;
import com.iotechn.unimall.core.annotation.HttpParamType;
import com.iotechn.unimall.core.annotation.param.NotNull;
import com.iotechn.unimall.core.exception.ServiceException;
import com.iotechn.unimall.data.dto.CollectionPaymentDTO;
import com.iotechn.unimall.data.dto.CustomerBillingDetailDTO;
import com.iotechn.unimall.data.model.Page;
import com.iotechn.unimall.data.domain.CustomerBillingInfoDO;
import com.iotechn.unimall.data.dto.CustomerBillingInfoDTO;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * Generate Code By Unimall
 */
@HttpOpenApi(group = "admin.customerbilling", description = "unimall_customer_billing_infoService")
public interface CustomerBillingService {

    @HttpMethod(description = "删除", permission = "customerBilling:customerbilling:delete", permissionParentName = "其他", permissionName = "CustomerBilling")
    public boolean delete(
            @NotNull @HttpParam(name = "id", type = HttpParamType.COMMON, description = "id") Long id,
            @NotNull @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "管理员ID") Long adminId) throws ServiceException;


    @HttpMethod(description = "查询", permission = "customerBilling:customerbilling:list", permissionParentName = "其他", permissionName = "CustomerBilling")
    public Page<CustomerBillingInfoDO> list(
            @HttpParam(name = "CustomerBillingInfoDTO", type = HttpParamType.COMMON, description = "CustomerBillingInfoDTO") CustomerBillingInfoDTO selectDTO,
            @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
            @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit,
            @NotNull @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "管理员ID") Long adminId) throws ServiceException;


    @HttpMethod(description = "查询客户", permission = "customerBilling:customerbilling:customerList", permissionParentName = "其他", permissionName = "CustomerBilling")
    public List<String> customerList() throws ServiceException ;

    @HttpMethod(description = "查询月份", permission = "customerBilling:customerbilling:cusDate", permissionParentName = "其他", permissionName = "CustomerBilling")
    public List<CustomerBillingInfoDO> cusDate(@HttpParam(name = "customer", type = HttpParamType.COMMON, description = "customer") String customer)throws ServiceException;


    @HttpMethod(description = "查询详情", permission = "customerBilling:customerbilling:getInfo", permissionParentName = "其他", permissionName = "CustomerBilling")
    public CustomerBillingInfoDO getInfo(@HttpParam(name = "id", type = HttpParamType.COMMON, description = "id") Long id) throws ServiceException;



    @HttpMethod(description = "添加", permission = "customerBilling:customerbilling:create", permissionParentName = "其他", permissionName = "CustomerBilling")
    public CustomerBillingInfoDO create(
            @HttpParam(name = "CustomerBillingInfoDTO", type = HttpParamType.COMMON, description = "CustomerBillingInfoDTO") CustomerBillingInfoDTO insertDTO,
            @NotNull @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "管理员ID") Long adminId) throws ServiceException;

    @HttpMethod(description = "编辑", permission = "customerBilling:customerbilling:edit", permissionParentName = "其他", permissionName = "CustomerBilling")
    public String edit(
            @HttpParam(name = "CustomerBillingInfoDTO", type = HttpParamType.COMMON, description = "CustomerBillingInfoDTO") CustomerBillingInfoDTO editDTO,
            @NotNull @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "管理员ID") Long adminId) throws ServiceException;



    @HttpMethod(description = "导出", permission = "customerBilling:customerbilling:export", permissionParentName = "其他", permissionName = "CustomerBilling")
    public String export(
            @HttpParam(name = "CustomerBillingInfoDTO", type = HttpParamType.COMMON, description = "CustomerBillingInfoDTO") CustomerBillingInfoDTO customerBillingInfoDTO,
            @HttpParam(name = "HttpServletResponse", type = HttpParamType.COMMON, description = "response") HttpServletResponse response) throws Exception;



    @HttpMethod(description = "导出详情", permission = "customerBilling:customerbilling:exportDetail", permissionParentName = "其他", permissionName = "CustomerBilling")
    public String exportDetail(
            @HttpParam(name = "CustomerBillingDetailDTO", type = HttpParamType.COMMON, description = "CustomerBillingDetailDTO") CustomerBillingDetailDTO customerBillingDetailDTO,
            @HttpParam(name = "HttpServletResponse", type = HttpParamType.COMMON, description = "response") HttpServletResponse response) throws Exception;



}