干燥机配套车间生产管理系统/云平台服务端
baoshiwei
2025-11-06 a65475c0272d134712030c42a2f26ab0161195b2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -1,6 +1,7 @@
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;
@@ -28,6 +29,7 @@
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;
@@ -49,6 +51,8 @@
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;
/**
@@ -621,6 +625,14 @@
   @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);
@@ -1219,7 +1231,81 @@
      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
    */