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.dto.DataPermissionDto;
import com.qmth.sop.business.bean.params.ServiceUnitParam;
import com.qmth.sop.business.bean.result.ServiceUnitResult;
import com.qmth.sop.business.entity.SysUser;
import com.qmth.sop.business.entity.TBService;
import com.qmth.sop.common.enums.ProductTypeEnum;
import com.qmth.sop.common.enums.ServiceStatusEnum;

import java.util.List;

/**
 * <p>
 * 服务单元表 服务类
 * </p>
 *
 * @author wangliang
 * @since 2023-08-01
 */
public interface TBServiceService extends IService<TBService> {

    List<TBService> listEnable(Long id);

    /**
     * 服务单元编辑
     *
     * @param serviceUnitParam 服务单元参数
     * @param requestUser      请求用户
     * @return 编辑结果
     */
    Long edit(ServiceUnitParam serviceUnitParam, SysUser requestUser);

    /**
     * 服务单元分页查询
     *
     * @param type            业务类型
     * @param serviceLeadId   负责人
     * @param status          服务状态
     * @param createStartTime 创建开始时间
     * @param createEndTime   创建截止时间
     * @param serviceUnitName 服务单元名称
     * @param pageNumber      分页页数
     * @param pageSize        分页容量
     * @return 服务单元分页结果
     */
    IPage<ServiceUnitResult> page(ProductTypeEnum type, Long serviceLeadId, ServiceStatusEnum status,
                                  Long createStartTime, Long createEndTime, String serviceUnitName, Integer pageNumber, Integer pageSize);

    /**
     * 服务单元作废
     *
     * @param serviceUnitId 服务单元id
     */
    void cancelServiceUnit(Long serviceUnitId);

    /**
     * 发布服务单元
     *
     * @param serviceUnitId 服务单元id
     */
    void publishServiceUnit(Long serviceUnitId);

    /**
     * 关闭服务单元
     *
     * @param serviceUnitId 服务单元id
     */
    void clozeServiceUnit(Long serviceUnitId);

    /**
     * 重启服务单元
     *
     * @param serviceUnitId 服务单元id
     */
    @Deprecated
    void restartServiceUnit(Long serviceUnitId);

    /**
     * 查询服务单元
     *
     * @param type       业务类型
     * @param statusList 状态集
     * @param name       服务单元名称
     * @param dpr        数据权限
     * @return 服务单元
     */
    List<TBService> queryServiceUnit(ProductTypeEnum type, List<ServiceStatusEnum> statusList, String name, DataPermissionDto dpr);
}
