package com.gyee.frame.service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.gyee.frame.common.base.BaseService;
import com.gyee.frame.common.support.ConvertUtil;
import com.gyee.frame.mapper.auto.TvueRoleUserMapper;
import com.gyee.frame.mapper.auto.TvueRoleMapper;
import com.gyee.frame.mapper.auto.TvueUserMapper;
import com.gyee.frame.mapper.custom.RoleVueDao;
import com.gyee.frame.mapper.custom.TvueUserDao;
import com.gyee.frame.model.auto.*;
import com.gyee.frame.model.custom.RoleVo;
import com.gyee.frame.model.custom.Tablepar;
import com.gyee.frame.util.MD5Util;
import com.gyee.frame.util.SnowflakeIdWorker;
import com.gyee.frame.util.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 系统用户
 * @ClassName: SysUserService
 * @author gyee
 * @date 2018年8月26日
 *
 */
@Service
public class VueUserService implements BaseService<TvueUser, TvueUserExample>{
	//生成的用户dao
	@Resource
	private TvueUserMapper tvueUserMapper;
	
	//生成的角色用户dao
	@Resource
	private TvueRoleUserMapper tvueRoleUserMapper;
	
	//自定义角色dao
	@Resource
	private RoleVueDao roleVueDao;
	
	//自动生成的角色dao
	@Resource
	private TvueRoleMapper tvueRoleMapper;
	
	//自定义用户dao
	@Resource
	private TvueUserDao tvueUserDao ;
	
	/**
	 * 分页查询
	 * @return
	 */
	 public PageInfo<TvueUser> list(Tablepar tablepar,String username){
//	        TvueUserExample testExample=new TvueUserExample();
//	        testExample.setOrderByClause("id+0 DESC");
//	        if(username!=null&&!"".equals(username)){
//	        	testExample.createCriteria().andUsernameLike("%"+username+"%");
//	        }
//
//	        PageHelper.startPage(tablepar.getPageNum(), tablepar.getPageSize());
//	        List<TvueUser> list= tvueUserMapper.selectByExample(testExample);
//	        PageInfo<TvueUser> pageInfo = new PageInfo<TvueUser>(list);
//	        return  pageInfo;
		 PageHelper.startPage(tablepar.getPageNum(), tablepar.getPageSize());
		 List<TvueUser> list= tvueUserDao.queryVueUserInfo(username);
		 PageInfo<TvueUser> pageInfo = new PageInfo<TvueUser>(list);
		 return  pageInfo;
	 }

	
	@Override
	public int deleteByPrimaryKey(String ids) {
		List<String> lista=ConvertUtil.toListStrArray(ids);
		TvueUserExample example=new TvueUserExample();
		example.createCriteria().andIdIn(lista);
		return tvueUserMapper.deleteByExample(example);
	}
	
	/**
	 * 添加用户
	 */
	@Override
	public int insertSelective(TvueUser record) {
		return tvueUserMapper.insertSelective(record);
	}
	
	/**
	 * 添加用户跟角色信息
	 * @param record
	 * @param roles
	 * @return
	 */
	@Transactional
	public int insertUserVueRoles(TvueUser record,List<String> roles) {
		String userid=SnowflakeIdWorker.getUUID();
		record.setId(userid);
		if(StringUtils.isNotEmpty(roles)){
			 for (String rolesid : roles) {
				 TvueRoleUser roleUser=new TvueRoleUser(SnowflakeIdWorker.getUUID(), userid,rolesid);
				 tvueRoleUserMapper.insertSelective(roleUser);
			}
		}
		
		//密码加密
		record.setPassword(MD5Util.encode(record.getPassword()));
		return tvueUserMapper.insertSelective(record);
	}
	
	@Override
	public TvueUser selectByPrimaryKey(String id) {
		
		return tvueUserMapper.selectByPrimaryKey(id);
	}

	
	@Override
	public int updateByPrimaryKeySelective(TvueUser record) {
		record.setPassword(MD5Util.encode(record.getPassword()));
		return tvueUserMapper.updateByPrimaryKeySelective(record);
	}
	
	
	

	
	@Override
	public int updateByExampleSelective(TvueUser record, TvueUserExample example) {
		
		return tvueUserMapper.updateByExampleSelective(record, example);
	}

	
	@Override
	public int updateByExample(TvueUser record, TvueUserExample example) {
		
		return tvueUserMapper.updateByExample(record, example);
	}

