diff --git a/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java b/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java index 2eb5fe6..51159e2 100644 --- a/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java +++ b/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java @@ -71,6 +71,32 @@ public class CustomerViewController extends BaseController { } } + /** + * 全量同步总数 + * @return 客户概览VO + */ + @RequestMapping(value = "/sync/all/count", method = RequestMethod.GET) + public void syncAllCount(){ + try{ + customerViewService.syncAllCount(); + }catch (Exception e){ + log.error("全量同步总数出错", e); + } + } + + /** + * 批量同步总数 + * @return 客户概览VO + */ + @RequestMapping(value = "/sync/alive/count", method = RequestMethod.GET) + public void syncAliveCount(){ + try{ + customerViewService.syncAliveCount(); + }catch (Exception e){ + log.error("批量同步总数出错", e); + } + } + /** * 找到所有推广为0店铺 * @param userId 用户id diff --git a/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java b/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java index 03da7cf..476ea33 100644 --- a/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java +++ b/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java @@ -3,10 +3,13 @@ package com.kiisoo.ic.customer.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; +import com.kiisoo.ic.config.WxCpConfiguration; import com.kiisoo.ic.customer.entity.*; import com.kiisoo.ic.customer.mapper.OpCustomerDOMapper; import com.kiisoo.ic.customer.mapper.OpVipDOMapper; import com.kiisoo.ic.domain.service.PrivilageDomainService; +import com.kiisoo.ic.employee.entity.CpUserCustomerRelationDO; +import com.kiisoo.ic.employee.entity.PrivilageCpUserDO; import com.kiisoo.ic.employee.mapper.PrivilageCpUserDOMapper; import com.kiisoo.ic.generalize.entity.PoiCustomerContactDataStat; import com.kiisoo.ic.generalize.entity.PrivilageOrganizational; @@ -16,6 +19,9 @@ import com.kiisoo.ic.generalize.service.RetailCompanyService; import com.kiisoo.ic.store.entity.PoiStore; import com.kiisoo.ic.store.mapper.PoiStoreDOMapper; import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.cp.api.WxCpExternalContactService; +import me.chanjar.weixin.cp.api.WxCpService; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -25,6 +31,8 @@ import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import static com.kiisoo.ic.config.WxCpConfiguration.APPLICATIONID; + /** * @Description: 客户数据概览service * @Author: wangyinjia @@ -499,7 +507,10 @@ public class CustomerViewService { return shopIds; } - + /** + * 客户概览main + * @return 客户概览VO + */ public CustomerViewVO getAllCount() { Long all = privilageCpUserDOMapper.selectAllCount(); Long dis = privilageCpUserDOMapper.selectDistinctAllCount(); @@ -508,4 +519,90 @@ public class CustomerViewService { result.setAllValidCustomer(dis); return result; } + + public void syncAllCount() throws WxErrorException { + //查询现有企业微信账号 + List privilageCpUserDOS = privilageCpUserDOMapper.selectList(null); + Map cpUserIdMap = new HashMap<>(); + for (PrivilageCpUserDO privilageCpUserDO : privilageCpUserDOS) { + cpUserIdMap.put(privilageCpUserDO.getCpUserId(),privilageCpUserDO); + } + WxCpService wxCpService = WxCpConfiguration.getCpService(APPLICATIONID); + WxCpExternalContactService externalContactService = wxCpService.getExternalContactService(); + //查询企业微信已配置联系我的用户 + List cpUserIds = externalContactService.listFollowUser(); + for (String cpUserId : cpUserIds) { + List customerStrs; + try { + //获取客户联系人 + customerStrs = externalContactService.listExternalContacts(cpUserId); + }catch (Exception e){ + PrivilageCpUserDO privilageCpUserDO = cpUserIdMap.get(cpUserId); + if (privilageCpUserDO != null){ + privilageCpUserDO.setStatus(9); + privilageCpUserDOMapper.updateById(privilageCpUserDO); + } + continue; + } + if (CollectionUtils.isEmpty(customerStrs)){ + continue; + } + PrivilageCpUserDO privilageCpUserDO = cpUserIdMap.get(cpUserId); + if (privilageCpUserDO == null){ + //企业微信账号不存在,创建一个账号 + privilageCpUserDO = new PrivilageCpUserDO(); + privilageCpUserDO.setCpUserId(cpUserId); + privilageCpUserDO.setStatus(1); + privilageCpUserDOMapper.insert(privilageCpUserDO); + } + //批量添加账号 + for (String customerStr : customerStrs) { + CpUserCustomerRelationDO cpUserCustomerRelationDO = privilageCpUserDOMapper.selectCpUserCustomerRelation(customerStr, cpUserId, privilageCpUserDO.getId()); + if (cpUserCustomerRelationDO == null){ + privilageCpUserDOMapper.insertCpUserCustomerRelation(customerStr,cpUserId,privilageCpUserDO.getId()); + } + } + //移除已经请求过的数据库内账号 + cpUserIdMap.remove(cpUserId); + } + Set removeCpUserIds = cpUserIdMap.keySet(); + for (String cpUserId:removeCpUserIds){ + PrivilageCpUserDO privilageCpUserDO = cpUserIdMap.get(cpUserId); + if (privilageCpUserDO != null){ + //删除 + privilageCpUserDOMapper.deleteById(privilageCpUserDO.getId()); + } + } + } + + public void syncAliveCount() throws WxErrorException { + //查询现有企业微信账号 + QueryWrapper qw = new QueryWrapper<>(); + qw.ne("status",9); + List privilageCpUserDOS = privilageCpUserDOMapper.selectList(null); + WxCpService wxCpService = WxCpConfiguration.getCpService(APPLICATIONID); + WxCpExternalContactService externalContactService = wxCpService.getExternalContactService(); + //查询企业微信已配置联系我的用户 + for (PrivilageCpUserDO privilageCpUserDO : privilageCpUserDOS) { + List customerStrs; + try { + //获取客户联系人 + customerStrs = externalContactService.listExternalContacts(privilageCpUserDO.getCpUserId()); + }catch (Exception e){ + privilageCpUserDO.setStatus(9); + privilageCpUserDOMapper.updateById(privilageCpUserDO); + continue; + } + if (CollectionUtils.isEmpty(customerStrs)){ + continue; + } + //批量添加账号 + for (String customerStr : customerStrs) { + CpUserCustomerRelationDO cpUserCustomerRelationDO = privilageCpUserDOMapper.selectCpUserCustomerRelation(customerStr, privilageCpUserDO.getCpUserId(), privilageCpUserDO.getId()); + if (cpUserCustomerRelationDO == null){ + privilageCpUserDOMapper.insertCpUserCustomerRelation(customerStr,privilageCpUserDO.getCpUserId(),privilageCpUserDO.getId()); + } + } + } + } } diff --git a/src/main/java/com/kiisoo/ic/employee/entity/CpUserCustomerRelationDO.java b/src/main/java/com/kiisoo/ic/employee/entity/CpUserCustomerRelationDO.java new file mode 100644 index 0000000..4538674 --- /dev/null +++ b/src/main/java/com/kiisoo/ic/employee/entity/CpUserCustomerRelationDO.java @@ -0,0 +1,25 @@ +package com.kiisoo.ic.employee.entity; + +import lombok.Data; +/** + * @ClassName: CpUserCustomerRelationDO + * @Description: + * @Auther: yechenhao + * @Date: 2020/5/14 0008 14:56 + * @Version: + */ +@Data +public class CpUserCustomerRelationDO { + /** + * 客户userId + */ + private String customerUserId; + /** + * 企业微信账号 + */ + private String cpUserId; + /** + * privilage_cp_user主键 + */ + private String cpId; +} diff --git a/src/main/java/com/kiisoo/ic/employee/mapper/PrivilageCpUserDOMapper.java b/src/main/java/com/kiisoo/ic/employee/mapper/PrivilageCpUserDOMapper.java index 8b8c4f1..6eec71d 100644 --- a/src/main/java/com/kiisoo/ic/employee/mapper/PrivilageCpUserDOMapper.java +++ b/src/main/java/com/kiisoo/ic/employee/mapper/PrivilageCpUserDOMapper.java @@ -1,6 +1,7 @@ package com.kiisoo.ic.employee.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.kiisoo.ic.employee.entity.CpUserCustomerRelationDO; import com.kiisoo.ic.employee.entity.PrivilageCpUserDO; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -9,6 +10,8 @@ import org.springframework.stereotype.Repository; public interface PrivilageCpUserDOMapper extends BaseMapper { int insertCpUserCustomerRelation(@Param("customerUserId")String custeromUserId,@Param("cpUserId")String cpUserId,@Param("cpId")Long cpId); + CpUserCustomerRelationDO selectCpUserCustomerRelation(@Param("customerUserId")String custeromUserId, @Param("cpUserId")String cpUserId, @Param("cpId")Long cpId); + Long selectAllCount(); Long selectDistinctAllCount(); diff --git a/src/main/resources/mapper/PrivilageCpUserDOMapper.xml b/src/main/resources/mapper/PrivilageCpUserDOMapper.xml index 2ecc02e..02a5bf3 100644 --- a/src/main/resources/mapper/PrivilageCpUserDOMapper.xml +++ b/src/main/resources/mapper/PrivilageCpUserDOMapper.xml @@ -5,6 +5,14 @@ insert into op_cp_user_customer_relation (customer_user_id,cp_user_id,cp_id)values (#{customerUserId},#{cpUserId},#{cpId}) + +