package com.hzya.frame.sys.user.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hzya.frame.sys.module.dao.IModuleMapper;
import com.hzya.frame.sys.module.entity.Module;
import com.hzya.frame.sys.org.dao.IOrgMapper;
import com.hzya.frame.sys.org.entity.Org;
import com.hzya.frame.sys.role.dao.IRoleMapper;
import com.hzya.frame.sys.role.entity.Role;
import com.hzya.frame.sys.roleModule.entity.RoleModule;
import com.hzya.frame.sys.user.entity.UserDto;
import com.hzya.frame.sys.userModule.dao.IUserModuleMapper;
import com.hzya.frame.sys.userModule.entity.UserModule;
import com.hzya.frame.sys.userOrg.dao.IUserOrgMapper;
import com.hzya.frame.sys.userOrg.entity.UserOrg;
import com.hzya.frame.sys.userRole.dao.IUserRoleMapper;
import com.hzya.frame.sys.userRole.entity.UserRole;
import com.hzya.frame.sys.viewFiled.entity.ViewFiled;
import com.hzya.frame.util.AESUtil;
import com.hzya.frame.web.entity.BaseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hzya.frame.serviceUtil.ServiceUtil;
import com.hzya.frame.sys.user.entity.User;
import com.hzya.frame.sys.user.service.IUserService;
import com.hzya.frame.sys.user.dao.IUserMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.hzya.frame.web.entity.BaseResult;
import com.hzya.frame.web.entity.JsonResultEntity;

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


/**
 * @description: 用户管理  service
 * @tableName: sys_user
 * @entityName: User
 * @author: gjh
 * @history: 1.0
 */
@Service(value = "userService")
public class UserServiceImpl extends ServiceUtil implements IUserService {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
	@Resource
	protected IRoleMapper roleMapper;
    @Resource
    protected IUserMapper userMapper;
    @Resource
    protected IUserOrgMapper userOrgMapper;
	@Resource
	protected IUserRoleMapper userRoleMapper;
	@Resource
	protected IUserModuleMapper userModuleMapper;

