package com.fs.company.service;

import com.fs.common.core.domain.R;
import com.fs.company.domain.CompanyUser;
import com.fs.company.param.CompanyUserAreaParam;
import com.fs.company.param.CompanyUserQwParam;
import com.fs.company.vo.CompanyQwUserByIdsVo;
import com.fs.company.vo.CompanyUserQwListVO;
import com.fs.company.vo.CompanyUserVO;
import com.fs.company.vo.DocCompanyUserVO;
import com.fs.his.vo.CitysAreaVO;
import com.fs.his.vo.OptionsVO;
import com.fs.qw.vo.CompanyUserQwVO;
import com.fs.qw.vo.QwUserVO;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 物业公司管理员信息Service接口
 *
 * @author fs
 * @date 2021-05-25
 */
public interface ICompanyUserService {
    /**
     * 查询物业公司管理员信息
     *
     * @param userId 物业公司管理员信息ID
     * @return 物业公司管理员信息
     */
    public CompanyUser selectCompanyUserById(Long userId);
    public String selectCompanyUserNameUserById(Long userId);

    public List<Long> selectUserAllCompanyUserId(Long companyUserId);

    /**
     * 查询物业公司管理员信息列表
     *
     * @param companyUser 物业公司管理员信息
     * @return 物业公司管理员信息集合
     */
    public List<CompanyUser> selectCompanyUserList(CompanyUser companyUser);

    /**
     * 新增物业公司管理员信息
     *
     * @param companyUser 物业公司管理员信息
     * @return 结果
     */
    public int insertCompanyUser(CompanyUser companyUser);

    /**
     * 修改物业公司管理员信息
     *
     * @param companyUser 物业公司管理员信息
     * @return 结果
     */
    public int updateCompanyUser(CompanyUser companyUser);

    public int updateAllCompanyUser(CompanyUser companyUser);

    /**
     * 批量删除物业公司管理员信息
     *
     * @param userIds 需要删除的物业公司管理员信息ID
     * @return 结果
     */
    public int deleteCompanyUserByIds(Long[] userIds);

    /**
     * 删除物业公司管理员信息信息
     *
     * @param userId 物业公司管理员信息ID
     * @return 结果
     */
    public int deleteCompanyUserById(Long userId);

    CompanyUser selectUserByUserName(String account);

    String selectUserRoleGroup(String username);

    String selectUserPostGroup(String username);

    int updateUserAvatar(String username, String avatar);

    int resetUserPwd(String userName, String encryptPassword);

    int updateUserProfile(CompanyUser user);

    int checkUserName(String userName);

    public int insertUser(CompanyUser user);
    public int updateUser(CompanyUser user);


    int resetUserPwdByUserId(Long userId, String encryptPassword);

    List<Map<String, Object>> selectAllUsersList(CompanyUser user);

    List<CompanyUserVO> selectMyUserList(CompanyUser user);

    List<CompanyUser> getUserListByDeptId(CompanyUser user);

    List<CompanyUser> selectCompanyNoQwUserList(Long companyId);

    List<QwUserVO> selectCompanyQwUserList(String corpId, Long companyId);

    Integer selectCompanyUserCountByCompanyId(Long companyId);

    String checkUserNameUnique(String userName);



    List<DocCompanyUserVO> selectDocCompanyUserListByIds(String companyUserIds);

    CompanyUser selectCompanyUserByCompanyIdAndNickName(long companyId, String nickName);

    List<CompanyUserVO> selecCompanyAllUsersList(CompanyUser map);

    CompanyUser selectCompanyUserAdminByCompanyId(Long companyId);

    /**
     * 根据部门id+公司id查询下面的企业微信用户列表
     */
    List<CompanyUserQwVO> getUserListByDeptIdToQwUserid(CompanyUser user);

    List<CompanyUserQwListVO> selectCompanyUserQwListVO(CompanyUserQwParam user);

    String uploadQrCode(MultipartFile file,String userId) throws IOException;
    List<OptionsVO> selectCompanyUserBySalesman();

    List<CompanyQwUserByIdsVo> selectCompanyQwUserByIds(List<Long> qwUserIdList);

    CompanyUser selectCompanyUserByUserId(Long userId);

    /**
     * 查询公司销售列表
     * @param ids 销售ID集合
     * @return  list
     */
    List<CompanyUser> selectCompanyUserByIds(Set<Long> ids);

    List<CompanyUser> selectAllCompanyUserByParentId(Long parentId);

    List<CompanyUser> selectAllCompanyUserAndSelf(Long userId);

    /**
     * 批量审核用户
     * @param userIds 用户ID集合
     */
    void auditUsers(List<Long> userIds);

    /**
     * 查询销售列表
     * @param deptId 部门ID
     * @return list
     */
    List<CompanyUser> getCompanyUserListByDeptId(Long deptId);

    List<CompanyUser> getAllUserListLimit(Long companyId, String keywords);

    List<CitysAreaVO> getCitysAreaList();

    R updateCompanyUserAreaList(CompanyUserAreaParam param);

    /**
     * 根据openid获取销售
     * @param openId 微信小程序标识
     * @return
     */
    CompanyUser getCompanyUserByOpenId(String openId);

    /**
     * 根据电话获取销售信息
     * @param phoneNumber 用户电话
     * @return
     */
    CompanyUser getCompanyUserByPhone(String phoneNumber);

    /**
     * 更改会员归属
     * @param userIds
     * @return
     */
    int changeCompanyUser(List<Long> userIds, Long companyUserId, Long companyId);

    /**
     * 查询销售选项列表
     * @param params    参数
     * @return  list
     */
    List<OptionsVO> selectCompanyUserListByMap(Map<String, Object> params);

    /**
     * 批量设置销售的会员是否需要单独注册
     * @param status true-是，false-否
     * @param userIds 销售ids
     * @return
     */
    Boolean setIsRegisterMember(boolean status,  List<Long> userIds);

}
