基于SpringBoot+Vue的手机商城

基于SSM的手机商城

一、项目背景介绍:

中国手机市场研究报告称,在中国,手机已经无处不在,中国3G商用进程的加速推进,使移动互联网活跃度日渐提升。互联网影响着每个人的工作与生活,手机商城软件已成为人们生活不可或缺的组成部分。市场的需求的呼唤,企业必须开发手机商城软件迎合时代发展需要。

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Spring:Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
  3. Mybatis:MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
    iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
  4. Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。
  5. Redis:redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
    Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
  6. Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。

    超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:‘收货地址表’(address)

字段名类型默认值列注释
idbigintNULL主键ID
namevarcharNULL姓名
address_infovarcharNULL收货地址详情
telvarcharNULL联系方式
typeintNULL是否默认地址[0:是,1:否]
user_idbigintNULL用户ID

2:‘管理员表’(admins)

字段名类型默认值列注释
idbigintNULLID
user_namevarcharNULL用户名
pass_wordvarcharNULL密码
photo_imgvarcharNULL图片
namevarcharNULL名称
statusintNULL用户类型[0:超级管理员,1:普通管理员]

3:‘购物车表’(cart)

字段名类型默认值列注释
idbigintNULL主键ID
user_idbigintNULL用户ID
phone_idbigintNULL手机ID
numintNULL数量
create_timedatetimeNULL创建时间

4:‘团购详情表’(group_detail)

字段名类型默认值列注释
idbigintNULL主键ID
user_idbigintNULL用户ID
group_idbigintNULL团购活动ID
create_timedatetimeNULL创建时间

5:‘团购活动表’(groups)

字段名类型默认值列注释
idbigintNULL主键ID
phone_idbigintNULL手机ID
numintNULL数量
end_numintNULL活动结束人数
banner_urlvarcharNULL广告图
infovarcharNULL介绍词
create_timedatetimeNULL创建时间
pricevarcharNULL团购价格
add_novarcharNULL参与码
statusintNULL状态[0:已开始,1:已结束]

6:‘订单详情表’(order_detail)

字段名类型默认值列注释
idbigintNULL主键ID
phone_idbigintNULL手机ID
numintNULL数量
order_idbigintNULL订单ID
create_timedatetimeNULL创建时间

7:‘订单表’(orders)

字段名类型默认值列注释
idbigintNULL主键ID
order_novarcharNULL订单编号
create_timedatetimeNULL创建时间
total_pricevarcharNULL总价
statusintNULL订单状态[0:代付款,1:待发货,2:已发货,3:已完成,4:已退单]
user_idbigintNULL用户ID
addressvarcharNULL收货地址
typeintNULL类型[0:普通订单,1:秒杀订单,2:团购订单]
active_idbigintNULL活动ID

8:‘手机信息表’(phone)

字段名类型默认值列注释
idbigintNULL手机ID
namevarcharNULL手机名称
infotextNULL简介
stockintNULL库存
pricevarcharNULL单价
detailtextNULL详细信息
create_timedatetimeNULL创建时间
img_urlvarcharNULL展示大图
type_idbigintNULL分类ID
bannerintNULL首页推荐[0:是,1:否]

9:‘手机详情图片表’(phone_imgs)

字段名类型默认值列注释
idbigintNULL主键ID
img_urlvarcharNULL图片链接
phone_idbigintNULL手机ID

10:‘手机标签关联表’(phone_tags)

字段名类型默认值列注释
idbigintNULL主键ID
phone_idbigintNULL手机ID
tag_idbigintNULL标签ID

11:‘秒杀活动表’(seckill)

字段名类型默认值列注释
idbigintNULL主键ID
phone_idbigintNULL手机ID
numintNULL手机数量
start_timedatetimeNULL开始时间
end_timedatetimeNULL结束时间
banner_urlvarcharNULL广告图
infovarcharNULL介绍词
create_timedatetimeNULL创建时间
pricevarcharNULL秒杀价格
statusintNULL状态[0:未开始,1:已经开始,2:已结束]
stockintNULL当前剩余

12:‘手机标签表’(tags)

字段名类型默认值列注释
idbigintNULL主键ID
tag_namevarcharNULL标签名称
create_timedatetimeNULL创建时间

13:‘手机分类表’(type)

