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,7 +149,16 @@ public interface DealSyncOperationApiService { ...@@ -150,7 +149,16 @@ 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,7 +181,20 @@ public interface PreDealLogMapper { ...@@ -181,7 +181,20 @@ 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
* @param pDataId * @param pDataId
...@@ -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,7 +168,19 @@ public interface PreDealService { ...@@ -168,7 +168,19 @@ 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
* @param pDataId * @param pDataId
...@@ -182,5 +194,40 @@ public interface PreDealService { ...@@ -182,5 +194,40 @@ public interface PreDealService {
* @return * @return
*/ */
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));
} }
......
...@@ -173,8 +173,14 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -173,8 +173,14 @@ public class PreDealServiceImpl implements PreDealService {
} }
@Override @Override
public boolean checkStaffTaskByTaskIdAndPDataId(String taskId, String pDataId) { 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) {
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,14 +144,14 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -145,14 +144,14 @@ 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())){
operationMap.get("friendMergeSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre); operationMap.get("friendMergeSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
...@@ -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) {
TabHaobanSyncTask tabHaobanSyncTask = new TabHaobanSyncTask(); 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.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,9 +735,30 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ ...@@ -726,9 +735,30 @@ 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) {
List<TabHaobanSyncTask> taskList = syncTaskService.listTaskByType(2); List<TabHaobanSyncTask> taskList = syncTaskService.listTaskByType(2);
if(CollectionUtils.isNotEmpty(taskList)){ if(CollectionUtils.isNotEmpty(taskList)){
for (TabHaobanSyncTask tabHaobanSyncTask : taskList) { for (TabHaobanSyncTask tabHaobanSyncTask : taskList) {
......
...@@ -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 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
...@@ -221,6 +220,18 @@ ...@@ -221,6 +220,18 @@
where external_userid = #{externalUserid,jdbcType=VARCHAR} where external_userid = #{externalUserid,jdbcType=VARCHAR}
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
......
...@@ -355,6 +355,21 @@ ...@@ -355,6 +355,21 @@
</set> </set>
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
...@@ -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
...@@ -239,6 +239,22 @@ ...@@ -239,6 +239,22 @@
and wx_user_id = #{wxUserId} and wx_user_id = #{wxUserId}
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
...@@ -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
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;
...@@ -26,6 +31,10 @@ public class ApplicationController extends WebBaseController{ ...@@ -26,6 +31,10 @@ public class ApplicationController extends WebBaseController{
private ApplicationApiService applicationApiService; private ApplicationApiService applicationApiService;
@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,27 +200,29 @@ public enum HaoBanErrCode { ...@@ -200,27 +200,29 @@ 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,"导购不存在"),
ERR_10017(10017,"审核记录不存在"), ERR_10017(10017,"审核记录不存在"),
ERR_10018(10018,"审核记录已存在"), ERR_10018(10018,"审核记录已存在"),
ERR_10019(10019,"没有配置secret"), ERR_10019(10019,"没有配置secret"),
ERR_10020(10020,"该用户已在该门店绑定过code"), ERR_10020(10020,"该用户已在该门店绑定过code"),
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