基于Spring Boot的玩具销售平台

目录

开发背景

如何设计

数据库设计表

系统功能

系统展示图

核心代码

文章目录

获取源码


开发背景

开发背景是随着互联网的普及和电子商务的快速发展,传统的玩具销售模式已无法满足消费者的多样化需求

在互联网电商趋势下,基于Java和Spring Boot框架的电子商务网上玩具购物商城系统的设计与实现,成为了解决这一问题的有效途径。该系统旨在为消费者提供一个便捷、高效、个性化的网上玩具购物平台,同时为商家提供在线展示和销售玩具产品的渠道,扩大市场份额,提高销售效率。

此外,随着社会的进步和人们对健康的关注,医疗服务需求不断增长,传统的线下挂号方式已无法满足人们日益增长的医疗服务需求。因此,开发基于Spring Boot的医院预约挂号系统也是为了解决传统挂号方式存在的问题,适应医疗需求增长的趋势,利用现代信息技术手段,提供便捷、高效、安全的医疗服务。

如何设计

设计一个基于Spring Boot的玩具销售商城系统,可以按照以下步骤进行:

1. 需求分析

  • 用户角色:确定系统的用户角色,如普通顾客、管理员等。
  • 功能需求:包括商品浏览、搜索、分类查看、购物车、订单管理、支付、用户注册登录、评价反馈等。
  • 非功能需求:如性能要求、安全性、可扩展性、用户体验等。

2. 技术选型

  • 后端框架:使用Spring Boot作为后端开发框架。
  • 数据库:选择合适的数据库,如MySQL。
  • 前端框架:可以选择React、Vue.js或Angular等现代前端框架。
  • 其他工具:如MyBatis用于数据持久化,Redis用于缓存,RabbitMQ用于消息队列等。

3. 系统架构设计

  • 分层架构:采用MVC模式,将系统分为模型层、视图层和控制层。
  • 模块划分:根据功能需求将系统划分为多个模块,如用户模块、商品模块、订单模块等。

4. 数据库设计

  • 设计数据库表结构,包括用户表、商品表、订单表、购物车表、评价表等。
  • 确保数据的完整性和一致性。

5. 接口设计

  • 定义前后端交互的API接口,包括请求URL、请求方法、请求参数、响应结果等。
  • 使用Swagger等工具生成API文档。

6. 前端设计

  • 设计用户界面,包括首页、商品详情页、购物车页、订单页等。
  • 确保界面美观、易用,符合用户体验原则。

7. 后端开发

  • 根据需求实现业务逻辑,编写后端代码。
  • 使用Spring Security实现用户认证和授权。

8. 测试与优化

  • 对系统进行功能测试、性能测试、安全测试等。
  • 根据测试结果进行优化和改进。

9. 部署与维护

  • 将系统部署到服务器上,进行上线前的准备工作。
  • 在系统运行过程中,进行定期的维护和更新,确保系统的稳定运行。

在整个设计和开发过程中,需要不断迭代和完善,以满足用户需求和市场变化。同时,要注意团队协作和沟通,确保项目的顺利进行和按时交付。

数据库设计表

将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。

表4-1 allusers表

列名

数据类型

长度

约束

id

int

11

NOT NULL

username

varchar

50

 default NULL

pwd

varchar

50

 default NULL

cx

varchar

50

 default NULL

表4-2 dingdanpingjia

列名

数据类型

长度

约束

id

int

11

NOT NULL

addtime

varchar

50

default NULL

dingdanbianhao

varchar

50

default NULL

shangpinmingcheng

varchar

50

default NULL

shangpinfenlei

varchar

50

default NULL

pinpai

varchar

50

default NULL

guige

varchar

50

default NULL

pingfen

varchar

50

default NULL

tianjiatupian

varchar

50

default NULL

pingjianeirong

varchar

50

default NULL

pingjiariqi

varchar

50

default NULL

yonghuming

varchar

50

default NULL

sfsh

varchar

50

default NULL

shhf

varchar

50

default NULL

表4-3:shangpinxinxi

列名

数据类型

长度

约束

id

 int

11

NOT NULL

addtime

varchar

50

default NULL

shangpinmingcheng

varchar

