//package com.yeejoin.amos.boot.module.jczs.biz.listener;
//
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.Collection;
//import java.util.Collections;
//import java.util.HashMap;
//import java.util.HashSet;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//import java.util.stream.Collectors;
//
//import org.eclipse.paho.client.mqttv3.MqttMessage;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//import org.typroject.tyboot.component.emq.EmqxListener;
//import org.typroject.tyboot.core.foundation.context.RequestContext;
//
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
//import com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl;
//import com.yeejoin.amos.boot.module.jczs.biz.utils.DesUtil;
//import com.yeejoin.amos.boot.module.jczs.biz.utils.RedisUtil;
//import com.yeejoin.amos.component.feign.model.FeignClientResult;
//import com.yeejoin.amos.feign.privilege.Privilege;
//import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
//import com.yeejoin.amos.feign.privilege.model.ApplicationModel;
//import com.yeejoin.amos.feign.privilege.model.CompanyModel;
//import com.yeejoin.amos.feign.privilege.model.RoleModel;
//
//import lombok.extern.slf4j.Slf4j;
//
///**
// * @Description: mqtt监听服务
// * @Author: duanwei
// * @Date: 2020/9/15
// */
//@Component
//@Slf4j
//public class BaseEnterpriseMqTtlListener extends EmqxListener {
//	@Value("${amos.secret.key}")
//	String secretKey;
//
//	@Value("${amos.system.user.product:AMOS_STUDIO_WEB}")
//	String product;
//
//	@Value("${amos.system.user.app-key:AMOS_STUDIO}")
//	String appkey;
//	@Autowired
//	RedisUtil redisUtil;
//
//	@Autowired
//	DataDictionaryServiceImpl iDataDictionaryService;
//
//	@Value("${org.filter.group.seq}")
//	private Long groupSeq;
//
//	@Override
//	public void processMessage(String topic, MqttMessage message) throws Exception {
//		System.out.println(message);
//		JSONObject object = null;
//		try {
//			object = JSONObject.parseObject(message.toString());
//		} catch (Exception e) {
//			throw new Exception("公司同步消息解析失败");
//		}
//		RequestContext.setAppKey(appkey);
//		RequestContext.setProduct(product);
//		RequestContext.setToken(String.valueOf(redisUtil.get("platform_token")));
//		FeignClientResult<List<ApplicationModel>> aResult = Privilege.applicationClient.queryAgencyApplications();
//		List<ApplicationModel> aList = aResult.getResult();
////		List<String> appCodes = aList.stream().filter(i -> "监管端,企业端".indexOf(i.getAppName()) != -1)
////				.map(i -> i.getAppCode()).collect(Collectors.toList());
//		FeignClientResult<CompanyModel> cResult = Privilege.companyClient.seleteOne(object.getLong("sequence_nbr"));
//		// FeignClientResult<Collection<CompanyModel>> cResult =
//		// Privilege.companyClient.queryAgencyTree(null);
//		String useCode = object.getString("use_code");
//		// if (useCode == null || !isUse(useCode, cResult.getResult())) {
//		if (cResult.getResult() == null) {
//			CompanyModel companyModel = new CompanyModel();
//			companyModel.setCompanyName(object.getString("use_unit"));
//			companyModel.setParentId(0L);
//			companyModel.setLevel("company");
//			String unitTypes = object.getString("unit_type");
//			companyModel.setCompanyType(unitTypes);
//			// companyModel.setSequenceNbr(object.getLong("sequence_nbr"));
//			companyModel.setCompanyCode(useCode);
//			if (object.getString("supervise_org_code") != null) {
//				FeignClientResult<HashMap<String, Object>> result = Privilege.companyClient
//						.queryByOrgcode(object.getString("supervise_org_code"));
//				// JSONObject parent =
//				// JSONObject.parseObject(JSONObject.toJSONString(result.getResult()));
//				if (result.getResult().get("sequenceNbr") != null) {
//					companyModel.setParentId(Long.valueOf(result.getResult().get("sequenceNbr").toString()));
//				}
//			}
//			FeignClientResult<CompanyModel> createResult = Privilege.companyClient.create(companyModel);
//			Long companySqr = createResult.getResult().getSequenceNbr();
//			String unitCode = object.getString("use_code");
//			if (unitCode == null || unitCode.length() < 6) {
//				log.error("公司统一信用代码长度不够6位");
//				throw new Exception("公司统一信用代码长度不够6位");
//			}
//			String userName = unitCode.substring(unitCode.length() - 6, unitCode.length());
//			FeignClientResult<AgencyUserModel> uResult = Privilege.agencyUserClient.queryByUserName(userName);
//			if (uResult.getResult() == null) {
//				FeignClientResult<List<RoleModel>> roleListResult = Privilege.roleClient.queryRoleList(null, null);
//				List<RoleModel> allRoleList = roleListResult.getResult();
//				AgencyUserModel userModel = new AgencyUserModel();
//				userModel.setUserName(userName);
//				userModel.setRealName(userName);
//				userModel.setPassword(DesUtil.encode(userName, secretKey));
//				userModel.setRePassword(DesUtil.encode(userName, secretKey));
//				// userModel.setMobile(vo.getPhoneNo());
//				userModel.setLockStatus("UNLOCK");
//				// FeignClientResult<List<RoleModel>> list =
//				// Privilege.roleClient.queryRoleList("使用单位", "admin");
//				String[] unitTypeArray = unitTypes.split(",");
//				List<String> unitTypeList = Arrays.asList(unitTypeArray);
//				Set<String> roleNameSet = new HashSet<>();
//				Set<String> appCodesSet = new HashSet<>();
//				List<RoleModel> userRoleList = new ArrayList<>();
//				List<Long> roleIds = new ArrayList<>();
//				Map<Long, List<Long>> roleSeqMap = new HashMap<>();
//				for (String unitTypeStr : unitTypeList) {
//					DataDictionary unitType = iDataDictionaryService
//							.getOne(new LambdaQueryWrapper<DataDictionary>().eq(DataDictionary::getName, unitTypeStr));
//					String appCode = unitType.getTypeDesc() != null ? unitType.getTypeDesc() : "";
//					String[] appCodes = appCode.split(",");
//					Collections.addAll(appCodesSet, appCodes);
//					roleNameSet.add(unitType.getName());
//					userRoleList = allRoleList.stream().filter(r -> r.getRoleName().equals(unitType.getName()))
//							.collect(Collectors.toList());
//					for (RoleModel r : userRoleList) {
//						if (!roleIds.contains(r.getSequenceNbr())) {
//							roleIds.add(r.getSequenceNbr());
//						}
//					}
//					roleSeqMap.put(companySqr, roleIds);
//				}
//				userModel.setAppCodes(new ArrayList<>(appCodesSet));
//				userModel.setOrgRoleSeqs(roleSeqMap);
//				FeignClientResult<AgencyUserModel> userResult = Privilege.agencyUserClient.create(userModel);
//				String[] userIds = { userResult.getResult().getUserId() };
////				if (groupSeq != null) {
////					Privilege.groupUserClient.create(groupSeq, Arrays.asList(userIds));
////				}
//			}
//		}
//	}
//
//	private boolean isUse(String useCode, Collection<CompanyModel> companys) {
//		for (Object obj : companys) {
//			String json = JSONObject.toJSONString(obj);
//			CompanyModel companyMode = JSONObject.toJavaObject(JSONObject.parseObject(json), CompanyModel.class);
//			if (useCode.equals(companyMode.getCompanyCode())) {
//				return true;
//			} else if (companyMode.getChildren() != null) {
//				return isUse(useCode, companyMode.getChildren());
//			}
//		}
//		return false;
//	}
//}
