Commit 20ccfe64 by fudahua

Merge branch 'up-4.15'

# Conflicts:
#	haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/out/impl/MemberUnionidRelatedApiServiceImpl.java
parents ddd14eee 648e8cd4
package com.gic.haoban.manage.api.dto;
import java.io.Serializable;
import java.util.Date;
/**
* Created 2021/3/22.
*
* @author hua
*/
public class FriendStoreInfoDTO implements Serializable {
private String storeId;
private String storeCode;
private String storeName;
private String clerkId;
private String clerkCode;
private String clerkName;
private String clerkPhoneNumber;
private String addFriendTime;
private String wxUserId;
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getStoreCode() {
return storeCode;
}
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getClerkCode() {
return clerkCode;
}
public void setClerkCode(String clerkCode) {
this.clerkCode = clerkCode;
}
public String getClerkName() {
return clerkName;
}
public void setClerkName(String clerkName) {
this.clerkName = clerkName;
}
public String getClerkPhoneNumber() {
return clerkPhoneNumber;
}
public void setClerkPhoneNumber(String clerkPhoneNumber) {
this.clerkPhoneNumber = clerkPhoneNumber;
}
public String getAddFriendTime() {
return addFriendTime;
}
public void setAddFriendTime(String addFriendTime) {
this.addFriendTime = addFriendTime;
}
public String getWxUserId() {
return wxUserId;
}
public void setWxUserId(String wxUserId) {
this.wxUserId = wxUserId;
}
@Override
public String toString() {
return "FriendStoreInfoDTO{" +
"storeId='" + storeId + '\'' +
", storeCode='" + storeCode + '\'' +
", storeName='" + storeName + '\'' +
", clerkId='" + clerkId + '\'' +
", clerkCode='" + clerkCode + '\'' +
", clerkName='" + clerkName + '\'' +
", clerkPhoneNumber='" + clerkPhoneNumber + '\'' +
", addFriendTime='" + addFriendTime + '\'' +
", wxUserId='" + wxUserId + '\'' +
'}';
}
}
package com.gic.haoban.manage.api.enums;
/**
* Created by hua on 2021/3/22.
*/
public enum SyncTaskTypeEnum {
QYWX_CONTACT(1, "后门同步企业微信架构"),
FRIEND_SINGLE(4, "单个成员刷新好友"),
FRIEND_STORE(5, "刷新门店好友"),;
private int type;
private String taskName;
SyncTaskTypeEnum(int type, String taskName) {
this.type = type;
this.taskName = taskName;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
public static String getTaskName(int taskType) {
SyncTaskTypeEnum[] values = SyncTaskTypeEnum.values();
for (SyncTaskTypeEnum value : values) {
if (value.getType() == taskType) {
return value.getTaskName();
}
}
return null;
}
}
...@@ -137,10 +137,9 @@ public interface DealSyncOperationApiService { ...@@ -137,10 +137,9 @@ public interface DealSyncOperationApiService {
* @param wxEnterpriseId * @param wxEnterpriseId
* @param taskName * @param taskName
* @param staffId * @param staffId
* @param desc
* @return * @return
*/ */
public String createWxFriendSingleTask(String wxEnterpriseId, String taskName, String staffId, String staffName); public String createWxFriendTaskSingle(String wxEnterpriseId, String taskName, String staffId, String staffName, int syncTaskType);
/** /**
* 单个导购刷新 * 单个导购刷新
...@@ -150,6 +149,15 @@ public interface DealSyncOperationApiService { ...@@ -150,6 +149,15 @@ public interface DealSyncOperationApiService {
* @param wxEnterpriseId * @param wxEnterpriseId
*/ */
public void dealWxFriendClerkSingle(String taskId, String wxUserId, String staffId,String wxEnterpriseId); public void dealWxFriendClerkSingle(String taskId, String wxUserId, String staffId,String wxEnterpriseId);
/**
* 单个导购刷新
*
* @param taskId
* @param wxEnterpriseId
*/
public void dealWxFriendStore(String taskId, String storeId, String wxEnterpriseId);
/** /**
* 定时 * 定时
* @param res * @param res
......
...@@ -6,10 +6,8 @@ import java.util.List; ...@@ -6,10 +6,8 @@ import java.util.List;
import com.gic.api.base.commons.JSONResponse; import com.gic.api.base.commons.JSONResponse;
import com.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
import com.gic.haoban.base.api.common.BasePageInfo; import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO; import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.ExternalUserDTO; import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.dto.MemberStoreDTO;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
public interface MemberUnionidRelatedApiService { public interface MemberUnionidRelatedApiService {
...@@ -19,6 +17,13 @@ public interface MemberUnionidRelatedApiService { ...@@ -19,6 +17,13 @@ public interface MemberUnionidRelatedApiService {
void delMemberUnionidRelated(MemberUnionidRelatedDTO dto); void delMemberUnionidRelated(MemberUnionidRelatedDTO dto);
/**
* 处理外部联系人异步
*
* @param params
*/
void dealQywxExternalUser(String params);
ExternalClerkRelatedDTO getByMemberId(String staffId, String memberId); ExternalClerkRelatedDTO getByMemberId(String staffId, String memberId);
List<MemberUnionidRelatedDTO> getByWxUserIdAndWxEnterpriseId(String wxUserId, String wxEnterpriseId); List<MemberUnionidRelatedDTO> getByWxUserIdAndWxEnterpriseId(String wxUserId, String wxEnterpriseId);
...@@ -58,4 +63,22 @@ public interface MemberUnionidRelatedApiService { ...@@ -58,4 +63,22 @@ public interface MemberUnionidRelatedApiService {
ExternalUserDTO getExternalUseridInfo(String wxEnterpriseId, String wxUserId, String externalUserId); ExternalUserDTO getExternalUseridInfo(String wxEnterpriseId, String wxUserId, String externalUserId);
/**
* 清理外部联系人
*
* @param wxEnterpriseId
* @param wxUserId
* @param externalUserIds
*/
void cleanNoExsitFriendNew(String wxEnterpriseId, String wxUserId, List<String> externalUserIds);
/**
* 根据会员的unionid 获取好友导购列表
*
* @param enterpriseId
* @param unionId
* @return
*/
ServiceResponse<List<FriendStoreInfoDTO>> listFriendClerkByMemberUnionid(String enterpriseId, String unionId);
} }
...@@ -24,12 +24,14 @@ public interface MemberUnionidRelatedMapper { ...@@ -24,12 +24,14 @@ public interface MemberUnionidRelatedMapper {
int cleanByCid(@Param("cid") String cid); int cleanByCid(@Param("cid") String cid);
MemberUnionidRelated getByUnionId(@Param("wxUserId")String wxUserId, @Param("unionid")String unionid); MemberUnionidRelated getByUnionId(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("wxUserId") String wxUserId, @Param("unionid") String unionid);
MemberUnionidRelated getByMemberId(@Param("wxUserId")String wxUserId, @Param("memberId")String memberId); MemberUnionidRelated getByMemberId(@Param("wxUserId")String wxUserId, @Param("memberId")String memberId);
void deleteByUnionidAndUserId(@Param("externalUserid")String externalUserid,@Param("wxUserId") String wxUserId); void deleteByUnionidAndUserId(@Param("externalUserid")String externalUserid,@Param("wxUserId") String wxUserId);
void delMemberUnionidRelatedBatch(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("externalUserids") List<String> externalUserid, @Param("wxUserId") String wxUserId);
List<MemberUnionidRelated> getByWxUserIdAndWxEnterpriseId(@Param("wxUserId")String wxUserId, @Param("wxEnterpriseId")String wxEnterpriseId); List<MemberUnionidRelated> getByWxUserIdAndWxEnterpriseId(@Param("wxUserId")String wxUserId, @Param("wxEnterpriseId")String wxEnterpriseId);
List<MemberUnionidRelated> listByEnterpriseIdAndDate(@Param("enterpriseId")String enterpriseId,@Param("date")Date date); List<MemberUnionidRelated> listByEnterpriseIdAndDate(@Param("enterpriseId")String enterpriseId,@Param("date")Date date);
......
...@@ -181,6 +181,19 @@ public interface PreDealLogMapper { ...@@ -181,6 +181,19 @@ public interface PreDealLogMapper {
* @return * @return
*/ */
int updateFriendStatusByDataId(@Param("taskId")String taskId, @Param("dataId")String dataId, @Param("status")int status, @Param("reason")String reason, @Param("dataContent")String dataContent); 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 dataId
* @param status
* @param reason
* @param dataContent
* @return
*/
int updateFriendStatusAndRelationKeyByDataId(@Param("taskId") String taskId, @Param("dataId") String dataId, @Param("status") int status, @Param("reason") String reason, @Param("dataContent") String dataContent, @Param("relationKey") String relationKey);
/** /**
* *
* @param taskId * @param taskId
...@@ -196,6 +209,34 @@ public interface PreDealLogMapper { ...@@ -196,6 +209,34 @@ public interface PreDealLogMapper {
*/ */
List<TabHaobanPreDealLog> listByPDataIdAndTaskId(@Param("taskId")String taskId, @Param("pDataId")String wxUserId); List<TabHaobanPreDealLog> listByPDataIdAndTaskId(@Param("taskId")String taskId, @Param("pDataId")String wxUserId);
/**
* 根据关联键获取字段
*
* @param taskId
* @param relationKey
* @return
*/
TabHaobanPreDealLog getByRelationKey(@Param("taskId") String taskId, @Param("dataType") int dataType, @Param("relationKey") String relationKey);
/**
* 校验任务
*
* @param taskId
* @param dataType
* @return
*/
public int checkTaskFriend(@Param("taskId") String taskId, @Param("pDataId") String pDataId, @Param("dataType") int dataType);
/**
* 获取dataid 根据父id
*
* @param taskId
* @param pDataId
* @return
*/
List<String> listReDataIdByPDataId(@Param("taskId") String taskId, @Param("dataId") String pDataId
, @Param("dataType") int dataType);
} }
\ No newline at end of file
...@@ -25,6 +25,8 @@ public interface TabHaobanExternalClerkRelatedMapper { ...@@ -25,6 +25,8 @@ public interface TabHaobanExternalClerkRelatedMapper {
void delByUserIdAndExternalUserId(TabHaobanExternalClerkRelated record); void delByUserIdAndExternalUserId(TabHaobanExternalClerkRelated record);
void delByUserIdAndExternalUserIdBatch(@Param("wxUserId") String wxUserId, @Param("wxEnterpriseId") String wxEnterpriseId, @Param("externalUserIds") List<String> externalUserIds);
void delByClerkIdAndStaffId(@Param("clerkId")String clerkId, @Param("staffId")String staffId); void delByClerkIdAndStaffId(@Param("clerkId")String clerkId, @Param("staffId")String staffId);
void cleanStaffRelated(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("staffIds")List<String> staffIds); void cleanStaffRelated(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("staffIds")List<String> staffIds);
...@@ -43,4 +45,13 @@ public interface TabHaobanExternalClerkRelatedMapper { ...@@ -43,4 +45,13 @@ public interface TabHaobanExternalClerkRelatedMapper {
List<TabHaobanExternalClerkRelated> listByWxEnterpriseIdAndWxUserIds(@Param("userIdList")List<String> userIdList, @Param("wxEnterpriseId")String wxEnterpriseId); List<TabHaobanExternalClerkRelated> listByWxEnterpriseIdAndWxUserIds(@Param("userIdList")List<String> userIdList, @Param("wxEnterpriseId")String wxEnterpriseId);
TabHaobanExternalClerkRelated getByMemberId(@Param("wxUserId")String wxUserId, @Param("memberId")String memberId); TabHaobanExternalClerkRelated getByMemberId(@Param("wxUserId")String wxUserId, @Param("memberId")String memberId);
/**
* 外部联系人的unionid
*
* @param enterpriseId
* @param unionId
* @return
*/
List<TabHaobanExternalClerkRelated> listExternalByUnionId(@Param("enterpriseId") String enterpriseId, @Param("unionId") String unionId);
} }
\ No newline at end of file
...@@ -87,4 +87,6 @@ public interface TabHaobanStaffClerkRelationMapper { ...@@ -87,4 +87,6 @@ public interface TabHaobanStaffClerkRelationMapper {
List<TabHaobanStaffClerkRelation> listByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId); List<TabHaobanStaffClerkRelation> listByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId);
List<TabHaobanStaffClerkRelation> pageByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId); List<TabHaobanStaffClerkRelation> pageByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId);
List<TabHaobanStaffClerkRelation> listBindByStoreId(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("storeId") String storeId);
} }
\ No newline at end of file
...@@ -61,8 +61,18 @@ public class TabHaobanPreDealLog implements Serializable { ...@@ -61,8 +61,18 @@ public class TabHaobanPreDealLog implements Serializable {
private String dataContent; private String dataContent;
private String relationKey;
private String reason; private String reason;
public String getRelationKey() {
return relationKey;
}
public void setRelationKey(String relationKey) {
this.relationKey = relationKey;
}
public String getReason() { public String getReason() {
return reason; return reason;
} }
......
package com.gic.haoban.manage.service.exception;
/**
* Created 2021/3/31.
*
* @author hua
*/
public class WxApiLimitException extends RuntimeException {
public WxApiLimitException(String message) {
super(message);
}
}
package com.gic.haoban.manage.service.pojo;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
import java.io.Serializable;
/**
* Created 2021/4/2.
*
* @author hua
*/
public class DealQywxExternalUserPojo implements Serializable {
public enum DealType {
//删除
del(0),
//新增
add(1);
private int type;
DealType(int type) {
this.type = type;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
// 0 删除 1新增
private int type;
private MemberUnionidRelatedDTO data;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public MemberUnionidRelatedDTO getData() {
return data;
}
public void setData(MemberUnionidRelatedDTO data) {
this.data = data;
}
}
package com.gic.haoban.manage.service.pojo;
import java.io.Serializable;
/**
* Created 2021/3/18.
*
* @author hua
*/
public class ExternalUserIdWxUserIdPojo implements Serializable {
private String externalUserId;
private String wxUserId;
public ExternalUserIdWxUserIdPojo(String externalUserId, String wxUserId) {
this.externalUserId = externalUserId;
this.wxUserId = wxUserId;
}
public String getExternalUserId() {
return externalUserId;
}
public void setExternalUserId(String externalUserId) {
this.externalUserId = externalUserId;
}
public String getWxUserId() {
return wxUserId;
}
public void setWxUserId(String wxUserId) {
this.wxUserId = wxUserId;
}
}
...@@ -12,6 +12,15 @@ public interface ExternalClerkRelatedService { ...@@ -12,6 +12,15 @@ public interface ExternalClerkRelatedService {
void delByUserIdAndExternalUserId(MemberUnionidRelatedDTO dto); void delByUserIdAndExternalUserId(MemberUnionidRelatedDTO dto);
/**
* 删除会员与导购的关联关系
*
* @param wxEnterpriseId
* @param wxUserId
* @param externalUserids
*/
void delByUserIdAndExternalUserIdBatch(String wxEnterpriseId, String wxUserId, List<String> externalUserids);
void delByClerkIdAndStaffId(String clerkId, String staffId); void delByClerkIdAndStaffId(String clerkId, String staffId);
void cleanStaffRelated(String wxEnterpriseId, List<String> staffIds); void cleanStaffRelated(String wxEnterpriseId, List<String> staffIds);
...@@ -24,4 +33,13 @@ public interface ExternalClerkRelatedService { ...@@ -24,4 +33,13 @@ public interface ExternalClerkRelatedService {
ExternalClerkRelatedDTO getByMemberId(String wxUserId, String memberId); ExternalClerkRelatedDTO getByMemberId(String wxUserId, String memberId);
/**
* 根据unionid获取外部联系人的绑定导购
*
* @param enterpriseId
* @param unionId
* @return
*/
List<TabHaobanExternalClerkRelated> listExternalByUnionId(String enterpriseId, String unionId);
} }
...@@ -7,7 +7,7 @@ import com.gic.haoban.manage.service.entity.MemberUnionidRelated; ...@@ -7,7 +7,7 @@ import com.gic.haoban.manage.service.entity.MemberUnionidRelated;
public interface MemberUnionRelatedService { public interface MemberUnionRelatedService {
MemberUnionidRelatedDTO getByUnionId(String wxUserId, String unionid); MemberUnionidRelatedDTO getByUnionId(String wxEnterpriseId, String wxUserId, String unionid);
MemberUnionidRelatedDTO getByMemberId(String wxUserId, String memberId); MemberUnionidRelatedDTO getByMemberId(String wxUserId, String memberId);
...@@ -15,6 +15,15 @@ public interface MemberUnionRelatedService { ...@@ -15,6 +15,15 @@ public interface MemberUnionRelatedService {
void delMemberUnionidRelated(MemberUnionidRelatedDTO dto); void delMemberUnionidRelated(MemberUnionidRelatedDTO dto);
/**
* 删除外部联系人关系
*
* @param wxEnterpriseId
* @param wxUserId
* @param externalUserids
*/
void delMemberUnionidRelatedBatch(String wxEnterpriseId, String wxUserId, List<String> externalUserids);
List<MemberUnionidRelatedDTO> getByWxUserIdAndWxEnterpriseId(String wxUserId, String wxEnterpriseId); List<MemberUnionidRelatedDTO> getByWxUserIdAndWxEnterpriseId(String wxUserId, String wxEnterpriseId);
MemberUnionidRelatedDTO getByParams(String wxUserId, String enterpriseId, String name, String createTime); MemberUnionidRelatedDTO getByParams(String wxUserId, String enterpriseId, String name, String createTime);
......
...@@ -168,6 +168,18 @@ public interface PreDealService { ...@@ -168,6 +168,18 @@ public interface PreDealService {
* @param dataContent * @param dataContent
*/ */
public boolean updateFriendStatusByDataId(String taskId, String dataId, int status, String reason, String dataContent); public boolean updateFriendStatusByDataId(String taskId, String dataId, int status, String reason, String dataContent);
/**
* 更新好友成功状态
*
* @param taskId
* @param dataId
* @param status
* @param reason
* @param dataContent
*/
public boolean updateFriendStatusByDataId(String taskId, String dataId, int status, String reason, String dataContent, String relationKey);
/** /**
* 根据父任务判断子任务是否全部完成 * 根据父任务判断子任务是否全部完成
* @param taskId * @param taskId
...@@ -183,4 +195,39 @@ public interface PreDealService { ...@@ -183,4 +195,39 @@ public interface PreDealService {
*/ */
public List<TabHaobanPreDealLog> listByPDataIdAndTaskId(String taskId, String wxUserId); public List<TabHaobanPreDealLog> listByPDataIdAndTaskId(String taskId, String wxUserId);
/**
* 根据唯一key 获取用户
*
* @param taskId
* @param dataType
* @param relationKey
* @return
*/
public TabHaobanPreDealLog getByRelationKey(String taskId, Integer dataType, String relationKey);
/**
* 获取任务是否有在同步中 好友
*
* @param dataType
* @return
*/
public boolean checkFriendTask(String taskId, int dataType);
/**
* 获取任务是否有在同步中 好友
*
* @param dataType
* @return
*/
public boolean checkFriendTaskByPDataId(String taskId, String pDataId, int dataType);
/**
* 根据父数据id 所有dataid
*
* @param pDataId
* @return
*/
public List<String> listReDataIdByPDataId(String taskId, String pDataId, Integer dataType);
} }
...@@ -85,5 +85,14 @@ public interface StaffClerkRelationService { ...@@ -85,5 +85,14 @@ public interface StaffClerkRelationService {
Page<StaffClerkRelationDTO> pageByWxEnterpriseId(String wxEnterpriseId, BasePageInfo pageInfo); Page<StaffClerkRelationDTO> pageByWxEnterpriseId(String wxEnterpriseId, BasePageInfo pageInfo);
/**
* 根据门店获取门店的绑定列表
*
* @param wxEnterpriseId
* @param storeId
* @return
*/
List<StaffClerkRelationDTO> listBindByStoreId(String wxEnterpriseId, String storeId);
} }
...@@ -44,6 +44,11 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -44,6 +44,11 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
} }
@Override @Override
public void delByUserIdAndExternalUserIdBatch(String wxEnterpriseId, String wxUserId, List<String> externalUserids) {
mapper.delByUserIdAndExternalUserIdBatch(wxUserId, wxEnterpriseId, externalUserids);
}
@Override
public void delByClerkIdAndStaffId(String clerkId, String staffId) { public void delByClerkIdAndStaffId(String clerkId, String staffId) {
mapper.delByClerkIdAndStaffId(clerkId,staffId); mapper.delByClerkIdAndStaffId(clerkId,staffId);
} }
...@@ -79,4 +84,8 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -79,4 +84,8 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
return EntityUtil.changeEntityByJSON(ExternalClerkRelatedDTO.class, mapper.getByMemberId(wxUserId,memberId)); return EntityUtil.changeEntityByJSON(ExternalClerkRelatedDTO.class, mapper.getByMemberId(wxUserId,memberId));
} }
@Override
public List<TabHaobanExternalClerkRelated> listExternalByUnionId(String enterpriseId, String unionId) {
return mapper.listExternalByUnionId(enterpriseId, unionId);
}
} }
...@@ -22,8 +22,8 @@ public class MemberUnionRelatedServiceImpl implements MemberUnionRelatedService ...@@ -22,8 +22,8 @@ public class MemberUnionRelatedServiceImpl implements MemberUnionRelatedService
private MemberUnionidRelatedMapper mapper; private MemberUnionidRelatedMapper mapper;
@Override @Override
public MemberUnionidRelatedDTO getByUnionId(String wxUserId, String unionid) { public MemberUnionidRelatedDTO getByUnionId(String wxEnterpriseId, String wxUserId, String unionid) {
return EntityUtil.changeEntityByJSON(MemberUnionidRelatedDTO.class,mapper.getByUnionId(wxUserId,unionid)); return EntityUtil.changeEntityByJSON(MemberUnionidRelatedDTO.class, mapper.getByUnionId(wxEnterpriseId, wxUserId, unionid));
} }
@Override @Override
public MemberUnionidRelatedDTO getByMemberId(String wxUserId, String memberId) { public MemberUnionidRelatedDTO getByMemberId(String wxUserId, String memberId) {
...@@ -45,6 +45,11 @@ public class MemberUnionRelatedServiceImpl implements MemberUnionRelatedService ...@@ -45,6 +45,11 @@ public class MemberUnionRelatedServiceImpl implements MemberUnionRelatedService
} }
@Override @Override
public void delMemberUnionidRelatedBatch(String wxEnterpriseId, String wxUserId, List<String> externalUserids) {
mapper.delMemberUnionidRelatedBatch(wxEnterpriseId, externalUserids, wxUserId);
}
@Override
public List<MemberUnionidRelatedDTO> getByWxUserIdAndWxEnterpriseId(String wxUserId, String wxEnterpriseId) { public List<MemberUnionidRelatedDTO> getByWxUserIdAndWxEnterpriseId(String wxUserId, String wxEnterpriseId) {
return EntityUtil.changeEntityListByJSON(MemberUnionidRelatedDTO.class, mapper.getByWxUserIdAndWxEnterpriseId(wxUserId,wxEnterpriseId)); return EntityUtil.changeEntityListByJSON(MemberUnionidRelatedDTO.class, mapper.getByWxUserIdAndWxEnterpriseId(wxUserId,wxEnterpriseId));
} }
......
...@@ -174,6 +174,12 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -174,6 +174,12 @@ public class PreDealServiceImpl implements PreDealService {
} }
@Override @Override
public boolean updateFriendStatusByDataId(String taskId, String dataId, int status, String reason, String dataContent, String relationKey) {
int i = preDealLogMapper.updateFriendStatusAndRelationKeyByDataId(taskId, dataId, status, reason, dataContent, relationKey);
return i >= 0;
}
@Override
public boolean checkStaffTaskByTaskIdAndPDataId(String taskId, String pDataId) { public boolean checkStaffTaskByTaskIdAndPDataId(String taskId, String pDataId) {
return preDealLogMapper.countFailStaffTaskByTaskIdAndPDataId(taskId,pDataId) == 0; return preDealLogMapper.countFailStaffTaskByTaskIdAndPDataId(taskId,pDataId) == 0;
} }
...@@ -182,4 +188,26 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -182,4 +188,26 @@ public class PreDealServiceImpl implements PreDealService {
public List<TabHaobanPreDealLog> listByPDataIdAndTaskId(String taskId, String wxUserId) { public List<TabHaobanPreDealLog> listByPDataIdAndTaskId(String taskId, String wxUserId) {
return preDealLogMapper.listByPDataIdAndTaskId(taskId,wxUserId); return preDealLogMapper.listByPDataIdAndTaskId(taskId,wxUserId);
} }
@Override
public TabHaobanPreDealLog getByRelationKey(String taskId, Integer dataType, String relationKey) {
return preDealLogMapper.getByRelationKey(taskId, dataType, relationKey);
}
@Override
public boolean checkFriendTask(String taskId, int dataType) {
int i = preDealLogMapper.checkTaskFriend(taskId, null, dataType);
return i == 0;
}
@Override
public boolean checkFriendTaskByPDataId(String taskId, String pDataId, int dataType) {
int i = preDealLogMapper.checkTaskFriend(taskId, pDataId, dataType);
return i == 0;
}
@Override
public List<String> listReDataIdByPDataId(String taskId, String pDataId, Integer dataType) {
return preDealLogMapper.listReDataIdByPDataId(taskId, pDataId, dataType);
}
} }
...@@ -245,4 +245,10 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService ...@@ -245,4 +245,10 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
Page<StaffClerkRelationDTO> retPage = PageUtil.changePageHelperToCurrentPage(new PageInfo<>(clerkBindList), StaffClerkRelationDTO.class); Page<StaffClerkRelationDTO> retPage = PageUtil.changePageHelperToCurrentPage(new PageInfo<>(clerkBindList), StaffClerkRelationDTO.class);
return retPage; return retPage;
} }
@Override
public List<StaffClerkRelationDTO> listBindByStoreId(String wxEnterpriseId, String storeId) {
List<TabHaobanStaffClerkRelation> ret = mapper.listBindByStoreId(wxEnterpriseId, storeId);
return EntityUtil.changeEntityListNew(StaffClerkRelationDTO.class, ret);
}
} }
...@@ -17,10 +17,7 @@ import com.gic.haoban.base.api.common.ServiceResponse; ...@@ -17,10 +17,7 @@ import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.common.utils.EntityUtil; import com.gic.haoban.common.utils.EntityUtil;
import com.gic.haoban.common.utils.PageUtil; import com.gic.haoban.common.utils.PageUtil;
import com.gic.haoban.manage.api.dto.*; import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum; import com.gic.haoban.manage.api.enums.*;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SecretTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService; import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
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;
...@@ -111,6 +108,8 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -111,6 +108,8 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
private static final String LOCK_SUCCESS_KEY = "sync_wx_success_lock_"; private static final String LOCK_SUCCESS_KEY = "sync_wx_success_lock_";
private static final String FRIEND_LOCK = "haoban_fresh_wx_friend_lock_";
@Override @Override
public void departmentDealMq(String params) { public void departmentDealMq(String params) {
logger.info("mq处理中:{}", params); logger.info("mq处理中:{}", params);
...@@ -145,13 +144,13 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -145,13 +144,13 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
} }
}else if(dataPre.getDataType().equals(PreDealTypeEnum.friend_clerk.getVal())){ }else if(dataPre.getDataType().equals(PreDealTypeEnum.friend_clerk.getVal())){
logger.info("好友导购处理:{}", params); logger.info("好友导购处理:{}", params);
operationMap.get("friendClerkSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre); operationMap.get("friendClerkSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre);
}else if(dataPre.getDataType().equals(PreDealTypeEnum.friend.getVal())){ }else if(dataPre.getDataType().equals(PreDealTypeEnum.friend.getVal())){
operationMap.get("friendSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre); operationMap.get("friendSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre);
logger.info("好友处理:{}", params); logger.info("好友处理:{}", params);
}else if(dataPre.getDataType().equals(PreDealTypeEnum.self_friend.getVal())){ }else if(dataPre.getDataType().equals(PreDealTypeEnum.self_friend.getVal())){
operationMap.get("selfFriendSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre); operationMap.get("selfFriendSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre);
logger.info("好友处理:{}", params); logger.info("好友处理:{}", params);
} else if(dataPre.getDataType().equals(PreDealTypeEnum.friend_merge.getVal())){ } else if(dataPre.getDataType().equals(PreDealTypeEnum.friend_merge.getVal())){
...@@ -263,7 +262,7 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -263,7 +262,7 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
@Override @Override
public String createQywxTask(String wxEnterpriseId, String taskName, String userId, String desc) { public String createQywxTask(String wxEnterpriseId, String taskName, String userId, String desc) {
return createBaseTask(wxEnterpriseId, taskName, userId, desc, 1); return createBaseTask(wxEnterpriseId, taskName, userId, desc, SyncTaskTypeEnum.QYWX_CONTACT.getType());
} }
...@@ -694,17 +693,27 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -694,17 +693,27 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
} }
@Override @Override
public String createWxFriendSingleTask(String wxEnterpriseId, String taskName, String staffId, String staffName) { public String createWxFriendTaskSingle(String wxEnterpriseId, String taskName, String staffId, String staffName, int syncTaskType) {
String lockKey = FRIEND_LOCK + "_lock_" + staffId;
String staffLockKey = FRIEND_LOCK + staffId;
RedisUtil.lock(lockKey, 2L);
Object cache = RedisUtil.getCache(staffLockKey);
if (null != cache) {
RedisUtil.unlock(lockKey);
return null;
}
TabHaobanSyncTask tabHaobanSyncTask = new TabHaobanSyncTask(); TabHaobanSyncTask tabHaobanSyncTask = new TabHaobanSyncTask();
tabHaobanSyncTask.setAddUser(staffId); tabHaobanSyncTask.setAddUser(staffId);
tabHaobanSyncTask.setTaskName(taskName); tabHaobanSyncTask.setTaskName(SyncTaskTypeEnum.getTaskName(syncTaskType));
tabHaobanSyncTask.setTaskDesc(staffName); tabHaobanSyncTask.setTaskDesc(staffName);
tabHaobanSyncTask.setWxEnterpriseId(wxEnterpriseId); tabHaobanSyncTask.setWxEnterpriseId(wxEnterpriseId);
tabHaobanSyncTask.setStatusFlag(SyncTaskStatusEnum.init.getVal()); tabHaobanSyncTask.setStatusFlag(SyncTaskStatusEnum.init.getVal());
tabHaobanSyncTask.setTaskId(ToolUtil.randomUUID()); tabHaobanSyncTask.setTaskId(ToolUtil.randomUUID());
tabHaobanSyncTask.setTaskType(4); tabHaobanSyncTask.setTaskType(syncTaskType);
syncTaskService.createTask(tabHaobanSyncTask); syncTaskService.createTask(tabHaobanSyncTask);
RedisUtil.setCache(staffLockKey, tabHaobanSyncTask.getTaskId(), 1L, TimeUnit.HOURS);
RedisUtil.unlock(lockKey);
return tabHaobanSyncTask.getTaskId(); return tabHaobanSyncTask.getTaskId();
} }
...@@ -726,6 +735,27 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -726,6 +735,27 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.friend_clerk_sync); dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.friend_clerk_sync);
} }
@Override
public void dealWxFriendStore(String taskId, String storeId, String wxEnterpriseId) {
List<StaffClerkRelationDTO> clerkRelationDTOS = staffClerkRelationService.listBindByStoreId(wxEnterpriseId, storeId);
if (CollectionUtils.isEmpty(clerkRelationDTOS)) {
logger.info("没有要刷新的:{},{}", wxEnterpriseId, storeId);
return;
}
List<TabHaobanPreDealLog> dealLogList = clerkRelationDTOS.stream().map(dto -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(dto.getWxUserId());
dealLog.setpDataId(dto.getStaffId());
dealLog.setDataType(PreDealTypeEnum.friend_clerk.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog;
}).collect(Collectors.toList());
preDealService.insert(dealLogList);
Set<String> hashSet = dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.friend_clerk_sync);
}
@Override @Override
public void quartWxFriendClerk(String res) { public void quartWxFriendClerk(String res) {
......
...@@ -6,9 +6,14 @@ import cn.hutool.core.collection.CollectionUtil; ...@@ -6,9 +6,14 @@ import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.*;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.*; import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.enums.SecretTypeEnum; import com.gic.haoban.manage.api.enums.SecretTypeEnum;
import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.pojo.DealQywxExternalUserPojo;
import com.gic.haoban.manage.service.service.*; import com.gic.haoban.manage.service.service.*;
import com.gic.mq.sdk.GicMQClient;
import com.gic.wechat.api.dto.qywx.QywxIinkExternalMessageDTO; import com.gic.wechat.api.dto.qywx.QywxIinkExternalMessageDTO;
import com.gic.wechat.api.dto.qywx.QywxImageExternalMessageDTO; import com.gic.wechat.api.dto.qywx.QywxImageExternalMessageDTO;
import com.gic.wechat.api.dto.qywx.QywxTextExternalMessageDTO; import com.gic.wechat.api.dto.qywx.QywxTextExternalMessageDTO;
...@@ -16,13 +21,11 @@ import com.gic.wechat.api.service.qywx.QywxSuiteApiService; ...@@ -16,13 +21,11 @@ import com.gic.wechat.api.service.qywx.QywxSuiteApiService;
import com.gic.wechat.api.service.qywx.QywxUserApiService; import com.gic.wechat.api.service.qywx.QywxUserApiService;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.google.common.collect.Sets;
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;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
...@@ -34,11 +37,6 @@ import com.gic.api.base.commons.Page; ...@@ -34,11 +37,6 @@ import com.gic.api.base.commons.Page;
import com.gic.clerk.api.dto.ClerkDTO; import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService; import com.gic.clerk.api.service.ClerkService;
import com.gic.clerk.api.service.PowerService; import com.gic.clerk.api.service.PowerService;
import com.gic.commons.util.DateUtil;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.MD5Utils;
import com.gic.commons.util.Md5Util;
import com.gic.commons.util.StringUtil;
import com.gic.enterprise.api.dto.StoreDTO; import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService; import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.base.api.common.BasePageInfo; import com.gic.haoban.base.api.common.BasePageInfo;
...@@ -130,6 +128,18 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -130,6 +128,18 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
private PowerService powerService; private PowerService powerService;
@Override @Override
public void dealQywxExternalUser(String params) {
log.info("回调:{}", params);
DealQywxExternalUserPojo externalUserPojo = JSONObject.parseObject(params, DealQywxExternalUserPojo.class);
if (externalUserPojo.getType() == DealQywxExternalUserPojo.DealType.del.getType()) {
this.delMemberUnionidRelatedProcess(externalUserPojo.getData());
} else if (externalUserPojo.getType() == DealQywxExternalUserPojo.DealType.add.getType()) {
this.addMemberUnionidRelatedNew(externalUserPojo.getData());
}
}
@Override
public List<MemberStoreDTO> listByExTernalUseridAndWxUserId(String externalUserid, String wxUserId) { public List<MemberStoreDTO> listByExTernalUseridAndWxUserId(String externalUserid, String wxUserId) {
List<TabHaobanExternalClerkRelated> list = externalClerkRelatedService.listByExTernalUseridAndWxUserId(externalUserid, wxUserId); List<TabHaobanExternalClerkRelated> list = externalClerkRelatedService.listByExTernalUseridAndWxUserId(externalUserid, wxUserId);
List<MemberStoreDTO> result = new ArrayList<>(); List<MemberStoreDTO> result = new ArrayList<>();
...@@ -235,36 +245,39 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -235,36 +245,39 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return null; return null;
} }
log.info("【查询会员】wxUserId={},unionid={}",staff.getWxUserId(),unionid); log.info("【查询会员】wxUserId={},unionid={}",staff.getWxUserId(),unionid);
return memberUnionRelatedService.getByUnionId(staff.getWxUserId(),unionid); return memberUnionRelatedService.getByUnionId(staff.getWxEnterpriseId(), staff.getWxUserId(), unionid);
} }
@Override @Override
public String addMemberUnionidRelated(MemberUnionidRelatedDTO dto) { public String addMemberUnionidRelated(MemberUnionidRelatedDTO dto) {
return addMemberUnionidRelatedNew(dto); DealQywxExternalUserPojo dealQywxExternalUserPojo = new DealQywxExternalUserPojo();
dealQywxExternalUserPojo.setType(DealQywxExternalUserPojo.DealType.add.getType());
dealQywxExternalUserPojo.setData(dto);
GicMQClient instance = GICMQClientUtil.getClientInstance();
try {
instance.sendMessage("dealQywxExternalUserMq", JSONObject.toJSONString(dealQywxExternalUserPojo));
} catch (Exception e) {
log.info("异步处理异常:{}", e);
}
return null;
} }
@Override @Override
public String addMemberUnionidRelatedNew(MemberUnionidRelatedDTO dto) { public String addMemberUnionidRelatedNew(MemberUnionidRelatedDTO dto) {
//拼装参数 //解析组装信息
dto = getMemberUnionidRelatedDTO(dto); dto = getMemberUnionidRelatedDTONew(dto);
if(dto == null){ if (null == dto) {
return ""; log.info("没处理完成-等下一次处理");
return null;
} }
//加锁 insertExternalClerkRelatedNew(dto);
String key = "external" + dto.getWxEnterpriseId() + "_"+ dto.getWxUserId() + "_" + dto.getExternalName() + "_" + dto.getAddCreateTime(); return dto.getMemberUnionidRelatedId();
RedisUtil.lock(key,3l);
//新增成员和外部联系人的关系
String memberUnionId = insertMemberUnionIdRelated(dto);
//新增导购和外部联系人关系
dto.setMemberUnionidRelatedId(memberUnionId);
insertExternalClerkRelated(dto);
//解锁
RedisUtil.unlock(key);
return memberUnionId;
} }
@Deprecated
private void insertExternalClerkRelated(MemberUnionidRelatedDTO dto) { private void insertExternalClerkRelated(MemberUnionidRelatedDTO dto) {
log.info("新增外部联系人开始:{}", JSONObject.toJSONString(dto));
String wxUserId = dto.getWxUserId(); String wxUserId = dto.getWxUserId();
String wxEnterpriseId = dto.getWxEnterpriseId(); String wxEnterpriseId = dto.getWxEnterpriseId();
String name = dto.getExternalName(); String name = dto.getExternalName();
...@@ -311,7 +324,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -311,7 +324,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
if(clerk != null && StringUtils.isNotBlank(qrcodeParam)&&StringUtils.isNotBlank(unionId)){ if(clerk != null && StringUtils.isNotBlank(qrcodeParam)&&StringUtils.isNotBlank(unionId)){
log.info("【新增外部联系人会员】enterpriseId={},unionId={},name={},avatar={},QrcodeParam={}",staffClerkRelationDTO.getEnterpriseId(),unionId,name,avatar,qrcodeParam); log.info("【新增外部联系人会员】enterpriseId={},unionId={},name={},avatar={},QrcodeParam={}",staffClerkRelationDTO.getEnterpriseId(),unionId,name,avatar,qrcodeParam);
member = memberOpenCardBusinessService.getMemberByQywxChannelParam(staffClerkRelationDTO.getEnterpriseId(),unionId,"",name,avatar,qrcodeParam); member = memberOpenCardBusinessService.getMemberByQywxChannelParam(staffClerkRelationDTO.getEnterpriseId(), unionId, "", name, avatar, qrcodeParam);
} }
TabHaobanExternalClerkRelated exsitDTO = externalClerkRelatedService.getByParams(wxUserId, wxEnterpriseId,name,createTime); TabHaobanExternalClerkRelated exsitDTO = externalClerkRelatedService.getByParams(wxUserId, wxEnterpriseId,name,createTime);
...@@ -353,6 +366,93 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -353,6 +366,93 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
} }
private void insertExternalClerkRelatedNew(MemberUnionidRelatedDTO dto) {
String wxUserId = dto.getWxUserId();
String wxEnterpriseId = dto.getWxEnterpriseId();
String name = dto.getExternalName();
String createTime = dto.getAddCreateTime();
String externalUserId = dto.getExternalUserid();
String avatar = dto.getAvatar();
String unionId = dto.getUnionid();
if (StringUtils.isAnyBlank(wxUserId, wxEnterpriseId, name, createTime, unionId)) {
log.info("【新增外部联系人】wxUserId={},wxEnterpriseId={},name={},createTime={},avatar={},unionId={}", wxUserId, wxEnterpriseId, name, createTime, avatar, unionId);
return;
}
TabHaobanStaff staff = staffService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
if (staff == null) {
log.info("staff不存在:{},{}", dto.getUnionid(), dto.getWxUserId());
return;
}
String staffId = staff.getStaffId();
TabHaobanClerkMainStoreRelated mainStoreRelated = clerkMainStoreRelatedService.selectByWxEnterpriseIdAndStoreId(staffId, wxEnterpriseId);
if (mainStoreRelated == null) {
log.info("【新增外部联系人】主门店为空:{}", staffId);
return;
}
StaffClerkRelationDTO staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStoreRelated.getStoreId());
if (staffClerkRelationDTO == null) {
log.info("【新增外币联系人】导购和clerk关联为空");
return;
}
//新增导购和外部联系人关系
String clerkCode = staffClerkRelationDTO.getClerkCode();
ClerkDTO clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
log.info("【新增外部联系人】clerkCode={},unionid:{}", clerkCode, unionId);
if (clerk == null) {
log.info("【新增外币联系人】导购为空:{},{}", clerkCode, unionId);
return;
}
String qrcodeParam = clerk.getQrcodeParam();
if (StringUtils.isBlank(qrcodeParam)) {
powerService.saveClerkQrCode(clerk.getClerkId());
clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
qrcodeParam = clerk.getQrcodeParam();
}
if (StringUtils.isBlank(qrcodeParam)) {
log.info("不能生产导购二维码:{}", JSONObject.toJSONString(clerk));
return;
}
log.info("【新增外部联系人会员】enterpriseId={},unionId={},name={},avatar={},QrcodeParam={}", staffClerkRelationDTO.getEnterpriseId(), unionId, name, avatar, qrcodeParam);
MemberDTO member = memberOpenCardBusinessService.getMemberByQywxChannelParam(staffClerkRelationDTO.getEnterpriseId(), unionId, "", name, avatar, qrcodeParam);
if (member == null) {
log.info("生产会员memnerid失败:{}", unionId);
return;
}
List<TabHaobanExternalClerkRelated> externalClerkRelateds = externalClerkRelatedService.listByExTernalUseridAndWxUserId(dto.getExternalUserid(), dto.getWxUserId());
if (CollectionUtils.isEmpty(externalClerkRelateds)) {
log.info("新增TabHaobanExternalClerkRelated");
TabHaobanExternalClerkRelated related = new TabHaobanExternalClerkRelated();
related.setAddCreateTime(createTime);
related.setClerkId(staffClerkRelationDTO.getClerkId());
related.setEnterpriseId(staffClerkRelationDTO.getEnterpriseId());
related.setExternalName(name);
related.setExternalUserId(externalUserId);
related.setStaffId(staffId);
related.setMemberUnionidRelatedId(dto.getMemberUnionidRelatedId());
related.setStoreId(staffClerkRelationDTO.getStoreId());
related.setUnionid(unionId);
related.setWxEnterpriseId(wxEnterpriseId);
related.setWxUserId(wxUserId);
related.setMemberId(member.getMemberId());
externalClerkRelatedService.insert(related);
} else {
log.info("更新TabHaobanExternalClerkRelated");
TabHaobanExternalClerkRelated exsitDTO = externalClerkRelateds.get(0);
exsitDTO.setMemberId(member.getMemberId());
exsitDTO.setMemberUnionidRelatedId(dto.getMemberUnionidRelatedId());
exsitDTO.setExternalUserId(externalUserId);
exsitDTO.setUnionid(unionId);
exsitDTO.setStoreId(staffClerkRelationDTO.getStoreId());
exsitDTO.setEnterpriseId(staffClerkRelationDTO.getEnterpriseId());
exsitDTO.setClerkId(staffClerkRelationDTO.getClerkId());
externalClerkRelatedService.update(exsitDTO);
}
}
@Deprecated
private String insertMemberUnionIdRelated(MemberUnionidRelatedDTO dto) { private String insertMemberUnionIdRelated(MemberUnionidRelatedDTO dto) {
if(dto == null){ if(dto == null){
return ""; return "";
...@@ -386,6 +486,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -386,6 +486,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
@Deprecated
private MemberUnionidRelatedDTO getMemberUnionidRelatedDTO(MemberUnionidRelatedDTO dto){ private MemberUnionidRelatedDTO getMemberUnionidRelatedDTO(MemberUnionidRelatedDTO dto){
log.info("【新增外部联系人回调】dto={}",JSON.toJSONString(dto)); log.info("【新增外部联系人回调】dto={}",JSON.toJSONString(dto));
String corpId = dto.getCorpid(); String corpId = dto.getCorpid();
...@@ -440,6 +541,64 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -440,6 +541,64 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return dto; return dto;
} }
/**
* 组装数据
*
* @param dto
* @return
*/
public MemberUnionidRelatedDTO getMemberUnionidRelatedDTONew(MemberUnionidRelatedDTO dto) {
log.info("【新增外部联系人回调】dto={}", JSON.toJSONString(dto));
String corpId = dto.getCorpid();
TabHaobanWxEnterprise wxEnterprise = wxEnterpriseService.getEnterpriseBycorpId(corpId);
if (wxEnterprise == null) {
return null;
}
String wxEnterpriseId = wxEnterprise.getWxEnterpriseId();
String userId = dto.getWxUserId();
String suiteid = dto.getSuiteid();
ExternalUserDTO externalUserDTO;
if (SELF_APP.equals(suiteid)) {
externalUserDTO = this.getCorpSelfExternalUseridInfo(wxEnterpriseId, userId, dto.getExternalUserid());
} else {
externalUserDTO = this.getExternalUseridInfo(wxEnterpriseId, userId, dto.getExternalUserid());
}
if (externalUserDTO == null) {
log.info("【新增外部联系人回调】unionIdJson=null");
return null;
}
dto.setWxEnterpriseId(wxEnterpriseId);
dto.setExternalName(externalUserDTO.getName());
dto.setAddCreateTime(externalUserDTO.getAddCreateTime());
dto.setAvatar(externalUserDTO.getAvatar());
if (SELF_APP.equals(suiteid)) {
dto.setUnionid(externalUserDTO.getUnionId());
dto.setSelfExternalUserid(externalUserDTO.getExternalUserId());
} else {
dto.setExternalUserid(externalUserDTO.getExternalUserId());
}
String key = "external" + dto.getWxEnterpriseId() + "_" + dto.getWxUserId() + "_" + dto.getExternalName() + "_" + dto.getAddCreateTime();
String lockKey = key + "-lock";
RedisUtil.lock(lockKey, 3L);
String memberUnionidRelatedId = (String) RedisUtil.getCache(key);
if (memberUnionidRelatedId != null) {
MemberUnionidRelated memberUnionidRelated = memberUnionidRelatedMapper.selectByPrimaryKey(memberUnionidRelatedId);
dto.setUnionid(dto.getUnionid() == null ? memberUnionidRelated.getUnionid() : dto.getUnionid());
dto.setExternalUserid(dto.getExternalUserid() == null ? memberUnionidRelated.getExternalUserid() : dto.getExternalUserid());
dto.setSelfExternalUserid(dto.getSelfExternalUserid() == null ? memberUnionidRelated.getSelfExternalUserid() : dto.getSelfExternalUserid());
dto.setMemberUnionidRelatedId(memberUnionidRelatedId);
memberUnionRelatedService.update(dto);
RedisUtil.unlock(lockKey);
return dto;
} else {
memberUnionidRelatedId = memberUnionRelatedService.addMemberUnionidRelated(dto);
RedisUtil.setCache(key, memberUnionidRelatedId, 60L);
RedisUtil.unlock(lockKey);
return null;
}
}
private ExternalUserPojo getExternalUserPojo(String unionIdJson,String userId1,String wxEnterpriseId) { private ExternalUserPojo getExternalUserPojo(String unionIdJson,String userId1,String wxEnterpriseId) {
ExternalUserPojo pojo = new ExternalUserPojo(); ExternalUserPojo pojo = new ExternalUserPojo();
...@@ -449,6 +608,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -449,6 +608,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
String userId = ""; String userId = "";
String avatar = ""; String avatar = "";
String relaName = ""; String relaName = "";
String externalUserId = "";
if(StringUtils.isNotBlank(unionIdJson)){ if(StringUtils.isNotBlank(unionIdJson)){
JSONObject jo = JSON.parseObject(unionIdJson); JSONObject jo = JSON.parseObject(unionIdJson);
String external_contact = jo.getString("external_contact"); String external_contact = jo.getString("external_contact");
...@@ -460,6 +620,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -460,6 +620,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
relaName = "--"; relaName = "--";
} }
avatar = jt.getString("avatar"); avatar = jt.getString("avatar");
externalUserId = jt.getString("external_userid");
} }
follow_user = jo.getString("follow_user"); follow_user = jo.getString("follow_user");
...@@ -479,6 +640,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -479,6 +640,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
pojo.setAvatar(avatar); pojo.setAvatar(avatar);
pojo.setName(relaName); pojo.setName(relaName);
pojo.setUnionId(unionId); pojo.setUnionId(unionId);
pojo.setExternalUserId(externalUserId);
pojo.setWxEnterpriseId(wxEnterpriseId); pojo.setWxEnterpriseId(wxEnterpriseId);
return pojo; return pojo;
} }
...@@ -596,6 +758,20 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -596,6 +758,20 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
@Override @Override
public void delMemberUnionidRelated(MemberUnionidRelatedDTO dto) { public void delMemberUnionidRelated(MemberUnionidRelatedDTO dto) {
DealQywxExternalUserPojo dealQywxExternalUserPojo = new DealQywxExternalUserPojo();
dealQywxExternalUserPojo.setType(DealQywxExternalUserPojo.DealType.del.getType());
dealQywxExternalUserPojo.setData(dto);
GicMQClient instance = GICMQClientUtil.getClientInstance();
try {
instance.sendMessage("dealQywxExternalUserMq", JSONObject.toJSONString(dealQywxExternalUserPojo));
} catch (Exception e) {
log.info("异步处理异常:{}", e);
}
}
private void delMemberUnionidRelatedProcess(MemberUnionidRelatedDTO dto) {
externalClerkRelatedService.delByUserIdAndExternalUserId(dto); externalClerkRelatedService.delByUserIdAndExternalUserId(dto);
memberUnionRelatedService.delMemberUnionidRelated(dto); memberUnionRelatedService.delMemberUnionidRelated(dto);
...@@ -796,6 +972,10 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -796,6 +972,10 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
String res = qywxUserApiService.listSelfExternalUserid(enterprise.getCorpid(), secretSetting.getSecretVal(), wxUserId); String res = qywxUserApiService.listSelfExternalUserid(enterprise.getCorpid(), secretSetting.getSecretVal(), wxUserId);
log.info("【查询自建应用】res={}",res); log.info("【查询自建应用】res={}",res);
if (res != null && res.equals("1")) {
log.info("代表需要重试");
return null;
}
if(StringUtils.isBlank(res)){ if(StringUtils.isBlank(res)){
return list; return list;
} }
...@@ -820,6 +1000,10 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -820,6 +1000,10 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
String wxRes = qywxUserApiService.listExternalUserid(enterprise.getCorpid(), config.getWxSuiteid(), wxUserId); String wxRes = qywxUserApiService.listExternalUserid(enterprise.getCorpid(), config.getWxSuiteid(), wxUserId);
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
log.info("【查询第三方应用】res={}",wxRes); log.info("【查询第三方应用】res={}",wxRes);
if (wxRes != null && wxRes.equals("1")) {
log.info("代表需要重试");
return null;
}
if(StringUtils.isBlank(wxRes)){ if(StringUtils.isBlank(wxRes)){
return list; return list;
} }
...@@ -848,6 +1032,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -848,6 +1032,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
if(StringUtils.isBlank(unionIdJson)){ if(StringUtils.isBlank(unionIdJson)){
log.info("好友不存在"); log.info("好友不存在");
return null; return null;
} else if (unionIdJson.equals("1")) {
log.info("接口调用被限制");
throw new WxApiLimitException("getCorpSelfExternalUseridInfo接口调用被限制");
} }
ExternalUserPojo pojo = getExternalUserPojo(unionIdJson, wxUserId, wxEnterpriseId); ExternalUserPojo pojo = getExternalUserPojo(unionIdJson, wxUserId, wxEnterpriseId);
return EntityUtil.changeEntityByJSON(ExternalUserDTO.class, pojo); return EntityUtil.changeEntityByJSON(ExternalUserDTO.class, pojo);
...@@ -865,6 +1052,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -865,6 +1052,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
if(StringUtils.isBlank(uJ)){ if(StringUtils.isBlank(uJ)){
log.info("好友不存在"); log.info("好友不存在");
return null; return null;
} else if (uJ.equals("1")) {
log.info("限制次数");
throw new WxApiLimitException("getExternalUseridInfo接口次数限制");
} }
String name = ""; String name = "";
String createTime = ""; String createTime = "";
...@@ -926,7 +1116,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -926,7 +1116,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
+ "",wxUserId,wxEnterpriseId,name,createTime,unionId,externalUserId,memberId,storeId,enterpriseId,staffId,clerkId); + "",wxUserId,wxEnterpriseId,name,createTime,unionId,externalUserId,memberId,storeId,enterpriseId,staffId,clerkId);
return "参数不对"; return "参数不对";
} }
MemberUnionidRelatedDTO exsitDTO = memberUnionRelatedService.getByParams(wxUserId, wxEnterpriseId,name,createTime); MemberUnionidRelatedDTO exsitDTO = memberUnionRelatedService.getByUnionId(wxEnterpriseId, wxUserId, unionId);
String uuid = ""; String uuid = "";
if(exsitDTO == null){ if(exsitDTO == null){
exsitDTO = new MemberUnionidRelatedDTO(); exsitDTO = new MemberUnionidRelatedDTO();
...@@ -947,11 +1137,12 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -947,11 +1137,12 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
exsitDTO.setUnionid(unionId); exsitDTO.setUnionid(unionId);
exsitDTO.setAddCreateTime(createTime); exsitDTO.setAddCreateTime(createTime);
exsitDTO.setExternalName(name); exsitDTO.setExternalName(name);
memberUnionRelatedService.update(exsitDTO); memberUnionRelatedService.update(exsitDTO);
} }
TabHaobanExternalClerkRelated external = externalClerkRelatedService.getByParams(wxUserId, wxEnterpriseId,name,createTime); List<TabHaobanExternalClerkRelated> clerkRelateds = externalClerkRelatedService.listByExTernalUseridAndWxUserId(externalUserId, wxUserId);
if(external == null){ if (CollectionUtils.isEmpty(clerkRelateds)) {
TabHaobanExternalClerkRelated related = new TabHaobanExternalClerkRelated(); TabHaobanExternalClerkRelated related = new TabHaobanExternalClerkRelated();
related.setAddCreateTime(createTime); related.setAddCreateTime(createTime);
related.setClerkId(clerkId); related.setClerkId(clerkId);
...@@ -968,15 +1159,98 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -968,15 +1159,98 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
externalClerkRelatedService.insert(related); externalClerkRelatedService.insert(related);
}else{ }else{
TabHaobanExternalClerkRelated external = clerkRelateds.get(0);
external.setMemberId(memberId); external.setMemberId(memberId);
external.setMemberUnionidRelatedId(uuid); external.setMemberUnionidRelatedId(uuid);
external.setExternalUserId(externalUserId); external.setExternalUserId(externalUserId);
external.setExternalName(name);
external.setUnionid(unionId); external.setUnionid(unionId);
external.setStoreId(storeId); external.setStoreId(storeId);
external.setEnterpriseId(enterpriseId); external.setEnterpriseId(enterpriseId);
external.setClerkId(clerkId); external.setClerkId(clerkId);
external.setStaffId(staffId);
external.setMemberId(memberId);
externalClerkRelatedService.update(external); externalClerkRelatedService.update(external);
} }
return ""; return "";
} }
@Override
public void cleanNoExsitFriendNew(String wxEnterpriseId, String wxUserId, List<String> externalUserIds) {
log.info("【清除不存在的好友】wxEnterpriseId={},wxUserId={}", wxEnterpriseId, wxUserId);
//查询所有的外部联系人
List<MemberUnionidRelatedDTO> list = memberUnionRelatedService.getByWxUserIdAndWxEnterpriseId(wxUserId, wxEnterpriseId);
if (CollectionUtils.isEmpty(list)) {
log.info("改导购下没有外部联系人,无需清理外部联系人:{},{}", wxUserId, wxEnterpriseId);
return;
}
Set<String> externalUserIdList = list.stream().map(external -> external.getExternalUserid())
.collect(Collectors.toSet());
Sets.SetView<String> delExternalUserIds = Sets.difference(new HashSet<>(externalUserIds), externalUserIdList);
if (CollectionUtils.isEmpty(delExternalUserIds)) {
log.info("没有需要删除逇外部联系人:{},{}", wxUserId, wxEnterpriseId);
return;
}
//删除成员与union的关联关系
memberUnionRelatedService.delMemberUnionidRelatedBatch(wxEnterpriseId, wxUserId, new ArrayList<>(delExternalUserIds));
//删除导购和外部联系人关系
externalClerkRelatedService.delByUserIdAndExternalUserIdBatch(wxEnterpriseId, wxUserId, new ArrayList<>(delExternalUserIds));
}
@Override
public ServiceResponse<List<FriendStoreInfoDTO>> listFriendClerkByMemberUnionid(String enterpriseId, String unionId) {
ServiceResponse<List<FriendStoreInfoDTO>> resp = new ServiceResponse<>();
if (StringUtils.isAnyBlank(enterpriseId, unionId)) {
resp.setMessage("参数有误");
resp.setCode(2);
return resp;
}
List<TabHaobanExternalClerkRelated> relateds = externalClerkRelatedService.listExternalByUnionId(enterpriseId, unionId);
if (CollectionUtils.isEmpty(relateds)) {
return resp;
}
//导购信息
Set<String> clerkIds = relateds.stream().map(dto -> dto.getClerkId()).collect(Collectors.toSet());
log.info("获取clerkIds:{}", JSONObject.toJSONString(clerkIds));
List<ClerkDTO> clerkDTOS = clerkService.getClerkByIds(clerkIds);
if (CollectionUtils.isEmpty(clerkDTOS)) {
log.info("没有有效的导购");
return resp;
}
Map<String, ClerkDTO> clerkMap = clerkDTOS.stream().collect(Collectors.toMap(ClerkDTO::getClerkId, dto -> dto));
//门店信息
List<String> storeIds = relateds.stream().map(dto -> dto.getStoreId()).collect(Collectors.toList());
log.info("门店storeIds:{}", JSONObject.toJSONString(storeIds));
List<StoreDTO> storeDTOS = storeService.queryStore(storeIds);
if (CollectionUtils.isEmpty(storeDTOS)) {
log.info("没有关联的门店");
return resp;
}
Map<String, StoreDTO> storeMap = storeDTOS.stream().collect(Collectors.toMap(StoreDTO::getStoreId, dto -> dto));
//组装
log.info("组装返回的好友导购信息:{}", unionId);
List<FriendStoreInfoDTO> ret = relateds.stream().map(related -> {
ClerkDTO clerkDTO = clerkMap.get(related.getClerkId());
StoreDTO storeDTO = storeMap.get(related.getStoreId());
FriendStoreInfoDTO friendStoreInfoDTO = new FriendStoreInfoDTO();
friendStoreInfoDTO.setAddFriendTime(related.getAddCreateTime());
friendStoreInfoDTO.setClerkId(related.getClerkId());
friendStoreInfoDTO.setStoreId(related.getStoreId());
friendStoreInfoDTO.setWxUserId(related.getWxUserId());
friendStoreInfoDTO.setStoreCode(storeDTO != null ? storeDTO.getStoreCode() : null);
friendStoreInfoDTO.setStoreName(storeDTO != null ? storeDTO.getStoreName() : null);
friendStoreInfoDTO.setClerkCode(clerkDTO != null ? clerkDTO.getClerkCode() : null);
friendStoreInfoDTO.setClerkName(clerkDTO != null ? clerkDTO.getClerkName() : null);
friendStoreInfoDTO.setClerkPhoneNumber(clerkDTO != null ? clerkDTO.getPhoneNumber() : null);
return friendStoreInfoDTO;
}).collect(Collectors.toList());
resp.setResult(ret);
return resp;
}
} }
...@@ -3,6 +3,7 @@ package com.gic.haoban.manage.service.task; ...@@ -3,6 +3,7 @@ package com.gic.haoban.manage.service.task;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO; import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService; import com.gic.clerk.api.service.ClerkService;
import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.enterprise.api.service.StoreGroupService; import com.gic.enterprise.api.service.StoreGroupService;
import com.gic.enterprise.api.service.StoreService; import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.base.api.common.ServiceResponse; import com.gic.haoban.base.api.common.ServiceResponse;
...@@ -77,8 +78,8 @@ public class QywxClerkSyncOperation implements BaseSyncOperation { ...@@ -77,8 +78,8 @@ public class QywxClerkSyncOperation implements BaseSyncOperation {
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
logger.info("微信成员同步失败:", JSONObject.toJSONString(dataPre)); logger.info("微信成员同步失败:{}", e);
reason="同步异常"; reason = "同步异常:";
dealFlag = false; dealFlag = false;
} finally { } finally {
if (!dealFlag) { if (!dealFlag) {
......
...@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; ...@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.EntityUtil; import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.GICMQClientUtil; import com.gic.commons.util.GICMQClientUtil;
import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.enterprise.api.dto.StoreDTO; import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.dto.StoreGroupDTO; import com.gic.enterprise.api.dto.StoreGroupDTO;
import com.gic.enterprise.api.service.StoreGroupService; import com.gic.enterprise.api.service.StoreGroupService;
...@@ -147,9 +148,9 @@ public class QywxGroupSyncOperation implements BaseSyncOperation { ...@@ -147,9 +148,9 @@ public class QywxGroupSyncOperation implements BaseSyncOperation {
} }
} catch (Exception e) { } catch (Exception e) {
resultFlag = false; resultFlag = false;
reason = "处理异常"; reason = "处理异常:";
e.printStackTrace(); e.printStackTrace();
logger.info("处理异常"); logger.info("处理异常:{}", e);
} finally { } finally {
if (!resultFlag) { if (!resultFlag) {
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), reason); dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), reason);
......
package com.gic.haoban.manage.service.task.friend;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
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.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanSyncTask;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.haoban.manage.service.task.BaseSyncOperation;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
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.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service
public class FriendClerkSyncNewOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(FriendClerkSyncNewOperation.class);
@Autowired
private PreDealService preDealService;
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
private static final String FRIEND_LOCK = "haoban_fresh_wx_friend_lock_";
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("dealParamMqDTO={},dataPre={}", JSON.toJSONString(dealParamMqDTO), JSON.toJSONString(dataPre));
String reason = "";
boolean dealFlag = true;
String taskId = dealParamMqDTO.getTaskId();
try {
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getDataId();
//获取所有外部联系人的外部联系人ids
List<String> selfUserIdList = memberUnionidRelatedApiService.listSelfExterialList(wxEnterpriseId, wxUserId);
logger.info("selfUserIdList={}", JSONObject.toJSONString(selfUserIdList));
if (null == selfUserIdList) {
logger.info("自建应用调用第三方接口进入重试");
dealFlag = tryAgainToMq(dataPre);
reason = "重试次数过多";
return;
}
if (CollectionUtils.isEmpty(selfUserIdList)) {
logger.info("改用户没有外部联系人:{}", JSONObject.toJSONString(dataPre));
dealFlag = false;
reason = "该用户没有外部联系人";
return;
}
//第三方服务商的外部联系人
List<String> userIdList = memberUnionidRelatedApiService.listExterialList(wxEnterpriseId, wxUserId);
if (null == selfUserIdList) {
dealFlag = tryAgainToMq(dataPre);
reason = "重试次数过多";
logger.info("第三方服务商外部联系人调用失败进入重试:{}", dataPre.getDataId());
return;
}
if (CollectionUtils.isEmpty(userIdList)) {
logger.info("改用户没有外部联系人2:{}", JSONObject.toJSONString(dataPre));
dealFlag = false;
reason = "该用户没有外部联系人";
return;
}
//清理外部联系人
memberUnionidRelatedApiService.cleanNoExsitFriendNew(wxEnterpriseId, wxUserId, userIdList);
//写入外部联系人的处理队列
List<TabHaobanPreDealLog> dealLogList = selfUserIdList.stream().map(externalUserId -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(externalUserId + "-" + dataPre.getDataId());
dealLog.setpDataId(dataPre.getDataId());
dealLog.setDataType(PreDealTypeEnum.self_friend.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(dataPre.getTaskId());
dealLog.setDataContent(externalUserId);
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog;
}).collect(Collectors.toList());
preDealService.insert(dealLogList);
//写入外部联系人的处理队列
List<TabHaobanPreDealLog> thirddealLogList = userIdList.stream().map(externalUserId -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(externalUserId + "-" + dataPre.getDataId());
dealLog.setpDataId(dataPre.getDataId());
dealLog.setDataType(PreDealTypeEnum.friend.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(dataPre.getTaskId());
dealLog.setDataContent(externalUserId);
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog;
}).collect(Collectors.toList());
preDealService.insert(thirddealLogList);
//成功更新状态
dealSuccess(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), dataPre.getWxEnterpriseId());
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e);
reason = "成员好友处理异常";
dealFlag = false;
} finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), reason);
}
}
}
/**
* 重试机制
*
* @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 {
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_clerk_sync);
return true;
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
checkDepartmentTask(taskId);
}
@Override
public void dealSuccess(String taskId, String dataId, String enterpriseId, String wxEnterpriseId) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.dealing.getVal(), "预处理中");
List<String> dataIds = preDealService.listReDataIdByPDataId(taskId, dataId, PreDealTypeEnum.self_friend.getVal());
logger.info("{}:处理的数据:{}", dataId, JSONObject.toJSONString(dataIds));
dealDepartmentToMq(taskId, new HashSet<>(dataIds), SyncTaskStatusEnum.self_friend_sync);
checkDepartmentTask(taskId);
}
@Override
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);
}
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
List<String> ret = dealList.stream().map(relationId -> {
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
dealParamMqDTO.setData(relationId);
dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
return JSONObject.toJSONString(dealParamMqDTO);
}).collect(Collectors.toList());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendBatchMessages("departmentSyncDealMq", ret);
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId);
e.printStackTrace();
}
}
}
package com.gic.haoban.manage.service.task.friend;
import cn.hutool.crypto.SecureUtil;
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.*;
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.exception.WxApiLimitException;
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.haoban.manage.service.task.BaseSyncOperation;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberOpenCardBusinessService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
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 java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service
public class FriendSyncNewOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(FriendSyncNewOperation.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;
@Autowired
private FriendClerkSyncNewOperation friendClerkSyncNewOperation;
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("第三方好友合并:{}", JSONObject.toJSONString(dataPre));
String reason = "成功";
boolean dealFlag = true;
String relationKey = "-1";
try {
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getpDataId();
String taskId = dealParamMqDTO.getTaskId();
String externalUserId = dataPre.getDataContent();
if (dataPre.getStatusFlag() != PreDealStatusEnum.pre.getVal()) {
logger.info("已经处理过,无需重复处理:{}", JSONObject.toJSONString(dataPre));
return;
}
ExternalUserDTO externalUserDTO = memberUnionidRelatedApiService.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
if (externalUserDTO == null) {
dealFlag = false;
reason = "好友不存在";
return;
}
//relationkey
relationKey = SecureUtil.md5(wxUserId + "_" + externalUserDTO.getName() + "_" + externalUserDTO.getAddCreateTime());
logger.info("relationKey:{},{}", relationKey, externalUserDTO.getExternalUserId());
// 根据关联键relationkey查看自建应用 是否有数据
TabHaobanPreDealLog selfPre = preDealService.getByRelationKey(taskId, PreDealTypeEnum.self_friend.getVal(), relationKey);
if (null == selfPre) {
logger.info("用户的自建应用不存在该数据:{},{}", JSONObject.toJSONString(dataPre), JSONObject.toJSONString(externalUserDTO));
dealFlag = false;
reason = "用户的自建应用不存在该数据:" + relationKey;
return;
}
ExternalUserDTO selfUserData = JSON.parseObject(selfPre.getDataContent(), ExternalUserDTO.class);
externalUserDTO.setUnionId(selfUserData.getUnionId());
//序列化数据
String ret = dealMerge(externalUserDTO, dataPre);
if (StringUtils.isNotBlank(ret)) {
logger.info("好友创建失败:{},{}", ret, JSONObject.toJSONString(externalUserDTO));
dealFlag = false;
reason = ret + ":" + relationKey;
return;
}
//更新状态
preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, externalUserDTO.getMemberId(), relationKey);
dealSuccess(taskId, dataPre.getDataId(), dataPre.getpDataId(), wxEnterpriseId);
} catch (WxApiLimitException e) {
logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre));
dealFlag = tryAgainToMq(dataPre);
reason = "接口重试超出限制";
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e);
reason = "第三方好友处理异常";
dealFlag = false;
} finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dataPre.getDataId(), dataPre.getpDataId(), reason, relationKey);
}
}
}
/**
* 重试机制
*
* @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;
}
private String dealMerge(ExternalUserDTO externalUserDTO, TabHaobanPreDealLog dataPre) {
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getpDataId();
String taskId = dataPre.getTaskId();
//staff信息
StaffDTO staff = staffApiService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
if (staff == null) {
return "成员不存在";
}
ClerkMainStoreRelatedDTO mainStore = clerkMainStoreRelatedApiService.getWxEnterpriseIdAndStaffId(wxEnterpriseId, staff.getStaffId());
if (mainStore == null) {
return "主门店不存在";
}
StaffClerkRelationDTO staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staff.getStaffId(), mainStore.getStoreId());
if (staffClerkRelationDTO == null) {
return "未绑定导购";
}
externalUserDTO.setWxEnterpriseId(wxEnterpriseId);
externalUserDTO.setEnterpriseId(staffClerkRelationDTO.getEnterpriseId());
externalUserDTO.setStoreId(mainStore.getStoreId());
externalUserDTO.setClerkId(staffClerkRelationDTO.getClerkId());
externalUserDTO.setWxUserId(wxUserId);
externalUserDTO.setStaffId(staffClerkRelationDTO.getStaffId());
String clerkCode = staffClerkRelationDTO.getClerkCode();
ClerkDTO clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
if (clerk == null) {
return "导购不存在:" + clerkCode;
}
String qrcodeParam = clerk.getQrcodeParam();
if (StringUtils.isBlank(qrcodeParam)) {
powerService.saveClerkQrCode(clerk.getClerkId());
clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
qrcodeParam = clerk.getQrcodeParam();
}
if (StringUtils.isBlank(qrcodeParam)) {
return "导购码不存在:" + clerkCode;
}
MemberDTO member = null;
if (clerk != null && StringUtils.isNotBlank(qrcodeParam) && StringUtils.isNotBlank(externalUserDTO.getUnionId())) {
member = memberOpenCardBusinessService.getMemberByQywxChannelParam(staffClerkRelationDTO.getEnterpriseId(),
externalUserDTO.getUnionId(), "", externalUserDTO.getName(), externalUserDTO.getAvatar(), qrcodeParam);
}
if (member == null) {
return "会员不存在:" + externalUserDTO.getUnionId();
}
externalUserDTO.setMemberId(member.getMemberId());
return memberUnionidRelatedApiService.addExternal(externalUserDTO);
}
public void dealException(String taskId, String dataId, String pDataId, String reason, String relationKey) {
preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason, null, relationKey);
checkDepartmentTask(taskId, pDataId);
}
@Override
public void dealException(String taskId, String dataId, String pDataId, String reason) {
return;
}
@Override
public void dealSuccess(String taskId, String dataId, String pDataId, String wxEnterpriseId) {
//校验成功是否都
checkDepartmentTask(taskId, pDataId);
}
/**
* 自定义处理流程
*
* @param taskId
* @param pDataId
*/
public void checkDepartmentTask(String taskId, String pDataId) {
//校验是否都已经处理完成
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
public void checkDepartmentTask(String taskId) {
friendClerkSyncNewOperation.checkDepartmentTask(taskId);
}
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
List<String> ret = dealList.stream().map(relationId -> {
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
dealParamMqDTO.setData(relationId);
dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
return JSONObject.toJSONString(dealParamMqDTO);
}).collect(Collectors.toList());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendBatchMessages("departmentSyncDealMq", ret);
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId);
e.printStackTrace();
}
}
}
package com.gic.haoban.manage.service.task.friend;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.GICMQClientUtil;
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.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.haoban.manage.service.task.BaseSyncOperation;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
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.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service
public class SelfFriendSyncNewOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(SelfFriendSyncNewOperation.class);
@Autowired
private PreDealService preDealService;
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private FriendClerkSyncNewOperation friendClerkSyncNewOperation;
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("自建好友处理:{}", JSONObject.toJSONString(dataPre));
String reason = "成功";
boolean dealFlag = true;
try {
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getpDataId();
String taskId = dealParamMqDTO.getTaskId();
String externalUserId = dataPre.getDataContent();
ExternalUserDTO pojo = memberUnionidRelatedApiService.getCorpSelfExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
if (pojo == null) {
logger.info("外部联系人好友不存在:{}", JSONObject.toJSONString(dataPre));
dealException(taskId, dataPre.getDataId(), null, "好友不存在");
return;
}
//自有应用信息
JSONObject json = new JSONObject();
json.put("name", pojo.getName());
json.put("unionId", pojo.getUnionId());
json.put("addCreateTime", pojo.getAddCreateTime());
//relationkey
String relationKey = SecureUtil.md5(wxUserId + "_" + pojo.getName() + "_" + pojo.getAddCreateTime());
//更新状态
preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, json.toJSONString(), relationKey);
dealSuccess(taskId, dataPre.getDataId(), null, wxEnterpriseId);
} catch (WxApiLimitException e) {
logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre));
dealFlag = tryAgainToMq(dataPre);
reason = "getCorpSelfExternalUseridInfo重试次数过多";
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e);
reason = "自建应用好友处理异常";
dealFlag = false;
} finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dataPre.getDataId(), dataPre.getpDataId(), reason);
}
}
}
@Override
public void dealException(String taskId, String dataId, String pDataId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
checkDepartmentTask(taskId, pDataId);
}
@Override
public void dealSuccess(String taskId, String dataId, String dataContent, String wxEnterpriseId) {
TabHaobanPreDealLog data = preDealService.getByDataId(taskId, dataId, PreDealTypeEnum.self_friend.getVal(), -1);
//校验成功是否都
checkDepartmentTask(taskId, data.getpDataId());
}
/**
* 重试机制
*
* @param dataPre
* @return
*/
private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
logger.info("需要重试self:{}", 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.self_friend_sync);
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) {
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)) {
//更新父级别
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) {
//预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
List<String> ret = dealList.stream().map(relationId -> {
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
dealParamMqDTO.setData(relationId);
dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
return JSONObject.toJSONString(dealParamMqDTO);
}).collect(Collectors.toList());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendBatchMessages("departmentSyncDealMq", ret);
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId);
e.printStackTrace();
}
}
public static void main(String[] args) {
String res = "{'clerkId':'b160eb9a3daf4b3da936b678f1b06744','enterpriseId':'ff8080815dacd3a2015dacd3ef5c0000','externalUserId':'wm59NLDQAAY5Q4pABXAfaTJ6mORvpw','name':'hzw','storeId':'ff8080815695df44015697ada25b0102','wxEnterpriseId':'ca66a01b79474c40b3e7c7f93";
System.err.println(JSON.parseObject(res, ExternalUserDTO.class));
}
}
...@@ -161,9 +161,7 @@ ...@@ -161,9 +161,7 @@
<if test="createTime != null" > <if test="createTime != null" >
create_time = #{createTime,jdbcType=TIMESTAMP}, create_time = #{createTime,jdbcType=TIMESTAMP},
</if> </if>
<if test="updateTime != null" > update_time = now()
update_time = #{updateTime,jdbcType=TIMESTAMP},
</if>
</set> </set>
where member_unionid_related_id = #{memberUnionidRelatedId,jdbcType=VARCHAR} where member_unionid_related_id = #{memberUnionidRelatedId,jdbcType=VARCHAR}
</update> </update>
...@@ -200,6 +198,7 @@ ...@@ -200,6 +198,7 @@
<include refid="Base_Column_List" /> <include refid="Base_Column_List" />
from tab_haoban_member_unionid_related from tab_haoban_member_unionid_related
where wx_user_id = #{wxUserId} where wx_user_id = #{wxUserId}
and wx_enterprise_id=#{wxEnterpriseId}
and status_flag = 1 and status_flag = 1
and unionid = #{unionid} and unionid = #{unionid}
limit 1 limit 1
...@@ -222,6 +221,18 @@ ...@@ -222,6 +221,18 @@
and wx_user_id = #{wxUserId} and wx_user_id = #{wxUserId}
</update> </update>
<update id="delMemberUnionidRelatedBatch" parameterType="com.gic.haoban.manage.service.entity.MemberUnionidRelated">
update tab_haoban_member_unionid_related
set status_flag = 0
where
wx_enterprise_id=#{wxEnterpriseId}
and wx_user_id = #{wxUserId}
and external_userid in
<foreach collection="externalUserids" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</update>
<select id="getByWxUserIdAndWxEnterpriseId" resultMap="BaseResultMap" parameterType="java.lang.String" > <select id="getByWxUserIdAndWxEnterpriseId" resultMap="BaseResultMap" parameterType="java.lang.String" >
select select
<include refid="Base_Column_List" /> <include refid="Base_Column_List" />
......
...@@ -356,6 +356,21 @@ ...@@ -356,6 +356,21 @@
where data_id = #{dataId,jdbcType=INTEGER} and task_id=#{taskId} where data_id = #{dataId,jdbcType=INTEGER} and task_id=#{taskId}
</update> </update>
<update id="updateFriendStatusAndRelationKeyByDataId">
update tab_haoban_pre_deal_log
<set>
status_flag = #{status,jdbcType=INTEGER},
reason=#{reason},
<if test="dataContent !=null">
data_content = #{dataContent},
</if>
relation_key=#{relationKey},
update_time = now()
</set>
where data_id = #{dataId,jdbcType=INTEGER} and task_id=#{taskId}
</update>
<select id="countFailStaffTaskByTaskIdAndPDataId" resultType="integer"> <select id="countFailStaffTaskByTaskIdAndPDataId" resultType="integer">
select select
count(*) count(*)
...@@ -373,4 +388,33 @@ ...@@ -373,4 +388,33 @@
where task_id = #{taskId} where task_id = #{taskId}
and p_data_id =#{pDataId} and p_data_id =#{pDataId}
</select> </select>
<select id="getByRelationKey" resultMap="BaseResultMap">
select
<include refid="Base_Column_List_data"/>
from tab_haoban_pre_deal_log
where task_id = #{taskId}
and relation_key =#{relationKey}
and data_type =#{dataType}
</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
data_id
from tab_haoban_pre_deal_log
where task_id = #{taskId} and p_data_id=#{dataId} and data_type=#{dataType}
and status_flag in(0,1,3)
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -240,6 +240,22 @@ ...@@ -240,6 +240,22 @@
and status_flag = 1 and status_flag = 1
</update> </update>
<update id="delByUserIdAndExternalUserIdBatch"
parameterType="com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated">
update tab_haoban_external_clerk_related
set
status_flag = 2,
update_time = now()
where
wx_enterprise_id=#{wxEnterpriseId}
and wx_user_id = #{wxUserId}
and status_flag = 1
and external_user_id in
<foreach collection="externalUserIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>
<update id="delByClerkIdAndStaffId" parameterType="com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated" > <update id="delByClerkIdAndStaffId" parameterType="com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated" >
update tab_haoban_external_clerk_related update tab_haoban_external_clerk_related
set set
...@@ -343,4 +359,13 @@ ...@@ -343,4 +359,13 @@
and external_user_id is not null and external_user_id is not null
limit 1 limit 1
</select> </select>
<select id="listExternalByUnionId" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from tab_haoban_external_clerk_related
where enterprise_id = #{enterpriseId}
and unionid = #{unionId}
and status_flag = 1
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -375,5 +375,12 @@ ...@@ -375,5 +375,12 @@
where wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR} where wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR}
and status_flag =1 and status_flag =1
</select> </select>
<select id="listBindByStoreId" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from tab_haoban_staff_clerk_relation
where wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR}
and store_id=#{storeId}
and status_flag =1
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -61,11 +61,18 @@ public class DealSyncTest { ...@@ -61,11 +61,18 @@ public class DealSyncTest {
@Test @Test
public void test() { public void test() {
dealSyncOperationApiService.test("ca66a01b79474c40b3e7c7f93daf1a3b", "49da12164c584fe8aabbb1094b25cfa5"); // dealSyncOperationApiService.test("ca66a01b79474c40b3e7c7f93daf1a3b", "49da12164c584fe8aabbb1094b25cfa5");
// ConcurrencyTester tester = ThreadUtil.concurrencyTest(10, () -> { String str = "yepingyan||taoguangsheng||chennaikang||shaojiawen||yejia||wangjianfeng||wuxianghong||zhangmengdi||chenliang||1033a9ee238140c6a1583bc1cc05567a||e8a6560f17364e5d90fddd50c67baf52||60d2533e0fbc4b9fa4bde758171559b5||85a842a9daed414db85f53b93a684d47||deb2e2ad924f47fda530361a57a2070d||5a3793a4afc74a36a9c0a3cb2a1c9736||760d3af094664f02aa268cb41bfe3978||053003311ede477980cb8b97374e7005||0501be9ed34b4dfdaa74396f1f32514e||4c0461e8ec7145c8b1a228cc910393ab||5623623f1aae4a889cf60e6943f203dc||26b9fc69df6e44499884f775d815c7a2||4cd623e4f52d4ce3bd00acfc50991ff1||d17e0a36f1fd49048f1841b6eaa97cb7||cb188cc31b2c4b80af201e574d64eb37||0395ccfbca7543b7bb3093d7440a3f8f||6a84f35f9afd4e7894536ae000db3524||808e4d3152594ff592cc6baaa5f5650c||0197cca6898a4d1ebd365a9b54975e70||85366595188||95b6aabef90548168f7876bb695ac1b9||d6a5e64220834ef49f8514bb3726a30c||1c589b0e64ad426c948151b9b49f717f||554cc5bb6c3441edbbc667b217fe58cc||d9961b52cf9446f7b449f69429fa0889||8748b6095d23483b8ec45acff3443dda||17cfb61638e143289fb4ced4ef1e6f2e||279c33469a024131821f3568651848ec||5386237c5fe84864bee5e0d87f46acde||f8a4256454924ef481a51f4440eabd54||014b4dbce85940c49a402faa4606a7ef||87c419a151a64cef8d13d9964985cdb9||2590cd60cc364daebfa8321d3f3a3d9e||de2c33f2e8924ff884e0073ca2f2f711||cb512fe8adeb429fb5a99b444622d9e9||b498c162fec1487ca8d90c8208fb24c0||86917b76f1e341ad8d5862c2f4178a69||edde56b16fc741ff8b5345dc89f6ebe2||133a8b8e00b141c999691556994845f8||97e31402568c4084b7b2d17a109805d1||ba60284fb2294c8d8a2dfdc13e631224||2f73268b8ae94a50adc9be13948813f7||71af618e8b4c4d47b3d934d592bc27ac||8abec5614cc94544bf84d24e20c0f1c3||949d2191c3b74e1089e41dc19eef7f66||b6d091fa70bb461c99e50ed8a2e5f846||4d4d8a06b41245b48e8633efa32b56ed||57af656016e542c19a0ea207b6810264||a95524a9c3c94d77b7ba522ac697c889||f2cd9549515242239b52f389111ba003||afd07576885044668f7c6e88be80a54e||6318f71b46894644ab40a3dd2ce388b2||f73a4a768d0b4f78969704078302b676||7d6c41b297fa4341abed436c5d64048f||8927dc75226e481e98dee5b148a61be0||7fc33d65fa2d4822923cb6fa8ee6d7d5||37bea30fa18a44d68d341c34ae681c0c||fffc57772b6446f7b6b563c0c5e518d4||5c2406d8d742479196f0392f786c69c1||0e51b089f4b34d3d9a29d56d3d016c62||befaa12c69944ea4bbc1cd34f19aef40||cd28fd64b08a4db095c528a942f4c7fc||6d97f56f1e75434db49ce1e162c13c28||66672dc67c7a4dbcae2ae29e9698c31a||fc1b59cdab764da483749628bc91ea72||ee362b734411416ba44cb249714b6885||f5c98c7c087d4083bef0c748aad9ba90||8585cd13c42e4b33b021593f562d7619||31208ce7c16347a1afacfb50602c9ca1||7211ef07565d4d8ba8c45565c7d201dc||e6a1734037cc4b998aea57052eb31786||8db5edbdcf734b27a0bc2fa2fa420e5c||2294cc939f0b488690d7e95c7981e658||be2be0043b264b8c93808edf36e81d63||ca0f57a1f95146b4b9b0103800b03f10||80d248b51edc43d3959cc478e77b9de5||8e441d5ee59241b5b8a64ead1dd03daa||e1827273133247c4a17d65c9df4c2894||95fc56b9839a42878cbe7106e7bc9ff2||f8d893fd85844e199cc17fdce79f62b6||f23077c76a144507a5f5a91aa15e865e||f5c1321841da43c5b4ab8edf267c9e69||b2c5d9232e034eb69424fa238ea7f375||14a2c914e09045a59827a633f98fa5dc||64d58369915b4a69bb8306cddd41dd3a||39030ddf0a1e4db299085474b9809fa7||0817f586f81a4117b924b017f7a58718||32b4c694454f4ec0bb767f518b8be301||48c2b0ff0e234ef799cc067a05677cc7||b74bc661bf5547b5a962f8e0b2c7563d||4a8c6d8bb109414aab17983ae18459b2||a7778844a42b4df0834763481a401073||7df43c26decd4b9cae3ee957bd05ac52||6dacc32a48a940899dfc1be5378373b6||7edd8a500fde4b8db4393e514d0dc215||0140063f60ad458a9b35c32e80401834||af5151a9eb3f4563b9d20be1e682593e||fabc111e771340d5b7224973e2a3fa5d||f935cded097641519b1ef47fa8ec3687||3f410f5e6cf7498e969232f774691a59||ea236caa8ca0480cae6575512433286c||10a3ebd8d21942d8a55aac22da0d984b||19b0ec31274040d8b06845a6d7505028||7fa79a52aad6492db78f233d379fc526||07cac1d1f977484f919c1a1c84c0c4cb||03cb98bfabad4eb3886ea08003879412||015844c6a25e41ff9f2b1859dac6148e||aab1b82a96024584b706542be157c683||9510b742fb024efbb29002b1e6f78a3b||a618df6d09b74ada91ddcf362b0a2459||0a5c4b8aa6584ffbaf4fcab312b83e72||07e85dba485140d3899f481b7902ad03||999ebb3c09ea422086ae400bb0e4291e||fece2bfda3754029a97897fd7bcd15ba||5a8d2b7613394af588b7b98f4731b294||f9a8d038d6e349a5aff297208ac117f7||24a80b4c78924cb9b75a5649221a90fe||81057b5a7a5c4a3f83e31cc97a493c72||6b4461647e144969a68a39fdc54a728c||681170032ac84ca39dcc7ac5374a0bd4||1f6fea78cd244c239b8a6bbd76560f61||dd65cdd7594f4590b0addb80b08e23e7||44efc4fd2a7c4f0388ab038a7105a251||3f0bc6b120f54febb3fbfb242a6597b6||476f26533d5f4ffda54f9ac26073dd27||b151c6057d5545899b2a6261940327ef||d273990f0fd5436ea92b8aceae0e1915||7199240e63e047979523a7b7126b3763||699f8f67450e4d89b69eea35968f15cb||4c2924d70c7140488ba6d2e7146c48b7||cba0a50d125e4569af4982270fcd44d2||99ba985aa3e24188a2427a9674c2cee7||1ba154236289422eafc1494fb2cd5447||d850f273b8e94baea24e5a5c1e02c0ec||cd09819332b34b69af57d5bbbf242879||93d52e81a9d04166a441cc5bd8d528e9||80011bbeb65242b0b2947e3ce2d9a5e8||7cb4799a81bb42818868a9eca56ae364||9b1adf4c531547f5810837fe2ce871f3||fa7ba91175504d6486f3a14fbb54defb||b5b56dfc08d44d92a2968b7bfc9898cd||68c2a2b9c9af4d5ab5225f12eeca6afa||10421da78e3b47688103b59d9925fa05||d95fed7490a54c20af0710f1978bf614||b383dfb32c2f4871b38d47329ba436fe||fbb3c70fed1b4624aba506492c0261cd||22e74e0843004767bb26e9e0a575ea3a||6ca5062bf688459aacb2c3cc9a3c0c61||7b666e3eb28d4b809d76eb91cc8597f0||a49a7c9de5104fdf82df8a67dad41568||a0b37271746d4f61a7a25787ad221027||71cd6fbc9da54e9d8a1992172d92bee5||7ad527490c6a4ebe9093f45525340fd9||928640e07d4748a996d43024e3373aef||cacb6b3bf53e4766933665e8f5961f28||d23a0456250b4f86bfae673300cb38e2||b6e9e751a0b54a5cbef9e3a737f265a7||75d12123136a4da6b6134cdb5ca0e8f5||5a2851a0484e47d2a249785ba40f346d||3cb82820fdc9473fb104d725bf4924b4||dbe3002e90d44a52af0407584fdda2ea||0b3fd2002a424c5293ca8ec4c60bc977||0c1f60a0713d4791abdb94b425acc831||0758f5c6f4d34d3abc84962c81925ff8||caead448c45348c3b2d06df665ed0b43||babd7c07416247a08215df6e17e50733||18df396b8c0c417fbd79959faa528709||0d349f252c5d4527aee68a077baf11d1||70dbb5c3959e42e3bd4cf49f8d2b21a1||a27eed8d234240fb9c121211a2ffbfbf||8e0b5404bd3d4b95ad0a9fda7eafe5fd||9dffdaf42d6c4eb6a6e11255c5fadec2||00305613607f4cbb866cbc37b0bfede9||549b335ae8444bd6a3f12d7b2ecf82b1||d563bb9c21b148e9bcf3cb543662a6f6||2215b3679edd41b18212c28e7b392f80||a636c81d9442466c9a3c8c49e56db824||6a3ab6e564d344c0851139770ecd6762||9882c0d508d24a6faf6fddc2beb02c3c||2c55ce0fee3147119eec42bd8782af11||7aca61c45ffb4141b192c7c22aef7d2b||e218d4fc639f459193d8ef15476126a7||acf423a33d3d45c8b9a0ef893448795c||cbd99ad437ee4044845a0f6895b9453a||3975792146174b81bdce4bc7c4dbe517||04ab7c92e3a34a6caf33f80b3b938fe3||15eef83ce12142bcb8082005634292a2||41cae2681efa4437b27db6ee5aad939e||93b603f08902496e96ef3170c445bc54||9a42f047ebd34c3bb16eceb04f46ad94||058efe8f0e2041cd844a427714ac69b1||fa50138b9b8d49d8bf260885407cc9ef||bee4d5a331e541489c57e0403aff3c14||34efab9a18e64629be64bdda9fcb774a||a022810578794fd1be090e1ddb7850ea||5d23bea235d04487b3eefe64034d7fda||b8c5e55dcf0044d0b91f51a498c7c3b7||0bfb4a4625f0425c8242096acf9bc8a3||d71d62e137824bf8825f980e5574d2b5||db5af88546df4dae8fc3ea0f08cb6bc3||ca7cc04116614dcfae20c5dca061eb77||2d57998e8713452e93d2123da51b3c91||ac5a25b5179d4a8e84c8419026838a3f||36d15a3860cd493e9ba0c63d312a7ca8||cb0e00bed21c48c6894aa36b4cda6b2d||e9c096b95d7d47e0bb5103e66f1da2f3||d9b310ffca4e4561bfade2ead90e0a2d||2d761edec80b4119bb083686b348b21c||578ae551e59f42bda4ca48a130d76f5d||f25f6085ef6e4c0cb8014dbc4d0ddcd0||7e8751338e2248f589fe2163b2ae5a7b||5c1333648d2d42f2b2aa2011b9ffade9||76731c48496c4bffb3896b1918bfa3d0||f3642a263d674655ae1f9a7603e4ccb1||39133cd83c3a40b2adfd298404f5fab4||66efa290b15f4c08b28e7541cf933e2f||d672d66b04144b3cb6cbfca091c020e6||cb8169ebaae8481a8c5d4f6c1b22b142||586edbe496a747b18adc89ffc878cbab||f89d6b872fd040a9b6b3720076be24ff||8358c9d0c77f4ac091afd16cc1745ac5||d09c0eee96ac4461b1c1ff063cbca2af||82ad349d742f413f9c8c9ac5aa2d16ae||798db872fefe4addb1aa4efab993619f||775d0fa3641f4af2aa81f6889baa66ae||1eda003b63df48e6b8e8983aef1ace3f||336c8fad4859446abeaffc666ea0034d||c9aad1386f79409e9957a8ecc3426808||9ed8a8a0ad7e47edb387824822125b6b||d50969c86ae648f8af35ec29d9236379||afdf59e627e04e669207c1ba5a158426||e543b1c837314ff7919b911360726f33||41255ecec07747c4aaa12d0f4f763899||ad36dac9c0a7446bb63f92017099e5f7||e85ab29db71f4c3b8042b2f4059a4ac4||b897e51938f74d0e8357f5d3a73b6bb5||8ea2de06b14d4b358f11954ad36c15ed||219ac16136cf4b96b9756f69b9ae2b47||a74a1fe3b0804d6d83d2b1ed9a738996||9554e4f2d4154c06b35e9773806c1ab8||e73042840f994782b3c6470dd18a00a6||97c0a9a22a57465893534cb2a81766fb||cbeae827ba474a049d87f2d58096886f||76044e1707e942188f8af63b97a6f94e||97696bdba4484dfbb57def84f6195e50||b5c26472151d4c30a64f9955c3423dbc||ee6b2783d4954a1ca8bc247eb94b230e||ba7ecfc2837b438b872424cd5e0bfb72||899c6b944b2b444888ec08358bbeca7b||59d1eba6196d49278e4c380637434a53||97dec846fdd84280955d40f2e600d9ac||ae6de9e7c8774d499e5a7b670bdbedab||589a90409e584af5a7075904ad82a1ed||0d37ff8411d345bb9865ffd5b83df6b1||de27337c7183428bb365434dde67540e||ddb9462dfe384b1cac8dbc479c763509||586bf05203264df08a3ddb421b92fa13||8995fc636a26431f97fd95c1ffdb4914||3075e0c16569406184882a838101d895||ce6a630816fa4ff984db113288bdf1e8||4212642359404be885019d440889715a||3e8fa0da58184f94b7aba8e0772bc827||ecbcccd916bc44efb13a9c3f8f9d8161||0da8510241f640efbe443d964bee44ca||c886c0dbc7ff4b298a129a92616dfe79||9af0f5d24bd049339adb4c0e59f5a060||a7c47d1d913e449f954db18a6283fd5a||8e37f686502447599d3854a15fbb8ae5||ac64e5483d0f4344aadc39275824d687||88521354a4da4d1aa2f77186fdb54a89||9484a47b88084155973168cec9411d83||0c5a8a111c114b4391ba8a09f0f6ecc9||65b915cede2849c195ffa529f2ffdea1||05ebbc6fd10c4a2c8d6c39d1551ab7b8||f788aa33aecb43f18c08733bfc011a35||dfcca957bc814522b835b7cf55fff881||d84c1d854e0d473ea5c4f1d227db4cfe||5fa2a064c37d4e81b3ad69376ee2b2f1||74afac17a97548b8a7626427872a9ae0||8588f4747e1e4aa78b601e1fe3ba6ea4||06608784722d4ac4a44cd9d4147a89c7||c8bb92abf38949ff83cd5aaa4ae8407f||ea76f01ddec54c229e7f5d0af867e858||be28e4d2bcfb48cb81310d5e656af70e||de474557d8174c94905c81996890307e||799276a5c4e7451a86e77e09a85f1ca7||7648dcd80d724d7f9b2a633f95d4755c||c850338443094f5caaecc018ebf8d12a||edf10fda182d42649ae26f4c06375b3e||bec9e09c35c14a029f57693bd7b9f123||93eeff4394c24537975714c722a21538||5a3e092713a74425aa535d418776be7c||2cd9ad01cc6f427f84e5bcad2a6d8a20||bf168d8698ce4c90b9e92d64a49769bb||28cff42995fa4715992dbc7d4d51e54e||9ffab45c54bf4a1e8d0c15324af65def||DaoMi||niweizhong||81637ab67fd34698b26a0c84e57fb586||Jing||NiZhuanNvWang||e75fdc4bd465447f93500c94974d890a||842272ad140b4bebb09e74dfe35a1c3c||da41bf5e46544387a759744cea5e246a||ba86d976c2bc4bc6830d8a2fbedc4c4d||b384daa0ea33478b9420a9024ac2a73d||4fcced4527d24399815cc9fae33cf520||niweizhong1||8d09b2b788d44024ba00b75555829aab||311d11e804834115b32effca449bf344||239440e576ae498eaa355db03b40a359||826511a8c600414e82e6fc40ecb73091||7e0d277f5b3949bd850ffa41043fe94d||dbff4317ecff4d4daefe5328b0b1cc4b||300ea525053e4b53bf41ede2818a2843||4cb68f1c6637483dac5fb1b66fba1fb9||4422836b40cb48958165d66c3674772a||aea36f9a07f7441a8a65aa83a4c4f3ba||530fea4b44784875bdc1b22f95fd3e34||c95842ec1daa44dd93452efc98b0bd30||534cef2dd45c4f3987eec2ebb64b7b59||bc243d8115084d06a8638781ce1c464a||7c22c617875546e7997dd6f7e48ca122||702fd097e6c042eba95c29687046ab99||af4945ebc21d4d439526940221a65d6d||fae4414b9cb149f581a55d6f9bce6e7e||c0336c92864d4d26b9a5730d7090e945||aea46b0ad5a042908813338e676ad877||0a948550dbfd4caa91ca67e8f0290c64||8f8d07caa1964477a40057191c102170||b8fbefaaa83b4609a30b0d6c70b83cf6||83027b9db3dd466781f2ebd2918d07ba||71e411071ba44bb9a31ae59c690b45dd||b6abe9e5b60040fb87737af823d1e83a||605111ff896d491bb1e02fbf48bca00b||ecfd3f7a78ca4ddf833e3367e1d975dd||ff58b504b63a49dfa419978699556f12||a5b6ba045b884fef826e71aa5ac4eb83||5454884535fd402d8cd9476a5d8d3518||257e541a782848a6ab785968a4f09167||e1fd8563e9bc4f4abddc873691ce5667||75d368cf564d45c7a1c68673529c9517||c833339a311e4800b76357a5d798e99b||98daffb2f1864025bbde03d12421b3cc||f9cddf17dee34143a6d4cd982748922d||12ff0514985d433ba4a37cdd52d9a671||6aa0554079044d289976a58acdf3a90b||fdbf05bcffbb493ab3a240f09f2b6e4c||31d9126ca13340a6b3883a7717e6babd||a5cc23be2b834459b3887c5f51d6b4c0||56de1864ec3a4681853c4db5e83c0af0||ea96e22fa5be470db076f8bb42c047d3||b999e85e12c0403d8bc49c81ac9556eb||e30ea5d6efe249fbb59bf8db89994dac||f3617631f8574c1d82762b3c1609a393||45a8d654cd7648d69f54a844b0d7adb5||b81fed2d9f3c4093b70440dea7cd5ee9||1cdbcab1d6274f8f834319a30bd8c61c||18af85032c7747b0929cb51d4fd71f5e||ea36dacba6454a3789fc2ff195bd0e91||a1a03dd8448a4b5fb3206e4806523127||34c0e62a714e4be99ecd21449d0bb91f||ba996646249d4c1890270f17a80289ef||6f47bd244e0842f39e4d2e26fccd4882||9c10c1b3a1f64ac3ae69645c72ead06b||a06ff1bd53304dc4972365db3489bf19||84f0eb84578a4239ad83a20665b41fb2||792b180fa959405aaf9b0a40756cc074||a54a8cf734714ba5b92c827b23553a1b||2c6aa2625fd245cbb8abe629e5bf7831||5d319cc9d2be403cb1a762f002e599ae||8b7c0b4a75c9406b99b24820ff82191c||1f616f086823498bbb301ef59e0040e9||ec0b2f879755443aa15a71378110bc1d||27c6770b84b945d3971689a8c8810b00||f62182a37a054d69b170edd70e0518b5||20be22b288e8462b8c73b335924ecf73||ff7f0226278d47dcbb50c6344e8d6934||4e5ad54450644d44ad5c3dfc576b10bd||8084a2bc89eb4c84b41e30f59256a87c||a9cb6a0072b44a27b525079bcced1e8c||fde8ae4a13004c5b9ee1640e23bc1897||a7a23b58021f487597d1c80f694e2e2e||fed96eeecf874f7e8838254188944408||2299adbb0974456696c48fd6b81c378d||69ab423e932a44468223b05280e4fafe||7642dc4946a243f498a90e1b3857f5a4||982d4406d79a4bb4a61c97bc0365214c||6222d8255ee24bb889b865ad436ef8c2||45be0631645b4a1882f026fa3d2d2dfe||475b41e508ce4d638ea084f81c325fb5||9ecbb79b36a24252a0586228f3d3083c||f22faaef58be42858cbacb9ff9da800a||0aa5f83a291d4aa7ba8d4086915880ce||dabc53b452be4489b3e18a05b308f804||03e38aab6a804e78b95d309fa86b16f7||367cafd3a2374b778fd422970139e524||d01ac22eb1654a9da7753b257d7fb4a4||d3c89f38a5b3430c8232de55ebda30bc||48502e88c7634fd08db8d6805ccc7363||47576041020e47f497f946286ca77f47||c49cf412ea324f96b45ea7a115784fd6||e0fd386f532d490fa7fd2c096c7b39a1||507149fe42a74c7e8bbffad8979ae9d1||f636656b9f5243abb8f6ced135cd621f||3858da6bd5af4a9893bff132fbe46ac7||aee3752323054508a1c90bbf6cb80f9e||3a4090a41eab46c492e96f6b2e648eb7||7eb942cb4e58410982da35d47256422b||294bc70386904ce1a7fda5be14a20fb1||a4af8c884a4d405a8238b736cbe0fc21||dda20f0da0fb4812b56114a728b64190||ca75d30846424ebca5a51f79cb4bb2e7||862f3a38dd5840cba8500d2a59978722||88b5b9869f194f74907ee569792d3d54||543b08411e4b49adbec8624f9a6f5312||679d94e8e9314d7fa91365a11c7ed2c8||ea054a9055dc41668f61d53f71e68b7c||5b2e3efa32f8436bbaf0a9f695c02816||635a1682c6ba46fb95307413848ee6ba||29a76c6a4a6f43c5b71748c2738b3c3b||f6d46444bc9a4a2bb851497aaee27a78||65864af4280b4005b927476aa292d0d1||0fde3e5f79eb40d3b049f2481d4842bf||94244996bfa34c5b92a0d54295c9006e||dc8796ff0d4c4d2f91f744dc6892cb2f||05d7435e380f49698527d14d2fd1f844||362ba60dadf94a05b75dd52534188bb8||220f77530c944b5896c168dad23d903b||bb9d19c00d9c474ea53e30cbf7d1588e||144546c5a0d247a9900dd6a66ad8a1a0||39355b7e5bb94fae98c7ce54e1070c1a||9412384e179b496a9fc13818f67d60bd||5e8fe52031604159ab19f1985c2426ab||88c19a5e794548cebfb86ad8107e2377||10e7cb2e11bf43cba2460115232bb786||65621a4de96944a4b9e26263b9b1a114||8053185f6e1e4621842a325a491ac319||87cc068d582a49bcb583407f6607b946||993021ff177b4b66ae5e872ba2911184||9a13d2c9c74c4deab8f1fb52ff9339cc||c93291fad04541dba9ecb530af94d2cd||f330128f93b64cc09fb5ca8bafb1c36d||34295e97630c4205867e1753dc70f424||163abb196d1c44e99cee5fff0afff95a||45a3a51edacc414e9745766e66111cfd||c93ef08bfec04716b8c466c7469ac5f4||92e0e642e0a94f89afc49e89ba9f0b85||b58e1da4a15144e7b19b21fa2d3c238a||9030bac59e494da1afa7ee60b0526049||034e4bc479884e4bbc7e3c9e7ca164cd||12b39532617e47439748f2a8c98849b9||77b0431a372740f89ab2e334000f4c56||0819ebfe2dd0437dbdb50d86b82038a1||apple||1300000003||13000000004||13000000005||13000000006||13000000007||13000000008||a0ebf8b880284f48843a53028e591bee||d594fab192ad4e05b1be0d0dc545a286||b99e008fe0604434be878bf538939bc1||75af46085fff42a586fa4bb9cdc62d81||a8e66762075b41f99c718d98fd9907d6||d29b03052cb149de8a7648d0dbe1aeeb||5df4290abf614d57b914c42aace94f23||ce60b6218c13449284204ae1b9d566b7||81d2d6a3790d44669f5735abc20e7a6c||c92ed7f9933e4afe8fea199ca5084dad||c7ea4ca3be794553a076a7ec7c419f4a||5c9df482e773463e98dff755c2224c73||3273c6c8dde94874a06e64e25d6f7a95||511bdf383ca14816a29ce239a62679d1||0f76c21b93b641c0bb6599a23895ad84||4e5fd450d46a4d2cbf81e5c866e36417||a96b2115bda3413cb3de8be94679f952||a508e4b09b2141a69272a9d3e87b3fd3||CongYangXianMinLiangMaoGongSiLiJinLin||234243wsssw||be191efb9084458d906d7ec629f33e17||2224324sdftgret90||YiCengJing||5c8ebf4464b64ae8bd6c925cc19885e5||afc05c871ae04dd2bf357aecec57117c||b4aec1bb874a44af86b7a9c9aa25cb09||ff188b68bf264e5e9bdc1c7a7698de00||d3bd9f282439452e91a583adb930d2cc||a7273d6dde0640d393aa507ed891a81e||a67595000089494e820b01b4c5808962||589f6255c6584be7985cfb5289f6118c||3152ef42d7e34ee199ea596e1f4d15d9||bd8fbad3e2fb411581b0104d10fdf2e4||d2772d6125e84c1d9c2098fa67ae9ed1||3db29a5211394ca39f8755907784ef66||46439d60e9b241abaa3a9ba4689feff7||BaiSeSuDa||9b0810a99f442188af5e7a08bbae6664||ebffcb3ad86444e89512a47e809b72c4||zhl||6bd8db0277814280acf06fdb2767979d||8780badc46c54179852a373a6eddd5e6||ef8ccda25fc947db80a6e9cad0b6d5a6||b5b7070e5016407ab7d7d4e241c92dcb||aad9df53ec9e441dbe609aa2a2e1ec2b||6fbe1abeb44e477690ab89e5fda42fdb||c642ddae62b445efad4d8bbcf09b0875||369dabc48c8f411285353f70d74a964f||f31e5f0b47514a689ba7c6fe65e71f26||83cc05c827b946419c081c6a56855d98||fec9b7bcebc4493d92602d14a629281e||e9697f868bb541f2868e5d4a000d0fc4||d56859b154e54054921fda5ac6f849a4||572ab76c2c7149ca85c7263695bbf1d4||823add1ccde6453d8c1cdb7294e44d86||34c2878f3b6c469db1419f70498eda60||08795cfe5e044ecb995021d6f0ffaef7||4130490f6d424dc7901173cd61163832||5a55093cd3ae4397861cd39107fb5e5e||f10e8de1ccf04e5faa83cb228afdc4a9||c3909442c5a049cab5590f0446346643||zh15158019721||zh15658037030||2341578784||833f6e6445584b00bfd8a0112f8e3b48||536c4cdd71f04e499643d71c119db847||277e2d02a73a40cc92609c9ea67c7682||34038950338c46ea981e6edda3668b8c||d79e62c7969e43a5bb6b158b7222ca6f||4ab9625e71b844248a6fe255475b75a5||ChenXiaoRou||AXiao||Song||cammmmm1||wendy||XianChen||e1f42777a76ed6d94e80b87fc1e09ff5||lanting||ZaDiLe||NiZi13587548366||111111111111111111122||18758285875||zh18030146944||LuEr||HuanXi||d41d8cd98f00b204e9800998ecf8427e||emoji||min||sasa||LiangRenMeng||a.XiaoPangZhi||zh15158716336||LW01||ximei||12||1d9c0170f5ab2c799f2b4c1ac7859cc9||alina||YiZhiMao||15757150876||13989473881||YuanNiZuiHouYeNengTaShangXueShan||234324baishan||cengjin||kongwen116||1111111||HuangJinRong111||zh15869193754||alex||dingdang||ZengYing||HeYuQing||faywang||BoJunBaoZheng||XiaoChengZi||cocokou.||MiaoJie||YanWei||tmac||andy||littlechen||d41d8cd98f00b204e9800998ecf8427e01||ACaileonard||AiMi||ADeng||XiaoBoGe||JiaoJiao||alex01||feynman||c.||Shen||ZaiBuYunDongChengZhuLe||XiaoHei||AiHua||ZhuYanPinglita||e6797283781a4af4d285826372a5f650||JiuEr||jolie||LanLan||l_ch||nina||s.||YeKongZhongZuiLiangDeXing||Nie||MeiLing||FanXiQie||d41d8cd98f00b204e9800998ecf8427e03||ChenSiWeikenneth||hu-Lei||littleLan||javan||YangJun||jeffrey-ACheng||jarron||d41d8cd98f00b204e9800998ecf8427e04||3590cb8af0bbb9e78c343b52b93773c9||hiJing||GeShouDeXiaoSongShu||d41d8cd98f00b204e9800998ecf8427e06||audrey||YaoYaoYao||Jiao||a-jdvHangZhouChengXiYinTaiCheng||aTianTian||5058f1af8388633f609cadb75a75dc9d\",\"shawn||4f4431cd1ceca4aa1e1897c24b3f6c3c||53cdc0a710a3d1772cdcd1f6fc89b949||yesterdayisawalionkissadeer||gracehuang||d41d8cd98f00b204e9800998ecf8427e05||jdvHangZhouLeDiGangDian||LianShangFengDeQiu||l||yamii||YiZhiDaNiao||ZhongLiangJinLanYunDiRenXiang||ALiang||rayhu||ZhangYiDa||gugu||jdv-ChenTingHao||jeremyguan.||b6548d0b4d924b14919ad5f8370061e3||WuChengCheng@||GaoKui||YeSi.||WuShengZhiXi||DaDaDaDaDa||YeManRen||fcc||zh13758106974||234324||23456678723423||WuTianLongbesos||mr.Jiong||YaTou||zh18502066231||zh18628218679||XuWeiWuRao||alun||234234asdd||fuguang||9ae4c4f1277340a186b16a17d937c72c";
// List<String> res = memberUnionidRelatedApiService.listSelfExterialList("ca66a01b79474c40b3e7c7f93daf1a3b", "QiuWenMin"); String[] split = StringUtils.split(str, "||");
// System.out.println(JSON.toJSONString(res));
// }); ConcurrencyTester tester = ThreadUtil.concurrencyTest(20, () -> {
int v = (int) (Math.random() * 100);
String wuserId = split[v];
List<String> res = memberUnionidRelatedApiService.listExterialList("ca66a01b79474c40b3e7c7f93daf1a3b", wuserId);
System.out.println(wuserId + "-----" + JSON.toJSONString(res));
});
long interval = tester.getInterval();
System.out.println(interval);
// //
// ExecutorService pool = Executors. newCachedThreadPool(); // ExecutorService pool = Executors. newCachedThreadPool();
// List<String> res = memberUnionidRelatedApiService.listSelfExterialList("ca66a01b79474c40b3e7c7f93daf1a3b", "QiuWenMin"); // List<String> res = memberUnionidRelatedApiService.listSelfExterialList("ca66a01b79474c40b3e7c7f93daf1a3b", "QiuWenMin");
......
import java.util.List; import java.util.List;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog; import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import org.apache.commons.lang3.StringUtils;
public class test { public class test {
public static void main(String[] args) { public static void main(String[] args) {
//插入不存在的我们pre表的企业微信数据 String key = "3.2.1";
int pageSize = 500; String[] split = key.split(".");
int count = 345;
int pre = count/pageSize+1;
int yushu = count%pageSize;
if(yushu==0){
pre = pre- 1;
}
int i= 0;
while(i<pre){
System.out.println("这是第{}次,进入"+i);
i++;
int fromIndex = (i-1)*pageSize;
int toIndex = (count-fromIndex) > pageSize ? (fromIndex+pageSize):count;
System.out.println("fromIndex=============>"+fromIndex);
System.out.println("toIndex=============>"+toIndex);
} System.out.println(split[1]);
//
// //插入不存在的我们pre表的企业微信数据
// int pageSize = 500;
// int count = 345;
// int pre = count/pageSize+1;
// int yushu = count%pageSize;
// if(yushu==0){
// pre = pre- 1;
// }
// int i= 0;
// while(i<pre){
// System.out.println("这是第{}次,进入"+i);
// i++;
// int fromIndex = (i-1)*pageSize;
// int toIndex = (count-fromIndex) > pageSize ? (fromIndex+pageSize):count;
//
// System.out.println("fromIndex=============>"+fromIndex);
// System.out.println("toIndex=============>"+toIndex);
//
// }
} }
} }
...@@ -261,6 +261,12 @@ public class ApplicationController extends WebBaseController{ ...@@ -261,6 +261,12 @@ public class ApplicationController extends WebBaseController{
return resultResponse(HaoBanErrCode.ERR_0, this.qywxUserApiService.getExternalUseridInfo(corpid, suiteid, userid)); return resultResponse(HaoBanErrCode.ERR_0, this.qywxUserApiService.getExternalUseridInfo(corpid, suiteid, userid));
} }
@RequestMapping("get-external-unionid")
@IgnoreLogin
public Object userInfoUninid(String corpid, String suiteid, String unionid) {
return resultResponse(HaoBanErrCode.ERR_0, this.qywxUserApiService.getExternalUseridByUnionid(corpid, suiteid, unionid));
}
@RequestMapping("sync-qywx") @RequestMapping("sync-qywx")
@IgnoreLogin @IgnoreLogin
public Object syncQywx(){ public Object syncQywx(){
......
package com.gic.haoban.manage.web.controller; package com.gic.haoban.manage.web.controller;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.gic.haoban.common.utils.StringUtil;
import com.gic.haoban.manage.web.vo.SdkVersionLimitVo;
import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
...@@ -27,6 +32,10 @@ public class ApplicationController extends WebBaseController{ ...@@ -27,6 +32,10 @@ public class ApplicationController extends WebBaseController{
@Autowired @Autowired
private ApplicationSettingApiService applicationSettingApiService; private ApplicationSettingApiService applicationSettingApiService;
private static final String SDKVERSION_KEY = "haoban-wx-sdk-version";
@RequestMapping("application-list") @RequestMapping("application-list")
public HaobanResponse applicationList(String wxEnterpriseId) { public HaobanResponse applicationList(String wxEnterpriseId) {
...@@ -63,4 +72,43 @@ public class ApplicationController extends WebBaseController{ ...@@ -63,4 +72,43 @@ public class ApplicationController extends WebBaseController{
} }
@RequestMapping("sdk-version-check")
public HaobanResponse sdkVersionCheck(String skdVersion) {
if (StringUtils.isBlank(skdVersion)) {
return resultResponse(HaoBanErrCode.ERR_2);
}
SdkVersionLimitVo sdkVersionLimitVo = new SdkVersionLimitVo();
Object cache = RedisUtil.getCache(SDKVERSION_KEY);
if (null == cache) {
return resultResponse(HaoBanErrCode.ERR_1, sdkVersionLimitVo);
}
String limitSdkVersion = cache.toString();
sdkVersionLimitVo.setLimitSdkVersion(limitSdkVersion);
String[] limitSdk = StringUtils.split(limitSdkVersion, ".");
String[] versionSplit = StringUtils.split(skdVersion, ".");
int checkFlag = checkNum(Integer.valueOf(limitSdk[0]), Integer.valueOf(versionSplit[0]));
if (checkFlag != 0) {
sdkVersionLimitVo.setCheckFlag(checkFlag > 0 ? true : false);
return resultResponse(HaoBanErrCode.ERR_1, sdkVersionLimitVo);
}
checkFlag = checkNum(Integer.valueOf(limitSdk[1]), Integer.valueOf(versionSplit[1]));
if (checkFlag != 0) {
sdkVersionLimitVo.setCheckFlag(checkFlag > 0 ? true : false);
return resultResponse(HaoBanErrCode.ERR_1, sdkVersionLimitVo);
}
checkFlag = checkNum(Integer.valueOf(limitSdk[2]), Integer.valueOf(versionSplit[2]));
if (checkFlag != 0) {
sdkVersionLimitVo.setCheckFlag(checkFlag > 0 ? true : false);
return resultResponse(HaoBanErrCode.ERR_1, sdkVersionLimitVo);
}
return resultResponse(HaoBanErrCode.ERR_1, sdkVersionLimitVo);
}
private int checkNum(int limit, int cur) {
return cur > limit ? 1 : (cur == limit ? 0 : -1);
}
} }
...@@ -9,7 +9,6 @@ import com.gic.clerk.api.service.ClerkNewService; ...@@ -9,7 +9,6 @@ import com.gic.clerk.api.service.ClerkNewService;
import com.gic.clerk.api.service.ClerkService; import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.DateUtil; import com.gic.commons.util.DateUtil;
import com.gic.commons.util.EntityUtil; import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.enterprise.api.dto.EnterpriseDTO; import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.dto.StoreDTO; import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.EnterpriseService; import com.gic.enterprise.api.service.EnterpriseService;
...@@ -23,7 +22,6 @@ import com.gic.haoban.manage.api.enums.*; ...@@ -23,7 +22,6 @@ import com.gic.haoban.manage.api.enums.*;
import com.gic.haoban.manage.api.service.*; import com.gic.haoban.manage.api.service.*;
import com.gic.haoban.manage.web.anno.HttpLimit; import com.gic.haoban.manage.web.anno.HttpLimit;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode; import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.haoban.manage.web.utils.RouterConstant;
import com.gic.haoban.manage.web.vo.*; import com.gic.haoban.manage.web.vo.*;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -31,6 +29,7 @@ import org.slf4j.Logger; ...@@ -31,6 +29,7 @@ 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;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.*; import java.util.*;
...@@ -382,7 +381,8 @@ public class ClerkController extends WebBaseController{ ...@@ -382,7 +381,8 @@ public class ClerkController extends WebBaseController{
//刷新微信好友 //刷新微信好友
@RequestMapping("/fresh-wx-friend") @RequestMapping("/fresh-wx-friend")
public HaobanResponse freshWxFrend(String staffId,String storeId,String wxEnterpriseId,String staffDepartmentRelatedId,String wxUserId) { public HaobanResponse freshWxFrend(String staffId, String storeId, String wxEnterpriseId, String staffDepartmentRelatedId, String wxUserId
, @RequestParam(defaultValue = "0") Integer flushType) {
StaffDTO staff = staffApiService.selectById(staffId); StaffDTO staff = staffApiService.selectById(staffId);
String yyyyMM = DateUtil.dateToStr(new Date(), "yyyyMM"); String yyyyMM = DateUtil.dateToStr(new Date(), "yyyyMM");
if(staff == null){ if(staff == null){
...@@ -390,30 +390,28 @@ public class ClerkController extends WebBaseController{ ...@@ -390,30 +390,28 @@ public class ClerkController extends WebBaseController{
} }
String key = "haoban_fresh_wx_friend" + yyyyMM + staffId; String key = "haoban_fresh_wx_friend" + yyyyMM + staffId;
Integer count = RedisUtil.getCache(key) == null ? 0 : (Integer)RedisUtil.getCache(key); Integer count = RedisUtil.getCache(key) == null ? 0 : (Integer)RedisUtil.getCache(key);
if(count == null || count < 4){ if (count != null && count >= 4) {
RedisUtil.setCache(key,count + 1,31 * 24 * 60 * 60l); logger.info("次数超出限制:{}", staffId);
JSONObject json = new JSONObject(); return resultResponse(HaoBanErrCode.ERR_10011);
json.put("wxUserId", staff.getWxUserId()); }
json.put("wxEnterpriseId", wxEnterpriseId);
json.put("storeId", storeId); RedisUtil.setCache(key, count + 1, 31 * 24 * 60 * 60L);
// logger.info("【刷下微信好友】{},{},{}",RouterConstant.FRESH_WX_FRIEND_SERVICENAME,RouterConstant.INIT_FRESH_WX_FRIEND_METHODNAME,json.toJSONString()); if (flushType == 0) {
String taskName = "刷新企业微信好友("+staff.getStaffName()+")"; String taskName = "刷新企业微信好友("+staff.getStaffName()+")";
String taskId = dealSyncOperationApiService.createWxFriendSingleTask(wxEnterpriseId, taskName, staffId, staff.getStaffName()); String taskId = dealSyncOperationApiService.createWxFriendTaskSingle(wxEnterpriseId, taskName, staffId, staff.getStaffName(), SyncTaskTypeEnum.FRIEND_SINGLE.getType());
if(StringUtils.isNotBlank(taskId)){ if(StringUtils.isNotBlank(taskId)){
dealSyncOperationApiService.dealWxFriendClerkSingle(taskId,wxUserId,staffId,wxEnterpriseId); dealSyncOperationApiService.dealWxFriendClerkSingle(taskId,wxUserId,staffId,wxEnterpriseId);
}else{ }else{
return resultResponse(HaoBanErrCode.ERR_999); return resultResponse(HaoBanErrCode.ERR_10022);
}
} else {
String taskName = "刷新门店好友";
String taskId = dealSyncOperationApiService.createWxFriendTaskSingle(wxEnterpriseId, taskName, staffId, staff.getStaffName(), SyncTaskTypeEnum.FRIEND_STORE.getType());
if (StringUtils.isNotBlank(taskId)) {
dealSyncOperationApiService.dealWxFriendStore(taskId, storeId, wxEnterpriseId);
} else {
return resultResponse(HaoBanErrCode.ERR_10022);
} }
// try {
// GICMQClientUtil.getClientInstance().sendCommonMessage(RouterConstant.ROUTERTYPE, json.toJSONString(),
// RouterConstant.FRESH_WX_FRIEND_SERVICENAME, RouterConstant.INIT_FRESH_WX_FRIEND_METHODNAME);
// } catch (Exception e) {
// logger.info(e.getMessage(),e);
// }
// memberUnionidRelatedApiService.freshWxFrend(wxEnterpriseId, staff.getWxUserId(),storeId);
}else{
return resultResponse(HaoBanErrCode.ERR_10011);
} }
return resultResponse(HaoBanErrCode.ERR_1); return resultResponse(HaoBanErrCode.ERR_1);
} }
......
...@@ -200,7 +200,6 @@ public enum HaoBanErrCode { ...@@ -200,7 +200,6 @@ public enum HaoBanErrCode {
ERR_10012(10012,"手机号格式不正确"), ERR_10012(10012,"手机号格式不正确"),
ERR_10013(10013,"code已经存在"), ERR_10013(10013,"code已经存在"),
ERR_10014(10014,"请输入手机号"), ERR_10014(10014,"请输入手机号"),
ERR_10015(10015,"素材不存在"), ERR_10015(10015,"素材不存在"),
ERR_10016(10016,"导购不存在"), ERR_10016(10016,"导购不存在"),
...@@ -215,12 +214,15 @@ public enum HaoBanErrCode { ...@@ -215,12 +214,15 @@ public enum HaoBanErrCode {
ERR_10021(10021,"待审核中存在code或该手机号"), ERR_10021(10021,"待审核中存在code或该手机号"),
ERR_10022(10022, "已有刷新在执行中,请不要重复刷新"),
ERR_11122(11122,"手机号已存在"), ERR_11122(11122,"手机号已存在"),
ERR_999(999, "操作失败"), ERR_999(999, "操作失败"),
ERR_DEFINE(-888, "自定义错误"), ERR_DEFINE(-888, "自定义错误"),
ERR_OTHER(-999, "未知错误code"); ERR_OTHER(-999, "未知错误code");
private int code; private int code;
private String msg; private String msg;
......
package com.gic.haoban.manage.web.vo;
import java.io.Serializable;
/**
* Created 2021/3/24.
*
* @author hua
*/
public class SdkVersionLimitVo implements Serializable {
private String limitSdkVersion;
private boolean checkFlag = true;
public String getLimitSdkVersion() {
return limitSdkVersion;
}
public void setLimitSdkVersion(String limitSdkVersion) {
this.limitSdkVersion = limitSdkVersion;
}
public boolean isCheckFlag() {
return checkFlag;
}
public void setCheckFlag(boolean checkFlag) {
this.checkFlag = checkFlag;
}
}
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