Commit 9aa05ad2 by qwmqiuwenmin

Merge branch 'developer' into 'master'

Developer

See merge request !85
parents c857c1e0 00c76a5f
package com.gic.haoban.manage.api.dto;
import java.io.Serializable;
public class ExternalUserDTO implements Serializable{
private String wxEnterpriseId;
private String name;
private String unionId;
private String avatar;
private String addCreateTime;
private String wxUserId;
private String externalUserId;
private String memberId;
private String storeId;
private String enterpriseId;
private String clerkId;
private String staffId;
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUnionId() {
return unionId;
}
public void setUnionId(String unionId) {
this.unionId = unionId;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getAddCreateTime() {
return addCreateTime;
}
public void setAddCreateTime(String addCreateTime) {
this.addCreateTime = addCreateTime;
}
public String getWxUserId() {
return wxUserId;
}
public void setWxUserId(String wxUserId) {
this.wxUserId = wxUserId;
}
public String getExternalUserId() {
return externalUserId;
}
public void setExternalUserId(String externalUserId) {
this.externalUserId = externalUserId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
}
......@@ -7,7 +7,11 @@ public enum PreDealTypeEnum {
all(-1),
group(0),
store(1),
clerk(2);
clerk(2),
friend_clerk(6),
friend(8),
self_friend(7),
friend_merge(9);
private int val;
PreDealTypeEnum(int val) {
......
......@@ -10,7 +10,11 @@ public enum SyncTaskStatusEnum {
clerk_sync(3),
compute(4),
exception_compute(5),
exception_close(6);
exception_close(6),
friend_clerk_sync(7),
self_friend_sync(8),
friend_sync(9),
merge_friend_sync(10);
private int val;
......
......@@ -117,6 +117,44 @@ public interface DealSyncOperationApiService {
* @param taskId
*/
public void cleanDiffrence(String wxEnterpriseId,String taskId);
/**
* 创建企业微信好友刷新任务
* @param wxEnterpriseId
* @param taskName
* @param staffId
* @param desc
* @return
*/
public String createWxFriendTask(String wxEnterpriseId, String taskName, String staffId, String desc);
/**
* 处理需要处理的导购
* @param taskId
* @param wxEnterpriseId
*/
public void dealWxFriendClerk(String taskId, String wxEnterpriseId);
/**
* 创建企业微信好友刷新任务
* @param wxEnterpriseId
* @param taskName
* @param staffId
* @param desc
* @return
*/
public String createWxFriendSingleTask(String wxEnterpriseId, String taskName, String staffId, String staffName);
/**
* 单个导购刷新
* @param taskId
* @param wxUserId
* @param staffId
* @param wxEnterpriseId
*/
public void dealWxFriendClerkSingle(String taskId, String wxUserId, String staffId,String wxEnterpriseId);
/**
* 定时
* @param res
*/
public void quartWxFriendClerk(String res);
void test(String wxEnterpriseId, String taskId);
}
......@@ -7,6 +7,7 @@ import com.gic.api.base.commons.JSONResponse;
import com.gic.api.base.commons.Page;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.MemberStoreDTO;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
......@@ -44,5 +45,17 @@ public interface MemberUnionidRelatedApiService {
String addMemberUnionidRelatedNew(MemberUnionidRelatedDTO dto);
void mqFreshWxFrend(String res);
void cleanNoExsitFriend(String wxEnterpriseId,String wxUserId,String resWes);
List<String> listSelfExterialList(String wxEnterpriseId,String wxUserId);
List<String> listExterialList(String wxEnterpriseId, String wxUserId);
ExternalUserDTO getCorpSelfExternalUseridInfo(String wxEnterpriseId,String wxUserId, String externalUserId);
String addExternal(ExternalUserDTO dto);
ExternalUserDTO getExternalUseridInfo(String wxEnterpriseId, String wxUserId, String externalUserId);
}
......@@ -142,6 +142,11 @@
<artifactId>gic-binlog-base</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.1</version>
</dependency>
</dependencies>
<build>
......
......@@ -171,6 +171,30 @@ public interface PreDealLogMapper {
* @return
*/
public String getRootDataIdByWxEnterpriseIdAndTaskId(@Param("wxEnterpriseId") String wxEnterpriseId,@Param("taskId") String taskId);
/**
* 更新状态
* @param taskId
* @param dataId
* @param status
* @param reason
* @param dataContent
* @return
*/
int updateFriendStatusByDataId(@Param("taskId")String taskId, @Param("dataId")String dataId, @Param("status")int status, @Param("reason")String reason, @Param("dataContent")String dataContent);
/**
*
* @param taskId
* @param pDataId
* @return
*/
int countFailStaffTaskByTaskIdAndPDataId(@Param("taskId")String taskId, @Param("pDataId")String pDataId);
/**
* 根据父id获取
* @param taskId
* @param wxUserId
* @return
*/
List<TabHaobanPreDealLog> listByPDataIdAndTaskId(@Param("taskId")String taskId, @Param("pDataId")String wxUserId);
......
......@@ -2,6 +2,7 @@ package com.gic.haoban.manage.service.dao.mapper;
import com.gic.haoban.manage.service.entity.TabHaobanSyncTask;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -34,4 +35,6 @@ public interface SyncTaskMapper {
/**
*/
List<TabHaobanSyncTask> listPageByWxEid(String wxEnterpriseId);
List<TabHaobanSyncTask> listTaskByType(@Param("taskType")int taskType);
}
\ No newline at end of file
package com.gic.haoban.manage.service.dao.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated;
......@@ -18,4 +20,6 @@ public interface TabHaobanClerkMainStoreRelatedMapper {
int updateByPrimaryKey(TabHaobanClerkMainStoreRelated record);
TabHaobanClerkMainStoreRelated selectByWxEnterpriseIdAndStoreId(@Param("staffId")String staffId, @Param("wxEnterpriseId")String wxEnterpriseId);
List<TabHaobanClerkMainStoreRelated> listByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId);
}
\ No newline at end of file
package com.gic.haoban.manage.service.dao.mapper;
import com.gic.haoban.manage.service.entity.MemberClerkChatConfig;
import com.gic.haoban.manage.service.entity.TabHaobanStaffClerkRelation;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -33,4 +37,5 @@ public interface TabHaobanMemberClerkChatConfigMapper {
/**
*/
MemberClerkChatConfig getChatByMemberIdStaffId(@Param("memberId") String memberId, @Param("staffId") String staffId);
}
\ No newline at end of file
......@@ -83,4 +83,6 @@ public interface TabHaobanStaffClerkRelationMapper {
List<TabHaobanStaffClerkRelation> lisByStaffId(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("staffId")String staffId);
TabHaobanStaffClerkRelation getByCodeAndStoreId(@Param("clerkCode")String clerkCode, @Param("storeId")String storeId);
List<TabHaobanStaffClerkRelation> listByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId);
}
\ No newline at end of file
......@@ -13,6 +13,8 @@ public class ExternalUserPojo implements Serializable{
private String avatar;
private String addCreateTime;
private String externalUserId;
public String getWxEnterpriseId() {
return wxEnterpriseId;
......@@ -53,6 +55,14 @@ public class ExternalUserPojo implements Serializable{
public void setAddCreateTime(String addCreateTime) {
this.addCreateTime = addCreateTime;
}
public String getExternalUserId() {
return externalUserId;
}
public void setExternalUserId(String externalUserId) {
this.externalUserId = externalUserId;
}
......
package com.gic.haoban.manage.service.service;
import java.util.List;
import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated;
public interface ClerkMainStoreRelatedService {
......@@ -10,4 +12,6 @@ public interface ClerkMainStoreRelatedService {
void update(TabHaobanClerkMainStoreRelated r);
List<TabHaobanClerkMainStoreRelated> listByWxEnterpriseId(String wxEnterpriseId);
}
......@@ -159,5 +159,28 @@ public interface PreDealService {
* @return
*/
public String getRootDataIdByWxEnterpriseIdAndTaskId(String wxEnterpriseId,String taskId);
/**
* 更新好友成功状态
* @param taskId
* @param dataId
* @param status
* @param reason
* @param dataContent
*/
public boolean updateFriendStatusByDataId(String taskId, String dataId, int status, String reason, String dataContent);
/**
* 根据父任务判断子任务是否全部完成
* @param taskId
* @param pDataId
* @return
*/
public boolean checkStaffTaskByTaskIdAndPDataId(String taskId, String pDataId);
/**
* 根据父id获取
* @param taskId
* @param wxUserId
* @return
*/
public List<TabHaobanPreDealLog> listByPDataIdAndTaskId(String taskId, String wxUserId);
}
......@@ -6,6 +6,8 @@ import java.util.Set;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.service.entity.MemberClerkChatConfig;
import com.gic.haoban.manage.service.entity.TabHaobanStaffClerkRelation;
import org.apache.ibatis.annotations.Param;
public interface StaffClerkRelationService {
......@@ -72,6 +74,12 @@ public interface StaffClerkRelationService {
* @return
*/
public MemberClerkChatConfig getChatConfig(String staffId,String memberId);
/**
* 根据企业查询
* @param wxEnterpriseId
* @return
*/
List<TabHaobanStaffClerkRelation> listByWxEnterpriseId(String wxEnterpriseId);
}
package com.gic.haoban.manage.service.service;
import java.util.List;
import com.gic.api.base.commons.Page;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.SyncTaskDTO;
......@@ -42,4 +44,10 @@ public interface SyncTaskService {
* @return
*/
public Page<SyncTaskDTO> listTaskPage(String wxEnterpriseId, BasePageInfo pageInfo);
/**
* 获取列表
* @param taskType
* @return
*/
public List<TabHaobanSyncTask> listTaskByType(int taskType);
}
package com.gic.haoban.manage.service.service.impl;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -42,4 +43,9 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe
mapper.updateByPrimaryKeySelective(r);
}
@Override
public List<TabHaobanClerkMainStoreRelated> listByWxEnterpriseId(String wxEnterpriseId) {
return mapper.listByWxEnterpriseId(wxEnterpriseId);
}
}
......@@ -165,4 +165,21 @@ public class PreDealServiceImpl implements PreDealService {
return preDealLogMapper.getRootDataIdByWxEnterpriseIdAndTaskId( wxEnterpriseId, taskId);
}
@Override
public boolean updateFriendStatusByDataId(String taskId, String dataId, int status, String reason, String dataContent) {
int i = preDealLogMapper.updateFriendStatusByDataId(taskId, dataId, status, reason,dataContent);
return i >= 0;
}
@Override
public boolean checkStaffTaskByTaskIdAndPDataId(String taskId, String pDataId) {
return preDealLogMapper.countFailStaffTaskByTaskIdAndPDataId(taskId,pDataId) == 0;
}
@Override
public List<TabHaobanPreDealLog> listByPDataIdAndTaskId(String taskId, String wxUserId) {
return preDealLogMapper.listByPDataIdAndTaskId(taskId,wxUserId);
}
}
......@@ -224,4 +224,9 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
MemberClerkChatConfig chatConfig = memberClerkChatConfigMapper.getChatByMemberIdStaffId(memberId, staffId);
return chatConfig;
}
@Override
public List<TabHaobanStaffClerkRelation> listByWxEnterpriseId(String wxEnterpriseId) {
return mapper.listByWxEnterpriseId(wxEnterpriseId);
}
}
......@@ -58,4 +58,10 @@ public class SyncTaskServiceImpl implements SyncTaskService {
Page<SyncTaskDTO> page = PageUtil.changePageHelperToCurrentPage(new PageInfo<>(list), SyncTaskDTO.class);
return page;
}
@Override
public List<TabHaobanSyncTask> listTaskByType(int taskType) {
List<TabHaobanSyncTask> list = syncTaskMapper.listTaskByType(taskType);
return list;
}
}
......@@ -743,4 +743,221 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
String wxEnterpriseId) {
return EntityUtil.changeEntityListByJSON(MemberUnionidRelatedDTO.class, memberUnionidRelatedMapper.getByWxUserIdListAndWxEnterpriseId(userIdList,wxEnterpriseId));
}
@Override
public void cleanNoExsitFriend(String wxEnterpriseId, String wxUserId, String wxRes) {
log.info("【清除不存在的好友】wxEnterpriseId={},wxUserId={}",wxEnterpriseId,wxUserId);
WxEnterpriseDTO enterprise = wxEnterpriseService.selectById(wxEnterpriseId);
//String wxRes = qywxUserApiService.listExternalUserid(enterprise.getCorpid(), config.getWxSuiteid(), wxUserId);
List<MemberUnionidRelatedDTO> list = this.getByWxUserIdAndWxEnterpriseId(wxUserId, wxEnterpriseId);
List<String> externalUserIdList = list.stream().map(external->external.getExternalUserid())
.collect(Collectors.toList());
if(StringUtils.isBlank(wxRes)){
log.info("【清除不存在的好友不存在】wxEnterpriseId={},wxUserId={}",wxEnterpriseId,wxUserId);
return;
}
JSONArray externalArr = JSON.parseArray(wxRes);
for (String externalUserId : externalUserIdList) {
if(!externalArr.contains(externalUserId)){
//删除成员和外部联系人关系
MemberUnionidRelatedDTO dto = new MemberUnionidRelatedDTO();
dto.setExternalUserid(externalUserId);
dto.setWxUserId(wxUserId);
memberUnionRelatedService.delMemberUnionidRelated(dto);
//删除导购和外部联系人关系
externalClerkRelatedService.delByUserIdAndExternalUserId(dto);
}
}
}
@Override
public List<String> listSelfExterialList(String wxEnterpriseId, String wxUserId) {
try {
log.info("【查询自建应用好友】wxEnterpriseId={},wxUserId={}",wxEnterpriseId,wxUserId);
WxEnterpriseDTO enterprise = wxEnterpriseService.selectById(wxEnterpriseId);
List<String> list = new ArrayList<>();
SecretSettingDTO secretSetting = secretSettingService.getSecretSetting(wxEnterpriseId, SecretTypeEnum.CONTACT_CUSTOMER.getVal());
if (null == secretSetting||secretSetting.getCheckFlag()==0) {
log.info("没有配置客户联系secret:{}",wxEnterpriseId);
return list;
}
String res = qywxUserApiService.listSelfExternalUserid(enterprise.getCorpid(), secretSetting.getSecretVal(), wxUserId);
log.info("【查询自建应用】res={}",res);
if(StringUtils.isBlank(res)){
return list;
}
JSONArray jsonArr = JSON.parseArray(res);
if(jsonArr.size() == 0) {
return list;
}
for (Object object : jsonArr) {
list.add(object.toString());
}
return list;
} catch (Exception e) {
log.info("错误={}",e);
}
return null;
}
@Override
public List<String> listExterialList(String wxEnterpriseId, String wxUserId) {
log.info("【获取第三方应用好友】wxEnterpriseId={},wxUserId={}",wxEnterpriseId,wxUserId);
WxEnterpriseDTO enterprise = wxEnterpriseService.selectById(wxEnterpriseId);
// String wxRes = qywxUserApiService.listExternalUserid(enterprise.getCorpid(), "wwb3ef71aa8c6d9c06", wxUserId);
String wxRes = qywxUserApiService.listExternalUserid(enterprise.getCorpid(), config.getWxSuiteid(), wxUserId);
List<String> list = new ArrayList<>();
log.info("【查询第三方应用】res={}",wxRes);
if(StringUtils.isBlank(wxRes)){
return list;
}
JSONArray jsonArr = JSON.parseArray(wxRes);
if(jsonArr.size() == 0) {
return list;
}
for (Object object : jsonArr) {
list.add(object.toString());
}
return list;
}
@Override
public ExternalUserDTO getCorpSelfExternalUseridInfo(String wxEnterpriseId,String wxUserId, String externalUserId) {
WxEnterpriseDTO wxEnterprise = wxEnterpriseService.selectById(wxEnterpriseId);
if(wxEnterprise == null){
log.info("企业不存在");
return null;
}
SecretSettingDTO secretSetting = secretSettingService.getSecretSetting(wxEnterpriseId, SecretTypeEnum.CONTACT_CUSTOMER.getVal());
if (null == secretSetting) {
log.info("没有配置secret");
return null;
}
String unionIdJson = qywxUserApiService.getCorpSelfExternalUseridInfo(wxEnterprise.getCorpid(), secretSetting.getSecretVal(), externalUserId);
if(StringUtils.isBlank(unionIdJson)){
log.info("好友不存在");
return null;
}
ExternalUserPojo pojo = getExternalUserPojo(unionIdJson, wxUserId, wxEnterpriseId);
return EntityUtil.changeEntityByJSON(ExternalUserDTO.class, pojo);
}
@Override
public ExternalUserDTO getExternalUseridInfo(String wxEnterpriseId,String wxUserId, String externalUserId) {
WxEnterpriseDTO wxEnterprise = wxEnterpriseService.selectById(wxEnterpriseId);
if(wxEnterprise == null){
log.info("企业不存在");
return null;
}
// String uJ = qywxUserApiService.getExternalUseridInfo(wxEnterprise.getCorpid(), "wwb3ef71aa8c6d9c06", externalUserId);
String uJ = qywxUserApiService.getExternalUseridInfo(wxEnterprise.getCorpid(), config.getWxSuiteid(), externalUserId);
if(StringUtils.isBlank(uJ)){
log.info("好友不存在");
return null;
}
String name = "";
String createTime = "";
String avatar = "";
if(StringUtils.isNotBlank(uJ)){
JSONObject jo = JSON.parseObject(uJ);
String external_contact = jo.getString("external_contact");
String uj_follow_user = jo.getString("follow_user");
JSONObject jt = null;
if(StringUtils.isNotBlank(external_contact)){
jt = JSON.parseObject(external_contact);
name = EmojiFilterUtil.filterEmojiLast(jt.getString("name"), true);
avatar = jt.getString("avatar");
}
if(StringUtils.isNotBlank(uj_follow_user)){
JSONArray j = JSON.parseArray(uj_follow_user);
String uj_userId = "";
for (Object object : j) {
String followJson = JSON.toJSONString(object);
JSONObject follow = JSON.parseObject(followJson);
uj_userId = follow.getString("userid");
if(uj_userId.equals(wxUserId)){
if(jt != null){
externalUserId = jt.getString("external_userid");
createTime = follow.getString("createtime");
break;
}
}
}
}
}
ExternalUserPojo pojo = new ExternalUserPojo();
pojo.setExternalUserId(externalUserId);
pojo.setName(name);
pojo.setAddCreateTime(createTime);
pojo.setWxEnterpriseId(wxEnterpriseId);
pojo.setAvatar(avatar);
return EntityUtil.changeEntityByJSON(ExternalUserDTO.class, pojo);
}
@Override
public String addExternal(ExternalUserDTO dto) {
String wxUserId = dto.getWxUserId();
String wxEnterpriseId = dto.getWxEnterpriseId();
String name = StringUtils.isBlank(dto.getName())?"--":dto.getName();
String createTime = dto.getAddCreateTime();
String unionId = dto.getUnionId();
String externalUserId = dto.getExternalUserId();
String memberId = dto.getMemberId();
String storeId = dto.getStoreId();
String enterpriseId = dto.getEnterpriseId();
String staffId = dto.getStaffId();
String avatar = dto.getAvatar();
String clerkId = dto.getClerkId();
if(StringUtils.isAnyBlank(wxUserId,wxEnterpriseId,name,createTime,unionId,externalUserId,memberId,storeId,enterpriseId,staffId,clerkId)){
log.info("【新增外部联系人】wxUserId={},wxEnterpriseId={},name={},createTime={},unionId ={},externalUserId ={},memberId ={},storeId ={},enterpriseId ={},staffId={},clerkId={}"
+ "",wxUserId,wxEnterpriseId,name,createTime,unionId,externalUserId,memberId,storeId,enterpriseId,staffId,clerkId);
return "参数不对";
}
MemberUnionidRelatedDTO exsitDTO = memberUnionRelatedService.getByParams(wxUserId, wxEnterpriseId,name,createTime);
String uuid = "";
if(exsitDTO == null){
exsitDTO = new MemberUnionidRelatedDTO();
exsitDTO.setAvatar(avatar);
exsitDTO.setExternalUserid(externalUserId);
exsitDTO.setAddCreateTime(createTime);
exsitDTO.setEnterpriseId(enterpriseId);
exsitDTO.setExternalName(name);
exsitDTO.setExternalUserid(externalUserId);
exsitDTO.setWxEnterpriseId(wxEnterpriseId);
exsitDTO.setWxUserId(wxUserId);
exsitDTO.setUnionid(unionId);
uuid = memberUnionRelatedService.addMemberUnionidRelated(exsitDTO);
}else{
uuid = exsitDTO.getMemberUnionidRelatedId();
exsitDTO.setAvatar(avatar);
exsitDTO.setExternalUserid(externalUserId);
memberUnionRelatedService.update(exsitDTO);
}
TabHaobanExternalClerkRelated external = externalClerkRelatedService.getByParams(wxUserId, wxEnterpriseId,name,createTime);
if(external == null){
TabHaobanExternalClerkRelated related = new TabHaobanExternalClerkRelated();
related.setAddCreateTime(createTime);
related.setClerkId(clerkId);
related.setEnterpriseId(enterpriseId);
related.setExternalName(name);
related.setExternalUserId(externalUserId);
related.setStaffId(staffId);
related.setMemberUnionidRelatedId(uuid);
related.setStoreId(storeId);
related.setUnionid(unionId);
related.setWxEnterpriseId(wxEnterpriseId);
related.setWxUserId(wxUserId);
related.setMemberId(memberId);
externalClerkRelatedService.insert(related);
}else{
external.setMemberId(memberId);
external.setMemberUnionidRelatedId(uuid);
external.setExternalUserId(externalUserId);
external.setUnionid(unionId);
external.setStoreId(storeId);
external.setEnterpriseId(enterpriseId);
external.setClerkId(clerkId);
externalClerkRelatedService.update(external);
}
return "";
}
}
package com.gic.haoban.manage.service.task;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.dto.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.DealSyncOperationApiService;
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.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
@Service
public class FriendClerkSyncOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(FriendClerkSyncOperation.class);
@Autowired
private PreDealService preDealService;
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@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();
List<String> selfUserIdList = memberUnionidRelatedApiService.listSelfExterialList(wxEnterpriseId, wxUserId);
logger.info("selfUserIdList={}",selfUserIdList.size());
List<String> userIdList = memberUnionidRelatedApiService.listExterialList(wxEnterpriseId, wxUserId);
memberUnionidRelatedApiService.cleanNoExsitFriend(wxEnterpriseId, wxUserId,JSON.toJSONString(userIdList));
logger.info("userIdList={}",userIdList.size());
if(CollectionUtils.isNotEmpty(selfUserIdList)){
List<TabHaobanPreDealLog> dealLogList = selfUserIdList.stream().map(externalUserId -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(externalUserId +"-"+ wxUserId);
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);
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(dataPre.getTaskId(), hashSet, SyncTaskStatusEnum.self_friend_sync);
}
if(CollectionUtils.isNotEmpty(userIdList)){
List<TabHaobanPreDealLog> dealLogList = userIdList.stream().map(externalUserId -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(externalUserId +"-"+ wxUserId);
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(dealLogList);
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(dataPre.getTaskId(), hashSet, SyncTaskStatusEnum.friend_sync);
}
} 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);
} else {
dealSuccess(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), dataPre.getWxEnterpriseId());
}
// checkDepartmentTask(taskId);
}
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
}
@Override
public void dealSuccess(String taskId, String dataId, String enterpriseId, String wxEnterpriseId) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功");
}
@Override
public void checkDepartmentTask(String taskId) {
String key = "sync_wx_lock_";
boolean b = preDealService.checkTask(taskId, PreDealTypeEnum.friend_clerk.getVal());
if (!b) {
return;
}
logger.info("好友同步成功:{}", taskId);
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
//同步成功 进入门店处理
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal());
RedisUtil.delCache(key + syncTask.getWxEnterpriseId());
}
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
dealList.forEach(relationId -> {
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setData(relationId);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("departmentSyncDealMq", JSONObject.toJSONString(dealParamMqDTO));
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId, relationId);
e.printStackTrace();
}
});
}
}
package com.gic.haoban.manage.service.task;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.clerk.api.service.PowerService;
import com.gic.haoban.manage.api.dto.ClerkMainStoreRelatedDTO;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanSyncTask;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberOpenCardBusinessService;
import com.gic.redis.data.util.RedisUtil;
@Service
public class FriendMergeSyncOperation implements BaseSyncOperation{
private static final Logger logger = LoggerFactory.getLogger(FriendMergeSyncOperation.class);
@Autowired
private PreDealService preDealService;
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService;
@Autowired
private StaffApiService staffApiService;
@Autowired
private StaffClerkRelationService staffClerkRelationService;
@Autowired
private ClerkService clerkService;
@Autowired
private PowerService powerService;
@Autowired
private MemberOpenCardBusinessService memberOpenCardBusinessService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
String reason = "";
boolean dealFlag = true;
String wxUserId = dataPre.getpDataId();
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String taskId = dealParamMqDTO.getTaskId();
String key = dataPre.getDataId();
try {
String dataContent = dataPre.getDataContent();
ExternalUserDTO pojo = JSON.parseObject(dataContent, ExternalUserDTO.class);
StaffDTO staff = staffApiService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
if(staff == null){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "成员不存在");
checkDepartmentTask(taskId);
return;
}
ClerkMainStoreRelatedDTO mainStore = clerkMainStoreRelatedApiService.getWxEnterpriseIdAndStaffId(wxEnterpriseId, staff.getStaffId());
if(mainStore == null){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "主门店不存在");
checkDepartmentTask(taskId);
return;
}
StaffClerkRelationDTO staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staff.getStaffId(),mainStore.getStoreId());
if(staffClerkRelationDTO == null){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "未绑定导购");
checkDepartmentTask(taskId);
return;
}
if(pojo == null){
dealException(taskId, key, null, "好友不存在");
checkDepartmentTask(taskId);
return;
}
pojo.setWxEnterpriseId(wxEnterpriseId);
pojo.setEnterpriseId(staffClerkRelationDTO.getEnterpriseId());
pojo.setStoreId(mainStore.getStoreId());
pojo.setClerkId(staffClerkRelationDTO.getClerkId());
pojo.setWxUserId(wxUserId);
pojo.setStaffId(staffClerkRelationDTO.getStaffId());
String externalUserId = pojo.getExternalUserId();
ExternalUserDTO p = memberUnionidRelatedApiService.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
if(p == null){
dealException(taskId, key, null, "好友不存在");
checkDepartmentTask(taskId);
return;
}
pojo.setAvatar(p.getAvatar());
//新增导购和外部联系人关系
String clerkCode = staffClerkRelationDTO.getClerkCode();
ClerkDTO clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
if(clerk == null){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "导购不存在");
checkDepartmentTask(taskId);
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)){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "导购码不存在");
checkDepartmentTask(taskId);
return;
}
MemberDTO member = null;
if(clerk != null && StringUtils.isNotBlank(qrcodeParam)&&StringUtils.isNotBlank(pojo.getUnionId())){
member = memberOpenCardBusinessService.getMemberByQywxChannelParam(staffClerkRelationDTO.getEnterpriseId(),pojo.getUnionId(),"",pojo.getName(),pojo.getAvatar(),qrcodeParam);
}
if(member == null){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "会员不存在");
checkDepartmentTask(taskId);
return;
}
pojo.setMemberId(member.getMemberId());
String res = memberUnionidRelatedApiService.addExternal(pojo);
if(StringUtils.isBlank(res)){
dealSuccess(dealParamMqDTO.getTaskId(), dataPre.getDataId(), null, null);
}else{
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), "好友不存在");
}
} 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);
}
checkDepartmentTask(taskId);
}
//
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
}
@Override
public void dealSuccess(String taskId, String dataId, String enterpriseId, String wxEnterpriseId) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功");
}
@Override
public void checkDepartmentTask(String taskId) {
boolean b = preDealService.checkTask(taskId, PreDealTypeEnum.friend_merge.getVal());
if (!b) {
return;
}
logger.info("好友合并成功:{}", taskId);
int errorCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.friend_merge.getVal(), 3);
int errorSelfCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.self_friend.getVal(), 3);
int errorFriendCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.friend.getVal(), 3);
if(errorCount > 0 || errorFriendCount > 0 || errorSelfCount > 0){
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_compute.getVal());
}else{
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal());
}
}
}
package com.gic.haoban.manage.service.task;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.dto.ClerkMainStoreRelatedDTO;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.pojo.ExternalUserPojo;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
@Service
public class FriendSyncOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(FriendSyncOperation.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;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
String reason = "";
boolean dealFlag = true;
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getpDataId();
String taskId = dealParamMqDTO.getTaskId();
String externalUserId = dataPre.getDataContent();
ExternalUserDTO pojo = memberUnionidRelatedApiService.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
if(pojo == null){
preDealService.updateStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.exception.getVal(), "好友不存在");
checkStaffTask(taskId, wxUserId);
return;
}
JSONObject json = new JSONObject();
json.put("name", pojo.getName());
json.put("externalUserId", pojo.getExternalUserId());
json.put("addCreateTime", pojo.getAddCreateTime());
dealSuccess(taskId, dataPre.getDataId(),JSON.toJSONString(json),wxEnterpriseId);
try {
checkStaffTask(taskId, wxUserId);
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre),e);
reason = "第三方好友处理异常";
dealFlag = false;
}finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dataPre.getDataId(), dataPre.getEnterpriseId(), reason);
}
}
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
}
@Override
public void dealSuccess(String taskId, String dataId, String dataContent, String wxEnterpriseId) {
preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功",dataContent);
}
public void checkStaffTask(String taskId,String wxUserId) {
boolean flag = preDealService.checkStaffTaskByTaskIdAndPDataId(taskId,wxUserId);
logger.info("checkStaffTask={}",flag);
if(flag){
List<TabHaobanPreDealLog> list = preDealService.listByPDataIdAndTaskId(taskId, wxUserId);
if(CollectionUtils.isNotEmpty(list)){
Map<String,ExternalUserDTO> map = new HashMap<>();
List<TabHaobanPreDealLog> dealLogList = new ArrayList<>();
for (TabHaobanPreDealLog tabHaobanPreDealLog : list) {
String dataContent = tabHaobanPreDealLog.getDataContent();
if(StringUtils.isNotBlank(dataContent) && dataContent.startsWith("{")){
ExternalUserDTO json = JSON.parseObject(dataContent, ExternalUserDTO.class);
String addCreateTime = json.getAddCreateTime();
String name = json.getName();
String key = name +"-"+wxUserId +"-"+ addCreateTime;
String unionId = json.getUnionId();
String wxEnterpriseId = tabHaobanPreDealLog.getWxEnterpriseId();
String externalUserId = json.getExternalUserId();
ExternalUserDTO dto = map.get(key);
if(dto != null){
if(tabHaobanPreDealLog.getDataType() == PreDealTypeEnum.self_friend.getVal()){
dto.setUnionId(unionId);
}else if(tabHaobanPreDealLog.getDataType() == PreDealTypeEnum.friend.getVal()){
dto.setExternalUserId(externalUserId);
}
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(key);
dealLog.setpDataId(wxUserId);
dealLog.setDataType(PreDealTypeEnum.friend_merge.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLogList.add(dealLog);
}else{
map.put(key, json);
}
}
}
logger.info("dealLogList={}",JSON.toJSONString(dealLogList));
if(CollectionUtils.isNotEmpty(dealLogList)){
preDealService.insert(dealLogList);
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.merge_friend_sync);
}
}
}
}
@Override
public void checkDepartmentTask(String taskId) {
}
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
dealList.forEach(relationId -> {
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setData(relationId);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("departmentSyncDealMq", JSONObject.toJSONString(dealParamMqDTO));
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId, relationId);
e.printStackTrace();
}
});
}
}
package com.gic.haoban.manage.service.task;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.clerk.api.service.PowerService;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.dto.ClerkMainStoreRelatedDTO;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberOpenCardBusinessService;
import com.gic.mq.sdk.GicMQClient;
@Service
public class SelfFriendSyncOperation implements BaseSyncOperation{
private static final Logger logger = LoggerFactory.getLogger(SelfFriendSyncOperation.class);
@Autowired
private PreDealService preDealService;
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService;
@Autowired
private StaffApiService staffApiService;
@Autowired
private StaffClerkRelationService staffClerkRelationService;
@Autowired
private ClerkService clerkService;
@Autowired
private PowerService powerService;
@Autowired
private MemberOpenCardBusinessService memberOpenCardBusinessService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
String reason = "";
boolean dealFlag = true;
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){
dealException(taskId, dataPre.getDataId(), null, "好友不存在");
checkStaffTask(taskId, wxUserId);
return;
}
JSONObject json = new JSONObject();
json.put("name", pojo.getName());
json.put("unionId", pojo.getUnionId());
json.put("addCreateTime", pojo.getAddCreateTime());
try {
dealSuccess(taskId, dataPre.getDataId(),json.toJSONString(),wxEnterpriseId);
checkStaffTask(taskId, wxUserId);
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre),e);
reason = "自建应用好友处理异常";
dealFlag = false;
}finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dataPre.getDataId(), dataPre.getEnterpriseId(), reason);
}
}
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
}
@Override
public void dealSuccess(String taskId, String dataId, String dataContent, String wxEnterpriseId) {
preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功",dataContent);
}
public void checkStaffTask(String taskId,String wxUserId) {
boolean flag = preDealService.checkStaffTaskByTaskIdAndPDataId(taskId,wxUserId);
logger.info("checkStaffTask={}",flag);
if(flag){
List<TabHaobanPreDealLog> list = preDealService.listByPDataIdAndTaskId(taskId, wxUserId);
if(CollectionUtils.isNotEmpty(list)){
List<TabHaobanPreDealLog> dealLogList = new ArrayList<>();
Map<String,ExternalUserDTO> map = new HashMap<>();
for (TabHaobanPreDealLog tabHaobanPreDealLog : list) {
String dataContent = tabHaobanPreDealLog.getDataContent();
if(StringUtils.isNotBlank(dataContent) && dataContent.startsWith("{")){
ExternalUserDTO json = JSON.parseObject(dataContent, ExternalUserDTO.class);
String addCreateTime = json.getAddCreateTime();
String name = json.getName();
String key = name +"-" +wxUserId +"-"+ addCreateTime;
String unionId = json.getUnionId();
String wxEnterpriseId = tabHaobanPreDealLog.getWxEnterpriseId();
ExternalUserDTO dto = map.get(key);
if(dto != null){
if(tabHaobanPreDealLog.getDataType() == PreDealTypeEnum.self_friend.getVal()){
dto.setUnionId(unionId);
}else if(tabHaobanPreDealLog.getDataType() == PreDealTypeEnum.friend.getVal()){
dto.setExternalUserId(tabHaobanPreDealLog.getDataId());
}
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(key);
dealLog.setpDataId(wxUserId);
dealLog.setDataType(PreDealTypeEnum.friend_merge.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLogList.add(dealLog);
}else{
map.put(key, json);
}
}
}
logger.info("dealLogList={}",JSON.toJSONString(dealLogList));
if(CollectionUtils.isNotEmpty(dealLogList)){
preDealService.insert(dealLogList);
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.merge_friend_sync);
}
}
}
}
@Override
public void checkDepartmentTask(String taskId) {
}
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
dealList.forEach(relationId -> {
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setData(relationId);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("departmentSyncDealMq", JSONObject.toJSONString(dealParamMqDTO));
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId, relationId);
e.printStackTrace();
}
});
}
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));
}
}
......@@ -20,7 +20,7 @@
update_time
</sql>
<sql id="Base_Column_List_data">
id, wx_enterprise_id,enterprise_id, data_id,data_content, p_data_id, task_id, data_type, status_flag, create_time,
id, wx_enterprise_id,enterprise_id, data_id,data_content, p_data_id, task_id, data_type, status_flag, create_time,reason,
update_time
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
......@@ -344,5 +344,33 @@
and wx_enterprise_id =#{wxEnterpriseId} limit 1
</select>
<update id="updateFriendStatusByDataId">
update tab_haoban_pre_deal_log
<set>
status_flag = #{status,jdbcType=INTEGER},
reason=#{reason},
data_content = #{dataContent},
update_time = now()
</set>
where data_id = #{dataId,jdbcType=INTEGER} and task_id=#{taskId}
</update>
<select id="countFailStaffTaskByTaskIdAndPDataId" resultType="integer">
select
count(*)
from tab_haoban_pre_deal_log
where task_id = #{taskId}
and p_data_id =#{pDataId}
and status_flag != 2
and status_flag != 3
</select>
<select id="listByPDataIdAndTaskId" resultMap="BaseResultMap">
select
<include refid="Base_Column_List_data"/>
from tab_haoban_pre_deal_log
where task_id = #{taskId}
and p_data_id =#{pDataId}
</select>
</mapper>
\ No newline at end of file
......@@ -120,6 +120,17 @@
select
<include refid="Base_Column_List"/>
from tab_haoban_sync_task
where wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR} order by update_time desc
where wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR}
and task_type != 4
order by update_time desc
</select>
<select id="listTaskByType" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from tab_haoban_sync_task
where status_flag = 0
and task_type = #{taskType}
group by wx_enterprise_id
</select>
</mapper>
\ No newline at end of file
......@@ -138,4 +138,14 @@
and status_flag = 1
limit 1
</select>
<select id="listByWxEnterpriseId" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from tab_haoban_clerk_main_store_related
where 1
and wx_enterprise_id = #{wxEnterpriseId}
and status_flag = 1
group by staff_id
</select>
</mapper>
\ No newline at end of file
......@@ -136,4 +136,5 @@
where staff_id = #{staffId,jdbcType=VARCHAR} and member_id = #{memberId,jdbcType=VARCHAR}
and status =1
</select>
</mapper>
\ No newline at end of file
......@@ -359,4 +359,13 @@
and status_flag = 1
</select>
<select id="listByWxEnterpriseId" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from tab_haoban_staff_clerk_relation
where wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR}
and status_flag =1
group by wx_user_id
</select>
</mapper>
\ No newline at end of file
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
public class CountDownLatchTest implements Runnable{
private static Logger logger= LoggerFactory.getLogger(CountDownLatchTest.class);
final AtomicInteger number = new AtomicInteger();
volatile boolean bol = false;
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
private String wxUserId;
private CountDownLatch countDownLatch;
public CountDownLatchTest(MemberUnionidRelatedApiService memberUnionidRelatedApiService,String wxUserId,CountDownLatch countDownLatch){
this.memberUnionidRelatedApiService = memberUnionidRelatedApiService;
this.wxUserId = wxUserId;
this.countDownLatch = countDownLatch;
}
@Override
public void run() {
try {
// 线程等待
countDownLatch.await();
long startTime = System.currentTimeMillis();
List<String> res = memberUnionidRelatedApiService.listSelfExterialList("ca66a01b79474c40b3e7c7f93daf1a3b", wxUserId);
System.out.println(JSON.toJSONString(res));
long endTime = System.currentTimeMillis();
System.out.println(Thread.currentThread().getName() + " ended at: " + endTime + ", cost: " + (endTime - startTime) + " ms.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
import cn.hutool.core.thread.ConcurrencyTester;
import cn.hutool.core.thread.ThreadUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.dto.SyncSingleDealDTO;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.StaffClerkRelationApiService;
import com.gic.haoban.manage.service.service.StaffService;
......@@ -23,6 +27,9 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@RunWith(SpringJUnit4ClassRunner.class)
......@@ -48,143 +55,36 @@ public class DealSyncTest {
@Autowired
private StaffClerkRelationApiService staffClerkRelationApiService;
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Test
public void test() {
List<SyncSingleDealDTO> add = new ArrayList<>();
List<SyncSingleDealDTO> edit = new ArrayList<>();
{
SyncSingleDealDTO dealDTO = new SyncSingleDealDTO();
dealDTO.setDepartmentId("ff80808166c3a1050166c43175d9000e");
dealDTO.setParentDepartmentId("a101b3a51cd549e79f3daec1aa628301");
dealDTO.setDepartmentName("西溪花园");
dealDTO.setRelatedId("ff80808166c3a1050166c43175d9000e");
dealDTO.setStoreFlag(0);
dealDTO.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000");
add.add(dealDTO);
}
{
SyncSingleDealDTO dealDTO = new SyncSingleDealDTO();
dealDTO.setDepartmentId("100333808083");
dealDTO.setParentDepartmentId("a101b3a51cd549e79f3daec1aa628301");
dealDTO.setDepartmentName("测试门店1003338");
dealDTO.setRelatedId("100333808083");
dealDTO.setStoreFlag(1);
dealDTO.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000");
add.add(dealDTO);
}
dealSyncOperationApiService.dealQywxDepartment("111", "ca66a01b79474c40b3e7c7f93daf1a3b");
}
@Test
public void test2() {
int i =1;
while (true) {
i++;
if (i==5){
System.out.println("close");
RedisUtil.close();
}
if (i==10||i==25){
System.out.println("creConnect");
RedisUtil.reConnect();
}
try {
RedisUtil.setCache("1", "2");
Object cache = RedisUtil.getCache("1");
System.out.println("======={}"+i+":"+cache);
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Test
public void test3() {
staffApiService.getWxSaveNew("3e7a7c09097a40b18aef1478b04688fe", "ca66a01b79474c40b3e7c7f93daf1a3b");
}
@Test
public void test5() {
String key="test2";
RedisUtil.lock(key,100L, TimeUnit.SECONDS,0L);
// try {
// Thread.sleep(3000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// if(RedisUtil.isLocked(key)){
// RedisUtil.unlock(key);
// }
dealSyncOperationApiService.test("ca66a01b79474c40b3e7c7f93daf1a3b", "49da12164c584fe8aabbb1094b25cfa5");
// ConcurrencyTester tester = ThreadUtil.concurrencyTest(10, () -> {
// List<String> res = memberUnionidRelatedApiService.listSelfExterialList("ca66a01b79474c40b3e7c7f93daf1a3b", "QiuWenMin");
// System.out.println(JSON.toJSONString(res));
// });
//
// ExecutorService pool = Executors. newCachedThreadPool();
// List<String> res = memberUnionidRelatedApiService.listSelfExterialList("ca66a01b79474c40b3e7c7f93daf1a3b", "QiuWenMin");
// System.out.println(JSON.toJSONString(res));
// 初始化计数器为1
// CountDownLatch countDownLatch = new CountDownLatch(1);
// new Thread(new CountDownLatchTest(memberUnionidRelatedApiService,"12", countDownLatch)).start();
// new Thread(new CountDownLatchTest(memberUnionidRelatedApiService,"13989473881", countDownLatch)).start();
// new Thread(new CountDownLatchTest(memberUnionidRelatedApiService,"1545shiyao", countDownLatch)).start();
// new Thread(new CountDownLatchTest(memberUnionidRelatedApiService,"15757150876", countDownLatch)).start();;
// new Thread(new CountDownLatchTest(memberUnionidRelatedApiService,"18758285875", countDownLatch)).start();
// new Thread(new CountDownLatchTest(memberUnionidRelatedApiService,"2224324sdftgret90", countDownLatch)).start();
// new Thread(new CountDownLatchTest(memberUnionidRelatedApiService,"2341578784", countDownLatch)).start();
// new Thread(new CountDownLatchTest(memberUnionidRelatedApiService,"234324", countDownLatch)).start();
// new Thread(new CountDownLatchTest(memberUnionidRelatedApiService,"niweizhong", countDownLatch)).start();
// new Thread(new CountDownLatchTest(memberUnionidRelatedApiService,"QiuWenMin", countDownLatch)).start();
// 启动多个线程
// countDownLatch.countDown();
}
@Test
public void test6() {
String key="test2";
// RedisUtil.lock(key,100L, TimeUnit.SECONDS,0L);
// try {
// Thread.sleep(3000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
RLock lock = RedisUtil.getRedisClient().getLock(key);
try {
if (lock.tryLock(0, 10, TimeUnit.MINUTES)) {
try {
Thread.sleep(1000L);
} finally {
lock.unlock();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
// if(RedisUtil.isLocked(key)){
// RedisUtil.unlock(key);
// }
// RedisUtil.unlock();
// RedisUtil.setCache("test5511","111",2592030L);
}
@Test
public void test4() {
List<StaffDTO> retList = staffService.listByUserIdsAndWxEnterpriseId(null, "ca66a01b79474c40b3e7c7f93daf1a3b");
System.out.println(retList.size());
if (CollectionUtils.isEmpty(retList)) {
return;
}
List<StaffDTO> staffDTOS = retList.subList(2, retList.size()-1);
staffDTOS.forEach(staffDTO -> {
if (StringUtils.isNotBlank(staffDTO.getWxUserId())) {
logger.info(staffDTO.getWxUserId());
QywxExternalcontactDTO send = new QywxExternalcontactDTO();
send.setType(1);
send.setScene(1);
send.setRemark("tesst_" + staffDTO.getPhoneNumber());
List<String> userIds = new ArrayList<>();
userIds.add(staffDTO.getWxUserId());
send.setUser(userIds);
String configId = qywxUserApiService.getExternalcontactByUserId("ww9ede832a84b7ae5f", "65zze159pYb4ofbFsIREZ5X7d7iaZ-bWsVIQk2y5kTU", send);
if (StringUtils.isNotBlank(configId)) {
logger.info("staff:{}", configId, JSONObject.toJSONString(staffDTO));
com.gic.haoban.manage.service.entity.Test test = new com.gic.haoban.manage.service.entity.Test();
test.setId(configId);
test.setName(staffDTO.getWxUserId());
testService.save(test);
}
}
});
}
@Test
public void test7() {
ServiceResponse<String> memberChatConfig = staffClerkRelationApiService.getClerkMemberChatConfig("ff8080816106031401612207e9b405aa");
System.out.println(JSONObject.toJSONString(memberChatConfig));
}
}
......@@ -3,7 +3,9 @@ package com.gic.haoban.manage.web.controller;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.commons.util.DateUtil;
import com.gic.enterprise.api.dto.EnterpriseAndUserDTO;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.dto.StoreDTO;
......@@ -19,6 +21,7 @@ import com.gic.haoban.manage.api.dto.SecretSettingDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.dto.WxEnterpriseDTO;
import com.gic.haoban.manage.api.enums.SecretTypeEnum;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.api.service.DepartmentApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.WxEnterpriseApiService;
......@@ -31,6 +34,9 @@ import com.gic.haoban.manage.web.vo.EnterpriseSearchVO;
import com.gic.haoban.manage.web.vo.LoginVO;
import com.gic.haoban.manage.web.vo.SecretSettingVO;
import com.gic.haoban.manage.web.vo.StoreVo;
import com.gic.quartz.api.dto.QuartzTaskDTO;
import com.gic.quartz.api.service.QuartzService;
import com.gic.redis.data.util.RedisUtil;
import com.gic.wechat.api.dto.qywx.UserDTO;
import com.gic.wechat.api.service.qywx.QywxUserApiService;
import com.gic.wechat.token.api.dto.QywxCorpInfoDTO;
......@@ -67,6 +73,10 @@ public class WxEnterpriseController extends WebBaseController{
@Autowired
private StaffApiService staffApiService;
@Autowired
private DealSyncOperationApiService dealSyncOperationApiService;
@Autowired
private QuartzService quartzService;
//授权企业列表
......@@ -465,7 +475,7 @@ public class WxEnterpriseController extends WebBaseController{
listRet.forEach(secretSettingVO -> {
if ((!StringUtils.isEmpty(secretSettingVO.getEnterpriseId()))&&(!secretSettingVO.getEnterpriseId().equals("-1"))) {
EnterpriseDTO enterpriseDTO = enterpriseService.getEnterpriseById(secretSettingVO.getEnterpriseId());
secretSettingVO.setEnterpriseName(enterpriseDTO.getBrandName());
secretSettingVO.setEnterpriseName(enterpriseDTO == null?"":enterpriseDTO.getBrandName());
}
});
}
......@@ -503,6 +513,73 @@ public class WxEnterpriseController extends WebBaseController{
return resultResponse(HaoBanErrCode.ERR_1,true);
}
/**
* 刷新企业微信好友
* @return
*/
@RequestMapping("/fresh-wx-friend")
public HaobanResponse freshWxFriend(){
LoginVO login = (LoginVO) AuthRequestUtil.getLoginUser();
String wxEnterpriseId = login.getWxEnterpriseId();
String dayKey = "haoban_fresh-wx-friend-day" + wxEnterpriseId + DateUtil.dateToStr(new Date(), "yyyy-MM-dd");
String monthKey = "haoban_fresh-wx-friend-month" + wxEnterpriseId + DateUtil.dateToStr(new Date(), "yyyy-MM");
String dateKey = "haoban_fresh-wx-friend-date" + wxEnterpriseId;
Integer dayCount = RedisUtil.getCache(dayKey) == null?0:Integer.parseInt(RedisUtil.getCache(dayKey).toString());
Integer monthCount = RedisUtil.getCache(monthKey) == null?0:Integer.parseInt(RedisUtil.getCache(monthKey).toString());
if(dayCount >= 1){
return resultResponse(HaoBanErrCode.ERR_100019);
}
if(monthCount >= 3){
return resultResponse(HaoBanErrCode.ERR_100020);
}
String taskId = dealSyncOperationApiService.createWxFriendTask(wxEnterpriseId, "刷新企微好友", login.getStaffDTO().getStaffId(), "刷新企微好友");
if(StringUtils.isEmpty(taskId)){
return resultResponse(HaoBanErrCode.ERR_100021);
}
// dealSyncOperationApiService.dealWxFriendClerk(taskId, wxEnterpriseId);
RedisUtil.setCache(dayKey, dayCount+1);
RedisUtil.setCache(monthKey, monthCount+1);
RedisUtil.setCache(dateKey, DateUtil.dateToStr(new Date(),DateUtil.FORMAT_DATETIME_19));
return resultResponse(HaoBanErrCode.ERR_1);
}
private QuartzTaskDTO buildQuartzTaskDTO(String id) {
QuartzTaskDTO taskDTO = new QuartzTaskDTO();
taskDTO.setReferId(id);
taskDTO.setTaskMethod("quartWxFriendClerk");
taskDTO.setTaskService("com.gic.haoban.manage.api.service.DealSyncOperationApiService");
return taskDTO;
}
/**
* 获取企业微信好友刷新时间
* @return
*/
@RequestMapping("/get-fresh-detail")
public HaobanResponse getFreshDetail(){
LoginVO login = (LoginVO) AuthRequestUtil.getLoginUser();
String wxEnterpriseId = login.getWxEnterpriseId();
String dateKey = "haoban_fresh-wx-friend-date" + wxEnterpriseId;
RedisUtil.getCache(dateKey);
return resultResponse(HaoBanErrCode.ERR_1,RedisUtil.getCache(dateKey));
}
/**
* 获取刷新好友开关接口
* @return
*/
@RequestMapping("/get-fresh-on-off")
public HaobanResponse getFreshOnOff(){
LoginVO login = (LoginVO) AuthRequestUtil.getLoginUser();
String wxEnterpriseId = login.getWxEnterpriseId();
String dateKey = "haoban_fresh-wx-friend-enterprise";
Object value = RedisUtil.getCache(dateKey);
if(value != null){
String valueStr = value.toString();
return resultResponse(HaoBanErrCode.ERR_1,valueStr.contains(wxEnterpriseId));
}
return resultResponse(HaoBanErrCode.ERR_1,false);
}
}
......@@ -57,6 +57,11 @@ public enum HaoBanErrCode {
ERR_11(11, "验证码发送失败"),
/**
* 验证码发送失败
*/
ERR_13(11, "客官,当前访问人数较多,请稍后再试"),
/**
* 验证码校验失败
*/
ERR_12(12, "验证码校验失败"),
......@@ -106,6 +111,10 @@ public enum HaoBanErrCode {
ERR_100016(100016,"审核失败"),
ERR_100017(100017,"secret已经设置过"),
ERR_100018(100018,"企业不存在"),
ERR_100019(100019,"一天只能刷新1次"),
ERR_100020(100020,"一个月只能刷新3次"),
ERR_100021(100021,"创建任务失败"),
ERR_DEFINE(-888, "自定义错误"),
ERR_OTHER(-999, "未知错误code");
......
package com.gic.haoban.manage.web.init;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.DateUtil;
import com.gic.quartz.api.dto.QuartzTaskDTO;
import com.gic.quartz.api.service.QuartzService;
import java.util.Calendar;
import java.util.Date;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.BeansException;
......@@ -23,22 +28,48 @@ public class MyApplicationContextAware implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
log.info("【定时开始】----------------------");
QuartzTaskDTO taskDTO = buildQuartzMessageDTO("haoban-message-status-time");
taskDTO.setTaskParam("");
// QuartzTaskDTO taskDTO = buildQuartzMessageDTO("haoban-message-status-time3");
// taskDTO.setTaskParam("");
// taskDTO.setTaskStatus(1);
// taskDTO.setTaskTimeInfo("0 30 1 * * *");
//// taskDTO.setTaskTimeInfo("0 0/5 * * * *");
// quartzService.addOrUpdateQuartzTask(taskDTO);
QuartzTaskDTO memberExportTask =buildMemberExportQuartzTaskDTO("haoban-member-export3");
memberExportTask.setTaskParam("-1");
memberExportTask.setTaskStatus(1);
memberExportTask.setTaskTimeInfo("0 0/15 * * * *");
quartzService.addOrUpdateQuartzTask(memberExportTask);
QuartzTaskDTO taskDTO = buildQuartzTaskDTO("hb-fresh-wx-friend");
taskDTO.setTaskParam("-1");
taskDTO.setTaskStatus(1);
taskDTO.setTaskTimeInfo("0 30 1 * * *");
// taskDTO.setTaskTimeInfo("0 0/5 * * * *");
taskDTO.setTaskTimeInfo("0 0 4 * * *");
quartzService.addOrUpdateQuartzTask(taskDTO);
}
private QuartzTaskDTO buildQuartzMessageDTO(String id) {
QuartzTaskDTO taskDTO = new QuartzTaskDTO();
taskDTO.setReferId(id);
taskDTO.setTaskMethod("quartzUpdateMessageStatus");
taskDTO.setTaskService("com.gic.haoban.app.customer.service.api.service.MessageLogApiService");
return taskDTO;
// private QuartzTaskDTO buildQuartzMessageDTO(String id) {
// QuartzTaskDTO taskDTO = new QuartzTaskDTO();
// taskDTO.setReferId(id);
// taskDTO.setTaskMethod("quartzUpdateMessageStatus");
// taskDTO.setTaskService("com.gic.haoban.app.customer.service.api.service.MessageLogApiService");
// return taskDTO;
// }
private QuartzTaskDTO buildQuartzTaskDTO(String id) {
QuartzTaskDTO taskDTO = new QuartzTaskDTO();
taskDTO.setReferId(id);
taskDTO.setTaskMethod("quartWxFriendClerk");
taskDTO.setTaskService("com.gic.haoban.manage.api.service.DealSyncOperationApiService");
return taskDTO;
}
private QuartzTaskDTO buildMemberExportQuartzTaskDTO(String id) {
QuartzTaskDTO taskDTO = new QuartzTaskDTO();
taskDTO.setReferId(id);
taskDTO.setTaskMethod("quartzMemberExport");
taskDTO.setTaskService("com.gic.haoban.app.customer.service.api.service.MemberExportApiService");
return taskDTO;
}
}
......@@ -10,6 +10,7 @@ import com.gic.haoban.manage.web.auth.AuthRequestUtil;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.haoban.manage.web.vo.LoginVO;
import com.gic.redis.data.util.GicRateLimiter;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -37,7 +38,7 @@ public class WebInterceptor extends HandlerInterceptorAdapter {
// @Autowired
// private ClerkRightManageService clerkRightManageService;
private static String MOUDLE="haoban-manage3-web";
private void errorResult(HttpServletResponse httpServletResponse, HaoBanErrCode errCode) {
HaobanResponse response = new HaobanResponse();
......@@ -98,6 +99,17 @@ public class WebInterceptor extends HandlerInterceptorAdapter {
if (loginUser.getStaffDTO() != null) {
httpServletRequest.setAttribute("staffDTO", loginUser.getStaffDTO());
}
String wxEnterpriseId = loginUser.getWxEnterpriseId();
GicRateLimiter instance = GicRateLimiter.getInstance(MOUDLE);
Long acquire = instance.acquire(requestURI, wxEnterpriseId);
logger.info("限流返回值:{},{}",requestURI,acquire);
if (acquire.equals(0)) {
this.errorResult(httpServletResponse, HaoBanErrCode.ERR_13);
logger.info("限流!");
return false;
}
return true;
}
......
......@@ -72,6 +72,8 @@ public class ClerkController extends WebBaseController{
private ClerkNewService clerkNewService;
@Autowired
private AuditSettingApiService auditSettingApiService;
@Autowired
private DealSyncOperationApiService dealSyncOperationApiService;
//选择成员列表
@RequestMapping("/staff-list")
public HaobanResponse staffList(String storeId) {
......@@ -394,13 +396,20 @@ public class ClerkController extends WebBaseController{
json.put("wxUserId", staff.getWxUserId());
json.put("wxEnterpriseId", wxEnterpriseId);
json.put("storeId", storeId);
logger.info("【刷下微信好友】{},{},{}",RouterConstant.FRESH_WX_FRIEND_SERVICENAME,RouterConstant.INIT_FRESH_WX_FRIEND_METHODNAME,json.toJSONString());
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);
// logger.info("【刷下微信好友】{},{},{}",RouterConstant.FRESH_WX_FRIEND_SERVICENAME,RouterConstant.INIT_FRESH_WX_FRIEND_METHODNAME,json.toJSONString());
String taskName = "刷新企业微信好友("+staff.getStaffName()+")";
String taskId = dealSyncOperationApiService.createWxFriendSingleTask(wxEnterpriseId, taskName, staffId, staff.getStaffName());
if(StringUtils.isNotBlank(taskId)){
dealSyncOperationApiService.dealWxFriendClerkSingle(taskId,wxUserId,staffId,wxEnterpriseId);
}else{
return resultResponse(HaoBanErrCode.ERR_999);
}
// 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{
......
......@@ -61,6 +61,6 @@
<dubbo:reference interface="com.gic.clerk.api.service.ClerkNewService" id="clerkNewService"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.DealSyncOperationApiService" id="dealSyncOperationApiService"/>
</beans>
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