Commit 987a3f82 by 徐高华

Merge remote-tracking branch 'origin/ferture/四月迭代需求' into feature/自建应用验证

Conflicts:
	haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/impl/WelcomeSendServiceImpl.java
parents afd746c7 94207e58
package com.gic.haoban.manage.api.dto;
import java.io.Serializable ;
/**
*
* @ClassName: TabHaobanExternalMemberLog
* @Description: TODO
* @Author 徐高华
* @Date 2023年04月04日 10:19:47
* @Modify
* @CopyRight
*/
public class ExternalMemberLogDTO implements Serializable{
private static final long serialVersionUID = 1709395027793900L;
private Long logId;
private String enterpriseId;
private String unionid;
private String relationKey;
private Integer deleteFlag;
private java.util.Date createTime;
private java.util.Date updateTime;
/**1有效 0无效*/
private Integer statusFlag;
private String memberId ;
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public void setLogId(Long logId){
this.logId = logId;
}
public Long getLogId(){
return logId;
}
public void setEnterpriseId(String enterpriseId){
this.enterpriseId = enterpriseId;
}
public String getEnterpriseId(){
return enterpriseId;
}
public void setUnionid(String unionid){
this.unionid = unionid;
}
public String getUnionid(){
return unionid;
}
public void setRelationKey(String relationKey){
this.relationKey = relationKey;
}
public String getRelationKey(){
return relationKey;
}
public void setDeleteFlag(Integer deleteFlag){
this.deleteFlag = deleteFlag;
}
public Integer getDeleteFlag(){
return deleteFlag;
}
public void setCreateTime(java.util.Date createTime){
this.createTime = createTime;
}
public java.util.Date getCreateTime(){
return createTime;
}
public void setUpdateTime(java.util.Date updateTime){
this.updateTime = updateTime;
}
public java.util.Date getUpdateTime(){
return updateTime;
}
public void setStatusFlag(Integer statusFlag){
this.statusFlag = statusFlag;
}
public Integer getStatusFlag(){
return statusFlag;
}
}
\ No newline at end of file
...@@ -69,6 +69,18 @@ public class GroupChatDTO implements Serializable { ...@@ -69,6 +69,18 @@ public class GroupChatDTO implements Serializable {
private int hmAddStatus = 1 ; private int hmAddStatus = 1 ;
private String chatRemark ; private String chatRemark ;
private int initFlag ; private int initFlag ;
private String clerkRelationExcel;
public String getClerkRelationExcel() {
if (clerkRelationFlag == 0){
clerkRelationExcel="未关联";
}else {
clerkRelationExcel="已关联";
}
return clerkRelationExcel;
}
public void setClerkRelationExcel(String clerkRelationExcel) {
this.clerkRelationExcel = clerkRelationExcel;
}
public int getInitFlag() { public int getInitFlag() {
return initFlag; return initFlag;
......
...@@ -195,10 +195,8 @@ public interface ExternalClerkRelatedApiService { ...@@ -195,10 +195,8 @@ public interface ExternalClerkRelatedApiService {
com.gic.api.base.commons.ServiceResponse<Boolean> isQwFriend(String enterpriseId, String staffId, String memberId) ; com.gic.api.base.commons.ServiceResponse<Boolean> isQwFriend(String enterpriseId, String staffId, String memberId) ;
//无效接口
// com.gic.api.base.commons.ServiceResponse<String> getExternalUseridForWxa(String enterpriseId, String staffId, String memberId) ;
List<String> listMemberAndClerk(List<String> memberIdList , List<String> clerkIdList , String enterpriseId) ; List<String> listMemberAndStaff(List<String> memberIdList , String StaffId , String enterpriseId) ;
/** /**
* 批量查询会员与导购好友关系 * 批量查询会员与导购好友关系
......
...@@ -100,4 +100,9 @@ public interface HaobanTimerApiService { ...@@ -100,4 +100,9 @@ public interface HaobanTimerApiService {
*/ */
public ServiceResponse<Void> ownerDimission(String params); public ServiceResponse<Void> ownerDimission(String params);
/**
* 定时处理欢迎语后的好友
*/
public ServiceResponse<Void> welcomeForMember(String params);
} }
...@@ -146,14 +146,7 @@ public interface MemberUnionidRelatedApiService { ...@@ -146,14 +146,7 @@ public interface MemberUnionidRelatedApiService {
ExternalUserDTO getCorpSelfExternalUseridInfoForMember(String wxEnterpriseId, String wxUserId, String externalUserId,String enterpriseId); ExternalUserDTO getCorpSelfExternalUseridInfoForMember(String wxEnterpriseId, String wxUserId, String externalUserId,String enterpriseId);
/** public String dealMergeForReflsh(ExternalUserDTO externalUserDTO, String wxEnterpriseId , String staffId) ;
* 添加企微好友关联关系表-无需触达
*
* @param dto
* @return
*/
String addExternal(ExternalUserDTO dto);
/** /**
* 获取客户详情-第三方 * 获取客户详情-第三方
* *
...@@ -216,16 +209,13 @@ public interface MemberUnionidRelatedApiService { ...@@ -216,16 +209,13 @@ public interface MemberUnionidRelatedApiService {
*/ */
void addMemberUnionidWechatAccountByClerk(String res); void addMemberUnionidWechatAccountByClerk(String res);
/** /**
* 事件订阅test
* *
* @param param 参数 * @Title: saveExternalMemberLog
* @author mozhu * @Description: 欢迎语业务
* @date 2022-09-09 14:18:34 * @author xugh
* @param memberLog
* @throws
*/ */
//无效接口 void saveExternalMemberLog(ExternalMemberLogDTO memberLog);
// void addDelFriendEventTest(String param);
} }
...@@ -54,10 +54,6 @@ public interface StaffDepartmentRelatedApiService { ...@@ -54,10 +54,6 @@ public interface StaffDepartmentRelatedApiService {
List<StaffDepartmentRelatedDTO> listByStaffIds(List<String> staffIds); List<StaffDepartmentRelatedDTO> listByStaffIds(List<String> staffIds);
void sendClerkBind(String staffId, String clerkCode, String storeId, int auditStatus, String auditReason);
void sendStaffBind(String staffId, String clerkCode, String storeId, int auditStatus, String auditReason);
void sendClerkAdd(String clerkName, String clerkCode, String storeId, int auditStatus, String auditReason); void sendClerkAdd(String clerkName, String clerkCode, String storeId, int auditStatus, String auditReason);
void sendClerkDel(String clerkName, String clerkCode, String storeId, int auditStatus, String auditReason); void sendClerkDel(String clerkName, String clerkCode, String storeId, int auditStatus, String auditReason);
......
package com.gic.haoban.manage.service.dao.mapper;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.gic.haoban.manage.service.entity.TabExternalMemberLog;
/**
*
* @ClassName: TabHaobanExternalMemberLogMapper
* @Description: TODO
* @Author 徐高华
* @Date 2023年04月04日 10:19:47
* @Modify
* @CopyRight
*/
public interface ExternalMemberLogMapper {
public int insert(TabExternalMemberLog log);
public int updateStatus(@Param("enterpriseId") String enterpriseId, @Param("id")long id,
@Param("statusFlag") int statusFlag);
public TabExternalMemberLog selectRelationKey(@Param("enterpriseId") String enterpriseId,
@Param("relationKey") String relationKey);
public List<TabExternalMemberLog> listForTimer(@Param("start")Date start , @Param("end")Date end) ;
}
\ No newline at end of file
...@@ -186,7 +186,7 @@ public interface PreDealLogMapper { ...@@ -186,7 +186,7 @@ public interface PreDealLogMapper {
* @param relationKey * @param relationKey
* @return * @return
*/ */
TabHaobanPreDealLog getByRelationKey(@Param("taskId") String taskId, @Param("dataType") int dataType, @Param("relationKey") String relationKey); List<TabHaobanPreDealLog> getByRelationKey(@Param("taskId") String taskId, @Param("dataType") int dataType, @Param("relationKey") String relationKey);
/** /**
* 校验任务 * 校验任务
......
...@@ -82,21 +82,10 @@ public interface TabHaobanExternalClerkRelatedMapper { ...@@ -82,21 +82,10 @@ public interface TabHaobanExternalClerkRelatedMapper {
@Param("unionId") String unionId); @Param("unionId") String unionId);
/** /**
* 外部联系人的unionid
*
* @param enterpriseId
* @param unionId
* @return
*/
// TabHaobanExternalClerkRelated getClerkExternalByUnionId(@Param("enterpriseId") String enterpriseId,
// @Param("clerkId") String clerkId,
// @Param("unionId") String unionId);
/**
* @param relationKey * @param relationKey
* @return * @return
*/ */
TabHaobanExternalClerkRelated getByRelationKey(@Param("relationKey") String relationKey); TabHaobanExternalClerkRelated getByRelationKey(@Param("relationKey") String relationKey , @Param("filterMember")int filterMember);
/** /**
* 列表数据 根据状态 时间倒序 * 列表数据 根据状态 时间倒序
...@@ -381,6 +370,8 @@ public interface TabHaobanExternalClerkRelatedMapper { ...@@ -381,6 +370,8 @@ public interface TabHaobanExternalClerkRelatedMapper {
void updateClerkInfo(@Param("staffId")String staffId, @Param("oldClerkId")String oldClerkId, @Param("newClerkId")String newClerkId, @Param("storeId")String storeId); void updateClerkInfo(@Param("staffId")String staffId, @Param("oldClerkId")String oldClerkId, @Param("newClerkId")String newClerkId, @Param("storeId")String storeId);
List<String> listByClerkId(@Param("staffId")String staffId, @Param("clerkId")String clerkId) ;
int updateExternalStatus(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("externalUserid")String externalUserid, @Param("status")int status); int updateExternalStatus(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("externalUserid")String externalUserid, @Param("status")int status);
/** /**
...@@ -389,4 +380,6 @@ public interface TabHaobanExternalClerkRelatedMapper { ...@@ -389,4 +380,6 @@ public interface TabHaobanExternalClerkRelatedMapper {
TabHaobanExternalClerkRelated getMemberForExternalId(@Param("wxEnterpriseId") String wxEnterpriseId, TabHaobanExternalClerkRelated getMemberForExternalId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("externalUserId") String externalUserId); @Param("externalUserId") String externalUserId);
List<String> listMemberAndStaff(@Param("memberIdList")List<String> memberIdList, @Param("staffId")String staffId, @Param("enterpriseId")String enterpriseId);
} }
\ No newline at end of file
package com.gic.haoban.manage.service.entity;
import java.io.Serializable ;
/**
*
* @ClassName: TabHaobanExternalMemberLog
* @Description: TODO
* @Author 徐高华
* @Date 2023年04月04日 10:19:47
* @Modify
* @CopyRight
*/
public class TabExternalMemberLog implements Serializable{
private static final long serialVersionUID = 1709395027793900L;
private Long logId;
private String enterpriseId;
private String unionid;
private String relationKey;
private Integer deleteFlag;
private java.util.Date createTime;
private java.util.Date updateTime;
/**1有效 0无效*/
private Integer statusFlag;
private String memberId ;
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public void setLogId(Long logId){
this.logId = logId;
}
public Long getLogId(){
return logId;
}
public void setEnterpriseId(String enterpriseId){
this.enterpriseId = enterpriseId;
}
public String getEnterpriseId(){
return enterpriseId;
}
public void setUnionid(String unionid){
this.unionid = unionid;
}
public String getUnionid(){
return unionid;
}
public void setRelationKey(String relationKey){
this.relationKey = relationKey;
}
public String getRelationKey(){
return relationKey;
}
public void setDeleteFlag(Integer deleteFlag){
this.deleteFlag = deleteFlag;
}
public Integer getDeleteFlag(){
return deleteFlag;
}
public void setCreateTime(java.util.Date createTime){
this.createTime = createTime;
}
public java.util.Date getCreateTime(){
return createTime;
}
public void setUpdateTime(java.util.Date updateTime){
this.updateTime = updateTime;
}
public java.util.Date getUpdateTime(){
return updateTime;
}
public void setStatusFlag(Integer statusFlag){
this.statusFlag = statusFlag;
}
public Integer getStatusFlag(){
return statusFlag;
}
}
\ No newline at end of file
...@@ -9,7 +9,10 @@ public interface ClerkMainStoreRelatedService { ...@@ -9,7 +9,10 @@ public interface ClerkMainStoreRelatedService {
void setMainStore(String staffId, String storeId, String wxEnterpriseId); void setMainStore(String staffId, String storeId, String wxEnterpriseId);
TabHaobanClerkMainStoreRelated selectByWxEnterpriseIdAndStoreId(String staffId, String wxEnterpriseId); // 自动刷新好友列表
void reflushExternal(String wxEnterpriseId ,String staffId) ;
TabHaobanClerkMainStoreRelated selectStaffMainStore(String staffId, String wxEnterpriseId);
/** /**
* 获取主门店 如果没有主门店设置主门店 * 获取主门店 如果没有主门店设置主门店
......
package com.gic.haoban.manage.service.service;
import com.gic.haoban.manage.api.dto.ExternalMemberLogDTO;
import com.gic.haoban.manage.service.entity.TabExternalMemberLog;
public interface ExternalMemberService {
public int updateStatus(String enterpriseId, long id, int statusFlag);
public int insert(ExternalMemberLogDTO log);
public TabExternalMemberLog selectRelationKey(String enterpriseId, String relationKey);
public void welcomeForMember();
}
...@@ -173,7 +173,7 @@ public interface PreDealService { ...@@ -173,7 +173,7 @@ public interface PreDealService {
* @param relationKey * @param relationKey
* @return * @return
*/ */
public TabHaobanPreDealLog getByRelationKey(String taskId, Integer dataType, String relationKey); public List<TabHaobanPreDealLog> getByRelationKey(String taskId, Integer dataType, String relationKey);
/** /**
* 获取任务是否有在同步中 好友 * 获取任务是否有在同步中 好友
......
...@@ -44,7 +44,7 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe ...@@ -44,7 +44,7 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe
private StaffService staffService; private StaffService staffService;
@Override @Override
public TabHaobanClerkMainStoreRelated selectByWxEnterpriseIdAndStoreId(String staffId, String wxEnterpriseId) { public TabHaobanClerkMainStoreRelated selectStaffMainStore(String staffId, String wxEnterpriseId) {
return mapper.selectByWxEnterpriseIdAndStoreId(staffId, wxEnterpriseId, null); return mapper.selectByWxEnterpriseIdAndStoreId(staffId, wxEnterpriseId, null);
} }
...@@ -55,7 +55,6 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe ...@@ -55,7 +55,6 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe
logger.info("区经无需设置主门店:{}", staffId); logger.info("区经无需设置主门店:{}", staffId);
return; return;
} }
String uuId = com.gic.haoban.common.utils.StringUtil.randomUUID(); String uuId = com.gic.haoban.common.utils.StringUtil.randomUUID();
Date now = new Date(); Date now = new Date();
TabHaobanClerkMainStoreRelated t = new TabHaobanClerkMainStoreRelated(); TabHaobanClerkMainStoreRelated t = new TabHaobanClerkMainStoreRelated();
...@@ -68,9 +67,10 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe ...@@ -68,9 +67,10 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe
t.setFreshFriendFlag(1); t.setFreshFriendFlag(1);
t.setClerkMainStoreRelatedId(uuId); t.setClerkMainStoreRelatedId(uuId);
mapper.insert(t); mapper.insert(t);
}
logger.info("切换主门店-刷新企业微信好友:{},{}", staffId, storeId); @Override
//主门店切换需要刷新企业微信好友 public void reflushExternal(String wxEnterpriseId ,String staffId) {
TabHaobanStaff staff = staffService.selectById(staffId); TabHaobanStaff staff = staffService.selectById(staffId);
if (staff == null) { if (staff == null) {
logger.info("员工不存在:{}", staffId); logger.info("员工不存在:{}", staffId);
...@@ -79,21 +79,16 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe ...@@ -79,21 +79,16 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe
String taskName = "自动刷新企业微信好友(" + staff.getStaffName() + ")"; String taskName = "自动刷新企业微信好友(" + staff.getStaffName() + ")";
String taskId = dealSyncOperationApiService.createWxFriendTaskSingle(wxEnterpriseId, taskName, staffId, staff.getStaffName(), SyncTaskTypeEnum.FRIEND_SINGLE.getType()); String taskId = dealSyncOperationApiService.createWxFriendTaskSingle(wxEnterpriseId, taskName, staffId, staff.getStaffName(), SyncTaskTypeEnum.FRIEND_SINGLE.getType());
if (StringUtils.isBlank(taskId)) { if (StringUtils.isBlank(taskId)) {
logger.info("刷新好友失败或正在刷新:{},{}", staffId, storeId); logger.info("刷新好友失败或正在刷新:{},{}", staffId);
return; return;
} }
dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staffId, staffId, wxEnterpriseId); dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staffId, staffId, wxEnterpriseId);
logger.info("任务id:{}", taskId); logger.info("开始自动刷新好友任务id={},staffId={}", taskId,staffId);
} }
@Override @Override
public TabHaobanClerkMainStoreRelated getMainStoreByStaffId(String staffId, String wxEnterpriseId) { public TabHaobanClerkMainStoreRelated getMainStoreByStaffId(String staffId, String wxEnterpriseId) {
TabHaobanClerkMainStoreRelated mainStoreRelated = mapper.selectByWxEnterpriseIdAndStoreId(staffId, wxEnterpriseId, null); return this.getMainStoreByStaffId(staffId, wxEnterpriseId,null);
if (null != mainStoreRelated) {
return mainStoreRelated;
}
return setStaffMainStore(staffId, wxEnterpriseId, null);
} }
@Override @Override
......
package com.gic.haoban.manage.service.service.impl;
import java.util.Date;
import java.util.List;
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.gic.commons.util.DateUtil;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.manage.api.dto.ExternalMemberLogDTO;
import com.gic.haoban.manage.service.dao.mapper.ExternalMemberLogMapper;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper;
import com.gic.haoban.manage.service.entity.TabExternalMemberLog;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.service.ExternalMemberService;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberOpenCardBusinessService;
import com.gic.member.api.service.MemberService;
@Service
public class ExternalMemberServiceImpl implements ExternalMemberService {
private static final Logger logger = LoggerFactory.getLogger(ExternalMemberService.class);
@Autowired
private ExternalMemberLogMapper externalMemberLogMapper;
@Autowired
private MemberOpenCardBusinessService memberOpenCardBusinessService ;
@Autowired
private TabHaobanExternalClerkRelatedMapper tabHaobanExternalClerkRelatedMapper ;
@Autowired
private MemberService memberService ;
@Override
public int insert(ExternalMemberLogDTO log) {
TabExternalMemberLog entity = EntityUtil.changeEntity(TabExternalMemberLog.class, log);
TabExternalMemberLog old = this.externalMemberLogMapper.selectRelationKey(log.getEnterpriseId(),
log.getRelationKey());
if (null != old) {
return 0;
}
entity.setLogId(UniqueIdUtils.uniqueLong());
this.externalMemberLogMapper.insert(entity);
return 0;
}
public int updateStatus(String enterpriseId, long id, int statusFlag) {
return this.externalMemberLogMapper.updateStatus(enterpriseId, id, statusFlag);
}
@Override
public TabExternalMemberLog selectRelationKey(String enterpriseId, String relationKey) {
TabExternalMemberLog log = this.externalMemberLogMapper.selectRelationKey(enterpriseId, relationKey);
return log;
}
@Override
public void welcomeForMember() {
logger.info("欢迎语处理会员定时");
Date end = DateUtil.getStartTimeOfDay() ;
Date start = DateUtil.addNumForDay(end, -1) ;
List<TabExternalMemberLog> list = this.externalMemberLogMapper.listForTimer(start, end) ;
for(TabExternalMemberLog log : list) {
String relationKey = log.getRelationKey() ;
TabHaobanExternalClerkRelated related = tabHaobanExternalClerkRelatedMapper.getByRelationKey(relationKey,0);
if (related == null) {
logger.info("好友记录不存在relationKey={}",relationKey);
continue ;
}
String enterpriseId = log.getEnterpriseId() ;
if(StringUtils.isNotEmpty(related.getMemberId())) {
this.externalMemberLogMapper.updateStatus(enterpriseId, log.getLogId(), 2) ;
continue ;
}
String unionid = log.getUnionid() ;
MemberDTO member = this.memberService.getMemberByUnionid(unionid, enterpriseId) ;
if(null == member) {
logger.info("会员记录不存在relationKey={},{}",relationKey,unionid);
continue ;
}
String memberId =member.getMemberId() ;
this.memberOpenCardBusinessService.memberClerkProcessByQywxFriend(enterpriseId, memberId, unionid, relationKey);
this.externalMemberLogMapper.updateStatus(enterpriseId, log.getLogId(), 2) ;
}
}
}
...@@ -164,7 +164,7 @@ public class PreDealServiceImpl implements PreDealService { ...@@ -164,7 +164,7 @@ public class PreDealServiceImpl implements PreDealService {
} }
@Override @Override
public TabHaobanPreDealLog getByRelationKey(String taskId, Integer dataType, String relationKey) { public List<TabHaobanPreDealLog> getByRelationKey(String taskId, Integer dataType, String relationKey) {
return preDealLogMapper.getByRelationKey(taskId, dataType, relationKey); return preDealLogMapper.getByRelationKey(taskId, dataType, relationKey);
} }
......
package com.gic.haoban.manage.service.service.impl; package com.gic.haoban.manage.service.service.impl;
import com.alibaba.fastjson.JSONObject; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
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.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
import com.gic.clerk.api.dto.ClerkDTO; import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService; import com.gic.clerk.api.service.ClerkService;
import com.gic.clerk.api.service.RightService; import com.gic.clerk.api.service.RightService;
import com.gic.commons.util.EntityUtil; import com.gic.commons.util.EntityUtil;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.base.api.common.BasePageInfo; import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.common.utils.PageUtil; import com.gic.haoban.common.utils.PageUtil;
import com.gic.haoban.common.utils.StringUtil; import com.gic.haoban.common.utils.StringUtil;
...@@ -16,29 +33,27 @@ import com.gic.haoban.manage.api.enums.BindTypeEnum; ...@@ -16,29 +33,27 @@ import com.gic.haoban.manage.api.enums.BindTypeEnum;
import com.gic.haoban.manage.api.enums.ChannelCodeEnum; import com.gic.haoban.manage.api.enums.ChannelCodeEnum;
import com.gic.haoban.manage.api.service.hm.HmClerkRelationApiService; import com.gic.haoban.manage.api.service.hm.HmClerkRelationApiService;
import com.gic.haoban.manage.api.service.hm.HmQrcodeApiService; import com.gic.haoban.manage.api.service.hm.HmQrcodeApiService;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanMemberClerkChatConfigMapper; import com.gic.haoban.manage.service.dao.mapper.TabHaobanMemberClerkChatConfigMapper;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanStaffClerkRelationMapper; import com.gic.haoban.manage.service.dao.mapper.TabHaobanStaffClerkRelationMapper;
import com.gic.haoban.manage.service.entity.MemberClerkChatConfig; import com.gic.haoban.manage.service.entity.MemberClerkChatConfig;
import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated;
import com.gic.haoban.manage.service.entity.TabHaobanStaff; import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.TabHaobanStaffClerkRelation; import com.gic.haoban.manage.service.entity.TabHaobanStaffClerkRelation;
import com.gic.haoban.manage.service.service.*; import com.gic.haoban.manage.service.service.ClerkMainStoreRelatedService;
import com.gic.haoban.manage.service.service.ExternalClerkRelatedService;
import com.gic.haoban.manage.service.service.StaffClerkBindLogService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.StaffService;
import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.member.api.service.MemberApiService; import com.gic.member.api.service.MemberApiService;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
@Service @Service
public class StaffClerkRelationServiceImpl implements StaffClerkRelationService { public class StaffClerkRelationServiceImpl implements StaffClerkRelationService {
private static final Logger logger = LoggerFactory.getLogger(StaffClerkRelationServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(StaffClerkRelationService.class);
@Autowired @Autowired
private TabHaobanStaffClerkRelationMapper mapper; private TabHaobanStaffClerkRelationMapper mapper;
...@@ -51,10 +66,12 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService ...@@ -51,10 +66,12 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
@Autowired @Autowired
private ClerkMainStoreRelatedService clerkMainStoreRelatedService; private ClerkMainStoreRelatedService clerkMainStoreRelatedService;
@Autowired
private TabHaobanExternalClerkRelatedMapper externalClerkRelatedMapper;
@Autowired @Autowired
private TabHaobanMemberClerkChatConfigMapper memberClerkChatConfigMapper; private TabHaobanMemberClerkChatConfigMapper memberClerkChatConfigMapper;
@Autowired
private StoreService storeService ;
@Autowired @Autowired
private HmQrcodeApiService hmQrcodeApiService; private HmQrcodeApiService hmQrcodeApiService;
@Autowired @Autowired
...@@ -80,32 +97,99 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService ...@@ -80,32 +97,99 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
return this.filterDelClerkList(mapper.listBindCodeByStaffId(enterpriseIdList, staffId)); return this.filterDelClerkList(mapper.listBindCodeByStaffId(enterpriseIdList, staffId));
} }
/*
* 导购进行解绑/换导购,更新好友和导购关联关系
*/
@Override @Override
public boolean delBind(String oldClerkId, String optStaffId, int channelCode, String newClerkId, String wxEnterpriseId) { public boolean delBind(String oldClerkId, String optStaffId, int channelCode, String newClerkId, String wxEnterpriseId) {
boolean changeClerkFlag = StringUtils.isNotEmpty(newClerkId) ;
logger.info("导购解绑/换导购={},oldClerkId={},optStaffId={}",changeClerkFlag,oldClerkId,optStaffId);
if(StringUtils.isNotEmpty(optStaffId) && "-1".equals(optStaffId)) {
TabHaobanStaff staff = this.staffService.selectById(optStaffId) ; TabHaobanStaff staff = this.staffService.selectById(optStaffId) ;
if(null != staff) { if(null != staff) {
wxEnterpriseId = staff.getWxEnterpriseId() ; wxEnterpriseId = staff.getWxEnterpriseId() ;
} }
}
// wxEnterpriseId非必传
StaffClerkRelationDTO clerkRelation = mapper.getOneByClerkId(oldClerkId, wxEnterpriseId); StaffClerkRelationDTO clerkRelation = mapper.getOneByClerkId(oldClerkId, wxEnterpriseId);
if (null == clerkRelation) { if (null == clerkRelation) {
logger.info("老的绑定关联不存在,clerkId={}", oldClerkId); logger.info("老的绑定关联不存在,oldClerkId={}", oldClerkId);
return true; return true;
} }
int i = mapper.changeStatusByClerkId(oldClerkId, 0); wxEnterpriseId = clerkRelation.getWxEnterpriseId() ;
String enterpriseId = clerkRelation.getEnterpriseId(); String enterpriseId = clerkRelation.getEnterpriseId();
logger.info("当前删除换绑的商户={},{}",enterpriseId,wxEnterpriseId);
String staffId = clerkRelation.getStaffId() ;
String storeId = clerkRelation.getStoreId() ;
boolean needFlush = false ;
if(StringUtils.isEmpty(newClerkId)) {
// 成员关联的门店
List<StaffClerkRelationDTO> relationList = this.listByStaffId(wxEnterpriseId, staffId) ;
Set<String> set = relationList.stream().map(o->o.getEnterpriseId()).collect(Collectors.toSet()) ;
// 否关联的多个商户
boolean multipleFlag = set.size() > 1 ;
List<String> storeIdList = relationList.stream().filter(o->!storeId.equals(o.getStoreId()) && o.getEnterpriseId().equals(enterpriseId)).map(o->o.getStoreId()).collect(Collectors.toList()) ;
logger.info("成员{},关联门店数={},同商户下的门店={}",staffId,relationList.size(),JSON.toJSON(storeIdList));
if(CollectionUtils.isNotEmpty(storeIdList)) {
if(multipleFlag) {
needFlush = true ;
TabHaobanClerkMainStoreRelated currentMainStore = this.clerkMainStoreRelatedService.selectStaffMainStore(staffId, wxEnterpriseId);
String mainStoreEnterpriseId = null ;
if(null == currentMainStore) {
mainStoreEnterpriseId = enterpriseId ;
}else {
String mainStoreId = currentMainStore.getStoreId() ;
StoreDTO store = this.storeService.getStore(mainStoreId) ;
mainStoreEnterpriseId = store.getEnterpriseId() ;
}
logger.info("当前主门店商户和处理商户是否一致{},{}",mainStoreEnterpriseId,enterpriseId);
if(mainStoreEnterpriseId.equals(enterpriseId)) {
// 删除关联关系
this.mapper.changeStatusByClerkId(oldClerkId, 0);
TabHaobanClerkMainStoreRelated mainStoreRelation = this.clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, wxEnterpriseId, storeIdList) ;
String newStoreId = mainStoreRelation.getStoreId() ;
StaffClerkRelationDTO mainClerk = this.getOneBindByStoreId(staffId, newStoreId) ;
newClerkId = mainClerk.getClerkId() ;
logger.info("查询到成员的主门店导购={},{}",staffId,newClerkId);
needFlush = false ;
}
}else {
// 删除关联关系
this.mapper.changeStatusByClerkId(oldClerkId, 0);
TabHaobanClerkMainStoreRelated mainStore = this.clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, wxEnterpriseId, storeIdList) ;
String newStoreId = mainStore.getStoreId() ;
StaffClerkRelationDTO mainClerk = this.getOneBindByStoreId(staffId, newStoreId) ;
newClerkId = mainClerk.getClerkId() ;
logger.info("查询到成员的主门店导购={},{}",staffId,newClerkId);
}
}
}
if(StringUtils.isNotBlank(newClerkId)) { if(StringUtils.isNotBlank(newClerkId)) {
this.externalClerkRelatedService.updateClerkInfo(clerkRelation.getStaffId() , oldClerkId , newClerkId) ; List<String> memberIdList = this.externalClerkRelatedMapper.listByClerkId(staffId, oldClerkId) ;
this.externalClerkRelatedService.updateClerkInfo(staffId , oldClerkId , newClerkId) ;
if(CollectionUtils.isNotEmpty(memberIdList)) {
ClerkDTO clerk = this.clerkService.getclerkById(newClerkId);
String newStoreId = clerk.getStoreId() ;
for(String memberId : memberIdList) {
logger.info("会员");
}
}
}else { }else {
List<String> memberIds = externalClerkRelatedService.getByStoreIdAndStaffId(clerkRelation.getStoreId(), clerkRelation.getStaffId()); logger.info("成员删除所有关联导购={}",staffId);
List<String> memberIds = externalClerkRelatedService.getByStoreIdAndStaffId(storeId, staffId);
//删除 并设置主门店 //删除 并设置主门店
clerkMainStoreRelatedService.delMainStore(clerkRelation.getStaffId(), clerkRelation.getStoreId(), clerkRelation.getWxEnterpriseId()); clerkMainStoreRelatedService.delMainStore(staffId, storeId, wxEnterpriseId);
//推入日志 //推入日志
delMemberQywxFlag(enterpriseId, memberIds); delMemberQywxFlag(enterpriseId, memberIds);
} }
staffClerkBindLogService.pushToMq(clerkRelation.getStaffId(), optStaffId, BindTypeEnum.UNBIND.getVal(), channelCode, clerkRelation.getStaffClerkRelationId()); if(needFlush) {
logger.info("刷新好友,staffId={}",staffId);
this.clerkMainStoreRelatedService.reflushExternal(wxEnterpriseId, staffId);
}
this.staffClerkBindLogService.pushToMq(staffId, optStaffId, BindTypeEnum.UNBIND.getVal(), channelCode, clerkRelation.getStaffClerkRelationId());
//废弃活码 //废弃活码
hmClerkRelationApiService.delByClerkId(oldClerkId, enterpriseId, clerkRelation.getWxEnterpriseId(), channelCode, newClerkId); this.hmClerkRelationApiService.delByClerkId(oldClerkId, enterpriseId, wxEnterpriseId, channelCode, null);
return i > 0; return true;
} }
......
...@@ -23,9 +23,10 @@ public class ClerkMainStoreRelatedApiServiceImpl implements ClerkMainStoreRelate ...@@ -23,9 +23,10 @@ public class ClerkMainStoreRelatedApiServiceImpl implements ClerkMainStoreRelate
@Override @Override
public void setMainStore(String staffId, String storeId, String wxEnterpriseId) { public void setMainStore(String staffId, String storeId, String wxEnterpriseId) {
TabHaobanClerkMainStoreRelated related = clerkMainStoreRelatedService.selectByWxEnterpriseIdAndStoreId(staffId, wxEnterpriseId); TabHaobanClerkMainStoreRelated related = clerkMainStoreRelatedService.selectStaffMainStore(staffId, wxEnterpriseId);
if (related == null) { if (related == null) {
clerkMainStoreRelatedService.setMainStore(staffId, storeId, wxEnterpriseId); this.clerkMainStoreRelatedService.setMainStore(staffId, storeId, wxEnterpriseId);
this.clerkMainStoreRelatedService.reflushExternal(wxEnterpriseId, staffId);
} else if (null != related && (!related.getStoreId().equals(storeId))) { } else if (null != related && (!related.getStoreId().equals(storeId))) {
related.setStatusFlag(0); related.setStatusFlag(0);
related.setUpdateTime(new Date()); related.setUpdateTime(new Date());
......
...@@ -132,7 +132,7 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA ...@@ -132,7 +132,7 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
@Override @Override
public ExternalClerkRelatedDTO getExternalClerkByRelationKeyAndPre(String relationKey) { public ExternalClerkRelatedDTO getExternalClerkByRelationKeyAndPre(String relationKey) {
TabHaobanExternalClerkRelated related = tabHaobanExternalClerkRelatedMapper.getByRelationKey(relationKey); TabHaobanExternalClerkRelated related = tabHaobanExternalClerkRelatedMapper.getByRelationKey(relationKey,0);
return EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, related); return EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, related);
} }
...@@ -166,7 +166,7 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA ...@@ -166,7 +166,7 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
@Override @Override
public ServiceResponse<ExternalClerkRelatedDTO> bindMemberIdExternalByRelationKey(String relationKey, String enterpriseId, String memberId, String unionid) { public ServiceResponse<ExternalClerkRelatedDTO> bindMemberIdExternalByRelationKey(String relationKey, String enterpriseId, String memberId, String unionid) {
ServiceResponse<ExternalClerkRelatedDTO> resp = new ServiceResponse<>(); ServiceResponse<ExternalClerkRelatedDTO> resp = new ServiceResponse<>();
TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByRelationKey(relationKey); TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByRelationKey(relationKey,1);
if (null == externalClerkRelated) { if (null == externalClerkRelated) {
log.error("relationKey对应的关联关系不存在或删除:relationKey:{},memberId:{},unionid:{}", relationKey, memberId, unionid); log.error("relationKey对应的关联关系不存在或删除:relationKey:{},memberId:{},unionid:{}", relationKey, memberId, unionid);
resp.setCode(0); resp.setCode(0);
...@@ -468,8 +468,8 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA ...@@ -468,8 +468,8 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
// } // }
@Override @Override
public List<String> listMemberAndClerk(List<String> memberIdList, List<String> clerkIdList, String enterpriseId) { public List<String> listMemberAndStaff(List<String> memberIdList, String staffId, String enterpriseId) {
List<String> list = tabHaobanExternalClerkRelatedMapper.listMemberAndClerk(memberIdList, clerkIdList, enterpriseId); List<String> list = tabHaobanExternalClerkRelatedMapper.listMemberAndStaff(memberIdList, staffId, enterpriseId);
return list; return list;
} }
......
...@@ -6,6 +6,7 @@ import org.springframework.stereotype.Service; ...@@ -6,6 +6,7 @@ import org.springframework.stereotype.Service;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.service.HaobanTimerApiService; import com.gic.haoban.manage.api.service.HaobanTimerApiService;
import com.gic.haoban.manage.service.service.ExternalClerkRelatedService; import com.gic.haoban.manage.service.service.ExternalClerkRelatedService;
import com.gic.haoban.manage.service.service.ExternalMemberService;
import com.gic.haoban.manage.service.service.StaffDepartmentRelatedService; import com.gic.haoban.manage.service.service.StaffDepartmentRelatedService;
import com.gic.haoban.manage.service.service.chat.GroupChatService; import com.gic.haoban.manage.service.service.chat.GroupChatService;
import com.gic.haoban.manage.service.service.hm.HmQrcodeTempService; import com.gic.haoban.manage.service.service.hm.HmQrcodeTempService;
...@@ -21,6 +22,9 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService { ...@@ -21,6 +22,9 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
private StaffDepartmentRelatedService staffDepartmentRelatedService; private StaffDepartmentRelatedService staffDepartmentRelatedService;
@Autowired @Autowired
private GroupChatService groupChatService; private GroupChatService groupChatService;
@Autowired
private ExternalMemberService externalMemberService ;
@Override @Override
public ServiceResponse<Void> deleteTempWxHm(String params) { public ServiceResponse<Void> deleteTempWxHm(String params) {
...@@ -69,4 +73,10 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService { ...@@ -69,4 +73,10 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
this.groupChatService.ownerDimission(); this.groupChatService.ownerDimission();
return ServiceResponse.success(); return ServiceResponse.success();
} }
@Override
public ServiceResponse<Void> welcomeForMember(String params) {
this.externalMemberService.welcomeForMember() ;
return ServiceResponse.success();
}
} }
...@@ -8,10 +8,8 @@ import java.util.HashMap; ...@@ -8,10 +8,8 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
...@@ -34,10 +32,7 @@ import com.gic.clerk.api.dto.ClerkDTO; ...@@ -34,10 +32,7 @@ import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService; import com.gic.clerk.api.service.ClerkService;
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.QRcodeDTO;
import com.gic.enterprise.api.dto.StoreDTO; import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.ImageService;
import com.gic.enterprise.api.service.StoreService; import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.app.customer.dto.ChildDTO; import com.gic.haoban.app.customer.dto.ChildDTO;
import com.gic.haoban.app.customer.dto.CustomerDTO; import com.gic.haoban.app.customer.dto.CustomerDTO;
...@@ -49,65 +44,59 @@ import com.gic.haoban.app.customer.service.api.service.CustomerApiService; ...@@ -49,65 +44,59 @@ import com.gic.haoban.app.customer.service.api.service.CustomerApiService;
import com.gic.haoban.base.api.common.ServiceResponse; import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.common.utils.DingUtils; import com.gic.haoban.common.utils.DingUtils;
import com.gic.haoban.manage.api.constants.Manage3Constants; import com.gic.haoban.manage.api.constants.Manage3Constants;
import com.gic.haoban.manage.api.dto.ClerkMainStoreRelatedDTO;
import com.gic.haoban.manage.api.dto.ContentMaterialDTO; import com.gic.haoban.manage.api.dto.ContentMaterialDTO;
import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO; import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO;
import com.gic.haoban.manage.api.dto.ExternalMemberLogDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO; import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.FriendStoreInfoDTO; import com.gic.haoban.manage.api.dto.FriendStoreInfoDTO;
import com.gic.haoban.manage.api.dto.MemberStoreDTO; import com.gic.haoban.manage.api.dto.MemberStoreDTO;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO; import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
import com.gic.haoban.manage.api.dto.MemberUnionidWechatAccountQDTO; import com.gic.haoban.manage.api.dto.MemberUnionidWechatAccountQDTO;
import com.gic.haoban.manage.api.dto.QwFrientNoticeDTO; import com.gic.haoban.manage.api.dto.QwFrientNoticeDTO;
import com.gic.haoban.manage.api.dto.QywxErrorLogDTO;
import com.gic.haoban.manage.api.dto.SecretSettingDTO; import com.gic.haoban.manage.api.dto.SecretSettingDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO; import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO; import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO;
import com.gic.haoban.manage.api.dto.hm.HmClerkRelationDTO;
import com.gic.haoban.manage.api.dto.hm.HmQrcodeDTO; import com.gic.haoban.manage.api.dto.hm.HmQrcodeDTO;
import com.gic.haoban.manage.api.dto.qdto.hm.WxUserAddLogQDTO; import com.gic.haoban.manage.api.dto.qdto.hm.WxUserAddLogQDTO;
import com.gic.haoban.manage.api.enums.SecretTypeEnum; import com.gic.haoban.manage.api.enums.SecretTypeEnum;
import com.gic.haoban.manage.api.enums.WelcomeMediaTypeEnum;
import com.gic.haoban.manage.api.enums.hm.HmWelcomeReferType;
import com.gic.haoban.manage.api.service.CheckQywxSettingApiService; import com.gic.haoban.manage.api.service.CheckQywxSettingApiService;
import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.ExternalClerkRelatedApiService; import com.gic.haoban.manage.api.service.ExternalClerkRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService; import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.hm.HmClerkRelationApiService;
import com.gic.haoban.manage.api.service.hm.HmQrcodeApiService; import com.gic.haoban.manage.api.service.hm.HmQrcodeApiService;
import com.gic.haoban.manage.service.config.Config; import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.dao.mapper.StaffMapper; import com.gic.haoban.manage.service.dao.mapper.StaffMapper;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper; import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper;
import com.gic.haoban.manage.service.dao.mapper.WxApplicationMapper; import com.gic.haoban.manage.service.dao.mapper.WxApplicationMapper;
import com.gic.haoban.manage.service.entity.TabExternalMemberLog;
import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated; import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated; import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.entity.TabHaobanStaff; import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.TabHaobanWxApplication; import com.gic.haoban.manage.service.entity.TabHaobanWxApplication;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise; import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated; import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated;
import com.gic.haoban.manage.service.entity.TabMiniprogramSetting;
import com.gic.haoban.manage.service.exception.WxApiLimitException; import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.pojo.DealQywxExternalUserPojo; import com.gic.haoban.manage.service.pojo.DealQywxExternalUserPojo;
import com.gic.haoban.manage.service.pojo.ExternalUserPojo; import com.gic.haoban.manage.service.pojo.ExternalUserPojo;
import com.gic.haoban.manage.service.pojo.QywxTagSyncInfoPojo; import com.gic.haoban.manage.service.pojo.QywxTagSyncInfoPojo;
import com.gic.haoban.manage.service.pojo.bo.hm.HmLinkBO; import com.gic.haoban.manage.service.pojo.bo.hm.HmLinkBO;
import com.gic.haoban.manage.service.pojo.bo.hm.KeyDataLinkBO; import com.gic.haoban.manage.service.pojo.bo.hm.KeyDataLinkBO;
import com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeDetailBO;
import com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeMediaBO;
import com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeReferBO;
import com.gic.haoban.manage.service.service.ClerkMainStoreRelatedService; import com.gic.haoban.manage.service.service.ClerkMainStoreRelatedService;
import com.gic.haoban.manage.service.service.ExternalClerkRelatedService; import com.gic.haoban.manage.service.service.ExternalClerkRelatedService;
import com.gic.haoban.manage.service.service.ExternalMemberService;
import com.gic.haoban.manage.service.service.KeyDataService; import com.gic.haoban.manage.service.service.KeyDataService;
import com.gic.haoban.manage.service.service.MemberUnionRelatedService; import com.gic.haoban.manage.service.service.MemberUnionRelatedService;
import com.gic.haoban.manage.service.service.MiniprogramSettingService;
import com.gic.haoban.manage.service.service.QywxSendService; import com.gic.haoban.manage.service.service.QywxSendService;
import com.gic.haoban.manage.service.service.SecretSettingService; import com.gic.haoban.manage.service.service.SecretSettingService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService; import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.StaffService; import com.gic.haoban.manage.service.service.StaffService;
import com.gic.haoban.manage.service.service.WelcomeService; import com.gic.haoban.manage.service.service.WelcomeSendService;
import com.gic.haoban.manage.service.service.WxEnterpriseRelatedService; import com.gic.haoban.manage.service.service.WxEnterpriseRelatedService;
import com.gic.haoban.manage.service.service.WxEnterpriseService; import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.haoban.manage.service.service.chat.GroupChatService; import com.gic.haoban.manage.service.service.chat.GroupChatService;
import com.gic.haoban.manage.service.service.hm.HmLinkService; import com.gic.haoban.manage.service.service.hm.HmLinkService;
import com.gic.haoban.manage.service.service.hm.WxUserAddLogService; import com.gic.haoban.manage.service.service.hm.WxUserAddLogService;
import com.gic.haoban.manage.service.util.CommonUtil;
import com.gic.haoban.manage.service.util.EmojiFilterUtil; import com.gic.haoban.manage.service.util.EmojiFilterUtil;
import com.gic.member.api.dto.MemberDTO; import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.dto.MemberSimpleDetailDTO; import com.gic.member.api.dto.MemberSimpleDetailDTO;
...@@ -124,14 +113,6 @@ import com.gic.mq.sdk.GicMQClient; ...@@ -124,14 +113,6 @@ import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
import com.gic.wechat.api.dto.qywx.QywxNewExternalUseridDTO; import com.gic.wechat.api.dto.qywx.QywxNewExternalUseridDTO;
import com.gic.wechat.api.dto.qywx.UnionidToExternalUseridDTO; import com.gic.wechat.api.dto.qywx.UnionidToExternalUseridDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxExternalMessageBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxFileExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxImageExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxLinkExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxMiniprogramExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxVideoExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxWelcomeMsgDTO;
import com.gic.wechat.api.enums.QywxMediaTypeEnum;
import com.gic.wechat.api.service.qywx.QywxSuiteApiService; import com.gic.wechat.api.service.qywx.QywxSuiteApiService;
import com.gic.wechat.api.service.qywx.QywxUserApiService; import com.gic.wechat.api.service.qywx.QywxUserApiService;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
...@@ -140,7 +121,6 @@ import cn.hutool.core.collection.CollectionUtil; ...@@ -140,7 +121,6 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SecureUtil;
@Service @Service
public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedApiService { public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedApiService {
...@@ -178,10 +158,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -178,10 +158,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
@Autowired @Autowired
private ExternalClerkRelatedService externalClerkRelatedService; private ExternalClerkRelatedService externalClerkRelatedService;
@Autowired @Autowired
private MiniprogramSettingService miniprogramSettingService;
@Autowired
private WelcomeService welcomeService;
@Autowired
private CheckQywxSettingApiService checkQywxSettingApiService; private CheckQywxSettingApiService checkQywxSettingApiService;
@Autowired @Autowired
private CustomerApiService customerApiService; private CustomerApiService customerApiService;
...@@ -196,8 +172,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -196,8 +172,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
@Autowired @Autowired
private MemberStoreService memberStoreService; private MemberStoreService memberStoreService;
@Autowired @Autowired
private ImageService imageService;
@Autowired
private HmQrcodeApiService hmQrcodeApiService; private HmQrcodeApiService hmQrcodeApiService;
@Autowired @Autowired
private WxUserAddLogService wxUserAddLogService; private WxUserAddLogService wxUserAddLogService;
...@@ -210,8 +184,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -210,8 +184,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
@Autowired @Autowired
private MemberService memberService; private MemberService memberService;
@Autowired @Autowired
private HmClerkRelationApiService hmClerkRelationApiService;
@Autowired
private StaffMapper staffMapper; private StaffMapper staffMapper;
@Autowired @Autowired
private MemberEntranceApiService memberEntranceApiService; private MemberEntranceApiService memberEntranceApiService;
...@@ -219,9 +191,14 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -219,9 +191,14 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
private QywxSendService qywxSendService ; private QywxSendService qywxSendService ;
@Autowired @Autowired
private GroupChatService groupChatService ; private GroupChatService groupChatService ;
@Autowired
private WelcomeSendService welcomeSendService ;
@Autowired
private ExternalMemberService externalMemberService ;
@Autowired
private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService ;
private static GicMQClient clientInstance = GICMQClientUtil.getClientInstance(); GicMQClient instance = GICMQClientUtil.getClientInstance();
@Override @Override
public void dealQywxExternalUser(String params) { public void dealQywxExternalUser(String params) {
...@@ -386,8 +363,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -386,8 +363,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
DealQywxExternalUserPojo dealQywxExternalUserPojo = new DealQywxExternalUserPojo(); DealQywxExternalUserPojo dealQywxExternalUserPojo = new DealQywxExternalUserPojo();
dealQywxExternalUserPojo.setType(DealQywxExternalUserPojo.DealType.add.getType()); dealQywxExternalUserPojo.setType(DealQywxExternalUserPojo.DealType.add.getType());
dealQywxExternalUserPojo.setData(dto); dealQywxExternalUserPojo.setData(dto);
this.sendWelcome(dto);
GicMQClient instance = GICMQClientUtil.getClientInstance();
String mqName = "dealQywxExternalUserMq" ; String mqName = "dealQywxExternalUserMq" ;
if(this.mqCheck(dto)) { if(this.mqCheck(dto)) {
mqName = "dealQywxExternalUserMq2"; mqName = "dealQywxExternalUserMq2";
...@@ -399,6 +375,22 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -399,6 +375,22 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
return null; return null;
} }
private void sendWelcome(QwFrientNoticeDTO dto) {
String suiteid = dto.getSuiteid();
if (SELF_APP.equals(suiteid)) {
return ;
}
if(StringUtils.isEmpty(dto.getWelcomeCode())) {
return ;
}
try {
instance.sendMessage("qywxWelcomeSendMQ", JSONObject.toJSONString(dto));
} catch (Exception e) {
log.info("异步处理异常:{}", e);
}
}
// 加好友量大的迁移到mq2 // 加好友量大的迁移到mq2
private boolean mqCheck(QwFrientNoticeDTO dto) { private boolean mqCheck(QwFrientNoticeDTO dto) {
int maxCount = 800 ; int maxCount = 800 ;
...@@ -425,7 +417,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -425,7 +417,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
if("wp59NLDQAAtTbif_SxAixUQVqMld4vug".equals(corpid)) { if("wp59NLDQAAtTbif_SxAixUQVqMld4vug".equals(corpid)) {
maxCount = 2 ; maxCount = 2 ;
} }
log.info("dealQywxExternalUserMq2={},{},{}",wxEnterpriseId,times,maxCount); log.info("dealQywxExternalUserMq2={},{},{}",times,maxCount,wxEnterpriseId);
if(times>maxCount) { if(times>maxCount) {
if(!needToMq2(wxEnterpriseId)) { if(!needToMq2(wxEnterpriseId)) {
log.info("加好友计数发送告警,id={}",wxEnterpriseId); log.info("加好友计数发送告警,id={}",wxEnterpriseId);
...@@ -539,7 +531,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -539,7 +531,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return; return;
} }
memberLabelId = this.getMemberLabel(state, hmDTO.getMemberLabelId(), wxEnterpriseId, linkId) ; memberLabelId = this.getMemberLabel(state, hmDTO.getMemberLabelId(), wxEnterpriseId, linkId) ;
hyClerkId = this.getHmClerk(hmDTO,wxEnterpriseId,staffId) ; hyClerkId = this.welcomeSendService.getHmClerk(hmDTO,wxEnterpriseId,staffId) ;
if(StringUtils.isBlank(hyClerkId)) { if(StringUtils.isBlank(hyClerkId)) {
log.info("【新增外部联系人】hm未获取到导购,staffId={}",staffId); log.info("【新增外部联系人】hm未获取到导购,staffId={}",staffId);
return ; return ;
...@@ -550,7 +542,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -550,7 +542,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
TabHaobanClerkMainStoreRelated mainStoreRelated = clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, wxEnterpriseId); TabHaobanClerkMainStoreRelated mainStoreRelated = clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, wxEnterpriseId);
if (mainStoreRelated == null) { if (mainStoreRelated == null) {
log.info("【新增外部联系人】主门店为空:staffId={}", staffId); log.info("【新增外部联系人】主门店为空:staffId={}", staffId);
this.sendWelcome(dto, qwDTO, null, staffId, null , null); // this.sendWelcome(dto, qwDTO, null, staffId, null , null);
return; return;
} }
staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStoreRelated.getStoreId()); staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStoreRelated.getStoreId());
...@@ -574,7 +566,18 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -574,7 +566,18 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
if(addByWelcome) { if(addByWelcome) {
unionid = null ; unionid = null ;
dto.setUnionid(unionid); dto.setUnionid(unionid);
// 查询
String relationKey = SecureUtil.md5(staffId + dto.getExternalUserid());
TabExternalMemberLog externalMemberLog = this.externalMemberService.selectRelationKey(enterpriseId, relationKey) ;
if(null != externalMemberLog && StringUtils.isNotEmpty(externalMemberLog.getUnionid())) {
log.info("通过欢迎语,但查询到unionid,relationkey={}",relationKey) ;
unionid = externalMemberLog.getUnionid() ;
dto.setUnionid(unionid);
memberId = addExternalClerkRelated(dto, staffId, staffClerkRelationDTO, wxEnterpriseRelated, mobile,qwDTO);
this.externalMemberService.updateStatus(enterpriseId, externalMemberLog.getLogId(), 2) ;
}else {
this.addFriendByWelcome(dto, staffClerkRelationDTO,qwDTO); this.addFriendByWelcome(dto, staffClerkRelationDTO,qwDTO);
}
}else { }else {
dto.setUnionid(unionid); dto.setUnionid(unionid);
memberId = addExternalClerkRelated(dto, staffId, staffClerkRelationDTO, wxEnterpriseRelated, mobile,qwDTO); memberId = addExternalClerkRelated(dto, staffId, staffClerkRelationDTO, wxEnterpriseRelated, mobile,qwDTO);
...@@ -605,32 +608,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -605,32 +608,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
} }
// 获取hm关联的导购
private String getHmClerk(HmQrcodeDTO hmDTO , String wxEnterpriseId, String staffId) {
Long hmId = hmDTO.getHmId() ;
if (hmDTO.getHmType() == 1) {
return hmDTO.getClerkId() ;
} else if (hmDTO.getHmType() == 2) {
//有主门店导购绑定主导购,没有主门店导购绑定第一个导购,其余随机
HmClerkRelationDTO hmClerkRelationDTO = null;
TabHaobanClerkMainStoreRelated mainStoreRelated = clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, wxEnterpriseId);
if (mainStoreRelated != null) {
StaffClerkRelationDTO relationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStoreRelated.getStoreId());
hmClerkRelationDTO = hmClerkRelationApiService.getHmClerkByHmIdAndClerkId(hmId, relationDTO.getClerkId());
if (hmClerkRelationDTO == null) {
hmClerkRelationDTO = hmClerkRelationApiService.getOneHmClerkByHmIdAndStaffId(hmId, staffId);
if (hmClerkRelationDTO == null) {
hmClerkRelationDTO = hmClerkRelationApiService.getOneHmClerkByHmId(hmId);
}
}
} else {
hmClerkRelationDTO = hmClerkRelationApiService.getOneHmClerkByHmId(hmId);
}
return hmClerkRelationDTO.getClerkId() ;
}
return null ;
}
// 获取hm配置的会员标签 // 获取hm配置的会员标签
private String getMemberLabel(String state , String hmMemberLableId , String wxEnterpriseId, Long linkId) { private String getMemberLabel(String state , String hmMemberLableId , String wxEnterpriseId, Long linkId) {
if(state.startsWith(Manage3Constants.HM)) { if(state.startsWith(Manage3Constants.HM)) {
...@@ -690,24 +667,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -690,24 +667,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
memberId = memberService.getMemberIdByPhoneNumber(mobile, enterpriseId); memberId = memberService.getMemberIdByPhoneNumber(mobile, enterpriseId);
} }
if (null == memberId) { if (null == memberId) {
QywxMemberQDTO qdto = new QywxMemberQDTO() ; memberId = this.getMeberId(enterpriseId,unionId, name, avatar, qrcodeParam, externalUserid, wxEnterpriseRelated.getWxEnterpriseType(), 2) ;
qdto.setEnterpriseId(enterpriseId);
qdto.setNick(name);
qdto.setPhotoUrl(avatar);
qdto.setQrcodeParam(qrcodeParam);
qdto.setUnionId(unionId);
if(wxEnterpriseRelated.getWxEnterpriseType()==0) {
qdto.setUserId(externalUserid);
}
qdto.setSence(2);
com.gic.api.base.commons.ServiceResponse<MemberSimpleDetailDTO> resp = this.memberEntranceApiService.enterpriseWechatByFriendEntrance(qdto);
log.info("新增外部联系人,创建member,resp={},param={}",JSON.toJSON(resp),JSON.toJSONString(qdto));
if(resp.isSuccess()) {
MemberSimpleDetailDTO member = resp.getResult() ;
memberId = member.getMemberId() ;
}else {
log.info(JSON.toJSONString(resp));
}
} }
if (memberId == null) { if (memberId == null) {
log.info("新增外部联系人,创建member失败,unionid={},外部联系人id={},", unionId,externalUserid); log.info("新增外部联系人,创建member失败,unionid={},外部联系人id={},", unionId,externalUserid);
...@@ -715,7 +675,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -715,7 +675,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
String storeId = staffClerkRelationDTO.getStoreId(); String storeId = staffClerkRelationDTO.getStoreId();
this.saveExternalClerk(memberId, staffId, dto, staffClerkRelationDTO , 1); this.saveExternalClerk(memberId, staffId, dto, staffClerkRelationDTO , 1);
this.sendWelcome(dto, qwDTO, enterpriseId, staffId, clerkId,memberId); // this.sendWelcome(dto, qwDTO, enterpriseId, staffId, clerkId,memberId);
//同步好友标签 //同步好友标签
this.pushTagSync(memberId, wxEnterpriseId, enterpriseId); this.pushTagSync(memberId, wxEnterpriseId, enterpriseId);
//回调给会员,更新是否为企微好友 //回调给会员,更新是否为企微好友
...@@ -763,15 +723,23 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -763,15 +723,23 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
}else { }else {
log.info("更新好友表"); log.info("更新好友表");
TabHaobanExternalClerkRelated exsitDTO = externalList.get(0); TabHaobanExternalClerkRelated exsitDTO = externalList.get(0);
exsitDTO.setMemberId(memberId);
exsitDTO.setMemberUnionidRelatedId(memberUnionidRelatedId); exsitDTO.setMemberUnionidRelatedId(memberUnionidRelatedId);
exsitDTO.setUnionid(unionId);
exsitDTO.setRelationKey(relationKey); exsitDTO.setRelationKey(relationKey);
exsitDTO.setHeadUrl(avatar); exsitDTO.setHeadUrl(avatar);
if(null != memberId) {
exsitDTO.setMemberId(memberId);
}
if(null != unionId) {
exsitDTO.setUnionid(unionId);
}
if(StringUtils.isEmpty(exsitDTO.getStoreId())) {
exsitDTO.setStoreId(storeId); exsitDTO.setStoreId(storeId);
exsitDTO.setEnterpriseId(enterpriseId); }
if(StringUtils.isEmpty(exsitDTO.getClerkId())) {
exsitDTO.setClerkId(clerkId); exsitDTO.setClerkId(clerkId);
if(StringUtils.isNotBlank(memberId) && exsitDTO.getStatusFlag() != 1) { }
exsitDTO.setEnterpriseId(enterpriseId);
if(StringUtils.isNotBlank(exsitDTO.getMemberId()) && exsitDTO.getStatusFlag() != 1) {
exsitDTO.setStatusFlag(1); exsitDTO.setStatusFlag(1);
} }
this.externalClerkRelatedService.update(exsitDTO); this.externalClerkRelatedService.update(exsitDTO);
...@@ -854,266 +822,11 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -854,266 +822,11 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
*/ */
private void addFriendByWelcome(MemberUnionidRelatedDTO dto, StaffClerkRelationDTO staffClerkRelationDTO,WxEnterpriseQwDTO qwDTO) { private void addFriendByWelcome(MemberUnionidRelatedDTO dto, StaffClerkRelationDTO staffClerkRelationDTO,WxEnterpriseQwDTO qwDTO) {
String staffId = staffClerkRelationDTO.getStaffId(); String staffId = staffClerkRelationDTO.getStaffId();
String clerkId = staffClerkRelationDTO.getClerkId();
String enterpriseId = staffClerkRelationDTO.getEnterpriseId();
//发送欢迎语 //发送欢迎语
sendWelcome(dto, qwDTO, enterpriseId, staffId, clerkId,null); // sendWelcome(dto, qwDTO, enterpriseId, staffId, clerkId,null);
//保存好友关系 //保存好友关系
this.saveExternalClerk(null, staffId, dto, staffClerkRelationDTO, 4); this.saveExternalClerk(null, staffId, dto, staffClerkRelationDTO, 4);
} }
/**
* 发送欢迎语
*
* @param dto
* @param wxEnterpriseDTO
* @param enterpriseId
* @param staffId
*/
private void sendWelcome(MemberUnionidRelatedDTO dto, WxEnterpriseQwDTO wxEnterpriseDTO, String enterpriseId, String staffId, String clerkId , String memberId) {
log.info("发送欢迎语:dto:{},staffId:{}", JSONObject.toJSONString(dto), staffId);
String welcomeCode = dto.getWelcomeCode();
String state = dto.getState();
String wxEnterpriseId = wxEnterpriseDTO.getWxEnterpriseId();
QywxErrorLogDTO errLog = new QywxErrorLogDTO();
errLog.setWxEnterpriseId(wxEnterpriseId);
errLog.setMemberId(memberId);
errLog.setExternalUserId(dto.getExternalUserid());
errLog.setTraceId(ProviderLocalTag.tag.get().traceId);
errLog.setQywxErrorType(1);
if (StringUtils.isBlank(welcomeCode)) {
log.error("welcomeCode为空,请检查是否使用企微的欢迎语:{}", wxEnterpriseId);
try {
errLog.setScenario("欢迎语");
errLog.setErrorContent("welcomeCode空,GIC不处理,使用企微发送欢迎语");
clientInstance.sendMessage(Manage3Constants.QYWX_ERROR_MSG, JSON.toJSONString(errLog));
} catch (Exception e) {
log.error("发送消息失败:{}", e.getMessage(), e);
}
return;
}
String relationKey = SecureUtil.md5(staffId + dto.getExternalUserid());
WelcomeDetailBO welcomeDetailBO = null;
if (StringUtils.isNotBlank(state) && (state.startsWith(Manage3Constants.HM) || state.startsWith(Manage3Constants.DT))) {
log.info("特殊欢迎语 state:{}", state);
WelcomeReferBO welcomeReferBo = getWelcomeReferBo(state);
welcomeDetailBO = welcomeService.getMatchWelcomeWithReferId(staffId, wxEnterpriseId, welcomeReferBo);
} else {
welcomeDetailBO = welcomeService.getMatchWelcome(staffId, wxEnterpriseId);
}
if (Objects.isNull(welcomeDetailBO)) {
log.info("欢迎语未配置:wxEnterpriseId:{}", wxEnterpriseId);
return;
}
//内容
String content = welcomeDetailBO.getWelcomeContent().replaceAll("<微信昵称>", Matcher.quoteReplacement(dto.getExternalName()));
QywxWelcomeMsgDTO qywxWelcomeMsgDTO = new QywxWelcomeMsgDTO();
// 欢迎语内容
qywxWelcomeMsgDTO.setText(content);
//欢迎语类型
List<QywxExternalMessageBaseDTO> attachments = new ArrayList<>();
// 开始设置欢迎语附件
List<WelcomeMediaBO> mediaList = welcomeDetailBO.getWelcomeMediaList();
log.info("欢迎语发送附件list:{}", JSON.toJSONString(mediaList));
mediaList.forEach(one -> {
Integer mediaType = one.getMediaType();
if (WelcomeMediaTypeEnum.IMAGE.getCode().equals(mediaType)) {
attachmentAddImage(attachments, one, wxEnterpriseDTO.getThirdCorpid());
}
if (WelcomeMediaTypeEnum.VIDEO.getCode().equals(mediaType)) {
attachmentAddVideo(attachments, one, wxEnterpriseDTO.getThirdCorpid());
}
if (WelcomeMediaTypeEnum.FILE.getCode().equals(mediaType)) {
attachmentAddFile(attachments, one, wxEnterpriseDTO.getThirdCorpid());
}
if (WelcomeMediaTypeEnum.LINK.getCode().equals(mediaType)) {
attachmentAddLink(attachments, one);
}
if (WelcomeMediaTypeEnum.PROGRAM.getCode().equals(mediaType)) {
attachmentAddProgram(attachments, one, wxEnterpriseId);
}
if (WelcomeMediaTypeEnum.PARAM_PROGRAM.getCode().equals(mediaType)) {
attachmentAddParamProgram(attachments, enterpriseId, wxEnterpriseId, relationKey);
}
if (WelcomeMediaTypeEnum.PARAM_QRCODE.getCode().equals(mediaType)) {
attachmentAddParamQrCode(attachments, enterpriseId, clerkId, wxEnterpriseDTO.getThirdCorpid(), relationKey);
}
});
if (CollectionUtils.isNotEmpty(attachments)) {
qywxWelcomeMsgDTO.setAttachments(attachments);
}
qywxWelcomeMsgDTO.setWelcomeCode(welcomeCode);
String result = null ;
if (dto.getSuiteid().equals(SELF_APP)) {
SecretSettingDTO secretSetting = secretSettingService.getSecretSetting(dto.getWxEnterpriseId(), SecretTypeEnum.CUSTOMIZED_APP.getVal());
result = qywxUserApiService.sendSelfWelcomeMsgByExternal(dto.getCorpid(), secretSetting.getSecretVal(), qywxWelcomeMsgDTO);
} else {
result = qywxUserApiService.sendWelcomeMsgByExternal(dto.getCorpid(), config.getWxSuiteid(), qywxWelcomeMsgDTO);
}
log.info("发送欢迎语 params:{},返回={}", JSON.toJSONString(qywxWelcomeMsgDTO),result);
if(StringUtils.isNotBlank(result)) {
JSONObject json = JSON.parseObject(result) ;
int errcode = json.getIntValue("errcode") ;
if(0 != errcode) {
try {
errLog.setScenario("欢迎语");
errLog.setErrorContent(result);
clientInstance.sendMessage(Manage3Constants.QYWX_ERROR_MSG, JSON.toJSONString(errLog));
} catch (Exception e) {
log.error("发送消息失败:{}", e.getMessage(), e);
}
}
}
}
/**
* 获取链接或者活码id
*
* @param state
* @return
*/
private WelcomeReferBO getWelcomeReferBo(String state) {
WelcomeReferBO welcomeReferBo = new WelcomeReferBO();
String id = state.substring(2);
if (state.contains(Manage3Constants.HM)) {
welcomeReferBo.setType(HmWelcomeReferType.HM.getCode());
welcomeReferBo.setReferId(id);
} else if (state.contains(Manage3Constants.DT)) {
KeyDataLinkBO dataForHmLink = keyDataService.getDataForHmLink(id);
if (dataForHmLink != null) {
welcomeReferBo.setType(HmWelcomeReferType.LINK.getCode());
welcomeReferBo.setReferId(Convert.toStr(dataForHmLink.getLinkId()));
}
}
return welcomeReferBo;
}
private void attachmentAddImage(List<QywxExternalMessageBaseDTO> attachments, WelcomeMediaBO media, String corpid) {
String mediaUrl = media.getMediaUrl();
String[] arr = mediaUrl.split("/");
JSONResponse jp = qywxSuiteApiService.uploadMedia(
corpid,
config.getWxSuiteid(),
CommonUtil.getFileByte(mediaUrl),
arr[arr.length - 1],
QywxMediaTypeEnum.IMAGE.getCode());
log.info("欢迎语发送图片返回:{}", JSON.toJSONString(jp));
if (jp.getErrorCode() == 0) {
QywxImageExternalBaseDTO qywxImageExternalBaseDTO = new QywxImageExternalBaseDTO();
qywxImageExternalBaseDTO.setMediaId(jp.getResult().toString());
attachments.add(qywxImageExternalBaseDTO);
}
}
private void attachmentAddVideo(List<QywxExternalMessageBaseDTO> attachments, WelcomeMediaBO media, String corpid) {
String mediaUrl = media.getMediaUrl();
String[] arr = mediaUrl.split("/");
JSONResponse jp = qywxSuiteApiService.uploadMedia(
corpid,
config.getWxSuiteid(),
CommonUtil.getFileByte(mediaUrl),
arr[arr.length - 1],
QywxMediaTypeEnum.VIDEO.getCode());
log.info("欢迎语发送视频返回:{}", JSON.toJSONString(jp));
if (jp.getErrorCode() == 0) {
QywxVideoExternalBaseDTO qywxVideoExternalBaseDTO = new QywxVideoExternalBaseDTO();
qywxVideoExternalBaseDTO.setMediaId(jp.getResult().toString());
attachments.add(qywxVideoExternalBaseDTO);
}
}
private void attachmentAddFile(List<QywxExternalMessageBaseDTO> attachments, WelcomeMediaBO media, String corpid) {
String mediaUrl = media.getMediaUrl();
String[] arr = mediaUrl.split("/");
JSONResponse jp = qywxSuiteApiService.uploadMedia(
corpid,
config.getWxSuiteid(),
CommonUtil.getFileByte(mediaUrl),
arr[arr.length - 1],
QywxMediaTypeEnum.FILE.getCode());
log.info("欢迎语发送文件返回:{}", JSON.toJSONString(jp));
if (jp.getErrorCode() == 0) {
QywxFileExternalBaseDTO qywxFileExternalBaseDTO = new QywxFileExternalBaseDTO();
qywxFileExternalBaseDTO.setMediaId(jp.getResult().toString());
attachments.add(qywxFileExternalBaseDTO);
}
}
private void attachmentAddLink(List<QywxExternalMessageBaseDTO> attachments, WelcomeMediaBO media) {
String mediaTitle = media.getMediaTitle();
String mediaUrl = media.getMediaUrl();
QywxLinkExternalBaseDTO qywxLinkExternalBaseDTO = new QywxLinkExternalBaseDTO();
qywxLinkExternalBaseDTO.setTitle(mediaTitle);
qywxLinkExternalBaseDTO.setUrl(mediaUrl);
attachments.add(qywxLinkExternalBaseDTO);
}
private void attachmentAddProgram(List<QywxExternalMessageBaseDTO> attachments, WelcomeMediaBO media, String wxEnterpriseId) {
log.info("发送小程序:wxEnterpriseId:{}", wxEnterpriseId);
String miniprogramSettingId = media.getMiniprogramSettingId();
TabMiniprogramSetting miniprogramSetting = miniprogramSettingService.getById(miniprogramSettingId);
if (Objects.isNull(miniprogramSetting) || miniprogramSetting.getStatusFlag() == 0) {
log.info("小程序不存在或已被删除, miniprogramSettingId:{}", miniprogramSettingId);
return;
}
QywxMiniprogramExternalBaseDTO messageBaseDTO = new QywxMiniprogramExternalBaseDTO();
messageBaseDTO.setAppid(miniprogramSetting.getAppId());
messageBaseDTO.setPicMediaId(miniprogramSetting.getMediaId());
messageBaseDTO.setTitle(miniprogramSetting.getTitle());
messageBaseDTO.setPage(media.getMiniProgramPage());
attachments.add(messageBaseDTO);
}
private void attachmentAddParamProgram(List<QywxExternalMessageBaseDTO> attachments, String enterpriseId, String wxEnterpriseId, String relationKey) {
if (StringUtils.isEmpty(enterpriseId) || StringUtils.isEmpty(relationKey)) {
log.info("带参二维码无法发送");
return;
}
log.info("发送带参小程序:wxEnterpriseId:{}", wxEnterpriseId);
//发送小程序
TabMiniprogramSetting miniprogramSetting = miniprogramSettingService.getMiniprogramSetting(wxEnterpriseId, enterpriseId);
if (null == miniprogramSetting) {
log.info("需要配置小程序配置:wxEnterpriseId:{},enterpriseId:{}", wxEnterpriseId, enterpriseId);
return;
}
QywxMiniprogramExternalBaseDTO messageBaseDTO = new QywxMiniprogramExternalBaseDTO();
messageBaseDTO.setAppid(miniprogramSetting.getAppId());
messageBaseDTO.setPicMediaId(miniprogramSetting.getMediaId());
messageBaseDTO.setTitle(miniprogramSetting.getTitle());
messageBaseDTO.setPage(config.getMemberOpenPage() + relationKey);
attachments.add(messageBaseDTO);
}
private void attachmentAddParamQrCode(List<QywxExternalMessageBaseDTO> attachments, String enterpriseId, String clerkId,
String corpid, String relationKey) {
if (StringUtils.isEmpty(enterpriseId) || StringUtils.isEmpty(clerkId)) {
log.info("带参小程序无法发送");
return;
}
//带参数的公众号二维码
String sceneStr = "QWHY_" + relationKey + "_" + clerkId;
//30天失效
QRcodeDTO qRcodePic = imageService.getQRcodePic(enterpriseId, sceneStr, 2592000);
log.info("参数的公众号二维码返回:{}", JSON.toJSONString(qRcodePic));
if (qRcodePic != null) {
String downloadUrl = qRcodePic.getPicUploadResDTO().downloadUrl;
String[] arr = downloadUrl.split("/");
JSONResponse jp = qywxSuiteApiService.uploadMedia(
corpid,
config.getWxSuiteid(),
CommonUtil.getFileByte(downloadUrl),
arr[arr.length - 1],
QywxMediaTypeEnum.IMAGE.getCode());
log.info("欢迎语发送带参数的公众号企微二维码返回:{}", JSON.toJSONString(jp));
if (jp.getErrorCode() == 0) {
QywxImageExternalBaseDTO qywxImageExternalBaseDTO = new QywxImageExternalBaseDTO();
qywxImageExternalBaseDTO.setMediaId(jp.getResult().toString());
attachments.add(qywxImageExternalBaseDTO);
}
}
}
/** /**
* 组装数据 * 组装数据
* *
...@@ -1622,9 +1335,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1622,9 +1335,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return EntityUtil.changeEntityByJSON(ExternalUserDTO.class, pojo); return EntityUtil.changeEntityByJSON(ExternalUserDTO.class, pojo);
} }
@Override private String saveExternalUser(ExternalUserDTO dto) {
public String addExternal(ExternalUserDTO dto) {
String wxUserId = dto.getWxUserId();
String wxEnterpriseId = dto.getWxEnterpriseId(); String wxEnterpriseId = dto.getWxEnterpriseId();
String name = StringUtils.isBlank(dto.getName()) ? "--" : dto.getName(); String name = StringUtils.isBlank(dto.getName()) ? "--" : dto.getName();
String createTime = dto.getAddCreateTime(); String createTime = dto.getAddCreateTime();
...@@ -1635,9 +1346,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1635,9 +1346,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
String storeId = dto.getStoreId(); String storeId = dto.getStoreId();
String clerkId = dto.getClerkId(); String clerkId = dto.getClerkId();
String staffId = dto.getStaffId(); String staffId = dto.getStaffId();
if (StringUtils.isAnyBlank(wxUserId, wxEnterpriseId, name, createTime, externalUserId, storeId, enterpriseId, staffId, clerkId)) { if (StringUtils.isAnyBlank(wxEnterpriseId, name, createTime, externalUserId, storeId, enterpriseId, staffId, clerkId)) {
log.info("【刷新好友】参数有空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); + "", wxEnterpriseId, name, createTime, unionId, externalUserId, memberId, storeId, enterpriseId, staffId, clerkId);
return "参数不对"; return "参数不对";
} }
String memberUnionidRelatedId = this.saveMemberUnionTable(dto) ; String memberUnionidRelatedId = this.saveMemberUnionTable(dto) ;
...@@ -1882,7 +1593,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1882,7 +1593,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
String[] s = sceneStr.split("_"); String[] s = sceneStr.split("_");
String relationKey = s[1]; String relationKey = s[1];
TabHaobanExternalClerkRelated externalClerkRelated = externalClerkRelatedMapper.getByRelationKey(relationKey); TabHaobanExternalClerkRelated externalClerkRelated = externalClerkRelatedMapper.getByRelationKey(relationKey,1);
if (externalClerkRelated == null) { if (externalClerkRelated == null) {
log.error("关注公共号-会员回调好办关联好友,未查询到,relationKey:{}", relationKey); log.error("关注公共号-会员回调好办关联好友,未查询到,relationKey:{}", relationKey);
//重试5次 //重试5次
...@@ -1903,10 +1614,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1903,10 +1614,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
externalClerkRelatedApiService.bindMemberIdExternalById(externalClerkRelated.getExternalClerkRelatedId(), enterpriseId, memberId, unionid); externalClerkRelatedApiService.bindMemberIdExternalById(externalClerkRelated.getExternalClerkRelatedId(), enterpriseId, memberId, unionid);
} }
// @Override
// public void addDelFriendEventTest(String param) {
// log.info("addDelFriendEventTest:{}", param);
// }
/** /**
* 获取客户详情列表 * 获取客户详情列表
* *
...@@ -1972,4 +1680,79 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1972,4 +1680,79 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
@Override
public void saveExternalMemberLog(ExternalMemberLogDTO memberLog) {
this.externalMemberService.insert(memberLog) ;
}
@Override
public String dealMergeForReflsh(ExternalUserDTO externalUserDTO, String wxEnterpriseId , String staffId) {
if (externalUserDTO.getFriendType() == 2) {
return "不是微信好友,是企业微信好友:" + externalUserDTO.getFriendType();
}
ClerkMainStoreRelatedDTO mainStore = clerkMainStoreRelatedApiService.getWxEnterpriseIdAndStaffId(wxEnterpriseId, staffId);
if (mainStore == null) {
return "主门店不存在";
}
StaffClerkRelationDTO staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStore.getStoreId());
if (staffClerkRelationDTO == null) {
return "未绑定导购";
}
String enterpriseId = staffClerkRelationDTO.getEnterpriseId() ;
TabHaobanWxEnterpriseRelated wxEnterpriseRelated = wxEnterpriseRelatedService.getByEnterpriseId(wxEnterpriseId, enterpriseId);
if (wxEnterpriseRelated == null) {
log.info("没有存在企业关联:{},{}", wxEnterpriseId, enterpriseId);
return "没有关联企业";
}
String storeId = mainStore.getStoreId() ;
String clerkId = staffClerkRelationDTO.getClerkId() ;
externalUserDTO.setWxEnterpriseId(wxEnterpriseId);
externalUserDTO.setEnterpriseId(enterpriseId);
externalUserDTO.setStoreId(storeId);
externalUserDTO.setClerkId(clerkId);
externalUserDTO.setStaffId(staffId);
boolean addByWelcome = this.wxEnterpriseRelatedService.getAddByWelcomeFlag(wxEnterpriseRelated,externalUserDTO.getUnionId(),false) ;
if (addByWelcome) {
log.info("好友不同开平:{}", JSONObject.toJSONString(externalUserDTO));
return this.saveExternalUser(externalUserDTO);
}
String clerkCode = staffClerkRelationDTO.getClerkCode();
ClerkDTO clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
if (clerk == null) {
return "导购不存在:" + clerkCode;
}
String qrcodeParam = clerk.getQrcodeParam();
if (StringUtils.isBlank(qrcodeParam)) {
log.info("导购码不存在:" + clerkCode);
qrcodeParam = "clerk_clerk_"+clerk.getClerkId() ;
}
String memberId = this.getMeberId(enterpriseId, externalUserDTO.getUnionId(), externalUserDTO.getName(), externalUserDTO.getAvatar(), qrcodeParam, externalUserDTO.getExternalUserId(), wxEnterpriseRelated.getWxEnterpriseType(), 1) ;
if (memberId == null) {
return "会员不存在:unionid:" + externalUserDTO.getUnionId();
}
externalUserDTO.setMemberId(memberId);
return this.saveExternalUser(externalUserDTO);
}
private String getMeberId(String enterpriseId , String unionid , String name , String image ,String qrcodeParam , String externalUserId , int wxEnterpriseType , int sence) {
QywxMemberQDTO qdto = new QywxMemberQDTO() ;
qdto.setEnterpriseId(enterpriseId);
qdto.setNick(name);
qdto.setPhotoUrl(image);
qdto.setQrcodeParam(qrcodeParam);
qdto.setUnionId(unionid);
if(wxEnterpriseType==0) {
qdto.setUserId(externalUserId);
}
qdto.setSence(sence);
String memberId = null;
com.gic.api.base.commons.ServiceResponse<MemberSimpleDetailDTO> resp = this.memberEntranceApiService.enterpriseWechatByFriendEntrance(qdto);
log.info("刷新好友,创建member,resp={},param={}",JSON.toJSON(resp),JSON.toJSONString(qdto));
if(resp.isSuccess()) {
MemberSimpleDetailDTO member = resp.getResult() ;
memberId = member.getMemberId() ;
}
return memberId ;
}
} }
...@@ -545,11 +545,11 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe ...@@ -545,11 +545,11 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
// 导购门店转移 // 导购门店转移
private void moveOrAddClerk(ClerkSyncQDTO clerkSyncQDTO, StaffClerkRelationDTO oldRelationDTO) { private void moveOrAddClerk(ClerkSyncQDTO clerkSyncQDTO, StaffClerkRelationDTO oldRelationDTO) {
boolean flag = false; /* boolean flag = false;
if (null != RedisUtil.getCache("clerkMoveFlag2022")) { if (null != RedisUtil.getCache("clerkMoveFlag2022")) {
flag = true; flag = true;
} }
if (flag) { if (flag) {*/
String oldClerkId = oldRelationDTO.getClerkId(); String oldClerkId = oldRelationDTO.getClerkId();
this.staffClerkRelationService.delBind(oldClerkId, "-1", ChannelCodeEnum.SYNC_UNBIND.getCode(), clerkSyncQDTO.getClerkId(),oldRelationDTO.getWxEnterpriseId()); this.staffClerkRelationService.delBind(oldClerkId, "-1", ChannelCodeEnum.SYNC_UNBIND.getCode(), clerkSyncQDTO.getClerkId(),oldRelationDTO.getWxEnterpriseId());
// 设置新的ID // 设置新的ID
...@@ -560,15 +560,15 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe ...@@ -560,15 +560,15 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
if (response == null) { if (response == null) {
this.staffClerkRelationService.insert(oldRelationDTO); this.staffClerkRelationService.insert(oldRelationDTO);
} }
} else { /*} else {
String oldClerkId = oldRelationDTO.getClerkId(); String oldClerkId = oldRelationDTO.getClerkId();
this.staffClerkRelationService.delBind(oldClerkId, "-1", ChannelCodeEnum.SYNC_UNBIND.getCode(), null,null); this.staffClerkRelationService.delBind(oldClerkId, "-1", ChannelCodeEnum.SYNC_UNBIND.getCode(), null,null);
// 设置新的ID // 设置新的ID
oldRelationDTO.setClerkId(clerkSyncQDTO.getClerkId()); oldRelationDTO.setClerkId(clerkSyncQDTO.getClerkId());
oldRelationDTO.setStoreId(clerkSyncQDTO.getStoreId()); oldRelationDTO.setStoreId(clerkSyncQDTO.getStoreId());
ServiceResponse resp = this.bindStaffClerk(oldRelationDTO, "-1", ChannelCodeEnum.SYNC_BIND.getCode()); ServiceResponse resp = this.bindStaffClerk(oldRelationDTO, "-1", ChannelCodeEnum.SYNC_BIND.getCode());
logger.info("绑定结果正常:{},{}", JSONObject.toJSONString(resp), oldRelationDTO.getClerkId()); logger.info("绑定结果正常:{},{}", JSONObject.toJSONString(resp), oldRelationDTO.getClerkId());*/
} // }
} }
@Override @Override
......
...@@ -154,84 +154,6 @@ public class StaffDepartmentRelatedApiServiceImpl implements StaffDepartmentRela ...@@ -154,84 +154,6 @@ public class StaffDepartmentRelatedApiServiceImpl implements StaffDepartmentRela
return map; return map;
} }
//导购绑定,,审核记录,,消息发送
@Override
public void sendStaffBind(String staffId, String clerkCode, String storeId, int auditStatus, String auditReason) {
StaffDTO staffDTO = staffApiService.selectById(staffId);
if (staffDTO == null) {
logger.info("staff不存在,发送消息失败{}", staffId);
return;
}
String messageTitle = "账号申请";
String content = staffDTO.getStaffName() + "关联导购code(" + clerkCode + ")";
JSONObject jsonObject = new JSONObject();
jsonObject.put("storeId", storeId);
String data = jsonObject.toJSONString();
String pageUrl = this.getPageUrl(AppPageType.MY_RELATED_RECORD.getCode(), data);
String name = staffDTO.getStaffName();
if (content.length() > 30) {
content = content.substring(0, 26);
content = content + "...";
}
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(staffDTO.getWxEnterpriseId());
String wxUserId = "";
if (qwDTO.needOpenUserId3th()) {
wxUserId = staffDTO.getWxOpenUseId();
} else {
wxUserId = staffDTO.getWxUserId();
}
//先发送下,试试
QywxXcxSendMessageDTO messageDTO = new QywxXcxSendMessageDTO();
List<ItemDTO> items = new ArrayList<>();
ItemDTO dto1 = new ItemDTO();
ItemDTO dto2 = new ItemDTO();
ItemDTO dto3 = new ItemDTO();
ItemDTO dto4 = new ItemDTO();
dto1.setKey("接收人");
dto1.setValue(name);
dto2.setKey("接收事件");
dto2.setValue(content);
dto3.setKey("结果");
dto3.setValue(auditStatus == 1 ? "已同意" : "已拒绝");
items.add(dto1);
items.add(dto2);
items.add(dto3);
if (StringUtils.isNotEmpty(auditReason)) {
dto4.setKey("理由");
dto4.setValue(auditReason);
items.add(dto4);
}
ArrayList<String> list = new ArrayList<>();
list.add(wxUserId);
messageDTO.setAppid(config.getAppid());
messageDTO.setUserIds(list);
messageDTO.setPage(pageUrl);
messageDTO.setTitle(messageTitle);
messageDTO.setItems(items);
logger.info("发送参数为corpId============:{},suitId============:{},messageDTO============:{},", qwDTO.getThirdCorpid(), config.getWxSuiteid(), JSONObject.toJSONString(messageDTO));
boolean b = qywxSuiteApiService.sendMessage(qwDTO.getThirdCorpid(), config.getWxSuiteid(), messageDTO);
logger.info("发送===============》{}", b);
}
//导购绑定,,审核记录,,消息发送
@Override
public void sendClerkBind(String staffId, String clerkCode, String storeId, int auditStatus, String auditReason) {
StaffDTO staffDTO = staffApiService.selectById(staffId);
if (staffDTO == null) {
logger.info("staff不存在,发送消息失败{}", staffId);
return;
}
String messageTitle = "账号申请";
String messageContent = staffDTO.getStaffName() + "申请关联导购code(" + clerkCode + ")";
JSONObject jsonObject = new JSONObject();
jsonObject.put("storeId", storeId);
String data = jsonObject.toJSONString();
String pageUrl = this.getPageUrl(AppPageType.MY_RELATED_RECORD.getCode(), data);
this.sendAuditMessage(staffId, messageTitle, messageContent, pageUrl, auditStatus, auditReason);
}
//导购新增,,审核记录,,消息发送 //导购新增,,审核记录,,消息发送
@Override @Override
public void sendClerkAdd(String clerkName, String clerkCode, String storeId, int auditStatus, String auditReason) { public void sendClerkAdd(String clerkName, String clerkCode, String storeId, int auditStatus, String auditReason) {
......
...@@ -56,7 +56,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -56,7 +56,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
@Override @Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) { public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("dealParamMqDTO={},dataPre={}", JSON.toJSONString(dealParamMqDTO), JSON.toJSONString(dataPre)); logger.info("刷新好友列表(7-8),dealParamMqDTO={},dataPre={}", JSON.toJSONString(dealParamMqDTO), JSON.toJSONString(dataPre));
String reason = ""; String reason = "";
boolean dealFlag = true; boolean dealFlag = true;
try { try {
...@@ -82,7 +82,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -82,7 +82,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
return; return;
} }
if (CollectionUtils.isEmpty(selfUserIdList)) { if (CollectionUtils.isEmpty(selfUserIdList)) {
logger.info("改用户没有外部联系人:{}", JSONObject.toJSONString(dataPre)); logger.info("该用户无代开外部联系人:{}", JSONObject.toJSONString(dataPre));
dealFlag = false; dealFlag = false;
reason = "该用户没有外部联系人"; reason = "该用户没有外部联系人";
return; return;
...@@ -100,7 +100,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation { ...@@ -100,7 +100,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
return; return;
} }
if (CollectionUtils.isEmpty(userIdList)) { if (CollectionUtils.isEmpty(userIdList)) {
logger.info("该用户没有外部联系人2:{}", JSONObject.toJSONString(dataPre)); logger.info("该用户无第三方外部联系人:{}", JSONObject.toJSONString(dataPre));
dealFlag = false; dealFlag = false;
reason = "该用户没有外部联系人"; reason = "该用户没有外部联系人";
return; return;
......
...@@ -3,25 +3,20 @@ package com.gic.haoban.manage.service.task.friend; ...@@ -3,25 +3,20 @@ package com.gic.haoban.manage.service.task.friend;
import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.GICMQClientUtil; import com.gic.commons.util.GICMQClientUtil;
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.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum; import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum; import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService; import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog; import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated;
import com.gic.haoban.manage.service.exception.WxApiLimitException; import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.service.*; import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.task.BaseSyncOperation; import com.gic.haoban.manage.service.task.BaseSyncOperation;
import com.gic.member.api.dto.MemberSimpleDetailDTO;
import com.gic.member.api.dto.QywxMemberQDTO;
import com.gic.member.api.service.MemberEntranceApiService;
import com.gic.mq.sdk.GicMQClient; import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -48,69 +43,67 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -48,69 +43,67 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
@Autowired @Autowired
private SyncTaskService syncTaskService; private SyncTaskService syncTaskService;
@Autowired @Autowired
private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService;
@Autowired
private StaffClerkRelationService staffClerkRelationService;
@Autowired
private ClerkService clerkService;
@Autowired
private FriendClerkSyncNewOperation friendClerkSyncNewOperation; private FriendClerkSyncNewOperation friendClerkSyncNewOperation;
@Autowired
private WxEnterpriseRelatedService wxEnterpriseRelatedService;
@Autowired
private MemberEntranceApiService memberEntranceApiService;
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_"; private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
@Override @Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) { public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("同步好友开始,第三方={}", JSONObject.toJSONString(dataPre)); logger.info("刷新好友,第三方={}", JSONObject.toJSONString(dataPre));
String reason = "成功"; String reason = "成功";
boolean dealFlag = true; boolean dealFlag = true;
String relationKey = "-1"; String relationKey = "-1";
try { try {
if (dataPre.getStatusFlag() != PreDealStatusEnum.pre.getVal()) {
logger.info("已经处理过,无需重复处理:{}", JSONObject.toJSONString(dataPre));
return;
}
String wxEnterpriseId = dataPre.getWxEnterpriseId(); String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getDataId().split("###")[1] ; String wxUserId = dataPre.getDataId().split("###")[1] ;
String taskId = dealParamMqDTO.getTaskId(); String taskId = dealParamMqDTO.getTaskId();
String externalUserId = dataPre.getDataContent(); String externalUserId = dataPre.getDataContent();
String staffId = dataPre.getpDataId() ; String staffId = dataPre.getpDataId() ;
if (dataPre.getStatusFlag() != PreDealStatusEnum.pre.getVal()) {
logger.info("已经处理过,无需重复处理:{}", JSONObject.toJSONString(dataPre));
return;
}
ExternalUserDTO externalUserDTO = memberUnionidRelatedApiService.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId); ExternalUserDTO externalUserDTO = memberUnionidRelatedApiService.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
if (externalUserDTO == null) { if (externalUserDTO == null) {
logger.info("第三方外部联系人详情查询失败,staffId={},{},{}", staffId,wxUserId,externalUserId);
dealFlag = false; dealFlag = false;
reason = "好友不存在"; reason = "好友不存在";
return; return;
} }
//relationkey String str = staffId + "_" + externalUserDTO.getName() + "_" + externalUserDTO.getAddCreateTime() ;
relationKey = SecureUtil.md5(staffId + "_" + externalUserDTO.getName() + "_" + externalUserDTO.getAddCreateTime()); relationKey = SecureUtil.md5(str);
logger.info("第三方生成relationKey:{},{},{} 客户={}, 结果={}",staffId,externalUserDTO.getName(),externalUserDTO.getAddCreateTime() , externalUserDTO.getExternalUserId() , relationKey); logger.info("生成第三方relationKey={},staff={},{}",relationKey,staffId,str);
// 根据关联键relationkey查看自建应用 是否有数据 // 根据关联键relationkey查看自建应用 是否有数据
TabHaobanPreDealLog selfPre = preDealService.getByRelationKey(taskId, PreDealTypeEnum.self_friend.getVal(), relationKey); List<TabHaobanPreDealLog> list = this.preDealService.getByRelationKey(taskId, PreDealTypeEnum.self_friend.getVal(), relationKey);
if (null == selfPre) { if(CollectionUtils.isEmpty(list)) {
logger.info("用户的自建应用不存在该数据:{},{}", JSONObject.toJSONString(dataPre), JSONObject.toJSONString(externalUserDTO)); logger.info("用户的代开发不存在关联数据:{},{}", JSONObject.toJSONString(dataPre), JSONObject.toJSONString(externalUserDTO));
dealFlag = false;
reason = "用户的代开发应用不存在该数据:" + relationKey;
return;
}
if(list.size()>1) {
logger.info("用户的代开发应用数据多条:{},{}", JSONObject.toJSONString(dataPre), JSONObject.toJSONString(externalUserDTO));
dealFlag = false; dealFlag = false;
reason = "用户的自建应用不存在该数据:" + relationKey; reason = "用户的代开发应用数据多条:" + relationKey;
return; return;
} }
TabHaobanPreDealLog selfPre = list.get(0) ;
logger.info("代开发的数据={}",selfPre.getDataContent());
ExternalUserDTO selfUserData = JSON.parseObject(selfPre.getDataContent(), ExternalUserDTO.class); ExternalUserDTO selfUserData = JSON.parseObject(selfPre.getDataContent(), ExternalUserDTO.class);
externalUserDTO.setUnionId(selfUserData.getUnionId()); externalUserDTO.setUnionId(selfUserData.getUnionId());
externalUserDTO.setSelfExternalUserId(selfUserData.getExternalUserId()); externalUserDTO.setSelfExternalUserId(selfUserData.getExternalUserId());
externalUserDTO.setAvatar(selfUserData.getAvatar()); externalUserDTO.setAvatar(selfUserData.getAvatar());
externalUserDTO.setName(selfUserData.getName()); externalUserDTO.setName(selfUserData.getName());
//序列化数据 //序列化数据
String ret = dealMerge(externalUserDTO, dataPre); String ret = this.memberUnionidRelatedApiService.dealMergeForReflsh(externalUserDTO, wxEnterpriseId, staffId) ;
if (StringUtils.isNotBlank(ret)) { if (StringUtils.isNotBlank(ret)) {
logger.info("好友创建失败:{},{}", ret, JSONObject.toJSONString(externalUserDTO)); logger.info("好友创建失败:{},{}", ret, JSONObject.toJSONString(externalUserDTO));
dealFlag = false; dealFlag = false;
reason = ret + ":" + relationKey; reason = ret + ":" + relationKey;
return; return;
} }
//更新状态 //更新状态
preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, externalUserDTO.getMemberId(), relationKey , PreDealTypeEnum.friend.getVal()); preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, externalUserDTO.getMemberId(), relationKey , PreDealTypeEnum.friend.getVal());
dealSuccess(taskId, dataPre.getDataId(), dataPre.getpDataId(), wxEnterpriseId); dealSuccess(taskId, dataPre.getDataId(), dataPre.getpDataId(), wxEnterpriseId);
...@@ -155,75 +148,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -155,75 +148,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
return true; return true;
} }
private String dealMerge(ExternalUserDTO externalUserDTO, TabHaobanPreDealLog dataPre) {
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getDataId().split("###")[1] ;
if (externalUserDTO.getFriendType() == 2) {
return "不是微信好友,是企业微信好友:" + externalUserDTO.getFriendType();
}
String staffId = dataPre.getpDataId() ;
ClerkMainStoreRelatedDTO mainStore = clerkMainStoreRelatedApiService.getWxEnterpriseIdAndStaffId(wxEnterpriseId, staffId);
if (mainStore == null) {
return "主门店不存在";
}
StaffClerkRelationDTO staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStore.getStoreId());
if (staffClerkRelationDTO == null) {
return "未绑定导购";
}
String enterpriseId = staffClerkRelationDTO.getEnterpriseId() ;
TabHaobanWxEnterpriseRelated wxEnterpriseRelated = wxEnterpriseRelatedService.getByEnterpriseId(wxEnterpriseId, enterpriseId);
if (wxEnterpriseRelated == null) {
logger.info("没有存在企业关联:{},{}", wxEnterpriseId, enterpriseId);
return "没有关联企业";
}
String storeId = mainStore.getStoreId() ;
String clerkId = staffClerkRelationDTO.getClerkId() ;
externalUserDTO.setWxEnterpriseId(wxEnterpriseId);
externalUserDTO.setEnterpriseId(enterpriseId);
externalUserDTO.setStoreId(storeId);
externalUserDTO.setClerkId(clerkId);
externalUserDTO.setWxUserId(wxUserId);
externalUserDTO.setStaffId(staffId);
boolean addByWelcome = this.wxEnterpriseRelatedService.getAddByWelcomeFlag(wxEnterpriseRelated,externalUserDTO.getUnionId(),false) ;
if (addByWelcome) {
logger.info("好友不同开平:{}", JSONObject.toJSONString(externalUserDTO));
return memberUnionidRelatedApiService.addExternal(externalUserDTO);
}
String clerkCode = staffClerkRelationDTO.getClerkCode();
ClerkDTO clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
if (clerk == null) {
return "导购不存在:" + clerkCode;
}
String qrcodeParam = clerk.getQrcodeParam();
if (StringUtils.isBlank(qrcodeParam)) {
logger.info("导购码不存在:" + clerkCode);
qrcodeParam = "clerk_clerk_"+clerk.getClerkId() ;
}
QywxMemberQDTO qdto = new QywxMemberQDTO() ;
qdto.setEnterpriseId(enterpriseId);
qdto.setNick(externalUserDTO.getName());
qdto.setPhotoUrl(externalUserDTO.getAvatar());
qdto.setQrcodeParam(qrcodeParam);
qdto.setUnionId(externalUserDTO.getUnionId());
if(wxEnterpriseRelated.getWxEnterpriseType()==0) {
qdto.setUserId(externalUserDTO.getExternalUserId());
}
qdto.setSence(1);
String memberId = null;
com.gic.api.base.commons.ServiceResponse<MemberSimpleDetailDTO> resp = this.memberEntranceApiService.enterpriseWechatByFriendEntrance(qdto);
logger.info("加好友,创建member,resp={},param={}",JSON.toJSON(resp),JSON.toJSONString(qdto));
if(resp.isSuccess()) {
MemberSimpleDetailDTO member = resp.getResult() ;
memberId = member.getMemberId() ;
}
if (memberId == null) {
return "会员不存在:unionid:" + externalUserDTO.getUnionId();
}
externalUserDTO.setMemberId(memberId);
return memberUnionidRelatedApiService.addExternal(externalUserDTO);
}
public void dealException(String taskId, String dataId, String pDataId, String reason, String relationKey) { public void dealException(String taskId, String dataId, String pDataId, String reason, String relationKey) {
preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason, null, relationKey, PreDealTypeEnum.friend.getVal()); preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason, null, relationKey, PreDealTypeEnum.friend.getVal());
checkDepartmentTask(taskId, pDataId); checkDepartmentTask(taskId, pDataId);
......
...@@ -51,7 +51,7 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -51,7 +51,7 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
@Override @Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) { public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("同步好友开始,自建代开发={}", JSONObject.toJSONString(dataPre)); logger.info("刷新好友列表7,代开发={}", JSONObject.toJSONString(dataPre));
String reason = "成功"; String reason = "成功";
boolean dealFlag = true; boolean dealFlag = true;
try { try {
...@@ -60,10 +60,10 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -60,10 +60,10 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
String staffId = dataPre.getpDataId() ; String staffId = dataPre.getpDataId() ;
String taskId = dealParamMqDTO.getTaskId(); String taskId = dealParamMqDTO.getTaskId();
String externalUserId = dataPre.getDataContent(); String externalUserId = dataPre.getDataContent();
// 查询企微侧外部联系人详情
ExternalUserDTO externalUserDTO = memberUnionidRelatedApiService.getCorpSelfExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId); ExternalUserDTO externalUserDTO = memberUnionidRelatedApiService.getCorpSelfExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
if (externalUserDTO == null) { if (externalUserDTO == null) {
logger.info("外部联系人好友不存在:{}", JSONObject.toJSONString(dataPre)); logger.info("代开发外部联系人详情查询失败,staffId={},{},{}", staffId,wxUserId,externalUserId);
dealException(taskId, dataPre.getDataId(), null, "好友不存在"); dealException(taskId, dataPre.getDataId(), null, "好友不存在");
return; return;
} }
...@@ -74,13 +74,11 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation { ...@@ -74,13 +74,11 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
json.put("avatar", externalUserDTO.getAvatar()); json.put("avatar", externalUserDTO.getAvatar());
json.put("externalUserId", externalUserDTO.getExternalUserId()); json.put("externalUserId", externalUserDTO.getExternalUserId());
json.put("addCreateTime", externalUserDTO.getAddCreateTime()); json.put("addCreateTime", externalUserDTO.getAddCreateTime());
String str = staffId + "_" + externalUserDTO.getName() + "_" + externalUserDTO.getAddCreateTime() ;
//relationkey String relationKey = SecureUtil.md5(str);
logger.info("生成relationKey:{},{},{}",staffId,externalUserDTO.getName(),externalUserDTO.getAddCreateTime()); logger.info("生成代开发relationKey={},staff={},{}",relationKey,staffId,str);
String relationKey = SecureUtil.md5(staffId + "_" + externalUserDTO.getName() + "_" + externalUserDTO.getAddCreateTime());
logger.info("relationKey:{},{}", relationKey, externalUserDTO.getExternalUserId());
//更新状态 //更新状态
preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, json.toJSONString(), relationKey , PreDealTypeEnum.self_friend.getVal()); this.preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, json.toJSONString(), relationKey , PreDealTypeEnum.self_friend.getVal());
dealSuccess(taskId, dataPre.getDataId(), null, wxEnterpriseId); dealSuccess(taskId, dataPre.getDataId(), null, wxEnterpriseId);
} catch (WxApiLimitException e) { } catch (WxApiLimitException e) {
logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre)); logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre));
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gic.haoban.manage.service.dao.mapper.ExternalMemberLogMapper">
<resultMap type="com.gic.haoban.manage.service.entity.TabExternalMemberLog" id="result-map-tabHaobanExternalMemberLog">
<result column="log_id" property="logId"/>
<result column="enterprise_id" property="enterpriseId"/>
<result column="unionid" property="unionid"/>
<result column="member_id" property="memberId"/>
<result column="relation_key" property="relationKey"/>
<result column="delete_flag" property="deleteFlag"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="status_flag" property="statusFlag"/>
</resultMap>
<sql id="Base_Column_List">
log_id,
enterprise_id,
unionid,
member_id ,
relation_key,
delete_flag,
create_time,
update_time,
status_flag
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert" parameterType="com.gic.haoban.manage.service.entity.TabExternalMemberLog">
<![CDATA[
INSERT INTO tab_haoban_external_member_log(
log_id,
enterprise_id,
unionid,
member_id ,
relation_key,
delete_flag,
create_time,
update_time,
status_flag
)VALUES(
#{logId,jdbcType=BIGINT},
#{enterpriseId,jdbcType=CHAR},
#{unionid,jdbcType=VARCHAR},
#{memberId} ,
#{relationKey,jdbcType=VARCHAR},
0,
now(),
now(),
1
)
]]>
</insert>
<update id="updateStatus">
<![CDATA[
UPDATE tab_haoban_external_member_log SET
update_time=now() ,
status_flag= #{statusFlag}
where enterprise_id = #{enterpriseId} and log_id=#{id}
]]>
</update>
<!-- ============ 查询=============-->
<select id="selectRelationKey" resultMap="result-map-tabHaobanExternalMemberLog">
SELECT <include refid="Base_Column_List" /> FROM tab_haoban_external_member_log
where enterprise_id = #{enterpriseId} and relation_key=#{relationKey} limit 1
</select>
<select id="listForTimer" resultMap="result-map-tabHaobanExternalMemberLog">
SELECT <include refid="Base_Column_List" /> FROM tab_haoban_external_member_log
where create_time >= #{start} and create_time <![CDATA[ < ]]> #{end} and status_flag = 1
</select>
</mapper>
\ No newline at end of file
...@@ -392,22 +392,17 @@ ...@@ -392,22 +392,17 @@
and status_flag = 1 and status_flag = 1
</select> </select>
<!-- <select id="getClerkExternalByUnionId" resultMap="BaseResultMap">-->
<!-- select-->
<!-- <include refid="Base_Column_List"/>-->
<!-- from tab_haoban_external_clerk_related-->
<!-- where enterprise_id = #{enterpriseId}-->
<!-- and unionid = #{unionId}-->
<!-- and clerk_id = #{clerkId}-->
<!-- and status_flag = 1-->
<!-- </select>-->
<select id="getByRelationKey" resultMap="BaseResultMap"> <select id="getByRelationKey" resultMap="BaseResultMap">
select select
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>
from tab_haoban_external_clerk_related from tab_haoban_external_clerk_related
where where
relation_key = #{relationKey} and member_id is null relation_key = #{relationKey}
<if test="filterMember==1">
and member_id is null
</if>
and status_flag != 2
order by create_time desc limit 1 order by create_time desc limit 1
</select> </select>
...@@ -739,6 +734,13 @@ ...@@ -739,6 +734,13 @@
and status_flag in (1,3,4) and status_flag in (1,3,4)
</update> </update>
<select id="listByClerkId" resultType="String">
select member_id from tab_haoban_external_clerk_related
where staff_id = #{staffId}
and clerk_id = #{clerkId}
and status_flag = 1
</select>
<update id="updateExternalStatus"> <update id="updateExternalStatus">
update tab_haoban_external_clerk_related set external_status = #{status} where update tab_haoban_external_clerk_related set external_status = #{status} where
external_user_id = #{externalUserid} and wx_enterprise_id = #{wxEnterpriseId} external_user_id = #{externalUserid} and wx_enterprise_id = #{wxEnterpriseId}
...@@ -751,4 +753,15 @@ ...@@ -751,4 +753,15 @@
limit 1 limit 1
</select> </select>
<select id="listMemberAndStaff" resultType="java.lang.String">
select member_id
from tab_haoban_external_clerk_related
where member_id in
<foreach collection="memberIdList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
and staff_id = #{staffId}
and enterprise_id = #{enterpriseId}
AND status_flag = 1
</select>
</mapper> </mapper>
\ No newline at end of file
package com.gic.haoban.manage.web.controller.chat; package com.gic.haoban.manage.web.controller.chat;
import java.util.ArrayList; import cn.hutool.core.collection.CollUtil;
import java.util.List; import cn.hutool.core.convert.Convert;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gic.api.base.commons.BasePageInfo; import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.ExcelUtils;
import com.gic.commons.webapi.reponse.RestResponse; import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO; import com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO;
import com.gic.haoban.common.utils.AuthWebRequestUtil; import com.gic.haoban.common.utils.AuthWebRequestUtil;
import com.gic.haoban.manage.api.dto.StaffDTO; import com.gic.haoban.manage.api.dto.StaffDTO;
...@@ -28,11 +20,26 @@ import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatUserSearchQDTO; ...@@ -28,11 +20,26 @@ import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatUserSearchQDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.OwnerSearchQDTO; import com.gic.haoban.manage.api.dto.qdto.chat.OwnerSearchQDTO;
import com.gic.haoban.manage.api.service.StaffApiService; import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.chat.GroupChatApiService; import com.gic.haoban.manage.api.service.chat.GroupChatApiService;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.haoban.manage.web.log.LogRecordUserServiceImpl; import com.gic.haoban.manage.web.log.LogRecordUserServiceImpl;
import com.gic.log.record.anno.GicLogRecord; import com.gic.log.record.anno.GicLogRecord;
import com.gic.log.record.util.GicLogRecordCategoryEnum; import com.gic.log.record.util.GicLogRecordCategoryEnum;
import com.gic.log.record.util.GicLogRecordEvaluationContext; import com.gic.log.record.util.GicLogRecordEvaluationContext;
import com.gic.log.record.util.GicLogRecordOptTypeEnum; import com.gic.log.record.util.GicLogRecordOptTypeEnum;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/** /**
* *
...@@ -52,6 +59,8 @@ public class GroupChatController { ...@@ -52,6 +59,8 @@ public class GroupChatController {
private GroupChatApiService groupChatApiService; private GroupChatApiService groupChatApiService;
@Autowired @Autowired
private StaffApiService staffApiService; private StaffApiService staffApiService;
@Autowired
private EnterpriseService enterpriseService;
@RequestMapping("get-set-gic-flag") @RequestMapping("get-set-gic-flag")
public RestResponse<Object> getFlag() { public RestResponse<Object> getFlag() {
...@@ -204,5 +213,52 @@ public class GroupChatController { ...@@ -204,5 +213,52 @@ public class GroupChatController {
GicLogRecordEvaluationContext.putOptTargetId(AuthWebRequestUtil.getLoginUser().getClerkId()); GicLogRecordEvaluationContext.putOptTargetId(AuthWebRequestUtil.getLoginUser().getClerkId());
return RestResponse.successResult(resp.getResult()); return RestResponse.successResult(resp.getResult());
} }
/**
* 客户群列表数据明细导出
*/
@RequestMapping("customer-group-export")
public RestResponse<Boolean> customerGroupExport(HttpServletRequest request, HttpServletResponse response,GroupChatSearchQDTO qdto) {
// 登录校验
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
if (loginUser == null || StringUtils.isBlank(loginUser.getEnterpriseId())) {
return RestResponse.failure(Convert.toStr(HaoBanErrCode.ERR_4.getCode()), HaoBanErrCode.ERR_4.getMsg());
}
String sortColumn = qdto.getSortColumn();
if (StringUtils.isBlank(sortColumn)) {
sortColumn = null;
} else if ("totalCount".equals(sortColumn)) {
sortColumn = "total_count";
} else if ("totalMemberCount".equals(sortColumn)) {
sortColumn = "total_member_count";
} else if ("addMemberCount".equals(sortColumn)) {
sortColumn = "add_member_count";
} else if ("addCount".equals(sortColumn)) {
sortColumn = "add_count";
} else if ("quitCount".equals(sortColumn)) {
sortColumn = "quit_count";
} else if ("quitMemberCount".equals(sortColumn)) {
sortColumn = "quit_member_count";
}
BasePageInfo basePageInfo = new BasePageInfo() ;
basePageInfo.setPageNum(qdto.getPageNum());
basePageInfo.setPageSize(qdto.getPageSize());
qdto.setSortColumn(sortColumn);
qdto.setWxEnterpriseId(loginUser.getWxEnterpriseId());
qdto.setEnterpriseId(loginUser.getEnterpriseId());
ServiceResponse<Page<GroupChatDTO>> page = this.groupChatApiService.listPage(qdto, basePageInfo);
if (page.isSuccess() && CollUtil.isNotEmpty(page.getResult().getResult())){
String fileName = "客户群列表数据";
List<String> titleList = Arrays.asList("客户群ID", "客户群名称", "群人数", "群客户数", "新增总数", "流失总数","群主","群主在好办小程序关联状态","创建时间");
List<String> fileList = Arrays.asList("groupChatId", "name", "totalCount", "totalMemberCount", "addCount", "quitCount", "staffName", "clerkRelationExcel", "createTime");
try {
ExcelUtils.xls(response, request, fileName, page.getResult().getResult(), fileList, titleList);
} catch (Exception e) {
e.printStackTrace();
logger.info("导出失败");
}
return RestResponse.successResult(true);
}
return RestResponse.successResult(false);
}
} }
...@@ -47,6 +47,7 @@ import com.gic.haoban.common.utils.HaobanResponse; ...@@ -47,6 +47,7 @@ import com.gic.haoban.common.utils.HaobanResponse;
import com.gic.haoban.manage.api.dto.ClerkMainStoreRelatedDTO; import com.gic.haoban.manage.api.dto.ClerkMainStoreRelatedDTO;
import com.gic.haoban.manage.api.dto.EnterpriseDetailDTO; import com.gic.haoban.manage.api.dto.EnterpriseDetailDTO;
import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO; import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO;
import com.gic.haoban.manage.api.dto.ExternalMemberLogDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO; import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.MemberStoreDTO; import com.gic.haoban.manage.api.dto.MemberStoreDTO;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO; import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
...@@ -677,12 +678,23 @@ public class WxEnterpriseInfoController extends WebBaseController { ...@@ -677,12 +678,23 @@ public class WxEnterpriseInfoController extends WebBaseController {
@IgnoreLogin @IgnoreLogin
@RequestMapping("member-bind-friend") @RequestMapping("member-bind-friend")
public HaobanResponse memberBindFriend(String memberId, String enterpriseId, String unionid, String relationKey) { public HaobanResponse memberBindFriend(String memberId, String enterpriseId, String unionid, String relationKey) {
if (StringUtils.isAnyBlank(memberId, enterpriseId, relationKey)) { if (StringUtils.isAnyBlank(enterpriseId, relationKey , unionid)) {
logger.info("参数错误");
return resultResponse(HaoBanErrCode.ERR_2); return resultResponse(HaoBanErrCode.ERR_2);
} }
ExternalMemberLogDTO memberLog = new ExternalMemberLogDTO() ;
memberLog.setEnterpriseId(enterpriseId);
memberLog.setUnionid(unionid);
memberLog.setRelationKey(relationKey);
memberLog.setMemberId(memberId);
if(StringUtils.isEmpty(memberId)) {
this.memberUnionidRelatedApiService.saveExternalMemberLog(memberLog) ;
return resultResponse(HaoBanErrCode.ERR_1);
}
ExternalClerkRelatedDTO externalClerkRelatedDTO = externalClerkRelatedApiService.getExternalClerkByRelationKeyAndPre(relationKey); ExternalClerkRelatedDTO externalClerkRelatedDTO = externalClerkRelatedApiService.getExternalClerkByRelationKeyAndPre(relationKey);
if (externalClerkRelatedDTO == null) { if (externalClerkRelatedDTO == null) {
logger.info("会员绑定好友,该会员已经绑定成功,无需再次绑定,memberId:{},enterpriseId:{},unionid:{},relationKey:{}", memberId, enterpriseId, unionid, relationKey); this.memberUnionidRelatedApiService.saveExternalMemberLog(memberLog) ;
logger.info("好友表不存在记录,memberId:{},enterpriseId:{},unionid:{},relationKey:{}", memberId, enterpriseId, unionid, relationKey);
return resultResponse(HaoBanErrCode.ERR_1); return resultResponse(HaoBanErrCode.ERR_1);
} }
logger.info("会员绑定好友,memberId:{},enterpriseId:{},unionid:{},relationKey:{}", memberId, enterpriseId, unionid, relationKey); logger.info("会员绑定好友,memberId:{},enterpriseId:{},unionid:{},relationKey:{}", memberId, enterpriseId, unionid, relationKey);
......
...@@ -126,7 +126,12 @@ public class WxStaffController extends WebBaseController { ...@@ -126,7 +126,12 @@ public class WxStaffController extends WebBaseController {
List<StaffVO> resultList = new ArrayList<>(); List<StaffVO> resultList = new ArrayList<>();
for (StaffDTO staffDTO : resultlist) { for (StaffDTO staffDTO : resultlist) {
String enterpriseId = staffDTO.getEnterpriseId(); String enterpriseId = staffDTO.getEnterpriseId();
long memberCount = distributeApiService.getClerkMemberCount(enterpriseId, staffDTO.getClerkId(), storeId); String staffClerkId = staffDTO.getClerkId() ;
ClerkDTO clerk = this.clerkService.getclerkById(staffClerkId) ;
if(null != clerk) {
staffDTO.setStaffName(clerk.getClerkName());
}
long memberCount = customerApiService.countMember(enterpriseId, storeId, staffDTO.getClerkId());
logger.info("【获取会员数】enterpriseId={},clerkId={},storeId={},memberCount={}", enterpriseId, staffDTO.getClerkId(), storeId, memberCount); logger.info("【获取会员数】enterpriseId={},clerkId={},storeId={},memberCount={}", enterpriseId, staffDTO.getClerkId(), storeId, memberCount);
staffDTO.setMemberCount(Convert.toInt(memberCount, 0)); staffDTO.setMemberCount(Convert.toInt(memberCount, 0));
resultList.add(EntityUtil.changeEntityNew(StaffVO.class, staffDTO)); resultList.add(EntityUtil.changeEntityNew(StaffVO.class, staffDTO));
...@@ -563,15 +568,7 @@ public class WxStaffController extends WebBaseController { ...@@ -563,15 +568,7 @@ public class WxStaffController extends WebBaseController {
@HttpLimit @HttpLimit
@RequestMapping("/check-main-store") @RequestMapping("/check-main-store")
public HaobanResponse checkMainStore(String staffId, String storeId, String wxEnterpriseId, String dateStr) { public HaobanResponse checkMainStore(String staffId, String storeId, String wxEnterpriseId, String dateStr) {
StaffDTO staff = staffApiService.selectById(staffId);
Date curDate = new Date(); Date curDate = new Date();
if (staff == null) {
return resultResponse(HaoBanErrCode.ERR_10006);
}
//给测试使用
if (StringUtils.isNotBlank(dateStr)) {
curDate = cn.hutool.core.date.DateUtil.parse(dateStr);
}
int i = cn.hutool.core.date.DateUtil.weekOfYear(curDate); int i = cn.hutool.core.date.DateUtil.weekOfYear(curDate);
String key = "haoban_set_main_store_" + i + ":" + staffId; String key = "haoban_set_main_store_" + i + ":" + staffId;
Object hasSet = RedisUtil.getCache(key); Object hasSet = RedisUtil.getCache(key);
......
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