Springboot+Vue项目-基于Java+MySQL的商业辅助决策系统(附源码+演示视频+LW)

devtools/2024/9/18 20:52:15/ 标签: java, spring boot, vue.js, 毕业设计, 课程设计, mysql, 毕设

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。

💞当前专栏:Java毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

🎀 Python毕业设计
🌎微信小程序毕业设计

开发环境

开发语言:Java
框架:Springboot+Vue
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7
数据库工具:Navicat12
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器

演示视频

springboot295商业辅助决策系统录像

原版高清演示视频-编号:295
https://pan.quark.cn/s/5cda95b17ee0

源码下载地址:

https://download.csdn.net/download/2301_76953549/89100273

LW目录

【如需全文请按文末获取联系】
在这里插入图片描述
在这里插入图片描述

目录

  • 开发环境
  • 演示视频
  • 源码下载地址:
  • LW目录
  • 一、项目简介
  • 二、系统设计
    • 2.1软件功能模块设计
    • 2.2数据库设计
  • 三、系统项目部分截图
    • 3.1管理员功能实现
    • 3.2员工功能实现
  • 四、部分核心代码
    • 4.1 用户部分
  • 获取源码或论文

一、项目简介

管理员包括的功能模块有:个人中心,基础数据管理,公告管理,收支管理,销售订单管理,薪资管理,员工管理,管理员登录等功能。

员工包括的功能模块有个人中心,公告查看,销售订单查看,薪资查看,员工登录。

二、系统设计

2.1软件功能模块设计

管理员功能结构
在这里插入图片描述
员工功能结构
在这里插入图片描述

2.2数据库设计

(1)图4.4即为薪资这个实体所拥有的属性值。
在这里插入图片描述
(2)图4.5即为销售订单这个实体所拥有的属性值。
在这里插入图片描述

(3)图4.6即为员工这个实体所拥有的属性值。
在这里插入图片描述
(4)图4.7即为管理员这个实体所拥有的属性值。
在这里插入图片描述
(5)图4.8即为上面介绍的实体中存在的联系。
在这里插入图片描述

三、系统项目部分截图

3.1管理员功能实现

公告管理
图5.1 即为编码实现的公告管理界面,管理员在公告管理界面中发布公告,已经发布的公告信息如果存在错误信息,可以及时更改,在公告管理界面,管理员对需要删除的公告进行删除,查询公告信息时,需要在查询框中编辑公告名称才可以查询出公告信息,公告信息不仅包括公告图片,公告类型,也包括公告名称,公告发布时间等信息。
在这里插入图片描述
销售订单管理
图5.3 即为编码实现的销售订单管理界面,管理员在销售订单管理界面可以新增销售订单信息,销售订单信息主要包括销售数量,销售时间,销售金额,员工姓名,销售名称,添加时间等信息,销售订单信息存在登记错误的情况也能及时更改,同时在销售订单管理界面,管理员也能删除需要删除的销售订单信息,根据员工姓名查询销售订单,或者是选择销售类型来完成对销售订单信息的筛选。
在这里插入图片描述
员工管理
图5.5 即为编码实现的员工管理界面,管理员新增员工信息,员工信息如果存在登记错误的情况,可以及时更改,在员工管理界面,管理员也能删除需要删除的员工信息,对员工的账户进行密码重置,员工信息主要包括员工身份证号,员工手机,员工姓名,部门,性别,电子邮箱,户籍,现住址等信息,管理员如果需要快速找到需要的员工信息,可以使用员工管理界面的查询功能,查询前,需要在查询框中登记信息,如果选择根据员工姓名查询,则需要对员工的姓名进行登记才能查询,如果选择职位查询,那么需要选择员工的职位信息才能查询员工信息,如果选择部门查询,那么需要选择员工所属的部门才能查询出员工信息。
在这里插入图片描述
部门管理
图5.7 即为编码实现的部门管理界面,管理员在部门管理界面新增部门信息时,只需登记部门名称即可提交,已经存在的部门信息也能进行及时更改,在部门管理界面中,管理员可以删除需要删除的部门信息,查询部门信息也能根据部门名称来查询部门信息等。
在这里插入图片描述

3.2员工功能实现

