Commit d3cadc5a by fudahua

同步通讯录 微信同步gic

parent 0e0d1655
...@@ -96,4 +96,10 @@ public interface DealSyncOperationApiService { ...@@ -96,4 +96,10 @@ public interface DealSyncOperationApiService {
public Page<PreDealLogInfoDTO> listSyncTaskDetail(String wxEnterpriseId, String taskId, BasePageInfo pageInfo); public Page<PreDealLogInfoDTO> listSyncTaskDetail(String wxEnterpriseId, String taskId, BasePageInfo pageInfo);
/**
* 处理同步
*/
public void dealQywxDepartment(String taskId, String wxEnterpriseId);
} }
...@@ -21,6 +21,11 @@ public interface PreDealLogMapper { ...@@ -21,6 +21,11 @@ public interface PreDealLogMapper {
*/ */
int insertSelective(TabHaobanPreDealLog record); int insertSelective(TabHaobanPreDealLog record);
/**
*/
int insertSelectiveBatch(List<TabHaobanPreDealLog> record);
/** /**
*/ */
TabHaobanPreDealLog selectByPrimaryKey(Integer id); TabHaobanPreDealLog selectByPrimaryKey(Integer id);
......
...@@ -59,6 +59,16 @@ public class TabHaobanPreDealLog implements Serializable { ...@@ -59,6 +59,16 @@ public class TabHaobanPreDealLog implements Serializable {
*/ */
private Date updateTime; private Date updateTime;
private String dataContent;
public String getDataContent() {
return dataContent;
}
public void setDataContent(String dataContent) {
this.dataContent = dataContent;
}
/** /**
*/ */
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
......
...@@ -37,6 +37,8 @@ public class TabHaobanSyncTask implements Serializable { ...@@ -37,6 +37,8 @@ public class TabHaobanSyncTask implements Serializable {
*/ */
private Integer statusFlag; private Integer statusFlag;
private Integer taskType;
/** /**
* *
*/ */
...@@ -51,6 +53,14 @@ public class TabHaobanSyncTask implements Serializable { ...@@ -51,6 +53,14 @@ public class TabHaobanSyncTask implements Serializable {
*/ */
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public Integer getTaskType() {
return taskType;
}
public void setTaskType(Integer taskType) {
this.taskType = taskType;
}
public String getWxEnterpriseId() { public String getWxEnterpriseId() {
return wxEnterpriseId; return wxEnterpriseId;
} }
......
...@@ -52,7 +52,7 @@ public class DepartmentServiceImpl implements DepartmentService { ...@@ -52,7 +52,7 @@ public class DepartmentServiceImpl implements DepartmentService {
if (null == pDepartment) { if (null == pDepartment) {
throw new RuntimeException("父部门不存在"); throw new RuntimeException("父部门不存在");
} }
tab.setChainId(pDepartment.getChainId() + Constant.ID_SEPARATOR + tab.getDepartmentId()); tab.setChainId(pDepartment.getChainId() + Constant.ID_SEPARATOR + pDepartment.getDepartmentId());
tab.setChainName(pDepartment.getChainName() + Constant.NAME_SEPARATOR + tab.getDepartmentName()); tab.setChainName(pDepartment.getChainName() + Constant.NAME_SEPARATOR + tab.getDepartmentName());
tab.setLevel(pDepartment.getLevel() + 1); tab.setLevel(pDepartment.getLevel() + 1);
......
...@@ -34,9 +34,7 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -34,9 +34,7 @@ public class PreDealServiceImpl implements PreDealService {
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
return true; return true;
} }
for (TabHaobanPreDealLog tab : list) { preDealLogMapper.insertSelectiveBatch(list);
preDealLogMapper.insert(tab);
}
return true; return true;
} }
......
...@@ -21,17 +21,16 @@ import com.gic.haoban.manage.api.enums.PreDealTypeEnum; ...@@ -21,17 +21,16 @@ import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum; import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService; import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.api.service.DepartmentApiService; import com.gic.haoban.manage.api.service.DepartmentApiService;
import com.gic.haoban.manage.api.service.WxEnterpriseApiService;
import com.gic.haoban.manage.service.entity.TabHaobanDepartment; import com.gic.haoban.manage.service.entity.TabHaobanDepartment;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog; import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanStaff; import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.TabHaobanSyncTask; import com.gic.haoban.manage.service.entity.TabHaobanSyncTask;
import com.gic.haoban.manage.service.service.DepartmentService; import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffService;
import com.gic.haoban.manage.service.service.SyncTaskService;
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;
import com.gic.wechat.api.service.qywx.QywxDepartmentApiService;
import com.task.allocation.api.AbstractTaskAllocationNewOperation; import com.task.allocation.api.AbstractTaskAllocationNewOperation;
import com.task.allocation.exception.TaskAllocationException; import com.task.allocation.exception.TaskAllocationException;
import com.task.allocation.qo.TaskAllocationComputed; import com.task.allocation.qo.TaskAllocationComputed;
...@@ -42,6 +41,7 @@ import org.slf4j.LoggerFactory; ...@@ -42,6 +41,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
...@@ -85,6 +85,12 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -85,6 +85,12 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
@Autowired @Autowired
private ClerkService clerkService; private ClerkService clerkService;
@Autowired
private QywxDepartmentApiService qywxDepartmentApiService;
@Autowired
private WxEnterpriseService wxEnterpriseService;
private static final String LOCK_KEY = "sync_wx_lock_"; private static final String LOCK_KEY = "sync_wx_lock_";
private static final String LOCK_SUCCESS_KEY = "sync_wx_success_lock_"; private static final String LOCK_SUCCESS_KEY = "sync_wx_success_lock_";
...@@ -100,9 +106,14 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -100,9 +106,14 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
logger.info("待处理数据不存在:{}", params); logger.info("待处理数据不存在:{}", params);
return; return;
} }
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(dealParamMqDTO.getTaskId());
//部门处理 //部门处理
if (dataPre.getDataType().equals(PreDealTypeEnum.group.getVal())) { if (dataPre.getDataType().equals(PreDealTypeEnum.group.getVal())) {
operationMap.get("groupSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre); if (syncTask.getTaskType().equals(0)) {
operationMap.get("groupSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else {
operationMap.get("qywxGroupSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
}
//门店处理 //门店处理
} else if (dataPre.getDataType().equals(PreDealTypeEnum.store.getVal())) { } else if (dataPre.getDataType().equals(PreDealTypeEnum.store.getVal())) {
logger.info("门店处理:{}", params); logger.info("门店处理:{}", params);
...@@ -111,7 +122,11 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -111,7 +122,11 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
//成员处理 //成员处理
} else if (dataPre.getDataType().equals(PreDealTypeEnum.clerk.getVal())) { } else if (dataPre.getDataType().equals(PreDealTypeEnum.clerk.getVal())) {
logger.info("店员处理:{}", params); logger.info("店员处理:{}", params);
operationMap.get("clerkSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre); if (syncTask.getTaskType().equals(0)) {
operationMap.get("clerkSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else {
operationMap.get("qywxClerkSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
}
} else { } else {
logger.info("不是正常数据:{}", params); logger.info("不是正常数据:{}", params);
} }
...@@ -450,4 +465,33 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -450,4 +465,33 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
} }
return page; return page;
} }
@Override
public void dealQywxDepartment(String taskId, String wxEnterpriseId) {
WxEnterpriseDTO wxEnterpriseDTO = wxEnterpriseService.selectById(wxEnterpriseId);
List<com.gic.wechat.api.dto.qywx.DepartmentDTO> list = qywxDepartmentApiService.listSelfDepartment(wxEnterpriseDTO.getCorpid(), wxEnterpriseDTO.getContactSecret(), 1);
if (CollectionUtils.isEmpty(list)) {
logger.info("没有数据同步");
return;
}
List<TabHaobanPreDealLog> dealLogList = list.stream().map(dto -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(dto.getId().toString());
dealLog.setpDataId(dto.getParentid().toString());
dealLog.setDataType(1);
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog;
}).collect(Collectors.toList());
preDealService.insert(dealLogList);
HashSet<String> hashSet = new HashSet<>();
hashSet.add("1");
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.group_sync);
}
} }
package com.gic.haoban.manage.service.task;
import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.enterprise.api.service.StoreGroupService;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.GicClerkDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.api.service.DepartmentApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanSyncTask;
import com.gic.haoban.manage.service.service.DepartmentService;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* Created 2020/4/13.
*
* @author hua
*/
@Service
public class QywxClerkSyncOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(QywxClerkSyncOperation.class);
@Autowired
private DepartmentService departmentService;
@Autowired
private StoreGroupService storeGroupService;
@Autowired
private PreDealService preDealService;
@Autowired
private DepartmentApiService departmentApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private StoreService storeService;
@Autowired
private ClerkService clerkService;
@Autowired
private StaffApiService staffApiService;
@Autowired
private DealSyncOperationApiService dealSyncOperationApiService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("微信成员处理:{}", JSONObject.toJSONString(dealParamMqDTO));
boolean dealFlag = true;
//处理clerk
try {
staffApiService.wxGetAdd(dealParamMqDTO.getData(), dataPre.getWxEnterpriseId());
} catch (Exception e) {
e.printStackTrace();
logger.info("微信成员同步失败:", JSONObject.toJSONString(dataPre));
dealFlag = false;
} finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), "成员处理异常");
} else {
dealSuccess(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), dataPre.getWxEnterpriseId());
}
}
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
logger.info("微信成员处理失败:t:{},d:{}", taskId, dataId);
boolean b = preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
if (!b) {
logger.info("微信成员处理异常:t:{}, d:{}", taskId, dataId);
return;
}
checkDepartmentTask(taskId);
}
@Override
public void dealSuccess(String taskId, String dataId, String enterpriseId, String wxEnterpriseId) {
logger.info("微信成员处理成功:t:{},d:{}", taskId, dataId);
boolean b = preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功");
if (!b) {
logger.info("微信成功修改错误!{}", dataId);
return;
}
checkDepartmentTask(taskId);
}
@Override
public void checkDepartmentTask(String taskId) {
boolean b = preDealService.checkTask(taskId, PreDealTypeEnum.clerk.getVal());
if (!b) {
return;
}
logger.info("微信同步成功:{}", taskId);
String key = "haoban_sync_clerk_task_" + taskId;
RedisUtil.lock(key, 3L);
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
//同步成功 进入门店处理
if (syncTask.getStatusFlag().equals(SyncTaskStatusEnum.clerk_sync.getVal())) {
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());
dealSyncOperationApiService.unlockTask(syncTask.getWxEnterpriseId());
}
}
RedisUtil.unlock(key);
}
}
package com.gic.haoban.manage.service.task;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.dto.StoreGroupDTO;
import com.gic.enterprise.api.service.StoreGroupService;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.base.api.common.Constant;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.DepartmentDTO;
import com.gic.haoban.manage.api.dto.WxEnterpriseDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.api.service.DepartmentApiService;
import com.gic.haoban.manage.service.entity.TabHaobanDepartment;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanSyncTask;
import com.gic.haoban.manage.service.service.DepartmentService;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import com.gic.wechat.api.dto.qywx.UserDTO;
import com.gic.wechat.api.service.qywx.QywxDepartmentApiService;
import com.gic.wechat.api.service.qywx.QywxUserApiService;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Created 2020/4/13.
*
* @author hua
*/
@Service
public class QywxGroupSyncOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(QywxGroupSyncOperation.class);
@Autowired
private DepartmentService departmentService;
@Autowired
private StoreGroupService storeGroupService;
@Autowired
private PreDealService preDealService;
@Autowired
private DepartmentApiService departmentApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private StoreService storeService;
@Autowired
private DealSyncOperationApiService dealSyncOperationApiService;
@Autowired
private StoreSyncOperation storeSyncOperation;
@Autowired
private QywxDepartmentApiService qywxDepartmentApiService;
@Autowired
private QywxUserApiService qywxUserApiService;
@Autowired
private WxEnterpriseService wxEnterpriseService;
@Autowired
private QywxClerkSyncOperation qywxClerkSyncOperation;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("处理企业微信部门:{}", JSONObject.toJSONString(dealParamMqDTO));
String reason = "";
TabHaobanDepartment parent = this.departmentService.getByWxId(dataPre.getpDataId(), dataPre.getWxEnterpriseId());
if (parent == null) {
logger.info("不存在该父部门:c:{},p:{}", dataPre.getDataId(), dataPre.getpDataId());
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), "父部们不存在");
return;
}
TabHaobanDepartment department = departmentService.getByWxId(dealParamMqDTO.getData(), dataPre.getWxEnterpriseId());
if (department != null) {
logger.info("已经同步过了:{}", dataPre.getDataId());
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), dealParamMqDTO.getData() + ":该部门不存在");
return;
}
logger.info("分组是否存在:{}", JSON.toJSONString(department));
String dataContent = dataPre.getDataContent();
com.gic.wechat.api.dto.qywx.DepartmentDTO qywxDepart = JSONObject.parseObject(dataContent, com.gic.wechat.api.dto.qywx.DepartmentDTO.class);
boolean resultFlag = true;
try {
DepartmentDTO dto = new DepartmentDTO();
dto.setDepartmentName(qywxDepart.getName());
dto.setLevel(parent.getLevel() + 1);
dto.setWxEnterpriseId(dataPre.getWxEnterpriseId());
dto.setWxDepartmentId(qywxDepart.getId() + "");
dto.setParentDepartmentId(parent.getDepartmentId());
dto.setSort(qywxDepart.getOrder());
dto.setIsStore(0);
this.departmentService.add(dto);
} catch (Exception e) {
resultFlag = false;
reason = "处理异常";
e.printStackTrace();
logger.info("处理异常");
} finally {
if (!resultFlag) {
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), reason);
} else {
dealSuccess(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), dataPre.getWxEnterpriseId());
}
}
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
logger.info("部门同步异常:{},{}", taskId, dataId);
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
changeChildStatus(taskId, dataId, enterpriseId, reason);
checkDepartmentTask(taskId);
}
/**
* 改变子状态
*
* @param taskId
* @param dataId
* @param enterpriseId
* @param reason
*/
private void changeChildStatus(String taskId, String dataId, String enterpriseId, String reason) {
List<TabHaobanPreDealLog> child = preDealService.listByPDataId(taskId, dataId, PreDealTypeEnum.group.getVal());
if (CollectionUtils.isEmpty(child)) {
return;
}
child.forEach(tab -> {
preDealService.updateStatusByDataId(taskId, tab.getDataId(), PreDealStatusEnum.exception.getVal(), "父分组同步异常");
changeChildStatus(taskId, tab.getDataId(), enterpriseId, reason);
});
}
@Override
public void dealSuccess(String taskId, String dataId, String enterpriseId, String wxEnterpriseId) {
boolean b = preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功");
if (!b) {
logger.info("成功修改错误!{}", dataId);
return;
}
WxEnterpriseDTO wxEnterpriseDTO = wxEnterpriseService.selectById(wxEnterpriseId);
List<UserDTO> list = this.qywxUserApiService.listSelfDepartmentUser(wxEnterpriseDTO.getCorpid(), wxEnterpriseDTO.getContactSecret(), dataId, 0);
List<TabHaobanPreDealLog> hasExists = preDealService.listByPDataId(taskId, dataId, -1);
Set<String> hasDatas = new HashSet<>();
if (CollectionUtils.isNotEmpty(hasExists)) {
hasDatas = hasExists.stream().map(mid -> mid.getDataId()).collect(Collectors.toSet());
}
//预处理门店 写入预处理表
if (CollectionUtils.isNotEmpty(list)) {
Set<String> finalHasDatas = hasDatas;
List<TabHaobanPreDealLog> preDealLogList = list.stream().filter(mid -> {
if (finalHasDatas.contains(mid.getUserid())) {
return false;
}
return true;
}).map(userDTO -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(userDTO.getUserid());
dealLog.setpDataId(dataId);
dealLog.setDataType(PreDealTypeEnum.clerk.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLog.setEnterpriseId(enterpriseId);
return dealLog;
}).collect(Collectors.toList());
preDealService.insert(preDealLogList);
}
List<TabHaobanPreDealLog> preList = preDealService.listReByPDataId(taskId, dataId);
if (CollectionUtils.isNotEmpty(preList)) {
Set<String> mid = preList.stream().map(tab -> tab.getDataId()).collect(Collectors.toSet());
dealDepartmentToMq(taskId, mid, SyncTaskStatusEnum.group_sync);
} else {
checkDepartmentTask(taskId);
}
}
@Override
public void checkDepartmentTask(String taskId) {
boolean b = preDealService.checkTask(taskId, PreDealTypeEnum.group.getVal());
if (!b) {
return;
}
logger.info("微信部门继续成功,开始门店同步:{}", taskId);
String key = "haoban_sync_department_task_" + taskId;
RedisUtil.lock(key, 3L);
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
//同步成功 进入门店处理
if (syncTask.getStatusFlag().equals(SyncTaskStatusEnum.group_sync.getVal())) {
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.clerk_sync.getVal());
List<TabHaobanPreDealLog> dealLogs = preDealService.listByTaskId(taskId, PreDealTypeEnum.clerk.getVal(), PreDealStatusEnum.pre.getVal());
if (CollectionUtils.isEmpty(dealLogs)) {
qywxClerkSyncOperation.checkDepartmentTask(taskId);
} else {
logger.info("处理微信成员开始:{}", taskId);
Set<String> dataIds = dealLogs.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(taskId, dataIds, SyncTaskStatusEnum.clerk_sync);
}
}
RedisUtil.unlock(key);
}
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
dealList.forEach(relationId -> {
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setData(relationId);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("departmentSyncDealMq", JSONObject.toJSONString(dealParamMqDTO));
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId, relationId);
e.printStackTrace();
}
});
}
}
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
<result column="wx_enterprise_id" jdbcType="VARCHAR" property="wxEnterpriseId"/> <result column="wx_enterprise_id" jdbcType="VARCHAR" property="wxEnterpriseId"/>
<result column="enterprise_id" jdbcType="VARCHAR" property="enterpriseId"/> <result column="enterprise_id" jdbcType="VARCHAR" property="enterpriseId"/>
<result column="data_id" jdbcType="VARCHAR" property="dataId"/> <result column="data_id" jdbcType="VARCHAR" property="dataId"/>
<result column="data_content" jdbcType="VARCHAR" property="dataContent"/>
<result column="p_data_id" jdbcType="VARCHAR" property="pDataId"/> <result column="p_data_id" jdbcType="VARCHAR" property="pDataId"/>
<result column="task_id" jdbcType="VARCHAR" property="taskId"/> <result column="task_id" jdbcType="VARCHAR" property="taskId"/>
<result column="data_type" jdbcType="INTEGER" property="dataType"/> <result column="data_type" jdbcType="INTEGER" property="dataType"/>
...@@ -28,11 +29,12 @@ ...@@ -28,11 +29,12 @@
where id = #{id,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER}
</delete> </delete>
<insert id="insert" parameterType="com.gic.haoban.manage.service.entity.TabHaobanPreDealLog"> <insert id="insert" parameterType="com.gic.haoban.manage.service.entity.TabHaobanPreDealLog">
insert into tab_haoban_pre_deal_log ( wx_enterprise_id,enterprise_id, data_id, insert into tab_haoban_pre_deal_log ( wx_enterprise_id,enterprise_id, data_id,data_content,
p_data_id, task_id, data_type, p_data_id, task_id, data_type,
status_flag, create_time, update_time status_flag, create_time, update_time
) )
values (#{wxEnterpriseId,jdbcType=VARCHAR},#{enterpriseId,jdbcType=VARCHAR}, #{dataId,jdbcType=VARCHAR}, values (#{wxEnterpriseId,jdbcType=VARCHAR},#{enterpriseId,jdbcType=VARCHAR},
#{dataId,jdbcType=VARCHAR},#{dataContent}
#{pDataId,jdbcType=VARCHAR}, #{taskId,jdbcType=VARCHAR}, #{dataType,jdbcType=INTEGER}, #{pDataId,jdbcType=VARCHAR}, #{taskId,jdbcType=VARCHAR}, #{dataType,jdbcType=INTEGER},
#{statusFlag,jdbcType=INTEGER}, now(), now() #{statusFlag,jdbcType=INTEGER}, now(), now()
) )
...@@ -52,6 +54,9 @@ ...@@ -52,6 +54,9 @@
<if test="dataId != null"> <if test="dataId != null">
data_id, data_id,
</if> </if>
<if test="dataContent != null">
data_content,
</if>
<if test="pDataId != null"> <if test="pDataId != null">
p_data_id, p_data_id,
</if> </if>
...@@ -64,12 +69,8 @@ ...@@ -64,12 +69,8 @@
<if test="statusFlag != null"> <if test="statusFlag != null">
status_flag, status_flag,
</if> </if>
<if test="createTime != null">
create_time, create_time,
</if> update_time
<if test="updateTime != null">
update_time,
</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null"> <if test="id != null">
...@@ -84,6 +85,9 @@ ...@@ -84,6 +85,9 @@
<if test="dataId != null"> <if test="dataId != null">
#{dataId,jdbcType=VARCHAR}, #{dataId,jdbcType=VARCHAR},
</if> </if>
<if test="dataContent != null">
#{dataContent},
</if>
<if test="pDataId != null"> <if test="pDataId != null">
#{pDataId,jdbcType=VARCHAR}, #{pDataId,jdbcType=VARCHAR},
</if> </if>
...@@ -96,14 +100,27 @@ ...@@ -96,14 +100,27 @@
<if test="statusFlag != null"> <if test="statusFlag != null">
#{statusFlag,jdbcType=INTEGER}, #{statusFlag,jdbcType=INTEGER},
</if> </if>
<if test="createTime != null"> now(),
#{createTime,jdbcType=TIMESTAMP}, now()
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP},
</if>
</trim> </trim>
</insert> </insert>
<insert id="insertSelectiveBatch">
insert into tab_haoban_pre_deal_log ( wx_enterprise_id,enterprise_id, data_id,data_content,
p_data_id, task_id, data_type,
status_flag, create_time, update_time
)
values
<foreach collection="list" separator="," item="item" index="index">
(#{item.wxEnterpriseId,jdbcType=VARCHAR},#{item.enterpriseId,jdbcType=VARCHAR},
#{item.dataId,jdbcType=VARCHAR},#{item.dataContent},
#{item.pDataId,jdbcType=VARCHAR}, #{item.taskId,jdbcType=VARCHAR}, #{item.dataType,jdbcType=INTEGER},
#{item.statusFlag,jdbcType=INTEGER}, now(), now()
)
</foreach>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.gic.haoban.manage.service.entity.TabHaobanPreDealLog"> <update id="updateByPrimaryKeySelective" parameterType="com.gic.haoban.manage.service.entity.TabHaobanPreDealLog">
update tab_haoban_pre_deal_log update tab_haoban_pre_deal_log
<set> <set>
......
...@@ -54,7 +54,7 @@ public class DealSyncTest { ...@@ -54,7 +54,7 @@ public class DealSyncTest {
dealDTO.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000"); dealDTO.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000");
add.add(dealDTO); add.add(dealDTO);
} }
dealSyncOperationApiService.dealDepartment("111", "ca66a01b79474c40b3e7c7f93daf1a3b", add, edit); dealSyncOperationApiService.dealQywxDepartment("111", "ca66a01b79474c40b3e7c7f93daf1a3b");
} }
......
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