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

import cn.dev33.satoken.stp.StpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hzya.frame.sys.module.entity.Meta;
import com.hzya.frame.sys.module.entity.ModuleVo;
import com.hzya.frame.sys.roleModule.dao.IRoleModuleMapper;
import com.hzya.frame.sys.roleModule.entity.RoleModule;
import com.hzya.frame.sys.testReturn.entity.TestReturn;
import com.hzya.frame.sys.testReturn.service.ITestReturnService;
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.module.entity.Module;
import com.hzya.frame.sys.module.service.IModuleService;
import com.hzya.frame.sys.module.dao.IModuleMapper;
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;
import java.util.Map;

/**
 * @description: 菜单表  service
 * @tableName: sys_module
 * @entityName: Module
 * @author: gjh
 * @history: 1.0
 */
@Service(value = "moduleService")
public class ModuleServiceImpl extends ServiceUtil implements IModuleService {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Resource
    protected IModuleMapper moduleMapper;

    @Resource
    protected IRoleModuleMapper roleModuleMapper;

    ///**
    // * @param jsonObject
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 根据用户id查询菜单树
    // * @Date 9:40 上午 2022/12/7
    // **/
    //@Override
    //public JsonResultEntity queryTreeById(JSONObject jsonObject) {
    //	//1、查询用户角色
	//	RoleModule roleModule = new RoleModule();
	//	roleModule.setUserId(String.valueOf( StpUtil.getLoginId()));
	//	List<RoleModule> roleModules = roleModuleMapper.getByUserId(roleModule);
	//	List<ModuleVo> returnModuleVo = new ArrayList<>();
	//	if(roleModules != null && roleModules.size() > 0){
	//		Module entity = new Module();
	//		entity.setSts("Y");
	//		entity.setLvl("0");
	//		entity.setRoleModules(roleModules);
	//		List<Module> modules = moduleMapper.entity_list_base(entity);
	//		//递归查询
	//		recursiveQueryMenuTree(modules,roleModules);
	//		returnModuleVo = getReturnModuleVo(modules);
	//	}
	//	return BaseResult.getSuccessMessageEntity("查询菜单树成功",returnModuleVo);
    //}
	//
    ///**
    // * @param jsonObject
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 查询所有菜单List
    // * @Date 9:40 上午 2022/12/7
    // **/
    //@Override
    //public JsonResultEntity queryList(JSONObject jsonObject) {
	//	Module entity = getData("jsonStr",jsonObject,Module.class);
	//	List<ViewFiled> viewFiledList  = getUserViewFiled("module");
	//	entity.setSts("Y");
	//	entity.setViewFiledList(viewFiledList);
	//	PageHelper.startPage(entity.getPageNum(), entity.getPageSize());
	//	List<Module> modules = moduleMapper.entity_list_like(entity);
	//	PageInfo pageInfo = new PageInfo(modules);
	//
	//	return BaseResult.getSuccessMessageEntity("查询菜单成功",pageInfo);
    //}
	//
	//
	//
	///**
    // * @param jsonObject
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 查询所有菜单树
    // * @Date 9:40 上午 2022/12/7
    // **/
    //@Override
    //public JsonResultEntity queryTree(JSONObject jsonObject) {
	//	Module entity = new Module();
	//	entity.setSts("Y");
	//	entity.setLvl("0");
	//	List<Module> modules = moduleMapper.entity_list_base(entity);
	//	//递归查询
	//	recursiveQueryMenuTree(modules,null);
	//	//List<ModuleVo> returnModuleVo = getReturnModuleVo(modules);
	//	return BaseResult.getSuccessMessageEntity("查询菜单树成功",modules);
    //}
	//
    ///**
    // * @Author lvleigang
    // * @Description  循环设置返回
    // * @Date 5:24 下午 2023/6/15
    // * @param modules
    // * @return java.util.List<com.hzya.frame.sys.module.entity.ModuleVo>
    // **/
	//private List<ModuleVo> getReturnModuleVo(List<Module> modules) {
	//	List<ModuleVo> moduleVoList = new ArrayList<>();
	//	if(modules != null && modules.size() > 0){
	//		for (int i = 0; i < modules.size(); i++) {
	//			ModuleVo moduleVo = new ModuleVo();
	//			moduleVo.setId(modules.get(i).getId());
	//			moduleVo.setPath(modules.get(i).getPath());
	//			moduleVo.setName(modules.get(i).getName());
	//			moduleVo.setLabel(modules.get(i).getLabel());
	//			moduleVo.setComponent(modules.get(i).getComponent());
	//			moduleVo.setHidden(Boolean.valueOf(modules.get(i).getHidden()));
	//			moduleVo.setRedirect(modules.get(i).getRedirect());
	//			moduleVo.setAlwaysShow(Boolean.valueOf(modules.get(i).getAlwaysShow()));
	//			JSONObject meta = new JSONObject();
	//			meta.put("title",modules.get(i).getTitle());
	//			meta.put("icon",modules.get(i).getIcon());
	//			meta.put("noCache",Boolean.valueOf(modules.get(i).getNoCache()));
	//			meta.put("hidden",Boolean.valueOf(modules.get(i).getHidden()));
	//			if(modules.get(i).getOptions() != null && !"".equals(modules.get(i).getOptions())){
	//				Map<String, Object> map = JSONObject.parseObject(modules.get(i).getOptions(), new TypeReference<Map<String, Object>>(){});
	//				if(map != null && map.size() > 0){
	//					meta.putAll(map);
	//				}
	//			}
	//			moduleVo.setMeta(meta);
	//			moduleVo.setChildren(getReturnModuleVo(modules.get(i).getChildren()));
	//			moduleVoList.add(moduleVo);
	//		}
	//	}
	//	return moduleVoList;
	//}
	//
	///**
    // * @param jsonObject
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 新增菜单
    // * @Date 9:40 上午 2022/12/7
    // **/
    //@Override
    //public JsonResultEntity addModule(JSONObject jsonObject) {
	//	Module entity = getData("jsonStr",jsonObject,Module.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("菜单为空");
	//	}
	//	entity.setCreate();
	//	if(entity.getCode() == null || "".equals(entity.getCode()) ){
	//		return BaseResult.getFailureMessageEntity("菜单编码为空");
	//	}
	//	Module checkEntity = new Module();
	//	checkEntity.setCode(entity.getCode());
	//	checkEntity.setSts("Y");
	//	//校验编码唯一
	//	if(moduleMapper.entity_count(checkEntity) > 0){
	//		return BaseResult.getFailureMessageEntity("菜单编码已存在");
	//	}
	//	if(entity.getFormType() == null){
	//		entity.setFormType("0");
	//	}
	//	moduleMapper.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 updateModule(JSONObject jsonObject) {
	//	Module entity = getData("jsonStr",jsonObject,Module.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("菜单为空");
	//	}
	//	entity.setUpdate();
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("菜单ID为空");
	//	}
	//	if(entity.getCode() == null || "".equals(entity.getCode()) ){
	//		return BaseResult.getFailureMessageEntity("组织机构编码为空");
	//	}
	//	Module checkEntity = new Module();
	//	checkEntity.setCode(entity.getCode());
	//	checkEntity.setId(entity.getId());
	//	checkEntity.setSts("Y");
	//	//校验编码唯一
	//	if(moduleMapper.entity_count(checkEntity) != 1){
	//		return BaseResult.getFailureMessageEntity("菜单编码不允许修改");
	//	}
	//	moduleMapper.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 delectModuleTree(JSONObject jsonObject) {
    //	//删除菜单树
    //	return doDelectModuleTree(jsonObject,"1");
    //}
	//
	//
	///**
    // * @param jsonObject
    // * @return com.hzya.frame.web.entity.JsonResultEntity
    // * @Author lvleigang
    // * @Description 删除菜单（逻辑删除）
    // * @Date 9:40 上午 2022/12/7
    // **/
    //@Override
    //public JsonResultEntity logicDelectModuleTree(JSONObject jsonObject) {
	//	//删除菜单树
	//	return doDelectModuleTree(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 doDelectModuleTree(JSONObject jsonObject, String type) {
	//	Module entity = getData("jsonStr",jsonObject,Module.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("菜单为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("菜单ID为空");
	//	}
	//	Module queryModule = new Module();
	//	queryModule.setId(entity.getId());
	//	queryModule.setSts("Y");
	//	List<Module> modules = moduleMapper.entity_list_base(queryModule);
	//	//调用方法递归去查询删除
	//	recursiveDelectMenuTree(modules,type);
	//	//最后删除最上面的节点
	//	if("1".equals(type)){
	//		moduleMapper.entity_delete(queryModule);
	//	}else {
	//		queryModule.setUpdate();
	//		moduleMapper.entity_logicDelete(queryModule);
	//
	//	}
	//	return BaseResult.getSuccessMessageEntity("删除菜单树成功");
	//}
	///**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 查询菜单
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity queryModule(JSONObject jsonObject) {
	//	Module entity = getData("jsonStr",jsonObject,Module.class);
	//	if(entity == null ){
	//		return BaseResult.getFailureMessageEntity("菜单为空");
	//	}
	//	if(entity.getId() == null || "".equals(entity.getId()) ){
	//		return BaseResult.getFailureMessageEntity("菜单id为空");
	//	}
	//
	//	entity = moduleMapper.entity_get(entity.getId());
	//	return BaseResult.getSuccessMessageEntity("查询菜单成功",entity);
	//}
	//
	//
	///**
	// * @return void
	// * @Author lvleigang
	// * @Description 递归查询菜单
	// * @Date 9:21 上午 2022/12/14
	// **/
	//private void recursiveQueryMenuTree(List<Module> modules,List<RoleModule> roleModules ) {
	//	//判断是否有数据
	//	if (modules != null && modules.size() > 0) {
	//		for (int i = 0; i < modules.size(); i++) {
	//			Module entity = new Module();
	//			entity.setSts("Y");
	//			entity.setRoleModules(roleModules);
	//			entity.setUpIds(modules.get(i).getId());
	//			List<Module> childModule = moduleMapper.entity_list_base(entity);
	//			//查询数据
	//			if (childModule != null && childModule.size() > 0) {
	//				//递归调用
	//				recursiveQueryMenuTree(childModule,roleModules);
	//				//设置下级菜单
	//				modules.get(i).setChildren(childModule);
	//			}
	//		}
	//	}
	//}
	//
	///**
	// * @param mapList
	// * @param type
	// * @return void
	// * @Author lvleigang
	// * @Description 调用方法递归去查询删除
	// * @Date 10:50 上午 2022/12/14
	// **/
	//private void recursiveDelectMenuTree(List<Module> mapList,String type) {
	//	//判断是否有数据
	//	if (mapList != null && mapList.size() > 0) {
	//		for (int i = 0; i < mapList.size(); i++) {
	//			//查询上级数据
	//			Module queryModule = new Module();
	//			queryModule.setUpIds(mapList.get(i).getId());
	//			queryModule.setSts("Y");
	//			List<Module> childList = moduleMapper.entity_list_base(queryModule);
	//			//查询数据
	//			if (childList != null && childList.size() > 0) {
	//				//递归调用
	//				recursiveDelectMenuTree(childList, type);
	//			}
	//			//最后删除最上面的节点
	//			Module delectModule = new Module();
	//			delectModule.setId(mapList.get(i).getId());
	//			delectModule.setSts("Y");
	//			if("1".equals(type)){
	//				moduleMapper.entity_delete(delectModule);
	//			}else {
	//				delectModule.setUpdate();
	//				moduleMapper.entity_logicDelete(delectModule);
	//			}
	//		}
	//	}
	//}
	//@Resource
	//private ITestReturnService testReturnService;
	///**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 根据用户id查询菜单树
	// * @Date 9:48 上午 2023/6/29
	// **/
	//@Override
	//public JsonResultEntity queryTest(JSONObject jsonObject) {
	//	TestReturn testReturn = new TestReturn();
	//	testReturn.setType("all");
	//	testReturn = testReturnService.getEntity(testReturn);
	//	if (testReturn != null && testReturn.getValue() != null) {
	//		JSONObject object = JSONObject.parseObject(testReturn.getValue());
	//		return BaseResult.getSuccessMessageEntity("获取成功", object);
	//	} else {
	//		return BaseResult.getFailureMessageEntity("请先初始化数据");
	//	}
	//}
	//
	///**
	// * @param jsonObject
	// * @return com.hzya.frame.web.entity.JsonResultEntity
	// * @Author lvleigang
	// * @Description 查询所有菜单List
	// * @Date 9:40 上午 2022/12/7
	// **/
	//@Override
	//public JsonResultEntity queryTypeList(JSONObject jsonObject) {
	//	Module entity = getData("jsonStr",jsonObject,Module.class);
	//	entity.setSts("Y");
	//	List<Module> modules = moduleMapper.entity_list_like(entity);
	//	List<ModuleVo> moduleVos = getReturnModuleVo(modules);
	//	return BaseResult.getSuccessMessageEntity("查询菜单成功",moduleVos);
	//}
}
