package com.qmth.sop.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qmth.sop.business.bean.params.AutoAllocationParam;
import com.qmth.sop.business.bean.params.UserArchivesAllocationParam;
import com.qmth.sop.business.bean.result.CrmArchivesAllocationResult;
import com.qmth.sop.business.bean.result.UserArchivesAllocationResult;
import com.qmth.sop.business.bean.result.UserArchivesAllocationSubTotalResult;
import com.qmth.sop.business.entity.TBUserArchivesAllocation;

import java.util.List;

/**
 * <p>
 * 人员分配表 服务类
 * </p>
 *
 * @author wangliang
 * @since 2023-08-01
 */
public interface TBUserArchivesAllocationService extends IService<TBUserArchivesAllocation> {

    /**
     * 查询派单分配列表
     *
     * @param serviceUnitId 服务单元id
     * @param province      省份名称
     * @param city          城市名称
     * @param area          县区名称
     * @param customName    客户名称
     * @param gap           分配差额
     * @param regionId      大区id
     * @param pageNumber    分页页数
     * @param pageSize      分页容量
     * @return 分页查询结果
     */
    IPage<UserArchivesAllocationResult> findCrmAllocationPage(Long serviceUnitId, String province, String city, String area, String customName, Integer gap, Long regionId, Integer pageNumber, Integer pageSize);

    /**
     * 查询派单小计
     *
     * @param serviceUnitId 服务单元id
     * @param province      省份名称
     * @param city          城市名称
     * @param area          县区名称
     * @param customName    客户名称
     * @param gap           分配差额
     * @param regionId      大区id
     * @return 小计结果
     */
    UserArchivesAllocationSubTotalResult findCrmAllocationSubTotal(Long serviceUnitId, String province, String city, String area, String customName, Integer gap, Long regionId);

    /**
     * 分配派单
     *
     * @param userArchivesAllocationParam 派单参数
     */
    void editCrmAllocation(UserArchivesAllocationParam userArchivesAllocationParam);


    /**
     * 根据派单号查询派单分配信息
     *
     * @param crmNo 派单号
     * @return 分配信息
     */
    List<CrmArchivesAllocationResult> findAllocationByCrmNo(String crmNo);

    /**
     * 自动批量调配派单和人员
     *
     * @param autoAllocationParam 自动调配参数
     */
    void autoEditCrmAllocationBatch(AutoAllocationParam autoAllocationParam);

    /**
     * crm派单 sop流程发布
     *
     * @param crmNo crmNo
     */
    void publishSop(String crmNo) throws InterruptedException;

    /**
     * crm派单 sop流程撤销发布
     *
     * @param crmNo crmNo
     */
    void unPublishSop(String crmNo);
}
