源码获取:俺的博客首页 "资源" 里下载!
项目介绍
随着人们生活水平的提高,私家车的数量正在在逐年攀升。由此带动了汽车维修行业的发展,越来越多的汽车维修厂如雨后春笋般涌现。作为汽车维修厂,如何高效的对维修长进行管理是企业管理者需要着重考虑的问题。而汽车维修管理系统就是一个能够帮助汽车维修长进行业务管理、客户信息管理和员工信息管理的软件系统。
本课题基于Java技术的汽车维修管理软件的设计与实现。其主要解决的问题有:
(1)车辆接待:系统需要实现添加来访者以及其车辆的信息,需要进行开单操作,同时为维修单分配维修人员和质检人员。
(2)维修项目登记:维修人员登录系统能够看到自己当前所有的维修任务,进行维修检查,系统需要纪录维修人员填写的维修项目以及工时和维修领料的情况。
(3)维修领料:按照维修人员的相关信息和时间范围的条件,查询用户维修用料登记的情况,可以查看每一项登记的领取历史,对于材料库存不够的情况,需要进行材料采购的申请。
(4)质检完工:质检员查看自己的质检任务,进行质检,录入质检结果到系统中。
(5)消费结算:车主在约定的时间进行提车,查看维修单,进行付款操作。
(6)配件管理:管理配件的信息,采购相关的配件,录入信息到系统中。
(7)基础数据管理:对系统的一些参数进行配置,管理系统的一些基础的数据,个人信息的查看以及密码修改等相关功能的实现。
系统使用tomcat作为servlet容器,mysql作为后台的数据库,服务器端使用Spring、SpringMVC和Mybatis框架来进行开发。前段的开发部分主要采用EasyUI和jQuery框架。系统页面部分采用WebStorm开发工具 ,后端的部分使用eclipse来作为开发工具,数据库开发使用Navicat for MySQL来完成开发。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7版本;
6.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目
技术栈
1. 后端:Spring、SpringMVC和Mybatis
2. 前端:JSP+EasyUI+jQuery+Echarts
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中jdbc.properties配置文件中的数据库配置改为自己的配置;
4. 运行项目,输入localhost:8080/vmm 登录
用户名:20130501140 密码:xzit001
用户管理控制层:
/**
* 用户Controller控制器
*/
@Api(value = "用户管理接口")
@RestController
public class UserController {
private Logger logger = LoggerFactory.getLogger(this.getClass());
//注入业务
@Autowired
private UserService userService;
/**
* table数据列表
*
* @param page
* @param limit
* @return
*/
@ApiOperation(value = "用户列表", notes = "查询用户结果集")
@GetMapping("/admin/user/tableList")
public ServerLayResult userList(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit,
@RequestParam(value = "keyword", defaultValue = "") String keyword) {
if (keyword == null || keyword.equals("")) {
logger.info("====================================1======" + keyword);
//封装Json数据对象
ServerLayResult result = new ServerLayResult(0, "", userService.count(), userService.selectAll(page, limit));
return result;
} else if (keyword != null) {
logger.info("====================================2======" + keyword);
ServerLayResult result = new ServerLayResult(0, "", userService.selectByUsername(keyword, page, limit).size(),
userService.selectByUsername(keyword, page, limit));
return result;
}
logger.info("====================================3======" + keyword);
return null;
}
/**
* 根据id删除
*
* @param id
* @return
*/
@ApiOperation(value = "用户删除", notes = "根据用户ID删除用户")
@GetMapping("/admin/user/del")
public String del(@RequestParam("id") Integer id) {
if (id != null && id != 0) {
int del = userService.deleteByPrimaryKey(id);
if (del > 0) {
return "success";
}
}
return "error";
}
/**
* 根据用户传入的对象进行更新
*
* @param user
* @return
*/
@ApiOperation(value = "用户对象更新", notes = "根据用户对象更新")
@PostMapping("/admin/user/update")
public String updateUser(@RequestBody User user) {
if (user != null) {
//根据用户对象的id 查询用户的密码,防止密码丢失
User user1 = userService.selectByPrimaryKey(user.getId());
//再次封装进对象中
if (user1 != null) {
user.setPassword(user1.getPassword());
//更新对象
int update = userService.updateByPrimaryKey(user);
if (update > 0) {
return "success";
}
}
}
return "error";
}
/**
* 重置用户密码
*
* @param id
* @return
*/
@ApiOperation(value = "重置密码接口", notes = "根据用户ID查询用户重置密码为123456,最后进行MD5加密")
@GetMapping("/admin/user/resetPwd")
public String restPwd(@RequestParam("id") Integer id) {
if (id != null && id > 0) {
//根据id查询出用户
User user = userService.selectByPrimaryKey(id);
//开始重置密码,重置密码使用的Spring提供的工具类进行对密码123456进行加密
user.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
//调用更新方法
int restPwd = userService.updateByPrimaryKey(user);
if (restPwd > 0) {
return "success";
}
}
return "error";
}
@ApiOperation(value = "Excel表格接口", notes = "表格导出")
@GetMapping(value = "/admin/exportBtn")
public void export(HttpServletResponse response) throws IOException {
List<User> users = userService.selectAll();
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("获取excel测试表格");
HSSFRow row = null;
row = sheet.createRow(0);//创建第一个单元格
row.setHeight((short) (26.25 * 20));
row.createCell(0).setCellValue("用户信息表");//为第一行单元格设值
/*为标题设计空间
* firstRow从第1行开始
* lastRow从第0行结束
*
*从第1个单元格开始
* 从第3个单元格结束
*/
CellRangeAddress rowRegion = new CellRangeAddress(0, 0, 0, 2);
sheet.addMergedRegion(rowRegion);
/*CellRangeAddress columnRegion = new CellRangeAddress(1,4,0,0);
sheet.addMergedRegion(columnRegion);*/
/*
* 动态获取数据库列 sql语句 select COLUMN_NAME from INFORMATION_SCHEMA.Columns where table_name='user' and table_schema='test'
* 第一个table_name 表名字
* 第二个table_name 数据库名称
* */
row = sheet.createRow(1);
row.setHeight((short) (22.50 * 20));//设置行高
row.createCell(0).setCellValue("用户Id");//为第一个单元格设值
row.createCell(1).setCellValue("用户登入名");//为第二个单元格设值
row.createCell(2).setCellValue("用户密码");//为第三个单元格设值
row.createCell(3).setCellValue("用户邮箱");//为第三个单元格设值
row.createCell(4).setCellValue("用户名");//为第三个单元格设值
row.createCell(5).setCellValue("用户地址");//为第三个单元格设值
row.createCell(6).setCellValue("用户电话");//为第三个单元格设值
for (int i = 0; i < users.size(); i++) {
row = sheet.createRow(i + 2);
User user = users.get(i);
row.createCell(0).setCellValue(user.getId());
row.createCell(1).setCellValue(user.getUsername());
row.createCell(2).setCellValue(user.getPassword());
row.createCell(3).setCellValue(user.getEmail());
row.createCell(4).setCellValue(user.getName());
row.createCell(5).setCellValue(user.getAddress());
row.createCell(6).setCellValue(user.getPhone());
}
sheet.setDefaultRowHeight((short) (16.5 * 20));
//列宽自适应
for (int i = 0; i <= 13; i++) {
sheet.autoSizeColumn(i);
}
response.setContentType("application/vnd.ms-excel;charset=utf-8");
OutputStream os = response.getOutputStream();
response.setHeader("Content-disposition", "attachment;filename=user.xls");//默认Excel名称
wb.write(os);
os.flush();
os.close();
}
@RequestMapping(value = "/import")
public String exImport(@RequestParam(value = "filename") MultipartFile file, HttpSession session) {
return null;
}
}
后台系统登入控制器:
/**
* 后台系统登入控制器
*/
@Api(value = "登入接口API")
@Controller
public class LoginController {
private Logger logger = LoggerFactory.getLogger(this.getClass());
//注入
@Autowired
private Producer producer;
@Autowired
private AdminUserService adminUserService;
/**
* @return
*/
@ApiOperation(value = "控制登入跳转", notes = "登入控制器跳转")
@GetMapping("/admin/login")
public String showLogin() {
return "admin/login";
}
@ApiOperation(value = "登入处理接口", notes = "根据json对象处理登入")
@PostMapping("/admin/login_do")
@ResponseBody
public String loginDo(@RequestBody AdminUser user, HttpServletRequest request) {
logger.info("登入用户的信息:" + user);
String vrifyCode = (String) request.getSession().getAttribute("vrifyCode");
if (user != null) {
AdminUser adminUser = adminUserService.selectByUser(user.getAusername(), user.getApassword());
if (adminUser == null) {
return "passwordError";
} else if (!vrifyCode.equals(user.getVercode())) {
return "vrifyCodeErroe";
}
request.getSession().setAttribute("loginName", user);
return "success";
} else {
return "userNull";
}
}
/**
* 生成验证码
*
* @param httpServletRequest
* @param httpServletResponse
* @throws Exception
*/
@ApiOperation(value = "验证码接口API", notes = "用于更新验证码")
@GetMapping("/defaultKaptcha")
public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws Exception {
byte[] captchaChallengeAsJpeg = null;
ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
try {
//生产验证码字符串并保存到session中
String createText = producer.createText();
httpServletRequest.getSession().setAttribute("vrifyCode", createText);
//使用生产的验证码字符串返回一个BufferedImage对象并转为byte写入到byte数组中
BufferedImage challenge = producer.createImage(createText);
ImageIO.write(challenge, "jpg", jpegOutputStream);
} catch (IllegalArgumentException e) {
httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
//定义response输出类型为image/jpeg类型,使用response输出流输出图片的byte数组
captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/jpeg");
ServletOutputStream responseOutputStream =
httpServletResponse.getOutputStream();
responseOutputStream.write(captchaChallengeAsJpeg);
responseOutputStream.flush();
responseOutputStream.close();
}
@ApiOperation(value = "登出接口", notes = "注销接口")
@GetMapping("/logout")
public String logout(HttpSession session) {
//销毁session
session.invalidate();
return "/admin/login";
}
}
订单管理控制层:
/**
* 订单Controller
*/
@Api("后台订单接口")
@RestController
public class OrderController {
private Logger logger = LoggerFactory.getLogger(this.getClass());
// 注入Service
@Autowired
private OrderService orderService;
// 注入订单详情Service
@Autowired
private OrderDetailService orderDetailService;
/**
* 订单列表
*
* @param page
* @param limit
* @return
*/
@ApiOperation(value = "订单列表", notes = "查询结果集合数据")
@GetMapping("/admin/order/list")
public ServerLayResult<Order> OrderList(@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit) {
return new ServerLayResult(0, "", orderService.count(), orderService.selectAll(page, limit));
}
/**
* 根据id删除
*
* @param id
* @return
*/
@ApiOperation(value = "订单删除", notes = "根据订单的id删除订单")
@GetMapping("/admin/order/del")
public String orderDel(@RequestParam(value = "id") Integer id) {
logger.info("订单id----" + id);
if (id != null && id > 0) {
// 删除关联订单详情
int index = orderDetailService.deleteByOrderId(id);
if (index > 0) {
int delete = orderService.deleteByPrimaryKey(id);
if (delete > 0) {
return "success";
}
}
}
return "error";
}
}
源码获取:俺的博客首页 "资源" 里下载!