Commit e31be430 by 徐高华

Merge branch 'feature/订单储值'

parents 21639892 aab35788
...@@ -209,4 +209,7 @@ public interface DealSyncOperationApiService { ...@@ -209,4 +209,7 @@ public interface DealSyncOperationApiService {
* @param taskId * @param taskId
*/ */
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 staffTaskStatusTimer(String params) ;
} }
...@@ -15,6 +15,7 @@ import com.gic.haoban.manage.web.controller.WebBaseController; ...@@ -15,6 +15,7 @@ import com.gic.haoban.manage.web.controller.WebBaseController;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode; import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.member.tag.api.service.MemberTagImportDealService; import com.gic.member.tag.api.service.MemberTagImportDealService;
import com.gic.mq.sdk.GicMQClient; import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import com.gic.sharing.core.service.api.service.MqApiService; import com.gic.sharing.core.service.api.service.MqApiService;
import com.task.allocation.qo.AllocationTaskQo; import com.task.allocation.qo.AllocationTaskQo;
import com.task.allocation.qo.TaskAllocationComputed; import com.task.allocation.qo.TaskAllocationComputed;
...@@ -263,4 +264,19 @@ public class TestController extends WebBaseController { ...@@ -263,4 +264,19 @@ public class TestController extends WebBaseController {
} }
return resultResponse(HaoBanErrCode.ERR_1); return resultResponse(HaoBanErrCode.ERR_1);
} }
@RequestMapping("/get-cache")
public Object getCache(String key) {
Object o = RedisUtil.getCache(key) ;
return o ;
}
@RequestMapping("/del-cache")
public Object delCache(String key) {
Object o = RedisUtil.getCache(key) ;
if(null != o) {
RedisUtil.delCache(key);
}
return o ;
}
} }
...@@ -92,8 +92,6 @@ public interface PreDealService { ...@@ -92,8 +92,6 @@ public interface PreDealService {
*/ */
public int countByTaskId(String taskId, int dataType, int status); public int countByTaskId(String taskId, int dataType, int status);
public int countByTaskId(String taskId);
/** /**
* 获取任务数量 * 获取任务数量
* *
...@@ -201,5 +199,7 @@ public interface PreDealService { ...@@ -201,5 +199,7 @@ 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 addTaskStaffStatusCache(String taskId,String staffId , int type) ;
} }
...@@ -14,6 +14,7 @@ import com.gic.redis.data.util.RedisUtil; ...@@ -14,6 +14,7 @@ import com.gic.redis.data.util.RedisUtil;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.redisson.api.RSet;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -30,6 +31,9 @@ import java.util.List; ...@@ -30,6 +31,9 @@ import java.util.List;
@Service @Service
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_STAFF_ID_SET_CACHE = "haobanTaskStaffSyncIdSetCache" ;
@Autowired @Autowired
private PreDealLogMapper preDealLogMapper; private PreDealLogMapper preDealLogMapper;
private static final Logger logger = LoggerFactory.getLogger(PreDealServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(PreDealServiceImpl.class);
...@@ -93,16 +97,8 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -93,16 +97,8 @@ public class PreDealServiceImpl implements PreDealService {
@Override @Override
public boolean checkTask(String taskId, int dataType) { public boolean checkTask(String taskId, int dataType) {
String key = taskId+"_checkTask"+dataType ;
Object o = null ; //RedisUtil.getCache(key) ;
if(null == o) {
int i = preDealLogMapper.checkTask(taskId, dataType, PreDealStatusEnum.pre.getVal()); int i = preDealLogMapper.checkTask(taskId, dataType, PreDealStatusEnum.pre.getVal());
boolean flag = (i==0) ; return (i==0) ;
RedisUtil.setCache(key,flag,60*3l);
return flag ;
}else {
return (boolean) o ;
}
} }
@Override @Override
...@@ -116,19 +112,6 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -116,19 +112,6 @@ public class PreDealServiceImpl implements PreDealService {
} }
@Override @Override
public int countByTaskId(String taskId) {
String key = taskId+"countByTaskId" ;
Object o = null ; //RedisUtil.getCache(key) ;
if(null == o) {
int count = this.preDealLogMapper.countByTaskId(taskId,-1,0) ;
RedisUtil.setCache(key,count,60*3l);
return count ;
}else {
return (int) o ;
}
}
@Override
public int countExcepAndPreByTaskId(String taskId, int dataType) { public int countExcepAndPreByTaskId(String taskId, int dataType) {
return preDealLogMapper.countExcepAndPreByTaskId(taskId, dataType); return preDealLogMapper.countExcepAndPreByTaskId(taskId, dataType);
} }
...@@ -192,34 +175,29 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -192,34 +175,29 @@ public class PreDealServiceImpl implements PreDealService {
@Override @Override
public boolean checkFriendTask(String taskId, int dataType) { public boolean checkFriendTask(String taskId, int dataType) {
String key = taskId+"_checkFriendTask"+dataType ;
Object o = null ; //RedisUtil.getCache(key) ;
if(null == o) {
int i = preDealLogMapper.checkTaskFriend(taskId, null, dataType); int i = preDealLogMapper.checkTaskFriend(taskId, null, dataType);
boolean flag = (i==0) ; return (i==0) ;
RedisUtil.setCache(key,flag,60*3l);
return flag ;
}else {
return (boolean) o ;
}
} }
@Override @Override
public boolean checkFriendTaskByPDataId(String taskId, String pDataId, int dataType) { public boolean checkFriendTaskByPDataId(String taskId, String pDataId, int dataType) {
String key = taskId+"_checkFriendTaskByPDataId"+dataType ;
Object o = null ; //RedisUtil.getCache(key) ;
if(null == o) {
int i = preDealLogMapper.checkTaskFriend(taskId, pDataId, dataType); int i = preDealLogMapper.checkTaskFriend(taskId, pDataId, dataType);
boolean flag = (i==0) ; return (i==0) ;
RedisUtil.setCache(key,flag,60*3l);
return flag ;
}else {
return (boolean) o ;
}
} }
@Override @Override
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){
RSet<String> set = RedisUtil.getRedisClient().getSet(HAOBAN_TASK_ID_SET_CACHE);
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) ;
}
} }
...@@ -761,7 +761,7 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA ...@@ -761,7 +761,7 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
return; return;
} }
staffList = staffList.stream().distinct().collect(Collectors.toList()); staffList = staffList.stream().distinct().collect(Collectors.toList());
log.info("staffList={}", JSON.toJSONString(staffList)); log.info("刷新好友,关联导购的staff数={}",staffList.size());
for (String staffId : staffList) { for (String staffId : staffList) {
this.dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staffId, staffId, wxEnterpriseId); this.dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staffId, staffId, wxEnterpriseId);
} }
......
...@@ -1289,9 +1289,10 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1289,9 +1289,10 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
String corpid = qwDTO.getThirdCorpid(); String corpid = qwDTO.getThirdCorpid();
String userId = ""; String userId = "";
TabHaobanStaff staff = staffService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId); TabHaobanStaff staff = staffService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
List<String> list = new ArrayList<>();
if (staff == null) { if (staff == null) {
log.error("员工为空,wxUserId:{}", wxUserId); log.error("员工为空,wxUserId:{}", wxUserId);
return null; return list;
} }
if (qwDTO.needOpenUserId3th()) { if (qwDTO.needOpenUserId3th()) {
userId = staff.getWxOpenUseId(); userId = staff.getWxOpenUseId();
...@@ -1300,7 +1301,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1300,7 +1301,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
log.info("【获取第三方应用好友】wxEnterpriseId={},userId={}", wxEnterpriseId, userId); log.info("【获取第三方应用好友】wxEnterpriseId={},userId={}", wxEnterpriseId, userId);
String wxRes = qywxUserApiService.listExternalUserid(corpid, config.getWxSuiteid(), userId); String wxRes = qywxUserApiService.listExternalUserid(corpid, config.getWxSuiteid(), userId);
List<String> list = new ArrayList<>();
log.info("【查询第三方应用】res={}", wxRes); log.info("【查询第三方应用】res={}", wxRes);
if ("1".equals(wxRes)) { if ("1".equals(wxRes)) {
log.info("代表需要重试"); log.info("代表需要重试");
...@@ -1485,6 +1485,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1485,6 +1485,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
Date firstTime = new Date(); Date firstTime = new Date();
if (CollectionUtils.isNotEmpty(memberList)){ if (CollectionUtils.isNotEmpty(memberList)){
for (TabHaobanExternalClerkRelated a : memberList){ for (TabHaobanExternalClerkRelated a : memberList){
if(null == a.getAddTime()) {
continue;
}
Date addTime = new Date(a.getAddTime() * 1000L); Date addTime = new Date(a.getAddTime() * 1000L);
if ((a.getStatusFlag() == 1 || a.getStatusFlag() == 3 || a.getStatusFlag() == 4) && opTime.before(addTime)){ if ((a.getStatusFlag() == 1 || a.getStatusFlag() == 3 || a.getStatusFlag() == 4) && opTime.before(addTime)){
opTime= addTime; opTime= addTime;
......
...@@ -50,8 +50,6 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -50,8 +50,6 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
@Autowired @Autowired
private WxEnterpriseService wxEnterpriseService ; private WxEnterpriseService wxEnterpriseService ;
private static final String FRIEND_LOCK = "haoban_fresh_wx_friend_lock_";
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_"; private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
@Override @Override
...@@ -62,6 +60,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -62,6 +60,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
try { try {
String wxEnterpriseId = dataPre.getWxEnterpriseId(); String wxEnterpriseId = dataPre.getWxEnterpriseId();
String staffId = dataPre.getDataId() ; String staffId = dataPre.getDataId() ;
this.preDealService.addTaskStatusCache(dataPre.getTaskId());
TabHaobanStaff staff = this.staffService.selectById(staffId) ; TabHaobanStaff staff = this.staffService.selectById(staffId) ;
if(null == staff) { if(null == staff) {
logger.info("staff不存在,staffId={}",staffId); logger.info("staff不存在,staffId={}",staffId);
...@@ -76,16 +75,14 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -76,16 +75,14 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
List<String> selfUserIdList = memberUnionidRelatedApiService.listSelfExterialList(wxEnterpriseId, dkWxUserId); List<String> selfUserIdList = memberUnionidRelatedApiService.listSelfExterialList(wxEnterpriseId, dkWxUserId);
List<String> delUserIdList = selfUserIdList ; List<String> delUserIdList = selfUserIdList ;
logger.info("selfUserIdList={}", JSONObject.toJSONString(selfUserIdList)); logger.info("selfUserIdList={}", JSONObject.toJSONString(selfUserIdList));
if (CollectionUtils.isEmpty(selfUserIdList)) { if (null == selfUserIdList) {
logger.info("自建应用调用第三方接口进入重试");
dealFlag = tryAgainToMq(dataPre); dealFlag = tryAgainToMq(dataPre);
reason = "重试次数过多"; reason = "企微接口失败";
return; return;
} }
if (CollectionUtils.isEmpty(selfUserIdList)) { if (CollectionUtils.isEmpty(selfUserIdList)) {
logger.info("该用户无代开外部联系人:{}", JSONObject.toJSONString(dataPre));
dealFlag = false; dealFlag = false;
reason = "该用户没有外部联系人"; reason = "外部联系人";
return; return;
} }
String wxUserId3th = staff.getWxUserId() ; String wxUserId3th = staff.getWxUserId() ;
...@@ -94,19 +91,17 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -94,19 +91,17 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
} }
List<String> userIdList = null ; List<String> userIdList = null ;
if(!qwDTO.isSelf()) { if(!qwDTO.isSelf()) {
//第三方服务商的外部联系人
userIdList = memberUnionidRelatedApiService.listExterialList(wxEnterpriseId, wxUserId3th); userIdList = memberUnionidRelatedApiService.listExterialList(wxEnterpriseId, wxUserId3th);
delUserIdList = userIdList ; delUserIdList = userIdList ;
if (CollectionUtils.isEmpty(selfUserIdList)) { if (null == userIdList) {
dealFlag = tryAgainToMq(dataPre); dealFlag = tryAgainToMq(dataPre);
reason = "重试次数过多"; reason = "企微接口失败";
logger.info("第三方服务商外部联系人调用失败进入重试:{}", dataPre.getDataId()); logger.info("第三方服务商外部联系人调用失败进入重试:{}", dataPre.getDataId());
return; return;
} }
if (CollectionUtils.isEmpty(userIdList)) { if (CollectionUtils.isEmpty(userIdList)) {
logger.info("该用户无第三方外部联系人:{}", JSONObject.toJSONString(dataPre));
dealFlag = false; dealFlag = false;
reason = "该用户没有外部联系人"; reason = "外部联系人";
return; return;
} }
} }
...@@ -158,35 +153,9 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -158,35 +153,9 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
} }
} }
/**
* 重试机制
*
* @param dataPre
* @return
*/
private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
logger.info("需要重试:{}", dataPre.getDataId());
String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
Object cache = RedisUtil.getCache(key);
if (null == cache) {
RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS);
} else {
int count = Integer.parseInt(cache.toString());
RedisUtil.setCache(key, count + 1);
if (count > 4) {
return false;
}
}
HashSet<String> reTrysIds = new HashSet<>();
reTrysIds.add(dataPre.getDataId());
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.friend_clerk_sync);
return true;
}
@Override @Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) { public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason); preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
checkDepartmentTask(taskId);
} }
@Override @Override
...@@ -195,33 +164,10 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -195,33 +164,10 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
List<String> dataIds = preDealService.listReDataIdByPDataId(taskId, dataId, PreDealTypeEnum.self_friend.getVal()); List<String> dataIds = preDealService.listReDataIdByPDataId(taskId, dataId, PreDealTypeEnum.self_friend.getVal());
logger.info("下一步处理的数据:{},dataId={}", JSONObject.toJSONString(dataIds) , dataId); logger.info("下一步处理的数据:{},dataId={}", JSONObject.toJSONString(dataIds) , dataId);
dealDepartmentToMq(taskId, new HashSet<>(dataIds), SyncTaskStatusEnum.self_friend_sync); dealDepartmentToMq(taskId, new HashSet<>(dataIds), SyncTaskStatusEnum.self_friend_sync);
checkDepartmentTask(taskId);
} }
@Override @Override
public void checkDepartmentTask(String taskId) { public void checkDepartmentTask(String taskId) {
boolean b = preDealService.checkFriendTask(taskId, PreDealTypeEnum.friend_clerk.getVal());
if (!b) {
return;
}
logger.info("好友同步成功:{}", taskId);
String key = "haoban_sync_friend_task_" + taskId;
RedisUtil.lock(key, 3L);
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
if (syncTask.getStatusFlag() == SyncTaskStatusEnum.compute.getVal()
|| syncTask.getStatusFlag() == SyncTaskStatusEnum.exception_compute.getVal()) {
logger.info("已经处理成功:{}", taskId);
return;
}
int errCount = preDealService.countByTaskId(taskId, -1, PreDealStatusEnum.exception.getVal());
if (errCount > 0) {
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_compute.getVal());
} else {
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal());
}
String staffLockKey = FRIEND_LOCK + syncTask.getAddUser();
RedisUtil.delCache(staffLockKey);
RedisUtil.unlock(key);
} }
...@@ -252,4 +198,23 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -252,4 +198,23 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
} }
} }
private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
logger.info("需要重试:{}", dataPre.getDataId());
String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
Object cache = RedisUtil.getCache(key);
if (null == cache) {
RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS);
} else {
int count = Integer.parseInt(cache.toString());
RedisUtil.setCache(key, count + 1);
if (count > 4) {
return false;
}
}
HashSet<String> reTrysIds = new HashSet<>();
reTrysIds.add(dataPre.getDataId());
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.friend_clerk_sync);
return true;
}
} }
...@@ -12,6 +12,7 @@ import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService; ...@@ -12,6 +12,7 @@ import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog; import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.exception.WxApiLimitException; import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.service.*; import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.service.out.impl.DealSyncOperationApiServiceImpl;
import com.gic.haoban.manage.service.task.BaseSyncOperation; import com.gic.haoban.manage.service.task.BaseSyncOperation;
import com.gic.mq.sdk.GicMQClient; import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
...@@ -42,8 +43,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -42,8 +43,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
private MemberUnionidRelatedApiService memberUnionidRelatedApiService; private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired @Autowired
private SyncTaskService syncTaskService; private SyncTaskService syncTaskService;
@Autowired
private FriendClerkSyncNewOperation friendClerkSyncNewOperation;
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_"; private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
...@@ -123,31 +122,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -123,31 +122,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
} }
} }
/**
* 重试机制
*
* @param dataPre
* @return
*/
private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
logger.info("需要重试friend:{}", dataPre.getDataId());
String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
Object cache = RedisUtil.getCache(key);
if (null == cache) {
RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS);
} else {
Integer count = Integer.valueOf(cache.toString());
RedisUtil.setCache(key, count + 1);
if (count > 4) {
return false;
}
}
HashSet<String> reTrysIds = new HashSet<>();
reTrysIds.add(dataPre.getDataId());
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.friend_sync);
return true;
}
public void dealException(String taskId, String dataId, String pDataId, String reason, String relationKey) { public void dealException(String taskId, String dataId, String pDataId, String reason, String relationKey) {
preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason, null, relationKey, PreDealTypeEnum.friend.getVal()); preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason, null, relationKey, PreDealTypeEnum.friend.getVal());
checkDepartmentTask(taskId, pDataId); checkDepartmentTask(taskId, pDataId);
...@@ -171,41 +145,30 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -171,41 +145,30 @@ public class FriendSyncNewOperation 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,8);
boolean b = preDealService.checkFriendTaskByPDataId(taskId, pDataId, PreDealTypeEnum.friend.getVal());
if (!b) {
return;
}
logger.info("同步第三方服务商好友结束:{},{}", taskId, pDataId);
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(), "成功");
this.checkDepartmentTask(taskId);
}
RedisUtil.unlock(lockKey);
} }
@Override @Override
public void checkDepartmentTask(String taskId) { public void checkDepartmentTask(String taskId) {
friendClerkSyncNewOperation.checkDepartmentTask(taskId);
} }
/** private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
* 放入mq处理部门数据 String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
* Object cache = RedisUtil.getCache(key);
* @param taskId if (null == cache) {
* @param dealList RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS);
*/ } else {
Integer count = Integer.valueOf(cache.toString());
RedisUtil.setCache(key, count + 1);
if (count > 4) {
return false;
}
}
HashSet<String> reTrysIds = new HashSet<>();
reTrysIds.add(dataPre.getDataId());
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.friend_sync);
return true;
}
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) { private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务 //预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal()); syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
......
...@@ -48,8 +48,6 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -48,8 +48,6 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
@Autowired @Autowired
private SyncTaskService syncTaskService; private SyncTaskService syncTaskService;
@Autowired @Autowired
private FriendClerkSyncNewOperation friendClerkSyncNewOperation;
@Autowired
private WxEnterpriseService wxEnterpriseService ; private WxEnterpriseService wxEnterpriseService ;
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_"; private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
...@@ -95,11 +93,11 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -95,11 +93,11 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
} }
//更新状态 //更新状态
this.preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, json.toJSONString(), relationKey , PreDealTypeEnum.self_friend.getVal()); this.preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, json.toJSONString(), relationKey , PreDealTypeEnum.self_friend.getVal());
dealSuccess(taskId, dataPre.getDataId(), null, wxEnterpriseId); dealSuccess(taskId, dataPre.getDataId(), dataPre.getpDataId(), wxEnterpriseId);
} catch (WxApiLimitException e) { } catch (WxApiLimitException e) {
logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre)); logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre));
dealFlag = tryAgainToMq(dataPre); dealFlag = tryAgainToMq(dataPre);
reason = "getCorpSelfExternalUseridInfo重试次数过多"; reason = "重试次数过多";
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e); logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e);
...@@ -120,18 +118,25 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -120,18 +118,25 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
} }
@Override @Override
public void dealSuccess(String taskId, String dataId, String dataContent, String wxEnterpriseId) { public void dealSuccess(String taskId, String dataId, String pDataId, String wxEnterpriseId) {
TabHaobanPreDealLog data = preDealService.getByDataId(taskId, dataId, PreDealTypeEnum.self_friend.getVal(), -1); checkDepartmentTask(taskId, pDataId);
//校验成功是否都
checkDepartmentTask(taskId, data.getpDataId());
} }
/** /**
* 重试机制 * 自定义处理流程
* *
* @param dataPre * @param taskId
* @return * @param pDataId
*/ */
public void checkDepartmentTask(String taskId, String pDataId) {
this.preDealService.addTaskStaffStatusCache(taskId,pDataId,7);
}
@Override
public void checkDepartmentTask(String taskId) {
}
private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) { private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
logger.info("需要重试self:{}", dataPre.getDataId()); logger.info("需要重试self:{}", dataPre.getDataId());
String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId(); String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
...@@ -150,55 +155,6 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -150,55 +155,6 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.self_friend_sync); dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.self_friend_sync);
return true; return true;
} }
/**
* 自定义处理流程
*
* @param taskId
* @param pDataId
*/
public void checkDepartmentTask(String taskId, String pDataId) {
//校验是否都已经处理完成
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(), "成功");
//校验异常
this.checkDepartmentTask(taskId);
} else {
dealDepartmentToMq(taskId, new HashSet<>(dataIds), SyncTaskStatusEnum.friend_sync);
}
RedisUtil.unlock(lockKey);
}
@Override
public void checkDepartmentTask(String taskId) {
friendClerkSyncNewOperation.checkDepartmentTask(taskId);
}
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) { private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务 //预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal()); syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
...@@ -219,5 +175,4 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -219,5 +175,4 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }
...@@ -257,6 +257,18 @@ ...@@ -257,6 +257,18 @@
and status_flag in(0,3) and status_flag in(0,3)
</select> </select>
<select id="checkTaskFriend" resultType="Integer">
select
count(*)
from tab_haoban_pre_deal_log
where task_id = #{taskId}
<if test="pDataId!=null">
and p_data_id=#{pDataId}
</if>
and data_type=#{dataType}
and status_flag in(0,1)
</select>
<select id="listRebuildDepartByTaskId" resultMap="BaseResultMap"> <select id="listRebuildDepartByTaskId" resultMap="BaseResultMap">
SELECT SELECT
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>
...@@ -365,18 +377,6 @@ ...@@ -365,18 +377,6 @@
and data_type =#{dataType} and data_type =#{dataType}
</select> </select>
<select id="checkTaskFriend" resultType="Integer">
select
count(*)
from tab_haoban_pre_deal_log
where task_id = #{taskId}
<if test="pDataId!=null">
and p_data_id=#{pDataId}
</if>
and data_type=#{dataType}
and status_flag in(0,1)
</select>
<select id="listReDataIdByPDataId" resultType="String"> <select id="listReDataIdByPDataId" resultType="String">
select select
data_id data_id
......
...@@ -5,6 +5,8 @@ import cn.hutool.core.convert.Convert; ...@@ -5,6 +5,8 @@ import cn.hutool.core.convert.Convert;
import com.gic.api.base.commons.BasePageInfo; import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.DateUtil;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.ExcelUtils; import com.gic.commons.util.ExcelUtils;
import com.gic.commons.webapi.reponse.RestResponse; import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.service.EnterpriseService; import com.gic.enterprise.api.service.EnterpriseService;
...@@ -22,10 +24,12 @@ import com.gic.haoban.manage.api.service.StaffApiService; ...@@ -22,10 +24,12 @@ import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.chat.GroupChatApiService; import com.gic.haoban.manage.api.service.chat.GroupChatApiService;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode; import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.haoban.manage.web.log.LogRecordUserServiceImpl; import com.gic.haoban.manage.web.log.LogRecordUserServiceImpl;
import com.gic.haoban.manage.web.vo.chat.GroupChatUserQuitVO;
import com.gic.log.record.anno.GicLogRecord; import com.gic.log.record.anno.GicLogRecord;
import com.gic.log.record.util.GicLogRecordCategoryEnum; import com.gic.log.record.util.GicLogRecordCategoryEnum;
import com.gic.log.record.util.GicLogRecordEvaluationContext; import com.gic.log.record.util.GicLogRecordEvaluationContext;
import com.gic.log.record.util.GicLogRecordOptTypeEnum; import com.gic.log.record.util.GicLogRecordOptTypeEnum;
import org.apache.commons.collections.ArrayStack;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
...@@ -147,6 +151,39 @@ public class GroupChatController { ...@@ -147,6 +151,39 @@ public class GroupChatController {
return RestResponse.successResult(page.getResult()); return RestResponse.successResult(page.getResult());
} }
@RequestMapping("user/quit/excel")
public RestResponse<Boolean> excel(HttpServletRequest request, HttpServletResponse response,GroupChatUserSearchQDTO qdto, BasePageInfo basePageInfo) {
ServiceResponse<Page<GroupChatUserDTO>> page = this.groupChatApiService.listUserPage(qdto, basePageInfo);
if (page.isSuccess() && CollUtil.isNotEmpty(page.getResult().getResult())){
List<GroupChatUserQuitVO> voList = new ArrayList<>() ;
for (GroupChatUserDTO dto : page.getResult().getResult()) {
GroupChatUserQuitVO vo = EntityUtil.changeEntityByJSON(GroupChatUserQuitVO.class,dto) ;
vo.setUserQuitTimeExcel(DateUtil.dateToStr(dto.getUserQuitTime(),"yyyy-MM-dd HH:mm:ss"));
if(dto.getUserType()==1) {
vo.setUserTypeExcel("企业成员");
}else if(dto.getUserType()==2) {
vo.setUserTypeExcel("外部成员");
}else {
vo.setUserTypeExcel("客户");
}
voList.add(vo) ;
}
String fileName = "退群记录";
List<String> titleList = Arrays.asList("群成员", "身份", "群名称", "群主", "退群时间");
List<String> fileList = Arrays.asList("userName", "userTypeExcel", "chatName", "staffName", "userQuitTimeExcel");
try {
ExcelUtils.xls(response, request, fileName, voList, fileList, titleList);
} catch (Exception e) {
e.printStackTrace();
logger.info("导出失败");
}
return RestResponse.successResult(true);
}
return RestResponse.successResult(false);
}
@RequestMapping("detail") @RequestMapping("detail")
public RestResponse<Object> detail(Long groupChatId) { public RestResponse<Object> detail(Long groupChatId) {
if (null == groupChatId) { if (null == groupChatId) {
......
package com.gic.haoban.manage.web.vo.chat;
import java.io.Serializable;
/**
*
* @ClassName: TabHaobanGroupChatUser
* @Description: TODO
* @Author 徐高华
* @Date 2022年11月25日 15:42:52
* @Modify
* @CopyRight
*/
public class GroupChatUserQuitVO implements Serializable{
private static final long serialVersionUID = 21771431486600L;
/**1企业成员2外部联系人3客户*/
private String userTypeExcel;
/**姓名*/
private String userName;
/**昵称*/
private String nickName;
/**用户退群时间*/
private String userQuitTimeExcel;
private String chatName ;
private String staffName ;
public String getUserTypeExcel() {
return userTypeExcel;
}
public void setUserTypeExcel(String userTypeExcel) {
this.userTypeExcel = userTypeExcel;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getUserQuitTimeExcel() {
return userQuitTimeExcel;
}
public void setUserQuitTimeExcel(String userQuitTimeExcel) {
this.userQuitTimeExcel = userQuitTimeExcel;
}
public String getChatName() {
return chatName;
}
public void setChatName(String chatName) {
this.chatName = chatName;
}
public String getStaffName() {
return staffName;
}
public void setStaffName(String staffName) {
this.staffName = staffName;
}
}
\ No newline at end of file
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