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

import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.pojo.bo.StaffListBO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

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

public interface StaffMapper {

    int insertSelective(TabHaobanStaff record);

    TabHaobanStaff selectByPrimaryKey(String staffId);

    TabHaobanStaff selectByPrimaryKeyNoStatus(String staffId);

    int updateByPrimaryKeySelective(TabHaobanStaff record);

    TabHaobanStaff selectByNationcodeAndPhoneNumber(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("nationCode") String nationcode, @Param("phoneNumber") String phoneNumber);

    List<TabHaobanStaff> listByIds(@Param("staffIds") List<String> staffIds);

    /**
     * 特殊查询，可以查询出被删除的成员信息
     * @param staffIds
     * @return
     */
    List<TabHaobanStaff> listByStaffIdList(@Param("staffIds") List<String> staffIds);

    TabHaobanStaff selectByUserIdAndEnterpriseId(@Param("userId") String userId,  @Param("wxEnterpriseId") String wxEnterpriseId);
    
    TabHaobanStaff getDeleteUser(@Param("userId") String userId,  @Param("wxEnterpriseId") String wxEnterpriseId) ;
    
    List<TabHaobanStaff> listByUserIdsAndWxEnterpriseId(@Param("userIds") List<String> userIds, @Param("wxEnterpriseId") String wxEnterpriseId);

    
    
    List<TabHaobanStaff> listLikeName(@Param("staffName") String staffName, @Param("wxEnterpriseId") String wxEnterpriseId);

    Page<TabHaobanStaff> pageStaff(StaffListBO staffListBO);

    List<TabHaobanStaff> listByPhoneNumber(@Param("phoneNumber") String phoneNumber);

    int delStaff(@Param("staffId") String staffId) ;
    
    int cleanStaff(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIds") List<String> staffIds);

    List<String> listUserStaffId(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIds") List<String> staffIds);

    List<TabHaobanStaff> listNoStatusStaffIds(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIds") List<String> staffIds);

    TabHaobanStaff getNoStatusByWxUserIds(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("wxUserId") String wxUserId);


    /**
     * 更新开放用户id,用户id
     */
    int updateOpenUserIdsByUserId(@Param("wxEnterpriseId") String wxEnterpriseId,
                                  @Param("wxUserId") String wxUserId,
                                  @Param("wxOpenUseId") String wxOpenUseId);

    /**
     * 更新开放id员工id
     *
     * @param staffId 员工id
     * @param openId  开放id
     * @return int
     */
    int updateOpenIdByStaffId(@Param("staffId") String staffId, @Param("openId") String openId);

    /**
     * 根据员工id获取二维码
     * @param staffId
     * @return
     */
    String getQrCodeByStaffId(@Param("staffId") String staffId);

    /**
     * 更新二维码通过员工id
     *
     * @param staffId 员工id
     * @param qrCode  二维码
     * @return int
     */
    int updateQrCodeByStaffId(@Param("staffId") String staffId, @Param("qrCode") String qrCode);

    /**
     * 通过userID更新员工二维码
     * @param userId
     * @param qrCode
     * @return
     */
    int updateQrCodeByUserId(@Param("userId") String userId, @Param("qrCode") String qrCode);

    /**
     * 选择电话号码和企业标识
     */
    TabHaobanStaff selectByPhoneNumberAndEnterpriseId(@Param("phoneNumber") String phoneNumber,
                                                      @Param("wxEnterpriseId") String wxEnterpriseId);

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


    /**
     * wx企业id员工列表
     *
     * @param wxEnterpriseId wx企业标识
     * @return {@link List }<{@link TabHaobanStaff }>
     * @author mozhu
     * @date 2022-06-30 14:04:05
     */
    List<TabHaobanStaff> listByWxEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId);


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

    /**
     * 更新是否激活
     */
    int updateActiveStatusById(@Param("staffId")String staffId, @Param("activeTime")Date activeTime, 
            @Param("expireTime")Date expireTime,
            @Param("activeCode")String activeCode);
    
    // 初始化激活码信息,先删除
    void deleteActivieInfo(@Param("wxEnterpriseId") String wxEnterpriseId) ;

    /**
     * 重置添加num
     *
     * @return int
     * @author mozhu
     * @date 2022-07-25 16:36:07
     */
    int resetAddNum();

    /**
     * 绑定的员工列表(暂时取100条，后续和前端一起改为分页接口)
     */
    List<StaffDTO> listBindStoreIds(@Param("storeIds") List<String> storeIds,
                                    @Param("wxEnterpriseId") String wxEnterpriseId);
    
    
    List<TabHaobanStaff> listAllByPage(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("startItem") int startItem , @Param("pageSize") int pageSize);

    void updateOpenConcatFlag(@Param("wxUserIdList")List<String> wxUserIdList , @Param("mixFlag")int mixFlag);
    /**
     * 查询其他占用许可总数
     */
    Integer getOccupyNum(@Param("wxEnterpriseId") String wxEnterpriseId);

    /**
     * 查询即将过期的许可总数
     * @param wxEnterpriseId
     * @return
     */
    Integer getExpiringNum(@Param("wxEnterpriseId") String wxEnterpriseId);

    /**
     * 通过wxOpenUserId更新企业成员许可信息
     */
    void updateStaffInfoByStaffId(@Param("staffId") String staffId,
                                       @Param("activeTime")Date activeTime,
                                       @Param("expireTime")Date expireTime,
                                       @Param("activeCode")String activeCode);

    /**
     * 查询企业下所有成员ID
     * @param wxEnterpriseIds
     * @return
     */
    List<String> queryStaffIdsWithEnterpriseId(@Param("wxEnterpriseIds") List<String> wxEnterpriseIds);

    TabHaobanStaff getNumByActiveCode(@Param("wxEnterpriseId") String wxEnterpriseId,@Param("activeCode")String activeCode);
    void updateOccupyFlagByStaffId(@Param("staffId") String staffId);

    void updateStaffHead(@Param("staffId")String staffId, @Param("headUrl")String headUrl);
}