50

default NULL

shangpinfenlei

varchar

50

default NULL

tupian

varchar

50

default NULL

pinpai

varchar

50

default NULL

guige

varchar

50

default NULL

shangpinxiangqing

varchar

50

default NULL

系统功能

玩具销售商城结构图,如图4-3所示。

 

系统展示图

核心代码

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.JiaowuchuEntity;
import com.entity.view.JiaowuchuView;

import com.service.JiaowuchuService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.web.multipart.MultipartFile;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

/**
 * 教务处
 * 后端接口
 * @author 
 * @email 
 * @date 2022-02-23 15:48:42
 */
@RestController
@RequestMapping("/jiaowuchu")
public class JiaowuchuController {
    @Autowired
    private JiaowuchuService jiaowuchuService;


    
	@Autowired
	private TokenService tokenService;
	
	/**
	 * 登录
	 */
	@IgnoreAuth
	@RequestMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		JiaowuchuEntity user = jiaowuchuService.selectOne(new EntityWrapper<JiaowuchuEntity>().eq("zhigongzhanghao", username));
		if(user==null || !user.getMima().equals(password)) {
			return R.error("账号或密码不正确");
		}
		
		String token = tokenService.generateToken(user.getId(), username,"jiaowuchu",  "教务处" );
		return R.ok().put("token", token);
	}
	
	/**
     * 注册
     */
	@IgnoreAuth
    @RequestMapping("/register")
    public R register(@RequestBody JiaowuchuEntity jiaowuchu){
    	//ValidatorUtils.validateEntity(jiaowuchu);
    	JiaowuchuEntity user = jiaowuchuService.selectOne(new EntityWrapper<JiaowuchuEntity>().eq("zhigongzhanghao", jiaowuchu.getZhigongzhanghao()));
		if(user!=null) {
			return R.error("注册用户已存在");
		}
		Long uId = new Date().getTime();
		jiaowuchu.setId(uId);
        jiaowuchuService.insert(jiaowuchu);
        return R.ok();
    }

	
	/**
	 * 退出
	 */
	@RequestMapping("/logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        JiaowuchuEntity user = jiaowuchuService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	JiaowuchuEntity user = jiaowuchuService.selectOne(new EntityWrapper<JiaowuchuEntity>().eq("zhigongzhanghao", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
        user.setMima("123456");
        jiaowuchuService.updateById(user);
        return R.ok("密码已重置为:123456");
    }


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,JiaowuchuEntity jiaowuchu,
		HttpServletRequest request){
        EntityWrapper<JiaowuchuEntity> ew = new EntityWrapper<JiaowuchuEntity>();
		PageUtils page = jiaowuchuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiaowuchu), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,JiaowuchuEntity jiaowuchu, 
		HttpServletRequest request){
        EntityWrapper<JiaowuchuEntity> ew = new EntityWrapper<JiaowuchuEntity>();
		PageUtils page = jiaowuchuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiaowuchu), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( JiaowuchuEntity jiaowuchu){
       	EntityWrapper<JiaowuchuEntity> ew = new EntityWrapper<JiaowuchuEntity>();
      	ew.allEq(MPUtil.allEQMapPre( jiaowuchu, "jiaowuchu")); 
        return R.ok().put("data", jiaowuchuService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(JiaowuchuEntity jiaowuchu){
        EntityWrapper< JiaowuchuEntity> ew = new EntityWrapper< JiaowuchuEntity>();
 		ew.allEq(MPUtil.allEQMapPre( jiaowuchu, "jiaowuchu")); 
		JiaowuchuView jiaowuchuView =  jiaowuchuService.selectView(ew);
		return R.ok("查询教务处成功").put("data", jiaowuchuView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        JiaowuchuEntity jiaowuchu = jiaowuchuService.selectById(id);
        return R.ok().put("data", jiaowuchu);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        JiaowuchuEntity jiaowuchu = jiaowuchuService.selectById(id);
        return R.ok().put("data", jiaowuchu);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody JiaowuchuEntity jiaowuchu, HttpServletRequest request){
    	jiaowuchu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(jiaowuchu);
    	JiaowuchuEntity user = jiaowuchuService.selectOne(new EntityWrapper<JiaowuchuEntity>().eq("zhigongzhanghao", jiaowuchu.getZhigongzhanghao()));
		if(user!=null) {
			return R.error("用户已存在");
		}
		jiaowuchu.setId(new Date().getTime());
        jiaowuchuService.insert(jiaowuchu);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody JiaowuchuEntity jiaowuchu, HttpServletRequest request){
    	jiaowuchu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(jiaowuchu);
    	JiaowuchuEntity user = jiaowuchuService.selectOne(new EntityWrapper<JiaowuchuEntity>().eq("zhigongzhanghao", jiaowuchu.getZhigongzhanghao()));
		if(user!=null) {
			return R.error("用户已存在");
		}
		jiaowuchu.setId(new Date().getTime());
        jiaowuchuService.insert(jiaowuchu);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody JiaowuchuEntity jiaowuchu, HttpServletRequest request){
        //ValidatorUtils.validateEntity(jiaowuchu);
        jiaowuchuService.updateById(jiaowuchu);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        jiaowuchuService.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<JiaowuchuEntity> wrapper = new EntityWrapper<JiaowuchuEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = jiaowuchuService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	





    @RequestMapping("/importExcel")
    public R importExcel(@RequestParam("file") MultipartFile file){
        try {
            //获取输入流
            InputStream inputStream = file.getInputStream();
            //创建读取工作簿
            Workbook workbook = WorkbookFactory.create(inputStream);
            //获取工作表
            Sheet sheet = workbook.getSheetAt(0);
            //获取总行
            int rows=sheet.getPhysicalNumberOfRows();
            if(rows>1){
                //获取单元格
                for (int i = 1; i < rows; i++) {
                    Row row = sheet.getRow(i);
                    JiaowuchuEntity jiaowuchuEntity =new JiaowuchuEntity();
                    jiaowuchuEntity.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
                    String zhigongzhanghao = CommonUtil.getCellValue(row.getCell(0));
                    jiaowuchuEntity.setZhigongzhanghao(zhigongzhanghao);
                    String mima = CommonUtil.getCellValue(row.getCell(1));
                    jiaowuchuEntity.setMima(mima);
                    String zhigongxingming = CommonUtil.getCellValue(row.getCell(2));
                    jiaowuchuEntity.setZhigongxingming(zhigongxingming);
                    String xingbie = CommonUtil.getCellValue(row.getCell(3));
                    jiaowuchuEntity.setXingbie(xingbie);
                    String zhiwu = CommonUtil.getCellValue(row.getCell(4));
                    jiaowuchuEntity.setZhiwu(zhiwu);
                    String shouji = CommonUtil.getCellValue(row.getCell(5));
                    jiaowuchuEntity.setShouji(shouji);
                    String youxiang = CommonUtil.getCellValue(row.getCell(6));
                    jiaowuchuEntity.setYouxiang(youxiang);
                     
                    //想数据库中添加新对象
                    jiaowuchuService.insert(jiaowuchuEntity);//方法
                }
            }
            inputStream.close();
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return R.ok("导入成功");
    }


}

文章目录

摘  要

ABSTRACT

 

1章 绪论

1.1背景及意义

1.2 国内外研究概况

1.3 研究的内容

第2章 相关技术

2.1 B/S架构

2.2 Java技术介绍

2.3 mysql数据库介绍

2.4 springboot框架

第3章 系统分析

3.1 需求分析

3.2 系统可行性分析

3.2.1技术可行性:技术背景

3.2.2经济可行性

3.2.3操作可行性:

3.3 项目设计目标与原则

3.4系统流程分析

3.4.1操作流程

3.4.2添加信息流程

3.4.3删除信息流程

4章 系统设计

4.1 系统体系结构

4.2开发流程设计系统

4.3 数据库设计原则

4.4 数据表

第5章 系统详细设计

5.1管理员功能模块

5.2用户功能模块

5.3前台首页功能模块

6章  系统测试

6.1系统测试的目的

6.2系统测试方法

6.3功能测试

结  论

致  谢

参考文献

获取源码

大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

 精彩专栏推荐订阅:在下方专栏👇🏻

《Spring Boot框架技术大合集》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值