Commit 52f96f2f by qwmqiuwenmin

fix

parent 67e74e4f
package com.gic.haoban.manage.api.dto;
import java.io.Serializable;
public class ExternalUserDTO implements Serializable{
private String wxEnterpriseId;
private String name;
private String unionId;
private String avatar;
private String addCreateTime;
private String wxUserId;
private String externalUserId;
private String memberId;
private String storeId;
private String enterpriseId;
private String clerkId;
private String staffId;
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUnionId() {
return unionId;
}
public void setUnionId(String unionId) {
this.unionId = unionId;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getAddCreateTime() {
return addCreateTime;
}
public void setAddCreateTime(String addCreateTime) {
this.addCreateTime = addCreateTime;
}
public String getWxUserId() {
return wxUserId;
}
public void setWxUserId(String wxUserId) {
this.wxUserId = wxUserId;
}
public String getExternalUserId() {
return externalUserId;
}
public void setExternalUserId(String externalUserId) {
this.externalUserId = externalUserId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
}
......@@ -9,7 +9,9 @@ public enum PreDealTypeEnum {
store(1),
clerk(2),
friend_clerk(3),
friend(4);
friend(4),
self_friend(5),
friend_merge(6);
private int val;
PreDealTypeEnum(int val) {
......
......@@ -11,7 +11,9 @@ public enum SyncTaskStatusEnum {
compute(4),
exception_compute(5),
exception_close(6),
friend_sync(7);
self_friend_sync(7),
friend_sync(8),
merge_friend_sync(9);
private int val;
......
......@@ -7,6 +7,7 @@ import com.gic.api.base.commons.JSONResponse;
import com.gic.api.base.commons.Page;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.MemberStoreDTO;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
......@@ -49,4 +50,10 @@ public interface MemberUnionidRelatedApiService {
List<String> listSelfExterialList(String wxEnterpriseId,String wxUserId);
List<String> listExterialList(String wxEnterpriseId, String wxUserId);
ExternalUserDTO getCorpSelfExternalUseridInfo(String wxEnterpriseId,String wxUserId, String externalUserId);
String addExternal(ExternalUserDTO dto);
}
......@@ -171,6 +171,30 @@ public interface PreDealLogMapper {
* @return
*/
public String getRootDataIdByWxEnterpriseIdAndTaskId(@Param("wxEnterpriseId") String wxEnterpriseId,@Param("taskId") String taskId);
/**
* 更新状态
* @param taskId
* @param dataId
* @param status
* @param reason
* @param dataContent
* @return
*/
int updateFriendStatusByDataId(@Param("taskId")String taskId, @Param("dataId")String dataId, @Param("status")int status, @Param("reason")String reason, @Param("dataContent")String dataContent);
/**
*
* @param taskId
* @param pDataId
* @return
*/
int countFailStaffTaskByTaskIdAndPDataId(@Param("taskId")String taskId, @Param("pDataId")String pDataId);
/**
* 根据父id获取
* @param taskId
* @param wxUserId
* @return
*/
List<TabHaobanPreDealLog> listByPDataIdAndTaskId(@Param("taskId")String taskId, @Param("pDataId")String wxUserId);
......
......@@ -159,5 +159,28 @@ public interface PreDealService {
* @return
*/
public String getRootDataIdByWxEnterpriseIdAndTaskId(String wxEnterpriseId,String taskId);
/**
* 更新好友成功状态
* @param taskId
* @param dataId
* @param status
* @param reason
* @param dataContent
*/
public boolean updateFriendStatusByDataId(String taskId, String dataId, int status, String reason, String dataContent);
/**
* 根据父任务判断子任务是否全部完成
* @param taskId
* @param pDataId
* @return
*/
public boolean checkStaffTaskByTaskIdAndPDataId(String taskId, String pDataId);
/**
* 根据父id获取
* @param taskId
* @param wxUserId
* @return
*/
public List<TabHaobanPreDealLog> listByPDataIdAndTaskId(String taskId, String wxUserId);
}
......@@ -165,4 +165,21 @@ public class PreDealServiceImpl implements PreDealService {
return preDealLogMapper.getRootDataIdByWxEnterpriseIdAndTaskId( wxEnterpriseId, taskId);
}
@Override
public boolean updateFriendStatusByDataId(String taskId, String dataId, int status, String reason, String dataContent) {
int i = preDealLogMapper.updateFriendStatusByDataId(taskId, dataId, status, reason,dataContent);
return i >= 0;
}
@Override
public boolean checkStaffTaskByTaskIdAndPDataId(String taskId, String pDataId) {
return preDealLogMapper.countFailStaffTaskByTaskIdAndPDataId(taskId,pDataId) == 0;
}
@Override
public List<TabHaobanPreDealLog> listByPDataIdAndTaskId(String taskId, String wxUserId) {
return preDealLogMapper.listByPDataIdAndTaskId(taskId,wxUserId);
}
}
......@@ -138,11 +138,20 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
}
}else if(dataPre.getDataType().equals(PreDealTypeEnum.friend_clerk.getVal())){
logger.info("好友导购处理:{}", params);
operationMap.get("friendClerkSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
}else if(dataPre.getDataType().equals(PreDealTypeEnum.friend.getVal())){
operationMap.get("friendSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
logger.info("好友处理:{}", params);
} else {
}else if(dataPre.getDataType().equals(PreDealTypeEnum.self_friend.getVal())){
operationMap.get("selfFriendSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
logger.info("好友处理:{}", params);
} else if(dataPre.getDataType().equals(PreDealTypeEnum.friend_merge.getVal())){
operationMap.get("friendMergeSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
logger.info("好友处理:{}", params);
} else {
logger.info("不是正常数据:{}", params);
}
......
......@@ -790,4 +790,112 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
}
return list;
}
@Override
public List<String> listExterialList(String wxEnterpriseId, String wxUserId) {
log.info("【获取应用好友】wxEnterpriseId={},wxUserId={}",wxEnterpriseId,wxUserId);
WxEnterpriseDTO enterprise = wxEnterpriseService.selectById(wxEnterpriseId);
String wxRes = qywxUserApiService.listExternalUserid(enterprise.getCorpid(), config.getWxSuiteid(), wxUserId);
List<String> list = new ArrayList<>();
log.info("【刷下好友】res={}",wxRes);
if(StringUtils.isBlank(wxRes)){
return list;
}
JSONArray jsonArr = JSON.parseArray(wxRes);
if(jsonArr.size() == 0) {
return list;
}
for (Object object : jsonArr) {
list.add(object.toString());
}
return list;
}
@Override
public ExternalUserDTO getCorpSelfExternalUseridInfo(String wxEnterpriseId,String wxUserId, String externalUserId) {
WxEnterpriseDTO wxEnterprise = wxEnterpriseService.selectById(wxEnterpriseId);
if(wxEnterprise == null){
log.info("企业不存在");
return null;
}
SecretSettingDTO secretSetting = secretSettingService.getSecretSetting(wxEnterpriseId, SecretTypeEnum.CONTACT_CUSTOMER.getVal());
if (null == secretSetting) {
log.info("没有配置secret");
return null;
}
String unionIdJson = qywxUserApiService.getCorpSelfExternalUseridInfo(wxEnterprise.getCorpid(), secretSetting.getSecretVal(), externalUserId);
if(StringUtils.isBlank(unionIdJson)){
log.info("好友不存在");
return null;
}
ExternalUserPojo pojo = getExternalUserPojo(unionIdJson, wxUserId, wxEnterpriseId);
return EntityUtil.changeEntityByJSON(ExternalUserDTO.class, pojo);
}
@Override
public String addExternal(ExternalUserDTO dto) {
String wxUserId = dto.getWxUserId();
String wxEnterpriseId = dto.getWxEnterpriseId();
String name = dto.getName();
String createTime = dto.getAddCreateTime();
String unionId = dto.getUnionId();
String externalUserId = dto.getExternalUserId();
String memberId = dto.getMemberId();
String storeId = dto.getStoreId();
String enterpriseId = dto.getEnterpriseId();
String staffId = dto.getStaffId();
String avatar = dto.getAvatar();
String clerkId = dto.getClerkId();
if(StringUtils.isAnyBlank(wxUserId,wxEnterpriseId,name,createTime,unionId,externalUserId,memberId,storeId,enterpriseId,staffId,clerkId)){
log.info("【新增外部联系人】wxUserId={},wxEnterpriseId={},name={},createTime={},unionId ={},externalUserId ={},memberId ={},storeId ={},enterpriseId ={},staffId={},clerkId={}"
+ "",wxUserId,wxEnterpriseId,name,createTime,unionId,externalUserId,memberId,storeId,enterpriseId,staffId,clerkId);
return "参数不对";
}
MemberUnionidRelatedDTO exsitDTO = memberUnionRelatedService.getByParams(wxUserId, wxEnterpriseId,name,createTime);
String uuid = "";
if(exsitDTO == null){
exsitDTO = new MemberUnionidRelatedDTO();
exsitDTO.setAvatar(avatar);
exsitDTO.setExternalUserid(externalUserId);
exsitDTO.setAddCreateTime(createTime);
exsitDTO.setEnterpriseId(enterpriseId);
exsitDTO.setExternalName(name);
exsitDTO.setExternalUserid(externalUserId);
exsitDTO.setWxEnterpriseId(wxEnterpriseId);
exsitDTO.setWxUserId(wxUserId);
exsitDTO.setUnionid(unionId);
uuid = memberUnionRelatedService.addMemberUnionidRelated(exsitDTO);
}else{
uuid = exsitDTO.getUnionid();
exsitDTO.setAvatar(avatar);
exsitDTO.setExternalUserid(externalUserId);
memberUnionRelatedService.update(exsitDTO);
}
TabHaobanExternalClerkRelated external = externalClerkRelatedService.getByParams(wxUserId, wxEnterpriseId,name,createTime);
if(external == null){
TabHaobanExternalClerkRelated related = new TabHaobanExternalClerkRelated();
related.setAddCreateTime(createTime);
related.setClerkId(clerkId);
related.setEnterpriseId(enterpriseId);
related.setExternalName(name);
related.setExternalUserId(externalUserId);
related.setStaffId(staffId);
related.setMemberUnionidRelatedId(uuid);
related.setStoreId(storeId);
related.setUnionid(unionId);
related.setWxEnterpriseId(wxEnterpriseId);
related.setWxUserId(wxUserId);
related.setMemberId(memberId);
externalClerkRelatedService.insert(related);
}else{
external.setMemberId(memberId);
external.setMemberUnionidRelatedId(uuid);
external.setExternalUserId(externalUserId);
external.setUnionid(unionId);
external.setStoreId(storeId);
external.setEnterpriseId(enterpriseId);
external.setClerkId(clerkId);
externalClerkRelatedService.update(external);
}
return "";
}
}
......@@ -5,6 +5,7 @@ import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -38,26 +39,62 @@ public class FriendClerkSyncOperation implements BaseSyncOperation {
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getDataId();
memberUnionidRelatedApiService.cleanNoExsitFriend(wxEnterpriseId, wxUserId);
List<String> selfUserIdList = memberUnionidRelatedApiService.listSelfExterialList(wxEnterpriseId, wxUserId);
List<TabHaobanPreDealLog> dealLogList = selfUserIdList.stream().map(dto -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(dataPre.getDataId());
dealLog.setpDataId(dto);
dealLog.setDataType(PreDealTypeEnum.friend.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(dataPre.getTaskId());
dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog;
}).collect(Collectors.toList());
String reason = "";
boolean dealFlag = true;
try {
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getDataId();
memberUnionidRelatedApiService.cleanNoExsitFriend(wxEnterpriseId, wxUserId);
List<String> selfUserIdList = memberUnionidRelatedApiService.listSelfExterialList(wxEnterpriseId, wxUserId);
List<String> userIdList = memberUnionidRelatedApiService.listExterialList(wxEnterpriseId, wxUserId);
if(CollectionUtils.isNotEmpty(selfUserIdList)){
List<TabHaobanPreDealLog> dealLogList = selfUserIdList.stream().map(dto -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(dto);
dealLog.setpDataId(dataPre.getDataId());
dealLog.setDataType(PreDealTypeEnum.self_friend.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(dataPre.getTaskId());
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(dataPre.getTaskId(), hashSet, SyncTaskStatusEnum.friend_sync);
preDealService.insert(dealLogList);
HashSet<String> hashSet = new HashSet<>(selfUserIdList);
dealDepartmentToMq(dataPre.getTaskId(), hashSet, SyncTaskStatusEnum.self_friend_sync);
}
if(CollectionUtils.isNotEmpty(userIdList)){
List<TabHaobanPreDealLog> dealLogList = userIdList.stream().map(dto -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(dto);
dealLog.setpDataId(dataPre.getDataId());
dealLog.setDataType(PreDealTypeEnum.friend.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(dataPre.getTaskId());
dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog;
}).collect(Collectors.toList());
preDealService.insert(dealLogList);
HashSet<String> hashSet = new HashSet<>(userIdList);
dealDepartmentToMq(dataPre.getTaskId(), hashSet, SyncTaskStatusEnum.friend_sync);
}
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:", JSONObject.toJSONString(dataPre));
reason = "成员好友处理异常";
dealFlag = false;
dealException(dealParamMqDTO.getTaskId(), dataPre.getDataId(), null, "处理异常");
}finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), reason);
} else {
dealSuccess(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), dataPre.getWxEnterpriseId());
}
}
}
@Override
......
package com.gic.haoban.manage.service.task;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.service.PreDealService;
@Service
public class FriendMergeSyncOperation implements BaseSyncOperation{
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private PreDealService preDealService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
String dataContent = dataPre.getDataContent();
ExternalUserDTO pojo = JSON.parseObject(dataContent, ExternalUserDTO.class);
String res = memberUnionidRelatedApiService.addExternal(pojo);
if(StringUtils.isBlank(res)){
dealSuccess(dealParamMqDTO.getTaskId(), dataPre.getDataId(), null, null);
}else{
dealException(dealParamMqDTO.getTaskId(), dataPre.getDataId(), null, res);
}
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
}
@Override
public void dealSuccess(String taskId, String dataId, String enterpriseId, String wxEnterpriseId) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功");
}
@Override
public void checkDepartmentTask(String taskId) {
}
}
package com.gic.haoban.manage.service.task;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.dto.ClerkMainStoreRelatedDTO;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
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.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.pojo.ExternalUserPojo;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.mq.sdk.GicMQClient;
@Service
public class FriendSyncOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(FriendSyncOperation.class);
@Autowired
......@@ -27,6 +49,8 @@ public class FriendSyncOperation implements BaseSyncOperation {
private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService;
@Autowired
private StaffApiService staffApiService;
@Autowired
private StaffClerkRelationService staffClerkRelationService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
String wxEnterpriseId = dataPre.getWxEnterpriseId();
......@@ -43,26 +67,118 @@ public class FriendSyncOperation implements BaseSyncOperation {
preDealService.updateStatusByDataId(taskId, externalUserId, PreDealStatusEnum.exception.getVal(), "主门店不存在");
return;
}
memberUnionidRelatedApiService.add(wxEnterpriseId, externalUserId, wxUserId, mainStore.getStoreId());
dealSuccess(taskId, externalUserId, null, wxEnterpriseId);
StaffClerkRelationDTO staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staff.getStaffId(),mainStore.getStoreId());
if(staffClerkRelationDTO == null){
preDealService.updateStatusByDataId(taskId, externalUserId, PreDealStatusEnum.exception.getVal(), "未绑定导购");
return;
}
ExternalUserDTO pojo = memberUnionidRelatedApiService.getCorpSelfExternalUseridInfo(wxEnterpriseId,wxUserId, externalUserId);
pojo.setEnterpriseId(staffClerkRelationDTO.getEnterpriseId());
pojo.setStoreId(mainStore.getStoreId());
pojo.setClerkId(staffClerkRelationDTO.getClerkId());
if(pojo == null){
dealException(taskId, externalUserId, null, "好友不存在");
}else{
dealSuccess(taskId, externalUserId,JSON.toJSONString(pojo),wxEnterpriseId);
}
checkStaffTask(taskId, wxUserId);
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
}
@Override
public void dealSuccess(String taskId, String dataId, String enterpriseId, String wxEnterpriseId) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功");
public void dealSuccess(String taskId, String dataId, String dataContent, String wxEnterpriseId) {
preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功",dataContent);
}
public void checkStaffTask(String taskId,String wxUserId) {
boolean flag = preDealService.checkStaffTaskByTaskIdAndPDataId(taskId,wxUserId);
if(flag){
List<TabHaobanPreDealLog> list = preDealService.listByPDataIdAndTaskId(taskId, wxUserId);
if(CollectionUtils.isNotEmpty(list)){
Map<String,ExternalUserDTO> map = new HashMap<>();
List<TabHaobanPreDealLog> dealLogList = new ArrayList<>();
for (TabHaobanPreDealLog tabHaobanPreDealLog : list) {
String dataContent = tabHaobanPreDealLog.getDataContent();
if(StringUtils.isNotBlank(dataContent)){
JSONObject json = JSON.parseObject(dataContent);
String addCreateTime = json.getString("addCreateTime");
String name = json.getString("name");
String key = addCreateTime + name;
String unionId = json.getString("unionId");
String clerkId = json.getString("clerkId");
String enterpriseId = json.getString("enterpriseId");
String memberId = json.getString("memberId");
String storeId = json.getString("storeId");
String wxEnterpriseId = json.getString("wxEnterpriseId");
ExternalUserDTO dto = map.get(key);
if(dto != null){
if(tabHaobanPreDealLog.getDataType() == SyncTaskStatusEnum.self_friend_sync.getVal()){
dto.setUnionId(unionId);
dto.setClerkId(clerkId);
dto.setEnterpriseId(enterpriseId);
dto.setMemberId(memberId);
dto.setStoreId(storeId);
}else if(tabHaobanPreDealLog.getDataType() == SyncTaskStatusEnum.friend_sync.getVal()){
dto.setExternalUserId(tabHaobanPreDealLog.getDataId());
}
}else{
ExternalUserDTO dto2 = JSON.parseObject(dataContent, ExternalUserDTO.class);
map.put(key, dto2);
}
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(key);
dealLog.setpDataId(wxUserId);
dealLog.setDataType(PreDealTypeEnum.friend_merge.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLogList.add(dealLog);
}
}
if(CollectionUtils.isNotEmpty(dealLogList)){
preDealService.insert(dealLogList);
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.merge_friend_sync);
}
}
}
}
@Override
public void checkDepartmentTask(String taskId) {
// TODO Auto-generated method stub
}
/**
* 放入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();
}
});
}
}
package com.gic.haoban.manage.service.task;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.clerk.api.service.PowerService;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.dto.ClerkMainStoreRelatedDTO;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
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.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberOpenCardBusinessService;
import com.gic.mq.sdk.GicMQClient;
@Service
public class SelfFriendSyncOperation implements BaseSyncOperation{
private static final Logger logger = LoggerFactory.getLogger(SelfFriendSyncOperation.class);
@Autowired
private PreDealService preDealService;
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService;
@Autowired
private StaffApiService staffApiService;
@Autowired
private StaffClerkRelationService staffClerkRelationService;
@Autowired
private ClerkService clerkService;
@Autowired
private PowerService powerService;
@Autowired
private MemberOpenCardBusinessService memberOpenCardBusinessService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getpDataId();
String taskId = dealParamMqDTO.getTaskId();
String externalUserId = dataPre.getDataId();
StaffDTO staff = staffApiService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
if(staff == null){
preDealService.updateStatusByDataId(taskId, externalUserId, PreDealStatusEnum.exception.getVal(), "成员不存在");
return;
}
ClerkMainStoreRelatedDTO mainStore = clerkMainStoreRelatedApiService.getWxEnterpriseIdAndStaffId(wxEnterpriseId, staff.getStaffId());
if(mainStore == null){
preDealService.updateStatusByDataId(taskId, externalUserId, PreDealStatusEnum.exception.getVal(), "主门店不存在");
return;
}
StaffClerkRelationDTO staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staff.getStaffId(),mainStore.getStoreId());
if(staffClerkRelationDTO == null){
preDealService.updateStatusByDataId(taskId, externalUserId, PreDealStatusEnum.exception.getVal(), "未绑定导购");
return;
}
ExternalUserDTO pojo = memberUnionidRelatedApiService.getCorpSelfExternalUseridInfo(wxEnterpriseId,wxUserId, externalUserId);
if(pojo == null){
dealException(taskId, externalUserId, null, "好友不存在");
}
pojo.setEnterpriseId(staffClerkRelationDTO.getEnterpriseId());
pojo.setStoreId(mainStore.getStoreId());
pojo.setClerkId(staffClerkRelationDTO.getClerkId());
//新增导购和外部联系人关系
String clerkCode = staffClerkRelationDTO.getClerkCode();
ClerkDTO clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
if(clerk == null){
preDealService.updateStatusByDataId(taskId, externalUserId, PreDealStatusEnum.exception.getVal(), "导购不存在");
return;
}
String qrcodeParam = clerk.getQrcodeParam();
if(StringUtils.isBlank(qrcodeParam)){
powerService.saveClerkQrCode(clerk.getClerkId());
clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
qrcodeParam = clerk.getQrcodeParam();
}
MemberDTO member = null;
if(clerk != null && StringUtils.isNotBlank(qrcodeParam)&&StringUtils.isNotBlank(pojo.getUnionId())){
member = memberOpenCardBusinessService.getMemberByQywxChannelParam(staffClerkRelationDTO.getEnterpriseId(),pojo.getUnionId(),"",pojo.getName(),pojo.getAvatar(),qrcodeParam);
}
if(member == null){
preDealService.updateStatusByDataId(taskId, externalUserId, PreDealStatusEnum.exception.getVal(), "会员不存在");
}
pojo.setMemberId(member.getMemberId());
dealSuccess(taskId, externalUserId,JSON.toJSONString(pojo),wxEnterpriseId);
checkStaffTask(taskId, wxUserId);
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
}
@Override
public void dealSuccess(String taskId, String dataId, String dataContent, String wxEnterpriseId) {
preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功",dataContent);
}
public void checkStaffTask(String taskId,String wxUserId) {
boolean flag = preDealService.checkStaffTaskByTaskIdAndPDataId(taskId,wxUserId);
if(flag){
List<TabHaobanPreDealLog> list = preDealService.listByPDataIdAndTaskId(taskId, wxUserId);
if(CollectionUtils.isNotEmpty(list)){
List<TabHaobanPreDealLog> dealLogList = new ArrayList<>();
Map<String,ExternalUserDTO> map = new HashMap<>();
for (TabHaobanPreDealLog tabHaobanPreDealLog : list) {
String dataContent = tabHaobanPreDealLog.getDataContent();
if(StringUtils.isNotBlank(dataContent)){
JSONObject json = JSON.parseObject(dataContent);
String addCreateTime = json.getString("addCreateTime");
String name = json.getString("name");
String key = addCreateTime + name;
String unionId = json.getString("unionId");
String clerkId = json.getString("clerkId");
String enterpriseId = json.getString("enterpriseId");
String memberId = json.getString("memberId");
String storeId = json.getString("storeId");
String wxEnterpriseId = json.getString("wxEnterpriseId");
ExternalUserDTO dto = map.get(key);
if(dto != null){
if(tabHaobanPreDealLog.getDataType() == SyncTaskStatusEnum.self_friend_sync.getVal()){
dto.setUnionId(unionId);
dto.setClerkId(clerkId);
dto.setEnterpriseId(enterpriseId);
dto.setMemberId(memberId);
dto.setStoreId(storeId);
}else if(tabHaobanPreDealLog.getDataType() == SyncTaskStatusEnum.friend_sync.getVal()){
dto.setExternalUserId(tabHaobanPreDealLog.getDataId());
}
}else{
ExternalUserDTO dto2 = JSON.parseObject(dataContent, ExternalUserDTO.class);
map.put(key, dto2);
}
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(key);
dealLog.setpDataId(wxUserId);
dealLog.setDataType(PreDealTypeEnum.friend_merge.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLogList.add(dealLog);
}
}
if(CollectionUtils.isNotEmpty(dealLogList)){
preDealService.insert(dealLogList);
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.merge_friend_sync);
}
}
}
}
@Override
public void checkDepartmentTask(String taskId) {
}
/**
* 放入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();
}
});
}
}
......@@ -344,5 +344,33 @@
and wx_enterprise_id =#{wxEnterpriseId} limit 1
</select>
<update id="updateFriendStatusByDataId">
update tab_haoban_pre_deal_log
<set>
status_flag = #{status,jdbcType=INTEGER},
reason=#{reason},
data_content = #{dataContent}
update_time = now()
</set>
where data_id = #{dataId,jdbcType=INTEGER} and task_id=#{taskId}
</update>
<select id="countFailStaffTaskByTaskIdAndPDataId" resultType="integer">
select
count(*)
from tab_haoban_pre_deal_log
where task_id = #{taskId}
and p_data_id =#{pDataId}
and status_flag != 2
and status_flag != 3
</select>
<select id="listByPDataIdAndTaskId" resultType="java.lang.String">
select
<include refid="Base_Column_List"/>
from tab_haoban_pre_deal_log
where task_id = #{taskId}
and p_data_id =#{pDateId}
</select>
</mapper>
\ 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