//package com.rrtx.services.common.runner;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.rrtx.fap.starter.translate.convert.DictType;
//import com.rrtx.services.common.constant.Constant;
//import com.rrtx.services.common.properties.ConfigProperties;
//import com.rrtx.services.db.entity.SysDict;
//import com.rrtx.services.db.entity.SysDictDetail;
//import com.rrtx.services.db.entity.TFieldLanguage;
//import com.rrtx.services.db.service.ISysDictDetailService;
//import com.rrtx.services.db.service.ISysDictService;
//import com.rrtx.services.db.service.ITFieldLanguageService;
//import com.rrtx.services.service.IRedisService;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.boot.ApplicationArguments;
//import org.springframework.boot.ApplicationRunner;
//import org.springframework.context.ConfigurableApplicationContext;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Component;
//
//import java.net.InetAddress;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
///**
// * ClassName: FebsStartedUpRunner<br>
// * Description: FebsStartedUpRunner <br>
// * Company: rrtx
// *
// * @author rrtx
// * @version v1.0.0    2019/7/24 5:04 PM  xugz    文件初始创建
// */
//@Slf4j
//@Component
//public class FebsStartedUpRunner implements ApplicationRunner {
//
//	@Autowired
//	private ConfigurableApplicationContext context;
//	@Autowired
//	private ConfigProperties configProperties;
//	@Autowired
//	private IRedisService redisService;
//	@Autowired
//	private RedisTemplate redisTemplate;
//	@Autowired
//	private ISysDictService dictService;
//	@Autowired
//	private ISysDictDetailService dictDetailService;
//
//	@Value("${server.port:8080}")
//	private String port;
//	@Value("${server.servlet.context-path:}")
//	private String contextPath;
//
//	@Autowired
//	private ITFieldLanguageService fieldLanguageService;
//
//	@Override
//	public void run(ApplicationArguments args) throws Exception {
//		try {
//			// 测试 Redis连接是否正常
//			redisService.exists("dhole_test");
//		} catch (Exception e) {
//			log.error(" ____   __    _   _ ");
//			log.error("| |_   / /\\  | | | |");
//			log.error("|_|   /_/--\\ |_| |_|__");
//			log.error("                        ");
//			log.error("Services启动失败，{}", e.getMessage());
//			log.error("Redis连接异常，请检查Redis连接配置并确保Redis服务已启动");
//			// 关闭 FEBS
//			context.close();
//		}
//
//
//		if (context.isActive()) {
//			if (configProperties.isLoadDict()){
//				//加载系统参数
//				loadDict2Redis();
//			}
//
//			InetAddress address = InetAddress.getLocalHost();
//			String url = String.format("http://%s:%s", address.getHostAddress(), port);
//			String loginUrl = configProperties.getShiro().getLoginUrl();
//			if (StringUtils.isNotBlank(contextPath))
//				url += contextPath;
//			if (StringUtils.isNotBlank(loginUrl))
//				url += loginUrl;
//			log.info(" __    ___   _      ___   _     ____ _____  ____ ");
//			log.info("/ /`  / / \\ | |\\/| | |_) | |   | |_   | |  | |_  ");
//			log.info("\\_\\_, \\_\\_/ |_|  | |_|   |_|__ |_|__  |_|  |_|__ ");
//			log.info("                                                      ");
//			log.info("Services系统启动完毕，地址：{}", url);
//		}
//		// 字段
//		List<TFieldLanguage>  fieldLst = fieldLanguageService.list();
//		fieldLst.forEach(fieldDto -> redisService.set(Constant.redisKey4Field(fieldDto.getEkey()), fieldDto));
//	}
//
//	/**
//	 * 加载系统参数&&应用参数&&错误码配置到redis
//	 */
//	private void loadDict2Redis() {
//
//		List<SysDict> dictList = this.dictService.list();
//		Map<String, List<SysDict>> typeMap = dictList.stream().collect(Collectors.groupingBy(SysDict::getDictType));
//		typeMap.forEach((type, typeList)->{
//			List<String> dictCodes = typeList.stream().map(dict -> dict.getDictCode()).collect(Collectors.toList());
//			List<SysDictDetail> details = this.dictDetailService.list(new QueryWrapper<SysDictDetail>().lambda().in(SysDictDetail::getDictCode, dictCodes));
//
//
//			Map<String, List<SysDictDetail>> codeGroup = details.stream().collect(Collectors.groupingBy(SysDictDetail::getDictCode));
//			codeGroup.forEach((code, codeLit) -> {
//				Map<String, List<SysDictDetail>> langGroup = codeLit.stream().collect(Collectors.groupingBy(SysDictDetail::getDictLang));
//				langGroup.forEach((lang, langList) -> {
//					String redisKey = Constant.concatRedisKey(code, type, lang);
//					if (DictType.APP.getType().equals(type)){
//						Map<String, String> map = langList.stream().collect(Collectors.toMap(SysDictDetail::getDictValue,
//								SysDictDetail::getDictLabel));
//						redisTemplate.opsForHash().putAll(redisKey,map);
//					}else {
//						langList.forEach(detail -> redisTemplate.opsForValue().set(redisKey, detail.getDictLabel()));
//					}
//				});
//			});
//		});
//	}
//}
