package com.tanpu.feo.feojob.service; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.fengwenyi.api.result.ResultTemplate; import com.tanpu.feo.feojob.dto.JyzyTeamDto; import com.tanpu.feo.feojob.dto.OrgInfoDto; import com.tanpu.feo.feojob.dto.OrgSyncDto; import com.tanpu.feo.feojob.dto.WorkDataDto; import com.tanpu.feo.feojob.entity.*; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; @Service @Slf4j public class OrgSyncByJyzyService { @Resource private OrgService orgService; @Resource private UserInfoService userInfoService; @Resource private DepartmentService departmentService; @Resource private DepartmentEmployeeService departmentEmployeeService; @Resource private EmployeeService employeeService; @Resource private EmployeeRoleService employeeRoleService; @Resource private RoleService roleService; @Resource private OrgSyncByWxcpService orgSyncByWxcpService; @Resource private IfaAssetsService ifaAssetsService; @Resource private JyzyOrgService jyzyOrgService; @Resource private JyzyTeamService jyzyTeamService; @Resource private JyzyUserInfoService jyzyUserInfoService; @Resource private OrgSyncService orgSyncService; public ResultTemplate<String> orgSyncByJyzy(OrgSyncDto orgSyncDto) { try { //1 从精业展业 数据库中 获取组织及用户 信息 List<JyzyTeamDto> jyzyTeamDtoList = getJyzyTeamByOrgCode(orgSyncDto.getJyzyOrgCode()); log.info("====== 精业展业 获取的数据为:{}", JSONUtil.toJsonStr(jyzyTeamDtoList)); //2 从feo 数据库中 获取现有的 组织及人员 信息 OrgInfoDto orgInfoDto = getOrgInfoByFeoOrgCode(orgSyncDto.getFeoOrgCode()); log.info("====== 理财师机构版 获取的数据为:{}", JSONUtil.toJsonStr(orgInfoDto)); //3 数据对比 WorkDataDto<UserInfoEntity> workUserInfo = new WorkDataDto<>(); WorkDataDto<EmployeeEntity> workEmployee = new WorkDataDto<>(); WorkDataDto<DepartmentEntity> workDepartment = new WorkDataDto<>(); WorkDataDto<DepartmentEmployeeEntity> workDepartmentEmployee = new WorkDataDto<>(); WorkDataDto<EmployeeRoleEntity> workEmployeeRole = new WorkDataDto<>(); dataCompare(workUserInfo, workEmployee, workDepartment, workDepartmentEmployee, workEmployeeRole, jyzyTeamDtoList, orgInfoDto); //4 数据操作 // orgSyncService.updateData(orgInfoDto.getOrgId(), workUserInfo, workEmployee, workDepartment, workDepartmentEmployee, workEmployeeRole); } catch (Exception e) { return ResultTemplate.fail(e.getMessage()); } return ResultTemplate.success("同步成功"); } private void dataCompare(WorkDataDto<UserInfoEntity> workUserInfo, WorkDataDto<EmployeeEntity> workEmployee, WorkDataDto<DepartmentEntity> workDepartment, WorkDataDto<DepartmentEmployeeEntity> workDepartmentEmployee, WorkDataDto<EmployeeRoleEntity> workEmployeeRole, List<JyzyTeamDto> jyzyTeamDtoList, OrgInfoDto orgInfoDto) { log.info("======开始数据对比======"); HashMap<String, JyzyUserInfoEntity> jyzyUserInfoHashMap = new HashMap<>(); jyzyTeamDtoList.forEach(jyzyTeamDto -> jyzyTeamDto.getJyzyUserInfos().forEach(jyzyUserInfo -> jyzyUserInfoHashMap.put(jyzyUserInfo.getId(), jyzyUserInfo))); // 1 user_info List<UserInfoEntity> insertUserInfoList = new ArrayList<>(); List<UserInfoEntity> deleteUserInfoList = new ArrayList<>(); List<UserInfoEntity> updateUserInfoList = new ArrayList<>(); // orgInfoDto.getUserInfoList().forEach(userInfo -> { // JyzyUserInfo jyzyUserInfo = jyzyUserInfoHashMap.get(userInfo.getId()); // // 删除 // if (ObjectUtil.isNull(jyzyUserInfo)) { // deleteUserInfoList.add(userInfo); // return; // 跳过当前循环 // } // // 更新 // if (!jyzyUserInfo.getMD5().equals(userInfo.getMD5())) { // userInfo.updata(jyzyUserInfo); // updateUserInfoList.add(userInfo); // } // jyzyUserInfoHashMap.remove(userInfo.getId()); // }); // jyzyUserInfoHashMap.forEach((key, jyzyUserInfo) -> { // // 新增 // UserInfo userInfo = new UserInfo(jyzyUserInfo); // insertUserInfoList.add(userInfo); // }); workUserInfo.setDeleteList(deleteUserInfoList); workUserInfo.setInsertList(insertUserInfoList); workUserInfo.setUpdateList(updateUserInfoList); log.info("======结束数据对比======"); } /** * @description: 根据理财师机构版的机构code 获取其的 机构及用户信息列表 * @Author: zejia zj wu * @date: 2021/5/27 3:13 下午 */ private OrgInfoDto getOrgInfoByFeoOrgCode(String feoOrgCode) throws Exception { OrgInfoDto.OrgInfoDtoBuilder orgInfoDtoBuilder = OrgInfoDto.builder(); try { // 1 根据orgcode 获取机构信息 OrgEntity org = orgService.findByOrgCode(feoOrgCode); if (ObjectUtil.isEmpty(org) || StrUtil.isBlank(org.getId())) { throw new Exception("feoOrgCode 不存在"); } String orgId = org.getId(); orgInfoDtoBuilder.orgId(orgId); // 2 根据 orgId 获取 userInfoList信息 List<UserInfoEntity> userInfoList = userInfoService.getUserInfoListByOrgId(orgId); orgInfoDtoBuilder.userInfoList(userInfoList); // 3 根据 orgId 获取 Employee信息 List<EmployeeEntity> employeeList = employeeService.getEmployeeSListByOrgId(orgId); orgInfoDtoBuilder.employeeList(employeeList); // 4 根据 orgId 获取 Department信息 List<DepartmentEntity> departmentList = departmentService.findDepartmentByOrgId(orgId); orgInfoDtoBuilder.departmentList(departmentList); // 5 根据 orgId 获取 DepartmentEmployee信息 List<DepartmentEmployeeEntity> departmentEmployeeList = departmentEmployeeService.findInfoByOrgId(orgId); orgInfoDtoBuilder.departmentEmployeeList(departmentEmployeeList); // 6 根据 orgId 获取 EmployeeRole信息 List<EmployeeRoleEntity> employeeRoleList = employeeRoleService.findInfoByOrgId(orgId); orgInfoDtoBuilder.employeeRoleList(employeeRoleList); // 7 整理数据 将用户安排到 组织下面 return orgInfoDtoBuilder.build(); } catch (Exception e) { log.error("=======从理财师机构版 数据库中 获取组织及用户 信息 方法出错-->{}======", e.getMessage()); throw new Exception("同步失败,-->" + e.getMessage()); } } /** * @description: 根据精业展业的机构code 获取精业展业的 机构及人员信息列表 * @Author: zejia zj wu * @date: 2021/5/27 3:12 下午 */ private List<JyzyTeamDto> getJyzyTeamByOrgCode(String jyzyOrgCode) throws Exception { try { // 1 根据orgcode 获取机构信息 JyzyOrgEntity jyzyOrg = jyzyOrgService.getOrgByOrgCode(jyzyOrgCode); if (ObjectUtil.isEmpty(jyzyOrg) || StrUtil.isBlank(jyzyOrg.getId())) { throw new Exception("jyzyOrgCode 不存在"); } // 2 根据 orgId 获取 团队信息 List<JyzyTeamEntity> jyzyTeamList = jyzyTeamService.getTeamListByOrgId(jyzyOrg.getId()); // 3 根据 orgId 获取 用户信息 List<JyzyUserInfoEntity> userInfoList = jyzyUserInfoService.getUserListByOrgId(jyzyOrg.getId()); // 4 整理数据 将用户安排到 组织下面 return jyzyTeamList.stream().map(jyzyTeam -> JyzyTeamDto.builder() .jyzyTeam(jyzyTeam).jyzyUserInfos( userInfoList.stream().filter(jyzyUserInfo -> jyzyUserInfo.getTeamId().equals(jyzyTeam.getId())).collect(Collectors.toList()) ).build()).collect(Collectors.toList()); } catch (Exception e) { log.error("=======从精业展业 数据库中 获取组织及用户 信息 方法出错-->{}======", e.getMessage()); throw new Exception("同步失败,-->" + e.getMessage()); } } }