基于springboot+vue2.0+前后端分离式实现在线网络商城前后台项目

在线网络商城项目基于前后端分离开发模式实现,前端主要采用Vuejs,nodejs,Bootstrap,Font-awesome,zTree,ace,elementUI等实现,项目后端采用springboot,maven,redis,mybatis,mysql,mongodb等技术。前端界面风格借鉴锤子商城风格,系统网站前端提供用户在线选购,添加购物车,订单支付等功能。系统后端提供管理员用户操作,支持在线管理商品,订单管理,用户管理,系统管理等功能。

原文地址

一、程序设计

本次在线网络商城项目主要内容涉及:

主要功能模块:网站前台,系统管理后台
主要包含技术:springboot,mybatis,mysql,javascript,vue.js,html,css,Jsoup,httpclient
主要包含算法:基于用户协同过滤推荐,余弦相似度,Kmeans聚类分析,内容标签计算

系统采用前后端分离的开发模式完成,系统前端主要采用 Vue.js,javascript,html,CSS等技术实现。系统后端框架采用springboot+mybatis+mysql数据库搭建,针对海量的商品数据采用分表操作,完成数据存储分析。系统前后端数据交互,采用Ajax异步调用传输JSON实现。

二、效果实现

系统首页

请添加图片描述

系统后台

请添加图片描述

其他效果省略

三、核心代码

本次毕设系统在设计中针对用户商品推荐模块主要采用协同过滤推荐+用户历史浏览标签计算结合的方式实现,针对用户历史浏览的商品记录提取用户偏好商品的特征变量查询偏好商品数据,再结合用户个性化标签进行筛检最终的商品推荐结果,主要商品推荐流程如图:
请添加图片描述

核心实现源码

