基于javaweb+mysql的ssm+maven汽车维修管理系统(java+ssm+jsp+easyui+echarts+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SSM+Maven汽车维修管理系统(java+ssm+jsp+easyui+echarts+mysql)
项目介绍
随着人们生活水平的提高,私家车的数量正在在逐年攀升。由此带动了汽车维修行业的发展,越来越多的汽车维修厂如雨后春笋般涌现。作为汽车维修厂,如何高效的对维修长进行管理是企业管理者需要着重考虑的问题。而汽车维修管理系统就是一个能够帮助汽车维修长进行业务管理、客户信息管理和员工信息管理的软件系统。 本课题基于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项目
技术栈
- 后端:Spring、SpringMVC和Mybatis 2. 前端:JSP+EasyUI+jQuery+Echarts
使用说明
- 使用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
/**
* 输出到前台
* @param response
* @param fileName
* @param contentType
* @param workbook
*/
public void printStream(HttpServletResponse response,String fileName,HSSFWorkbook workbook){
try {
OutputStream outputStream = response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment;filename="+new String(fileName.getBytes("GBK"),"iso-8859-1"));
response.setContentType("application/msexcel");
workbook.write(outputStream);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 通过反射获取类的实例化对象
* @return
*/
public T getClassType() {
try {
return classType.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 内部接口设置样式
*
*/
public interface MyXLSStyle{
/**
* 设置excel表格标题的样式
*/
public HSSFCellStyle getHeaderStyle(HSSFWorkbook workbook);
/**
* 设置属性字段样式
*/
public class CommonExcelStyle implements MyXLSStyle{
public CommonExcelStyle(int count) {
this.count = count;
}
private int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
/**
* 设置头部的样式
*/
@SuppressWarnings("deprecation")
@Override
public HSSFCellStyle getHeaderStyle(HSSFWorkbook workbook) {
HSSFCellStyle style = workbook.createCellStyle();
// 设置居中对齐
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置字体
HSSFFont font = workbook.createFont();
// 设置背景颜色
style.setFillForegroundColor(HSSFColor.GREEN.index);
style.setFillBackgroundColor(HSSFColor.GREEN.index);
font.setFontName("黑体");
font.setFontHeightInPoints((short)16);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
style.setFont(font);
return style;
}
@Override
public HSSFCellStyle getTitleStyle(HSSFWorkbook workbook) {
HSSFCellStyle style = workbook.createCellStyle();
// 设置居中对齐
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置字体
HSSFFont font = workbook.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short)12);
style.setFont(font);
* 财务管理控制器
*
*/
@Controller
@RequestMapping("/financial")
@Scope("prototype")
public class FinancialManagementController extends BaseController{
private static final Logger logger = LoggerFactory.getLogger(FinancialManagementController.class);
@Autowired
private ServiceFactory serviceFactory;
/**
* 查询所有的订单
* @param starttime 开始时间
* @param endtime 结束时间
* @param page 页号
* @param rows 页面数据大小
* @return
*/
@RequestMapping("/getOrders")
@ResponseBody
public String getOrders(String starttime,String endtime,Integer page,Integer rows){
return responseSuccess(serviceFactory.getFinanicalManagement().queryallSettled(starttime, endtime, page, rows));
}
/**
* 查询所有的维修单
* @param starttime
* @param endtime
* @param page
* @param rows
* @return
*/
@RequestMapping("/getPartProc")
@ResponseBody
public String getPartProc(String starttime,String endtime,Integer page,Integer rows){
return responseSuccess(serviceFactory.getFinanicalManagement().queryAllPartProc(starttime, endtime, page, rows));
}
/**
* 接单量
* @return
*/
*/
@RequestMapping("/modiPass")
@ResponseBody
public String modiPass(String pass, HttpServletRequest request) {
boolean flag = false;
String accountnumber = MyWebUtils.getCurrentUser(request).getAccountnumber();
flag = serviceFactory.getSystemManageService().modifyPass(pass, accountnumber);
return responseSuccess(flag);
}
/**
* 数据库备份
*
* @param location
* @return
*/
// @RequestMapping("/databaseBF")
// @ResponseBody
// public String databaseBF(String location, HttpServletRequest request) {
// boolean flag = false;
// if(org.apache.commons.lang.StringUtils.isNotBlank(location)){
// try {
// Runtime rt = Runtime.getRuntime();
//
// // 调用 调用mysql的安装目录的命令
// Process child = rt
// .exec(mysqldump+" -h localhost -u"+username+" -p"+password+" "+databasename);
// // 设置导出编码为utf-8。这里必须是utf-8
// // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
// InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
//
// InputStreamReader xx = new InputStreamReader(in, "utf-8");
// // 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
//
// String inStr;
// StringBuffer sb = new StringBuffer("");
// String outStr;
// // 组合控制台输出信息字符串
// BufferedReader br = new BufferedReader(xx);
// while ((inStr = br.readLine()) != null) {
// sb.append(inStr + "\r\n");
// }
// outStr = sb.toString();
//
// // 要用来做导入用的sql目标文件:
// CreateFileUtil.createFile(location);
// File objfile = new File(location);
// FileOutputStream fout = new FileOutputStream(objfile);
// OutputStreamWriter writer = new OutputStreamWriter(fout, "utf-8");
// writer.write(outStr);
// writer.flush();
* @param ordersid
* @return
*/
@RequestMapping("/queryMainitemUsed")
@ResponseBody
public String queryMainitemUsed(String ordersid){
List<MainitemUsedView> mainitemUsedViews = serviceFactory.getVehicleMaintence().queryAllMainitemView(ordersid);
return responseArraySuccess(mainitemUsedViews);
}
/**
* 支付订单
*/
@RequestMapping("/paymyOrders")
@ResponseBody
public String paymyOrders(HttpServletRequest request,String ordersid,String totalMoney){
boolean flag = false;
LoginBean user = MyWebUtils.getCurrentUser(request);
try {
Double tm = Double.parseDouble(totalMoney);
flag = serviceFactory.getVehicleMaintence().payMyOrders(ordersid, user, tm);
} catch (Exception e) {
logger.info("支付失败...");
}
return flag?responseSuccess(null):responseFail("系统暂时无法提供服务请稍后重试!");
}
}
}
return false;
}
}
/**
* 用户向页面输出数据
*
*
*/
public class MyWebPrinter {
private static final Logger logger = LoggerFactory.getLogger(MyWebPrinter.class);
/**
* 向页面输出内容
*
* @param response
* @param object
*/
public static void print(HttpServletResponse response, String object) {
// 设置返回内容的格式
response.setContentType("text/html;charset=utf-8");
// 获取printwriter对象
try {
PrintWriter out = response.getWriter();
out.print(object);
out.flush();
out.close();
out = null;
logger.info("输出成功:" + object);
} catch (IOException e) {
logger.error("输出失败!");
}
}
public static void printJSON(HttpServletResponse response, String object) {
// 设置返回内容的格式
response.setContentType("application/json;charset=utf-8");
// 获取printwriter对象
try {
/**
* 基础数据管理的控制器
*
*
*/
@Controller
@Scope("prototype")
@RequestMapping("/baseData")
public class BaseDataController extends BaseController {
}
}
}
return workbook;
}
/**
* 输出到前台
* @param response
* @param fileName
* @param contentType
* @param workbook
*/
public void printStream(HttpServletResponse response,String fileName,HSSFWorkbook workbook){
try {
OutputStream outputStream = response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment;filename="+new String(fileName.getBytes("GBK"),"iso-8859-1"));
response.setContentType("application/msexcel");
workbook.write(outputStream);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 通过反射获取类的实例化对象
* @return
*/
public T getClassType() {
try {
return classType.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 内部接口设置样式
*
*/
public interface MyXLSStyle{
/**
* 设置excel表格标题的样式
*/
public HSSFCellStyle getHeaderStyle(HSSFWorkbook workbook);
/**
* 设置属性字段样式
*/
public HSSFCellStyle getTitleStyle(HSSFWorkbook workbook);
public void toSupplierExcel(HttpServletResponse response) {
try {
List<Supplier> suppliers = serviceFactory.getBaseDataManageService().queryAllSupplier();
XLS<Supplier> myXls = new XLS<Supplier>(Supplier.class);
String fileName = "汽车维修管理系统_供应商";
String[] titles = new String[] { "编号", "供应商名称", "联系人", "手机", "联系方式", "传真", "邮箱", "地址", "邮政编码", "银行卡号",
"标记" };
HSSFWorkbook hssfWorkbook = myXls.writeExcel(fileName, titles, suppliers,
myXls.getCommonStyle(titles.length));
myXls.printStream(response, fileName + ".xls", hssfWorkbook);
} catch (Exception e) {
logger.error("下载失败!");
}
}
/**
* 零件类别的管理{operation}:S:查询:M:修改
* 查询所有${pageContext.request.contextPath}/baseData/S/partCategoryManage.html
* 修改:
* 添加:${pageContext.request.contextPath}/baseData/M/partCategoryManage.html?type=C (一下post partcategroy对象)
* 修改:${pageContext.request.contextPath}/baseData/M/partCategoryManage.html?type=U
* 删除(还原):${pageContext.request.contextPath}/baseData/M/partCategoryManage.html?type=D
*
* @param pageNo
* @param pageSize
* @param status
* @param partcategory
* @param type C:添加,U:修改,D:删除(还原)
* @return
*/
@RequestMapping("/{operation}/partCategoryManage")
@ResponseBody
public String partCategoryManage(Integer page, Integer rows, String status, Partcategory partcategory,
String type, @PathVariable("operation") String operation) {
if ("S".equals(operation)) {
return responseSuccess(serviceFactory.getBaseDataManageService().queryPagedPartCategory(page, rows, status));
} else if ("M".equals(operation)) {
boolean flag = serviceFactory.getBaseDataManageService().modifyPartCategory(partcategory, type);
return flag?responseSuccess(null):responseFail("操作失败,请稍后重试!");
}
return responseFail("系统暂时无法提供该服务,请稍后重试!");
}
/**
* 仓库表的管理{operation}:S:查询:M:修改
* 查询所有${pageContext.request.contextPath}/baseData/S/warehouseManage.html
* 修改:
}
/**
* 查询维修领料
* @param request
* @return
*/
@RequestMapping("/queryAllPickingRows")
@ResponseBody
public String queryAllPickingRows(HttpServletRequest request,String startTime,String endTime,
String keyworld,String searchType_c,Integer page,Integer rows){
logger.info("controller层:startTime:"+startTime+",endTime:"+endTime+",keyworld"+keyworld+",searchType_c:"+searchType_c+",page:"+page+",rows:"+rows);
PagedResult<PartPickingView> pagedResult = serviceFactory.getVehicleMaintence().queryPickingView(startTime,endTime, keyworld, searchType_c, page, rows);
return responseSuccess(pagedResult,"查询成功!");
}
/**
* 查询领取的历史
* @param request
* @return
*/
@RequestMapping("/queryAllPicked")
@ResponseBody
public String queryAllPickHis(HttpServletRequest request,String partUsedId){
List<PickedPartView> pickedPartViews = serviceFactory.getVehicleMaintence().queryPickedPartView(partUsedId);
return responseArraySuccess(pickedPartViews);
}
/**
* 领取材料
* @param request
* @param partPickingView
* @return
*/
@RequestMapping("/pickingPart")
@ResponseBody
public String pickPart(HttpServletRequest request,PartPickingView partPickingView){
logger.info("领取材料获取到的数据为:"+JSON.toJSONString(partPickingView));
float real = 0f;
real = serviceFactory.getVehicleMaintence().pickPart(partPickingView);
logger.info("领取材料后返回的结果为:"+real);
return JSON.toJSONString(real);
}else if(org.apache.commons.lang.StringUtils.equals(operation, "getIM")){
// 查询大类下的所有的子类
String q = request.getParameter("q");
List<Mainitem> mainitems = serviceFactory.getVehicleMaintence().queryAllMainItemByCatId(q);
return responseArraySuccess(mainitems);
}
} catch (Exception e) {
logger.error(MyErrorPrinter.getErrorStack(e));
}
return responseFail("暂不提供该服务,请稍后重试!");
}
/**
* 查询所有的零件
* @param request
* @return
*/
@RequestMapping("/queryAllParts")
@ResponseBody
public String queryAllParts(HttpServletRequest request){
String pageNo = request.getParameter("page");
String pageSize = request.getParameter("rows");
Integer pageNoer = StringUtils.getIntegerValue(pageNo, 1);
Integer pageSizer = StringUtils.getIntegerValue(pageSize, 10);
String q = request.getParameter("q");
PagedResult<PartsInfo> pagedResult = serviceFactory.getVehicleMaintence().queryAllPartinfo(q, pageNoer, pageSizer);
return pagedResult!=null?responseSuccess(pagedResult):responseFail("对不起暂时不提供服务,稍后重试!");
}
/**
* 添加零件使用登记 operation:pmAD添加零件使用登记,pmRM:删除零件使用登记,pmQU:查询已经添加的零件
* @param request
* @return
*/
@RequestMapping("/partsMana/{operation}")
@ResponseBody
public String partsManage(HttpServletRequest request,Partused partused,@PathVariable("operation")String operation){
if("pmAD".equals(operation)){
// 添加零件使用登记
LoginBean user = MyWebUtils.getCurrentUser(request);
if(user!=null){
boolean flag = false;
partused.setApplicant(user.getUsername());
partused.setJobnumber(user.getJobnumber());
// concatinfo 为userinfoid
}
if (categoryflag != null) {
pc.setCatflag(categoryflag);
}
flag = serviceFactory.getBaseDataManageService().modifyPartCategory(pc, type);
}
return flag ? responseSuccess(null) : responseFail("修改维修项目dalei失败!");
}
/**
* 修改维修项目
*
* @return
*/
@RequestMapping("/modifyMainitem")
@ResponseBody
public String modifyMainitem(Mainitem mainitem, String type) {
boolean flag = false;
if ("C".equals(type) || "U".equals(type) || "D".equals(type)) {
flag = serviceFactory.getBaseDataManageService().modifyMainitem(mainitem, type);
}
return flag ? responseSuccess(null) : responseFail("修改维修项目失败!");
}
/**
* 分页查询供应商的信息
*
* @param key
* @param sort
* @param order
* @param flag
* @param pageNo
* @param pageSize
* @return
*/
@RequestMapping("/querySupplier")
@ResponseBody
public String querySupplier(String key, String sort, String order, String flag, Integer page, Integer rows) {
return responseSuccess(
serviceFactory.getBaseDataManageService().queryAllSupplier(key, sort, order, flag, page, rows));
}
/**
} else {
return responseSuccess(pagedResult);
}
} catch (Exception e) {
logger.error(MyErrorPrinter.getErrorStack(e));
}
return responseFail("获取任务失败!");
}
/**
* 维修项目登记管理功能 路径变量operation:addMP(添加),modMP(修改),delMP(删除),queMP(查询),
* isvad(是否已经质检过)
* gtCT(获取维修的大类),getIM(根据维修项目大类下查询维修项目)
* @param request request请求对象
* @param maintProject 维修项目实体
* @return 操作后的json字符串
*/
@RequestMapping("/mainprojrecord/{operation}")
@ResponseBody
public String addMaintRegRecord(HttpServletRequest request,Mainprojreg maintProject,@PathVariable("operation")String operation){
boolean flag = false;
String failStr = "暂时无法提供服务,请稍后重试!";
try {
if(org.apache.commons.lang.StringUtils.equals(operation, "addMP")){
// 添加
short haspassed = 0;
maintProject.setHaspassed(haspassed);
maintProject.setMainstatus("已登记");
LoginBean loginBean = (LoginBean) request.getSession().getAttribute("user");
maintProject.setRegperson(loginBean.getUserinfoid());
maintProject.setRegtime(new Date());
flag = serviceFactory.getVehicleMaintence().addMainItemRecord(maintProject);
return flag?responseSuccess(null, "添加成功!"):responseFail(failStr);
}else if(org.apache.commons.lang.StringUtils.equals(operation, "modMP")){
// 修改
flag = serviceFactory.getVehicleMaintence().checkhasPassed(maintProject.getId()+"");
if(flag){
return responseFail("对不起改维修项目已经通过质检,您不能修改!");
}else{
flag = serviceFactory.getVehicleMaintence().updateMainregRecord(maintProject);
return flag?responseSuccess(null, "修改成功!"):responseFail(failStr);
}
}else if(org.apache.commons.lang.StringUtils.equals(operation, "delMP")){
// 删除
flag = serviceFactory.getVehicleMaintence().checkhasPassed(maintProject.getId()+"");
if(flag){
return responseFail("对不起改维修项目已经通过质检,您不能删除!");
}else{
flag = serviceFactory.getVehicleMaintence().deleteMainregRecord(maintProject);
return flag?responseSuccess(null,"删除成功!"):responseFail(failStr);
logger.info("存储用户的cookie:"+loginBean.getAccountnumber());
}
// 跳转到主页
logger.info("用户:"+loginBean.getAccountnumber()+"成功进入系统");
return responseSuccess(loginBean, "登录成功");
}
}
}
/**
* 退出系统登录
* @param request 请求
* @param model 模型
* @param accountnum 账户号
* @return
*/
@RequestMapping("/{accountnum}/logout.shtml")
public String logout(HttpServletRequest request,HttpServletResponse response,Model model,@PathVariable("accountnum") String accountnum){
logger.info("用户"+accountnum+",退出系统登录...");
// 设置session为空
request.getSession().setAttribute("user", null);
// 页面跳转
return "login";
}
}
/**
* 系统的拦截器
*
*/
public class CommonInterceptor extends HandlerInterceptorAdapter {
public T getClassType() {
try {
return classType.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 内部接口设置样式
*
*/
public interface MyXLSStyle{
/**
* 设置excel表格标题的样式
*/
public HSSFCellStyle getHeaderStyle(HSSFWorkbook workbook);
/**
* 设置属性字段样式
*/
public HSSFCellStyle getTitleStyle(HSSFWorkbook workbook);
/**
* 设置列宽
*/
public int[] getColumnWidth();
/**
* 设置内容单元格的样式
*/
public HSSFCellStyle getContentStyle(HSSFWorkbook workbook);
};
/**
* 默认的样式
*/
public class CommonExcelStyle implements MyXLSStyle{
* 查询所有供应商的信息
* @return
*/
@RequestMapping("/searchWareHouse")
@ResponseBody
public String searchWareHouse() {
return responseArraySuccess(serviceFactory.getBaseDataManageService().queryAllWareHouse());
}
/**
* 零件入库
* @return
*/
@RequestMapping("/storagePart")
@ResponseBody
public String storagePart(@ModelAttribute("part") Part part,@ModelAttribute("storage") Partstorage storage,HttpServletRequest request) {
// 设置part的值为1
part.setPartflag("1");
// 设置零件存储表的信息
storage.setStoragetime(new Date());
LoginBean loginBean = MyWebUtils.getCurrentUser(request);
if(loginBean!=null){
storage.setPurchaser(loginBean.getUsername());
storage.setJobnumber(loginBean.getJobnumber());
}
// 调用service添加
boolean flag = serviceFactory.getBaseDataManageService().addPartStorage(part, storage);
return flag?(responseSuccess(null)):(responseFail("添加失败!"));
}
/**
* 删除零件
* @return
*/
@RequestMapping("/delPart")
@ResponseBody
public String delPart(String partid) {
boolean flag = false;
if(StringUtils.isNotBlank(partid)){
flag = serviceFactory.getBaseDataManageService().delPart(partid);
}
return flag?responseSuccess(null):responseFail("删除失败");
}
}
/**
* 查询所有的用户信息
*
* @return
*/
@RequestMapping("/getAllUserDept")
@ResponseBody
public String queryAllUser() {
List<EasyUITreeNode> easyUITreeNodes = serviceFactory.getVehicleMaintence().queryUserSectorInEUI();
if (easyUITreeNodes != null) {
return JSON.toJSONString(easyUITreeNodes);
}
return responseFail("加载用户失败!");
}
/**
* 接单操作
*
* @param request
* @param orderList
* @return
*/
@RequestMapping(value = "/receptOrder", method = RequestMethod.POST)
@ResponseBody
public String receptOrders(OrderList orderList) {
logger.info("获取到的订单的信息为:" + JSON.toJSONString(orderList));
boolean flag = false;
if (orderList != null && orderList.getOrders() != null && orderList.getPersonallocates() != null) {
try {
// 定义用户来访实体
Customervisithis customervisithis = new Customervisithis();
customervisithis.setCustomername(orderList.getCustomername());
customervisithis.setContactinfo(orderList.getCustomerphone());
customervisithis.setVisittime(new Date());
customervisithis.setServicecontent(orderList.getOrders().getWarrcontent());
customervisithis.setIsnew(Short.valueOf(String.valueOf(orderList.getIsNew())));
customervisithis.setCustomer(orderList.getOrders().getCustomerid());
flag = serviceFactory.getVehicleMaintence().newOrderList(orderList.getOrders(),
orderList.getPersonallocates(), customervisithis);
} catch (Exception e) {
flag = false;