Commit 3b9926c6 by 徐高华

Merge branch 'feature/五月二期' into 'developer'

好友查询

See merge request !1306
parents 4e9217cf 2b5a2950
package com.gic.haoban.manage.service.dao.mapper;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.github.pagehelper.Page;
public interface TabHaobanExternalClerkRelatedMapper {
int insertSelective(TabHaobanExternalClerkRelated record);
TabHaobanExternalClerkRelated selectByPrimaryKey(String externalClerkRelatedId);
int updateByPrimaryKeySelective(TabHaobanExternalClerkRelated record);
TabHaobanExternalClerkRelated selectByClerkIdAndExternalUserId(@Param("clerkId") String clerkId,
@Param("externalUserId") String externalUserId);
int delByUserIdAndExternalUserId(@Param("externalUserId") String externalUserId , @Param("staffId") String staffId);
void delByUserIdAndExternalUserIdBatch(@Param("staffId") String staffId,
@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("externalUserIds") List<String> externalUserIds);
void delByClerkIdAndStaffId(@Param("clerkId") String clerkId, @Param("staffId") String staffId);
void delByStoreIdAndStaffId(@Param("storeId") String storeId, @Param("staffId") String staffId);
int delByStoreIds(@Param("storeIds") Collection<String> storeIds);
void cleanStaffRelated(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIds") List<String> staffIds);
List<TabHaobanExternalClerkRelated> listByExTernalUseridAndWxUserId(@Param("externalUserid") String externalUserid,
@Param("staffId") String staffId,
@Param("statusFlag") Integer statusFlag);
/**
* 查询该会员该企业下的好友关系
*
* @param externalUserid 外部用户标识
* @param wxEnterpriseId wx企业标识
* @param statusFlags 状态标志
* @return {@link List<TabHaobanExternalClerkRelated> }
* @author mozhu
* @date 2022-02-10 10:11:21
*/
List<TabHaobanExternalClerkRelated> listByExternalUseridAndWxEnterpriseId(@Param("externalUserid") String externalUserid,
@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("statusFlags") List<String> statusFlags);
List<TabHaobanExternalClerkRelated> listByExTernalUseridAndWxUserIdAllStatus(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("externalUserid") String externalUserid,
@Param("staffId") String staffId);
List<TabHaobanExternalClerkRelated> listByEnterpriseIdAndDate(@Param("enterpriseId") String enterpriseId,
@Param("date") Date date);
Page<TabHaobanExternalClerkRelated> pageMemberUnionByParams(@Param("staffIdList") List<String> staffIdList,
@Param("sendMemberIds") List<String> sendMemberIds,
@Param("enterpriseId") String enterpriseId);
List<TabHaobanExternalClerkRelated> listByWxEnterpriseIdAndWxUserId(@Param("staffId") String staffId,
@Param("wxEnterpriseId") String wxEnterpriseId);
List<TabHaobanExternalClerkRelated> listByWxEnterpriseIdAndWxUserIds(@Param("staffIdList") List<String> staffIdList,
@Param("wxEnterpriseId") String wxEnterpriseId);
TabHaobanExternalClerkRelated getByMemberId(@Param("staffId") String staffId, @Param("memberId") String memberId);
/**
* 外部联系人的unionid
*
* @param enterpriseId
* @param unionId
* @return
*/
List<TabHaobanExternalClerkRelated> listExternalByUnionId(@Param("enterpriseId") String enterpriseId,
@Param("unionId") String unionId);
/**
* @param relationKey
* @return
*/
TabHaobanExternalClerkRelated getByRelationKey(@Param("relationKey") String relationKey , @Param("filterMember")int filterMember);
/**
* 列表数据 根据状态 时间倒序
*
* @param wxEnterpriseId
* @param staffId
* @param statusFlags
* @return
*/
List<TabHaobanExternalClerkRelated> listByWxEnterpriseIdAndWxUserIdAndStatus(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId,
@Param("statusFlags") List<Integer> statusFlags);
/**
* 触达会员 给会员发送
*
* @param relationKey
* @return
*/
int pushExternalByRelationKey(@Param("relationKey") String relationKey);
/**
* 获取企业下的关联关系列表
*
* @param wxEnterpriseId
* @param wxUserId
* @param enterpriseId
* @param externalUserId
* @return
*/
TabHaobanExternalClerkRelated getExternalClerkByWxUserIdAncExternalUserId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId,
@Param("enterpriseId") String enterpriseId,
@Param("externalUserId") String externalUserId);
/**
* 查询会员在企业下的好友关系
*
* @param memberId
* @param wxEnterpriseId
* @param enterpriseId
* @return
*/
List<TabHaobanExternalClerkRelated> listByMemberIdAndWxEnterpriseId(@Param("memberId") String memberId,
@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("enterpriseId") String enterpriseId);
/**
* 查询会员在企业下的好友关系
*
* @param memberId
* @param wxEnterpriseId
* @param enterpriseId
* @return
*/
List<ExternalClerkRelatedDTO> listByMemberIdList(@Param("memberIdList") List<String> memberIdList,
@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("enterpriseId") String enterpriseId);
/**
* 获取最新的最近的外部联系人
*
* @param externalUserid
* @param wxUserId
* @return
*/
TabHaobanExternalClerkRelated getLastByExTernalUseridAndWxUserIdNoStatus(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("externalUserid") String externalUserid, @Param("staffId") String staffId);
/**
* 根据id 查询列表
*
* @param wxEnterpriseId
* @param ids
* @return
*/
List<TabHaobanExternalClerkRelated> listByIds(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("ids") List<String> ids);
/**
* 根据企业id 查询列表
*
* @param wxEnterpriseId
* @return
*/
List<String> listMemberIdByEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("enterpriseId") String enterpriseId);
/**
* 查询会员在企业下的好友关系memberIds 根据会员ids
*
* @param memberIds
* @param wxEnterpriseId
* @return
*/
List<String> listMemberIdsByMemberIds(@Param("memberIds") List<String> memberIds,
@Param("wxEnterpriseId") String wxEnterpriseId);
/**
* 查询会员在企业下的好友关系 根据会员id
*
* @param memberId
* @param enterpriseId
* @return
*/
List<TabHaobanExternalClerkRelated> listByMemberId(@Param("memberId") String memberId,
@Param("enterpriseId") String enterpriseId);
/**
* 通过会员id查询门店id
*
* @param memberId 成员身份
* @return {@link List }<{@link String }>
* @author mozhu
* @date 2022-07-06 14:40:15
*/
List<String> listStoreIdByMemberId(@Param("memberId") String memberId);
/**
* 查询会员在企业下的好友关系 根据会员id
*
* @param wxEnterpriseId
* @return
*/
List<TabHaobanExternalClerkRelated> listByExternalUserId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("externalUserId") String externalUserId);
/**
* 根据会员id更新新老会员id
*
* @param memberId
* @param oldMemberId 老会员id
* @param enterpriseId 企业标识
* @return int
* @author mozhu
* @date 2022-03-24 10:28:40
*/
int updateMemberIdByMemberId(@Param("memberId") String memberId,
@Param("oldMemberId") String oldMemberId,
@Param("enterpriseId") String enterpriseId);
/**
* 更新状态通过会员id
*
* @param memberId 会员ID
* @param enterpriseId 企业id
* @return int
* @author mozhu
* @date 2021-09-13 16:59:49
*/
int updateStatusByMemberId(@Param("memberId") String memberId, @Param("enterpriseId") String enterpriseId);
/**
* 通过会员id和员工id查询数据
*
* @param staffId 员工id
* @param enterpriseId 企业标识
* @param memberId 会员ID
* @return {@link TabHaobanExternalClerkRelated }
* @author mozhu
* @date 2021-10-21 10:41:28
*/
TabHaobanExternalClerkRelated getByMemberIdAndStaffId(@Param("staffId") String staffId,
@Param("enterpriseId") String enterpriseId,
@Param("memberId") String memberId);
TabHaobanExternalClerkRelated getByUnionIdAndStaffId(@Param("staffId") String staffId,
@Param("enterpriseId") String enterpriseId,
@Param("unionId") String unionId);
/**
* 根据企业id分页
*
* @param wxEnterpriseId 企业标识
* @return {@link List<TabHaobanExternalClerkRelated> }
* @author mozhu
* @date 2021-12-13 14:59:03
*/
List<TabHaobanExternalClerkRelated> pageExternalByEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId);
/**
* 更新外部用户id的老外部用户id
*
* @param newExternalUserId 外部用户id
* @param oldExternalUserId 旧的外部用户id
* @param wxEnterpriseId wx企业标识
* @return int
* @author mozhu
* @date 2021-12-13 15:33:41
*/
int updateExternalUserIdByOldExternalUserId(@Param("newExternalUserId") String newExternalUserId,
@Param("oldExternalUserId") String oldExternalUserId,
@Param("wxEnterpriseId") String wxEnterpriseId);
/**
* 获取好友数量
*
* @param wxEnterpriseId 企业id
* @param enterpriseId 商户id
* @param staffId 企业微信导购账号
* @param clerkId 导购id
* @return
*/
int countByClerkId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("enterpriseId") String enterpriseId,
@Param("staffId") String staffId,
@Param("clerkId") String clerkId);
/**
* 客户好友需触达列表
*/
TabHaobanExternalClerkRelated getByEnterpriseIdAndExternalUserId(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffId") String staffId,
@Param("enterpriseId") String enterpriseId, @Param("externalUserId") String externalUserId);
/**
* 查询所有好友关系
*
* @param wxEnterpriseId wx企业标识
* @param staffId wx用户id
* @return {@link List}<{@link TabHaobanExternalClerkRelated}>
*/
List<TabHaobanExternalClerkRelated> getByWxUserIdAndWxEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId);
/**
* 根据staffId和会员unionid进行查询数据
*/
TabHaobanExternalClerkRelated getByWxEnterpriseIdAndUnionId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId,
@Param("unionid") String unionid);
/**
* 查询最新的会员好友
*
* @param enterpriseId 企业标识
* @param memberId 成员身份
* @param statusFlag 状态标志
* @return {@link TabHaobanExternalClerkRelated }
* @author mozhu
* @date 2022-04-15 17:12:38
*/
TabHaobanExternalClerkRelated getByEnterpriseIdAndMemberId(@Param("enterpriseId") String enterpriseId,
@Param("memberId") String memberId,
@Param("statusFlag") Integer statusFlag);
/**
* 会员好友数量
*
* @param memberId 成员身份
* @param enterpriseId 企业标识
* @return int
* @author mozhu
* @date 2022-04-21 10:06:21
*/
int countByMemberId(@Param("memberId") String memberId, @Param("enterpriseId") String enterpriseId);
List<String> getIdList(@Param("memberId") String memberId, @Param("enterpriseId") String enterpriseId) ;
void updateMemberByIdList(@Param("memberId") String memberId, @Param("list") List<String> idList) ;
List<TabHaobanExternalClerkRelated> listPageByWxenterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("startItem") int startItem, @Param("pageSize") int pageSize ,@Param("type") int type);
/**
* 获取所有的好友会员id
*
* @param storeId 存储id
* @param staffId 员工id
* @return {@link List}<{@link String}>
*/
List<String> getByStoreIdAndStaffId(@Param("storeId") String storeId,
@Param("staffId") String staffId);
List<String> listMemberAndClerk(@Param("memberIdList")List<String> memberIdList, @Param("clerkIdList")List<String> clerkIdList, @Param("enterpriseId")String enterpriseId);
int getCountExternalClerk(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId,
@Param("statusFlags") List<Integer> statusFlags);
int getCountByMemberId(@Param("memberId") String memberId);
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);
/**
* 通过第三方或者待开发查询是否好友
*/
TabHaobanExternalClerkRelated getMemberForExternalId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("externalUserId") String externalUserId);
List<String> listMemberAndStaff(@Param("memberIdList")List<String> memberIdList, @Param("staffId")String staffId, @Param("enterpriseId")String enterpriseId);
/**
* 查询成员的好友列表
*/
List<String> queryExternalUserIdWithStaffId(@Param("staffId") String staffId);
/**
* 查询会员与导购的好友关系
* @param staffId
* @param memberIds
* @return
*/
List<TabHaobanExternalClerkRelated> queryClerkMemberRelations(@Param("staffId") String staffId, @Param("memberIds") List<String> memberIds);
/**
* 查询企业微信下面 外部联系人是null的所有成员
* @param wxEnterpriseId
* @param enterpriseIdList
* @return
*/
List<String> listByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("enterpriseIdList") List<String> enterpriseIdList);
/**
* 删除企业微信下面,所有外部联系人是null的成员
* @param wxEnterpriseId
* @param enterpriseIdList
*/
void deleteByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("enterpriseIdList") List<String> enterpriseIdList);
package com.gic.haoban.manage.service.dao.mapper;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.github.pagehelper.Page;
public interface TabHaobanExternalClerkRelatedMapper {
int insertSelective(TabHaobanExternalClerkRelated record);
TabHaobanExternalClerkRelated selectByPrimaryKey(String externalClerkRelatedId);
int updateByPrimaryKeySelective(TabHaobanExternalClerkRelated record);
TabHaobanExternalClerkRelated selectByClerkIdAndExternalUserId(@Param("clerkId") String clerkId,
@Param("externalUserId") String externalUserId);
int delByUserIdAndExternalUserId(@Param("externalUserId") String externalUserId , @Param("staffId") String staffId);
void delByUserIdAndExternalUserIdBatch(@Param("staffId") String staffId,
@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("externalUserIds") List<String> externalUserIds);
void delByClerkIdAndStaffId(@Param("clerkId") String clerkId, @Param("staffId") String staffId);
void delByStoreIdAndStaffId(@Param("storeId") String storeId, @Param("staffId") String staffId);
int delByStoreIds(@Param("storeIds") Collection<String> storeIds);
void cleanStaffRelated(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIds") List<String> staffIds);
List<TabHaobanExternalClerkRelated> listByExTernalUseridAndWxUserId(@Param("externalUserid") String externalUserid,
@Param("staffId") String staffId,
@Param("statusFlag") Integer statusFlag);
/**
* 查询该会员该企业下的好友关系
*
* @param externalUserid 外部用户标识
* @param wxEnterpriseId wx企业标识
* @param statusFlags 状态标志
* @return {@link List<TabHaobanExternalClerkRelated> }
* @author mozhu
* @date 2022-02-10 10:11:21
*/
List<TabHaobanExternalClerkRelated> listByExternalUseridAndWxEnterpriseId(@Param("externalUserid") String externalUserid,
@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("statusFlags") List<String> statusFlags);
List<TabHaobanExternalClerkRelated> listByExTernalUseridAndWxUserIdAllStatus(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("externalUserid") String externalUserid,
@Param("staffId") String staffId);
List<TabHaobanExternalClerkRelated> listByEnterpriseIdAndDate(@Param("enterpriseId") String enterpriseId,
@Param("date") Date date);
Page<TabHaobanExternalClerkRelated> pageMemberUnionByParams(@Param("staffIdList") List<String> staffIdList,
@Param("sendMemberIds") List<String> sendMemberIds,
@Param("enterpriseId") String enterpriseId);
List<TabHaobanExternalClerkRelated> listByWxEnterpriseIdAndWxUserId(@Param("staffId") String staffId,
@Param("wxEnterpriseId") String wxEnterpriseId);
List<TabHaobanExternalClerkRelated> listByWxEnterpriseIdAndWxUserIds(@Param("staffIdList") List<String> staffIdList,
@Param("wxEnterpriseId") String wxEnterpriseId);
TabHaobanExternalClerkRelated getByMemberId(@Param("staffId") String staffId, @Param("memberId") String memberId);
/**
* 外部联系人的unionid
*
* @param enterpriseId
* @param unionId
* @return
*/
List<TabHaobanExternalClerkRelated> listExternalByUnionId(@Param("enterpriseId") String enterpriseId,
@Param("unionId") String unionId);
/**
* @param relationKey
* @return
*/
TabHaobanExternalClerkRelated getByRelationKey(@Param("relationKey") String relationKey , @Param("filterMember")int filterMember);
/**
* 列表数据 根据状态 时间倒序
*
* @param wxEnterpriseId
* @param staffId
* @param statusFlags
* @return
*/
List<TabHaobanExternalClerkRelated> listByWxEnterpriseIdAndWxUserIdAndStatus(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId,
@Param("statusFlags") List<Integer> statusFlags);
/**
* 触达会员 给会员发送
*
* @param relationKey
* @return
*/
int pushExternalByRelationKey(@Param("relationKey") String relationKey);
/**
* 获取企业下的关联关系列表
*
* @param wxEnterpriseId
* @param wxUserId
* @param enterpriseId
* @param externalUserId
* @return
*/
TabHaobanExternalClerkRelated getExternalClerkByWxUserIdAncExternalUserId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId,
@Param("enterpriseId") String enterpriseId,
@Param("externalUserId") String externalUserId);
TabHaobanExternalClerkRelated getExternalClerkByWxUserIdAncExternalUserIdSelf(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId,
@Param("enterpriseId") String enterpriseId,
@Param("externalUserId") String externalUserId);
/**
* 查询会员在企业下的好友关系
*
* @param memberId
* @param wxEnterpriseId
* @param enterpriseId
* @return
*/
List<TabHaobanExternalClerkRelated> listByMemberIdAndWxEnterpriseId(@Param("memberId") String memberId,
@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("enterpriseId") String enterpriseId);
/**
* 查询会员在企业下的好友关系
*
* @param memberId
* @param wxEnterpriseId
* @param enterpriseId
* @return
*/
List<ExternalClerkRelatedDTO> listByMemberIdList(@Param("memberIdList") List<String> memberIdList,
@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("enterpriseId") String enterpriseId);
/**
* 获取最新的最近的外部联系人
*
* @param externalUserid
* @param wxUserId
* @return
*/
TabHaobanExternalClerkRelated getLastByExTernalUseridAndWxUserIdNoStatus(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("externalUserid") String externalUserid, @Param("staffId") String staffId);
/**
* 根据id 查询列表
*
* @param wxEnterpriseId
* @param ids
* @return
*/
List<TabHaobanExternalClerkRelated> listByIds(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("ids") List<String> ids);
/**
* 根据企业id 查询列表
*
* @param wxEnterpriseId
* @return
*/
List<String> listMemberIdByEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("enterpriseId") String enterpriseId);
/**
* 查询会员在企业下的好友关系memberIds 根据会员ids
*
* @param memberIds
* @param wxEnterpriseId
* @return
*/
List<String> listMemberIdsByMemberIds(@Param("memberIds") List<String> memberIds,
@Param("wxEnterpriseId") String wxEnterpriseId);
/**
* 查询会员在企业下的好友关系 根据会员id
*
* @param memberId
* @param enterpriseId
* @return
*/
List<TabHaobanExternalClerkRelated> listByMemberId(@Param("memberId") String memberId,
@Param("enterpriseId") String enterpriseId);
/**
* 通过会员id查询门店id
*
* @param memberId 成员身份
* @return {@link List }<{@link String }>
* @author mozhu
* @date 2022-07-06 14:40:15
*/
List<String> listStoreIdByMemberId(@Param("memberId") String memberId);
/**
* 查询会员在企业下的好友关系 根据会员id
*
* @param wxEnterpriseId
* @return
*/
List<TabHaobanExternalClerkRelated> listByExternalUserId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("externalUserId") String externalUserId);
/**
* 根据会员id更新新老会员id
*
* @param memberId
* @param oldMemberId 老会员id
* @param enterpriseId 企业标识
* @return int
* @author mozhu
* @date 2022-03-24 10:28:40
*/
int updateMemberIdByMemberId(@Param("memberId") String memberId,
@Param("oldMemberId") String oldMemberId,
@Param("enterpriseId") String enterpriseId);
/**
* 更新状态通过会员id
*
* @param memberId 会员ID
* @param enterpriseId 企业id
* @return int
* @author mozhu
* @date 2021-09-13 16:59:49
*/
int updateStatusByMemberId(@Param("memberId") String memberId, @Param("enterpriseId") String enterpriseId);
/**
* 通过会员id和员工id查询数据
*
* @param staffId 员工id
* @param enterpriseId 企业标识
* @param memberId 会员ID
* @return {@link TabHaobanExternalClerkRelated }
* @author mozhu
* @date 2021-10-21 10:41:28
*/
TabHaobanExternalClerkRelated getByMemberIdAndStaffId(@Param("staffId") String staffId,
@Param("enterpriseId") String enterpriseId,
@Param("memberId") String memberId);
TabHaobanExternalClerkRelated getByUnionIdAndStaffId(@Param("staffId") String staffId,
@Param("enterpriseId") String enterpriseId,
@Param("unionId") String unionId);
/**
* 根据企业id分页
*
* @param wxEnterpriseId 企业标识
* @return {@link List<TabHaobanExternalClerkRelated> }
* @author mozhu
* @date 2021-12-13 14:59:03
*/
List<TabHaobanExternalClerkRelated> pageExternalByEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId);
/**
* 更新外部用户id的老外部用户id
*
* @param newExternalUserId 外部用户id
* @param oldExternalUserId 旧的外部用户id
* @param wxEnterpriseId wx企业标识
* @return int
* @author mozhu
* @date 2021-12-13 15:33:41
*/
int updateExternalUserIdByOldExternalUserId(@Param("newExternalUserId") String newExternalUserId,
@Param("oldExternalUserId") String oldExternalUserId,
@Param("wxEnterpriseId") String wxEnterpriseId);
/**
* 获取好友数量
*
* @param wxEnterpriseId 企业id
* @param enterpriseId 商户id
* @param staffId 企业微信导购账号
* @param clerkId 导购id
* @return
*/
int countByClerkId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("enterpriseId") String enterpriseId,
@Param("staffId") String staffId,
@Param("clerkId") String clerkId);
/**
* 客户好友需触达列表
*/
TabHaobanExternalClerkRelated getByEnterpriseIdAndExternalUserId(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffId") String staffId,
@Param("enterpriseId") String enterpriseId, @Param("externalUserId") String externalUserId);
/**
* 查询所有好友关系
*
* @param wxEnterpriseId wx企业标识
* @param staffId wx用户id
* @return {@link List}<{@link TabHaobanExternalClerkRelated}>
*/
List<TabHaobanExternalClerkRelated> getByWxUserIdAndWxEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId);
/**
* 根据staffId和会员unionid进行查询数据
*/
TabHaobanExternalClerkRelated getByWxEnterpriseIdAndUnionId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId,
@Param("unionid") String unionid);
/**
* 查询最新的会员好友
*
* @param enterpriseId 企业标识
* @param memberId 成员身份
* @param statusFlag 状态标志
* @return {@link TabHaobanExternalClerkRelated }
* @author mozhu
* @date 2022-04-15 17:12:38
*/
TabHaobanExternalClerkRelated getByEnterpriseIdAndMemberId(@Param("enterpriseId") String enterpriseId,
@Param("memberId") String memberId,
@Param("statusFlag") Integer statusFlag);
/**
* 会员好友数量
*
* @param memberId 成员身份
* @param enterpriseId 企业标识
* @return int
* @author mozhu
* @date 2022-04-21 10:06:21
*/
int countByMemberId(@Param("memberId") String memberId, @Param("enterpriseId") String enterpriseId);
List<String> getIdList(@Param("memberId") String memberId, @Param("enterpriseId") String enterpriseId) ;
void updateMemberByIdList(@Param("memberId") String memberId, @Param("list") List<String> idList) ;
List<TabHaobanExternalClerkRelated> listPageByWxenterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("startItem") int startItem, @Param("pageSize") int pageSize ,@Param("type") int type);
/**
* 获取所有的好友会员id
*
* @param storeId 存储id
* @param staffId 员工id
* @return {@link List}<{@link String}>
*/
List<String> getByStoreIdAndStaffId(@Param("storeId") String storeId,
@Param("staffId") String staffId);
List<String> listMemberAndClerk(@Param("memberIdList")List<String> memberIdList, @Param("clerkIdList")List<String> clerkIdList, @Param("enterpriseId")String enterpriseId);
int getCountExternalClerk(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId,
@Param("statusFlags") List<Integer> statusFlags);
int getCountByMemberId(@Param("memberId") String memberId);
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);
/**
* 通过第三方或者待开发查询是否好友
*/
TabHaobanExternalClerkRelated getMemberForExternalId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("externalUserId") String externalUserId);
List<String> listMemberAndStaff(@Param("memberIdList")List<String> memberIdList, @Param("staffId")String staffId, @Param("enterpriseId")String enterpriseId);
/**
* 查询成员的好友列表
*/
List<String> queryExternalUserIdWithStaffId(@Param("staffId") String staffId);
/**
* 查询会员与导购的好友关系
* @param staffId
* @param memberIds
* @return
*/
List<TabHaobanExternalClerkRelated> queryClerkMemberRelations(@Param("staffId") String staffId, @Param("memberIds") List<String> memberIds);
/**
* 查询企业微信下面 外部联系人是null的所有成员
* @param wxEnterpriseId
* @param enterpriseIdList
* @return
*/
List<String> listByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("enterpriseIdList") List<String> enterpriseIdList);
/**
* 删除企业微信下面,所有外部联系人是null的成员
* @param wxEnterpriseId
* @param enterpriseIdList
*/
void deleteByWxEnterpriseId(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("enterpriseIdList") List<String> enterpriseIdList);
}
\ No newline at end of file
package com.gic.haoban.manage.service.service.out.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.api.base.dto.SubscribeMessageDTO;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.app.customer.enums.GicQywxSyncTypeEnum;
import com.gic.haoban.app.customer.enums.QywxSyncTaskTypeEnum;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.base.api.common.errCode.HaoBanErrCodeCommon;
import com.gic.haoban.common.utils.PageUtil;
import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.enums.AlertTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskTypeEnum;
import com.gic.haoban.manage.api.service.CheckQywxSettingApiService;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.api.service.ExternalClerkRelatedApiService;
import com.gic.haoban.manage.api.service.WxEnterpriseApiService;
import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.dao.mapper.*;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise;
import com.gic.haoban.manage.service.entity.ext.MemberStaffRelExtDO;
import com.gic.haoban.manage.service.pojo.QywxTagSyncInfoPojo;
import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.haoban.manage.service.service.hm.WxUserAddLogService;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.dto.MemberSourceDetailDTO;
import com.gic.member.api.dto.MemberSourceShowDTO;
import com.gic.member.api.service.MemberApiService;
import com.gic.member.api.service.MemberEntranceApiService;
import com.gic.member.api.service.MemberService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import com.gic.wechat.api.service.qywx.QywxUserApiService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
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.redisson.api.RRateLimiter;
import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service
public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedApiService {
private static final Logger log = LogManager.getLogger(ExternalClerkRelatedApiServiceImpl.class);
@Autowired
private TabHaobanExternalClerkRelatedMapper tabHaobanExternalClerkRelatedMapper;
@Autowired
private TabHaobanStaffClerkRelationMapper staffClerkRelationMapper;
@Autowired
private WxEnterpriseMapper wxEnterriseMapper;
@Autowired
private QywxUserApiService qywxUserApiService;
@Autowired
private Config config;
@Autowired
private ExternalUseridLogMapper externalUseridLogMapper;
@Autowired
private CheckQywxSettingApiService checkQywxSettingApiService;
@Autowired
private WxEnterpriseApiService wxEnterpriseApiService;
@Autowired
private MemberApiService memberApiService;
@Autowired
private WxUserAddLogService wxUserAddLogService;
@Autowired
private WxEnterpriseService wxEnterpriseService;
@Autowired
private DealSyncOperationApiService dealSyncOperationApiService;
@Autowired
private MemberEntranceApiService memberEntranceApiService;
@Autowired
private StoreService storeService;
@Autowired
private ClerkService clerkService;
@Autowired
private MemberService memberService;
/**
* 查询会员在企业下的好友关系
*
* @param memberId : 会员id
* @param wxEnterpriseId : 微信企业id
* @param enterpriseId : 企业id
* @return : 返回会员导购关联关系
*/
@Override
public List<ExternalClerkRelatedDTO> listByMemberIdAndWxEnterpriseId(String memberId, String wxEnterpriseId, String enterpriseId) {
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByMemberIdAndWxEnterpriseId(memberId, wxEnterpriseId, enterpriseId);
return EntityUtil.changeEntityListByJSON(ExternalClerkRelatedDTO.class, list);
}
@Override
public List<ExternalClerkRelatedDTO> listByMemberIdList(List<String> memberIdList, String wxEnterpriseId,
String enterpriseId) {
List<ExternalClerkRelatedDTO> list = tabHaobanExternalClerkRelatedMapper.listByMemberIdList(memberIdList, wxEnterpriseId, enterpriseId);
return list;
}
@Override
public List<ExternalClerkRelatedDTO> listByWxEnterpriseIdAndWxUserId(String staffId, String wxEnterpriseId) {
return EntityUtil.changeEntityListByJSON(ExternalClerkRelatedDTO.class, tabHaobanExternalClerkRelatedMapper.listByWxEnterpriseIdAndWxUserId(staffId, wxEnterpriseId));
}
@Override
public List<ExternalClerkRelatedDTO> listByWxEnterpriseIdAndWxUserIds(List<String> staffIdList, String wxEnterpriseId) {
if (CollectionUtils.isEmpty(staffIdList)) {
return Collections.emptyList();
}
return EntityUtil.changeEntityListByJSON(ExternalClerkRelatedDTO.class, tabHaobanExternalClerkRelatedMapper.listByWxEnterpriseIdAndWxUserIds(staffIdList, wxEnterpriseId));
}
@Override
public ExternalClerkRelatedDTO getExternalClerkByRelationKeyAndPre(String relationKey) {
TabHaobanExternalClerkRelated related = tabHaobanExternalClerkRelatedMapper.getByRelationKey(relationKey,0);
return EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, related);
}
@Override
public Page<ExternalClerkRelatedDTO> pageExternalClerk(String wxEnterpriseId, String staffId, List<Integer> statusFlags, BasePageInfo pageInfo) {
PageHelper.startPage(pageInfo);
List<TabHaobanExternalClerkRelated> ret = tabHaobanExternalClerkRelatedMapper.listByWxEnterpriseIdAndWxUserIdAndStatus(wxEnterpriseId, staffId, statusFlags);
return PageUtil.changePageHelperToCurrentPage(new PageInfo<>(ret), ExternalClerkRelatedDTO.class);
}
@Override
public boolean pushExternalByRelationKey(String relationKey) {
tabHaobanExternalClerkRelatedMapper.pushExternalByRelationKey(relationKey);
return true;
}
@Override
public List<ExternalClerkRelatedDTO> listByEnterpriseIdAndDate(
String enterpriseId, Date date) {
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByEnterpriseIdAndDate(enterpriseId, date);
return EntityUtil.changeEntityListByJSON(ExternalClerkRelatedDTO.class, list);
}
@Override
public Page<ExternalClerkRelatedDTO> pageMemberUnionByParams(List<String> userIdList, List<String> sendMemberIds,
String enterpriseId, BasePageInfo pageInfo) {
PageHelper.startPage(pageInfo.getPageNum(), pageInfo.getPageSize());
return PageUtil.changePageHelperToCurrentPage(tabHaobanExternalClerkRelatedMapper.pageMemberUnionByParams(userIdList, sendMemberIds, enterpriseId), ExternalClerkRelatedDTO.class);
}
@Override
public ServiceResponse<ExternalClerkRelatedDTO> bindMemberIdExternalByRelationKey(String relationKey, String enterpriseId, String memberId, String unionid) {
ServiceResponse<ExternalClerkRelatedDTO> resp = new ServiceResponse<>();
TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByRelationKey(relationKey,1);
if (null == externalClerkRelated) {
log.error("relationKey对应的关联关系不存在或删除:relationKey:{},memberId:{},unionid:{}", relationKey, memberId, unionid);
resp.setCode(0);
resp.setMessage("relationKey对应的关联关系不存在或删除");
return resp;
}
if (!externalClerkRelated.getEnterpriseId().equals(enterpriseId)) {
log.error("relationKey对应的企业与所传会员企业不对应:relationKey:{},memberId:{},unionid:{}", relationKey, memberId, unionid);
resp.setCode(0);
resp.setMessage("relationKey对应的企业与所传会员企业不对应");
return resp;
}
updateExternalClerkRelated(enterpriseId, memberId, unionid, externalClerkRelated);
resp.setResult(EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, externalClerkRelated));
return resp;
}
@Override
public boolean bindMemberIdExternalById(String externalClerkRelatedId, String enterpriseId, String memberId, String unionid) {
TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.selectByPrimaryKey(externalClerkRelatedId);
if (externalClerkRelated == null) {
log.error("查询好办与gic数据为空,externalClerkRelatedId:{},enterpriseId:{},memberId:{},unionid:{}", externalClerkRelatedId, enterpriseId, memberId, unionid);
return false;
}
updateExternalClerkRelated(enterpriseId, memberId, unionid, externalClerkRelated);
return true;
}
/**
* 更新好友关系
*
* @param enterpriseId
* @param memberId
* @param unionid
* @param externalClerkRelated
*/
private void updateExternalClerkRelated(String enterpriseId, String memberId, String unionid, TabHaobanExternalClerkRelated externalClerkRelated) {
externalClerkRelated.setMemberId(memberId);
externalClerkRelated.setUnionid(unionid);
externalClerkRelated.setUpdateTime(new Date());
externalClerkRelated.setStatusFlag(1);
tabHaobanExternalClerkRelatedMapper.updateByPrimaryKeySelective(externalClerkRelated);
String wxEnterpriseId = externalClerkRelated.getWxEnterpriseId();
//同步标签
pushTagSync(memberId, wxEnterpriseId, enterpriseId);
//回调给会员,更新是否为企微好友
log.info("通知会员 合并会员后更新为企微好友,memberId:{}", memberId);
memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
//定制
addDelFriendEvent(unionid, externalClerkRelated.getClerkId(), wxEnterpriseId, enterpriseId, memberId, externalClerkRelated.getStoreId(), 1);
//日志
wxUserAddLogService.updateMemberInfo(wxEnterpriseId, enterpriseId, externalClerkRelated.getStaffId(), externalClerkRelated.getExternalUserId(), memberId);
}
/**
* 欧泊莱定制需求
*
* @param unionId
* @param clerkId
* @param enterpriseId
* @param memberId
* @param storeId
*/
private void addDelFriendEvent(String unionId, String clerkId, String wxEnterpriseId, String enterpriseId, String memberId, String storeId, Integer changeType) {
String addDelFriendEvent = config.getAddDelFriendEvent();
if (!addDelFriendEvent.contains(wxEnterpriseId)) {
log.info("非定制,无需广播通知");
return;
}
if (StringUtils.isBlank(memberId)) {
log.info("会员不存在:{}", memberId);
return;
}
log.info("欧泊莱定制:推送会员,memberId:{},changeType:{}", memberId, changeType);
//欧泊莱定制需求
ClerkDTO clerkDTO = clerkService.getClerkByClerkIdNoStatus(clerkId);
StoreDTO storeDTO = storeService.getStore(storeId);
MemberDTO member = memberService.getMember(memberId);
if (member == null) {
log.info("会员不存在:{}", memberId);
return;
}
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
JSONObject msgBody = new JSONObject();
msgBody.put("cardNo", member.getCardNum());
msgBody.put("enterpriseId", enterpriseId);
msgBody.put("unionid", unionId);
if (storeDTO != null) {
msgBody.put("storeName", storeDTO.getStoreName());
msgBody.put("storeCode", storeDTO.getStoreCode());
}
if (clerkDTO != null) {
msgBody.put("clerkName", clerkDTO.getClerkName());
msgBody.put("clerkCode", clerkDTO.getClerkCode());
}
msgBody.put("changeType", changeType);
msgBody.put("addCreateTime", new Date());
msgBody.put("delCreateTime", "");
//获取渠道
List<String> list = new ArrayList<>();
MemberSourceShowDTO memberSourceShowDTO = memberEntranceApiService.getMemberSourceByMemberId(enterpriseId, memberId);
if (memberSourceShowDTO != null && CollectionUtils.isNotEmpty(memberSourceShowDTO.getMemberSourceList())) {
for (MemberSourceDetailDTO memberSourceDetailDTO : memberSourceShowDTO.getMemberSourceList()) {
if (null != memberSourceDetailDTO.getHighlight() && memberSourceDetailDTO.getHighlight() == 1) {
list.add(memberSourceDetailDTO.getParentSourceCode());
}
}
}
SubscribeMessageDTO subscribeMessageDTO = new SubscribeMessageDTO();
subscribeMessageDTO.setEvent("addDelFriendEvent");
subscribeMessageDTO.setTopic("member");
subscribeMessageDTO.setEnterpriseId(enterpriseId);
subscribeMessageDTO.setMemberId(memberId);
subscribeMessageDTO.setMemberChannels(list);
subscribeMessageDTO.setMsgBody(msgBody.toJSONString());
clientInstance.sendMessage("dealQywxExternalUserEvent", JSONObject.toJSONString(subscribeMessageDTO));
} catch (Exception e) {
log.info("加好友事件订阅通知:{}", e.getMessage(), e);
}
}
/**
* 刷新标签信息
*
* @param memberId
* @param wxEnterpriseId
* @param enterpriseId
*/
private void pushTagSync(String memberId, String wxEnterpriseId, String enterpriseId) {
QywxTagSyncInfoPojo pojo = new QywxTagSyncInfoPojo();
pojo.setDataId(memberId);
pojo.setTaskId("-1");
pojo.setTaskType(QywxSyncTaskTypeEnum.MEMBER_SYNC.getType());
//单个会员同步
pojo.setSyncType(GicQywxSyncTypeEnum.SINGLE_WXENT_MEMNER_SYNC.getType());
pojo.setWxEnterpriseId(wxEnterpriseId);
pojo.setEnterpriseId(enterpriseId);
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("qywxTagSyncDeal", JSONObject.toJSONString(pojo));
} catch (Exception e) {
log.info("异常:{}", e.getMessage(), e);
}
}
// @Override
// public ExternalClerkRelatedDTO getClerkFriendByUnionid(String enterpriseId, String clerkId, String unionid) {
// TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getClerkExternalByUnionId(enterpriseId, clerkId, unionid);
// ExternalClerkRelatedDTO clerkRelatedDTO = EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, externalClerkRelated);
// return clerkRelatedDTO;
// }
@Override
public ExternalClerkRelatedDTO getExternalClerkByWxUserIdAncExternalUserId(String wxEnterpriseId, String staffId, String enterpriseId, String externalUserId) {
TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getExternalClerkByWxUserIdAncExternalUserId(wxEnterpriseId, staffId, enterpriseId, externalUserId);
return EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, externalClerkRelated);
}
@Override
public List<ExternalClerkRelatedDTO> listByIds(String wxEnterpriseId, List<String> ids) {
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByIds(wxEnterpriseId, ids);
return EntityUtil.changeEntityListNew(ExternalClerkRelatedDTO.class, list);
}
@Override
public Page<String> pageExternalByEnterpriseId(String wxEnterpriseId, String enterpriseId, BasePageInfo pageInfo) {
PageHelper.startPage(pageInfo);
List<String> memberIDs = tabHaobanExternalClerkRelatedMapper.listMemberIdByEnterpriseId(wxEnterpriseId, enterpriseId);
return PageUtil.changePageHelperToCurrentPage(new PageInfo<>(memberIDs));
}
@Override
public Page<String> pageExternalByEnterpriseId(String wxEnterpriseId, String enterpriseId, int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<String> memberIDs = tabHaobanExternalClerkRelatedMapper.listMemberIdByEnterpriseId(wxEnterpriseId, enterpriseId);
return PageUtil.changePageHelperToCurrentPage(new PageInfo<>(memberIDs));
}
@Override
public List<String> listExternalClerkMemberIdsByMemberIds(String wxEnterpriseId, List<String> memberIds) {
return tabHaobanExternalClerkRelatedMapper.listMemberIdsByMemberIds(memberIds, wxEnterpriseId);
}
@Override
public List<ExternalClerkRelatedShortInfoDTO> listExternalClerkByMemberId(String memberId, String enterpriseId) {
if (StringUtils.isAnyBlank(memberId)) {
return null;
}
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByMemberId(memberId, enterpriseId);
return EntityUtil.changeEntityListNew(ExternalClerkRelatedShortInfoDTO.class, list);
}
@Override
public List<ExternalClerkRelatedShortInfoDTO> listExternalClerkByMemberId(String memberId) {
if (StringUtils.isBlank(memberId)) {
return null;
}
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByMemberId(memberId, null);
return EntityUtil.changeEntityListNew(ExternalClerkRelatedShortInfoDTO.class, list);
}
@Override
public List<String> listStoreIdByMemberId(String memberId) {
if (StringUtils.isBlank(memberId)) {
return null;
}
return tabHaobanExternalClerkRelatedMapper.listStoreIdByMemberId(memberId);
}
@Override
public void delByMemberIdAndEnterpriseId(String memberId, String enterpriseId, String mergeMemberId, int type) {
// 0 删除会员 1合并会员 2会员换绑
if(type==0) {
log.info("删除会员,memberId:{}", memberId);
this.tabHaobanExternalClerkRelatedMapper.updateStatusByMemberId(memberId, enterpriseId);
}else if(type==1) {
//合并会员,会员会先调删除,在调合并。顺序不能调换
log.info("合并会员,memberId:{},新memberId={}", memberId , mergeMemberId);
int i = tabHaobanExternalClerkRelatedMapper.countByMemberId(memberId, enterpriseId);
if (i > 0) {
tabHaobanExternalClerkRelatedMapper.updateMemberIdByMemberId(mergeMemberId, memberId, enterpriseId);
log.info("会员合并 ,更新为企微好友,新memberId:{}", mergeMemberId);
this.memberApiService.updateMemberQywxFlag(enterpriseId, mergeMemberId, 1);
}
}else if(type==2) {
int m1 = this.tabHaobanExternalClerkRelatedMapper.countByMemberId(memberId, enterpriseId) ;
int m2 = this.tabHaobanExternalClerkRelatedMapper.countByMemberId(mergeMemberId, enterpriseId) ;
log.info("合并换绑,m1={},好友数={}, m2={},好友数={}", memberId,m1,mergeMemberId,m2);
if(m1==0 && m2==0) {
log.info("都是非企微好友");
}else if(m1==0 && m2>0) {
this.tabHaobanExternalClerkRelatedMapper.updateMemberIdByMemberId(memberId, mergeMemberId, enterpriseId);
log.info("会员换绑 ,更新为企微好友,新memberId:{}", memberId);
this.memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
this.memberApiService.updateMemberQywxFlag(enterpriseId, mergeMemberId, 0);
}else if(m1>0 && m2==0) {
this.tabHaobanExternalClerkRelatedMapper.updateMemberIdByMemberId(mergeMemberId, memberId, enterpriseId);
log.info("会员换绑 ,更新为企微好友,新memberId:{}", mergeMemberId);
this.memberApiService.updateMemberQywxFlag(enterpriseId, mergeMemberId, 1);
this.memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 0);
}else if(m1>0 && m2>0) {
List<String> m1IdList = this.tabHaobanExternalClerkRelatedMapper.getIdList(memberId, enterpriseId) ;
List<String> m2IdList = this.tabHaobanExternalClerkRelatedMapper.getIdList(mergeMemberId, enterpriseId) ;
this.tabHaobanExternalClerkRelatedMapper.updateMemberByIdList(mergeMemberId, m1IdList);
this.tabHaobanExternalClerkRelatedMapper.updateMemberByIdList(memberId, m2IdList);
this.memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
this.memberApiService.updateMemberQywxFlag(enterpriseId, mergeMemberId, 1);
}
}
}
@Override
public void delByMemberIdAndEnterpriseId(String memberId, String enterpriseId, String mergeMemberId) {
log.info("删除会员或者合并会员,memberId:{},enterpriseId:{},mergeMemberId:{}", memberId, enterpriseId, mergeMemberId);
if (StringUtils.isBlank(mergeMemberId)) {
this.delByMemberIdAndEnterpriseId(memberId, enterpriseId, mergeMemberId, 0);
} else {
this.delByMemberIdAndEnterpriseId(memberId, enterpriseId, mergeMemberId, 1);
}
}
@Override
public boolean isFriends(String memberId, String clerkId, String enterpriseId) {
StaffClerkRelationDTO staffClerkRelation = staffClerkRelationMapper.getOneByClerkId(clerkId,null);
if (staffClerkRelation == null) {
return false;
}
String staffId = staffClerkRelation.getStaffId();
return this.isQwFriend(enterpriseId, staffId, memberId).getResult() ;
}
@Override
public com.gic.api.base.commons.ServiceResponse<Boolean> isQwFriend(String enterpriseId, String staffId, String memberId) {
log.info("查询是否好友enterpriseId={},staffId={},memberId={}",enterpriseId, staffId, memberId);
TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByMemberIdAndStaffId(staffId, enterpriseId, memberId);
if (externalClerkRelated == null) {
return com.gic.api.base.commons.ServiceResponse.success(Boolean.FALSE);
}
return com.gic.api.base.commons.ServiceResponse.success(externalClerkRelated.getStatusFlag() == 1);
}
/**
* @param enterpriseId
* @param clerkId
* @param unionId
* @return
*/
@Override
public com.gic.api.base.commons.ServiceResponse<Boolean> isQwFriendWithUnionId(String enterpriseId, String clerkId, String unionId) {
StaffClerkRelationDTO staffClerkRelation = staffClerkRelationMapper.getOneByClerkId(clerkId,null);
if (staffClerkRelation == null) {
return com.gic.api.base.commons.ServiceResponse.success(Boolean.FALSE);
}
String staffId = staffClerkRelation.getStaffId();
TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByUnionIdAndStaffId(staffId, enterpriseId, unionId);
if (externalClerkRelated == null) {
return com.gic.api.base.commons.ServiceResponse.success(Boolean.FALSE);
}
return com.gic.api.base.commons.ServiceResponse.success(externalClerkRelated.getStatusFlag() == 1);
}
// @Override
// public com.gic.api.base.commons.ServiceResponse<String> getExternalUseridForWxa(String enterpriseId, String staffId,
// String memberId) {
// TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByMemberIdAndStaffId(staffId, enterpriseId, memberId);
// if(null != externalClerkRelated) {
// return com.gic.api.base.commons.ServiceResponse.success(externalClerkRelated.getExternalClerkRelatedId());
// }
// return com.gic.api.base.commons.ServiceResponse.failure("9999", "无好友关系") ;
// }
@Override
public List<String> listMemberAndStaff(List<String> memberIdList, String staffId, String enterpriseId) {
List<String> list = tabHaobanExternalClerkRelatedMapper.listMemberAndStaff(memberIdList, staffId, enterpriseId);
return list;
}
@Override
public Map<String, List<ClerkStaffWxUserDTO>> listMemberStaffRel(List<String> memberIdList, List<String> clerkIdList, String enterpriseId, String wxEnterpriseId) {
if (CollectionUtils.isEmpty(memberIdList) || CollectionUtils.isEmpty(clerkIdList)) {
// 2个列表都为空查不了关系
return Collections.emptyMap();
}
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
if (qwDTO == null) {
return Collections.emptyMap();
}
List<MemberStaffRelExtDO> res = staffClerkRelationMapper.listMemberStaffRelNew(memberIdList, clerkIdList, enterpriseId, wxEnterpriseId);
if (CollectionUtils.isEmpty(res)) {
return Collections.emptyMap();
}
return res.stream().collect(Collectors.toMap(
// key-memberId
MemberStaffRelExtDO::getMemberId,
// value-list
e -> new ArrayList<>(Collections.singletonList(new ClerkStaffWxUserDTO(e.getStaffId(), e.getStaffClerkId(), e.getMemberExternalUserId(),e.getAddFriendTime()))),
// 重复key的value添加到集合
(List<ClerkStaffWxUserDTO> oldList, List<ClerkStaffWxUserDTO> newList) -> {
oldList.addAll(newList);
return oldList;
}));
}
@Override
@Transactional(rollbackFor = Exception.class)
public ServiceResponse updateNewExternalUserid(String wxEnterpriseId) {
log.info("企业外部联系人id start,wxEnterpriseId:{}", wxEnterpriseId);
TabHaobanWxEnterprise tabHaobanWxEnterprise = wxEnterriseMapper.selectByPrimaryKey(wxEnterpriseId);
ServiceResponse serviceResponse = new ServiceResponse();
if (tabHaobanWxEnterprise == null) {
log.info("企业外部联系人id为空");
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_0.getCode());
serviceResponse.setMessage("企业外部联系人id为空");
return serviceResponse;
}
String lockKey = "updateNewExternalUserid_" + wxEnterpriseId;
if (RedisUtil.isLocked(lockKey)) {
log.info("redis锁,lockKey:{}", lockKey);
String corpName = tabHaobanWxEnterprise.getCorpName();
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_0.getCode());
serviceResponse.setMessage(corpName + "已经在转换中,请勿重复操作!");
return serviceResponse;
}
Integer externalFlag = tabHaobanWxEnterprise.getExternalFlag();
if (externalFlag == 1 || externalFlag == 2) {
log.info("已经在转换成功或转换中,请勿重复操作:wxEnterpriseId:{}", wxEnterpriseId);
String corpName = tabHaobanWxEnterprise.getCorpName();
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_0.getCode());
serviceResponse.setMessage(corpName + "已经在转换成功或转换中,请勿重复操作!");
return serviceResponse;
}
RedisUtil.lock(lockKey, 1L, TimeUnit.DAYS, 0L);
try {
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
updateNewExUserId(tabHaobanWxEnterprise.getWxEnterpriseId(), qwDTO.getThirdCorpid());
log.info("企业外部联系人id end,wxEnterpriseId:{}", wxEnterpriseId);
RedisUtil.unlock(lockKey);
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_1.getCode());
serviceResponse.setMessage(HaoBanErrCodeCommon.ERR_1.getMsg());
return serviceResponse;
} catch (Exception e) {
log.info("企业外部联系人id异常,wxEnterpriseId:{},{}", wxEnterpriseId, e.getMessage(), e);
RedisUtil.unlock(lockKey);
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_0.getCode());
serviceResponse.setMessage("企业外部联系人id转换异常,请联系技术人员查看");
return serviceResponse;
}
}
@Override
@Deprecated
public void updateNewExternalUseridMq(String res) {
log.info("更新新的外部联系人id mq,start");
}
@Override
public List<ExternalClerkRelatedShortInfoDTO> listByMemberIdAndEnterpriseId(String memberId, String enterpriseId) {
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByMemberId(memberId, enterpriseId);
return EntityUtil.changeEntityListNew(ExternalClerkRelatedShortInfoDTO.class, list);
}
@Override
public ExternalClerkRelatedDTO getByWxEnterpriseIdAndUnionId(String wxEnterpriseId, String staffId, String unionid) {
TabHaobanExternalClerkRelated related = tabHaobanExternalClerkRelatedMapper.getByWxEnterpriseIdAndUnionId(wxEnterpriseId, staffId, unionid);
return EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, related);
}
@Override
public FriendMemberStatusDTO getFriendMemberStatus(String memberId, String enterpriseId) {
TabHaobanExternalClerkRelated tabHaobanExternalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByEnterpriseIdAndMemberId(enterpriseId, memberId, null);
if (tabHaobanExternalClerkRelated != null) {
TabHaobanExternalClerkRelated hasFriend = tabHaobanExternalClerkRelatedMapper.getByEnterpriseIdAndMemberId(enterpriseId, memberId, 1);
if (hasFriend != null) {
FriendMemberStatusDTO friendMemberStatusDTO = new FriendMemberStatusDTO();
friendMemberStatusDTO.setStatusFlag(1);
friendMemberStatusDTO.setLastCreateTime(hasFriend.getCreateTime());
return friendMemberStatusDTO;
} else {
TabHaobanExternalClerkRelated hasCancelFriend = tabHaobanExternalClerkRelatedMapper.getByEnterpriseIdAndMemberId(enterpriseId, memberId, 2);
if (hasCancelFriend != null) {
FriendMemberStatusDTO friendMemberStatusDTO = new FriendMemberStatusDTO();
friendMemberStatusDTO.setStatusFlag(2);
friendMemberStatusDTO.setLastCancelCreateTime(hasCancelFriend.getCreateTime());
return friendMemberStatusDTO;
}
}
}
FriendMemberStatusDTO friendMemberStatusDTO = new FriendMemberStatusDTO();
friendMemberStatusDTO.setStatusFlag(0);
return friendMemberStatusDTO;
}
/**
* 更新状态
*
* @param corpid
* @param wxEnterpriseId
*/
private void updateAgreeExternalUseridFlag(String corpid, String wxEnterpriseId) {
//serviceCorpid 默认为:达摩网络
boolean flag = qywxUserApiService.finishExternalUseridMigration(corpid, config.getCorpid());
log.info("更新新的外部联系人id最后一页,设置迁移完成:flag:{}", flag);
if (flag) {
//成功
wxEnterpriseApiService.agreeExternalUseridFlag(wxEnterpriseId, 1);
} else {
//失败
wxEnterriseMapper.updateExternalFlagById(3, wxEnterpriseId);
//回退老的
//externalUseridLogMapper.updateOldExternalUserId(wxEnterpriseId);
//更新状态为失败
externalUseridLogMapper.updateStatusFlagByWxEnterpriseId(0, wxEnterpriseId);
}
}
@Override
public boolean isExternalFriendByMemberId(String memberId, String enterpriseId) {
int count = tabHaobanExternalClerkRelatedMapper.countByMemberId(memberId, enterpriseId);
return count > 0;
}
/**
* 更新新的外部联系人id
*
* @param wxEnterpriseId wx企业标识
* @param corpid corpid
* @author mozhu
* @date 2021-12-13 15:40:30
*/
private void updateNewExUserId(String wxEnterpriseId, String corpid) {
wxEnterriseMapper.updateExternalFlagById(2, wxEnterpriseId);
messageAlert(wxEnterpriseId, "更新新的外部联系人id");
// 限流器
RRateLimiter rateLimiter = RedisUtil.getRedisClient().getRateLimiter("haoban:manage3:updateNewExUserId:limit");
// 每1秒产生5个令牌
rateLimiter.trySetRate(RateType.OVERALL, 5, 1, RateIntervalUnit.SECONDS);
int pageNum = 1;
// 开启消息发送
while (true) {
// 获取令牌
rateLimiter.acquire();
//企微转换最多支持1000个
PageInfo<TabHaobanExternalClerkRelated> tabHaobanWxEnterprisePageInfo = pageExternalByWxEnterpriseId(wxEnterpriseId, pageNum, 1000);
List<TabHaobanExternalClerkRelated> enterprisePageInfoList = tabHaobanWxEnterprisePageInfo.getList();
if (CollectionUtils.isEmpty(enterprisePageInfoList)) {
if (pageNum == 1) {
log.info("如果没有好友,直接转换完成..corpid:{}", corpid);
updateAgreeExternalUseridFlag(corpid, wxEnterpriseId);
}
break;
}
pageNum++;
List<String> externalUserIdList = enterprisePageInfoList.stream().map(TabHaobanExternalClerkRelated::getExternalUserId).collect(Collectors.toList());
JSONObject jsonObject = new JSONObject();
jsonObject.put("corpid", corpid);
jsonObject.put("wxEnterpriseId", wxEnterpriseId);
jsonObject.put("externalUserIdList", externalUserIdList);
jsonObject.put("externalUserId", externalUserIdList.get(0));
//是否是最后一批
if (tabHaobanWxEnterprisePageInfo.isIsLastPage()) {
jsonObject.put("isLastPage", true);
} else {
jsonObject.put("isLastPage", false);
}
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("updateNewExUserIdMq", JSONObject.toJSONString(jsonObject));
} catch (Exception e) {
log.info("企微转换id发送消息队列异常:{}", e.getMessage(), e);
}
}
}
/**
* 根据企业id分页
*
* @param wxEnterpriseId 企业标识
* @param pageNum 页面num
* @param pageSize 页面大小
* @return {@link Page<ExternalClerkRelatedDTO> }
* @author mozhu
* @date 2021-12-13 15:10:19
*/
private PageInfo<TabHaobanExternalClerkRelated> pageExternalByWxEnterpriseId(String wxEnterpriseId, Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<TabHaobanExternalClerkRelated> tabHaobanWxEnterpriseList = tabHaobanExternalClerkRelatedMapper.pageExternalByEnterpriseId(wxEnterpriseId);
return new PageInfo<>(tabHaobanWxEnterpriseList);
}
/**
* 消息提醒
* 告警
*
* @param wxEnterpriseId wx企业标识
* @param titleSub 子标题
*/
private void messageAlert(String wxEnterpriseId, String titleSub) {
ProviderLocalTag providerLocalTag = ProviderLocalTag.tag.get();
String traceId = providerLocalTag.traceId;
AlertMessageDTO messageDTO = new AlertMessageDTO();
messageDTO.setTraceId(traceId);
messageDTO.setWxEnterpriseId(wxEnterpriseId);
messageDTO.setAlertTitle(titleSub);
messageDTO.setAlertType(AlertTypeEnum.GET_NEW_EXTERNAL_USERID.getType());
checkQywxSettingApiService.alertCallback(JSONObject.toJSONString(messageDTO));
}
@Override
public int countFriendCountByClerkId(String wxEnterpriseId, String enterpriseId, String staffId, String clerkId) {
return tabHaobanExternalClerkRelatedMapper.countByClerkId(wxEnterpriseId, enterpriseId, staffId, clerkId);
}
@Override
public void initWxEnterpriseFriend(String wxEnterpriseId) {
log.info("刷新整个企业的好友开始={}", wxEnterpriseId);
String taskName = "刷新整个企微好友";
String taskId = dealSyncOperationApiService.createWxFriendTaskSingle(wxEnterpriseId, taskName, "-1", "管理员", SyncTaskTypeEnum.FRIEND_WX_ENTEPRISE.getType());
if (StringUtils.isNotBlank(taskId)) {
List<String> staffList = staffClerkRelationMapper.listByWxEnterpriseId(wxEnterpriseId);
if (CollectionUtils.isEmpty(staffList)) {
log.info("没有要刷新的:{},{}", wxEnterpriseId, staffList);
return;
}
staffList = staffList.stream().distinct().collect(Collectors.toList());
log.info("staffList={}", JSON.toJSONString(staffList));
for (String staffId : staffList) {
this.dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staffId, staffId, wxEnterpriseId);
}
}
}
@Override
public int getCountExternalClerk(String wxEnterpriseId, String staffId, List<Integer> statusFlags) {
return tabHaobanExternalClerkRelatedMapper.getCountExternalClerk(wxEnterpriseId,staffId,statusFlags);
}
@Override
public int updateExternalStatus(String wxEnterpriseId, String externalUserid,int status) {
return this.tabHaobanExternalClerkRelatedMapper.updateExternalStatus(wxEnterpriseId,externalUserid,status);
}
}
package com.gic.haoban.manage.service.service.out.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.api.base.dto.SubscribeMessageDTO;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.app.customer.enums.GicQywxSyncTypeEnum;
import com.gic.haoban.app.customer.enums.QywxSyncTaskTypeEnum;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.base.api.common.errCode.HaoBanErrCodeCommon;
import com.gic.haoban.common.utils.PageUtil;
import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.enums.AlertTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskTypeEnum;
import com.gic.haoban.manage.api.service.CheckQywxSettingApiService;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.api.service.ExternalClerkRelatedApiService;
import com.gic.haoban.manage.api.service.WxEnterpriseApiService;
import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.dao.mapper.*;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise;
import com.gic.haoban.manage.service.entity.ext.MemberStaffRelExtDO;
import com.gic.haoban.manage.service.pojo.QywxTagSyncInfoPojo;
import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.haoban.manage.service.service.hm.WxUserAddLogService;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.dto.MemberSourceDetailDTO;
import com.gic.member.api.dto.MemberSourceShowDTO;
import com.gic.member.api.service.MemberApiService;
import com.gic.member.api.service.MemberEntranceApiService;
import com.gic.member.api.service.MemberService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import com.gic.wechat.api.service.qywx.QywxUserApiService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
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.redisson.api.RRateLimiter;
import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service
public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedApiService {
private static final Logger log = LogManager.getLogger(ExternalClerkRelatedApiServiceImpl.class);
@Autowired
private TabHaobanExternalClerkRelatedMapper tabHaobanExternalClerkRelatedMapper;
@Autowired
private TabHaobanStaffClerkRelationMapper staffClerkRelationMapper;
@Autowired
private WxEnterpriseMapper wxEnterriseMapper;
@Autowired
private QywxUserApiService qywxUserApiService;
@Autowired
private Config config;
@Autowired
private ExternalUseridLogMapper externalUseridLogMapper;
@Autowired
private CheckQywxSettingApiService checkQywxSettingApiService;
@Autowired
private WxEnterpriseApiService wxEnterpriseApiService;
@Autowired
private MemberApiService memberApiService;
@Autowired
private WxUserAddLogService wxUserAddLogService;
@Autowired
private WxEnterpriseService wxEnterpriseService;
@Autowired
private DealSyncOperationApiService dealSyncOperationApiService;
@Autowired
private MemberEntranceApiService memberEntranceApiService;
@Autowired
private StoreService storeService;
@Autowired
private ClerkService clerkService;
@Autowired
private MemberService memberService;
/**
* 查询会员在企业下的好友关系
*
* @param memberId : 会员id
* @param wxEnterpriseId : 微信企业id
* @param enterpriseId : 企业id
* @return : 返回会员导购关联关系
*/
@Override
public List<ExternalClerkRelatedDTO> listByMemberIdAndWxEnterpriseId(String memberId, String wxEnterpriseId, String enterpriseId) {
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByMemberIdAndWxEnterpriseId(memberId, wxEnterpriseId, enterpriseId);
return EntityUtil.changeEntityListByJSON(ExternalClerkRelatedDTO.class, list);
}
@Override
public List<ExternalClerkRelatedDTO> listByMemberIdList(List<String> memberIdList, String wxEnterpriseId,
String enterpriseId) {
List<ExternalClerkRelatedDTO> list = tabHaobanExternalClerkRelatedMapper.listByMemberIdList(memberIdList, wxEnterpriseId, enterpriseId);
return list;
}
@Override
public List<ExternalClerkRelatedDTO> listByWxEnterpriseIdAndWxUserId(String staffId, String wxEnterpriseId) {
return EntityUtil.changeEntityListByJSON(ExternalClerkRelatedDTO.class, tabHaobanExternalClerkRelatedMapper.listByWxEnterpriseIdAndWxUserId(staffId, wxEnterpriseId));
}
@Override
public List<ExternalClerkRelatedDTO> listByWxEnterpriseIdAndWxUserIds(List<String> staffIdList, String wxEnterpriseId) {
if (CollectionUtils.isEmpty(staffIdList)) {
return Collections.emptyList();
}
return EntityUtil.changeEntityListByJSON(ExternalClerkRelatedDTO.class, tabHaobanExternalClerkRelatedMapper.listByWxEnterpriseIdAndWxUserIds(staffIdList, wxEnterpriseId));
}
@Override
public ExternalClerkRelatedDTO getExternalClerkByRelationKeyAndPre(String relationKey) {
TabHaobanExternalClerkRelated related = tabHaobanExternalClerkRelatedMapper.getByRelationKey(relationKey,0);
return EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, related);
}
@Override
public Page<ExternalClerkRelatedDTO> pageExternalClerk(String wxEnterpriseId, String staffId, List<Integer> statusFlags, BasePageInfo pageInfo) {
PageHelper.startPage(pageInfo);
List<TabHaobanExternalClerkRelated> ret = tabHaobanExternalClerkRelatedMapper.listByWxEnterpriseIdAndWxUserIdAndStatus(wxEnterpriseId, staffId, statusFlags);
return PageUtil.changePageHelperToCurrentPage(new PageInfo<>(ret), ExternalClerkRelatedDTO.class);
}
@Override
public boolean pushExternalByRelationKey(String relationKey) {
tabHaobanExternalClerkRelatedMapper.pushExternalByRelationKey(relationKey);
return true;
}
@Override
public List<ExternalClerkRelatedDTO> listByEnterpriseIdAndDate(
String enterpriseId, Date date) {
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByEnterpriseIdAndDate(enterpriseId, date);
return EntityUtil.changeEntityListByJSON(ExternalClerkRelatedDTO.class, list);
}
@Override
public Page<ExternalClerkRelatedDTO> pageMemberUnionByParams(List<String> userIdList, List<String> sendMemberIds,
String enterpriseId, BasePageInfo pageInfo) {
PageHelper.startPage(pageInfo.getPageNum(), pageInfo.getPageSize());
return PageUtil.changePageHelperToCurrentPage(tabHaobanExternalClerkRelatedMapper.pageMemberUnionByParams(userIdList, sendMemberIds, enterpriseId), ExternalClerkRelatedDTO.class);
}
@Override
public ServiceResponse<ExternalClerkRelatedDTO> bindMemberIdExternalByRelationKey(String relationKey, String enterpriseId, String memberId, String unionid) {
ServiceResponse<ExternalClerkRelatedDTO> resp = new ServiceResponse<>();
TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByRelationKey(relationKey,1);
if (null == externalClerkRelated) {
log.error("relationKey对应的关联关系不存在或删除:relationKey:{},memberId:{},unionid:{}", relationKey, memberId, unionid);
resp.setCode(0);
resp.setMessage("relationKey对应的关联关系不存在或删除");
return resp;
}
if (!externalClerkRelated.getEnterpriseId().equals(enterpriseId)) {
log.error("relationKey对应的企业与所传会员企业不对应:relationKey:{},memberId:{},unionid:{}", relationKey, memberId, unionid);
resp.setCode(0);
resp.setMessage("relationKey对应的企业与所传会员企业不对应");
return resp;
}
updateExternalClerkRelated(enterpriseId, memberId, unionid, externalClerkRelated);
resp.setResult(EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, externalClerkRelated));
return resp;
}
@Override
public boolean bindMemberIdExternalById(String externalClerkRelatedId, String enterpriseId, String memberId, String unionid) {
TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.selectByPrimaryKey(externalClerkRelatedId);
if (externalClerkRelated == null) {
log.error("查询好办与gic数据为空,externalClerkRelatedId:{},enterpriseId:{},memberId:{},unionid:{}", externalClerkRelatedId, enterpriseId, memberId, unionid);
return false;
}
updateExternalClerkRelated(enterpriseId, memberId, unionid, externalClerkRelated);
return true;
}
/**
* 更新好友关系
*
* @param enterpriseId
* @param memberId
* @param unionid
* @param externalClerkRelated
*/
private void updateExternalClerkRelated(String enterpriseId, String memberId, String unionid, TabHaobanExternalClerkRelated externalClerkRelated) {
externalClerkRelated.setMemberId(memberId);
externalClerkRelated.setUnionid(unionid);
externalClerkRelated.setUpdateTime(new Date());
externalClerkRelated.setStatusFlag(1);
tabHaobanExternalClerkRelatedMapper.updateByPrimaryKeySelective(externalClerkRelated);
String wxEnterpriseId = externalClerkRelated.getWxEnterpriseId();
//同步标签
pushTagSync(memberId, wxEnterpriseId, enterpriseId);
//回调给会员,更新是否为企微好友
log.info("通知会员 合并会员后更新为企微好友,memberId:{}", memberId);
memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
//定制
addDelFriendEvent(unionid, externalClerkRelated.getClerkId(), wxEnterpriseId, enterpriseId, memberId, externalClerkRelated.getStoreId(), 1);
//日志
wxUserAddLogService.updateMemberInfo(wxEnterpriseId, enterpriseId, externalClerkRelated.getStaffId(), externalClerkRelated.getExternalUserId(), memberId);
}
/**
* 欧泊莱定制需求
*
* @param unionId
* @param clerkId
* @param enterpriseId
* @param memberId
* @param storeId
*/
private void addDelFriendEvent(String unionId, String clerkId, String wxEnterpriseId, String enterpriseId, String memberId, String storeId, Integer changeType) {
String addDelFriendEvent = config.getAddDelFriendEvent();
if (!addDelFriendEvent.contains(wxEnterpriseId)) {
log.info("非定制,无需广播通知");
return;
}
if (StringUtils.isBlank(memberId)) {
log.info("会员不存在:{}", memberId);
return;
}
log.info("欧泊莱定制:推送会员,memberId:{},changeType:{}", memberId, changeType);
//欧泊莱定制需求
ClerkDTO clerkDTO = clerkService.getClerkByClerkIdNoStatus(clerkId);
StoreDTO storeDTO = storeService.getStore(storeId);
MemberDTO member = memberService.getMember(memberId);
if (member == null) {
log.info("会员不存在:{}", memberId);
return;
}
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
JSONObject msgBody = new JSONObject();
msgBody.put("cardNo", member.getCardNum());
msgBody.put("enterpriseId", enterpriseId);
msgBody.put("unionid", unionId);
if (storeDTO != null) {
msgBody.put("storeName", storeDTO.getStoreName());
msgBody.put("storeCode", storeDTO.getStoreCode());
}
if (clerkDTO != null) {
msgBody.put("clerkName", clerkDTO.getClerkName());
msgBody.put("clerkCode", clerkDTO.getClerkCode());
}
msgBody.put("changeType", changeType);
msgBody.put("addCreateTime", new Date());
msgBody.put("delCreateTime", "");
//获取渠道
List<String> list = new ArrayList<>();
MemberSourceShowDTO memberSourceShowDTO = memberEntranceApiService.getMemberSourceByMemberId(enterpriseId, memberId);
if (memberSourceShowDTO != null && CollectionUtils.isNotEmpty(memberSourceShowDTO.getMemberSourceList())) {
for (MemberSourceDetailDTO memberSourceDetailDTO : memberSourceShowDTO.getMemberSourceList()) {
if (null != memberSourceDetailDTO.getHighlight() && memberSourceDetailDTO.getHighlight() == 1) {
list.add(memberSourceDetailDTO.getParentSourceCode());
}
}
}
SubscribeMessageDTO subscribeMessageDTO = new SubscribeMessageDTO();
subscribeMessageDTO.setEvent("addDelFriendEvent");
subscribeMessageDTO.setTopic("member");
subscribeMessageDTO.setEnterpriseId(enterpriseId);
subscribeMessageDTO.setMemberId(memberId);
subscribeMessageDTO.setMemberChannels(list);
subscribeMessageDTO.setMsgBody(msgBody.toJSONString());
clientInstance.sendMessage("dealQywxExternalUserEvent", JSONObject.toJSONString(subscribeMessageDTO));
} catch (Exception e) {
log.info("加好友事件订阅通知:{}", e.getMessage(), e);
}
}
/**
* 刷新标签信息
*
* @param memberId
* @param wxEnterpriseId
* @param enterpriseId
*/
private void pushTagSync(String memberId, String wxEnterpriseId, String enterpriseId) {
QywxTagSyncInfoPojo pojo = new QywxTagSyncInfoPojo();
pojo.setDataId(memberId);
pojo.setTaskId("-1");
pojo.setTaskType(QywxSyncTaskTypeEnum.MEMBER_SYNC.getType());
//单个会员同步
pojo.setSyncType(GicQywxSyncTypeEnum.SINGLE_WXENT_MEMNER_SYNC.getType());
pojo.setWxEnterpriseId(wxEnterpriseId);
pojo.setEnterpriseId(enterpriseId);
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("qywxTagSyncDeal", JSONObject.toJSONString(pojo));
} catch (Exception e) {
log.info("异常:{}", e.getMessage(), e);
}
}
// @Override
// public ExternalClerkRelatedDTO getClerkFriendByUnionid(String enterpriseId, String clerkId, String unionid) {
// TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getClerkExternalByUnionId(enterpriseId, clerkId, unionid);
// ExternalClerkRelatedDTO clerkRelatedDTO = EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, externalClerkRelated);
// return clerkRelatedDTO;
// }
@Override
public ExternalClerkRelatedDTO getExternalClerkByWxUserIdAncExternalUserId(String wxEnterpriseId, String staffId, String enterpriseId, String externalUserId) {
TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getExternalClerkByWxUserIdAncExternalUserId(wxEnterpriseId, staffId, enterpriseId, externalUserId);
if(null == externalClerkRelated) {
externalClerkRelated = this.tabHaobanExternalClerkRelatedMapper.getExternalClerkByWxUserIdAncExternalUserIdSelf(wxEnterpriseId, staffId, enterpriseId, externalUserId) ;
}
return EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, externalClerkRelated);
}
@Override
public List<ExternalClerkRelatedDTO> listByIds(String wxEnterpriseId, List<String> ids) {
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByIds(wxEnterpriseId, ids);
return EntityUtil.changeEntityListNew(ExternalClerkRelatedDTO.class, list);
}
@Override
public Page<String> pageExternalByEnterpriseId(String wxEnterpriseId, String enterpriseId, BasePageInfo pageInfo) {
PageHelper.startPage(pageInfo);
List<String> memberIDs = tabHaobanExternalClerkRelatedMapper.listMemberIdByEnterpriseId(wxEnterpriseId, enterpriseId);
return PageUtil.changePageHelperToCurrentPage(new PageInfo<>(memberIDs));
}
@Override
public Page<String> pageExternalByEnterpriseId(String wxEnterpriseId, String enterpriseId, int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<String> memberIDs = tabHaobanExternalClerkRelatedMapper.listMemberIdByEnterpriseId(wxEnterpriseId, enterpriseId);
return PageUtil.changePageHelperToCurrentPage(new PageInfo<>(memberIDs));
}
@Override
public List<String> listExternalClerkMemberIdsByMemberIds(String wxEnterpriseId, List<String> memberIds) {
return tabHaobanExternalClerkRelatedMapper.listMemberIdsByMemberIds(memberIds, wxEnterpriseId);
}
@Override
public List<ExternalClerkRelatedShortInfoDTO> listExternalClerkByMemberId(String memberId, String enterpriseId) {
if (StringUtils.isAnyBlank(memberId)) {
return null;
}
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByMemberId(memberId, enterpriseId);
return EntityUtil.changeEntityListNew(ExternalClerkRelatedShortInfoDTO.class, list);
}
@Override
public List<ExternalClerkRelatedShortInfoDTO> listExternalClerkByMemberId(String memberId) {
if (StringUtils.isBlank(memberId)) {
return null;
}
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByMemberId(memberId, null);
return EntityUtil.changeEntityListNew(ExternalClerkRelatedShortInfoDTO.class, list);
}
@Override
public List<String> listStoreIdByMemberId(String memberId) {
if (StringUtils.isBlank(memberId)) {
return null;
}
return tabHaobanExternalClerkRelatedMapper.listStoreIdByMemberId(memberId);
}
@Override
public void delByMemberIdAndEnterpriseId(String memberId, String enterpriseId, String mergeMemberId, int type) {
// 0 删除会员 1合并会员 2会员换绑
if(type==0) {
log.info("删除会员,memberId:{}", memberId);
this.tabHaobanExternalClerkRelatedMapper.updateStatusByMemberId(memberId, enterpriseId);
}else if(type==1) {
//合并会员,会员会先调删除,在调合并。顺序不能调换
log.info("合并会员,memberId:{},新memberId={}", memberId , mergeMemberId);
int i = tabHaobanExternalClerkRelatedMapper.countByMemberId(memberId, enterpriseId);
if (i > 0) {
tabHaobanExternalClerkRelatedMapper.updateMemberIdByMemberId(mergeMemberId, memberId, enterpriseId);
log.info("会员合并 ,更新为企微好友,新memberId:{}", mergeMemberId);
this.memberApiService.updateMemberQywxFlag(enterpriseId, mergeMemberId, 1);
}
}else if(type==2) {
int m1 = this.tabHaobanExternalClerkRelatedMapper.countByMemberId(memberId, enterpriseId) ;
int m2 = this.tabHaobanExternalClerkRelatedMapper.countByMemberId(mergeMemberId, enterpriseId) ;
log.info("合并换绑,m1={},好友数={}, m2={},好友数={}", memberId,m1,mergeMemberId,m2);
if(m1==0 && m2==0) {
log.info("都是非企微好友");
}else if(m1==0 && m2>0) {
this.tabHaobanExternalClerkRelatedMapper.updateMemberIdByMemberId(memberId, mergeMemberId, enterpriseId);
log.info("会员换绑 ,更新为企微好友,新memberId:{}", memberId);
this.memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
this.memberApiService.updateMemberQywxFlag(enterpriseId, mergeMemberId, 0);
}else if(m1>0 && m2==0) {
this.tabHaobanExternalClerkRelatedMapper.updateMemberIdByMemberId(mergeMemberId, memberId, enterpriseId);
log.info("会员换绑 ,更新为企微好友,新memberId:{}", mergeMemberId);
this.memberApiService.updateMemberQywxFlag(enterpriseId, mergeMemberId, 1);
this.memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 0);
}else if(m1>0 && m2>0) {
List<String> m1IdList = this.tabHaobanExternalClerkRelatedMapper.getIdList(memberId, enterpriseId) ;
List<String> m2IdList = this.tabHaobanExternalClerkRelatedMapper.getIdList(mergeMemberId, enterpriseId) ;
this.tabHaobanExternalClerkRelatedMapper.updateMemberByIdList(mergeMemberId, m1IdList);
this.tabHaobanExternalClerkRelatedMapper.updateMemberByIdList(memberId, m2IdList);
this.memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
this.memberApiService.updateMemberQywxFlag(enterpriseId, mergeMemberId, 1);
}
}
}
@Override
public void delByMemberIdAndEnterpriseId(String memberId, String enterpriseId, String mergeMemberId) {
log.info("删除会员或者合并会员,memberId:{},enterpriseId:{},mergeMemberId:{}", memberId, enterpriseId, mergeMemberId);
if (StringUtils.isBlank(mergeMemberId)) {
this.delByMemberIdAndEnterpriseId(memberId, enterpriseId, mergeMemberId, 0);
} else {
this.delByMemberIdAndEnterpriseId(memberId, enterpriseId, mergeMemberId, 1);
}
}
@Override
public boolean isFriends(String memberId, String clerkId, String enterpriseId) {
StaffClerkRelationDTO staffClerkRelation = staffClerkRelationMapper.getOneByClerkId(clerkId,null);
if (staffClerkRelation == null) {
return false;
}
String staffId = staffClerkRelation.getStaffId();
return this.isQwFriend(enterpriseId, staffId, memberId).getResult() ;
}
@Override
public com.gic.api.base.commons.ServiceResponse<Boolean> isQwFriend(String enterpriseId, String staffId, String memberId) {
log.info("查询是否好友enterpriseId={},staffId={},memberId={}",enterpriseId, staffId, memberId);
TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByMemberIdAndStaffId(staffId, enterpriseId, memberId);
if (externalClerkRelated == null) {
return com.gic.api.base.commons.ServiceResponse.success(Boolean.FALSE);
}
return com.gic.api.base.commons.ServiceResponse.success(externalClerkRelated.getStatusFlag() == 1);
}
/**
* @param enterpriseId
* @param clerkId
* @param unionId
* @return
*/
@Override
public com.gic.api.base.commons.ServiceResponse<Boolean> isQwFriendWithUnionId(String enterpriseId, String clerkId, String unionId) {
StaffClerkRelationDTO staffClerkRelation = staffClerkRelationMapper.getOneByClerkId(clerkId,null);
if (staffClerkRelation == null) {
return com.gic.api.base.commons.ServiceResponse.success(Boolean.FALSE);
}
String staffId = staffClerkRelation.getStaffId();
TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByUnionIdAndStaffId(staffId, enterpriseId, unionId);
if (externalClerkRelated == null) {
return com.gic.api.base.commons.ServiceResponse.success(Boolean.FALSE);
}
return com.gic.api.base.commons.ServiceResponse.success(externalClerkRelated.getStatusFlag() == 1);
}
// @Override
// public com.gic.api.base.commons.ServiceResponse<String> getExternalUseridForWxa(String enterpriseId, String staffId,
// String memberId) {
// TabHaobanExternalClerkRelated externalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByMemberIdAndStaffId(staffId, enterpriseId, memberId);
// if(null != externalClerkRelated) {
// return com.gic.api.base.commons.ServiceResponse.success(externalClerkRelated.getExternalClerkRelatedId());
// }
// return com.gic.api.base.commons.ServiceResponse.failure("9999", "无好友关系") ;
// }
@Override
public List<String> listMemberAndStaff(List<String> memberIdList, String staffId, String enterpriseId) {
List<String> list = tabHaobanExternalClerkRelatedMapper.listMemberAndStaff(memberIdList, staffId, enterpriseId);
return list;
}
@Override
public Map<String, List<ClerkStaffWxUserDTO>> listMemberStaffRel(List<String> memberIdList, List<String> clerkIdList, String enterpriseId, String wxEnterpriseId) {
if (CollectionUtils.isEmpty(memberIdList) || CollectionUtils.isEmpty(clerkIdList)) {
// 2个列表都为空查不了关系
return Collections.emptyMap();
}
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
if (qwDTO == null) {
return Collections.emptyMap();
}
List<MemberStaffRelExtDO> res = staffClerkRelationMapper.listMemberStaffRelNew(memberIdList, clerkIdList, enterpriseId, wxEnterpriseId);
if (CollectionUtils.isEmpty(res)) {
return Collections.emptyMap();
}
return res.stream().collect(Collectors.toMap(
// key-memberId
MemberStaffRelExtDO::getMemberId,
// value-list
e -> new ArrayList<>(Collections.singletonList(new ClerkStaffWxUserDTO(e.getStaffId(), e.getStaffClerkId(), e.getMemberExternalUserId(),e.getAddFriendTime()))),
// 重复key的value添加到集合
(List<ClerkStaffWxUserDTO> oldList, List<ClerkStaffWxUserDTO> newList) -> {
oldList.addAll(newList);
return oldList;
}));
}
@Override
@Transactional(rollbackFor = Exception.class)
public ServiceResponse updateNewExternalUserid(String wxEnterpriseId) {
log.info("企业外部联系人id start,wxEnterpriseId:{}", wxEnterpriseId);
TabHaobanWxEnterprise tabHaobanWxEnterprise = wxEnterriseMapper.selectByPrimaryKey(wxEnterpriseId);
ServiceResponse serviceResponse = new ServiceResponse();
if (tabHaobanWxEnterprise == null) {
log.info("企业外部联系人id为空");
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_0.getCode());
serviceResponse.setMessage("企业外部联系人id为空");
return serviceResponse;
}
String lockKey = "updateNewExternalUserid_" + wxEnterpriseId;
if (RedisUtil.isLocked(lockKey)) {
log.info("redis锁,lockKey:{}", lockKey);
String corpName = tabHaobanWxEnterprise.getCorpName();
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_0.getCode());
serviceResponse.setMessage(corpName + "已经在转换中,请勿重复操作!");
return serviceResponse;
}
Integer externalFlag = tabHaobanWxEnterprise.getExternalFlag();
if (externalFlag == 1 || externalFlag == 2) {
log.info("已经在转换成功或转换中,请勿重复操作:wxEnterpriseId:{}", wxEnterpriseId);
String corpName = tabHaobanWxEnterprise.getCorpName();
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_0.getCode());
serviceResponse.setMessage(corpName + "已经在转换成功或转换中,请勿重复操作!");
return serviceResponse;
}
RedisUtil.lock(lockKey, 1L, TimeUnit.DAYS, 0L);
try {
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
updateNewExUserId(tabHaobanWxEnterprise.getWxEnterpriseId(), qwDTO.getThirdCorpid());
log.info("企业外部联系人id end,wxEnterpriseId:{}", wxEnterpriseId);
RedisUtil.unlock(lockKey);
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_1.getCode());
serviceResponse.setMessage(HaoBanErrCodeCommon.ERR_1.getMsg());
return serviceResponse;
} catch (Exception e) {
log.info("企业外部联系人id异常,wxEnterpriseId:{},{}", wxEnterpriseId, e.getMessage(), e);
RedisUtil.unlock(lockKey);
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_0.getCode());
serviceResponse.setMessage("企业外部联系人id转换异常,请联系技术人员查看");
return serviceResponse;
}
}
@Override
@Deprecated
public void updateNewExternalUseridMq(String res) {
log.info("更新新的外部联系人id mq,start");
}
@Override
public List<ExternalClerkRelatedShortInfoDTO> listByMemberIdAndEnterpriseId(String memberId, String enterpriseId) {
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByMemberId(memberId, enterpriseId);
return EntityUtil.changeEntityListNew(ExternalClerkRelatedShortInfoDTO.class, list);
}
@Override
public ExternalClerkRelatedDTO getByWxEnterpriseIdAndUnionId(String wxEnterpriseId, String staffId, String unionid) {
TabHaobanExternalClerkRelated related = tabHaobanExternalClerkRelatedMapper.getByWxEnterpriseIdAndUnionId(wxEnterpriseId, staffId, unionid);
return EntityUtil.changeEntityNew(ExternalClerkRelatedDTO.class, related);
}
@Override
public FriendMemberStatusDTO getFriendMemberStatus(String memberId, String enterpriseId) {
TabHaobanExternalClerkRelated tabHaobanExternalClerkRelated = tabHaobanExternalClerkRelatedMapper.getByEnterpriseIdAndMemberId(enterpriseId, memberId, null);
if (tabHaobanExternalClerkRelated != null) {
TabHaobanExternalClerkRelated hasFriend = tabHaobanExternalClerkRelatedMapper.getByEnterpriseIdAndMemberId(enterpriseId, memberId, 1);
if (hasFriend != null) {
FriendMemberStatusDTO friendMemberStatusDTO = new FriendMemberStatusDTO();
friendMemberStatusDTO.setStatusFlag(1);
friendMemberStatusDTO.setLastCreateTime(hasFriend.getCreateTime());
return friendMemberStatusDTO;
} else {
TabHaobanExternalClerkRelated hasCancelFriend = tabHaobanExternalClerkRelatedMapper.getByEnterpriseIdAndMemberId(enterpriseId, memberId, 2);
if (hasCancelFriend != null) {
FriendMemberStatusDTO friendMemberStatusDTO = new FriendMemberStatusDTO();
friendMemberStatusDTO.setStatusFlag(2);
friendMemberStatusDTO.setLastCancelCreateTime(hasCancelFriend.getCreateTime());
return friendMemberStatusDTO;
}
}
}
FriendMemberStatusDTO friendMemberStatusDTO = new FriendMemberStatusDTO();
friendMemberStatusDTO.setStatusFlag(0);
return friendMemberStatusDTO;
}
/**
* 更新状态
*
* @param corpid
* @param wxEnterpriseId
*/
private void updateAgreeExternalUseridFlag(String corpid, String wxEnterpriseId) {
//serviceCorpid 默认为:达摩网络
boolean flag = qywxUserApiService.finishExternalUseridMigration(corpid, config.getCorpid());
log.info("更新新的外部联系人id最后一页,设置迁移完成:flag:{}", flag);
if (flag) {
//成功
wxEnterpriseApiService.agreeExternalUseridFlag(wxEnterpriseId, 1);
} else {
//失败
wxEnterriseMapper.updateExternalFlagById(3, wxEnterpriseId);
//回退老的
//externalUseridLogMapper.updateOldExternalUserId(wxEnterpriseId);
//更新状态为失败
externalUseridLogMapper.updateStatusFlagByWxEnterpriseId(0, wxEnterpriseId);
}
}
@Override
public boolean isExternalFriendByMemberId(String memberId, String enterpriseId) {
int count = tabHaobanExternalClerkRelatedMapper.countByMemberId(memberId, enterpriseId);
return count > 0;
}
/**
* 更新新的外部联系人id
*
* @param wxEnterpriseId wx企业标识
* @param corpid corpid
* @author mozhu
* @date 2021-12-13 15:40:30
*/
private void updateNewExUserId(String wxEnterpriseId, String corpid) {
wxEnterriseMapper.updateExternalFlagById(2, wxEnterpriseId);
messageAlert(wxEnterpriseId, "更新新的外部联系人id");
// 限流器
RRateLimiter rateLimiter = RedisUtil.getRedisClient().getRateLimiter("haoban:manage3:updateNewExUserId:limit");
// 每1秒产生5个令牌
rateLimiter.trySetRate(RateType.OVERALL, 5, 1, RateIntervalUnit.SECONDS);
int pageNum = 1;
// 开启消息发送
while (true) {
// 获取令牌
rateLimiter.acquire();
//企微转换最多支持1000个
PageInfo<TabHaobanExternalClerkRelated> tabHaobanWxEnterprisePageInfo = pageExternalByWxEnterpriseId(wxEnterpriseId, pageNum, 1000);
List<TabHaobanExternalClerkRelated> enterprisePageInfoList = tabHaobanWxEnterprisePageInfo.getList();
if (CollectionUtils.isEmpty(enterprisePageInfoList)) {
if (pageNum == 1) {
log.info("如果没有好友,直接转换完成..corpid:{}", corpid);
updateAgreeExternalUseridFlag(corpid, wxEnterpriseId);
}
break;
}
pageNum++;
List<String> externalUserIdList = enterprisePageInfoList.stream().map(TabHaobanExternalClerkRelated::getExternalUserId).collect(Collectors.toList());
JSONObject jsonObject = new JSONObject();
jsonObject.put("corpid", corpid);
jsonObject.put("wxEnterpriseId", wxEnterpriseId);
jsonObject.put("externalUserIdList", externalUserIdList);
jsonObject.put("externalUserId", externalUserIdList.get(0));
//是否是最后一批
if (tabHaobanWxEnterprisePageInfo.isIsLastPage()) {
jsonObject.put("isLastPage", true);
} else {
jsonObject.put("isLastPage", false);
}
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("updateNewExUserIdMq", JSONObject.toJSONString(jsonObject));
} catch (Exception e) {
log.info("企微转换id发送消息队列异常:{}", e.getMessage(), e);
}
}
}
/**
* 根据企业id分页
*
* @param wxEnterpriseId 企业标识
* @param pageNum 页面num
* @param pageSize 页面大小
* @return {@link Page<ExternalClerkRelatedDTO> }
* @author mozhu
* @date 2021-12-13 15:10:19
*/
private PageInfo<TabHaobanExternalClerkRelated> pageExternalByWxEnterpriseId(String wxEnterpriseId, Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<TabHaobanExternalClerkRelated> tabHaobanWxEnterpriseList = tabHaobanExternalClerkRelatedMapper.pageExternalByEnterpriseId(wxEnterpriseId);
return new PageInfo<>(tabHaobanWxEnterpriseList);
}
/**
* 消息提醒
* 告警
*
* @param wxEnterpriseId wx企业标识
* @param titleSub 子标题
*/
private void messageAlert(String wxEnterpriseId, String titleSub) {
ProviderLocalTag providerLocalTag = ProviderLocalTag.tag.get();
String traceId = providerLocalTag.traceId;
AlertMessageDTO messageDTO = new AlertMessageDTO();
messageDTO.setTraceId(traceId);
messageDTO.setWxEnterpriseId(wxEnterpriseId);
messageDTO.setAlertTitle(titleSub);
messageDTO.setAlertType(AlertTypeEnum.GET_NEW_EXTERNAL_USERID.getType());
checkQywxSettingApiService.alertCallback(JSONObject.toJSONString(messageDTO));
}
@Override
public int countFriendCountByClerkId(String wxEnterpriseId, String enterpriseId, String staffId, String clerkId) {
return tabHaobanExternalClerkRelatedMapper.countByClerkId(wxEnterpriseId, enterpriseId, staffId, clerkId);
}
@Override
public void initWxEnterpriseFriend(String wxEnterpriseId) {
log.info("刷新整个企业的好友开始={}", wxEnterpriseId);
String taskName = "刷新整个企微好友";
String taskId = dealSyncOperationApiService.createWxFriendTaskSingle(wxEnterpriseId, taskName, "-1", "管理员", SyncTaskTypeEnum.FRIEND_WX_ENTEPRISE.getType());
if (StringUtils.isNotBlank(taskId)) {
List<String> staffList = staffClerkRelationMapper.listByWxEnterpriseId(wxEnterpriseId);
if (CollectionUtils.isEmpty(staffList)) {
log.info("没有要刷新的:{},{}", wxEnterpriseId, staffList);
return;
}
staffList = staffList.stream().distinct().collect(Collectors.toList());
log.info("staffList={}", JSON.toJSONString(staffList));
for (String staffId : staffList) {
this.dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staffId, staffId, wxEnterpriseId);
}
}
}
@Override
public int getCountExternalClerk(String wxEnterpriseId, String staffId, List<Integer> statusFlags) {
return tabHaobanExternalClerkRelatedMapper.getCountExternalClerk(wxEnterpriseId,staffId,statusFlags);
}
@Override
public int updateExternalStatus(String wxEnterpriseId, String externalUserid,int status) {
return this.tabHaobanExternalClerkRelatedMapper.updateExternalStatus(wxEnterpriseId,externalUserid,status);
}
}
......@@ -438,6 +438,18 @@
and status_flag in(1,3,4)
order by update_time desc limit 1
</select>
<select id="getExternalClerkByWxUserIdAncExternalUserIdSelf" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from tab_haoban_external_clerk_related
where staff_id = #{staffId,jdbcType=VARCHAR}
and wx_enterprise_id = #{wxEnterpriseId}
and enterprise_id = #{enterpriseId}
and self_external_userid = #{externalUserId}
and status_flag in(1,3,4)
order by update_time desc limit 1
</select>
<select id="listByMemberIdAndWxEnterpriseId" resultMap="BaseResultMap">
select
......
......@@ -657,7 +657,7 @@ public class WxEnterpriseInfoController extends WebBaseController {
logger.info("请先添加好友,企业微信未查询到该好友,externalUserid:{}", externalUserid);
return resultResponse(HaoBanErrCode.ERR_11126);
}
if(!qwInfo.isSelf()) {
/*if(!qwInfo.isSelf()) {
MemberUnionidRelatedDTO memberUnionidRelatedDTO = memberUnionidRelatedApiService.getBySelfExternalUserId(wxEnterpriseId, externalUserid);
if (null == memberUnionidRelatedDTO) {
logger.info("请刷新好友,wxEnterpriseId:{},传入的externalUserid:{},wxUserId:{}", wxEnterpriseId, externalUserid, wxUserId);
......@@ -665,7 +665,7 @@ public class WxEnterpriseInfoController extends WebBaseController {
}
externalUserid = memberUnionidRelatedDTO.getExternalUserid() ;
logger.info("会员数据:{}", JSON.toJSONString(memberUnionidRelatedDTO));
}
}*/
ExternalClerkRelatedDTO clerkRelatedDTO = externalClerkRelatedApiService.getExternalClerkByWxUserIdAncExternalUserId(wxEnterpriseId, staffId, gicEnterpriseId, externalUserid);
if (clerkRelatedDTO == null) {
logger.info("该企业没有对应需要发送好友关系的信息,wxEnterpriseId:{},externalUserid:{},wxUserId:{}", wxEnterpriseId, externalUserid, wxUserId);
......
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