package com.sunxung.factoring.service.customerinformation;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sunxung.factoring.entity.GridPage;
import com.sunxung.factoring.entity.customerinformation.Customer;
import com.sunxung.factoring.entity.sys.User;
import com.sunxung.factoring.entity.vo.ConditionVo;

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

/**
 * @author liutao
 */
public interface CustomerService extends IService<Customer> {
    /**
     * 根据企业名称查询企业客户列表
     * @param conditionVo 查询条件
     * @return 符合条件的企业客户列表
     */
    GridPage<Customer> findList(ConditionVo conditionVo);

    /**
     * 查询所有核心企业或供应商
     * @param supplier
     * @return 所有核心企业或供应商
     */
    List<Customer> findCoreBusiness(boolean supplier);

    /**
     * 从第三方获取企业客户信息
     *
     * @param conditionVo
     * @return
     */
    List<Customer> findEnterpriseBySop(ConditionVo conditionVo);

    /**
     * 新增企业客户信息
     * @param customer
     * @return
     */
    void add(Customer customer) throws Exception;

    /**
     * 查询详情
     * @param id
     * @return
     */
    Customer findDetail(long id);

    /**
     * 从sop更新企业信息
     */
    void flush();

    /**
     * 修改账户名称
     * @param customer
     */
    void modifyAccount(Customer customer);

    /**
     * 修改密码
     * @param customer
     */
    void modifyPassword(Customer customer);

    /**
     * 添加或删除银行账户
     * @param customer
     * @param supplierId
     */
    void modifyBankDetail(Customer customer,long supplierId);

    /**
     * 获取业务经理创建的所有业务下关联的供应商
     * @return
     */
    List<Customer> getLocalUserSuppliers();

    /**
     * 经理创建的业务中关联的某一个供应商的业务中的核心企业名称
     * @param supplierId
     * @return
     */
    List<Customer> getLocalUserCustomers(Long supplierId);


    /**
     * 通过供应商ID获取关联的账号信息
     * @return
     */
    User getUserBySupplierId(Long supplierId);

    /**
     * 经理创建的业务中的核心企业名称
     * @return
     */
    List<Customer> getCustomersByUser();

    /**
     * 经理创建的业务中的供应商
     * @param businessNumber
     * @return
     */
    List<Customer> getSuppliersByUser(String businessNumber);

    void updateShortUrl(Date date);

    /***
     * 删除企业及账号
     * @param id
     */
    void deleteCustomer(Long id);

    /**
     * 刷新认证链接
     * @param id
     */
    void flushUrl(Long id);

    void flushUrlByCompany(Long id);

    void flushStatusBySop(String code, Integer type);
}