薪资查看
图5.10 即为编码实现的薪资查看界面,员工在薪资查看界面中只能查看属于自己的薪资信息,当薪资信息比较多时,员工可以使用薪资查看界面的查询功能进行薪资查询。
在这里插入图片描述
个人信息
图5.11 即为编码实现的个人信息界面,员工在个人信息界面中除了不能更改部门和职位信息外,其他的信息包括头像,手机号在内的信息都能进行更改。
在这里插入图片描述

四、部分核心代码

4.1 用户部分

java">
package com.controller;import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;/*** 公告* 后端接口* @author* @email
*/
@RestController
@Controller
@RequestMapping("/gonggao")
public class GonggaoController {private static final Logger logger = LoggerFactory.getLogger(GonggaoController.class);@Autowiredprivate GonggaoService gonggaoService;@Autowiredprivate TokenService tokenService;@Autowiredprivate DictionaryService dictionaryService;//级联表service@Autowiredprivate YuangongService yuangongService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永不会进入");else if("员工".equals(role))params.put("yuangongId",request.getSession().getAttribute("userId"));if(params.get("orderBy")==null || params.get("orderBy")==""){params.put("orderBy","id");}PageUtils page = gonggaoService.queryPage(params);//字典表数据转换List<GonggaoView> list =(List<GonggaoView>)page.getList();for(GonggaoView c:list){//修改对应字典表字段dictionaryService.dictionaryConvert(c, request);}return R.ok().put("data", page);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id, HttpServletRequest request){logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);GonggaoEntity gonggao = gonggaoService.selectById(id);if(gonggao !=null){//entity转viewGonggaoView view = new GonggaoView();BeanUtils.copyProperties( gonggao , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody GonggaoEntity gonggao, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,gonggao:{}",this.getClass().getName(),gonggao.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永远不会进入");Wrapper<GonggaoEntity> queryWrapper = new EntityWrapper<GonggaoEntity>().eq("gonggao_name", gonggao.getGonggaoName()).eq("gonggao_types", gonggao.getGonggaoTypes());logger.info("sql语句:"+queryWrapper.getSqlSegment());GonggaoEntity gonggaoEntity = gonggaoService.selectOne(queryWrapper);if(gonggaoEntity==null){gonggao.setInsertTime(new Date());gonggao.setCreateTime(new Date());gonggaoService.insert(gonggao);return R.ok();}else {return R.error(511,"表中有相同数据");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody GonggaoEntity gonggao, HttpServletRequest request){logger.debug("update方法:,,Controller:{},,gonggao:{}",this.getClass().getName(),gonggao.toString());String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");//根据字段查询是否有相同数据Wrapper<GonggaoEntity> queryWrapper = new EntityWrapper<GonggaoEntity>().notIn("id",gonggao.getId()).andNew().eq("gonggao_name", gonggao.getGonggaoName()).eq("gonggao_types", gonggao.getGonggaoTypes());logger.info("sql语句:"+queryWrapper.getSqlSegment());GonggaoEntity gonggaoEntity = gonggaoService.selectOne(queryWrapper);if("".equals(gonggao.getGonggaoPhoto()) || "null".equals(gonggao.getGonggaoPhoto())){gonggao.setGonggaoPhoto(null);}if(gonggaoEntity==null){gonggaoService.updateById(gonggao);//根据id更新return R.ok();}else {return R.error(511,"表中有相同数据");}}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids){logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());gonggaoService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 批量上传*/@RequestMapping("/batchInsert")public R save( String fileName, HttpServletRequest request){logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {List<GonggaoEntity> gonggaoList = new ArrayList<>();//上传的东西Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段Date date = new Date();int lastIndexOf = fileName.lastIndexOf(".");if(lastIndexOf == -1){return R.error(511,"该文件没有后缀");}else{String suffix = fileName.substring(lastIndexOf);if(!".xls".equals(suffix)){return R.error(511,"只支持后缀为xls的excel文件");}else{URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径File file = new File(resource.getFile());if(!file.exists()){return R.error(511,"找不到上传文件,请联系管理员");}else{List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行,因为第一行是提示for(List<String> data:dataList){//循环GonggaoEntity gonggaoEntity = new GonggaoEntity();
//                            gonggaoEntity.setGonggaoName(data.get(0));                    //公告名称 要改的
//                            gonggaoEntity.setGonggaoPhoto("");//详情和图片
//                            gonggaoEntity.setGonggaoTypes(Integer.valueOf(data.get(0)));   //公告类型 要改的
//                            gonggaoEntity.setInsertTime(date);//时间
//                            gonggaoEntity.setGonggaoContent("");//详情和图片
//                            gonggaoEntity.setCreateTime(date);//时间gonggaoList.add(gonggaoEntity);//把要查询是否重复的字段放入map中}//查询是否重复gonggaoService.insertBatch(gonggaoList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,"批量插入数据异常,请联系管理员");}}}

获取源码或论文

如需对应的LW或源码,以及其他定制需求,也可以点我头像查看个人简介联系。


http://www.ppmy.cn/devtools/21756.html

相关文章

【C++】C\C++内存管理

下面是围绕C\C内存管理这一块知识谈论相关的内存管理机制&#xff0c;有需要借鉴即可。 同时&#xff0c;我在下面也放了快速建立链表的模板&#xff0c;方便oj题目拿到vs上进行调试。 内存管理目录 1.CPP内存管理1.1new、delete关键字概念1.2特性1.3总结 2.new、delete的底层…

手机误删照片如何恢复?怎么快速有效找回照片?

现在手机的功能越来越强大&#xff0c;手机厂家不断内卷&#xff0c;拍照功能越来越强&#xff0c;我们已经习惯用手机来记录生活了&#xff0c;因此储存的照片都特别珍贵&#xff0c;一旦误删&#xff0c;就容易造成不可磨灭的损失。那么手机误删照片如何恢复&#xff1f;本文…

c++继承

目录 前言 继承的概念及定义 继承方式与访问限定符 基类和派生类对象赋值转换 隐藏的概念 派生类的默认成员函数 派生类的构造函数 派生类的赋值重载 派生类的析构函数 继承之友元与静态成员 菱形继承及菱形虚继承 单继承 多继承 菱形继承 虚继承原理 继承与组合…

uniapp判断是图片还是pdf,如果是pdf则进行下载预览

一、附件中有图片也有pdf&#xff0c;需要进行预览&#xff0c;图片可直接预览&#xff0c;而pdf是下载后再预览 二、主要代码 <view class"fj-row" v-for"(item,index) in formDetail.attachmentRespVOS" :key"index"><view class&qu…

Android项目集成flutter模块

一.创建flutter模块 如果已经有flutter模块&#xff0c;此步骤可忽略 1.Android Studio 选择 New Flutter Project 创建 flutter 时&#xff0c;要选择Module&#xff0c;不能是 Application 2.创建完毕后&#xff0c;没有 .android 和.ios两个目录&#xff0c;此时可执行&…

【C语言】编译与链接

1.翻译环境与运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 1.翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令&#xff08;二进制指令&#xff09; 2.执行环境&#xff0c;它用于实际执行代码 2.翻译环境 那么翻译环境是怎么将源代码…

python面试算法题

在给大家来一道算法题&#xff0c;很经典的算法题&#xff0c;希望大家从这个算法题中能学到更多东西&#xff0c;以及逻辑上的东西&#xff0c;喜欢的小伙伴点赞收藏 def isValid(s):stack []mapping {): (, }: {, ]: [}for char in s:if char in mapping:top_element sta…

vue 跳转页面打开浏览器新窗口或者打开新标签

vue 跳转页面打开浏览器新窗口或者打开新标签 打开浏览器新窗口方法&#xff1a; openNewWindow () {// 打开新窗口let left ((window.screen.width / 2) - 180) / 2 // 新窗口居中let width (window.screen.width / 2) 180 // 新窗口的宽度// 新窗口要设置的参数…

OpenHarmony语言基础类库【@ohos.process (获取进程相关的信息)】

说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import process from ohos.process; 属性 系统能力&#xff1a; SystemCapability.Utils.Lang 名称类型可读可写说明uidnumber是否…

Git 使用 下载分支 提交新项目到当前分支 三(公司快速上手版)

文章背景 git已经装好了&#xff0c;公司的也给创建好账户了&#xff0c;仓库地址也有了。 领导已经给你说了是哪个分支了。 如何下载远程仓库中的一个项目分支&#xff0c;到本地电脑上。 并且如何将新建的项目上传到当前分支的远程仓库 下载 步骤 创建文件夹。 右键 Op…

功能测试_分类_用例_方法

总结 测试分类 按阶段分类 是否查看源代码分类 是否运行分类 是否自动化 其他分类 软件质量模型 开发模型-瀑布模型 测试过程模型 v w 测试用例八大要素 用例编号 用例标题 …

Apache Doris 2.x 版本【保姆级】安装+使用教程

Doris简介 Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以极速易用的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的复杂分析场景。基于…

【VBA】获取指定目录下的Excel文件,并合并所有excel中的内容。

1.新建一个excel表格。并创建两个Sheet&#xff0c;名字分别命名为FileList 和 All information。 2.按ALTF11进入 VBA编程模块&#xff0c;插入模块。 3.将如下 第五部分代码复制到模块中。 点击运行即可&#xff0c;然后就能提取指定目录下的所有excel文件信息并合并到一起…

Http长连接 和 短连接 原理

在请求头中有一个connection的键&#xff0c;它对应的值有keep-alive 和 close 两个值。keep-alive就是用于告诉服务器需要保持长连接。close就是用于告诉服务器这是个短链接。底层原理 数据的传输使用的是传输层的TCP协议和UDP协议。而HTTP使用传输层的TCP协议进行实现。TCP协…

交叉编译嵌入式openssl,关键是在config中指定编译器前缀

其实还是很顺利的。 下载 LINUX下载编译OpenSSL_linux下载 openssl-CSDN博客 编译 BUILD_LIBS${HOME}/build_libsCROSS_NAMEaarch64-mix210-linux export PATH/opt/linux/x86-arm/${CROSS_NAME}/bin:${PATH}make clean./config \--cross-compile-prefix${CROSS_NAME}- \no-…

Vue:vue的工程化

Vue前端工程化 前后端分离开发 即前端人员开发前端工程,将开发好的前端工程打包部署在前端服务器上 后端开发人员开发后端工程,再将后端工程打包部署在后端服务器上,这种模式称为前后端分离开发 而前后端要顺利对接的关键就是要遵循一定的开发规范 开发规范 这种开发规范定…

Unreal Engine子类化系统UButton

UE系统Button点击事件无法传递参数&#xff0c;通过子类化系统Button添加自定义参数扩展实现Button点击事件参数传递点击C类文件夹&#xff0c;在右边的区域点击鼠标右键&#xff0c;在弹出的菜单中选择“新建C类”在弹出的菜单中选中“显示所有类”&#xff0c;选择Button作为…

第6章 Mybatis高级查询(详解篇)

第6章 Mybatis高级查询_详解篇 1. 一对一映射1.1 自动映射(关联的嵌套结果映射)1.2 使用 resultMap 配置一对一映射resultMap复用1.3 association 标签的嵌套结果映射resultMap复用1.4 association标签的嵌套查询结构分析嵌套查询加载方式延迟记载注意事项延迟记载:利用@Respon…

南京邮电大学数学实验A 作业5 函数与方程 答案 | 《MATLAB数学实验》第三版 第四章 课后习题答案

若要获得更好的阅读体验&#xff0c;请前往 链接。 求点赞 求点赞 求点赞。 1(课本习题1) 求下列多项式的所有根&#xff0c;并验算&#xff1a; (1) x 2 x 1 x^{2} x 1 x2x1; (2) 3 x 5 − 4 x 3 2 x − 1 3x^{5} - 4x^{3} 2x - 1 3x5−4x32x−1; (3) 5 x 23 −…

Java 循环语句

文章目录 Java 循环语句一&#xff0c;for 循环1. for 循环结构2. for 循环案例: 输出5行HelloWord3. for 循环案例: 写出输出的结果 (格式多样性)4. for 循环案例: 遍历100以内的偶数。并获取偶数的个数&#xff0c;获取所有的偶数的和5. for 循环案例: 输出所有的水仙花数6. …