diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/QywxScheduleJob.java b/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/QywxScheduleJob.java index 91f68ab..69431c8 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/QywxScheduleJob.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/QywxScheduleJob.java @@ -33,6 +33,7 @@ import java.util.Map; import java.util.Objects; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; import com.agileboot.domain.qywx.user.QyUserApplicationService; import com.agileboot.domain.qywx.user.command.AddQyUserCommand; @@ -418,6 +419,7 @@ public class QywxScheduleJob { .collect(Collectors.toList()); + List wxUsers = new ArrayList<>(); for (QyDepartmentEntity department : departmentList) { // 获取部门用户列表 UserListResponse userList = QywxApiUtil.getUserList(accessToken.getAccessToken(), department.getDepartmentId()); @@ -430,146 +432,154 @@ public class QywxScheduleJob { continue; } log.info("获取部门用户列表成功: {}", JSONUtil.toJsonStr(userList)); - - List wxUsers = userList.getUserlist(); - if (wxUsers == null || wxUsers.isEmpty()) { - continue; + + List wxUsersList = userList.getUserlist(); + if (wxUsersList != null) { + wxUsers.addAll(wxUsersList); } + } - Map wxUserMap = wxUsers.stream() - .collect(Collectors.toMap(UserListResponse.UserInfo::getUserid, Function.identity())); + Map wxUserMap = wxUsers.stream() + .collect(Collectors.toMap(UserListResponse.UserInfo::getUserid, Function.identity())); - List qyUserList = qyUserApplicationService.selectAll(); - if (null == qyUserList) { - qyUserList = new ArrayList<>(); - } - qyUserList = qyUserList.stream() - .filter(u -> u.getCorpid().equals(authCorpInfo.getCorpid()) && u.getAppid().equals(appid)) - .collect(Collectors.toList()); - - // 识别需要新增的用户 - List finalQyUserList = qyUserList; - List toAdd = wxUsers.stream() - .filter(wxUser -> finalQyUserList.stream().noneMatch(u -> u.getUserid().equals(wxUser.getUserid()))) + List qyUserList = qyUserApplicationService.selectAll(); + if (null == qyUserList) { + qyUserList = new ArrayList<>(); + } + qyUserList = qyUserList.stream() + .filter(u -> u.getCorpid().equals(authCorpInfo.getCorpid()) && u.getAppid().equals(appid)) .collect(Collectors.toList()); - log.info("syncUserInfo toAdd: {}", JSONUtil.toJsonStr(toAdd)); - // 识别需要删除的用户 -/* List toRemove = qyUserList.stream() - .filter(localUser -> !wxUserMap.containsKey(localUser.getUserid())) - .collect(Collectors.toList()); - log.info("syncUserInfo toRemove: {}", JSONUtil.toJsonStr(toRemove));*/ + // 识别需要新增的用户 + List finalQyUserList = qyUserList; + List toAdd = wxUsers.stream() + .filter(wxUser -> finalQyUserList.stream().noneMatch(u -> u.getUserid().equals(wxUser.getUserid()))) + .collect(Collectors.toList()); + log.info("syncUserInfo toAdd: {}", JSONUtil.toJsonStr(toAdd)); - // 识别需要更新的用户 - List toUpdate = qyUserList.stream() - .filter(localUser -> wxUserMap.containsKey(localUser.getUserid())) - .filter(localUser -> { - UserListResponse.UserInfo wxUser = wxUserMap.get(localUser.getUserid()); - return !Objects.equals(localUser.getName(), wxUser.getName()) - || !Objects.equals(localUser.getDepartment(), StringUtils.join(wxUser.getDepartment(), ",")) - || !Objects.equals(localUser.getPosition(), wxUser.getPosition()) - || !Objects.equals(localUser.getUserOrder(), StringUtils.join(wxUser.getOrder(), ",")) - || !Objects.equals(localUser.getMobile(), wxUser.getMobile()) - || !Objects.equals(localUser.getGender(), String.valueOf(wxUser.getGender())) - || !Objects.equals(localUser.getEmail(), wxUser.getEmail()) - || !Objects.equals(localUser.getBizMail(), wxUser.getBiz_mail()) - || !Objects.equals(localUser.getDirectLeader(), StringUtils.join(wxUser.getDirect_leader(), ",")) - || !Objects.equals(localUser.getIsLeaderInDept(), StringUtils.join(wxUser.getIs_leader_in_dept(), ",")) - || !Objects.equals(localUser.getTelephone(), wxUser.getTelephone()) - || !Objects.equals(localUser.getAlias(), wxUser.getAlias()) - || !Objects.equals(localUser.getAddress(), wxUser.getAddress()) - || !Objects.equals(localUser.getMainDepartment(), String.valueOf(wxUser.getMain_department())) - || !Objects.equals(localUser.getAvatar(), wxUser.getAvatar()) - || !Objects.equals(localUser.getThumbAvatar(), wxUser.getThumb_avatar()) - || !Objects.equals(localUser.getStatus(), String.valueOf(wxUser.getStatus())) - || !Objects.equals(localUser.getQrCode(), wxUser.getQr_code()) - || !Objects.equals(localUser.getExternalPosition(), wxUser.getExternal_position()); - }) - .peek(localUser -> { - UserListResponse.UserInfo wxUser = wxUserMap.get(localUser.getUserid()); - localUser.setName(wxUser.getName()); - localUser.setDepartment(StringUtils.join(wxUser.getDepartment(), ",")); - localUser.setUserOrder(StringUtils.join(wxUser.getOrder(), ",")); - localUser.setPosition(wxUser.getPosition()); - localUser.setMobile(wxUser.getMobile()); - localUser.setGender(String.valueOf(wxUser.getGender())); - localUser.setEmail(wxUser.getEmail()); - localUser.setBizMail(wxUser.getBiz_mail()); - localUser.setDirectLeader(StringUtils.join(wxUser.getDirect_leader(), ",")); - localUser.setIsLeaderInDept(StringUtils.join(wxUser.getIs_leader_in_dept(), ",")); - localUser.setTelephone(wxUser.getTelephone()); - localUser.setAlias(wxUser.getAlias()); - localUser.setAddress(wxUser.getAddress()); - localUser.setMainDepartment(String.valueOf(wxUser.getMain_department())); - localUser.setAvatar(wxUser.getAvatar()); - localUser.setThumbAvatar(wxUser.getThumb_avatar()); - localUser.setStatus(String.valueOf(wxUser.getStatus())); - localUser.setQrCode(wxUser.getQr_code()); - localUser.setExternalPosition(wxUser.getExternal_position()); - localUser.setUpdateTime(new Date()); - }) - .map(localUser -> { - UpdateQyUserCommand command = new UpdateQyUserCommand(); - BeanUtils.copyProperties(localUser, command); - return command; - }) - .collect(Collectors.toList()); - log.info("syncUserInfo toUpdate: {}", JSONUtil.toJsonStr(toUpdate)); + // 识别需要删除的用户 + List toRemove = qyUserList.stream() + .filter(localUser -> !wxUserMap.containsKey(localUser.getUserid())) + .collect(Collectors.toList()); + log.info("syncUserInfo toRemove: {}", JSONUtil.toJsonStr(toRemove)); - // 新增用户 - if (!toAdd.isEmpty()) { - toAdd.forEach(wxUser -> { - AddQyUserCommand newUser = new AddQyUserCommand(); - newUser.setUserid(wxUser.getUserid()); - newUser.setOpenUserid(wxUser.getOpen_userid()); - newUser.setName(wxUser.getName()); - newUser.setDepartment(StringUtils.join(wxUser.getDepartment(), ",")); - newUser.setUserOrder(StringUtils.join(wxUser.getOrder(), ",")); - newUser.setPosition(wxUser.getPosition()); - newUser.setMobile(wxUser.getMobile()); - newUser.setGender(String.valueOf(wxUser.getGender())); - newUser.setEmail(wxUser.getEmail()); - newUser.setBizMail(wxUser.getBiz_mail()); - newUser.setDirectLeader(StringUtils.join(wxUser.getDirect_leader(), ",")); - newUser.setIsLeaderInDept(StringUtils.join(wxUser.getIs_leader_in_dept(), ",")); - newUser.setTelephone(wxUser.getTelephone()); - newUser.setAlias(wxUser.getAlias()); - newUser.setAddress(wxUser.getAddress()); - newUser.setMainDepartment(String.valueOf(wxUser.getMain_department())); - newUser.setAvatar(wxUser.getAvatar()); - newUser.setThumbAvatar(wxUser.getThumb_avatar()); - newUser.setStatus(String.valueOf(wxUser.getStatus())); - newUser.setQrCode(wxUser.getQr_code()); - newUser.setExternalPosition(wxUser.getExternal_position()); - newUser.setEnable(String.valueOf(1)); - newUser.setCorpid(authCorpInfo.getCorpid()); - newUser.setAppid(appid); - newUser.setDeleted(false); - newUser.setCreatorId(0L); - newUser.setCreateTime(new Date()); - newUser.setUpdaterId(0L); - newUser.setUpdateTime(new Date()); - // 北流铜州医院默认余额1000 - if (WeixinConstants.corpid.equals(newUser.getCorpid())) { - newUser.setBalanceLimit(BigDecimal.valueOf(1000L)); - newUser.setBalance(BigDecimal.valueOf(1000L)); - } - qyUserApplicationService.addUser(newUser); - }); - } + // 识别需要更新的用户 + List toUpdate = qyUserList.stream() + .filter(localUser -> wxUserMap.containsKey(localUser.getUserid())) + .filter(localUser -> { + UserListResponse.UserInfo wxUser = wxUserMap.get(localUser.getUserid()); + return !Objects.equals(localUser.getName(), wxUser.getName()) + || !Objects.equals(localUser.getDepartment(), StringUtils.join(wxUser.getDepartment(), ",")) + || !Objects.equals(localUser.getPosition(), wxUser.getPosition()) + || !Objects.equals(localUser.getUserOrder(), StringUtils.join(wxUser.getOrder(), ",")) + || !Objects.equals(localUser.getMobile(), wxUser.getMobile()) + || !Objects.equals(localUser.getGender(), String.valueOf(wxUser.getGender())) + || !Objects.equals(localUser.getEmail(), wxUser.getEmail()) + || !Objects.equals(localUser.getBizMail(), wxUser.getBiz_mail()) + || !Objects.equals(localUser.getDirectLeader(), StringUtils.join(wxUser.getDirect_leader(), ",")) + || !Objects.equals(localUser.getIsLeaderInDept(), StringUtils.join(wxUser.getIs_leader_in_dept(), ",")) + || !Objects.equals(localUser.getTelephone(), wxUser.getTelephone()) + || !Objects.equals(localUser.getAlias(), wxUser.getAlias()) + || !Objects.equals(localUser.getAddress(), wxUser.getAddress()) + || !Objects.equals(localUser.getMainDepartment(), String.valueOf(wxUser.getMain_department())) + || !Objects.equals(localUser.getAvatar(), wxUser.getAvatar()) + || !Objects.equals(localUser.getThumbAvatar(), wxUser.getThumb_avatar()) + || !Objects.equals(localUser.getStatus(), String.valueOf(wxUser.getStatus())) + || !Objects.equals(localUser.getQrCode(), wxUser.getQr_code()) + || !Objects.equals(localUser.getExternalPosition(), wxUser.getExternal_position()); + }) + .peek(localUser -> { + UserListResponse.UserInfo wxUser = wxUserMap.get(localUser.getUserid()); + localUser.setName(wxUser.getName()); + localUser.setDepartment(StringUtils.join(wxUser.getDepartment(), ",")); + localUser.setUserOrder(StringUtils.join(wxUser.getOrder(), ",")); + localUser.setPosition(wxUser.getPosition()); + localUser.setMobile(wxUser.getMobile()); + localUser.setGender(String.valueOf(wxUser.getGender())); + localUser.setEmail(wxUser.getEmail()); + localUser.setBizMail(wxUser.getBiz_mail()); + localUser.setDirectLeader(StringUtils.join(wxUser.getDirect_leader(), ",")); + localUser.setIsLeaderInDept(StringUtils.join(wxUser.getIs_leader_in_dept(), ",")); + localUser.setTelephone(wxUser.getTelephone()); + localUser.setAlias(wxUser.getAlias()); + localUser.setAddress(wxUser.getAddress()); + localUser.setMainDepartment(String.valueOf(wxUser.getMain_department())); + localUser.setAvatar(wxUser.getAvatar()); + localUser.setThumbAvatar(wxUser.getThumb_avatar()); + localUser.setStatus(String.valueOf(wxUser.getStatus())); + localUser.setQrCode(wxUser.getQr_code()); + localUser.setExternalPosition(wxUser.getExternal_position()); + localUser.setUpdateTime(new Date()); + }) + .map(localUser -> { + UpdateQyUserCommand command = new UpdateQyUserCommand(); + BeanUtils.copyProperties(localUser, command); + return command; + }) + .collect(Collectors.toList()); + log.info("syncUserInfo toUpdate: {}", JSONUtil.toJsonStr(toUpdate)); - // 更新用户 - if (!toUpdate.isEmpty()) { - toUpdate.forEach(qyUserApplicationService::updateUser); - } + // 新增用户 + if (!toAdd.isEmpty()) { + toAdd.forEach(wxUser -> { + AddQyUserCommand newUser = new AddQyUserCommand(); + newUser.setUserid(wxUser.getUserid()); + newUser.setOpenUserid(wxUser.getOpen_userid()); + newUser.setName(wxUser.getName()); + newUser.setDepartment(StringUtils.join(wxUser.getDepartment(), ",")); + newUser.setUserOrder(StringUtils.join(wxUser.getOrder(), ",")); + newUser.setPosition(wxUser.getPosition()); + newUser.setMobile(wxUser.getMobile()); + newUser.setGender(String.valueOf(wxUser.getGender())); + newUser.setEmail(wxUser.getEmail()); + newUser.setBizMail(wxUser.getBiz_mail()); + newUser.setDirectLeader(StringUtils.join(wxUser.getDirect_leader(), ",")); + newUser.setIsLeaderInDept(StringUtils.join(wxUser.getIs_leader_in_dept(), ",")); + newUser.setTelephone(wxUser.getTelephone()); + newUser.setAlias(wxUser.getAlias()); + newUser.setAddress(wxUser.getAddress()); + newUser.setMainDepartment(String.valueOf(wxUser.getMain_department())); + newUser.setAvatar(wxUser.getAvatar()); + newUser.setThumbAvatar(wxUser.getThumb_avatar()); + newUser.setStatus(String.valueOf(wxUser.getStatus())); + newUser.setQrCode(wxUser.getQr_code()); + newUser.setExternalPosition(wxUser.getExternal_position()); + newUser.setEnable(String.valueOf(1)); + newUser.setCorpid(authCorpInfo.getCorpid()); + newUser.setAppid(appid); + newUser.setDeleted(false); + newUser.setCreatorId(0L); + newUser.setCreateTime(new Date()); + newUser.setUpdaterId(0L); + newUser.setUpdateTime(new Date()); + // 北流铜州医院默认余额1000 + if (WeixinConstants.corpid.equals(newUser.getCorpid())) { + newUser.setBalanceLimit(BigDecimal.valueOf(1000L)); + newUser.setBalance(BigDecimal.valueOf(1000L)); + } + qyUserApplicationService.addUser(newUser); + }); + } - // 删除用户 - /*if (!toRemove.isEmpty()) { - BulkOperationCommand command = new BulkOperationCommand<>( - toRemove.stream().map(QyUserEntity::getId).collect(Collectors.toList()) - ); - qyUserApplicationService.deleteUser(command); - }*/ + // 更新用户 + if (!toUpdate.isEmpty()) { + toUpdate.forEach(qyUserApplicationService::updateUser); + } + + // 删除用户 + if (!toRemove.isEmpty()) { + /*BulkOperationCommand command = new BulkOperationCommand<>( + toRemove.stream().map(QyUserEntity::getId).collect(Collectors.toList()) + ); + qyUserApplicationService.deleteUser(command);*/ + toRemove.stream() + .map(removeUser -> { + UpdateQyUserCommand deleteCommand = new UpdateQyUserCommand(); + deleteCommand.setId(removeUser.getId()); + deleteCommand.setEnable("0"); + return deleteCommand; + }) + .forEach(qyUserApplicationService::updateUser); } } catch (Exception e) { log.error("syncUserInfo error", e);