package com.gxwebsoft.credit.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.credit.entity.CreditMpCustomer;
import com.gxwebsoft.credit.param.CreditMpCustomerParam;
import com.gxwebsoft.credit.param.BatchFollowStepApprovalDTO;
import com.gxwebsoft.credit.param.EndFollowProcessDTO;
import com.gxwebsoft.credit.param.FollowStepApprovalDTO;
import com.gxwebsoft.credit.param.FollowStepQueryDTO;
import com.gxwebsoft.credit.vo.FollowStatisticsDTO;
import com.gxwebsoft.credit.vo.PendingApprovalStepVO;

import java.util.List;

/**
 * 小程序端客户Service
 *
 * @author 科技小王子
 * @since 2026-03-16 20:59:17
 */
public interface CreditMpCustomerService extends IService<CreditMpCustomer> {

    /**
     * 分页关联查询
     *
     * @param param 查询参数
     * @return PageResult<CreditMpCustomer>
     */
    PageResult<CreditMpCustomer> pageRel(CreditMpCustomerParam param);

    /**
     * 关联查询全部
     *
     * @param param 查询参数
     * @return List<CreditMpCustomer>
     */
    List<CreditMpCustomer> listRel(CreditMpCustomerParam param);

    /**
     * 根据id查询
     *
     * @param id ID
     * @return CreditMpCustomer
     */
    CreditMpCustomer getByIdRel(Integer id);

    /**
     * 审核跟进步骤
     *
     * @param dto 审核参数
     */
    void approveFollowStep(FollowStepApprovalDTO dto);

    /**
     * 批量审核跟进步骤
     *
     * @param dto 批量审核参数
     */
    void batchApproveFollowSteps(BatchFollowStepApprovalDTO dto);

    /**
     * 获取待审核的跟进步骤列表
     *
     * @param query 查询参数
     * @return 待审核步骤列表
     */
    List<PendingApprovalStepVO> getPendingApprovalSteps(FollowStepQueryDTO query);

    /**
     * 获取客户跟进统计
     *
     * @param customerId 客户ID
     * @return 跟进统计信息
     */
    FollowStatisticsDTO getFollowStatistics(Long customerId);

    /**
     * 结束客户跟进流程
     *
     * @param dto 结束流程参数
     */
    void endFollowProcess(EndFollowProcessDTO dto);

}
