
package com.tmerclub.cloud.supplier.service;

import com.tmerclub.cloud.api.platform.dto.OfflineHandleEventDTO;
import com.tmerclub.cloud.api.supplier.bo.SupplierDetailBO;
import com.tmerclub.cloud.api.supplier.bo.SupplierSimpleBO;
import com.tmerclub.cloud.api.supplier.vo.SupplierApiDetailVO;
import com.tmerclub.cloud.common.database.dto.PageDTO;
import com.tmerclub.cloud.common.database.vo.PageVO;
import com.tmerclub.cloud.supplier.dto.SupplierAuditingDTO;
import com.tmerclub.cloud.supplier.dto.SupplierCreateInfoDTO;
import com.tmerclub.cloud.supplier.dto.SupplierDetailDTO;
import com.tmerclub.cloud.supplier.dto.SupplierSigningInfoDTO;
import com.tmerclub.cloud.supplier.model.SupplierDetail;
import com.tmerclub.cloud.supplier.vo.SupplierDetailAppVO;
import com.tmerclub.cloud.supplier.vo.SupplierDetailVO;

import java.util.Date;
import java.util.List;

/**
 * 供应商详情
 *
 * @author lhd
 * @date 2022-03-14 17:04:32
 */
public interface SupplierDetailService {

    /**
     * 分页获取供应商详情列表
     *
     * @param pageDTO 分页参数
     * @param supplierDetailDTO 供应商搜索数据
     * @return 供应商详情列表分页数据
     */
    PageVO<SupplierApiDetailVO> page(PageDTO pageDTO, SupplierDetailDTO supplierDetailDTO);

    /**
     * 根据供应商详情id获取供应商详情
     *
     * @param supplierId 供应商详情id
     * @return 供应商详情
     */
    SupplierApiDetailVO getBySupplierId(Long supplierId);

    /**
     * 更新供应商详情
     * @param supplierDetailDTO 供应商详情
     */
    void update(SupplierDetailDTO supplierDetailDTO);

    /**
     * 根据供应商详情id删除供应商详情
     * @param supplierId
     */
    void deleteById(Long supplierId);

    /**
     * 获取供应商列表信息
     * @param supplierIds
     * @return
     */
    List<SupplierDetail> listBySupplierIds(List<Long> supplierIds);

    /**
     * 根据供应商详情id获取供应商详情以及剩余短信额度
     *
     * @param supplierId 供应商详情id
     * @return 供应商详情
     */
    SupplierApiDetailVO getSupplierBySupplierId(Long supplierId);

    /**
     * 申请开店
     *
     * @param supplierDetailDTO 申请开店信息
     */
    void applySupplier(SupplierDetailDTO supplierDetailDTO);

    /**
     * 供应商搜索分页
     *
     * @param pageDTO 分页参数
     * @param supplierDetailDTO 供应商信息
     * @return 供应商信息列表
     */
    PageVO<SupplierDetailAppVO> supplierSearchPage(PageDTO pageDTO, SupplierDetailDTO supplierDetailDTO);

    /**
     * 审核供应商信息
     *
     * @param supplierAuditingDTO 审核信息
     */
    void audit(SupplierAuditingDTO supplierAuditingDTO);

    /**
     * 改变供应商状态
     *
     * @param supplierId
     * @param supplierStatus
     */
    void changeSpuStatus(Long supplierId, Integer supplierStatus);

    /**
     * 删除供应商缓存
     *
     * @param supplierId
     */
    void removeCacheBySupplierId(Long supplierId);

    /**
     * 获取供应商信息及扩展信息
     *
     * @param supplierId
     * @return
     */
    SupplierDetailBO supplierExtensionData(Long supplierId);

    /**
     * 创建供应商
     *
     * @param supplierDetailDTO
     */
    void createSupplier(SupplierDetailDTO supplierDetailDTO);

