电商+支付双系统项目------实现电商系统中分类模块的开发!

本篇文章主要介绍一下这个项目中电商系统的分类模块开发。电商系统有很多模块,除了分类模块,还有用户模块,购物车模块,订单模块等等。上一篇文章已经讲了用户模块,这篇文章我们讲讲项目中的分类模块。

有的人可能会很懵,分类模块是个啥?你说的用户模块是针对用户的,购物车模块是针对购物车的,分类模块是什么?其实,在电商系统中,分类模块是用于对商品进行分类和组织的功能模块。它允许商家将商品按照一定的标准进行分类,以便用户能够更容易地浏览和搜索他们感兴趣的商品。

通过上面两幅图,先带大家直观感受下分类模块大概是个啥,脑子里有个画面。

再来通过一个例子了解一下商品分类层级结构:

  • 服装(Clothing)
    • 男装(Men's Clothing)
      • 衬衫(Shirts)
      • 裤子(Pants)
      • 外套(Jackets)
    • 女装(Women's Clothing)
      • 连衣裙(Dresses)
      • 上衣(Tops)
      • 裙子(Skirts)
  • 鞋类(Shoes)
    • 男鞋(Men's Shoes)
      • 运动鞋(Athletic Shoes)
      • 皮鞋(Dress Shoes)
    • 女鞋(Women's Shoes)
      • 高跟鞋(High Heels)
      • 平底鞋(Flats)

在导航菜单中显示主分类(例如"服装"和"鞋类"),在各自的子菜单中显示子分类(例如"男装"和"女装")。

商品分类和垃圾分类区别不大。

了解完分类模块到底是什么后,我们应该想想如何设计分类模块的代码?我们还是从Dao层->service层->controller层这个开发顺序。

设计Dao层

package com.imooc.mall.dao;

import com.imooc.mall.pojo.Category;

import java.util.List;

public interface CategoryMapper {
    int deleteByPrimaryKey(Integer id); //根据主键id删除对应的商品分类记录

    int insert(Category record);  //插入一条商品分类记录

    int insertSelective(Category record);  //选择性地插入一条商品分类记录,只插入非空字段

    Category selectByPrimaryKey(Integer id);  //根据主键id查询对应的商品分类记录

    int updateByPrimaryKeySelective(Category record);  //选择性地更新商品分类记录,只更新非空字段

    int updateByPrimaryKey(Category record);  //更新商品分类记录的所有字段

    List<Category> selectAll();  //查询所有的商品分类记录,返回一个商品分类列表
}

上面的代码是一个名为CategoryMapper的接口,它定义了对商品分类数据进行操作的方法。这些方法定义了对商品分类表的常见操作,包括插入、更新、删除和查询等。它们提供了对商品分类数据的基本访问功能,供其他组件(如服务层)使用。实际的数据操作逻辑需要在CategoryMapper的实现类中进行实现。

关于这些方法的实现类真的很复杂,我的建议是了解一下就好,不算太重点,实现类其实就长这样:

Dao层设计好了我们接着来设计service层

设计service层

package com.imooc.mall.service;

import com.imooc.mall.vo.CategoryVo;
import com.imooc.mall.vo.ResponseVo;

import java.util.List;
import java.util.Set;


public interface ICategoryService {

	ResponseVo<List<CategoryVo>> selectAll();

	void findSubCategoryId(Integer id, Set<Integer> resultSet);
}

上面的代码是一个名为ICategoryService的接口,它定义了商品分类相关的服务方法。

这些方法定义了商品分类服务的功能,主要用于查询和处理商品分类相关的业务逻辑。

selectAll()方法用于获取所有商品分类的信息,而findSubCategoryId()方法用于查找指定分类下的所有子分类的主键id。这些方法可以被其他组件(如控制器层)调用,以实现具体的业务需求。

这里只提供了接口定义,并没有给出具体的实现逻辑。实际的业务逻辑需要在ICategoryService的实现类中进行编写。我们接下来就讲讲怎么编写这些实现类。

package com.imooc.mall.service.impl;

import com.imooc.mall.dao.CategoryMapper;
import com.imooc.mall.pojo.Category;
import com.imooc.mall.service.ICategoryService;
import com.imooc.mall.vo.CategoryVo;
import com.imooc.mall.vo.ResponseVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import static com.imooc.mall.consts.MallConst.ROOT_PARENT_ID;


@Service
public class CategoryServiceImpl implements ICategoryService {

	@Autowired
	private CategoryMapper categoryMapper;

	/**
	 * 耗时:http(请求微信api) > 磁盘 > 内存
	 * mysql(内网+磁盘)
	 * @return
	 */
	@Override
	public ResponseVo<List<CategoryVo>> selectAll() {
		List<Category> categories = categoryMapper.selectAll();

		//查出parent_id=0
//		for (Category category : categories) {
//			if (category.getParentId().equals(ROOT_PARENT_ID)) {
//				CategoryVo categoryVo = new CategoryVo();
//				BeanUtils.copyProperties(category, categoryVo);
//				categoryVoList.add(categoryVo);
//			}
//		}

		//lambda + stream
		List<CategoryVo> categoryVoList = categories.stream()
				.filter(e -> e.getParentId().equals(ROOT_PARENT_ID))
				.map(this::category2CategoryVo)
				.sorted(Comparator.comparing(CategoryVo::getSortOrder).reversed())
				.collect(Collectors.toList());

		//查询子目录
		findSubCategory(categoryVoList, categories);

		return ResponseVo.success(categoryVoList);
	}

	@Override
	public void findSubCategoryId(Integer id, Set<Integer> resultSet) {
		List<Category> categories = categoryMapper.selectAll();
		findSubCategoryId(id, resultSet, categories);
	}

	private void findSubCategoryId(Integer id, Set<Integer> resultSet, List<Category> categories) {
		for (Category category : categories) {
			if (category.getParentId().equals(id)) {
				resultSet.add(category.getId());
				findSubCategoryId(category.getId(), resultSet, categories);
			}
		}
	}


	private void findSubCategory(List<CategoryVo> categoryVoList, List<Category> categories) {
		for (CategoryVo categoryVo : categoryVoList) {
			List<CategoryVo> subCategoryVoList = new ArrayList<>();

			for (Category category : categories) {
				//如果查到内容,设置subCategory, 继续往下查
				if (categoryVo.getId().equals(category.getParentId())) {
					CategoryVo subCategoryVo = category2CategoryVo(category);
					subCategoryVoList.add(subCategoryVo);
				}

				subCategoryVoList.sort(Comparator.comparing(CategoryVo::getSortOrder).reversed());
				categoryVo.setSubCategories(subCategoryVoList);

				findSubCategory(subCategoryVoList, categories);
			}
		}
	}

	private CategoryVo category2CategoryVo(Category category) {
		CategoryVo categoryVo = new CategoryVo();
		BeanUtils.copyProperties(category, categoryVo);
		return categoryVo;
	}
}

我说实话,这里的实现类确实是有点难以理解的,所以我的建议是能看懂最好,看不懂就放一放,到时候等对项目有一个整体的了解再看也不迟。现在你要知道的就是service层有两个方法,一个方法是获取所有商品的分类信息,另一个方法是查找指定分类下的所有子分类的主键id。

设计完service层之后,我们来设计controller层。

设计controller层

package com.imooc.mall.controller;

import com.imooc.mall.service.ICategoryService;
import com.imooc.mall.vo.CategoryVo;
import com.imooc.mall.vo.ResponseVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;


@RestController
public class CategoryController {

	@Autowired
	private ICategoryService categoryService;

	@GetMapping("/categories")
	public ResponseVo<List<CategoryVo>> selectAll() {
		return categoryService.selectAll();
	}
}

这段代码是一个CategoryController类,它是一个基于Spring的RESTful风格的控制器。

通过定义这个控制器类,我们就可以将"/categories"路径映射到selectAll()方法,并在客户端发起GET请求时返回所有商品分类的信息。这样,当你访问"/categories"路径时,控制器会调用categoryService.selectAll()方法获取商品分类信息,并将结果封装在ResponseVo对象中返回给客户端。

这个控制器类的作用是将客户端请求与商品分类的业务逻辑进行关联,通过调用categoryService中的方法来处理和返回相应的结果。

怎么样?我讲的已经很明白了吧!

通过上面的讲解,我相信你应该知道分类模块是怎么用代码实现的了。这篇文章我讲了我是如何设计电商系统的分类模块的,当然,电商系统还有很多其他的模块,比如用户模块,购物车模块,订单模块等,我只是介绍了其中的一个模块,其他的模块等我下几篇文章会详细介绍!

  • 33
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电商 SaaS 是国最大的行业垂直型 SaaS 市场,覆盖全价值环节。上游供应商为系统开发商、网络服务及设备供应商等,为电商 SaaS 厂 商提供系统研发环境、网络服务及算力。下游客户为电商商家,形态 可能为平台入驻商户、独立商户,或有重合。游的电商 SaaS 所供 产品包含店铺管理、客户营销、售后服务等功能,并随商家成熟度的 提升而叠加、丰富,最终可以覆盖除配送外全部零售电商端价值环节。 平台流量生态→电商商家经营→厂商 SaaS 功能,需求决定供给。健 康的电商生态追求商家 GMV 与厂商 ARPU 的同步成长,电商 SaaS 本质 上是帮助商家提高收入利润、扩大生意版图的工具。电商平台集 度极高,随着公域流量增速放缓红利见顶,其使用成本越发昂贵; 同时直播电商与社交电商兴起,推动更多商家转向私域。 行业+技术+环境为电商 SaaS 高景气度保驾护航。行业趋势方面,直 播社交双驱发力,商家深耕微信快手等私域流量;厂商随下游零售电 商行业发展而跨平台拓客更新,并聚焦高净值大客户,关注不同层次 需求,以实现“全渠道获客、多场景覆盖、差异化服务”。技术趋势 方面,5G 发展利好直播带货,数据台提升前端业务开发效率,AI 助力商家降本提效,厂商发展实力得到增强。此外,“十四五”等政 策利好持续释放,疫情加速了市场教育,我们预计到 2024 年电商 SaaS 行业营收规模将突破 230 亿元。 1.行业垂直型 SaaS 革新交付方式,强调业务理解 1.1 SaaS 以多租户架构为特点,革新应用交付方式 SaaS(Software as a Service,软件即服务),是一种基于互联网提供 软件服务的应用模式。SaaS 建立在 IaaS(Infrastructure as a Service, 基础设施即服务)及 PaaS(Platform as a Service,平台即服务)的基 础之上,是云服务最上层、直面用户的一层。厂商将应用部署在其服务 器上,用户只需通过网络注册账号等简单操作即可启用 SaaS 平台上的软件 服务,通过互联网使用共享的基础设备,并根据实际需要向厂商订购并付 费。相比于传统软件,SaaS 具有如下优势: 快速启用。用户可以通过互联网随时随地获得 SaaS 平台上所提供的应 用程序,相比于本地部署模式,对用户而言安装更加快速、使用门槛 更低,允许用户快速将新应用投入使用。 低使用成本。SaaS 模式下厂商按订阅制收费,用户无需购买证书,初始成本更低。由于基础设备共享,用户无需承担传统软件本地部署模 式下构建及维护自用 IT 硬件设备的费用。  高整合性。SaaS 最大的特点在于其多租户架构,并且可以无限期扩展 以满足用户需求,对多租户的资源复用能够有效降低开发和运维成本。 由于多租户共享一份核心代码,由厂商更新共性代码即可实现系统持 续、快速的升级迭代。 高开放性。许多 SaaS 厂商开放 API 接口((Application Programming Interface,应用程序接口),用户得以通过 API 扩展更多个性化模块, 将时间和精力专注于自身业务。 1.2 国 SaaS 市场增速高于全球,渗透空间巨大 按发展路径分,SaaS 玩家主要分为传统转型、创业型、互联网型。传统厂商(SAP、金蝶等)通过 SaaS 自我革命原有 IT 业务。大量创业型厂商(北 森云等)充分利用 SaaS 行业门槛较低的特征,选择某个垂直细分领域切入。 互联网厂商近年也杀入局来(阿里-钉钉、腾讯-企业微信),进一步挤占 IM/协同 OA 类等厂商生存空间。在 IaaS 业务普及的基础上,SaaS 从 CRM、 HRM 等标准化程度较高的业务开始爆发,呈现出细分领域众多、竞争极为激烈的分散市场格局。从规模来看,2019 年我国 SaaS 市场规模近 200 亿 元,渗透率远低于全球,仍有巨大发展潜力
创建APP项目,资源较大,陆续上传... 001-移动商城项目介绍和效果演示.avi 002-开启开发者选项和打开usb调试.avi 003-移动商城开发需要安装哪些工具.avi 004-如何把教程配套的代码运行起来.avi 005-创建项目.avi 006-快速开发第一个页面-标题栏-轮播-底部页签.avi 007-mui示例项目介绍.avi 008-mui代码块快捷方式介绍.avi 009-APP开发之前注意问题.avi 010-页面关闭及其手势事件注意问题.avi 011-使用场景说明.avi 012-打开新页面和页面之间传递参数.avi 013-给按钮绑定点击事件.avi 014-自定义事件实现页面间传值.avi 015-如何重写mui组件样式.avi 016-更换MUI默认图标样式.avi 017-使用MUI的扩展图标.avi 018-购物车增加角标.avi 019-滚动区域阻尼系数实现回弹.avi 020-双webview模式实现卡头卡尾代码重用.avi 021-加载子页面.avi 022-同时加载多个子页面.avi 023-底部选项卡切换.avi 024-点击底部选项卡切换标题栏文本.avi 025-商品列表页面.avi 026-商品列表页面制作.avi 027-通过委托给每个商品绑定点击事件.avi 028-商品明细页面.avi 029-加入购物车点击事件.avi 030-关闭一个页面.avi 031-自定义事件模拟点击实现页签切换.avi 032-购物车商品列表.avi 033-购物车商品数量样式编写.avi 034-收货信息表单样式编写.avi 035-个人心页面.avi 036-使用委托实现多个页面跳转.avi 037-带阻尼系数实现回弹的订单列表页面.avi 038-订单明细制作.avi 039-登录界面制作.avi 040-注册页面和登录页面的相互跳转.avi 041-商城后台管理系统配置.avi 042-用户注册接口编写.avi 043-移动端调用注册接口.avi 044-注册功能前后端联调成功.avi 045-移动端验证账号不能重复注册.avi 046-注册成功后的跳转功能.avi 047-移动端获取登录表单参数发送给接口地址.avi 048-登录模块后端接口开发.avi 049-调用登录接口.avi 050-在localStorage保存个人信息.avi 051-开发商品列表数据接口.avi 052-移动端商品列表数据加载.avi 053-优化商品列表页面的样式.avi 054-根据id查询商品明细数据接口开发.avi 055-显示商品明细.avi 056-添加商品到购物车接口开发.avi 057-加入到购物车的后端接口开发.avi 058-将商品加入购物车前后端联调.avi 059-获取购物车商品列表.avi 060-调用接口显示购物车的商品.avi 061-延迟执行数据绑定操作.avi 062-统计购物车商品的总价格.avi 063-改变购物车商品的数量.avi 064-通过委托给加号按钮绑定点击事件.avi 065-更改购物车商品数量后端接口开发.avi 066-是移动端界面数据和数据库数据同步.avi 067-减少购物车商品数量.avi 068-删除购物车商品.avi 069-继续购物点击事件.avi 070-增加自定义事件刷新购物车商品数据.avi 071-绑定默认的收货人信息.avi 072-给结算按钮绑定点击事件.avi 073-确定下单按钮点击事件绑定.avi 074-下单插入商品明细信息到订单明细表.avi 075-下单模块后端接口开发.avi 076-下单功能模块前后端联调.avi 077-个人心我的订单接口开发.avi 078-显示我的订单列表数据.avi 079-订单列表页面打开订单明细页面并传递参数.avi 080-根据订单号查询订单明细数据接口开发.avi 081-订单明细部分前后端联调.avi 082-下单成功后跳转到我的订单.avi 083-优化业务-购物车没商品就不允许去结算.avi 084-在订单列表页面刷新购物车页面的数据.avi 085-底部页签购物车商品数量统计.avi 086-获取首页推荐商品的接口开发.avi 087-首页推荐商品展示.avi 088-给首页商品添加点击事件.avi 089-添加首页轮播图片.avi 090-使用photoshop制作并生成各种尺寸的APP图标.avi 091-制作启动图片和设置APP权限模块.avi 092-使用云端打包方式将项目发布为apk文件.avi 093-安装发布好的apk文件并预览APP运行效果.avi 本套教程用到的软件和资源.zip 配置文件路径.txt
帝国CMS经历过16个版本更新,7.0是第17个版本。我们一直不断在实践突破创新,现在帝国CMS 7.0又一次突破创新,采用更先进构架、更强劲内核,使系统更加高效稳定,让网站发展无后顾之忧。除了高性能的帝国CMS全新构架外,7.0版本的模块更加完善,功能更加强大。在原来6.6版本的基础上,又更上一层楼,打造更完美的产品。 帝国CMS 7.0版新增了: 构架大更新:采用更先进构架、更强劲内核,性能提升30%以上 支持无限附件分表,管理与选择附件速度更快 支持无限评论主表分表,容量更大,效率更高 支持多MYSQL服务器读写分离,使网站更稳定 商城系统大更新,功能更完善,更适合企业电商 专题功能大更新,功能更强大,制作更方便 信息列表支持静态与动态相结合,效率更高,特别是大数据量下 信息标题分类功能进行升级,功能更强大 新增【索引灵动标签】,调用信息更强大灵活 信息动态页面支持伪静态,采用动态模式下SEO优化更给力 系统模型新增多值字段功能,扩展更灵活 新增栏目访问统计及分析功能,让管理员更了解网站 新增外部登录接口**台,且率先提供QQ登录接口,更方便会员与外部社交网站整合 新增将信息处理结果反馈给会员,更人性化 会员心采用新界面,更清晰实用 后台登录新增绑定证书验证,更安全牢固 动态页面模板支持后台直接修改,更方便 信息管理权限分配更细,权限控制更灵活 碎片功能升级,更方便实用 新增统计最新信息与评论数量,了解网站最新状况更方便 新增采集规则导出与导入功能,支持所有系统模型 评论新增无限盖楼功能,网站更容易互动 信息的九级头条与九级推荐名称支持自定义,更人性化 信息页地址采用预获取方式,效率好且调用方便 支持一键关闭会员、结合项等模块,关闭闲置模块很方便 完善支持PHP5.4系列,兼容性更好 屏蔽字符功能新增双字屏蔽,屏蔽恶意内容更给力 新增一键删除多余信息功能,清理错误信息很方便 新增更多安全特性,系统更牢固 新增更多防恶意灌水功能,很实用 帝国CMS每一个版本的发布都是在广大用户反馈基础上进行改进与创新突破,用户的所有建议我们都有记录,帝国CMS7.0版共收集了502个待升级功能,还有一些用户特殊需求。虽然一些功能无法全部在7.0版实现,但这些功能需求官方都有记录与整理,未来版本我们会不断改进与增加。衷心地感谢这么多用户对帝国完善提出这么多宝贵的建议与支持,我们不会辜负你们的厚望,我们还将不断开发出更加完美的CMS精品。 帝国CMS每一版都比前一版本更加安全、稳定、灵活、高效,让我们 共同揭示基于帝国CMS7.0版带来的更高性能网站管理解决方案新纪元!
全新RDIFramework.NET V5.1版本发布。降低开发成本,提高产品质量,提升用户体验与开发团队稳定性,做软件就选RDIFramework.NET敏捷开发框架。 RDIFramework.NET敏捷开发框架,是我司重磅推出的基于全新.NET Framework与.NET Core的快速信息化系统开发、整合框架,为企业快速构建跨平台、企业级的应用提供了强大支持。 开发人员不需要开发系统的基础功能和公共模块,框架自身提供了强大的函数库和开发包,开发人员只需集精力专注于业务部分的开发,因此大大提高开发效率和节约开发成本。框架采用主流的C#语言开发完成,支持多种数据库类型,支持Web、WinForm,支持Framework与Core双引擎。 使用RDIFramework.NET敏捷开发框架能提高管理类软件系统的整体质量、提高模块模块之间的兼容性、提高代码的重复利用率,使软件系统架构更加合理、质量更加过硬,使得劳动成果最大程度上重复利用。 框架基础模块包括:强大灵活的权限控制组件,模块分配与管理组件,灵活易用的工作流组件、数据字典管理组件、在线表单设计组件、丰富的报表统计组件、即时通讯(IM)组件、邮件心组件、微信开发相关组件、任务调度组件、自动升级组件、多语言模块,各种常用的商业控件,强大的代码生成器,开发实例、丰富的基础类库、开发辅助工具等各基础常用功能组件。 框架提供的大量通用插件,支持Saas多租户模式,完成功能的开发就像搭积木一样,只需要把各种组件进行组合拼装,拼装好了系统开发也就完成了。应用系统建立在此框架之上,采用构件式、可复用开发,节省开发成本,加快开发速度,在软件开发上更好的做到多快省。 适合低高任意开发水平的开发者,可以开发OA、ERP、BPM、CRM、WMS、TMS、MIS、BI、电商平台后台、物流管理系统、医院管理系统、快递管理系统、教务管理系统等各类管理软件、支持大并发、SaaS应用。代码稳定、组件丰富、功能强大、无限扩展。由框架开发团队的原班人马直接提供技术支持,为您顺利完成开发工作保驾护航。不管您是零基础还是专业开发人员,都能轻松驾驭这套开发框架。 ------------------------------------------------------------------------------------------------------------------ 一路走来数个年头,感谢RDIFramework.NET框架的支持者与使用者,大家可以通过下面的地址了解详情。 RDIFramework.NET官方网站:http://www.rdiframework.net/ RDIFramework.NET官方博客:http://blog.rdiframework.net/ 特别说明,框架相关的技术文章请以官方网站为准,欢迎大家收藏! RDIFramework.NET框架由海南国思软件科技有限公司专业团队长期打造、一直在更新、一直在升级,请放心使用! 欢迎关注RDIFramework.NET框架官方微信公众号(微信号:guosisoft),及时了解最新动态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值