Commit a9e1e59552b5b7df345564ffad65810aa75a96c5
1 parent
e7eec8e5
【issues/3666】同步钉钉用户到本地,违反数据库唯一主键规则,导致插入失败
Showing
1 changed file
with
21 additions
and
14 deletions
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java
... | ... | @@ -44,8 +44,9 @@ import org.springframework.dao.DuplicateKeyException; |
44 | 44 | import org.springframework.stereotype.Service; |
45 | 45 | |
46 | 46 | import java.util.ArrayList; |
47 | -import java.util.Arrays; | |
47 | +import java.util.HashSet; | |
48 | 48 | import java.util.List; |
49 | +import java.util.Set; | |
49 | 50 | import java.util.stream.Collectors; |
50 | 51 | |
51 | 52 | |
... | ... | @@ -370,7 +371,8 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { |
370 | 371 | } |
371 | 372 | |
372 | 373 | // api 接口执行成功,并且 sys_third_account 表匹配失败,就向 sys_third_account 里插入一条数据 |
373 | - if (apiSuccess && (sysThirdAccount == null || oConvertUtils.isEmpty(sysThirdAccount.getThirdUserId()))) { | |
374 | + boolean flag = (sysThirdAccount == null || oConvertUtils.isEmpty(sysThirdAccount.getThirdUserId())); | |
375 | + if (apiSuccess && flag) { | |
374 | 376 | if (sysThirdAccount == null) { |
375 | 377 | sysThirdAccount = new SysThirdAccount(); |
376 | 378 | sysThirdAccount.setSysUserId(sysUser.getId()); |
... | ... | @@ -402,8 +404,14 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { |
402 | 404 | List<Department> allDepartment = JdtDepartmentAPI.listAll(accessToken); |
403 | 405 | // 根据钉钉部门查询所有钉钉用户,用于反向同步到本地 |
404 | 406 | List<User> ddUserList = this.getDtAllUserByDepartment(allDepartment, accessToken); |
407 | + // 记录已经同步过的用户id,当有多个部门的情况时,只同步一次 | |
408 | + Set<String> syncedUserIdSet = new HashSet<>(); | |
405 | 409 | |
406 | 410 | for (User dtUserInfo : ddUserList) { |
411 | + if (syncedUserIdSet.contains(dtUserInfo.getUserid())) { | |
412 | + continue; | |
413 | + } | |
414 | + syncedUserIdSet.add(dtUserInfo.getUserid()); | |
407 | 415 | SysThirdAccount sysThirdAccount = sysThirdAccountService.getOneByThirdUserId(dtUserInfo.getUserid(), THIRD_TYPE); |
408 | 416 | List<SysUser> collect = sysUsersList.stream().filter(user -> (dtUserInfo.getMobile().equals(user.getPhone()) || dtUserInfo.getUserid().equals(user.getUsername())) |
409 | 417 | ).collect(Collectors.toList()); |
... | ... | @@ -581,12 +589,6 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { |
581 | 589 | // update-begin--Author:liusq Date:20210713 for:钉钉同步到本地的人员没有状态,导致同步之后无法登录 #I3ZC2L |
582 | 590 | sysUser.setStatus(1); |
583 | 591 | // update-end--Author:liusq Date:20210713 for:钉钉同步到本地的人员没有状态,导致同步之后无法登录 #I3ZC2L |
584 | - // 设置工号,如果工号为空,则使用username | |
585 | - if (oConvertUtils.isEmpty(dtUser.getJob_number())) { | |
586 | - sysUser.setWorkNo(dtUser.getUserid()); | |
587 | - } else { | |
588 | - sysUser.setWorkNo(dtUser.getJob_number()); | |
589 | - } | |
590 | 592 | return this.dtUserToSysUser(dtUser, sysUser); |
591 | 593 | } |
592 | 594 | |
... | ... | @@ -611,7 +613,12 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { |
611 | 613 | } else { |
612 | 614 | sysUser.setPhone(null); |
613 | 615 | } |
614 | - sysUser.setWorkNo(null); | |
616 | + // 设置工号,如果工号为空,则使用username | |
617 | + if (oConvertUtils.isEmpty(dtUser.getJob_number())) { | |
618 | + sysUser.setWorkNo(dtUser.getUserid()); | |
619 | + } else { | |
620 | + sysUser.setWorkNo(dtUser.getJob_number()); | |
621 | + } | |
615 | 622 | // --- 钉钉没有逻辑删除功能 |
616 | 623 | // sysUser.getDelFlag() |
617 | 624 | // --- 钉钉没有冻结、启用禁用功能 |
... | ... | @@ -763,8 +770,8 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { |
763 | 770 | return JdtMessageAPI.sendTextMessage(textMessage, accessToken); |
764 | 771 | } |
765 | 772 | |
766 | - public boolean recallMessage(String msg_task_id) { | |
767 | - Response<JSONObject> response = this.recallMessageResponse(msg_task_id); | |
773 | + public boolean recallMessage(String msgTaskId) { | |
774 | + Response<JSONObject> response = this.recallMessageResponse(msgTaskId); | |
768 | 775 | if (response == null) { |
769 | 776 | return false; |
770 | 777 | } |
... | ... | @@ -774,16 +781,16 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { |
774 | 781 | /** |
775 | 782 | * 撤回消息 |
776 | 783 | * |
777 | - * @param msg_task_id | |
784 | + * @param msgTaskId | |
778 | 785 | * @return |
779 | 786 | */ |
780 | - public Response<JSONObject> recallMessageResponse(String msg_task_id) { | |
787 | + public Response<JSONObject> recallMessageResponse(String msgTaskId) { | |
781 | 788 | String accessToken = this.getAccessToken(); |
782 | 789 | if (accessToken == null) { |
783 | 790 | return null; |
784 | 791 | } |
785 | 792 | int agentId = thirdAppConfig.getDingtalk().getAgentIdInt(); |
786 | - return JdtMessageAPI.recallMessage(agentId, msg_task_id, getAccessToken()); | |
793 | + return JdtMessageAPI.recallMessage(agentId, msgTaskId, getAccessToken()); | |
787 | 794 | } |
788 | 795 | |
789 | 796 | /** |
... | ... |