博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈
⭐进主页热门专栏推荐订阅⭐ 订阅收藏起来,防止下次找不到
🔎千套Java / PHP / nod.js / asp.net/ Python等项目实战更新中~
🔎百套小程序APP项目实战更新中~
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我❤️文末获取源码联系❤️ ⚠️一定要先收藏⚠️
4系统设计
4.1系统功能设计
本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员具有修改用户信息,发布供应商等功能,系统总体功能设计图如图4-1所示。
图4-1系统总体功能设计图
4.2数据库设计
4.2.1概念设计
在数据库设计过程中,概念设计阶段是逻辑设计阶段得以实现的基础,也是根据用户参与情况确定对数据的处理要求,从而使得数据库设计成功的关键。概念设计的主要任务是将现实世界的所收集到的使用需求转化为抽象的信息世界结构的过程,能够真实的反映现实生活中实体与实体之间的联系,数据库的相关语法和代码比较容易理解和修改,方便相关人员将相关的数据信息存储到数据库中,并对其进行修改和使用[18]。
通过将现实世界中的实体、属性、联系等内容进行概念设计,建立比较抽象的概念数据模型,即E-R图。通过E-R图可将现实世界抽象到的概念设计转变成数据库的实体设计,并且能够明显的看见各个实体之间,数据的流动情况,具体较强的表达能力,更加方便于开发人员寻找与发现用户具体的需求[19]。因此,E-R的建立,在整个数据库的设计过程中,起着至关重要的作用。本系统主要的实体有管理员、用户、留言等。在E-R图中,矩形表示实体集,椭圆形表示属性,菱形表示联系。其中,联系的类型包括1:1(一对一)、1:n(一对多)、n:m(多对多)关系。
(1)下图是活动实体和其具备的属性。
活动实体属性图
(2)下图是出入库详情实体和其具备的属性。
出入库详情实体属性图
(3)下图是用户实体和其具备的属性。
用户实体属性图
(4)下图是公告信息实体和其具备的属性。
公告信息实体属性图
(5)下图是字典表实体和其具备的属性。
字典表实体属性图
(6)下图是购物车实体和其具备的属性。
购物车实体属性图
(7)下图是供应商信息实体和其具备的属性。
供应商信息实体属性图
(8)下图是积分记录实体和其具备的属性。
积分记录实体属性图
(9)下图是原材料实体和其具备的属性。
原材料实体属性图
(10)下图是客服聊天实体和其具备的属性。
客服聊天实体属性图
(11)下图是留言板实体和其具备的属性。
留言板实体属性图
(12)下图是商品实体和其具备的属性。
商品实体属性图
(13)下图是出入库实体和其具备的属性。
出入库实体属性图
(14)下图是活动留言实体和其具备的属性。
活动留言实体属性图
(15)下图是商品收藏实体和其具备的属性。
商品收藏实体属性图
(16)下图是商品评价实体和其具备的属性。
商品评价实体属性图
(17)下图是商品订单实体和其具备的属性。
商品订单实体属性图
(18)下图是收货地址实体和其具备的属性。
收货地址实体属性图
4.2.2逻辑设计
本系统使用MySQL数据库管理与系统相关的数据信息。逻辑设计阶段是将上一个阶段中的概念数据模型,转换为方便数据库进行存储的关系模型,即基本表的形式,方便开发人员后期对数据模型进行优化和管理[20]。逻辑设计阶段是整个数据库设计设计的关键,与系统有关的信息将会在这一阶段中被存储在数据库中,当用户使用本系统进行相关的功能操作时,与之有关的数据信息所在的基本表会发生相应的更新变化。数据库的逻辑设计阶段主要任务是将与系统相关的数据信息,设计成为方便数据库存储和管理的基本表格的形式,具体内容如下。
表4.1收货地址表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | yonghu_id | Integer | 创建用户 | 是 |
3 | address_name | String | 收货人 | 是 |
4 | address_phone | String | 电话 | 是 |
5 | address_dizhi | String | 地址 | 是 |
6 | isdefault_types | Integer | 是否默认地址 | 是 |
7 | insert_time | Date | 添加时间 | 是 |
8 | update_time | Date | 修改时间 | 是 |
9 | create_time | Date | 创建时间 | 是 |
表4.2购物车表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | yonghu_id | Integer | 所属用户 | 是 |
3 | naicha_id | Integer | 商品 | 是 |
4 | buy_number | Integer | 购买数量 | 是 |
5 | create_time | Date | 添加时间 | 是 |
6 | update_time | Date | 更新时间 | 是 |
7 | insert_time | Date | 创建时间 | 是 |
表4.3客服聊天表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | yonghu_id | Integer | 提问用户 | 是 |
3 | chat_issue | String | 问题 | 是 |
4 | issue_time | Date | 问题时间 | 是 |
5 | chat_reply | String | 回复 | 是 |
6 | reply_time | Date | 回复时间 | 是 |
7 | zhuangtai_types | Integer | 状态 | 是 |
8 | chat_types | Integer | 数据类型 | 是 |
9 | insert_time | Date | 创建时间 | 是 |
表4.4字典表表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | dic_code | String | 字段 | 是 |
3 | dic_name | String | 字段名 | 是 |
4 | code_index | Integer | 编码 | 是 |
5 | index_name | String | 编码名字 | 是 |
6 | super_id | Integer | 父字段id | 是 |
7 | beizhu | String | 备注 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.5公告信息表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | gonggao_name | String | 公告名称 | 是 |
3 | gonggao_photo | String | 公告图片 | 是 |
4 | gonggao_types | Integer | 公告类型 | 是 |
5 | insert_time | Date | 发布时间 | 是 |
6 | gonggao_content | String | 公告详情 | 是 |
7 | create_time | Date | 创建时间 | 是 |
表4.6供应商信息表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | gongyingshang_name | String | 供应商名称 | 是 |
3 | lianxiren_name | String | 联系人姓名 | 是 |
4 | lianxiren_phone | String | 联系人手机号 | 是 |
5 | lianxiren_address | String | 地址 | 是 |
6 | gongyingshang_types | Integer | 供应商类型 | 是 |
7 | gongyingshang_xinyongdengji_types | Integer | 信用等级 | 是 |
8 | gongyingshang_content | String | 供应商详情 | 是 |
9 | create_time | Date | 创建时间 | 是 |
表4.7活动表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | huodong_name | String | 活动名称 | 是 |
3 | huodong_uuid_number | String | 活动编号 | 是 |
4 | huodong_photo | String | 活动照片 | 是 |
5 | huodong_address | String | 活动地点 | 是 |
6 | huodong_shangxia_types | Integer | 线上线下 | 是 |
7 | huodong_types | Integer | 活动类型 | 是 |
8 | huodong_kucun_number | Integer | 活动数量 | 是 |
9 | huodong_kaishi_time | Date | 活动开始时间 | 是 |
10 | huodong_jieshu_time | Date | 活动结束时间 | 是 |
11 | huodong_content | String | 活动内容 | 是 |
12 | insert_time | Date | 发布时间 | 是 |
13 | create_time | Date | 创建时间 | 是 |
表4.8活动留言表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | huodong_id | Integer | 活动 | 是 |
3 | yonghu_id | Integer | 用户 | 是 |
4 | huodong_liuyan_text | String | 留言内容 | 是 |
5 | insert_time | Date | 留言时间 | 是 |
6 | reply_text | String | 回复内容 | 是 |
7 | update_time | Date | 回复时间 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.9积分记录表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | yonghu_id | Integer | 用户姓名 | 是 |
3 | jifenjilu_name | String | 原因 | 是 |
4 | jifenjilu_number | BigDecimal | 积分数量 | 是 |
5 | jifen_types | Integer | 积分类型 | 是 |
6 | insert_time | Date | 插入时间 | 是 |
7 | create_time | Date | 创建时间 | 是 |
表4.10留言板表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | yonghu_id | Integer | 用户 | 是 |
3 | liuyan_name | String | 留言标题 | 是 |
4 | liuyan_text | String | 留言内容 | 是 |
5 | insert_time | Date | 留言时间 | 是 |
6 | reply_text | String | 回复内容 | 是 |
7 | update_time | Date | 回复时间 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.11商品表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | naicha_name | String | 商品名称 | 是 |
3 | naicha_uuid_number | String | 商品编号 | 是 |
4 | naicha_photo | String | 商品照片 | 是 |
5 | zan_number | Integer | 赞 | 是 |
6 | cai_number | Integer | 踩 | 是 |
7 | naicha_types | Integer | 商品类型 | 是 |
8 | naicha_kucun_number | Integer | 商品库存 | 是 |
9 | naicha_price | Integer | 购买获得积分 | 是 |
10 | naicha_old_money | BigDecimal | 商品原价 | 是 |
11 | naicha_new_money | BigDecimal | 现价/积分 | 是 |
12 | naicha_clicknum | Integer | 商品热度 | 是 |
13 | naicha_content | String | 商品介绍 | 是 |
14 | shangxia_types | Integer | 是否上架 | 是 |
15 | naicha_delete | Integer | 逻辑删除 | 是 |
16 | insert_time | Date | 录入时间 | 是 |
17 | create_time | Date | 创建时间 | 是 |
表4.12商品收藏表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | naicha_id | Integer | 商品 | 是 |
3 | yonghu_id | Integer | 用户 | 是 |
4 | naicha_collection_types | Integer | 类型 | 是 |
5 | insert_time | Date | 收藏时间 | 是 |
6 | create_time | Date | 创建时间 | 是 |
表4.13商品评价表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | naicha_id | Integer | 商品 | 是 |
3 | yonghu_id | Integer | 用户 | 是 |
4 | naicha_commentback_text | String | 评价内容 | 是 |
5 | insert_time | Date | 评价时间 | 是 |
6 | reply_text | String | 回复内容 | 是 |
7 | update_time | Date | 回复时间 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.14商品订单表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | naicha_order_uuid_number | String | 订单编号 | 是 |
3 | address_id | Integer | 收货地址 | 是 |
4 | naicha_id | Integer | 商品 | 是 |
5 | yonghu_id | Integer | 用户 | 是 |
6 | buy_number | Integer | 购买数量 | 是 |
7 | naicha_order_true_price | BigDecimal | 实付价格 | 是 |
8 | naicha_order_courier_name | String | 派送人 | 是 |
9 | naicha_order_courier_number | String | 联系方式 | 是 |
10 | naicha_order_types | Integer | 订单类型 | 是 |
11 | naicha_order_payment_types | Integer | 支付类型 | 是 |
12 | insert_time | Date | 订单创建时间 | 是 |
13 | create_time | Date | 创建时间 | 是 |
表4.15用户表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | yonghu_name | String | 用户姓名 | 是 |
3 | yonghu_phone | String | 用户手机号 | 是 |
4 | yonghu_id_number | String | 用户身份证号 | 是 |
5 | yonghu_photo | String | 用户头像 | 是 |
6 | yonghu_email | String | 用户邮箱 | 是 |
7 | new_money | BigDecimal | 余额 | 是 |
8 | yonghu_sum_jifen | BigDecimal | 总积分 | 是 |
9 | yonghu_new_jifen | BigDecimal | 现积分 | 是 |
10 | huiyuandengji_types | Integer | 会员等级 | 是 |
11 | jinyong_types | Integer | 账户状态 | 是 |
12 | create_time | Date | 创建时间 | 是 |
表4.16原材料表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | gongyingshang_id | Integer | 供应商 | 是 |
3 | yuancailiao_uuid_number | String | 原材料编号 | 是 |
4 | yuancailiao_name | String | 原材料名称 | 是 |
5 | yuancailiao_photo | String | 原材料照片 | 是 |
6 | yuancailiao_types | Integer | 原材料类型 | 是 |
7 | yuancailiao_old_money | BigDecimal | 进价 | 是 |
8 | yuancailiao_kucun_number | Integer | 原材料数量 | 是 |
9 | yuancailiao_content | String | 原材料介绍 | 是 |
10 | insert_time | Date | 录入时间 | 是 |
11 | create_time | Date | 创建时间 | 是 |
表4.17出入库表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | yuancailiao_churu_inout_uuid_number | String | 出入库流水号 | 是 |
3 | yuancailiao_churu_inout_name | String | 出入库名称 | 是 |
4 | yuancailiao_churu_inout_types | Integer | 出入库类型 | 是 |
5 | yuancailiao_churu_inout_content | String | 备注 | 是 |
6 | insert_time | Date | 添加时间 | 是 |
7 | create_time | Date | 创建时间 | 是 |
表4.18出入库详情表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | yuancailiao_churu_inout_id | Integer | 出入库 | 是 |
3 | yuancailiao_id | Integer | 原材料 | 是 |
4 | yuancailiao_churu_inout_list_number | Integer | 操作数量 | 是 |
5 | insert_time | Date | 操作时间 | 是 |
6 | create_time | Date | 创建时间 | 是 |
表4.19管理员表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | username | String | 员工名 | 是 |
3 | password | String | 密码 | 是 |
4 | role | String | 角色 | 是 |
5 | addtime | Date | 新增时间 | 是 |
4.3本章小结
本章主要介绍了系统功能设计、数据库设计等内容。通过设计系统的总体功能框架,确定系统的功能设计主要包括商品等模块。数据库设计主要分为概念设计阶段和逻辑设计阶段,其中,概念设计是将现实世界中的数据转变为信息世界中的概念模型,逻辑设计是将概念设计中的概念模型转变成可以被数据库存储的数据表格。系统功能设计好坏是系统得以被编码实现的重要依据。数据库设计是否符合规范,是系统能够成功运行的基本保障,也是用户和系统实现交互处理的重要前提。
5系统实现
5.1管理员功能模块实现
5.1.1管理员登录
管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限,管理员登录界面设计如图5-1所示。
图5-1管理员登录界面
5.1.2商品管理
管理员可以通过选择商品管理,管理相关的商品信息记录,比如进行查看商品信息标题,修改商品信息来源等操作,商品管理界面设计如图5-2所示。
图5-2商品管理界面
5.1.3公告管理
管理员可以通过选择公告管理,管理相关的公告信息记录,比如进行查看公告详情,删除错误的公告信息,发布公告等操作,公告管理界面如图5-3所示。
图5-3 公告管理界面
5.1.4公告类型管理
管理员可以通过选择公告类型管理,管理相关的公告类型信息,比如查看所有公告类型,删除无用公告类型,修改公告类型,添加公告类型等操作,公告类型管理界面设计如图5-4所示。
图5-4公告类型管理界面
5.1.5 供应商管理
如图5.5显示的就是供应商管理页面,此页面提供给管理员的功能有:新增供应商,修改供应商,删除供应商。
图5.5供应商管理页面
5.1.6 供应商类型管理
如图5.5显示的就是供应商类型管理页面,此页面提供给管理员的功能有:新增供应商类型,修改供应商类型,删除供应商类型。
图5.6 供应商类型管理页面
JAVA后端代码实现
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
源码获取
大家点赞、收藏、关注 ,让更多需要的同学看到
⭐进主页热门专栏推荐订阅⭐ 订阅收藏起来,防止下次找不到
🔎千套Java / PHP / nod.js / asp.net/ Python等项目实战更新中~
🔎百套小程序APP项目实战更新中~👇下方有我的微信名片👇