字段名类型默认值列注释
idbigintNULL主键ID
type_namevarcharNULL分类名称
create_timedatetimeNULL创建时间

14:‘用户表’(users)

字段名类型默认值列注释
idbigintNULL主键ID
user_namevarcharNULL用户名
pass_wordvarcharNULL密码
nick_namevarcharNULL昵称
head_imgvarcharNULL头像
create_timedatetimeNULL创建时间

五、功能模块:

  1. 首页:基于协同过滤算法为用户推荐用户感兴趣的手机,以及后台设置的秒杀活动以及轮播图

    首页

  2. 手机分类模块:该模块基于关键字,手机分类以及手机标签为用户快速检索自己喜欢的手机提供便利

    手机分类模块

  3. 个人中心模块:用户可以在该模块修改自己的个人信息,订单管理,收货地址管理,以及参与的团购活动管理

    个人中心模块

  4. 后台管理模块:后台管理包含所有的管理,主要模块有手机图片,手机信息,手机标签,标签管理,分类管理,团购活动管理,秒杀活动管理,管理员管理,前台用户管理,订单管理,图表统计分析等

    后台管理模块

六、代码示例:

首页
 @PostMapping("/page")
    private SimpleResponse page(@RequestBody Phone phone) {
        PageVO<Phone> phonePageVO = phoneService.page(phone);
        List<BaseSelectEntity> tagsEntity = phone.getTagsEntity();
        if (CollectionUtil.isNotEmpty(tagsEntity)) {
            List<Phone> phonePageVORecords = phonePageVO.getRecords();
            List<PhoneTags> tags = phoneTagsService.getByTagIds(tagsEntity.stream().map(item -> item.getKey()).collect(Collectors.toList()));
            if (CollectionUtil.isEmpty(tags)) {
                phonePageVO.setTotal(0);
                phonePageVO.setRecords(new ArrayList<>());
            } else {
                List<Long> collect = tags.stream().map(item -> item.getPhoneId()).collect(Collectors.toList());
                List<Phone> collect1 = phonePageVORecords.stream().filter(item -> collect.contains(item.getId())).collect(Collectors.toList());
                phonePageVO.setTotal(collect1.size());
                phonePageVO.setRecords(collect1);
            }
        }
        return SimpleResponse.success(phonePageVO);
    }
手机分类模块
   @GetMapping("/get/{id}")
    private SimpleResponse getById(@PathVariable("id") Long id) throws Exception {
        Phone phone = phoneService.getById(id);
        if (phone != null) {
            PhoneImgs imgs = new PhoneImgs();
            imgs.setPhoneId(id);
            List<PhoneImgs> phoneImgs = phoneImgsService.list(imgs);
            phone.setPhoneImgsList(phoneImgs);
            PhoneTags phoneTags = new PhoneTags();
            phoneTags.setPhoneId(id);
            List<PhoneTags> phoneTags1 = phoneTagsService.list(phoneTags);
            if (CollectionUtil.isNotEmpty(phoneTags1)) {
                List<Tags> tagsList = new ArrayList<>();
                for (PhoneTags tags : phoneTags1) {
                    Tags tagsServiceById = tagsService.getById(tags.getTagId());
                    tagsList.add(tagsServiceById);
                }
                phone.setTags(tagsList);
            }
        }
        return SimpleResponse.success(phone);
    }
个人中心模块
 @PostMapping("/add")
    @Transactional(rollbackFor = Exception.class)
    public SimpleResponse addOrder(@RequestBody Orders orders) throws Exception {
        List<Cart> ordersCarts = orders.getCarts();
        // 判断库存是否足够
        for (Cart ordersCart : ordersCarts) {
            Phone byId = phoneService.getById(ordersCart.getPhoneId());
            if (byId.getStock() >= ordersCart.getNum()) {
                Phone byId1 = new Phone();
                byId1.setId(byId.getId());
                byId1.setStock(byId.getStock() - ordersCart.getNum());
                phoneService.updateById(byId1);
            } else {
                throw new Exception("当前商品【" + byId.getName() + "】,库存不足,库存为【" + byId.getStock() + "】,请重新选择数量!");
            }
        }
        orders.setOrderNo(UUID.randomUUID().toString().substring(0, 8));
        orders.setStatus(0);
        orders.setType(0);
        orders.setCreateTime(new Date());
        Address address = new Address();
        address.setUserId(orders.getUserId());
        address.setType(0);
        // 设置默认地址
        List<Address> addresses = addressService.list(address);
        if (CollectionUtil.isNotEmpty(addresses)) {
            Address address1 = addresses.get(0);
            orders.setAddress(address1.getName() + "-" + address1.getTel() + "-" + address1.getAddressInfo());
        }
        // 添加订单
        ordersService.save(orders);
        for (Cart ordersCart : ordersCarts) {
            OrderDetail detail = new OrderDetail();
            detail.setCreateTime(new Date());
            detail.setOrderId(orders.getId());
            detail.setNum(ordersCart.getNum());
            detail.setPhoneId(ordersCart.getPhoneId());
            // 添加订单详情
            orderDetailService.save(detail);
        }
        // 删除购物车
        cartService.removeByIds(ordersCarts.stream().map(item -> item.getId()).collect(Collectors.toList()));
        return SimpleResponse.success();
    }
后台管理模块
    @GetMapping("/get1")
    private SimpleResponse getById() {
        List<Phone> phones = phoneService.list(new Phone());
        List<Object> rowList = new ArrayList();
        List<Object> colList = new ArrayList();
        List<Object> colList1 = new ArrayList();
        for (Phone phone : phones) {
            rowList.add(phone.getName());
            OrderDetail orderDetail = new OrderDetail();
            orderDetail.setPhoneId(phone.getId());
            List<OrderDetail> orderDetails = orderDetailService.list(orderDetail);
            if (CollectionUtil.isEmpty(orderDetails)) {
                colList.add(0);
            } else {
                int num = 0;
                int num1 = 0;
                for (OrderDetail detail : orderDetails) {
                    num += Double.parseDouble(phone.getPrice()) * detail.getNum();
                    num1 += detail.getNum();
                }
                colList.add(num);
                colList1.add(num1);
            }
        }
        Map<String, Object> map = new HashMap<>();
        map.put("rowList", rowList);
        map.put("colList", colList);
        map.put("colList1", colList1);
        return SimpleResponse.success(map);
    }

七、项目总结:

1、移动手机传播信息的渠道是多种多样的,不仅有传统的社交链接分享,还有时下流行的二维码,商家通过这些渠道不仅能向传统的客户宣传自己的产品,而且还能通让客户通过商家的链接向更多的消费者传播商品的信息,并且这些信息的传播是快速免费的。因此在手机端建立自己的购物商城系统后,不仅能帮助商家快速地传播商城的产品信息,而且还能降低商家的广告费用。
2、与传统PC网站商城相比,手机购物商城里显示的商品信息更加简单集中,整个手机商城的存储空间会比PC网站商城的小,所以手机商城商家就可以减少对商城空间的购买成本。
3、对于消费者来说,可以不受时间、地点的限制,随时随地通过手机在商城网站上浏览商城的所有产品的详细信息和商家活动,在手机商城系统里下单还能享受一定额度的折扣。对于企业来说,使用手机商城软件是有"方便商家随时查看商城的经营情况,不仅摆脱了传统PC网站需要开电脑的限制,还能让商家在最短的时间内快速了解了所有的商品销售信息"的优势。

八、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【资源说明】 1、基于SpringBoot+vue实现的实验室管理系统源码+项目说明.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于SpringBoot+vue实现的实验室管理系统源码+项目说明.zip # springboot-LAB #### 介绍 实验室管理系统,无框架,spring boot #### 软件架构 :某学校拟开发一套实验室助理工作管理系统,实现实验室助理工作信息的 管理。需求描述如下:第 3 页 共 4 页 (1)学校实验室分为公共基础实验室和专业技术实验室,专业技术实验室由各二 级学院负责管理,公共基础实验室由教务处负责管理。一个部门有多名实验技术员, 一名实验技术员只属于一个部门,实验技术员可以管理多个实验室,但是一个实验 室只有一名实验技术员。 (2)实验技术员先填写实验室助理招聘计划并提交到学生工作处审核,学生工作 处审核过程中可以修改招聘人数,招聘计划信息包括招聘计划编号、计划名称、岗 位要求、招聘人数、申请部门、申请人等。 (3)学生在线应聘实验助理岗位需要先注册成为系统用户,注册用户信息包括学 号、密码、姓名、专业、学院、班级、年级、手机号、邮箱、个人照片。 (4)学生注册用户成功并登录系统后,可以在线查看实验室助理招聘计划信息和 填写报名信息。报名信息包括报名编号、岗位名称、技能描述、申请人、申请时间 等。每个学生只能应聘一个岗位,如果应聘的人数超过岗位招聘人数,系统拒绝报 名请求。 (5)实验技术员可以查看应聘本实验室助理岗位的报名信息并筛选进入面试环节 的人员名单。学生可以在线查看自己是否进入面试环节。面试结束后,实验技术员 录入面试结果并建立录用人员的档案信息,录入人员档案信息包括人员编号、学号、 密码、姓名、专业、学院、班级、年级、手机号、邮箱、个人照片,所属实验室等。 学生可以查看面试结果。 (6)实验室助理可以记录每天工作内容,工作内容包括安全卫生检查情况和设备 运行情况。工作内容信息包括周次、时间(年/月/日)、星期、人员编号、工作内 容、系统时间。实验技术员可以按日期查询实验室助理的工作内容。实验室助理可 以在线填写实验教学仪器设备维修申请,申请信息包括设备名称、设备编号、型号、 故障现象描述、报修时间、报修人。实验室技术员可以查看本实验室的设备维修申 请并导出实验教学仪器设备维修申报表 #### 安装教程 1. IDE运行 2. 修改数据库密码账号 #### 运行效果 ![ ](https://images.gitee.com/uploads/images/2021/0627/161255_1cfe664a_5479964.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0627/161315_4ee44041_5479964.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0627/161324_a2388a71_5479964.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0627/161332_fd056a3c_5479964.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0627/161346_e7c167a8_5479964.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0627/161409_9c9487ae_5479964.png "屏幕截图.png")
# 项目特点 - 前台参考"Hexo"的"Butterfly"设计,美观简洁,响应式体验好。 - 后台参考"element-admin"设计,侧边栏,历史标签,面包屑自动生成。 - 采用Markdown编辑器,写法简单。 - 评论支持表情、GIF动图输入回复等,样式参考Valine。 - 前后端分离部署,适应当前潮流。 - 接入第三方登录,减少注册成本。 - 留言采用弹幕墙,更加炫酷。 - 支持代码高亮和复制,图片预览,深色模式等功能,提升用户体验。 - 搜索文章支持高亮分词,响应速度快。 - 新增文章目录、推荐文章等功能,优化用户体验。 - 新增在线聊天室,支持撤回、语音输入、统计未读数量等功能。 - 新增aop注解实现操作日志功能。 - 支持动态权限修改,采用RBAC模型,前端菜单和后台权限实时更新。 - 后台管理支持修改背景图片,博客配置等信息,操作简单,支持上传相册。 - 代码支持多种搜索模式(Elasticsearch或MYSQL),支持多种上传模式(OSS或本地),可支持配置。Elasticsearch占内存较高,如果服务器配置太低,不建议使用。 - 新增网站导航功能,页面优雅美观。可自行添加自己常用的网站进行分类和排序。 - 新增聊天管理功能,方便清理垃圾聊天内容。 - 新增登录日志功能,随时查看用户的登录信息。 - 前台页面重新布局重构,页面布局更加简洁,首页加载速度更快。 - 前台首页文章列表顶部新增滚动消息,超级炫酷。 - 新增了监控用户是否授权的功能、增加了用户的体验性。 - 增加图片删除后也将该路径的图片删除的功能、大大提高了文件存储的利用率。 - 将接口进行**axios**二次封装、更利于接口的请求和响应。 - 新增本博客配套的**微信小程序**,可随时用手机浏览文章。并且接入微信登录,减少注册成本。 - **微信小程序**新增每日新闻热搜功能、可随时查看热搜。 - 新增本博客配套的**App**,同时接入qq、微博登录,使用更加方便。 - 代码遵循阿里巴巴开发规范,利于开发者学习。 ## 技术介绍 **前端:** vue + vuex + vue-router + axios + vuetify + element + echarts + uniapp + uview + Html + Css + JavaScript **后端:** SpringBoot + nginx + docker + SpringSecurity + Swagger2 + MyBatisPlus + Mysql + Redis + elasticsearch + RabbitMQ + MaxWell + Websocket **其他:** 接入QQ,微博、微信第三方登录,接入腾讯云人机验证、websocket ## 运行环境 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值