From 7dfa7ad3e627d379c1dc06334418c95822f4e254 Mon Sep 17 00:00:00 2001
From: zhuguifei <zhuguifei>
Date: 星期四, 23 十月 2025 12:37:57 +0800
Subject: [PATCH] 新增

---
 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java         |    2 
 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java    |   14 ++++
 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/bo/TenantUserBo.java                 |   26 ++++++++
 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java                  |    5 +
 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java |   88 +++++++++++++++++++++++++++++
 5 files changed, 133 insertions(+), 2 deletions(-)

diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/bo/TenantUserBo.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/bo/TenantUserBo.java
new file mode 100644
index 0000000..0a4fb66
--- /dev/null
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/bo/TenantUserBo.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.system.bo;
+
+import lombok.Data;
+
+/**
+ * 鍚屾祹鍫傜敤鎴�
+ */
+@Data
+public class TenantUserBo {
+    private String birthday;
+    private String leader;
+    private String jobStatus;
+    private String orgName;
+    private String firstOrgId;
+    private String mobile;
+    private String firstOrgName;
+    private String postId;
+    private String orgId;
+    private String leaderId;
+    private String workNo;
+    private String post;
+    private String name;
+    private String rank;
+    private String id;
+    private String status;
+}
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
index 4850517..f35648a 100755
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
@@ -131,6 +131,18 @@
         return sysUserService.queryPageList(req, queryWrapper, pageSize, pageNo);
 	}
 
+
+    @RequestMapping(value = "/syncTenantUser", method = RequestMethod.GET)
+    public Result<?> syncTenantUser(){
+       try {
+           String message = sysUserService.syncTenantUser();
+           return Result.ok(message);
+       }catch (Exception e){
+           e.printStackTrace();
+       }
+        return Result.error("鎿嶄綔澶辫触锛岃鑱旂郴绠$悊鍛橈紒");
+    }
+
     /**
      * 鑾峰彇绯荤粺鐢ㄦ埛鏁版嵁锛堟煡璇㈠叏閮ㄧ敤鎴凤紝涓嶅仛绉熸埛闅旂锛�
      *
@@ -167,7 +179,7 @@
             user.setOrgCode(null);
 			// 淇濆瓨鐢ㄦ埛璧颁竴涓猻ervice 淇濊瘉浜嬪姟
             //鑾峰彇绉熸埛ids
-            String relTenantIds = jsonObject.getString("realTenantIds");
+            String relTenantIds = jsonObject.getString("relTenantIds");
             sysUserService.saveUser(user, selectedRoles, selectedDeparts, relTenantIds);
             baseCommonService.addLog("娣诲姞鐢ㄦ埛锛寀sername锛� " +user.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
 			result.success("娣诲姞鎴愬姛锛�");
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java
index 7f9f457..7b4d716 100755
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java
@@ -106,6 +106,11 @@
      */
     private Integer loginTenantId;
 
+    /**
+     * 绉熸埛ID
+     */
+    private Integer tenantId;
+
     /**閮ㄩ棬鍚嶇О*/
     private transient String orgCodeTxt;
 
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
index 7e4d6ac..63beb25 100755
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -389,4 +389,6 @@
 	 * @param departs
 	 */
 	void editTenantUser(SysUser sysUser, String tenantId, String departs, String roles);
+
+    String syncTenantUser();
 }
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
index b15258d..ff8167e 100755
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
+++ b/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\":\"姝e父\",\"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\":\"姝e父\",\"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涓殑鎵�鏈塽sername浣滀负瀵规瘮渚濇嵁
+        Set<String> tenantUsernames = tenantUserList.stream()
+                .map(SysUser::getUsername)
+                .collect(Collectors.toSet());
+
+    // 1. remoteTenantUserList涓笉鍖呭惈鍦╰enantUserList涓殑璁板綍
+        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
 	 */

--
Gitblit v1.9.3