	@Override
	public List<TvueUser> selectByExample(TvueUserExample example) {
		
		return tvueUserMapper.selectByExample(example);
	}

	
	@Override
	public long countByExample(TvueUserExample example) {
		
		return tvueUserMapper.countByExample(example);
	}

	
	@Override
	public int deleteByExample(TvueUserExample example) {
		
		return tvueUserMapper.deleteByExample(example);
	}
	
	/**
	 * 检查用户name
	 * @param tsysUser
	 * @return
	 */
	public int checkLoginNameUnique(TvueUser tsysUser){
		TvueUserExample example=new TvueUserExample();
		example.createCriteria().andUsernameEqualTo(tsysUser.getUsername());
		List<TvueUser> list=tvueUserMapper.selectByExample(example);
		
		return list.size();
	}
	
	/**
	 * 获取所有权限 并且增加是否有权限字段
	 * @return
	 */
	public List<RoleVo> getUserVueIsRole(String userid){
		List<RoleVo> list=new ArrayList<RoleVo>();
		//查询出我的权限
		List<TvueRole> myRoles= roleVueDao.queryUserRole(userid);
		TvueRoleExample tvueRoleExample=new TvueRoleExample();
		//查询系统所有的角色
		List<TvueRole> tvueRoles=tvueRoleMapper.selectByExample(tvueRoleExample);
		if(StringUtils.isNotEmpty(tvueRoles)){
			for (TvueRole tvueRole : tvueRoles) {
				Boolean isflag=false;
				RoleVo roleVo=new RoleVo(tvueRole.getId(),tvueRole.getName(), isflag);
				for (TvueRole myRole : myRoles) {
					if(tvueRole.getId().equals(myRole.getId())){
						isflag=true;
						break;
					}
				}
				if(isflag){
					roleVo.setIscheck(true);
					list.add(roleVo);
				}else{
					list.add(roleVo);
				}
			}
		}
		return list;
	}
	
	
	/**
	 * 修改用户密码
	 * @param record
	 * @return
	 */
	public int updateUserVuePassword(TvueUser record) {
		record.setPassword(MD5Util.encode(record.getPassword()));
		//修改用户信息
		return tvueUserMapper.updateByPrimaryKeySelective(record);
	}
	
	
	/**
	 * 修改用户信息以及角色信息
	 * @param record
	 * @param roles
	 * @return
	 */
	@Transactional
	public int updateUserVueRoles(TvueUser record,List<String> roles) {
		
		
		
		//先删除这个用户的所有角色
		TvueRoleUserExample tVueRoleUserExample=new TvueRoleUserExample();
		tVueRoleUserExample.createCriteria().andSysUserIdEqualTo(record.getId());
		tvueRoleUserMapper.deleteByExample(tVueRoleUserExample);
		if(roles!=null) {
			//添加新的角色信息
			for (String role : roles) {
				TvueRoleUser tVueRoleUser= new TvueRoleUser(SnowflakeIdWorker.getUUID(), record.getId(), role);
				tvueRoleUserMapper.insertSelective(tVueRoleUser);
			}
		}
		//修改用户信息
		return tvueUserMapper.updateByPrimaryKeySelective(record);
	}

	/**
	 *
	 * @param username
	 * @return
	 */
	public TvueUser findUser(String username) {
		TvueUserExample example=new TvueUserExample();
		example.createCriteria().andUsernameEqualTo(username);
		List<TvueUser> list=tvueUserMapper.selectByExample(example);
		if(null == list || list.size()<=0){
			return null;
		}
		return list.get(0);
	}

	/**
	 *
	 * @param username
	 * @return
	 */
	public TvueUser findUser(String username,String password) {
		TvueUserExample example=new TvueUserExample();
		example.createCriteria().andUsernameEqualTo(username);
		example.createCriteria().andPasswordEqualTo(password);
		List<TvueUser> list=tvueUserMapper.selectByExample(example);
		if(null == list || list.size()<=0){
			return null;
		}
		return list.get(0);
	}

}
