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

import com.alibaba.fastjson.JSONArray;
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.roleModule.dao.IRoleModuleMapper;
import com.hzya.frame.sys.roleModule.entity.RoleModule;
import com.hzya.frame.sys.user.dao.IUserMapper;
import com.hzya.frame.sys.user.entity.User;
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.web.entity.BaseResult;
import org.springframework.stereotype.Service;
import com.hzya.frame.serviceUtil.ServiceUtil;
import com.hzya.frame.sys.role.entity.Role;
import com.hzya.frame.sys.role.service.IRoleService;
import com.hzya.frame.sys.role.dao.IRoleMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.hzya.frame.web.entity.JsonResultEntity;

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

/**
 * @description: 角色  service
 * @tableName:   sys_role
 * @entityName:  Role
 * @author: 	 gjh
 * @history:	 1.0
 */
@Service(value="roleService")
public class  RoleServiceImpl extends ServiceUtil implements IRoleService{
	private final Logger logger = LoggerFactory.getLogger(this.getClass());

	@Resource
	protected IRoleMapper  roleMapper;
	@Resource
	protected IModuleMapper moduleMapper;
	@Resource
	protected IOrgMapper orgMapper;
	@Resource
	protected IRoleModuleMapper roleModuleMapper;
	@Resource
	protected IUserRoleMapper userRoleMapper;
	@Resource
	protected IUserMapper userMapper;
	///**
	// * @Author lvleigang
	// * @Description  查询所有角色List分页
	// * @Date 3:38 下午 2023/6/16
	// * @param object
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// **/
	//@Override
	//public JsonResultEntity queryList(JSONObject object) {
	//	Role entity = getData("jsonStr",object,Role.class);
	//	List<ViewFiled> viewFiledList  = getUserViewFiled("role");
	//	entity.setSts("Y");
	//	entity.setViewFiledList(viewFiledList);
	//	PageHelper.startPage(entity.getPageNum(), entity.getPageSize());
	//	List<Role> roleList = roleMapper.entity_list_like(entity);
	//	PageInfo pageInfo = new PageInfo(roleList);
	//
	//	if(roleList != null && roleList.size() > 0){
	//		for (int i = 0; i < roleList.size(); i++) {
	//			if(roleList.get(i).getOrgAccountId() != null && !"".equals(roleList.get(i).getOrgAccountId())){
	//				Org org = orgMapper.entity_get(roleList.get(i).getOrgAccountId());
	//				if(org != null){
	//					roleList.get(i).setOrgName(org.getOrgName());
	//				}
	//			}
	//		}
	//	}
	//	return BaseResult.getSuccessMessageEntity("查询角色成功",pageInfo);
	//}
	//
	///**
	// * @Author lvleigang
	// * @Description  查询所有角色List分页
	// * @Date 3:38 下午 2023/6/16
	// * @param object
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// **/
	//@Override
	//public JsonResultEntity queryAll(JSONObject object) {
	//	Role entity = getData("jsonStr",object,Role.class);
	//	List<ViewFiled> viewFiledList  = getUserViewFiled("role");
	//	entity.setSts("Y");
	//	entity.setViewFiledList(viewFiledList);
	//	List<Role> roleList = roleMapper.entity_list_like(entity);
	//	return BaseResult.getSuccessMessageEntity("查询角色成功",roleList);
	//}
	///**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 查询组织机构
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity queryEntity(JSONObject jsonObject) {
	//	Role entity = getData("jsonStr",jsonObject,Role.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("角色为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("角色id为空");
	//	}
	//	entity = roleMapper.entity_get(entity.getId());
	//	return BaseResult.getSuccessMessageEntity("查询角色成功",entity);
	//}
	///**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 查询组织机构
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity queryEntityAndModuleTree(JSONObject jsonObject) {
	//	Role entity = getData("jsonStr",jsonObject,Role.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("角色为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("角色id为空");
	//	}
	//	entity = roleMapper.entity_get(entity.getId());
	//	List<Module> modules = getModuleTree();
	//	RoleModule roleModule = new RoleModule();
	//	roleModule.setRoleId(entity.getId());
	//	roleModule.setSts("Y");
	//	List<RoleModule>  roleModules = roleModuleMapper.entity_list_base(roleModule);
	//	checkModule(modules,roleModules);
	//	entity.setModules(modules);
	//	return BaseResult.getSuccessMessageEntity("查询角色成功",entity);
	//}
	//
	///**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 根据角色id查询菜单树
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity queryRoleModuleTree(JSONObject jsonObject) {
	//	Role entity = getData("jsonStr",jsonObject,Role.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("角色为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("角色id为空");
	//	}
	//	List<Module> modules = getModuleTree();
	//	RoleModule roleModule = new RoleModule();
	//	roleModule.setRoleId(entity.getId());
	//	roleModule.setSts("Y");
	//	List<RoleModule>  roleModules = roleModuleMapper.entity_list_base(roleModule);
	//	checkModule(modules,roleModules);
	//	return BaseResult.getSuccessMessageEntity("根据角色id查询菜单树成功",modules);
	//}
	//
	///**
	// * @Author lvleigang
	// * @Description  设置菜单选中状态
	// * @Date 3:57 下午 2023/6/16
	// * @param modules
	// * @param roleModules
	// * @return void
	// **/
	//private void checkModule(List<Module> modules, List<RoleModule> roleModules) {
	//	if(modules == null || modules.size() == 0){
	//		return;
	//	}
	//	for (int i = 0; i < modules.size(); i++) {
	//		modules.get(i).setIfCheck(false);
	//		if(roleModules != null && roleModules.size() > 0){
	//			for (int i1 = 0; i1 < roleModules.size(); i1++) {
	//				if(modules.get(i).getId().equals(roleModules.get(i1).getModuleId())){
	//					modules.get(i).setIfCheck(true);
	//				}
	//			}
	//		}
	//		checkModule(modules.get(i).getChildren(),roleModules);
	//	}
	//}
	//
	///**
	// * @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 jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 新增角色
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity addEntity(JSONObject jsonObject) {
	//	Role entity = getData("jsonStr",jsonObject,Role.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("角色为空");
	//	}
	//	entity.setCreate();
	//	if(entity.getRoleCode() == null || "".equals(entity.getRoleCode()) ){
	//		return BaseResult.getFailureMessageEntity("角色编码为空");
	//	}
	//	if(entity.getRoleName() == null || "".equals(entity.getRoleName()) ){
	//		return BaseResult.getFailureMessageEntity("角色名称为空");
	//	}
	//	Role checkEntity = new Role();
	//	checkEntity.setRoleCode(entity.getRoleCode());
	//	checkEntity.setSts("Y");
	//	//校验编码唯一
	//	if(roleMapper.entity_count(checkEntity) > 0){
	//		return BaseResult.getFailureMessageEntity("角色编码已存在");
	//	}
	//	roleMapper.entity_insert(entity);
	//	return BaseResult.getSuccessMessageEntity("新增角色成功");
	//}
	//
	///**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 修改角色
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity updateEntity(JSONObject jsonObject) {
	//	Role entity = getData("jsonStr",jsonObject,Role.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("角色为空");
	//	}
	//	entity.setUpdate();
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("角色ID为空");
	//	}
	//	if(entity.getRoleCode() == null || "".equals(entity.getRoleCode()) ){
	//		return BaseResult.getFailureMessageEntity("角色编码为空");
	//	}
	//	Role checkEntity = new Role();
	//	checkEntity.setRoleCode(entity.getRoleCode());
	//	checkEntity.setId(entity.getId());
	//	checkEntity.setSts("Y");
	//	//校验编码唯一
	//	if(roleMapper.entity_count(checkEntity) != 1){
	//		return BaseResult.getFailureMessageEntity("角色编码不允许修改");
	//	}
	//	roleMapper.entity_update(entity);
	//	return BaseResult.getSuccessMessageEntity("修改角色成功");
	//}
	//
	//	/**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 新增或修改角色菜单
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity addOrUpdateRoleModule(JSONObject jsonObject) {
	//	Role entity = getData("jsonStr",jsonObject,Role.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("角色为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("角色ID为空");
	//	}
	//	//先删除原先的角色菜单
	//	RoleModule roleModule = new RoleModule();
	//	roleModule.setRoleId(entity.getId());
	//	roleModule.setUpdate();
	//	roleModule.setSts("Y");
	//	roleModuleMapper.entity_logicDelete_Multi_Condition(roleModule);
	//	//添加角色菜单
	//	List<String> roleModules = entity.getModulesIds();
	//	if(roleModules != null && roleModules.size() > 0){
	//		for (int i = 0; i < roleModules.size(); i++) {
	//			RoleModule updateS = new RoleModule();
	//			updateS.setCreate();
	//			updateS.setRoleId(entity.getId());
	//			updateS.setModuleId(roleModules.get(i));
	//			roleModuleMapper.entity_insert(updateS);
	//		}
	//	}
	//	return BaseResult.getSuccessMessageEntity("新增或修改角色菜单成功");
	//}
	//
	///**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 删除角色（真删）
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity delectEntity(JSONObject jsonObject) {
	//	//删除菜单树
	//	return doDelectEntity(jsonObject,"1");
	//}
	//
	//
	///**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 删除角色（逻辑删除）
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity logicDelectEntity(JSONObject jsonObject) {
	//	//删除菜单树
	//	return doDelectEntity(jsonObject,"2");
	//}
	//
	///**
	// * @Author lvleigang
	// * @Description  删除角色
	// * @Date 2:51 下午 2023/6/14
	// * @param jsonObject
	// * @param type 1\真删 2\逻辑删除
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// **/
	//private JsonResultEntity doDelectEntity(JSONObject jsonObject, String type) {
	//	Role entity = getData("jsonStr",jsonObject,Role.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("角色为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("角色ID为空");
	//	}
	//	//最后删除最上面的节点
	//	if("1".equals(type)){
	//		roleMapper.entity_delete(entity);
	//	}else {
	//		entity.setUpdate();
	//		roleMapper.entity_logicDelete(entity);
	//	}
	//
	//	//删除角色菜单
	//	RoleModule roleModule = new RoleModule();
	//	roleModule.setRoleId(entity.getId());
	//	roleModule.setUpdate();
	//	roleModuleMapper.entity_logicDelete_Multi_Condition(roleModule);
	//	return BaseResult.getSuccessMessageEntity("删除角色成功");
	//}
	//
	///**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 查询角色下的用户
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity queryRoleUser(JSONObject jsonObject) {
	//	Role entity = getData("jsonStr",jsonObject,Role.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.setRoleId(entity.getId());
	//	List<UserRole> userRoles = userRoleMapper.entity_list_base(userRole);
	//	List<User> users = new ArrayList<>();
	//	if(userRoles != null && userRoles.size() > 0){
	//		User user = new User();
	//		user.setUserRoles(userRoles);
	//		user.setSts("Y");
	//		users = userMapper.entity_list_base(user);
	//	}
	//
	//	return BaseResult.getSuccessMessageEntity("查询角色下的用户成功",users);
	//}	/**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 新增角色用户
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity addRoleUser(JSONObject jsonObject) {
	//	Role entity = getData("jsonStr",jsonObject,Role.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.setRoleId(entity.getId());
	//	userRole.setUpdate();
	//	userRoleMapper.entity_logicDelete_Multi_Condition(userRole);
	//	if(entity.getUserIds() != null && entity.getUserIds().size() > 0){
	//		for (int i = 0; i < entity.getUserIds().size(); i++) {
	//			UserRole updateUser = new UserRole();
	//			updateUser.setCreate();
	//			updateUser.setRoleId(entity.getId());
	//			updateUser.setUserId(entity.getUserIds().get(i));
	//			userRoleMapper.entity_insert(updateUser);
	//		}
	//	}
	//	return BaseResult.getSuccessMessageEntity("新增角色下的用户成功");
	//}



}
