Commit f13c402e by 徐高华

同步好友优化

parent 8caf0632
...@@ -211,4 +211,5 @@ public interface DealSyncOperationApiService { ...@@ -211,4 +211,5 @@ public interface DealSyncOperationApiService {
void dealTagTask(String wxEnterpriseId, String enterpriseId, List<String> tagIds, String taskId); void dealTagTask(String wxEnterpriseId, String enterpriseId, List<String> tagIds, String taskId);
void taskStatusTimer(String params) ; void taskStatusTimer(String params) ;
void staffTaskStatusTimer(String params) ;
} }
...@@ -200,5 +200,6 @@ public interface PreDealService { ...@@ -200,5 +200,6 @@ public interface PreDealService {
public List<String> listReDataIdByPDataId(String taskId, String pDataId, Integer dataType); public List<String> listReDataIdByPDataId(String taskId, String pDataId, Integer dataType);
public void addTaskStatusCache(String taskId) ; public void addTaskStatusCache(String taskId) ;
public void addTaskStaffStatusCache(String taskId,String staffId , int type) ;
} }
...@@ -32,6 +32,7 @@ import java.util.List; ...@@ -32,6 +32,7 @@ import java.util.List;
public class PreDealServiceImpl implements PreDealService { public class PreDealServiceImpl implements PreDealService {
public static final String HAOBAN_TASK_ID_SET_CACHE = "haobanTaskSyncIdSetCache" ; public static final String HAOBAN_TASK_ID_SET_CACHE = "haobanTaskSyncIdSetCache" ;
public static final String HAOBAN_TASK_STAFF_ID_SET_CACHE = "haobanTaskStaffSyncIdSetCache" ;
@Autowired @Autowired
private PreDealLogMapper preDealLogMapper; private PreDealLogMapper preDealLogMapper;
...@@ -188,9 +189,15 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -188,9 +189,15 @@ public class PreDealServiceImpl implements PreDealService {
public List<String> listReDataIdByPDataId(String taskId, String pDataId, Integer dataType) { public List<String> listReDataIdByPDataId(String taskId, String pDataId, Integer dataType) {
return preDealLogMapper.listReDataIdByPDataId(taskId, pDataId, dataType); return preDealLogMapper.listReDataIdByPDataId(taskId, pDataId, dataType);
} }
@Override
public void addTaskStatusCache(String taskId){ public void addTaskStatusCache(String taskId){
RSet<String> set = RedisUtil.getRedisClient().getSet(HAOBAN_TASK_ID_SET_CACHE); RSet<String> set = RedisUtil.getRedisClient().getSet(HAOBAN_TASK_ID_SET_CACHE);
set.add(taskId) ; set.add(taskId) ;
} }
@Override
public void addTaskStaffStatusCache(String taskId,String staffId , int type) {
String key = taskId+"#"+staffId+"#"+type ;
RSet<String> set = RedisUtil.getRedisClient().getSet(HAOBAN_TASK_STAFF_ID_SET_CACHE);
set.add(key) ;
}
} }
...@@ -808,9 +808,7 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -808,9 +808,7 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
/** /**
* 定时修改任务状态 * 定时修改任务状态
* @param params
*/ */
@Override @Override
public void taskStatusTimer(String params) { public void taskStatusTimer(String params) {
try { try {
...@@ -825,8 +823,13 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -825,8 +823,13 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
it.remove(); it.remove();
continue; continue;
} }
// 刷新整个企业好友 if(task.getCreateTime().getTime()+1000*60*60*24< System.currentTimeMillis()) {
if(task.getTaskType()==SyncTaskTypeEnum.FRIEND_WX_ENTEPRISE.getType()) { logger.info("超过一天taskId={}",taskId);
it.remove();
continue;
}
if(task.getTaskType()==SyncTaskTypeEnum.FRIEND_WX_ENTEPRISE.getType()
|| task.getTaskType()==SyncTaskTypeEnum.FRIEND_SINGLE.getType() || task.getTaskType()==SyncTaskTypeEnum.FRIEND_STORE.getType()) {
boolean flag = this.updateTaskStatus(taskId); boolean flag = this.updateTaskStatus(taskId);
if(flag) { if(flag) {
it.remove(); it.remove();
...@@ -839,9 +842,49 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -839,9 +842,49 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
} }
} }
@Override
public void staffTaskStatusTimer(String params) {
try {
RSet<String> set = RedisUtil.getRedisClient().getSet(PreDealServiceImpl.HAOBAN_TASK_STAFF_ID_SET_CACHE);
logger.info("处理好办任务状态={}",set);
Iterator<String> it = set.iterator() ;
while(it.hasNext()) {
String v = it.next() ;
String[] arr = v.split("#") ;
if(arr.length != 3) {
logger.info("异常{},{}",v );
it.remove();
continue;
}
String taskId = arr[0] ;
String staffId = arr[1] ;
int type = Integer.valueOf(arr[2]) ;
TabHaobanSyncTask task = syncTaskService.getSyncTask(taskId);
if(null == task) {
logger.info("任务不存在taskId={}",taskId);
it.remove();
continue;
}
if(task.getCreateTime().getTime()+1000*60*60*24< System.currentTimeMillis()) {
logger.info("超过一天taskId={},{}",taskId,staffId);
it.remove();
continue;
}
boolean flag = this.updateStaffTaskStatus(taskId,staffId,type) ;
if(flag) {
it.remove();
}
}
logger.info("处理好办任务状态定时完成");
}catch(Exception e) {
logger.warn(e.toString(),e);
}
}
private boolean updateTaskStatus(String taskId) { private boolean updateTaskStatus(String taskId) {
boolean b = preDealService.checkFriendTask(taskId, PreDealTypeEnum.friend_clerk.getVal()); boolean b = preDealService.checkFriendTask(taskId, PreDealTypeEnum.friend_clerk.getVal());
if (!b) { if (!b) {
logger.info("更新task状态,还未完成");
return false; return false;
} }
logger.info("好友同步成功:{}", taskId); logger.info("好友同步成功:{}", taskId);
...@@ -859,4 +902,61 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -859,4 +902,61 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
} }
return true ; return true ;
} }
private boolean updateStaffTaskStatus(String taskId ,String stffId , int type) {
if(type == 7) {
boolean b = preDealService.checkFriendTaskByPDataId(taskId, stffId, PreDealTypeEnum.self_friend.getVal());
if (!b) {
logger.info("校验直接返回");
return false;
}
logger.info("同步第三方好友开始:{},{}", taskId, stffId);
String key = "haoban_sync_self_friend_task_" + taskId + ":" + stffId;
String lockKey = "haoban_sync_self_friend_task_lock_" + taskId + ":" + stffId;
RedisUtil.lock(lockKey, 3L);
Object hasDealCheck = RedisUtil.getCache(key);
if (hasDealCheck != null) {
logger.info("重复提交处理第三方好友:{}", stffId);
RedisUtil.unlock(lockKey);
return false;
}
RedisUtil.setCache(key, stffId, 30L, TimeUnit.SECONDS);
List<String> dataIds = preDealService.listReDataIdByPDataId(taskId, stffId, PreDealTypeEnum.friend.getVal());
if (CollectionUtils.isEmpty(dataIds)) {
logger.info("第三方的数据为空");
//更新父级别
preDealService.updateStatusByDataId(taskId, stffId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功");
} else {
dealDepartmentToMq(taskId, new HashSet<>(dataIds), SyncTaskStatusEnum.friend_sync);
}
RedisUtil.unlock(lockKey);
}
if(type == 8) {
boolean b = preDealService.checkFriendTaskByPDataId(taskId, stffId, PreDealTypeEnum.friend.getVal());
if (!b) {
return false ;
}
String staffLockKey = DealSyncOperationApiServiceImpl.FRIEND_LOCK + stffId;
RedisUtil.delCache(staffLockKey);
logger.info("同步第三方好友结束:{},{},{}", taskId, stffId,staffLockKey);
String key = "haoban_sync_third_friend_task_" + taskId + ":" + stffId;
String lockKey = "haoban_sync_third_friend_task_lock_" + taskId + ":" + stffId;
RedisUtil.lock(lockKey, 3L);
Object hasDealCheck = RedisUtil.getCache(key);
if (hasDealCheck != null) {
logger.info("重复提交结束第三方好友:{}", stffId);
RedisUtil.unlock(lockKey);
return false;
}
RedisUtil.setCache(key, stffId, 30L, TimeUnit.SECONDS);
TabHaobanPreDealLog preDealLog = preDealService.getByDataId(taskId, stffId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.dealing.getVal());
if (preDealLog != null) {
preDealService.updateStatusByDataId(taskId, stffId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功");
}
RedisUtil.unlock(lockKey);
}
return true ;
}
} }
...@@ -170,29 +170,7 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -170,29 +170,7 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
* @param pDataId * @param pDataId
*/ */
public void checkDepartmentTask(String taskId, String pDataId) { public void checkDepartmentTask(String taskId, String pDataId) {
boolean b = preDealService.checkFriendTaskByPDataId(taskId, pDataId, PreDealTypeEnum.friend.getVal()); this.preDealService.addTaskStaffStatusCache(taskId,pDataId,8);
if (!b) {
return;
}
String staffLockKey = DealSyncOperationApiServiceImpl.FRIEND_LOCK + pDataId;
RedisUtil.delCache(staffLockKey);
logger.info("同步第三方好友结束:{},{},{}", taskId, pDataId,staffLockKey);
String key = "haoban_sync_third_friend_task_" + taskId + ":" + pDataId;
String lockKey = "haoban_sync_third_friend_task_lock_" + taskId + ":" + pDataId;
RedisUtil.lock(lockKey, 3L);
Object hasDealCheck = RedisUtil.getCache(key);
if (hasDealCheck != null) {
logger.info("重复提交结束第三方好友:{}", pDataId);
RedisUtil.unlock(lockKey);
return;
}
RedisUtil.setCache(key, pDataId, 30L, TimeUnit.SECONDS);
TabHaobanPreDealLog preDealLog = preDealService.getByDataId(taskId, pDataId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.dealing.getVal());
if (preDealLog != null) {
preDealService.updateStatusByDataId(taskId, pDataId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功");
}
RedisUtil.unlock(lockKey);
} }
@Override @Override
......
...@@ -154,32 +154,7 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -154,32 +154,7 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
* @param pDataId * @param pDataId
*/ */
public void checkDepartmentTask(String taskId, String pDataId) { public void checkDepartmentTask(String taskId, String pDataId) {
//校验是否都已经处理完成 this.preDealService.addTaskStaffStatusCache(taskId,pDataId,7);
boolean b = preDealService.checkFriendTaskByPDataId(taskId, pDataId, PreDealTypeEnum.self_friend.getVal());
if (!b) {
logger.info("校验直接返回");
return;
}
logger.info("同步第三方好友开始:{},{}", taskId, pDataId);
String key = "haoban_sync_self_friend_task_" + taskId + ":" + pDataId;
String lockKey = "haoban_sync_self_friend_task_lock_" + taskId + ":" + pDataId;
RedisUtil.lock(lockKey, 3L);
Object hasDealCheck = RedisUtil.getCache(key);
if (hasDealCheck != null) {
logger.info("重复提交处理第三方好友:{}", pDataId);
RedisUtil.unlock(lockKey);
return;
}
RedisUtil.setCache(key, pDataId, 30L, TimeUnit.SECONDS);
List<String> dataIds = preDealService.listReDataIdByPDataId(taskId, pDataId, PreDealTypeEnum.friend.getVal());
if (CollectionUtils.isEmpty(dataIds)) {
logger.info("第三方的数据为空");
//更新父级别
preDealService.updateStatusByDataId(taskId, pDataId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功");
} else {
dealDepartmentToMq(taskId, new HashSet<>(dataIds), SyncTaskStatusEnum.friend_sync);
}
RedisUtil.unlock(lockKey);
} }
@Override @Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment