//package com.lutao.cloud.auth.sso.service;
//
//import cn.hutool.json.JSONUtil;
//import com.lutao.cloud.admin.api.dto.UserDTO;
//import com.lutao.cloud.admin.api.entity.SysDept;
//import com.lutao.cloud.admin.api.entity.SysUser;
//import com.lutao.cloud.admin.api.feign.RemoteDeptService;
//import com.lutao.cloud.admin.api.feign.RemoteUserService;
//import com.lutao.cloud.auth.sso.client.SSOUserSyncHttpClient;
//import com.lutao.cloud.auth.sso.domain.SSOOrgInfo;
//import com.lutao.cloud.auth.sso.domain.SSOSyncDataResponse;
//import com.lutao.cloud.auth.sso.domain.SSOUserInfo;
//import com.lutao.cloud.auth.sso.util.HashUtil;
//import com.lutao.cloud.common.core.constant.CommonConstants;
//import com.lutao.cloud.common.core.constant.SecurityConstants;
//import com.lutao.cloud.common.core.util.CollectionUtil;
//import com.lutao.cloud.common.core.util.MessageInfo;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.BeanUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//import java.util.Arrays;
//import java.util.List;
//
//@Slf4j
//@Service
//public class SSOServiceImpl {
//
//    @Autowired
//    private SSOUserSyncHttpClient ssoUserSyncHttpClient;
//
//    @Autowired
//    private RemoteDeptService remoteDeptService;
//
//    @Autowired
//    private RemoteUserService remoteUserService;
//
//    @Value("${sso.user.roles}")
//    private Integer[] ssoUserRoleIds;
//
//    private final Integer VALID_STATUS = 2000;
//
//    /**
//     * 同步统一登陆系统部门信息
//     *
//     * @author xudong
//     * @since 2024-07-01
//     */
//    public void syncDept() {
//        SSOSyncDataResponse<SSOOrgInfo> ssoOrgInfoSSOSyncDataResponse = ssoUserSyncHttpClient.queryOrg(null, null, null);
//        log.debug("syncDept:{}", ssoOrgInfoSSOSyncDataResponse);
//
//        List<SSOOrgInfo> orgInfos = ssoOrgInfoSSOSyncDataResponse.getData();
//        if(CollectionUtil.isNotEmpty(orgInfos)) {
//            orgInfos.forEach(orgInfo -> {
//                try {
//                    if(VALID_STATUS.equals(orgInfo.getStatus())) {
//                        int primaryKey = HashUtil.multiHashToInteger(orgInfo.getOrgId());
//                        MessageInfo<SysDept> deptResult = remoteDeptService.getById(primaryKey, SecurityConstants.FROM_IN);
//                        if(CommonConstants.SUCCESS.equals(deptResult.getCode())) {
//                            if(deptResult.getData() != null) { // 更新
//                                SysDept sysDept = deptResult.getData();
//                                sysDept.setName(orgInfo.getOrgName());
//                                sysDept.setSort(1);
//                                sysDept.setParentId(HashUtil.multiHashToInteger(orgInfo.getParentId()));
//                                remoteDeptService.update(sysDept, SecurityConstants.FROM_IN);
//                            } else { // 添加
//                                SysDept sysDept = new SysDept();
//                                sysDept.setDeptId(primaryKey);
//                                sysDept.setName(orgInfo.getOrgName());
//                                sysDept.setSort(1);
//                                sysDept.setParentId(HashUtil.multiHashToInteger(orgInfo.getParentId()));
//
//                                MessageInfo<Boolean> resultMessage = remoteDeptService.save(sysDept, SecurityConstants.FROM_IN);
//                                if(resultMessage.getData()) {
//                                    log.debug("syncDept add dept success:{}", JSONUtil.toJsonStr(sysDept));
//                                } else {
//                                    log.error("syncDept add dept failure:{}", JSONUtil.toJsonStr(sysDept));
//                                }
//                            }
//                        } else {
//                            log.error("syncDept get dept failure:{}->{}", orgInfo.getOrgId(), primaryKey);
//                        }
//                    }
//                } catch (Exception e) {
//                    log.error("syncDept has error", e);
//                }
//            });
//        }
//    }
//
//    public void syncUser() {
//        SSOSyncDataResponse<SSOUserInfo> ssoUserInfoSSOSyncDataResponse = ssoUserSyncHttpClient.queryUser(null, null);
//        log.debug("syncUser:{}", ssoUserInfoSSOSyncDataResponse);
//
//        List<SSOUserInfo> userInfos = ssoUserInfoSSOSyncDataResponse.getData();
//        if(CollectionUtil.isNotEmpty(userInfos)) {
//            userInfos.forEach(user -> {
//                try {
//                    if (VALID_STATUS.equals(user.getStatus())) {
//                        String idCardUUID = user.getIdCardUUID();
//                        MessageInfo<SysUser> userResult = remoteUserService.detail(idCardUUID, SecurityConstants.FROM_IN);
//                        if (CommonConstants.SUCCESS.equals(userResult.getCode())) {
//                            if(userResult.getData() != null) { // 更新
//                                UserDTO userDTO = new UserDTO();
//                                BeanUtils.copyProperties(userResult.getData(), userDTO);
//                                userDTO.setDeptId(HashUtil.multiHashToInteger(user.getOrgId()));
//                                userDTO.setUsername(idCardUUID);
//                                userDTO.setNickname(user.getUserName());
//                                userDTO.setPhone(user.getMobile());
//                                userDTO.setEmail(user.getEmail());
//                                userDTO.setUserFrom(4);
//                                userDTO.setRole(Arrays.asList(ssoUserRoleIds));
//
//                                remoteUserService.updateUser(userDTO, SecurityConstants.FROM_IN);
//                            } else { // 添加
//                                UserDTO userDTO = new UserDTO();
//                                userDTO.setDeptId(HashUtil.multiHashToInteger(user.getOrgId()));
//                                userDTO.setUsername(idCardUUID);
//                                userDTO.setNickname(user.getUserName());
//                                userDTO.setPhone(user.getMobile());
//                                userDTO.setEmail(user.getEmail());
//                                userDTO.setUserFrom(4);
//                                userDTO.setRole(Arrays.asList(ssoUserRoleIds)); // SSO 用户角色
//
//                                MessageInfo<Boolean> resultMessage = remoteUserService.saveUser(userDTO, SecurityConstants.FROM_IN);
//                                if(resultMessage.getData()) {
//                                    log.debug("syncDept add user success:{}", JSONUtil.toJsonStr(userDTO));
//                                } else {
//                                    log.error("syncDept add user failure:{}", JSONUtil.toJsonStr(userDTO));
//                                }
//                            }
//                        } else {
//                            log.error("syncDept get user failure:{}", idCardUUID);
//                        }
//                    }
//                } catch (Exception e) {
//                    log.error("syncUser has error", e);
//                }
//            });
//        }
//    }
//}