	@Resource
	protected IOrgMapper orgMapper;
	@Resource
	protected IModuleMapper moduleMapper;
    ///**
    // * @param object
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 根据id查询用户
    // * @Date 3:38 下午 2023/6/20
    // **/
    //@Override
    //public JsonResultEntity queryEntity(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("用户为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("用户id为空");
	//	}
	//	entity = userMapper.entity_get(entity.getId());
	//	return BaseResult.getSuccessMessageEntity("查询用户成功",entity);
    //}
	//
    ///**
    // * @param object
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 根据用户id查询用户角色
    // * @Date 3:39 下午 2023/6/20
    // **/
    //@Override
    //public JsonResultEntity queryEntityRole(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("用户为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("用户id为空");
	//	}
	//	UserRole userRole = new UserRole();
	//	userRole.setSts("Y");
	//	userRole.setUserId(entity.getId());
	//	List<UserRole>  userRoles = userRoleMapper.entity_list_base(userRole);
	//	List<Role> roleList = null;
	//	if(userRoles != null && userRoles.size() > 0){
	//		Role role = new Role();
	//		role.setSts("Y");
	//		role.setUserRoles(userRoles);
	//		roleList = roleMapper.entity_list_base(role);
	//	}
    //    return BaseResult.getSuccessMessageEntity("查询用户角色成功",roleList);
    //}
	//
    ///**
    // * @param object
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 根据用户id查询菜单树
    // * @Date 3:39 下午 2023/6/20
    // **/
    //@Override
    //public JsonResultEntity queryEntityModuleTree(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("用户为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("用户id为空");
	//	}
	//	List<Module> modules = getModuleTree();
	//	UserModule userModule = new UserModule();
	//	userModule.setUserId(entity.getId());
	//	userModule.setSts("Y");
	//	List<UserModule>  userModules = userModuleMapper.entity_list_base(userModule);
	//	checkModule(modules,userModules);
	//	entity.setModules(modules);
	//	return BaseResult.getSuccessMessageEntity("查询角色菜单成功",entity);
    //}
	///**
	// * @Author lvleigang
	// * @Description  设置菜单选中状态
	// * @Date 3:57 下午 2023/6/16
	// * @param modules
	// * @param userModules
	// * @return void
	// **/
	//private void checkModule(List<Module> modules, List<UserModule> userModules) {
	//	if(modules == null || modules.size() == 0){
	//		return;
	//	}
	//	for (int i = 0; i < modules.size(); i++) {
	//		modules.get(i).setIfCheck(false);
	//		if(userModules != null && userModules.size() > 0){
	//			for (int i1 = 0; i1 < userModules.size(); i1++) {
	//				if(modules.get(i).getId().equals(userModules.get(i1).getModuleId())){
	//					modules.get(i).setIfCheck(true);
	//				}
	//			}
	//		}
	//		checkModule(modules.get(i).getChildren(),userModules);
	//	}
	//}
	///**
	// * @Author lvleigang
	// * @Description  查询菜单树
	// * @Date 3:57 下午 2023/6/16
	// * @param
	// * @return java.util.List<com.hzya.frame.sys.module.entity.Module>
	// **/
	//private List<Module> getModuleTree() {
	//	Module entity = new Module();
	//	entity.setSts("Y");
	//	entity.setLvl("0");
	//	List<Module> modules = moduleMapper.entity_list_base(entity);
	//	//递归查询
	//	recursiveQueryMenuTree(modules);
	//	return modules;
	//}
	///**
	// * @return void
	// * @Author lvleigang
	// * @Description 递归查询菜单
	// * @Date 9:21 上午 2022/12/14
	// **/
	//private void recursiveQueryMenuTree(List<Module> modules) {
	//	//判断是否有数据
	//	if (modules != null && modules.size() > 0) {
	//		for (int i = 0; i < modules.size(); i++) {
	//			Module entity = new Module();
	//			entity.setSts("Y");
	//			entity.setUpIds(modules.get(i).getId());
	//			List<Module> childModule = moduleMapper.entity_list_base(entity);
	//			//查询数据
	//			if (childModule != null && childModule.size() > 0) {
	//				//递归调用
	//				recursiveQueryMenuTree(childModule);
	//				//设置下级菜单
	//				modules.get(i).setChildren(childModule);
	//			}
	//		}
	//	}
	//}
    ///**
    // * @param object
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 根据用户id查询组织机构树（不包含角色的菜单树）
    // * @Date 3:39 下午 2023/6/20
    // **/
    //@Override
    //public JsonResultEntity 	queryEntityOrgTree(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("用户为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("用户id为空");
	//	}
	//	List<Org> orgList = getOrgTree();
	//	UserOrg userOrg = new UserOrg();
	//	userOrg.setUserId(entity.getId());
	//	userOrg.setSts("Y");
	//	List<UserOrg> userOrgs = userOrgMapper.entity_list_base(userOrg);
	//	checkOrg(orgList,userOrgs);
	//	entity.setOrgs(orgList);
	//	return BaseResult.getSuccessMessageEntity("查询角色组织机构成功",entity);
    //}
	///**
	// * @Author lvleigang
	// * @Description  设置菜单选中状态
	// * @Date 3:57 下午 2023/6/16
	// * @param orgs
	// * @param userOrgs
	// * @return void
	// **/
	//private void checkOrg(List<Org> orgs, List<UserOrg> userOrgs) {
	//	if(orgs == null || orgs.size() == 0){
	//		return;
	//	}
	//	for (int i = 0; i < orgs.size(); i++) {
	//		orgs.get(i).setIfCheck(false);
	//		if(userOrgs != null && userOrgs.size() > 0){
	//			for (int i1 = 0; i1 < userOrgs.size(); i1++) {
	//				if(orgs.get(i).getId().equals(userOrgs.get(i1).getOrganizationId())){
	//					orgs.get(i).setIfCheck(true);
	//				}
	//			}
	//		}
	//		checkOrg(orgs.get(i).getChildren(),userOrgs);
	//	}
	//}
	///**
	// * @Author lvleigang
	// * @Description  查询菜单树
	// * @Date 3:57 下午 2023/6/16
	// * @param
	// * @return java.util.List<com.hzya.frame.sys.module.entity.Module>
	// **/
	//private List<Org> getOrgTree() {
	//	Org entity = new Org();
	//	entity.setSts("Y");
	//	entity.setLvl(0L);
	//	List<Org> orgList = orgMapper.entity_list_base(entity);
	//	//递归查询
	//	recursiveQueryOrgTree(orgList);
	//	return orgList;
	//}
	///**
	// * @return void
	// * @Author lvleigang
	// * @Description 递归查询菜单
	// * @Date 9:21 上午 2022/12/14
	// **/
	//private void recursiveQueryOrgTree(List<Org> orgs) {
	//	//判断是否有数据
	//	if (orgs != null && orgs.size() > 0) {
	//		for (int i = 0; i < orgs.size(); i++) {
	//			Org entity = new Org();
	//			entity.setSts("Y");
	//			entity.setUpId(orgs.get(i).getId());
	//			List<Org> childModule = orgMapper.entity_list_base(entity);
	//			//查询数据
	//			if (childModule != null && childModule.size() > 0) {
	//				//递归调用
	//				recursiveQueryOrgTree(childModule);
	//				//设置下级菜单
	//				orgs.get(i).setChildren(childModule);
	//			}
	//		}
	//	}
	//}
    ///**
    // * @param object
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 根据所有用户list分页
    // * @Date 3:39 下午 2023/6/20
    // **/
    //@Override
    //public JsonResultEntity queryList(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	List<ViewFiled> viewFiledList  = getUserViewFiled("user");
	//	entity.setSts("Y");
	//	entity.setViewFiledList(viewFiledList);
	//	PageHelper.startPage(entity.getPageNum(), entity.getPageSize());
	//	List<User> userList = userMapper.entity_list_like(entity);
	//	PageInfo pageInfo = new PageInfo(userList);
	//	return BaseResult.getSuccessMessageEntity("查询用户成功",pageInfo);
    //}
	///**
	// * @param object
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 根据所有用户list分页
	// * @Date 3:39 下午 2023/6/20
	// **/
	//@Override
	//public JsonResultEntity queryAll(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	List<ViewFiled> viewFiledList  = getUserViewFiled("user");
	//	entity.setSts("Y");
	//	entity.setViewFiledList(viewFiledList);
	//	List<User> userList = userMapper.entity_list_like(entity);
	//	return BaseResult.getSuccessMessageEntity("查询用户成功",userList);
	//}
    ///**
    // * @param object
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 新增用户
    // * @Date 3:39 下午 2023/6/20
    // **/
    //@Override
    //public JsonResultEntity addEntity(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("用户为空");
	//	}
	//	entity.setCreate();
	//	if(entity.getMemberCode() == null || "".equals(entity.getMemberCode()) ){
	//		return BaseResult.getFailureMessageEntity("用户编" +
	//				"为空");
	//	}
	//	if(entity.getLoginName() == null || "".equals(entity.getLoginName()) ){
	//		return BaseResult.getFailureMessageEntity("用户登录名为空");
	//	}
	//	if(entity.getPassword() == null || "".equals(entity.getPassword()) ){
	//		return BaseResult.getFailureMessageEntity("用户密码为空");
	//	}
	//	//密码加密
	//	entity.setPassword(AESUtil.encrypt(entity.getPassword()));
	//	User checkEntity = new User();
	//	checkEntity.setLoginName(entity.getLoginName());
	//	checkEntity.setSts("Y");
	//	//校验唯一
	//	if(userMapper.entity_count(checkEntity) > 0){
	//		return BaseResult.getFailureMessageEntity("用户名已存在");
	//	}
	//	userMapper.entity_insert(entity);
	//	return BaseResult.getSuccessMessageEntity("新增用户成功");
    //}
	//
    ///**
    // * @param object
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 修改用户
    // * @Date 3:39 下午 2023/6/20
    // **/
    //@Override
    //public JsonResultEntity updateEntity(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("用户为空");
	//	}
	//	entity.setUpdate();
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("用户id为空");
	//	}
	//	if(entity.getMemberCode() == null || "".equals(entity.getMemberCode()) ){
	//		return BaseResult.getFailureMessageEntity("用户编号为空");
	//	}
	//	if(entity.getLoginName() == null || "".equals(entity.getLoginName()) ){
	//		return BaseResult.getFailureMessageEntity("用户登录名为空");
	//	}
	//	entity.setPassword(null);
	//	User checkEntity = new User();
	//	checkEntity.setLoginName(entity.getLoginName());
	//	checkEntity.setId(entity.getId());
	//	checkEntity.setSts("Y");
	//	//校验编码唯一
	//	if(userMapper.entity_count(checkEntity) != 1){
	//		return BaseResult.getFailureMessageEntity("用户登录名不允许修改");
	//	}
	//	userMapper.entity_update(entity);
	//	return BaseResult.getSuccessMessageEntity("修改用户成功");
    //}
	//
    ///**
    // * @param object
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 删除用户（逻辑删除）
    // * @Date 3:39 下午 2023/6/20
    // **/
    //@Override
    //public JsonResultEntity delectEntity(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("用户为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("用户id为空");
	//	}
	//	entity.setUpdate();
	//	userMapper.entity_logicDelete(entity);
	//	//删除角色
	//	UserRole userRole = new UserRole();
	//	userRole.setUserId(entity.getId());
	//	userRole.setUpdate();
	//	userRoleMapper.entity_logicDelete_Multi_Condition(userRole);
	//	//删除组织机构
	//	UserOrg userOrg = new UserOrg();
	//	userOrg.setUserId(entity.getId());
	//	userOrg.setUpdate();
	//	userOrgMapper.entity_logicDelete_Multi_Condition(userOrg);
	//	//删除菜单
	//	UserModule userModule = new UserModule();
	//	userModule.setUserId(entity.getId());
	//	userModule.setUpdate();
	//	userModuleMapper.entity_logicDelete_Multi_Condition(userModule);
	//	return BaseResult.getSuccessMessageEntity("删除用户成功");
    //}
	//
    ///**
    // * @param object
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 新增或修改用户角色
    // * @Date 3:39 下午 2023/6/20
    // **/
    //@Override
    //public JsonResultEntity addOrUpdateUserRole(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("用户为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("用户ID为空");
	//	}
	//
	//	//先删除原先的角色
	//	UserRole userRole = new UserRole();
	//	userRole.setUserId(entity.getId());
	//	userRole.setUpdate();
	//	userRole.setSts("Y");
	//	userRoleMapper.entity_logicDelete_Multi_Condition(userRole);
	//	//添加角色菜单
	//	List<UserRole> userRoles = entity.getUserRoles();
	//	if(userRoles != null && userRoles.size() > 0){
	//		for (int i = 0; i < userRoles.size(); i++) {
	//			userRoles.get(i).setCreate();
	//			userRoleMapper.entity_insert(userRoles.get(i));
	//		}
	//	}
	//	return BaseResult.getSuccessMessageEntity("新增或修改用户角色成功");
    //}
	//
    ///**
    // * @param object
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 新增或修改用户组织机构
    // * @Date 3:39 下午 2023/6/20
    // **/
    //@Override
    //public JsonResultEntity addOrUpdateUserOrg(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("用户为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("用户ID为空");
	//	}
	//
	//	//先删除原先的组织机构
	//	UserOrg userOrg = new UserOrg();
	//	userOrg.setUserId(entity.getId());
	//	userOrg.setUpdate();
	//	userOrg.setSts("Y");
	//	userOrgMapper.entity_logicDelete_Multi_Condition(userOrg);
	//	//添加角色菜单
	//	List<UserOrg> userOrgs = entity.getUserOrgs();
	//	if(userOrgs != null && userOrgs.size() > 0){
	//		for (int i = 0; i < userOrgs.size(); i++) {
	//			userOrgs.get(i).setCreate();
	//			userOrgMapper.entity_insert(userOrgs.get(i));
	//		}
	//	}
	//	return BaseResult.getSuccessMessageEntity("新增或修改用户组织机构成功");
    //}
	//
    ///**
    // * @param object
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 新增或修改用户菜单
    // * @Date 3:39 下午 2023/6/20
    // **/
    //@Override
    //public JsonResultEntity addOrUpdateUserModule(JSONObject object) {
	//	User entity = getData("jsonStr",object,User.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("用户为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("用户ID为空");
	//	}
	//
	//	//先删除原先的组织机构
	//	UserModule userModule = new UserModule();
	//	userModule.setUserId(entity.getId());
	//	userModule.setUpdate();
	//	userModule.setSts("Y");
	//	userModuleMapper.entity_logicDelete_Multi_Condition(userModule);
	//	//添加角色菜单
	//	List<UserModule> userModules = entity.getUserModules();
	//	if(userModules != null && userModules.size() > 0){
	//		for (int i = 0; i < userModules.size(); i++) {
	//			userModules.get(i).setCreate();
	//			userModuleMapper.entity_insert(userModules.get(i));
	//		}
	//	}
	//	return BaseResult.getSuccessMessageEntity("新增或修改用户菜单成功");
    //}
	///**
	// * @param object
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 修改密码
	// * @Date 3:39 下午 2023/6/20
	// **/
	//@Override
	//public JsonResultEntity updatePassword(JSONObject object) {
	//	UserDto entity = getData("jsonStr",object,UserDto.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("用户为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("用户ID为空");
	//	}
	//	if(entity.getPassword() == null || "".equals(entity.getPassword()) ){
	//		return BaseResult.getFailureMessageEntity("新密码为空");
	//	}
	//	if(entity.getOldPassword() == null || "".equals(entity.getOldPassword()) ){
	//		return BaseResult.getFailureMessageEntity("原密码为空");
	//	}
	//	if(entity.getPassword().equals(entity.getOldPassword())){
	//		return BaseResult.getFailureMessageEntity("新密码和原密码不能一样");
	//
	//	}
	//	User checkEntity = new User();
	//	checkEntity.setPassword(AESUtil.encrypt(entity.getOldPassword()));
	//	checkEntity.setId(entity.getId());
	//	checkEntity.setSts("Y");
	//	//校验编码唯一
	//	if(userMapper.entity_count(checkEntity) != 1){
	//		return BaseResult.getFailureMessageEntity("原密码不一致，请重新输入");
	//	}
	//	User updateEntity = new User();
	//	updateEntity.setUpdate();
	//	updateEntity.setSts("Y");
	//	updateEntity.setId(entity.getId());
	//	updateEntity.setPassword(AESUtil.encrypt(entity.getPassword()));
	//	userMapper.entity_update(updateEntity);
	//	return BaseResult.getSuccessMessageEntity("修改密码成功");
	//
	//}
}
