ssm汽车养护管理系统源码和论文

ssm汽车养护管理系统038


 开发工具:idea 
 数据库mysql5.7+
 数据库链接工具:navcat,小海豚等
  技术:ssm

开题报告内容:(研究现状、目的意义;基本内容、研究方法、参考文献等。) 

研究现状

国外的MIS系统大都经历了十几年甚至几十年的发展,在使用性和稳定性方面已经占有了很重要的地位,而本系统在使用方面力求简洁方便,比较适合汽修公司应用,操作方便简单。从国际的角度看,中国已经加入世界贸易组织,已经进入了竞争激烈的国际市场,为了使自己公司提高竞争力,国外的一些汽修公司早就认识到了效率的重要性,一些国外大型汽修公司也已经引进了汽车养护管理系统,而且本系统是在SSM框架下开发,代码可移植性较好,重用性很强,只需要更改少量代码即可以部署在不同的应用服务器上,在应用方面来说是比较方便的。

目的意义

以前汽车维修人员只是在汽车运输行业中从事后勤保障工作,随着我国经济的发展,汽车维修行业已经从原来的从属部门发展成了如今的功能齐备的独立企业。这种结构的转变,给私营汽修企业和个体汽修企业的发展带来了契机,私营企业和个体维修企业的加入也带动了整个汽修行业的整体水平的提高,推动了行业的迅速发展。开发本系统的目的主要是希望通过本系统帮助中小型汽车维修企业提高工作效率和管理水平,从而提高企业的竞争力和经济效益。汽车维修企业日常业务量大、工作内容繁杂、琐碎,传统的手工管理方法实现日常信息管理。使用本系统可以使企业的管理人员工作变得轻松,使管理人员切实感受到信息化建设带来的便利,切实感受到计算机技术、网络技术带来的快捷和智能。

基本内容

本系统以Java开发语言开发,Mysql为后台数据库,采用SSM(Spring+Spring MVC+MyBatis)三层架构网络。由Html来完成网站用户的接口(即界面), 逻辑处理和数据由Mysql来进行,由Mysql来完成数据的存放。

系统分为管理员与客户权限。管理员管理的内容包括员工管理,客户管理,员工出勤管理,零件分类管理,零件设备管理,维修管理。主要就是实现信息的增删改查操作。客户只能查看个人信息以及维修信息。

参考文献

[1]夏雨.汽车维修管理系统设计与实现[J].山东工业技术,2015(20):201.

[2]崔忠燕,高洁,张旭.汽车维修业务管理系统的设计[J].电脑知识与技术,2018,9(15):3472-3475.

[3]邹红霆.基于SSM框架的Web系统研究与应用[J].湖南理工学院学报(自然科学版),2017,30(01):39-43.

[4]汪君宇.基于JSP的Web应用软件开发技术分析[J].科技创新与应用,2018(16):158-160.

[5]赵钢.JSP Servlet+EJB的Web模式应用研究[J].电子设计工程,2018,21(13):47-49.

[6]肖英.解决JSP/Servlet开发中的中文乱码问题[J].科技传播,2017,(1)11-25.

[7]朱钧.基于角色的jsp通用权限系统设计与实现[D].山东大学,2019.

[8]康牧.JSP动态网站开发实用教程[M].清华大学出版社,2018.

[9]王建国.数据库设计在网站开发中的应用[J].山东农业工程学院学报,2017,34(04):158-159+164.

[10]张知青.基于关系数据库的查询方法及优化技术分析[J].煤炭技术,2015,31(05):218-220.

[11]陈志誉.Java工具及其调度方法研究[D].华南理工大学,2018.

[12]张孝祥,徐明华.JAVA基础与案例开发详解[M].清华大学出版社,2015.

[13]刘亚宾.精通Eclipse--JAVA技术大系[M].电子工业出版社,2015.

[14]曾志明.网站开发技术的比较研究[J].电脑知识与技术,2015,6(05):1075-1078.

[15]卫红春.信息系统分析与设计[M].北京:清华大学出版社,2016.

[16]于万波.网站开发与应用案例教程[M].清华大学出版社,2017.

