基于 Springboot 红酒庄内部信息管理系统 设计实现

news2024/9/28 15:32:50

目录

📚 前言

📑摘要

📑系统流程

📚 系统架构设计

📚 数据库设计

6.1数据三范式:

📚 系统功能的具体实现

   💬 系统登录和首页

系统登录

首页

 💬 用户功能模块

   添加用户

红酒信息列表展示

添加红酒详情

邮件列表展示

红酒类型列表

红酒类型添加

✒️ 源码实现

💖 源码获取

😁 联系方式


📚 前言

📑博客主页:@丘比特惩罚陆

💖欢迎关注:点赞收藏⭐留言✒
💬系列专栏:Java Springboot 毕设实战专栏
🎮 加入社区: 丘比特惩罚陆
🥇人生格言:选对方向,每走一步都是进步!
✒️欢迎大佬指正,一起学习!一起加油!

👏 希望大家能小手一动,帮忙点个赞!


📑摘要

    随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识。作为计算机应用的一部分,使用计算机对红酒庄员工和酒品信息进行管理,具有着手工管理所无法比拟的优点。这些优点能够极大地提高企业管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。所以开发一个红酒庄内部信息管理系统很有必要、本系统主要架构为B/S(浏览器和服务器)模式、以Java技术、采用mysql数据库和主流的jQuery框架等开发研究的红酒庄内部信息管理系统。


📑 系统的架构

    B/S的系统是通过能上网的电脑就可以使用,它最大的优点是不需要安装专门的软件,首先浏览器向服务器发出请求,然后服务器处理请求把信息再返回给浏览器。

📑系统流程

系统用例图:

                                                       

                                                             流程图

添加信息流程:

                                                         添加信息流程图

📚 系统架构设计

体系架构

用户登录管理模块

用户输入账号和密码或手机号登录按钮进行登录、根据输入的账号和密码以及角色来判断是否登录成功以及给出对应提示信息

角色管理模块

管理员可以对角色进行添加、修改、删除和浏览、配置用户角色和权限菜单显示。

部门管理模块

  管理员登录后可以对部门进行管理、添加、输入对应的部门名称等数据点击完成添加、修改以及删除操作。

红酒类型管理模块

  管理员登录后可以对红酒类型进行管理、添加、输入对应的红酒类型名称和备注说明完成添加、修改以及删除红酒类型等操作。

红酒信息管理模块

  管理员登录后可以对红酒信息进行管理、添加、输入对应的红酒类型、名称、存放时间、温度、湿度、光线等完成添加、修改以及删除红酒信息等操作。

邮件管理模块:

   管理员登录后可以对邮件信息进行管理、管理员可以群发邮件信息、可以接收平台用户发送的邮件、普通用户可以接收管理员群发的邮件以及发送邮件给管理员

通知公告模块

  管理员和登录后可以对抗通知公告进行查看、修改、添加、输入、公告标题以及内容等具体数据点击添加完成申请、以及修改和删除通知公告数据等操作、普通用户可以查看通知公告。

修改密码和退出管理模块

  管理员登录后可以对自己的账号密码进行修改、输入原密码验证成功后连续2次数据相同新密码就可以修改成功。管理员点击注销退出跳转到登录页面重新登陆。

系统功能结构图是系统设计阶段,系统功能结构图只是这个阶段一个基础,整个系统的架构决定了系统的整体模式,是系统的根据。

整体流程:

📚 数据库设计

6.1数据三范式:

一、第一范式

1NF是对属性的原子性,要求属性具有原子性,不可再分解;

二、第二范式

2NF是对记录的唯一性,要求记录有唯一标识,即实体的唯一性,

三、第三范式

3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,

数据库采用mysql5版本、满足数据库设计三范式。

编码采用utf8 -- UTF-8 Unicode

排序规则采用utf8_general_ci

📚 系统功能的具体实现

   💬 系统登录和首页

系统登录

用户输入网址http://localhost:8080/renren-admin/login.html跳转到登录页面、输入登录账号和密码以及验证码

