| | |
| | | package org.jeecg.modules.system.service.impl; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | |
| | | import org.jeecg.common.util.*; |
| | | import org.jeecg.config.mybatis.MybatisPlusSaasConfig; |
| | | import org.jeecg.modules.base.service.BaseCommonService; |
| | | import org.jeecg.modules.system.bo.TenantUserBo; |
| | | import org.jeecg.modules.system.entity.*; |
| | | import org.jeecg.modules.system.mapper.*; |
| | | import org.jeecg.modules.system.model.SysUserSysDepartModel; |
| | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.*; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void saveUser(SysUser user, String selectedRoles, String selectedDeparts, String relTenantIds) { |
| | | //step.1 保存用户 |
| | | if(StringUtils.isNotEmpty(relTenantIds)){ |
| | | try { |
| | | user.setTenantId(Integer.valueOf(relTenantIds)); |
| | | user.setLoginTenantId(Integer.valueOf(relTenantIds)); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | this.save(user); |
| | | //获取用户保存前台传过来的租户id并添加到租户 |
| | | this.saveUserTenant(user.getId(),relTenantIds); |
| | |
| | | this.updateTenantDepart(user, tenantId, departs); |
| | | } |
| | | |
| | | /** |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public String syncTenantUser() { |
| | | LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
| | | int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); |
| | | if(tenantId == 0){ |
| | | return "请登录租户管理员后同步用户!"; |
| | | } |
| | | // 模拟接口数据 TODO使用接口数据 |
| | | String json = "{\"code\":200,\"msg\":\"处理成功\",\"data\":[{\"id\":\"621466726\",\"name\":\"石一\",\"birthday\":\"1992-08-19\",\"rank\":\"bad0f40d-6ed9-4d7a-82f8-95af7d9f47d5\",\"firstOrgName\":\"信息部\",\"firstOrgId\":\"1632356\",\"orgName\":\"信息部\",\"orgId\":\"1632356\",\"post\":null,\"postId\":null,\"status\":\"\",\"jobStatus\":\"\",\"workNo\":\"6518\",\"mobile\":\"13658340793\",\"leaderId\":\"619347944\",\"leader\":\"程亚飞\"},{\"id\":\"621466727\",\"name\":\"张三\",\"birthday\":\"1993-05-15\",\"rank\":\"bad0f40d-6ed9-4d7a-82f8-95af7d9f47d6\",\"firstOrgName\":\"技术部\",\"firstOrgId\":\"1632357\",\"orgName\":\"技术部\",\"orgId\":\"1632357\",\"post\":\"工程师\",\"postId\":\"1001\",\"status\":\"在职\",\"jobStatus\":\"正常\",\"workNo\":\"6519\",\"mobile\":\"13658340794\",\"leaderId\":\"619347945\",\"leader\":\"李四\"},{\"id\":\"621466728\",\"name\":\"王五\",\"birthday\":\"1991-12-20\",\"rank\":\"bad0f40d-6ed9-4d7a-82f8-95af7d9f47d7\",\"firstOrgName\":\"市场部\",\"firstOrgId\":\"1632358\",\"orgName\":\"市场部\",\"orgId\":\"1632358\",\"post\":\"经理\",\"postId\":\"1002\",\"status\":\"在职\",\"jobStatus\":\"正常\",\"workNo\":\"6520\",\"mobile\":\"13658340795\",\"leaderId\":\"619347946\",\"leader\":\"赵六\"}]}"; |
| | | JSONObject jsonObject = JSON.parseObject(json); |
| | | JSONArray data = jsonObject.getJSONArray("data"); |
| | | List<TenantUserBo> remoteTenantUserList = data.toJavaList(TenantUserBo.class); |
| | | System.err.println(remoteTenantUserList); |
| | | |
| | | // 查询租户下用户 |
| | | List<String> tenantUserIds = userTenantMapper.getUserIdsByTenantId(tenantId); |
| | | LambdaQueryWrapper<SysUser> userQueryWrapper = new LambdaQueryWrapper<>(); |
| | | userQueryWrapper.in(SysUser::getId, tenantUserIds); |
| | | List<SysUser> tenantUserList = this.baseMapper.selectList(userQueryWrapper); |
| | | |
| | | |
| | | // 提取tenantUserList中的所有username作为对比依据 |
| | | Set<String> tenantUsernames = tenantUserList.stream() |
| | | .map(SysUser::getUsername) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | // 1. remoteTenantUserList中不包含在tenantUserList中的记录 |
| | | List<TenantUserBo> remoteNotInTenant = remoteTenantUserList.stream() |
| | | .filter(remoteUser -> !tenantUsernames.contains(remoteUser.getWorkNo())) |
| | | .collect(Collectors.toList()); |
| | | |
| | | // 2. remoteTenantUserList中包含在tenantUserList中的记录 |
| | | List<TenantUserBo> remoteInTenant = remoteTenantUserList.stream() |
| | | .filter(remoteUser -> tenantUsernames.contains(remoteUser.getWorkNo())) |
| | | .collect(Collectors.toList()); |
| | | AtomicInteger successCount = new AtomicInteger(0); |
| | | AtomicInteger failedCount = new AtomicInteger(0); |
| | | for (int i = 0; i <remoteNotInTenant.size() ; i++) { |
| | | TenantUserBo tenantUserBo = remoteNotInTenant.get(i); |
| | | addUser(tenantUserBo,tenantId,successCount,failedCount); |
| | | } |
| | | if(remoteTenantUserList.size()>0){ |
| | | return "同步"+remoteTenantUserList.size()+"条数据,已存在"+remoteInTenant.size() +"条;成功新增"+successCount.get()+"条,失败"+failedCount.get()+"条"; |
| | | } |
| | | |
| | | return "同步接口未返回数据!"; |
| | | } |
| | | |
| | | private void addUser(TenantUserBo tenantUserBo,Integer tenantId,AtomicInteger successCount, AtomicInteger failedCount) { |
| | | SysUser user = new SysUser(); |
| | | user.setLoginTenantId(tenantId); |
| | | user.setTenantId(tenantId); |
| | | user.setCreateTime(new Date());// 设置创建时间 |
| | | String salt = oConvertUtils.randomGen(8); |
| | | String passwordEncode = PasswordUtil.encrypt(tenantUserBo.getWorkNo(), "123456", salt); |
| | | user.setSalt(salt); |
| | | user.setUsername(tenantUserBo.getWorkNo()); |
| | | user.setRealname(tenantUserBo.getName()); |
| | | user.setPassword(passwordEncode); |
| | | user.setPhone(tenantUserBo.getMobile()); |
| | | user.setStatus(CommonConstant.USER_UNFREEZE); |
| | | user.setDelFlag(CommonConstant.DEL_FLAG_0); |
| | | user.setActivitiSync(CommonConstant.ACT_SYNC_0); |
| | | boolean save = this.save(user); |
| | | |
| | | if(save){ |
| | | this.saveUserTenant(user.getId(),String.valueOf(tenantId)); |
| | | successCount.incrementAndGet(); |
| | | }else { |
| | | failedCount.incrementAndGet(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 修改租户下的部门 |
| | | * @param departs |
| | | */ |