[17]黎连业,王华,李淑春.软件测试与测试技术[M].清华大学出版社,2015.

package com.controller;

import java.text.SimpleDateFormat;
import java.util.*;
import javax.servlet.http.HttpServletRequest;

import com.annotation.IgnoreAuth;
import com.entity.GuanliyuanEntity;
import com.service.TokenService;
import org.apache.commons.lang3.StringUtils;
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.GuanliyuanEntity;

import com.service.GuanliyuanService;
import com.utils.PageUtils;
import com.utils.R;

/**
 * 管理员表
 * 后端接口
 * @author
 * @email
 * @date 2021-02-24
*/
@RestController
@Controller
@RequestMapping("/guanliyuan")
public class GuanliyuanController {
    private static final Logger logger = LoggerFactory.getLogger(GuanliyuanController.class);

    @Autowired
    private GuanliyuanService guanliyuanService;


    @Autowired
    private TokenService tokenService;

    /**
     * 登录
     */
    @IgnoreAuth
    @PostMapping(value = "/login")
    public R login(String username, String password, String role, HttpServletRequest request) {
        GuanliyuanEntity user = guanliyuanService.selectOne(new EntityWrapper<GuanliyuanEntity>().eq("account", username));
        if(user != null){
            if(!user.getRole().equals(role)){
                return R.error("权限不正常");
            }
            if(user==null || !user.getPassword().equals(password)) {
                return R.error("账号或密码不正确");
            }
            String token = tokenService.generateToken(user.getId(),user.getName(), "users", user.getRole());
            return R.ok().put("token", token);
        }else{
            return R.error("账号或密码或权限不对");
        }

    }

    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
        Integer id = (Integer)request.getSession().getAttribute("userId");
        GuanliyuanEntity user = guanliyuanService.selectById(id);
        return R.ok().put("data", user);
    }


    /**
     * 注册
     */
    @IgnoreAuth
    @PostMapping(value = "/register")
    public R register(@RequestBody GuanliyuanEntity user){
//    	ValidatorUtils.validateEntity(user);
        if(guanliyuanService.selectOne(new EntityWrapper<GuanliyuanEntity>().eq("account", user.getAccount())) !=null) {
            return R.error("用户已存在");
        }
        guanliyuanService.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){
        GuanliyuanEntity user = guanliyuanService.selectOne(new EntityWrapper<GuanliyuanEntity>().eq("account", username));
        if(user==null) {
            return R.error("账号不存在");
        }
        user.setPassword("123456");
        guanliyuanService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params){
        logger.debug("Controller:"+this.getClass().getName()+",page方法");
        PageUtils page = guanliyuanService.queryPage(params);
        return R.ok().put("data", page);
    }
    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        logger.debug("Controller:"+this.getClass().getName()+",info方法");
        GuanliyuanEntity guanliyuan = guanliyuanService.selectById(id);
        if(guanliyuan!=null){
            return R.ok().put("data", guanliyuan);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody GuanliyuanEntity guanliyuan, HttpServletRequest request){
        logger.debug("Controller:"+this.getClass().getName()+",save");
        Wrapper<GuanliyuanEntity> queryWrapper = new EntityWrapper<GuanliyuanEntity>()
            .eq("serial", guanliyuan.getSerial())
            .eq("name", guanliyuan.getName())
            .eq("account", guanliyuan.getAccount())
            .eq("password", guanliyuan.getPassword())
            .eq("age", guanliyuan.getAge())
            .eq("sex_types", guanliyuan.getSexTypes())
            .eq("mobile", guanliyuan.getMobile())
            .eq("address", guanliyuan.getAddress())
            .eq("role", guanliyuan.getRole())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        GuanliyuanEntity guanliyuanEntity = guanliyuanService.selectOne(queryWrapper);
        if(guanliyuanEntity==null){
            guanliyuan.setRole("管理员");
            guanliyuanService.insert(guanliyuan);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody GuanliyuanEntity guanliyuan, HttpServletRequest request){
        logger.debug("Controller:"+this.getClass().getName()+",update");
        //根据字段查询是否有相同数据
        Wrapper<GuanliyuanEntity> queryWrapper = new EntityWrapper<GuanliyuanEntity>()
            .notIn("id",guanliyuan.getId())
            .eq("serial", guanliyuan.getSerial())
            .eq("name", guanliyuan.getName())
            .eq("account", guanliyuan.getAccount())
            .eq("password", guanliyuan.getPassword())
            .eq("age", guanliyuan.getAge())
            .eq("sex_types", guanliyuan.getSexTypes())
            .eq("mobile", guanliyuan.getMobile())
            .eq("address", guanliyuan.getAddress())
            .eq("role", guanliyuan.getRole())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        GuanliyuanEntity guanliyuanEntity = guanliyuanService.selectOne(queryWrapper);
        if(guanliyuanEntity==null){
            guanliyuanService.updateById(guanliyuan);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }


    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        logger.debug("Controller:"+this.getClass().getName()+",delete");
        guanliyuanService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【中危】Apache Ivy<2.5.2 存在XXE漏洞 (CVE-2022-46751)

漏洞描述 Apache Ivy 是一个管理基于 ANT 项目依赖关系的开源工具&#xff0c;文档类型定义(DTD)是一种文档类型定义语言,它用于定义XML文档中所包含的元素以及元素之间的关系。 Apache Ivy 2.5.2之前版本中&#xff0c;当解析自身配置、Ivy 文件或 Apache Maven 的 POM 文件…

IntelliJ IDEA 官方网站 idea官网 http://www.jetbrains.com/idea/

IntelliJ IDEA 官方网站 idea官网 http://www.jetbrains.com/idea/ Idea下载官网一键直达&#xff1a; 官网一键直达

【STM32】FreeRTOS软件定时器学习

软件定时器 FreeRTOS提供了现成的软件定时器功能&#xff0c;可以一定程度上替代硬件定时器&#xff0c;但精度不高。 实验&#xff1a;创建一个任务&#xff0c;两个定时器&#xff0c;按键开启定时器&#xff0c;一个500ms打印一次&#xff0c;一个1000ms打印一次。 实现&…

关于模板的大致认识【C++】

文章目录 函数模板函数模板的原理函数模板的实例化模板参数的匹配原则 类模板类模板的定义格式类模板的实例化 非类型模板参数typename 与class模板的特化函数模板特化类模板特化全特化偏特化 模板的分离编译 函数模板 函数模板的原理 template <typename T> //模板参数…

mongodb集群

端口192.168.115.3 192.168.115.4 1192.168.115.5 下载MongoDB软件包版本为4.2.14并安装 rpm -ih --force --nodeps *.rpm 2创建文件夹mkdir -p /opt/local/mongo-cluster/conf 3.在目录里创建配置文件cd /opt/local/mongo-cluster/conf …

3D数据转换工具HOOPS Exchange概览

HOOPS Exchange SDK是一组C软件库&#xff0c;使开发团队能够快速为其应用程序添加可靠的2D和3D CAD导入和导出功能。这允许访问广泛的数据&#xff0c;包括边界表示&#xff08;BREP&#xff09;、产品制造信息&#xff08;PMI&#xff09;、模型树、视图、持久ID、样式、构造…

低代码开发ERP:精打细算,聚焦核心投入

企业数字化转型已经成为现代商业环境中的一项关键任务。如今&#xff0c;企业面临着日益激烈的竞争和不断变化的市场需求。在这样的背景下&#xff0c;数字化转型不仅是企业生存的必然选择&#xff0c;也是取得竞争优势和实现可持续发展的关键因素。 在数字化转型的过程中&…

【Hello Network】数据链路层协议

本篇博客简介&#xff1a;介绍数据链路层的各协议 数据链路层 以太网协议认识以太网协议以太网帧格式局域网通信原理再理解 MTU认识MTUMTU对IP协议的影响MTU对UDP协议的影响MTU对于TCP协议的影响如何查看ip地址 mac地址 以及mtu ARP协议ARP协议的作用ARP协议在哪里ARP的工作过程…

解决charles无法抓取localhost数据包

我们有时候在本地调试的时候&#xff0c;使用charles抓取向本地服务发送的请求的&#xff0c;发现无法抓取。 charles官方也作了相应说明&#xff1a; 大概意思就是 某些系统使用的是硬编码不能使用localhost进行传输&#xff0c;所以当我们连接到 localhost的时候&#xff0c…

leetcode 188. 买卖股票的最佳时机 IV

2023.8.21 这道题是 买卖股票的最佳时机III 的升级版&#xff0c;即买卖次数限制为k次&#xff0c;做法和上一篇如法炮制&#xff0c;直接看代码&#xff1a; class Solution { public:int maxProfit(int k, vector<int>& prices) {vector<vector<int>>…

常用性能测试工具及其功能

在软件开发周期的不同阶段&#xff0c;性能测试工具被广泛用于评估系统的性能和发现潜在的性能瓶颈。本文介绍了几种常用的性能测试工具&#xff0c;包括负载测试工具、压力测试工具和基准测试工具&#xff0c;并详细描述了它们的功能和用法。 性能测试在软件开发的各个阶段都至…

Docker的数据管理及端口映射与容器互联(使用centos镜像)

目录 Docker数据管理 1&#xff0e;数据卷 2&#xff0e;数据卷容器 Docker端口映射 Docker容器互联 Docker数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&…

Java接口详解

接口 接口的概念 在现实生活中&#xff0c;接口的例子比比皆是&#xff0c;比如&#xff1a;笔记本上的USB口&#xff0c;电源插座等。 电脑的USB口上&#xff0c;可以插&#xff1a;U盘&#xff0c;鼠标&#xff0c;键盘等所有符合USB协议的设备 电源插座插孔上&#xff0c;…

linux 上安装es

首先 到官网 https://www.elastic.co/cn/downloads/elasticsearch 下载对应的安装包&#xff0c;我这里下载的是 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.1-linux-x86_64.tar.gz 然后讲该压缩包上传到 linux 的/usr/local 目录下执行 tar -z…

redis 存储结构原理 2

咱们接着上一部分来进行分享&#xff0c;我们可以在如下地址下载 redis 的源码&#xff1a; https://redis.io/download 此处我下载的是 redis-6.2.5 版本的&#xff0c;xdm 可以直接下载上图中的 **redis-6.2.6 **版本&#xff0c; redis 中 hash 表的数据结构 redis hash …

(6)(6.2) 任务命令

文章目录 前言 6.2.1 概述 6.2.2 导航命令 6.2.3 条件命令 6.2.4 DO命令 前言 本文介绍了 Copter、Plane 和 Rover 切换到自动模式时支持的任务指令。 &#xff01;Warning 这是一项正在进行中的工作&#xff0c;尚未经过全面审核。有关 Copter 的更佳列表&#xff0c;请…

git拉取失败/git fatal终极解决方法

前言 被折磨不下20次总结出来的终极方案 步骤 0 首先关闭代理试试&#xff0c;不行就下一步 1 重置代理或者取消代理的方式 git config --global --unset http.proxy git config --global --unset https.proxy添加全局代理 git config --global http.proxy git config …

【从零学习python 】56. 异常处理在程序设计中的重要性与应用

文章目录 异常的概念读取文件异常try...except语句try...else语句try...finally语句 进阶案例 异常的概念 在程序运行过程中&#xff0c;由于编码不规范或其他客观原因&#xff0c;可能会导致程序无法继续运行&#xff0c;此时就会出现异常。如果不对异常进行处理&#xff0c;…

RabbitMQ---work消息模型

1、work消息模型 工作队列或者竞争消费者模式 在第一篇教程中&#xff0c;我们编写了一个程序&#xff0c;从一个命名队列中发送并接受消息。在这里&#xff0c;我们将创建一个工作队列&#xff0c;在多个工作者之间分配耗时任务。 工作队列&#xff0c;又称任务队列。主要思…

优化指南:带宽限制的可行策略

大家好&#xff01;作为一名专业的爬虫程序员&#xff0c;我们经常面临的一个挑战就是带宽限制。尤其是在需要快速采集大量数据时&#xff0c;带宽限制成为了我们提升爬虫速度的一大阻碍。今天&#xff0c;我将和大家分享一些解决带宽限制的可行策略&#xff0c;希望能帮助大家…