
package com.tmerclub.cloud.supplier.mapper;

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.supplier.dto.SupplierDetailDTO;
import com.tmerclub.cloud.supplier.model.SupplierDetail;
import com.tmerclub.cloud.supplier.vo.SupplierDetailAppVO;
import com.tmerclub.cloud.supplier.vo.SupplierDetailVO;
import org.apache.ibatis.annotations.Param;

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

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

    /**
     * 获取供应商详情列表
     *
     * @param supplierDetailDTO 供应商搜索数据
     * @return 供应商详情列表
     */
    List<SupplierApiDetailVO> list(@Param("supplierDetail") SupplierDetailDTO supplierDetailDTO);

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

    /**
     * 保存供应商详情
     *
     * @param supplierDetail 供应商详情
     */
    void save(@Param("supplierDetail") SupplierDetail supplierDetail);

    /**
     * 更新供应商详情
     *
     * @param supplierDetail 供应商详情
     */
    void update(@Param("supplierDetail") SupplierDetail supplierDetail);

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

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

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

    /**
     * 供应商搜索列表
     *
     * @param supplierDetailDTO
     * @return
     */
    List<SupplierDetailAppVO> supplierSearchList(@Param("supplierDetail") SupplierDetailDTO supplierDetailDTO);

    /**
     * 统计该供应商名被其他用户使用的数量
     *
     * @param supplierName
     * @param supplierId
     * @return
     */
    int countSupplierName(@Param("supplierName") String supplierName, @Param("supplierId") Long supplierId);

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

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

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

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

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

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

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

    /**
     * 根据当前时间获取状态需要改变为停业状态的供应商id列表
     *
     * @param now
     * @return
     */
    List<Long> listSupplierIdsOfStatusChangeToStopByContractTime(@Param("now") Date now);

    /**
     * 根据当前时间获取状态需要改变为营业状态的供应商id列表
     *
     * @param now
     * @return
     */
    List<Long> listSupplierIdsOfStatusChangeToOpenByContractTime(@Param("now") Date now);


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

    /**
     * 根据供应商状态获取供应商id列表
     *
     * @param supplierStatus
     * @return
     */
    List<Long> getSupplierIdsBySupplierStatus(@Param("supplierStatus") Integer supplierStatus);

    /**
     * 供应商列表
     *
     * @param supplierDetailDTO
     * @param supplierIds
     * @return 供应商列表
     */
    List<SupplierDetailVO> listSupplierDetail(@Param("supplier") SupplierDetailDTO supplierDetailDTO, @Param("supplierIds") List<Long> supplierIds);

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

    /**
     * 获取还没创建会员的供应商id列表
     * @return
     */
    List<Long> listUnCreateMemberSupplierIds();

    /**
     * 更新供应商为停业状态,并且更新为已经创建会员
     * @param supplierIds
     */
    void updateSupplierToStop(@Param("supplierIds") List<Long> supplierIds);

    /**
     * 更新供应商为开店申请中，并且更新为已经创建会员
     * @param supplierIds
     */
    void updateSupplierToApplying(@Param("supplierIds") List<Long> supplierIds);

    /**
     * 更新供应商已经创建会员
     * @param supplierIds
     */
    void updateSupplierIsCreate(@Param("supplierIds") List<Long> supplierIds);

    /**
     * 更新通联供应商状态
     * @param supplierId
     * @param status
     */
    void updateAllinpaySupplierStatus(@Param("supplierId") Long supplierId, @Param("status") Integer status);

    /**
     * 更新供应商为通联审核成功
     * @param supplierId
     */
    void updateSupplierAuditSuccess(@Param("supplierId") Long supplierId);

    /**
     * 更新供应商为通联审核失败
     * @param supplierId
     */
    void updateSupplierAuditFail(@Param("supplierId") Long supplierId);

    /**
     * 更新供应商影印件采集状态
     * @param supplierId
     * @param status
     */
    void updateAllinpayIdCardStatus(@Param("supplierId") Long supplierId, @Param("status") Integer status);

    /**
     * 更新供应商为通联开业
     * @param supplierId
     */
    void updateSupplierToOpen(@Param("supplierId") Long supplierId);

    /**
     * 更新供应商为通联上线待审核
     * @param supplierId
     */
    void updateSupplierToWaitAudit(@Param("supplierId") Long supplierId);

    /**
     * 更新供应商绑定通联手机号码状态
     * @param supplierId
     * @param status 0否1是
     */
    void updateSupplierBindPhone(@Param("supplierId") Long supplierId, @Param("status") Integer status);

    /**
     * 保存编号
     * @param supplierId
     * @param signAcctType
     * @param acctProtocolNo
     */
    void updateAcctProtocolNoByType(@Param("supplierId") Long supplierId, @Param("type") Integer signAcctType, @Param("acctProtocolNo") String acctProtocolNo);

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