当今社会,电商等行业用分销来拉拢用户群体的场景越演越烈。
举例:A分享给B后,A获得一定奖励。
B再次分享给C后,A获得80%奖励,B获得60%奖励。
C再次分享给D后,A获得80%奖励,B获得60%奖励,C获得40%奖励。等等类似
我们得实现方案有两种:
方式一:采用邀请码方式。对用户不友好
方式二:采用链接或二维码携带加密参数分享。 推荐
java 如何实现此需求呢?
- 建库建表,每行数据 id,parent_id parent_id用来关联用户上级。
- 分享地址携带用户id加密
- 奖励时,在库中查找传入用户id的所有上级。
这里就不再代码实现。如果有做过组织架构的项目,那这个功能就不在话下了。
附上我项目中的组织架构核心代码:
/**
* 1.将模型转换成含带children的模型 此步骤也可省略
* 2.获取没有父级的所有节点
* @param list 数据库中所有的行
* @return
*/
private List<SysDepartTreeModel> wrapTreeDataToTreeList(List<SysDepart> list){
//数据库所有数据数组
List<SysDepartTreeModel> treeAllList = new ArrayList<>();
//顶层数据数据
List<SysDepartTreeModel> treeParentList = new ArrayList<>();
list.stream().forEach(dept->{
//修改SysDepart 数据模型
treeAllList.add(new SysDepartTreeModel(dept));
//获得树一级的所有父节点
if(oConvertUtils.isEmpty(dept.getParentId())){
treeParentList.add(new SysDepartTreeModel(dept));
}
});
getGrandChildren(treeAllList,treeParentList);
return treeParentList;
}
/**
* 获取树结构的组织机构
* @param treeAllList 数据库总条数
* @param treeParentList 最顶端 没有parent的数组
*/
private void getGrandChildren(List<SysDepartTreeModel> treeAllList,List<SysDepartTreeModel> treeParentList){
treeParentList.stream().forEach(tree->{
List<SysDepartTreeModel> chlidens = treeAllList.stream().filter(item -> item.getParentId().equals(tree.getId())).collect(Collectors.toList());
tree.getChildren().addAll(chlidens);
if(!oConvertUtils.listIsEmpty(chlidens)){
getGrandChildren(treeAllList,tree.getChildren());
}
});
}