    /**
     * 获取供应商信息及扩展信息
     * @param supplierIds 供应商ids
     * @param supplierName 供应商名称
     * @return 供应商信息列表
     */
    List<SupplierApiDetailVO> getSupplierDetailBySupplierIdAndSupplierName(List<Long> supplierIds, String supplierName);

    /**
     *    根据供应商id获取供应商扩展信息
     * @param supplierId 供应商id
     * @return 供应商扩展信息
     */
    SupplierApiDetailVO getShoExtensionsBySupplierId(Long supplierId);

    /**
     * 根据手机号获取存在供应商的数量
     * @param mobile 手机号
     * @return 数量
     */
    Integer countByMobile(String mobile);

    /**
     * 平台 --下线活动商品
     * @param supplierApiDetailVO 供应商信息
     * @param offlineReason 下线原因
     * @param sysUserId 系统用户id
     */
    void offline(SupplierApiDetailVO supplierApiDetailVO, String offlineReason, Long sysUserId);

    /**
     * 根据供应商状态查询供应商数量
     * @param supplierStatus
     * @return
     */
    Long countBySupplierStatus(Long supplierStatus);

    /**
     * 平台创建供应商
     * @param supplierCreateInfoDTO
     */
    void platformCreateSupplier(SupplierCreateInfoDTO supplierCreateInfoDTO);

    /**
     * 根据签约时间修改供应商状态
     * @param now
     */
    void changeSupplierStatusByContractTime(Date now);

    /**
     * 更新供应商签约信息
     * @param supplierSigningInfoDTO
     */
    void updateSigningInfo(SupplierSigningInfoDTO supplierSigningInfoDTO);

    /**
     * 供应商重新申请上线
     * @param offlineHandleEventDTO
     */
    void auditApply(OfflineHandleEventDTO offlineHandleEventDTO);

    /**
     * 供应商违规下线，重新申请上线审核
     * @param offlineHandleEventDTO
     */
    void onlineAudit(OfflineHandleEventDTO offlineHandleEventDTO);


    /**
     * 根据参数获取供应商id
     * @param supplierSimpleBO
     * @return
     */
    List<SupplierSimpleBO> listSimple(SupplierSimpleBO supplierSimpleBO);

    /**
     * 检查供应商名称是否已存在
     * @param supplierName
     * @return
     */
    Boolean checkSupplierName(String supplierName);

    /**
     * 根据供应商状态查询供应商id列表
     * @param supplierStatus
     * @return
     */
    List<Long> getSupplierIdBySupplierStatus(Integer supplierStatus);

    /**
     * 供应商列表
     *
     * @param supplierDetailDTO
     * @param shopId
     * @param pageDTO
     * @return
     */
    PageVO<SupplierDetailVO> pageSupplier(PageDTO pageDTO, SupplierDetailDTO supplierDetailDTO, Long shopId);

    /**
     * 根据供应商Id查询相关的供应商列表
     *
     * @param supplierDetailDTO
     * @param shopId
     * @return
     */
    List<SupplierDetailVO> listSupplierByShopId(SupplierDetailDTO supplierDetailDTO, Long shopId);

    /**
     * 获取指定供应商信息
     * @param supplierIds
     * @return
     */
    List<SupplierApiDetailVO> listSupplierDetailBySupplierIds(List<Long> supplierIds);

    /**
     * 给还没创建通联会员的供应商创建会员账号
     */
    void createAllinpayMember();

    /**
     * 更新通联影印件状态
     * @param bizUserId
     * @param status
     */
    void updateAllinpayIdCardStatus(String bizUserId, Integer status);

    /**
     * 供应商违规下线，无需供应商申请，平台直接上线供应商
     * @param offlineHandleEventDTO
     */
    void onlineOpenSupplier(OfflineHandleEventDTO offlineHandleEventDTO);

    /**
     * 给供应商创建通联会员
     * @param supplierId
     */
    void createAllinpayMemberBySupplierId(Long supplierId);

    /**
     * 获取未删除的供应商id
     * @return
     */
    List<SupplierApiDetailVO> listSupplierIds();
}
