| 
					
				 | 
			
			
				@@ -3,17 +3,23 @@ package com.fs.qw; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.annotation.Log; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.annotation.RepeatSubmit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.constant.Constants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.core.controller.BaseController; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.core.domain.AjaxResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.core.domain.R; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.core.page.TableDataInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.enums.BusinessType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.exception.ServiceException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.exception.user.UserPasswordNotMatchException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.utils.MessageUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.utils.ServletUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.utils.poi.ExcelUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.company.domain.Company; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.company.domain.CompanyUser; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.company.mapper.CompanyUserMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.company.service.ICompanyUserService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.core.manager.AsyncManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.core.manager.factory.AsyncFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.fastGpt.domain.FastGptRole; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.fastGpt.mapper.FastGptRoleMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.core.security.LoginUser; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -38,10 +44,18 @@ import com.fs.voice.utils.StringUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.access.prepost.PreAuthorize; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.security.authentication.AuthenticationManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.security.authentication.BadCredentialsException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.security.core.Authentication; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.web.bind.annotation.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.annotation.Resource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Arrays; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.HashSet; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Set; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 企微用户Controller 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -78,6 +92,10 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private QwApiService qwApiService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private AuthenticationManager authenticationManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 查询企微员工列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -95,8 +113,8 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    * 直接授权key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 直接授权key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PreAuthorize("@ss.hasPermi('qw:user:authAppKey')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PostMapping("/authAppKey") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public R authAppKey(@RequestBody QwUser param){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -114,8 +132,8 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    * 登录企业微信(发起登录) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 登录企业微信(发起登录) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PreAuthorize("@ss.hasPermi('qw:user:login')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PostMapping("/loginQwCode") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public R loginQwCode(@RequestBody QwLoginParam loginParam){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -140,8 +158,8 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    * 登录企业微信(传输验证信息) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 登录企业微信(传输验证信息) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PreAuthorize("@ss.hasPermi('qw:user:login')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PostMapping("/loginQwCodeMsg") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public R loginQwCodeMsg(@RequestBody QwLoginParam loginParam){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -167,8 +185,8 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    * 查询企业微信登录状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 查询企业微信登录状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PreAuthorize("@ss.hasPermi('qw:user:login')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PostMapping("/getLoginQwStatus") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public R getLoginQwStatus(@RequestBody QwLoginParam loginParam){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -181,27 +199,62 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    * 企业微信员工账号 绑定 云主机 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 企业微信员工账号 绑定 云主机 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PreAuthorize("@ss.hasPermi('qw:user:loginIp')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Log(title = "绑定 云主机", businessType = BusinessType.INSERT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @GetMapping("/qwBindCloudHost/{appKey}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public R qwBindCloudHost(@PathVariable("appKey") String appKey){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return qwUserService.qwBindCloudHost(appKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    * 获取云主机的账密 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 获取云主机的账密 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PreAuthorize("@ss.hasPermi('qw:user:cloudAP')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PostMapping("/selectCloudAP") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public R selectCloudAP(@RequestBody QwCloudAPParam param) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return qwUserService.selectCloudAP(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 根据销售账号密码 获取 他的所有企业微信账号以及云主机和账号密码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @PostMapping("/selectCloudByCompany") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public R selectCloudByCompany(@RequestBody QwCloudIPByCompanyParam param) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 用户验证 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Authentication authentication = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            authentication = authenticationManager 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .authenticate(new UsernamePasswordAuthenticationToken(param.getCompanyAdmin(), param.getCompanyPassWord())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        catch (Exception e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (e instanceof BadCredentialsException) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(0l,param.getCompanyAdmin(), Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new UserPasswordNotMatchException(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(0l,param.getCompanyAdmin(), Constants.LOGIN_FAIL, e.getMessage())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new ServiceException(e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LoginUser loginUser=(LoginUser) authentication.getPrincipal(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return qwUserService.selectCloudByCompany(loginUser.getUser().getCompanyId(),loginUser.getUser().getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 企业微信员工账号 绑定 云主机 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//    @PreAuthorize("@ss.hasPermi('qw:user:loginIp')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @PreAuthorize("@ss.hasPermi('qw:user:bindIp')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @GetMapping("/qwBindCloudHostByIp/{appKey}/{IP}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public R qwBindCloudHostByIp(@PathVariable("appKey") String appKey,@PathVariable("IP") String IP){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return qwUserService.qwBindCloudHostByIp(appKey,IP); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -211,6 +264,7 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 企业微信员工账号 解除绑定 云主机 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PreAuthorize("@ss.hasPermi('qw:user:loginIpOut')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Log(title = "解除绑定 云主机", businessType = BusinessType.UPDATE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @GetMapping("/qwUnbindCloudHost/{appKey}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public R qwUnbindCloudHost(@PathVariable("appKey") String appKey){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return qwUserService.qwUnbindCloudHost(appKey); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -277,8 +331,8 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return util.exportExcel(list, "企微用户数据"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    * 查询企微员工列表-用于员工管理绑定 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 查询企微员工列表-用于员工管理绑定 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @GetMapping("/getQwUserList") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public R getQwUserList() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -318,8 +372,8 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return AjaxResult.success(qwUserService.selectQwUserVOById(id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    * 批量查询 企微用户详细信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 批量查询 企微用户详细信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @GetMapping(value = "/getInfo/{ids}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public AjaxResult getInfoByIds(@PathVariable("ids") Long[] ids) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -364,7 +418,22 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return R.ok(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RepeatSubmit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @PreAuthorize("@ss.hasPermi('qw:user:sync')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Log(title = "企微用户", businessType = BusinessType.INSERT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @PostMapping("syncName/{corpId}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public R syncName(@PathVariable String corpId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Company company = loginUser.getCompany(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<String> strings = qwCompanyMapper.selectQwCompanyCorpIdListByCompanyId(company.getCompanyId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (String string : strings) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (string.equals(corpId)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                qwUserService.syncQwUserName(string); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return R.ok(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 绑定AI客服 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -380,11 +449,11 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         FastGptRole role = fastGptRoleMapper.selectFastGptRoleByRoleId(param.getFastGptRoleId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (role.getBindCorpId()!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           if (role.getBindCorpId().equals(param.getCorpId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               qwUserService.updateQwUser(qwUser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               return R.error("该角色已绑定其他企业"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (role.getBindCorpId().equals(param.getCorpId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                qwUserService.updateQwUser(qwUser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return R.error("该角色已绑定其他企业"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int i = qwUserService.updateQwUser(qwUser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -421,48 +490,83 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Log(title = "企微用户", businessType = BusinessType.UPDATE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PutMapping("/bindQwUser") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @RepeatSubmit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public R bindQwUser(@RequestBody QwUserBingParam qwUser) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public R bindQwUser(@RequestBody QwUserBingParam qwUserParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        CompanyUser companyUser = companyUserService.selectCompanyUserById(qwUser.getCompanyUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CompanyUser companyUser = companyUserService.selectCompanyUserById(qwUserParam.getCompanyUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String qwUserIdCompanyStr = companyUser.getQwUserId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Set<String> qwUserIdCompanySet = new HashSet<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!StringUtil.strIsNullOrEmpty(qwUserIdCompanyStr)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String[] qwUserId = qwUserIdCompanyStr.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            qwUserIdCompanySet = Arrays.stream(qwUserId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .filter(id -> !id.isEmpty()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (companyUser!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //选择的企业微信账号为“” 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (StringUtil.strIsNullOrEmpty(qwUser.getId())&&qwUser.getCompanyUserId()!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StringUtil.strIsNullOrEmpty(qwUserParam.getId())&&qwUserParam.getCompanyUserId()!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //制空企业微信的绑定 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                qwUserService.updateUserByUserId(qwUser.getCompanyUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                qwUserService.updateUserByUserId(qwUserParam.getCompanyUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //制空销售的绑定 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 companyUserMapper.updateCompanyUserByNullQwUserID(companyUser.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String id = qwUser.getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String[] split = id.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                for (String s : split) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    QwUser qu= qwUserService.selectQwUserById(Long.parseLong(s)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (qu.getCompanyUserId()!=null&&!qu.getCompanyUserId().equals(qwUser.getCompanyUserId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String idParam = qwUserParam.getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String[] splitParam = idParam.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Set<String> splitParamSet = Arrays.stream(splitParam) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .filter(s -> !s.isEmpty()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 找出在 qwUserIdCompanySet 中存在但在 splitParamSet 中不存在的元素 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Set<String> difference = new HashSet<>(qwUserIdCompanySet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                difference.removeAll(splitParamSet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //制空绑定 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!difference.isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    difference.forEach(id->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        qwUserService.updateUnBindUserById(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (String paramId : splitParamSet) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    QwUser qu= qwUserService.selectQwUserById(Long.parseLong(paramId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (qu.getCompanyUserId()!=null&&!qu.getCompanyUserId().equals(qwUserParam.getCompanyUserId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         return R.error( qu.getQwUserName()+"已经被其他人绑定,请先解绑"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //制空绑定 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                qwUserService.updateUserByUserId(qwUser.getCompanyUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                CompanyUser user = new CompanyUser(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                user.setQwUserId(qwUser.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                user.setUserId(companyUser.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                user.setQwStatus(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                companyUserMapper.updateCompanyUser(user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                for (String s : split) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    CompanyUser user = new CompanyUser(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    user.setQwUserId(qwUserParam.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    user.setUserId(companyUser.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    user.setQwStatus(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    companyUserMapper.updateCompanyUser(user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     QwUser qw = new QwUser(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    qw.setCompanyUserId(qwUser.getCompanyUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    qw.setId(Long.parseLong(s)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    qw.setCompanyUserId(qwUserParam.getCompanyUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    qw.setId(Long.parseLong(paramId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     qw.setStatus(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     qw.setCompanyId(companyUser.getCompanyId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     qwUserService.updateQwUser(qw); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    QwUser qu= qwUserService.selectQwUserById(Long.parseLong(s)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    qwExternalContactMapper.updateBindUserByQwUser(qu.getCorpId(),qu.getQwUserId(),companyUser.getCompanyId(),companyUser.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //同步最后单独跑/先不异步了pp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (String paramId : splitParamSet){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //如果销售没绑定过,全刷,否则只同步新的增加的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (StringUtil.strIsNullOrEmpty(qwUserIdCompanyStr)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        updateAndSyncQwUser(paramId, companyUser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //根据企微账号和公司id 同步企业微信账号(游标初始为空) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    syncMyQwExternalContact(qu,null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else if (!StringUtil.strIsNullOrEmpty(qwUserIdCompanyStr) && !qwUserIdCompanySet.contains(paramId)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        updateAndSyncQwUser(paramId, companyUser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -474,6 +578,17 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void updateAndSyncQwUser(String paramId, CompanyUser companyUser) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QwUser qu= qwUserService.selectQwUserById(Long.parseLong(paramId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        qwExternalContactMapper.updateBindUserByQwUser(qu.getCorpId(),qu.getQwUserId(),companyUser.getCompanyId(),companyUser.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //根据企微账号和公司id 同步企业微信账号(游标初始为空) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        syncMyQwExternalContact(qu,null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 修改企微用户的欢迎语 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PostMapping("/weclomeQwUser") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public R weclomeQwUser(@RequestBody QwUser qwUser) throws Exception { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -487,7 +602,7 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @PreAuthorize("@ss.hasPermi('qw:user:remove')") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Log(title = "企微用户", businessType = BusinessType.DELETE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@DeleteMapping("/{ids}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @DeleteMapping("/{ids}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public AjaxResult remove(@PathVariable Long[] ids) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return toAjax(qwUserService.deleteQwUserByIds(ids)); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -495,8 +610,8 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    * 获取企业微信用户列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 获取企业微信用户列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @GetMapping("/qwUserList/{corpId}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public TableDataInfo qwUserList(@PathVariable String corpId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -591,9 +706,9 @@ public class QwUserController extends BaseController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return R.error("同步失败:"+list.getErrmsg()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       if (!StringUtil.strIsNullOrEmpty(list.getNext_cursor())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           syncMyQwExternalContact(qwUser,list.getNext_cursor()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!StringUtil.strIsNullOrEmpty(list.getNext_cursor())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            syncMyQwExternalContact(qwUser,list.getNext_cursor()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return R.ok(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |