基于 Java+ SpringBoot+Vue 的藏区特产销售系统的研究与实现(毕业设计,附源码,教程)

简介: 基于 Java+ SpringBoot+Vue 的藏区特产销售系统的研究与实现(毕业设计,附源码,教程)

今天为大家带来的是基于 Java+ SpringBoot+Vue 的藏区特产销售系统


1. 简介


本次设计任务是要设计一个藏区特产销售平台,通过这个系统能够满足藏区特产销售管理的管理功能。系统的主要包括首页、个人中心、用户管理、特产信息管理、特产分类管理、特产分类管理、特产评分管理、系统管理、订单管理等功能。


管理员可以根据系统给定的账号进行登录,登录后可以进入藏区特产销售平台对所有模块进行管理。包括查看和修改自己的个人信息以及登录密码。


该系统为每一个用户都分配了一个用户账号,用户通过账号的登录可以在系统中查看藏区特产销售管理信息及对个人信息进行修改等功能。


146d24d879e447e2c5672b6c13548413_f96ac644f90443749927ae5b05ef2138.png


2.主要技术


技术名 作用
Springboot 后端框架
Vue 前端框架
MySQL 数据库


3 功能分析


考虑到实际生活中在藏区特产销售管理方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。


(1)管理员功能需求


管理员登陆后,主要模块包括首页、个人中心、用户管理、特产信息管理、特产分类管理、特产分类管理、特产评分管理、系统管理、订单管理等功能。管理员用例图如图3-1所示。


bf7f06d964b198dd487f0393686e1537_3759d7e2db51c2a0a615eead9a29f383.png


(2)用户功能需求


用户登陆后,主要模块包括首页、特产信息、特产资讯、个人中心、购物车、在线客服等功能。用户用例图如图3-2所示。


c69c56fdd5e3188d902b54f156fe2ea8_73dfb748ed23ef2c27efb1112000fed2.png


4 系统分析


系统设计是把本系统的各项功能需求进行细化,而转换为软件系统表示的一个设计过程,在对目标系统的研究分析之后,做出整个系统平台的总体规划,进而对用例中各个对象进一步地合理精细设计。为降低整个系统的复杂度,而使其更加便于修改,提高代码的可读性,我们会将系统模块化,模块间保持相对独立,且每个模块只完成一个子功能,并且与其他模块通过简单的接口链接,即高内聚低耦合原则,而使整个系统能够拥有一个高性能的结构,这边是系统概要设计最重要的目的。在之前的需求分析的基础上,本藏区特产销售平台结构,如下图4-1所示。


52dd429393b51c8dc2aa1c2101e5b6ef_c6c942ee87222daa404edf755125b4ff.png


5系统实现


5.1系统功能模块

进入藏区特产销售平台页面中可以查看首页、特产信息、特产资讯、个人中心、购物车、在线客服等内容,进行详细的操作,如图5-1所示。


d8460c2232922b92f6152670a3b920be_5765ebb027dbebfed51f0aac763c39cf.png


图5-1系统首页界面图


特产信息,在特产信息页面中可以查看特产名称、价格、单次购买、库存、特产类型、规格、点击次数等内容进行购买、评论或收藏等操作如图5-2所示。


3a3adfae2ef14395abe712086fd2c3cd_77ad22c98f9a32dd125fbc5879e845ba.png


图5-2特产信息界面图


个人中心,在个人中心页面中通过填写账号、密码、姓名、性别、手机、图片、余额等内容进行更新信息等操作,并可以根据我的订单、我的地址或我的收藏进行相应的操作,如图5-3所示。


8ddb6ed2839fd803a6a2b7233db16c09_5d31ad541df427f10f3d5ee2f8380428.png


图5-3个人中心界面图


购物车,在购物车页面中可以查看购买商品、价格、 数量、总价等内容,进行删除或购买等操作,如图5-4所示。


ce25d8479e306b7c4d2adac7fe1b08d7_efe526b73dc8f9110ede11a1923140fc.png


图5-4购物车界面图


用户注册,在用户注册页面中通过填写账号、密码、确认密码、姓名、手机等内容进行注册等操作,如图5-5所示。


ea6b4edc508c1c1f3168253acc5e5f9f_149b463e4ad905d1de550e67b5db8e6e.png


