修改企业微信好友添加问题。

dev_0531
kevin jiang 5 years ago
parent d4a8c6a5b7
commit 9929d80b8c

@ -225,11 +225,14 @@ public class CustomerService {
* @date 2020/05/24 13:46
*/
private void handleAddCustomer (TurnBackDTO turnBackDTOS) throws Exception {
if(turnBackDTOS.getWxData().getUserId().equals("wmA--5DgAAo8v4QbbVbYrU9c3Kp7_HBA")){
System.out.println("1");
}
OpCustomer opCustomer = null;
if (turnBackDTOS.getWxData().getUnionId() == null && turnBackDTOS.getWxData().getUserId() != null) {
//此时说明是企业微信扫码添加
QueryWrapper<OpCustomer> customerWrapper = new QueryWrapper<>();
customerWrapper.eq("wechat_uni_id", null).eq("external_userid", turnBackDTOS.getWxData().getUserId()).last("limit 1");
customerWrapper.eq("external_userid", turnBackDTOS.getWxData().getUserId()).last("limit 1");
opCustomer = opCustomerDOMapper.selectOne(customerWrapper);
}else if (turnBackDTOS.getWxData().getUnionId() != null && turnBackDTOS.getUserId() != null){
//客户信息
@ -421,7 +424,7 @@ public class CustomerService {
public void sellerCustomerRelation(OpCustomer opCustomer, Date joinTime, long shopId, long sellerId) {
QueryWrapper<OpSellerCustomerRelation> wrapper1 = new QueryWrapper<>();
//一个客户只能添加一个店的店长微信,所以根据店铺判断即可
wrapper1.eq("customer_id", opCustomer.getId()).eq("store_id", shopId).last("limit 1");
wrapper1.eq("customer_id", opCustomer.getId()).eq("store_id", shopId).eq("user_id", sellerId).last("limit 1");
OpSellerCustomerRelation opSellerCustomerRelation = opSellerCustomerRelationDOMapper.selectOne(wrapper1);
if (null == opSellerCustomerRelation) {
//不存在就添加

@ -101,4 +101,8 @@ public interface OpSellerCustomerRelationDOMapper extends BaseMapper<OpSellerCus
Integer countStoreCustomers(@Param("customerId") Long customerId, @Param("userId") Long userId, @Param("storeId") Long storeId);
List<Map<String, Object>> selectCustomersByCpUserId();
List<Map<String, Object>> selectCustomersByCpUserIdByList(@Param("cpUserIds")List<String> cpUserIds);
}

@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository
public interface PrivilageCpUserDOMapper extends BaseMapper<PrivilageCpUserDO> {
@ -29,4 +30,5 @@ public interface PrivilageCpUserDOMapper extends BaseMapper<PrivilageCpUserDO> {
Long selectStoresCount(@Param("cpUserIds")List<String> cpUserIds);
Long selectDistinctStoresCount(@Param("cpUserIds")List<String> cpUserIds);
}

@ -18,7 +18,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*;
/**
@ -76,15 +78,43 @@ public class CustomerDataJob {
int index =0;
DetailDTOMessageEventProducer producer = new DetailDTOMessageEventProducer(ringBuffer, qwMailListManageService, customerService, poiStoreStaffDOMapper);
if (StringUtils.isBlank(cpUserIds)){
// 获取账号的总数
List<PrivilageCpUserDO> privilageCpUserDOS = privilageCpUserDOMapper.selectList(null);
// 获取账号的总客户数
List<Map<String, Object>> customerList = opSellerCustomerRelationDOMapper.selectCustomersByCpUserId();
Map<String,Object> customerMap = new HashMap<>();
for (int i = 0; i < customerList.size(); i++) {
Map<String, Object> item = customerList.get(i);
customerMap.put(item.get("cpUserId").toString(), item.get("sumCustomer"));
}
for (PrivilageCpUserDO privilageCpUserDO : privilageCpUserDOS) {
Long storeId = privilageCpUserStoreDOMapper.selectOneByCpUserId(privilageCpUserDO.getCpUserId());
producer.produceData(index,storeId,privilageCpUserDO.getCpUserId());
ProduceDTO produceDTO = new ProduceDTO();
produceDTO.setIndex(index);
produceDTO.setStoreId(storeId);
produceDTO.setCpUserId(privilageCpUserDO.getCpUserId());
if(null != customerMap.get(privilageCpUserDO.getCpUserId())){
String sumCustomer = customerMap.get(privilageCpUserDO.getCpUserId()).toString();
produceDTO.setSumCustomer(Integer.parseInt(sumCustomer));
}else{
produceDTO.setSumCustomer(0);
}
producer.produceData(produceDTO);
index++;
}
}else{
String[] split = cpUserIds.split(",");
List<String> cpUserIdList = Arrays.asList(split);
// 获取账号的总客户数
List<Map<String, Object>> customerList = opSellerCustomerRelationDOMapper.selectCustomersByCpUserIdByList(cpUserIdList);
Map<String,Object> customerMap = new HashMap<>();
for (int i = 0; i < customerList.size(); i++) {
Map<String, Object> item = customerList.get(i);
customerMap.put(item.get("cpUserId").toString(), item.get("sumCustomer"));
}
for (String cpUserId : cpUserIdList) {
QueryWrapper<PrivilageCpUserDO> cpUserDOQueryWrapper = new QueryWrapper<>();
cpUserDOQueryWrapper.eq("cp_user_id",cpUserId).last("limit 1");
@ -97,7 +127,19 @@ public class CustomerDataJob {
relationQueryWrapper.eq("type",3).eq("user_id",privilageCpUserDO.getId());
opSellerCustomerRelationDOMapper.delete(relationQueryWrapper);
Long storeId = privilageCpUserStoreDOMapper.selectOneByCpUserId(cpUserId);
producer.produceData(index,storeId,cpUserId);
ProduceDTO produceDTO = new ProduceDTO();
produceDTO.setIndex(index);
produceDTO.setStoreId(storeId);
produceDTO.setCpUserId(privilageCpUserDO.getCpUserId());
if(null != customerMap.get(privilageCpUserDO.getCpUserId())){
String sumCustomer = customerMap.get(privilageCpUserDO.getCpUserId()).toString();
produceDTO.setSumCustomer(Integer.parseInt(sumCustomer));
}else{
produceDTO.setSumCustomer(0);
}
producer.produceData(produceDTO);
index++;
}
}

@ -26,4 +26,9 @@ public class DetailDTOMessage {
private PoiStoreStaffDOMapper poiStoreStaffDOMapper;
private List<WxCpUserExternalContactInfo> customers;
/**
*
*/
private Integer sumCustomer;
}

@ -34,6 +34,27 @@ public class DetailDTOMessageEventProducer {
ringBuffer.get(seq).setQwMailListManageService(qwMailListManageService);
ringBuffer.get(seq).setCustomerService(customerService);
ringBuffer.get(seq).setPoiStoreStaffDOMapper(poiStoreStaffDOMapper);
// ringBuffer.get(seq).setCustomers(customers);
} finally {
// 发布Event激活观察者去消费 将sequence传递给该消费者
// 注意,最后的 ringBuffer.publish() 方法必须包含在 finally 中以确保必须得到调用;如果某个请求的 sequence 未被提交,将会堵塞后续的发布操作或者其它的 producer。
ringBuffer.publish(seq);
}
}
public void produceData(ProduceDTO produceDTO) {
// 获得下一个Event槽的下标
long seq = ringBuffer.next();
try {
// 给Event填充数据
//给这个区块放入 数据 如果此处不理解想想RingBuffer的结构图
ringBuffer.get(seq).setIndex(produceDTO.getIndex());
ringBuffer.get(seq).setCpUserId(produceDTO.getCpUserId());
ringBuffer.get(seq).setStoreId(produceDTO.getStoreId());
ringBuffer.get(seq).setQwMailListManageService(qwMailListManageService);
ringBuffer.get(seq).setCustomerService(customerService);
ringBuffer.get(seq).setPoiStoreStaffDOMapper(poiStoreStaffDOMapper);
ringBuffer.get(seq).setSumCustomer(produceDTO.getSumCustomer());
// ringBuffer.get(seq).setCustomers(customers);
} finally {
// 发布Event激活观察者去消费 将sequence传递给该消费者

@ -45,7 +45,11 @@ public class DetailDTOMessageGroupConsumer implements WorkHandler<DetailDTOMessa
List<WxCpUserExternalContactInfo> customers = null;
try {
customers = qwMailListManageService.getCustomer(cpUserId);
if(null == detailDtoMessage.getSumCustomer()){
customers = qwMailListManageService.getCustomer(cpUserId);
}else {
customers = qwMailListManageService.getCustomer(cpUserId, detailDtoMessage.getSumCustomer());
}
} catch (Exception e) {
log.error("查询联系人失败:" + cpUserId, e);
}
@ -54,10 +58,8 @@ public class DetailDTOMessageGroupConsumer implements WorkHandler<DetailDTOMessa
}
for (WxCpUserExternalContactInfo customer : customers) {
TurnBackDTO turnBackDTO = new TurnBackDTO();
WxCpUserExternalContactInfo.ExternalContact externalContact = customer.getExternalContact();
List<WxCpUserExternalContactInfo.FollowedUser> followedUsers = customer.getFollowedUsers();
turnBackDTO.setEaCode("");
if (CollectionUtils.isNotEmpty(followedUsers)) {
for (WxCpUserExternalContactInfo.FollowedUser followedUser : followedUsers) {
@ -103,7 +105,6 @@ public class DetailDTOMessageGroupConsumer implements WorkHandler<DetailDTOMessa
wxDataDTO.setUserId(externalContact.getExternalUserId());
wxDataDTO.setUnionId(externalContact.getUnionId());
turnBackDTO.setWxData(wxDataDTO);
customerService.turnBack(turnBackDTO);
}
}

@ -0,0 +1,17 @@
package com.kiisoo.ic.job.detail;
import lombok.Data;
@Data
public class ProduceDTO {
private int index;
private Long storeId;
private String cpUserId;
private Integer sumCustomer;
}

@ -91,4 +91,16 @@ public class VipDataDTO {
public void setRegisterTime(String registerTime) {
this.registerTime = registerTime;
}
@Override
public String toString() {
return "VipDataDTO{" +
"name='" + name + '\'' +
", phone='" + phone + '\'' +
", birthday=" + birthday +
", sex=" + sex +
", level='" + level + '\'' +
", registerTime='" + registerTime + '\'' +
'}';
}
}

@ -66,4 +66,14 @@ public class WxDataDTO {
public void setAvatarUrl(String avatarUrl) {
this.avatarUrl = avatarUrl;
}
@Override
public String toString() {
return "WxDataDTO{" +
"unionId='" + unionId + '\'' +
", openId='" + openId + '\'' +
", userId='" + userId + '\'' +
", avatarUrl='" + avatarUrl + '\'' +
'}';
}
}

@ -277,7 +277,7 @@ public class QWMailListManageService {
public List<WxCpUserExternalContactInfo> getCustomer(String cpUserId) throws WxErrorException {
//查询店铺id——店铺ID存在说明该账号的客户都绑在店上不存在则说明绑在账号上
Long storeId = privilageCpUserStoreDOMapper.selectOneByCpUserId(cpUserId);
// Long storeId = privilageCpUserStoreDOMapper.selectOneByCpUserId(cpUserId);
//账号一定存在不存在则返回null
QueryWrapper<PrivilageCpUserDO> cpQw = new QueryWrapper<>();
@ -321,4 +321,56 @@ public class QWMailListManageService {
}
return customers;
}
public List<WxCpUserExternalContactInfo> getCustomer(String cpUserId, Integer sumCustomer) throws WxErrorException {
//查询店铺id——店铺ID存在说明该账号的客户都绑在店上不存在则说明绑在账号上
// Long storeId = privilageCpUserStoreDOMapper.selectOneByCpUserId(cpUserId);
//账号一定存在不存在则返回null
QueryWrapper<PrivilageCpUserDO> cpQw = new QueryWrapper<>();
cpQw.eq("cp_user_id",cpUserId).last("limit 1");
PrivilageCpUserDO privilageCpUserDO = privilageCpUserDOMapper.selectOne(cpQw);
if (privilageCpUserDO == null){
return null;
}
//获取第三方接口方法
List<WxCpUserExternalContactInfo> customers = null;
wxCpService = WxCpConfiguration.getCpService(applicationid);
WxCpExternalContactService externalContactService = wxCpService.getExternalContactService();
List<String> customerStrs = externalContactService.listExternalContacts(cpUserId);
//查询客户列表为空则直接返回
if (CollectionUtils.isNotEmpty(customerStrs)){
customers = new ArrayList<>();
// 判断总客户数是否一致, 不一致就拉取明细
if(sumCustomer.equals(customerStrs.size())){
return customers;
}else{
log.info("客户总数不一致 " + cpUserId + " | 系统总数=" + sumCustomer + " | 企业微信后台总数=" + customerStrs.size());
}
for (String customerStr:customerStrs){
//查询该客户id的关系是否存在
// QueryWrapper<OpCustomer> customerQueryWrapper = new QueryWrapper<>();
// customerQueryWrapper.eq("external_userid",customerStr).last("limit 1");
// OpCustomer opCustomer = opCustomerDOMapper.selectOne(customerQueryWrapper);
// //客户都不存在则直接下一步
// if (opCustomer != null){
// Long relationId = opSellerCustomerRelationDOMapper.selectSellerCustomerRelation(opCustomer.getId(), privilageCpUserDO.getId(), storeId);
// //关系存在则不查询明细
// if (relationId != null){
// continue;
// }
// }
try{
WxCpUserExternalContactInfo contactDetail = externalContactService.getContactDetail(customerStr);
customers.add(contactDetail);
}catch (Exception e){
log.error("企业微信查询客户明细失败",e);
continue;
}
}
}
return customers;
}
}

@ -217,4 +217,44 @@
</choose>
limit 1
</select>
<select id="selectCustomersByCpUserId" resultType="java.util.Map">
SELECT
t2.staff_code as cpUserId,
count(1) as sumCustomer
FROM
op_seller_customer_relation t ,
poi_store_staff t2,
privilage_cp_user t3
WHERE
t2.store_id = t.store_id
AND t2.id = t.user_id
AND t3.cp_user_id = t2.staff_code
GROUP BY
t2.store_id ,
t2.staff_code
</select>
<select id="selectCustomersByCpUserIdByList" resultType="java.util.Map">
SELECT
t2.staff_code as cpUserId,
count(1) as sumCustomer
FROM
op_seller_customer_relation t ,
poi_store_staff t2,
privilage_cp_user t3
WHERE
t2.store_id = t.store_id
AND t2.id = t.user_id
AND t3.cp_user_id = t2.staff_code
AND t3.cp_user_id in
<foreach collection="cpUserIds" separator="," item="item" close=")" index="index" open="(">
#{item}
</foreach>
GROUP BY
t2.store_id ,
t2.staff_code
</select>
</mapper>

Loading…
Cancel
Save