public SearchResult search(String key, int page, int size,String sort,int priceGt,int priceLte) {
		try{
			Settings settings = Settings.builder()
					.put("cluster.name", ES_CLUSTER_NAME).build();
			TransportClient client = new PreBuiltTransportClient(settings)
					.addTransportAddress(new TransportAddress(InetAddress.getByName(ES_CONNECT_IP), 9300));
			SearchResult searchResult=new SearchResult();
			//设置查询条件
			//单字段搜索
			QueryBuilder qb = matchQuery("productName",key);
			//设置分页
			if (page <=0 ){
				page =1;
			}
			int start=(page - 1) * size;
			//设置高亮显示
			HighlightBuilder hiBuilder=new HighlightBuilder();
			hiBuilder.preTags("<a style=\"color: #e4393c\">");
			hiBuilder.postTags("</a>");
			hiBuilder.field("productName");
			//执行搜索
			SearchResponse searchResponse = null;
			if(priceGt>=0&&priceLte>=0&&sort.isEmpty()){
				searchResponse=client.prepareSearch(ITEM_INDEX)
						.setTypes(ITEM_TYPE)
						.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
						.setQuery(qb)	// Query
						.setFrom(start).setSize(size).setExplain(true)	//从第几个开始,显示size个数据
						.highlighter(hiBuilder)		//设置高亮显示
						.setPostFilter(QueryBuilders.rangeQuery("salePrice").gt(priceGt).lt(priceLte))	//过滤条件
						.get();
			}else if(priceGt>=0&&priceLte>=0&&sort.equals("1")){
				searchResponse=client.prepareSearch(ITEM_INDEX)
						.setTypes(ITEM_TYPE)
						.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
						.setQuery(qb)	// Query
						.setFrom(start).setSize(size).setExplain(true)	//从第几个开始,显示size个数据
						.highlighter(hiBuilder)		//设置高亮显示
						.setPostFilter(QueryBuilders.rangeQuery("salePrice").gt(priceGt).lt(priceLte))	//过滤条件
						.addSort("salePrice", SortOrder.ASC)
						.get();
			}else if(priceGt>=0&&priceLte>=0&&sort.equals("-1")){
				searchResponse=client.prepareSearch(ITEM_INDEX)
						.setTypes(ITEM_TYPE)
						.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
						.setQuery(qb)	// Query
						.setFrom(start).setSize(size).setExplain(true)	//从第几个开始,显示size个数据
						.highlighter(hiBuilder)		//设置高亮显示
						.setPostFilter(QueryBuilders.rangeQuery("salePrice").gt(priceGt).lt(priceLte))	//过滤条件
						.addSort("salePrice", SortOrder.DESC)
						.get();
			}else if((priceGt<0||priceLte<0)&&sort.isEmpty()){
				searchResponse=client.prepareSearch(ITEM_INDEX)
						.setTypes(ITEM_TYPE)
						.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
						.setQuery(qb)	// Query
						.setFrom(start).setSize(size).setExplain(true)	//从第几个开始,显示size个数据
						.highlighter(hiBuilder)		//设置高亮显示
						.get();
			}else if((priceGt<0||priceLte<0)&&sort.equals("1")){
				searchResponse=client.prepareSearch(ITEM_INDEX)
						.setTypes(ITEM_TYPE)
						.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
						.setQuery(qb)	// Query
						.setFrom(start).setSize(size).setExplain(true)	//从第几个开始,显示size个数据
						.highlighter(hiBuilder)		//设置高亮显示
						.addSort("salePrice", SortOrder.ASC)
						.get();
			}else if((priceGt<0||priceLte<0)&&sort.equals("-1")){
				searchResponse=client.prepareSearch(ITEM_INDEX)
						.setTypes(ITEM_TYPE)
						.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
						.setQuery(qb)	// Query
						.setFrom(start).setSize(size).setExplain(true)	//从第几个开始,显示size个数据
						.highlighter(hiBuilder)		//设置高亮显示
						.addSort("salePrice", SortOrder.DESC)
						.get();
			}
			SearchHits hits = searchResponse.getHits();
			//返回总结果数
			searchResult.setRecordCount(hits.totalHits);
			List<SearchItem> list=new ArrayList<>();
			if (hits.totalHits > 0) {
				for (SearchHit hit : hits) {
					//总页数
					int totalPage=(int) (hit.getScore()/size);
					if((hit.getScore()%size)!=0){
						totalPage++;
					}
					//返回结果总页数
					searchResult.setTotalPages(totalPage);
					//设置高亮字段
					SearchItem searchItem=new Gson().fromJson(hit.getSourceAsString(),SearchItem.class);
					String productName = hit.getHighlightFields().get("productName").getFragments()[0].toString();
					searchItem.setProductName(productName);
					//返回结果
					list.add(searchItem);
				}
			}
			searchResult.setItemList(list);
			//因个人服务器配置过低此处取消关闭减轻搜索压力增快搜索速度
			//client.close();
			return searchResult;
		}catch (Exception e){
			e.printStackTrace();
			throw new XmallException("查询ES索引库出错");
		}

获取源码

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
权限管理系统是一种用于管理用户权限和角色的系统,可以根据用户的身份和角色来控制其访问系统中的各种资源。基于SpringBootVue和Redis的前后端分离,可以更好地实现权限管理系统的功能。 在这个系统中,SpringBoot作为后端框架,提供了强大的功能和稳定的性能,可以处理用户的请求并进行权限验证。Vue作为端框架,提供了友好的界面和良好的用户体验,可以让用户方便地进行权限管理操作。而Redis作为缓存数据库,可以用来存储权限信息和用户的登录状态,加快系统的响应速度和提高系统的性能。 在权限管理系统中,我们可以使用RBAC(基于角色的权限控制)模型,将用户分配到不同的角色,再将角色分配到不同的权限,从而实现对用户访问资源的控制。通过这种方,可以实现灵活的权限管理,并且可以根据实际需求动态地调整用户的权限和角色。 通过使用SpringBootVue,我们可以实现前后端分离,让端和后端分别进行开发和维护,降低了系统的耦合度,同时也增加了系统的灵活性和可维护性。而通过使用Redis,我们可以充分利用其高速的读取和写入能力,有效地提升系统的性能和响应速度。 综上所述,基于SpringBootVue和Redis的权限管理系统,可以实现灵活、高效和安全的权限管理功能,满足用户对于权限管理的各种需求。同时,前后端分离也使得系统更加灵活和易于维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值