六、代码参考


    package com.controller;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Calendar;
    import java.util.Map;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Date;
    import java.util.List;
    import javax.servlet.http.HttpServletRequest;
    import com.utils.ValidatorUtils;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.format.annotation.DateTimeFormat;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import com.baomidou.mybatisplus.mapper.EntityWrapper;
    import com.baomidou.mybatisplus.mapper.Wrapper;
    import com.annotation.IgnoreAuth;
    import com.entity.BanjixinxiEntity;
    import com.entity.view.BanjixinxiView;
    import com.service.BanjixinxiService;
    import com.service.TokenService;
    import com.utils.PageUtils;
    import com.utils.R;
    import com.utils.MD5Util;
    import com.utils.MPUtil;
    import com.utils.CommonUtil;
    /**
     * 班级信息
     * 后端接口
     * @author 
     * @email 
     * @date 2021-03-18 15:04:00
     */
    @RestController
    @RequestMapping("/banjixinxi")
    public class BanjixinxiController {
        @Autowired
        private BanjixinxiService banjixinxiService;
        /**
         * 后端列表
         */
        @RequestMapping("/page")
        public R page(@RequestParam Map<String, Object> params,BanjixinxiEntity banjixinxi,
        HttpServletRequest request){
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("jiaoshi")) {
          banjixinxi.setGonghao((String)request.getSession().getAttribute("username"));
        }
            EntityWrapper<BanjixinxiEntity> ew = new EntityWrapper<BanjixinxiEntity>();
        PageUtils page = banjixinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, banjixinxi), params), params));
            return R.ok().put("data", page);
        }
        /**
         * 前端列表
         */
        @RequestMapping("/list")
        public R list(@RequestParam Map<String, Object> params,BanjixinxiEntity banjixinxi, HttpServletRequest request){
            EntityWrapper<BanjixinxiEntity> ew = new EntityWrapper<BanjixinxiEntity>();
        PageUtils page = banjixinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, banjixinxi), params), params));
            return R.ok().put("data", page);
        }
      /**
         * 列表
         */
        @RequestMapping("/lists")
        public R list( BanjixinxiEntity banjixinxi){
            EntityWrapper<BanjixinxiEntity> ew = new EntityWrapper<BanjixinxiEntity>();
            ew.allEq(MPUtil.allEQMapPre( banjixinxi, "banjixinxi")); 
            return R.ok().put("data", banjixinxiService.selectListView(ew));
        }
       /**
         * 查询
         */
        @RequestMapping("/query")
        public R query(BanjixinxiEntity banjixinxi){
            EntityWrapper< BanjixinxiEntity> ew = new EntityWrapper< BanjixinxiEntity>();
        ew.allEq(MPUtil.allEQMapPre( banjixinxi, "banjixinxi")); 
        BanjixinxiView banjixinxiView =  banjixinxiService.selectView(ew);
        return R.ok("查询班级信息成功").put("data", banjixinxiView);
        }
        /**
         * 后端详情
         */
        @RequestMapping("/info/{id}")
        public R info(@PathVariable("id") Long id){
            BanjixinxiEntity banjixinxi = banjixinxiService.selectById(id);
            return R.ok().put("data", banjixinxi);
        }
        /**
         * 前端详情
         */
        @RequestMapping("/detail/{id}")
        public R detail(@PathVariable("id") Long id){
            BanjixinxiEntity banjixinxi = banjixinxiService.selectById(id);
            return R.ok().put("data", banjixinxi);
        }
        /**
         * 后端保存
         */
        @RequestMapping("/save")
        public R save(@RequestBody BanjixinxiEntity banjixinxi, HttpServletRequest request){
          banjixinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
          //ValidatorUtils.validateEntity(banjixinxi);
            banjixinxiService.insert(banjixinxi);
            return R.ok();
        }
        /**
         * 前端保存
         */
        @RequestMapping("/add")
        public R add(@RequestBody BanjixinxiEntity banjixinxi, HttpServletRequest request){
          banjixinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
          //ValidatorUtils.validateEntity(banjixinxi);
            banjixinxiService.insert(banjixinxi);
            return R.ok();
        }
        /**
         * 修改
         */
        @RequestMapping("/update")
        public R update(@RequestBody BanjixinxiEntity banjixinxi, HttpServletRequest request){
            //ValidatorUtils.validateEntity(banjixinxi);
            banjixinxiService.updateById(banjixinxi);//全部更新
            return R.ok();
        }
        /**
         * 删除
         */
        @RequestMapping("/delete")
        public R delete(@RequestBody Long[] ids){
            banjixinxiService.deleteBatchIds(Arrays.asList(ids));
            return R.ok();
        }
        /**
         * 提醒接口
         */
      @RequestMapping("/remind/{columnName}/{type}")
      public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
                 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
        map.put("column", columnName);
        map.put("type", type);
        if(type.equals("2")) {
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
          Calendar c = Calendar.getInstance();
          Date remindStartDate = null;
          Date remindEndDate = null;
          if(map.get("remindstart")!=null) {
            Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
            c.setTime(new Date()); 
            c.add(Calendar.DAY_OF_MONTH,remindStart);
            remindStartDate = c.getTime();
            map.put("remindstart", sdf.format(remindStartDate));
          }
          if(map.get("remindend")!=null) {
            Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
            c.setTime(new Date());
            c.add(Calendar.DAY_OF_MONTH,remindEnd);
            remindEndDate = c.getTime();
            map.put("remindend", sdf.format(remindEndDate));
          }
        }
        Wrapper<BanjixinxiEntity> wrapper = new EntityWrapper<BanjixinxiEntity>();
        if(map.get("remindstart")!=null) {
          wrapper.ge(columnName, map.get("remindstart"));
        }
        if(map.get("remindend")!=null) {
          wrapper.le(columnName, map.get("remindend"));
        }
        String tableName = request.getSession().getAttribute("tableName").toString();
        if(tableName.equals("jiaoshi")) {
          wrapper.eq("gonghao", (String)request.getSession().getAttribute("username"));
        }
        int count = banjixinxiService.selectCount(wrapper);
        return R.ok().put("count", count);
      }
    }


七、源码地址


1.200 套 Java 精品项目

2.Python 200 套 精品项目

416aba63c49eea32776384167eb0fabe_83d958070ac986e824d5065e27c0c410.png


相关文章
|
20天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
95 62
|
16天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
16天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
16天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
|
18天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
36 2
|
20天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
26天前
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
本指南介绍了如何在Spring Boot项目中集成Firebase云消息服务(FCM),包括创建项目、添加依赖、配置服务账户密钥、编写推送服务类以及发送消息等步骤,帮助开发者快速实现推送通知功能。
61 2
|
1月前
|
Java 数据库连接 编译器
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
|
1月前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
本系列教程笔记详细讲解了Kotlin语法,适合希望深入了解Kotlin的开发者。对于需要快速学习Kotlin的小伙伴,推荐查看“简洁”系列教程。本篇笔记重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android库开发建议以及相互调用时的注意事项。
24 3
|
16天前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
31 0