首页

登录完成之后跳转到系统首页

 💬 用户功能模块

   添加用户

点击系统管理》》用户添加。点击添加按钮执行添加。录入选择添加的相关信息

红酒信息列表展示

添加红酒详情

邮件列表展示

红酒类型列表

红酒类型添加

等等

✒️ 源码实现

/**
 * 文章分享
 * 后端接口
 * @author 
 * @email 
 * @date 2022-04-17 10:21:50
 */
@RestController
@RequestMapping("/wenzhangfenxiang")
public class WenzhangfenxiangController {
    @Autowired
    private WenzhangfenxiangService wenzhangfenxiangService;

    @Autowired
    private StoreupService storeupService;

    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,WenzhangfenxiangEntity wenzhangfenxiang,
		HttpServletRequest request){
		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) {
			wenzhangfenxiang.setYonghuming((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<WenzhangfenxiangEntity> ew = new EntityWrapper<WenzhangfenxiangEntity>();
		PageUtils page = wenzhangfenxiangService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wenzhangfenxiang), params), params));

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

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(WenzhangfenxiangEntity wenzhangfenxiang){
        EntityWrapper< WenzhangfenxiangEntity> ew = new EntityWrapper< WenzhangfenxiangEntity>();
 		ew.allEq(MPUtil.allEQMapPre( wenzhangfenxiang, "wenzhangfenxiang")); 
		WenzhangfenxiangView wenzhangfenxiangView =  wenzhangfenxiangService.selectView(ew);
		return R.ok("查询文章分享成功").put("data", wenzhangfenxiangView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        WenzhangfenxiangEntity wenzhangfenxiang = wenzhangfenxiangService.selectById(id);
		wenzhangfenxiang.setClicknum(wenzhangfenxiang.getClicknum()+1);
		wenzhangfenxiang.setClicktime(new Date());
		wenzhangfenxiangService.updateById(wenzhangfenxiang);
        return R.ok().put("data", wenzhangfenxiang);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        WenzhangfenxiangEntity wenzhangfenxiang = wenzhangfenxiangService.selectById(id);
		wenzhangfenxiang.setClicknum(wenzhangfenxiang.getClicknum()+1);
		wenzhangfenxiang.setClicktime(new Date());
		wenzhangfenxiangService.updateById(wenzhangfenxiang);
        return R.ok().put("data", wenzhangfenxiang);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody WenzhangfenxiangEntity wenzhangfenxiang, HttpServletRequest request){
    	wenzhangfenxiang.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(wenzhangfenxiang);
        wenzhangfenxiangService.insert(wenzhangfenxiang);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody WenzhangfenxiangEntity wenzhangfenxiang, HttpServletRequest request){
    	wenzhangfenxiang.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(wenzhangfenxiang);
        wenzhangfenxiangService.insert(wenzhangfenxiang);
        return R.ok();
    }

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

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        wenzhangfenxiangService.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<WenzhangfenxiangEntity> wrapper = new EntityWrapper<WenzhangfenxiangEntity>();
		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("yonghu")) {
			wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));
		}

		int count = wenzhangfenxiangService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,WenzhangfenxiangEntity wenzhangfenxiang, HttpServletRequest request,String pre){
        EntityWrapper<WenzhangfenxiangEntity> ew = new EntityWrapper<WenzhangfenxiangEntity>();
        Map<String, Object> newMap = new HashMap<String, Object>();
        Map<String, Object> param = new HashMap<String, Object>();
		Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Object> entry = it.next();
			String key = entry.getKey();
			String newKey = entry.getKey();
			if (pre.endsWith(".")) {
				newMap.put(pre + newKey, entry.getValue());
			} else if (StringUtils.isEmpty(pre)) {
				newMap.put(newKey, entry.getValue());
			} else {
				newMap.put(pre + "." + newKey, entry.getValue());
			}
		}
		params.put("sort", "clicknum");
        params.put("order", "desc");
		PageUtils page = wenzhangfenxiangService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wenzhangfenxiang), params), params));
        return R.ok().put("data", page);
    }







}

