package com.gic.haoban.manage.service.service;


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

import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.github.pagehelper.Page;

public interface StaffService {

    TabHaobanStaff selectById(String staffId);

    TabHaobanStaff selectByNationcodeAndPhoneNumber(String wxEnterpriseId, String nationcode, String phoneNumber);

    String add(TabHaobanStaff tab);

    Page<TabHaobanStaff> pageStaff(List<String> staffIds, Integer activeFlag,
                                   String keyword, List<String> departmentIds, String wxEnterpriseId, Integer relationFlag,String permitState,
                                   Integer occupy);

    void updateByPrimaryKey(TabHaobanStaff tab);

    int delByStaffId(String staffId);

    /**
     * 选择用户id和企业标识
     *
     * @param userId         用户id
     * @param wxEnterpriseId wx企业标识
     * @return {@link TabHaobanStaff }
     * @author mozhu
     * @date 2022-01-13 15:02:30
     */
    TabHaobanStaff selectByUserIdAndEnterpriseId(String userId, String wxEnterpriseId);

    /**
     * 选择userId跟手机号查询数据  userid优先级高
     */
    TabHaobanStaff selectByUserIdAndEnterpriseId(String wxuserId, String wxOpenUserId , String wxEnterpriseId);

    List<StaffDTO> listByUserIdsAndWxEnterpriseId(List<String> userIds, String wxEnterpriseId);

    /**
     * 清楚微信信息
     *
     * @param wxEnterpriseId
     * @return
     */
    int cleanStaff(String wxEnterpriseId, List<String> staffIds);

    /**
     * 获取需要删除的staff列表
     *
     * @param wxEnterpriseId
     * @param staffIds
     * @return
     */
    List<String> listDelUserStaffId(String wxEnterpriseId, List<String> staffIds);

    /**
     * 获取无状态的staff列表
     *
     * @param wxEnterpriseId
     * @param staffIds
     * @return
     */
    List<TabHaobanStaff> listNoStatusByStaffIds(String wxEnterpriseId, List<String> staffIds);

    /**
     * 更新开放用户id,用户id
     *
     * @param wxEnterpriseId wx企业标识
     * @param wxUserId       wx用户id
     * @param wxOpenUseId    wx开放使用id
     * @return int
     * @author mozhu
     * @date 2021-12-21 17:19:33
     */
    int updateOpenUserIdsByUserId(String wxEnterpriseId, String wxUserId, String wxOpenUseId);

    /**
     * 删除同wxUserId的其他staff
     *
     * @param wxUserId       微信用户id
     * @param staffId        导购id
     * @param wxEnterpriseId wx企业标识
     */
    void delOtherStaffByWxUserId(String wxUserId, String staffId, String wxEnterpriseId);


    /**
     * 更新添加num通过id
     *
     * @param staffId 员工id
     * @return int
     * @author mozhu
     * @date 2022-07-25 16:36:38
     */
    int updateAddNumById(String staffId);

    /**
     * 重置添加num
     *
     * @return int
     * @author mozhu
     * @date 2022-07-25 16:36:53
     */
    int resetAddNum();
    
    /**
     * 
     * @Title: updateActiveStatusById
     * @Description: 更新激活账号
     * @return
     * @throws
     */
    int updateActiveStatusById(String staffId,  Date activeTime, Date expireTime ,String activeCode);

    void updateOpenConcatFlag(List<String> wxUserIdList,int mixFlag);
    
    /**
     * 
     * @Title: activedAccountTimer
     * @Description: 更新激活账号
     * @author xgh331 
     * @throws
     */
    void activedAccountTimer(String wxEid);

    /**
     * 查询其他占用许可总数
     */
    Integer getOccupyNum(String wxEnterpriseId);


    /**
     * 查询成员列表
     * @param wxEnterpriseId
     * @param staffIds
     * @return
     */
    List<TabHaobanStaff> listStaffWithIds(List<String> staffIds);

    /**
     * 查询企业下所有成员id
     * @param enterpriseId
     * @return
     */
    List<String> queryStaffIdsWithEnterpriseId(String enterpriseId);
}
