package com.dk.mdm.mapper.core;

import com.dk.common.mapper.BaseMapper;
import com.dk.common.model.vo.core.UserVO;
import com.dk.mdm.model.pojo.core.User;
import com.dk.mdm.model.query.core.UserQuery;
import com.dk.mdm.model.pojo.core.UserLoginLog;
import com.dk.mdm.model.pojo.core.UserRight;
import com.dk.mdm.model.pojo.core.WorkTeam;
import com.dk.common.model.response.core.UserResponse;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
*  用户 Mapper
*/
@Repository
public interface UserMapper extends BaseMapper<User>{

    /**
     * @desc   : 根据条件进行查询
     * @author : 姜宁
     * @date   : 2023/1/29 11:18
     */
    List<UserResponse> selectByCond(UserQuery userQuery);

    /**
     * @desc   : 根据条件进行查询（数量）
     * @author : 姜宁
     * @date   : 2023/1/29 11:18
     */
    Long countByCond(UserQuery userQuery);

    /**
     * @desc   : 工厂编码是否重复
     * @date   : 2023/1/3 16:39
     * @author : 周兴
     */
    UserResponse selectByCode(@Param("userCode") String userCode, @Param("ftyCode") String ftyCode);

    /**
     * @desc   : 用户密码加密
     * @author : 周兴
     * @date   : 2023/1/5 11:45
     */
    String encodePassword(@Param("userPwd") String userPwd, @Param("userId") Integer userId);

    /**
     * @desc   : 更新登录状态
     * @author : 周兴
     * @date   : 2023/1/5 11:45
     */
    int updateUserLogin(UserVO userVO);

    /**
     * @desc   : 更新登录状态
     * @author : 周兴
     * @date   : 2023/1/5 11:45
     */
    void insertUserLoginLog(UserLoginLog userLoginLog);

    /**
     * @desc   : 获取当前用户信息
     * @author : 常皓宁
     * @date   : 2023/2/7 17:23
     */
    UserResponse selectUserWithPwdById(@Param("id") int id);

    /**
     * @desc : 修改密码
     * @author : 常皓宁
     * @date : 2023-01-31 10:15
     */
    int updatePassword(UserVO userVO);

    /**
     * @desc   : 用户编码是否重复
     * @author : 姜宁
     * @date   : 2023/2/1 14:48
     */
    Long selectUserByCode(User user);

    /**
     * @desc   : 解锁
     * @author : 姜宁
     * @date   : 2023/2/2 11:38
     */
    int unLock(com.dk.mdm.model.vo.core.UserVO userVO);

    /**
     * @desc   : 获取用户权限
     * @author : 姜宁
     * @date   : 2023/2/2 15:17
     */
    Map<String, List<Map<String, String>>> getUserRight(Map<String, Object> param);

    /**
     * @desc   : 获取已选的用户权限
     * @author : 周兴
     * @date   : 2023/2/7 15:17
     */
    List<Map<String, Object>> getUserRightSelected(Map<String, Object> param);

    /**
     * @desc   : 获取当前的用户权限
     * @author : 洪旭东
     * @date   : 2023-08-30 13:06
     */
    List<Map<String, Object>> getUserRightCurrent(Map<String, Object> param);

    /**
     * @desc   : 批量插入班组信息
     * @author : 姜宁
     * @date   : 2023/2/3 10:35
     */
    int insertWorkTeamBatch(List<WorkTeam> workTeamList);

    /**
     * @desc   : 删除班组信息
     * @author : 姜宁
     * @date   : 2023/2/3 11:45
     */
    int deleteWorkTeam(com.dk.mdm.model.vo.core.UserVO userVO);

    /**
     * @desc   : 通过用户Id获取班组信息
     * @author : 姜宁
     * @date   : 2023/2/3 13:28
     */
    List<Map<String, Object>> getUserWorkTeamById(Integer userID);

    /**
     * @desc   : 保存用户权限
     * @author : 姜宁
     * @date   : 2023/2/3 15:33
     */
    int saveUserRight(List<UserRight> userRightList);

    /**
     * @desc   : 删除用户权限
     * @author : 姜宁
     * @date   : 2023/2/3 15:35
     */
    int deleteUserRight(@Param("userId")Integer userId, @Param("ftyId") Integer ftyId);

    /**
     * @desc   : 更新用户权限
     * @author : 姜宁
     * @date   : 2023/2/3 16:07
     */
    boolean resetUserFun(@Param("userId")Integer userId);

    /**
     * @desc   : 通过用户Id获取班组信息
     * @author : 姜宁
     * @date   : 2023/2/3 13:28
     */
    List<Map<String, Object>> getWorkTeamByUserId(@Param("userId")Integer userID);

    /**
     * @desc   : 通过Map获取班组信息
     * @author : 洪旭东
     * @date   : 2023-08-24 13:19
     */
    List<Map<String, Object>> getWorkTeamByMap(Map map);

    /**
     * @desc   : 通过Id查询
     * @author : 洪旭东
     * @date   : 2023-02-09 14:13
     */
    UserResponse selectById(Long id);

    /**
     * @desc   : 修改用户密码
     * @author : 夏常明
     * @date   : 2023/2/9 13:13
     */
    int updateUsersPwd(com.dk.mdm.model.vo.core.UserVO userVO);

    /**
     * @desc   : 批量解锁用户
     * @author : 夏常明
     * @date   : 2023/2/9 14:53
     */
    int unLocks(com.dk.mdm.model.vo.core.UserVO userVO);

    /**
     * @desc   : 修改用户启用状态
     * @author : 夏常明
     * @date   : 2023/2/10 9:49
     */
    int updateEnable(UserVO userVO);

    /**
     * @desc   : 新建时，通过序列获取用户id
     * @author : 姜宁
     * @date   : 2023/2/13 9:20
     */
    Integer selectUserIdBySeq();

    /**
     * @desc   : 通过生产工号查询ID
     * @author : 洪旭东
     * @date   : 2023-03-01 16:31
     */
    Integer selectByProdCode(@Param("userCode") String userCode, @Param("ftyId") Integer ftyId);
}

