fix(企业微信): 修复用户同步逻辑中的用户删除处理
将用户删除逻辑从物理删除改为逻辑删除,通过将用户状态设置为禁用(enable=0)来实现 修复了之前被注释掉的用户删除逻辑,确保数据一致性
This commit is contained in:
parent
a6c12859e3
commit
0ea23e7309
|
@ -33,6 +33,7 @@ import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import com.agileboot.domain.qywx.user.QyUserApplicationService;
|
import com.agileboot.domain.qywx.user.QyUserApplicationService;
|
||||||
import com.agileboot.domain.qywx.user.command.AddQyUserCommand;
|
import com.agileboot.domain.qywx.user.command.AddQyUserCommand;
|
||||||
|
@ -418,6 +419,7 @@ public class QywxScheduleJob {
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
|
||||||
|
List<UserListResponse.UserInfo> wxUsers = new ArrayList<>();
|
||||||
for (QyDepartmentEntity department : departmentList) {
|
for (QyDepartmentEntity department : departmentList) {
|
||||||
// 获取部门用户列表
|
// 获取部门用户列表
|
||||||
UserListResponse userList = QywxApiUtil.getUserList(accessToken.getAccessToken(), department.getDepartmentId());
|
UserListResponse userList = QywxApiUtil.getUserList(accessToken.getAccessToken(), department.getDepartmentId());
|
||||||
|
@ -431,145 +433,153 @@ public class QywxScheduleJob {
|
||||||
}
|
}
|
||||||
log.info("获取部门用户列表成功: {}", JSONUtil.toJsonStr(userList));
|
log.info("获取部门用户列表成功: {}", JSONUtil.toJsonStr(userList));
|
||||||
|
|
||||||
List<UserListResponse.UserInfo> wxUsers = userList.getUserlist();
|
List<UserListResponse.UserInfo> wxUsersList = userList.getUserlist();
|
||||||
if (wxUsers == null || wxUsers.isEmpty()) {
|
if (wxUsersList != null) {
|
||||||
continue;
|
wxUsers.addAll(wxUsersList);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Map<String, UserListResponse.UserInfo> wxUserMap = wxUsers.stream()
|
Map<String, UserListResponse.UserInfo> wxUserMap = wxUsers.stream()
|
||||||
.collect(Collectors.toMap(UserListResponse.UserInfo::getUserid, Function.identity()));
|
.collect(Collectors.toMap(UserListResponse.UserInfo::getUserid, Function.identity()));
|
||||||
|
|
||||||
List<QyUserEntity> qyUserList = qyUserApplicationService.selectAll();
|
List<QyUserEntity> qyUserList = qyUserApplicationService.selectAll();
|
||||||
if (null == qyUserList) {
|
if (null == qyUserList) {
|
||||||
qyUserList = new ArrayList<>();
|
qyUserList = new ArrayList<>();
|
||||||
}
|
}
|
||||||
qyUserList = qyUserList.stream()
|
qyUserList = qyUserList.stream()
|
||||||
.filter(u -> u.getCorpid().equals(authCorpInfo.getCorpid()) && u.getAppid().equals(appid))
|
.filter(u -> u.getCorpid().equals(authCorpInfo.getCorpid()) && u.getAppid().equals(appid))
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
// 识别需要新增的用户
|
|
||||||
List<QyUserEntity> finalQyUserList = qyUserList;
|
|
||||||
List<UserListResponse.UserInfo> toAdd = wxUsers.stream()
|
|
||||||
.filter(wxUser -> finalQyUserList.stream().noneMatch(u -> u.getUserid().equals(wxUser.getUserid())))
|
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
log.info("syncUserInfo toAdd: {}", JSONUtil.toJsonStr(toAdd));
|
|
||||||
|
|
||||||
// 识别需要删除的用户
|
// 识别需要新增的用户
|
||||||
/* List<QyUserEntity> toRemove = qyUserList.stream()
|
List<QyUserEntity> finalQyUserList = qyUserList;
|
||||||
.filter(localUser -> !wxUserMap.containsKey(localUser.getUserid()))
|
List<UserListResponse.UserInfo> toAdd = wxUsers.stream()
|
||||||
.collect(Collectors.toList());
|
.filter(wxUser -> finalQyUserList.stream().noneMatch(u -> u.getUserid().equals(wxUser.getUserid())))
|
||||||
log.info("syncUserInfo toRemove: {}", JSONUtil.toJsonStr(toRemove));*/
|
.collect(Collectors.toList());
|
||||||
|
log.info("syncUserInfo toAdd: {}", JSONUtil.toJsonStr(toAdd));
|
||||||
|
|
||||||
// 识别需要更新的用户
|
// 识别需要删除的用户
|
||||||
List<UpdateQyUserCommand> toUpdate = qyUserList.stream()
|
List<QyUserEntity> toRemove = qyUserList.stream()
|
||||||
.filter(localUser -> wxUserMap.containsKey(localUser.getUserid()))
|
.filter(localUser -> !wxUserMap.containsKey(localUser.getUserid()))
|
||||||
.filter(localUser -> {
|
.collect(Collectors.toList());
|
||||||
UserListResponse.UserInfo wxUser = wxUserMap.get(localUser.getUserid());
|
log.info("syncUserInfo toRemove: {}", JSONUtil.toJsonStr(toRemove));
|
||||||
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 (!toAdd.isEmpty()) {
|
List<UpdateQyUserCommand> toUpdate = qyUserList.stream()
|
||||||
toAdd.forEach(wxUser -> {
|
.filter(localUser -> wxUserMap.containsKey(localUser.getUserid()))
|
||||||
AddQyUserCommand newUser = new AddQyUserCommand();
|
.filter(localUser -> {
|
||||||
newUser.setUserid(wxUser.getUserid());
|
UserListResponse.UserInfo wxUser = wxUserMap.get(localUser.getUserid());
|
||||||
newUser.setOpenUserid(wxUser.getOpen_userid());
|
return !Objects.equals(localUser.getName(), wxUser.getName())
|
||||||
newUser.setName(wxUser.getName());
|
|| !Objects.equals(localUser.getDepartment(), StringUtils.join(wxUser.getDepartment(), ","))
|
||||||
newUser.setDepartment(StringUtils.join(wxUser.getDepartment(), ","));
|
|| !Objects.equals(localUser.getPosition(), wxUser.getPosition())
|
||||||
newUser.setUserOrder(StringUtils.join(wxUser.getOrder(), ","));
|
|| !Objects.equals(localUser.getUserOrder(), StringUtils.join(wxUser.getOrder(), ","))
|
||||||
newUser.setPosition(wxUser.getPosition());
|
|| !Objects.equals(localUser.getMobile(), wxUser.getMobile())
|
||||||
newUser.setMobile(wxUser.getMobile());
|
|| !Objects.equals(localUser.getGender(), String.valueOf(wxUser.getGender()))
|
||||||
newUser.setGender(String.valueOf(wxUser.getGender()));
|
|| !Objects.equals(localUser.getEmail(), wxUser.getEmail())
|
||||||
newUser.setEmail(wxUser.getEmail());
|
|| !Objects.equals(localUser.getBizMail(), wxUser.getBiz_mail())
|
||||||
newUser.setBizMail(wxUser.getBiz_mail());
|
|| !Objects.equals(localUser.getDirectLeader(), StringUtils.join(wxUser.getDirect_leader(), ","))
|
||||||
newUser.setDirectLeader(StringUtils.join(wxUser.getDirect_leader(), ","));
|
|| !Objects.equals(localUser.getIsLeaderInDept(), StringUtils.join(wxUser.getIs_leader_in_dept(), ","))
|
||||||
newUser.setIsLeaderInDept(StringUtils.join(wxUser.getIs_leader_in_dept(), ","));
|
|| !Objects.equals(localUser.getTelephone(), wxUser.getTelephone())
|
||||||
newUser.setTelephone(wxUser.getTelephone());
|
|| !Objects.equals(localUser.getAlias(), wxUser.getAlias())
|
||||||
newUser.setAlias(wxUser.getAlias());
|
|| !Objects.equals(localUser.getAddress(), wxUser.getAddress())
|
||||||
newUser.setAddress(wxUser.getAddress());
|
|| !Objects.equals(localUser.getMainDepartment(), String.valueOf(wxUser.getMain_department()))
|
||||||
newUser.setMainDepartment(String.valueOf(wxUser.getMain_department()));
|
|| !Objects.equals(localUser.getAvatar(), wxUser.getAvatar())
|
||||||
newUser.setAvatar(wxUser.getAvatar());
|
|| !Objects.equals(localUser.getThumbAvatar(), wxUser.getThumb_avatar())
|
||||||
newUser.setThumbAvatar(wxUser.getThumb_avatar());
|
|| !Objects.equals(localUser.getStatus(), String.valueOf(wxUser.getStatus()))
|
||||||
newUser.setStatus(String.valueOf(wxUser.getStatus()));
|
|| !Objects.equals(localUser.getQrCode(), wxUser.getQr_code())
|
||||||
newUser.setQrCode(wxUser.getQr_code());
|
|| !Objects.equals(localUser.getExternalPosition(), wxUser.getExternal_position());
|
||||||
newUser.setExternalPosition(wxUser.getExternal_position());
|
})
|
||||||
newUser.setEnable(String.valueOf(1));
|
.peek(localUser -> {
|
||||||
newUser.setCorpid(authCorpInfo.getCorpid());
|
UserListResponse.UserInfo wxUser = wxUserMap.get(localUser.getUserid());
|
||||||
newUser.setAppid(appid);
|
localUser.setName(wxUser.getName());
|
||||||
newUser.setDeleted(false);
|
localUser.setDepartment(StringUtils.join(wxUser.getDepartment(), ","));
|
||||||
newUser.setCreatorId(0L);
|
localUser.setUserOrder(StringUtils.join(wxUser.getOrder(), ","));
|
||||||
newUser.setCreateTime(new Date());
|
localUser.setPosition(wxUser.getPosition());
|
||||||
newUser.setUpdaterId(0L);
|
localUser.setMobile(wxUser.getMobile());
|
||||||
newUser.setUpdateTime(new Date());
|
localUser.setGender(String.valueOf(wxUser.getGender()));
|
||||||
// 北流铜州医院默认余额1000
|
localUser.setEmail(wxUser.getEmail());
|
||||||
if (WeixinConstants.corpid.equals(newUser.getCorpid())) {
|
localUser.setBizMail(wxUser.getBiz_mail());
|
||||||
newUser.setBalanceLimit(BigDecimal.valueOf(1000L));
|
localUser.setDirectLeader(StringUtils.join(wxUser.getDirect_leader(), ","));
|
||||||
newUser.setBalance(BigDecimal.valueOf(1000L));
|
localUser.setIsLeaderInDept(StringUtils.join(wxUser.getIs_leader_in_dept(), ","));
|
||||||
}
|
localUser.setTelephone(wxUser.getTelephone());
|
||||||
qyUserApplicationService.addUser(newUser);
|
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()) {
|
if (!toAdd.isEmpty()) {
|
||||||
toUpdate.forEach(qyUserApplicationService::updateUser);
|
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()) {
|
if (!toUpdate.isEmpty()) {
|
||||||
BulkOperationCommand<Integer> command = new BulkOperationCommand<>(
|
toUpdate.forEach(qyUserApplicationService::updateUser);
|
||||||
toRemove.stream().map(QyUserEntity::getId).collect(Collectors.toList())
|
}
|
||||||
);
|
|
||||||
qyUserApplicationService.deleteUser(command);
|
// 删除用户
|
||||||
}*/
|
if (!toRemove.isEmpty()) {
|
||||||
|
/*BulkOperationCommand<Integer> 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) {
|
} catch (Exception e) {
|
||||||
log.error("syncUserInfo error", e);
|
log.error("syncUserInfo error", e);
|
||||||
|
|
Loading…
Reference in New Issue