fix: 加锁,限制并发导致数据重复

This commit is contained in:
xiang2lin 2024-11-08 08:35:06 +08:00
parent ec06ed2272
commit 9f02f730c9
1 changed files with 29 additions and 13 deletions

View File

@ -56,6 +56,10 @@ public class GenericEventConsumer {
public static final String GETUSERAPPCODE="8000050001";
//获取钉钉部门详情接口编码
public static final String GETDETPAPPCODE="8000050002";
//user锁对象
static final Object userLockObj = new Object();
//dept部门锁
static final Object deptLockObj = new Object();
/**
* 消费通讯录事件订阅消息
*
@ -95,21 +99,33 @@ public class GenericEventConsumer {
}
if (flag){
if ("user".equals(type)){
JSONArray userIds = bizData.getJSONArray("userId");
//调用钉钉查询用户详情接口
for (int i=0; i<userIds.size();i++){
//获取用户详情
String userRes = getUserById(String.valueOf(userIds.get(i)));
//保存钉钉用户到mdm
String userMdmRes = createUser(userRes,eventType);
synchronized (userLockObj) {
JSONArray userIds = bizData.getJSONArray("userId");
//调用钉钉查询用户详情接口
for (int i=0; i<userIds.size();i++){
try {
//获取用户详情
String userRes = getUserById(String.valueOf(userIds.get(i)));
//保存钉钉用户到mdm
String userMdmRes = createUser(userRes,eventType);
}catch (Exception ex ){
logger.error("钉钉用户保存到主数据报错:{}",ex);
}
}
}
}else if ("dept".equals(type)){
JSONArray deptIdArr = bizData.getJSONArray("deptId");
for (int i=0; i<deptIdArr.size(); i++){
//查询部门详情
String deptRes = getDeptById(deptIdArr.getLong(i));
//保存部门到mdm
String deptMdmRes = createDept(deptRes,apiCode);
synchronized (deptLockObj){
try {
JSONArray deptIdArr = bizData.getJSONArray("deptId");
for (int i=0; i<deptIdArr.size(); i++){
//查询部门详情
String deptRes = getDeptById(deptIdArr.getLong(i));
//保存部门到mdm
String deptMdmRes = createDept(deptRes,apiCode);
}
}catch (Exception e){
logger.error("钉钉部门保存到主数据报错:{}",e);
}
}
}
}