💖 源码获取

点赞、收藏、关注!!!

非无偿源码!获取源码请添加up主!!

😁 联系方式

文章最底下有微信联系方式!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1914073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Backend - C# 操作PostgreSQL DB

目录 一、安装 Npgsql 插件 &#xff08;一&#xff09;作用 &#xff08;二&#xff09;操作 &#xff08;三&#xff09;注意 二、操作类 &#xff08;一&#xff09;操作类 1.NpgsqlConnection类 &#xff08;1&#xff09;作用 &#xff08;2&#xff09;引入 &a…

3Ds MAX 2025:创意的翅膀

初识3Ds MAX 2025 在我初次接触3Ds MAX 2025时&#xff0c;仿佛打开了一扇通往无限可能的大门。那时&#xff0c;我还是一个对三维建模充满好奇的初学者&#xff0c;心中怀揣着对未来的憧憬和对艺术的热爱。3Ds MAX 2025的出现&#xff0c;如同一位温柔的导师&#xff0c;带领…

全面解析BPMN、CMMN、DMN与XML

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 全面解析BPMN、CMMN、DMN与XML 前言BPMN&#xff08;业务流程模型与标记法&#xff09;定义与用途…

【昇思25天学习打卡营打卡指南-第二十二天】GAN图像生成

GAN图像生成 模型简介 生成式对抗网络(Generative Adversarial Networks&#xff0c;GAN)是一种生成式机器学习模型&#xff0c;是近年来复杂分布上无监督学习最具前景的方法之一。 最初&#xff0c;GAN由Ian J. Goodfellow于2014年发明&#xff0c;并在论文Generative Adve…

国产口碑最好的骨传导耳机有哪些?优选五大高口碑机型推荐!

作为一名有着多年工作经验的数码测评师&#xff0c;可以说对骨传导耳机或者蓝牙耳机等数码产品有着深入的了解&#xff0c;近期&#xff0c;有很多粉丝&#xff0c;或者身边的朋友经常向我咨询关于骨传导耳机的问题。确实如此&#xff0c;优质的骨传导耳机能在保护听力、保持环…

AI知识库:以AI之力,引领企业知识管理新纪元

在当今这个信息爆炸的时代&#xff0c;企业面临着前所未有的知识管理挑战。随着数据量的激增&#xff0c;如何高效地整理、存储并快速检索海量信息&#xff0c;成为了每个企业亟需解决的核心问题。 在过去&#xff0c;企业的知识库常常被视为一种必要的负担。它们充满了冗长复…

侯捷C++面向对象高级编程(下)-2-non-explicit one argument constructor

1.构造函数 构造函数: Fraction(int num, int den 1) 初始化分子和分母&#xff0c;允许指定分子 num 和可选的分母 den。默认情况下&#xff0c;分母为 1。 加法运算符重载: Fraction operator(const Fraction& f) 重载了加法运算符 。这使得两个 Fraction 对象可以通过 …

【蓄势·致远】 同为科技(TOWE)2024年年中会议

2024年7月2日-8日&#xff0c;同为科技&#xff08;TOWE&#xff09;召开2024年年中工作会议。会议回顾上半年总体工作情况&#xff0c;分析研判发展形势&#xff0c;规划部署下半年工作。 为期一周的工作会议&#xff0c;由同为科技&#xff08;TOWE&#xff09;创始人、董事长…

vue 画二维码及长按保存

需求 想要做如下图的二维码带文字&#xff0c;且能够长按保存 前期准备 一个canvas安装qrcode&#xff08;命令&#xff1a;npm i qrcode&#xff09; 画二维码及文字 初始化画布 <template><div><canvas ref"canvas" width"300" he…

C# + halcon 联合编程示例

C# halcon 联合编程示例 实现功能 1.加载图像 2.画直线&#xff0c;画圆&#xff0c;画矩形, 画椭圆 ROI&#xff0c;可以调整大小和位置 3.实现找边&#xff0c;找圆功能 效果 开发环境 Visual Studio 2022 .NET Framework 4.8 halcondotnet.dll 查看帮助文档 项目结构 DL…

大模型“聚会”:国内卷价格,国外卷能力

[ GPT-4o和谷歌Gemini不断宣传现阶段AI能力大幅度提高&#xff0c;那么这两家&#xff0c;谁的大模型能力更强呢&#xff1f;这篇文章里&#xff0c;作者就展开了多维度的测试和体验&#xff0c;想了解的同学&#xff0c;可以来看一下。 在中美AI大模型的竞争上&#xff0c;正衍…

CDF累积分布函数和PPF百分点位分布函数

目录 cdf累积分布函数 (CDF) ppf百分位点函数 (PPF) 区别与联系示例关系和区别 cdf 累积分布函数 (CDF) 定义&#xff1a; 累积分布函数 F ( x ) F(x) F(x) 给出随机变量 X X X 小于或等于某个值 x x x 的概率。数学定义&#xff1a; F ( x ) P ( X ≤ x ) F(x) P(X \l…

[C++]——同步异步日志系统(3)

同步异步日志系统 一、日志系统框架设计1.1模块划分1.1.1 日志等级模块1.1.2 日志消息模块1.1.3 日志消息格式化模块1.1.4 日志落地模块&#xff08;日志落地的方向是工厂模式&#xff09;1.1.5 日志器模块&#xff08;日志器的生成是建造者模式&#xff09;1.1.6 异步线程模块…

Coze API接口实战应用

Coze API介绍 概述 Coze API作为Coze平台对外的桥梁&#xff0c;让开发者能够灵活地利用Coze的功能和服务&#xff0c;促进业务流程自动化和系统集成。它覆盖了从数据获取到智能交互的全方位功能&#xff0c;旨在提升工作效率和创造更多可能。 Coze API申请接入流程 1. 发现…

python--实验8 函数(2)

知识点 变量的作用域 定义&#xff1a;解释了局部变量和全局变量的概念。局部变量&#xff1a; 局部变量是在函数内部定义的变量。它们只在该函数内部可见&#xff0c;一旦函数执行完毕&#xff0c;这些变量就会被销毁。例子&#xff1a;在函数内部通过赋值创建的变量。全局…

【卡尔曼滤波】高斯白噪声

生成高斯白噪声并将其应用于信号处理 生成高斯白噪声并将其应用于信号处理 #以下是一个生成高斯白噪声并将其应用于信号处理的示例代码:import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager ## not work#notice matplotlibrc is a file, not…

hf-mirror (huggingface 的国内镜像)

官网&#xff1a; https://hf-mirror.com/ 网站域名 hf-mirror.com&#xff0c;用于镜像 huggingface.co 域名。作为一个公益项目&#xff0c;致力于帮助国内AI开发者快速、稳定的下载模型、数据集。 如何使用HF-Mirror 方法一&#xff1a;网页下载 在https://hf-mirror.com/…

ubuntu笔记本X86安装nomachine客户端

资源下载: 链接: link 一、首先下载文件 nomachine_8.2.3_4_x86_64.tar.gz到桌面。 二、打开终端,依次输入 进入root模式,需要输入密码,密码不可见。 sudu su复制nomachine_8.2.3_4_x86_64.tar.gz粘贴到/usr目录: cp -r nomachine_8.2.3_4_x86_64.tar.gz /usr进入

使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-敌机配置(五)

文章目录 开发思路敌人节点场景绿色敌人制作 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击&#xff08;一&#xff09; 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件&#xff08;二&#xff09; 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-飞船…

强化学习总结(有具体代码实现)

文章目录 第一部分 强化学习基础第1章 强化学习概述1.1 强化学习概念1.2 强化学习的环境1.3 强化学习的目标1.4 强化学习的数据 第2章 多臂老虎机问题&#xff08;MAB问题&#xff09;2.1 问题描述2.1.1 问题定义2.1.2 形式化描述2.1.3 累积懊悔2.1.4 估计期望奖励 2.2 解决方法…