基于javaweb+mysql的ssm在线车队货车管理系统(java+ssm+jsp+bootstrap+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SSM在线车队货车管理系统(java+ssm+jsp+bootstrap+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项目:否;
技术栈
- 后端:Spring+SpringMVC+Mybatis 2. 前端:JSP+bootstrap+jQuery+css+javascript
使用说明
- 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中dbconfig.properties配置文件中的数据库配置改为自己的配置; 4. 运行项目,输入localhost:8080/
/**访问系统首页
* @param changeMenu:切换菜单参数
* @return
*/
@RequestMapping(value="/main/{changeMenu}")
public ModelAndView login_index(@PathVariable("changeMenu") String changeMenu){
ModelAndView mv = this.getModelAndView();
PageData pd = new PageData();
pd = this.getPageData();
try{
Session session = Jurisdiction.getSession();
User user = (User)session.getAttribute(Const.SESSION_USER); //读取session中的用户信息(单独用户信息)
if (user != null) {
User userr = (User)session.getAttribute(Const.SESSION_USERROL); //读取session中的用户信息(含角色信息)
if(null == userr){
user = userService.getUserAndRoleById(user.getUSER_ID()); //通过用户ID读取用户信息和角色信息
session.setAttribute(Const.SESSION_USERROL, user); //存入session
}else{
user = userr;
}
String USERNAME = user.getUSERNAME();
Role role = user.getRole(); //获取用户角色
String roleRights = role!=null ? role.getRIGHTS() : ""; //角色权限(菜单权限)
String ROLE_IDS = user.getROLE_IDS();
session.setAttribute(USERNAME + Const.SESSION_ROLE_RIGHTS, roleRights); //将角色权限存入session
session.setAttribute(Const.SESSION_USERNAME, USERNAME); //放入用户名到session
session.setAttribute(Const.SESSION_U_NAME, user.getNAME()); //放入用户姓名到session
this.setAttributeToAllDEPARTMENT_ID(session, USERNAME); //把用户的组织机构权限放到session里面
List<Menu> allmenuList = new ArrayList<Menu>();
allmenuList = this.getAttributeMenu(session, USERNAME, roleRights, getArrayRoleRights(ROLE_IDS)); //菜单缓存
List<Menu> menuList = new ArrayList<Menu>();
menuList = this.changeMenuF(allmenuList, session, USERNAME, changeMenu); //切换菜单
if(null == session.getAttribute(USERNAME + Const.SESSION_QX)){
session.setAttribute(USERNAME + Const.SESSION_QX, this.getUQX(USERNAME)); //主职角色按钮权限放到session中
session.setAttribute(USERNAME + Const.SESSION_QX2, this.getUQX2(USERNAME)); //副职角色按钮权限放到session中
}
this.getRemortIP(USERNAME); //更新登录IP
mv.setViewName("system/index/main");
mv.addObject("user", user);
mv.addObject("SKIN", null == session.getAttribute(Const.SKIN)?user.getSKIN():session.getAttribute(Const.SKIN)); //用户皮肤
mv.addObject("menuList", menuList);
}else {
mv.setViewName("system/index/login"); //session失效后跳转登录页面
}
} catch(Exception e){
mv.setViewName("system/index/login");
logger.error(e.getMessage(), e);
}
pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); //读取系统名称
mv.addObject("pd",pd);
return mv;
}
public ModelAndView listAllTable() throws Exception{
logBefore(logger, Jurisdiction.getUsername()+"列出所有表");
if(!Jurisdiction.buttonJurisdiction(menuUrlb, "cha")){return null;} //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码)
ModelAndView mv = this.getModelAndView();
Object[] arrOb = DbFH.getTables();
List<String> tblist = (List<String>)arrOb[1];
mv.setViewName("fhdb/brdb/table_list");
mv.addObject("varList", tblist); //所有表
mv.addObject("dbtype", arrOb[2]); //数据库类型
mv.addObject("databaseName", arrOb[0]); //数据库名
mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
return mv;
}
/**备份全库
* @param
* @throws Exception
*/
@RequestMapping(value="/backupAll")
@ResponseBody
public Object backupAll(){
String username = Jurisdiction.getUsername();
logBefore(logger, username+"备份全库");
if(!Jurisdiction.buttonJurisdiction(menuUrlb, "add")){return null;} //校验权限
PageData pd = new PageData();
Map<String,Object> map = new HashMap<String,Object>();
pd = this.getPageData();
List<PageData> pdList = new ArrayList<PageData>();
String kackupPath;
try {
kackupPath = DbFH.getDbFH().backup("").toString(); //调用数据库备份
if(Tools.notEmpty(kackupPath) && !"errer".equals(kackupPath)){
pd.put("FHDB_ID", this.get32UUID()); //主键
pd.put("USERNAME", username); //操作用户
pd.put("BACKUP_TIME", Tools.date2Str(new Date())); //备份时间
pd.put("TABLENAME", "整库"); //表名
pd.put("SQLPATH", kackupPath); //存储位置
pd.put("DBSIZE", FileUtil.getFilesize(kackupPath)); //文件大小
pd.put("TYPE", 1); //1: 备份整库,2:备份某表
pd.put("BZ", username+"备份全库操作"); //备注
pd.put("msg", "ok");
try {
brdbService.save(pd);
} catch (Exception e) {
pd.put("msg", "no");
}
}else{
pd.put("msg", "no");
}
} catch (InterruptedException e) {
pd.put("msg", "no");
e.printStackTrace();
} catch (ExecutionException e) {
pd.put("msg", "no");
pd = this.getPageData();
pd.put("CAR_ID", this.get32UUID()); //主键
// pd.put("CAR_DRIVER_ID", ""); //货车驾驶员ID
carService.save(pd);
mv.addObject("msg","success");
mv.setViewName("save_result");
return mv;
}
/**删除
* @param out
* @throws Exception
*/
@RequestMapping(value="/delete")
public void delete(PrintWriter out) throws Exception{
logBefore(logger, Jurisdiction.getUsername()+"删除Car");
if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return;} //校验权限
PageData pd = new PageData();
pd = this.getPageData();
carService.delete(pd);
out.write("success");
out.close();
}
/**修改
* @param
* @throws Exception
*/
@RequestMapping(value="/edit")
public ModelAndView edit() throws Exception{
logBefore(logger, Jurisdiction.getUsername()+"修改Car");
if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
ModelAndView mv = this.getModelAndView();
PageData pd = new PageData();
List<PageData> userList = userService.listAllUser(pd); //列出用户列表
List<PageData> orderList = orderService.listAll(pd); //订单列表
pd = this.getPageData();
carService.edit(pd);
mv.addObject("msg","success");
mv.addObject("userList",userList);
mv.addObject("orderList",orderList);
try{
pd = this.getPageData();
if(userService.findByUsername(pd) != null){
errInfo = "error";
}
} catch(Exception e){
logger.error(e.toString(), e);
}
map.put("result", errInfo); //返回结果
return AppUtil.returnObject(new PageData(), map);
}
/**判断邮箱是否存在
* @return
*/
@RequestMapping(value="/hasE")
@ResponseBody
public Object hasE(){
Map<String,String> map = new HashMap<String,String>();
String errInfo = "success";
PageData pd = new PageData();
try{
pd = this.getPageData();
if(userService.findByUE(pd) != null){
errInfo = "error";
}
} catch(Exception e){
logger.error(e.toString(), e);
}
map.put("result", errInfo); //返回结果
return AppUtil.returnObject(new PageData(), map);
}
/**判断编码是否存在
* @return
*/
@RequestMapping(value="/hasN")
@ResponseBody
public Object hasN(){
Map<String,String> map = new HashMap<String,String>();
String errInfo = "success";
PageData pd = new PageData();
try{
pd = this.getPageData();
if(userService.findByUN(pd) != null){
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(format,true));
}
}
/**
* 说明:文件管理
* 创建人:admin Q1347845688
*/
@Controller
@RequestMapping(value="/fhfile")
/**
* 类名称: 代码生成器
* 创建人:admin Q1347845688
* @version
*/
@Controller
@RequestMapping(value="/createCode")
public class CreateCodeController extends BaseController {
String menuUrl = "createcode/list.do"; //菜单地址(权限用)
@Resource(name="createcodeService")
private CreateCodeManager createcodeService;
/**列表
* @param page
* @return
*/
@RequestMapping(value="/list")
public ModelAndView list(Page page) throws Exception{
if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){} //校验权限
ModelAndView mv = this.getModelAndView();
PageData pd = new PageData();
pd = this.getPageData();
String keywords = pd.getString("keywords"); //检索条件
if(null != keywords && !"".equals(keywords)){
keywords = keywords.trim();
pd.put("keywords", keywords);
pd.put("FROMUSERNAME", Jurisdiction.getUsername()); //发送者用户名(即当前用户)
pd.put("CTIME", Tools.date2Str(new Date())); //操作时间
pd.put("REMARK", ""); //留言
pd.put("TYPE", "group"); //类型
pd.put("CONTENT", Jurisdiction.getU_name()+" 已经同意你"+msgpd.getString("CONTENT")); //事件内容
pd.put("DREAD", "0"); //阅读状态 0 未读
sysmsgService.save(pd);
//把此用户加入到群中
PageData ipd = new PageData();
ipd = iqgroupService.findById(pd);
if(null == ipd){ //当我没有任何群时添加数据,否则修改
pd.put("QGROUPS", "('"+pd.getString("QGROUP_ID")+"',");
pd.put("IQGROUP_ID", this.get32UUID()); //主键
iqgroupService.save(pd);
}else{
pd.put("QGROUPS", ipd.getString("QGROUPS").replaceAll("'"+pd.getString("QGROUP_ID")+"',", "")+"'"+pd.getString("QGROUP_ID")+"',");//防止同一群,重复的添加
iqgroupService.edit(pd);
}
}
}
return AppUtil.returnObject(new PageData(), null);
}
/**拒绝申请(好友或者群)接口
* @return
* @throws Exception
*/
@RequestMapping(value="/refuse")
@ResponseBody
public Object refuse() throws Exception{
Map<String,Object> map = new LinkedHashMap<String,Object>();
String result = "";
PageData pd = new PageData();
pd = this.getPageData();
if("friend".equals(pd.getString("TYPE"))){ //同意好友申请
pd.put("USERNAME", Jurisdiction.getUsername()); //当前用户名
//修改消息状态
pd.put("CONTENT", "您拒绝了"+pd.getString("FNAME")+"申请好友");
pd.put("DTIME", Tools.date2Str(new Date())); //完成时间
pd.put("ISDONE", "yes");
sysmsgService.edit(pd);
//从对方好友列表中删除本人
friendsService.pullblack(pd);
//添加系统消息
pd.put("SYSMSG_ID", this.get32UUID()); //主键
pd.put("USERNAME", pd.getString("FUSERNAME")); //接收者用户名
pd.put("FROMUSERNAME", Jurisdiction.getUsername()); //发送者用户名(即当前用户)
pd.put("msg", "ok");
}else{
pd.put("msg", "no");
}
pdList.add(pd);
map.put("list", pdList);
return AppUtil.returnObject(pd, map);
}
/**导出到excel
* @param
* @throws Exception
*/
@RequestMapping(value="/excel")
public ModelAndView exportExcel() throws Exception{
logBefore(logger, Jurisdiction.getUsername()+"导出Friends到excel");
if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;}
ModelAndView mv = new ModelAndView();
PageData pd = new PageData();
pd = this.getPageData();
Map<String,Object> dataMap = new HashMap<String,Object>();
List<String> titles = new ArrayList<String>();
titles.add("用户名"); //1
titles.add("好友用户名"); //2
titles.add("添加时间"); //3
titles.add("是否允许"); //4
dataMap.put("titles", titles);
List<PageData> varOList = friendsService.listAll(pd);
List<PageData> varList = new ArrayList<PageData>();
for(int i=0;i<varOList.size();i++){
PageData vpd = new PageData();
vpd.put("var1", varOList.get(i).getString("USERNAME")); //1
vpd.put("var2", varOList.get(i).getString("FUSERNAME")); //2
vpd.put("var3", varOList.get(i).getString("CTIME")); //3
vpd.put("var4", varOList.get(i).getString("ALLOW")); //4
varList.add(vpd);
}
dataMap.put("varList", varList);
ObjectExcelView erv = new ObjectExcelView();
mv = new ModelAndView(erv,dataMap);
return mv;
}
@InitBinder
public void initBinder(WebDataBinder binder){
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(format,true));
}
}
return AppUtil.returnObject(new PageData(), map);
}
/**发送邮件页面
* @return
* @throws Exception
*/
@RequestMapping(value="/goSendEmail")
public ModelAndView goSendEmail() throws Exception{
ModelAndView mv = this.getModelAndView();
PageData pd = new PageData();
pd = this.getPageData();
mv.setViewName("system/tools/email");
mv.addObject("pd", pd);
return mv;
}
/**快递查询页面
* @return
* @throws Exception
*/
@RequestMapping(value="/queryExpress")
public ModelAndView queryExpress() throws Exception{
ModelAndView mv = this.getModelAndView();
PageData pd = new PageData();
pd = this.getPageData();
mv.setViewName("system/tools/queryExpress");
mv.addObject("pd", pd);
return mv;
}
/**查看物流跟踪记录
* @param
* @throws Exception
*/
@RequestMapping(value="/queryWuliujilu")
@ResponseBody
public Object queryWuliujilu(){
PageData pd = new PageData();
pd = this.getPageData();
String number = pd.getString("number");
String jsonStr,msg="ok";
JSONObject json;
try {
jsonStr = GetExpressMsg.get(number);
json = new JSONObject(jsonStr);
pd.put("value", json.get("body"));
} catch (Exception e) {
roleRights = role.getADD_QX(); //新增权限
}else if("del_qx".equals(msg)){
roleRights = role.getDEL_QX(); //删除权限
}else if("edit_qx".equals(msg)){
roleRights = role.getEDIT_QX(); //修改权限
}else if("cha_qx".equals(msg)){
roleRights = role.getCHA_QX(); //查看权限
}
menuList = this.readMenu(menuList, roleRights); //根据角色权限处理菜单权限状态(递归处理)
JSONArray arr = JSONArray.fromObject(menuList);
String json = arr.toString();
json = json.replaceAll("MENU_ID", "id").replaceAll("PARENT_ID", "pId").replaceAll("MENU_NAME", "name").replaceAll("subMenu", "nodes").replaceAll("hasMenu", "checked");
model.addAttribute("zTreeNodes", json);
mv.addObject("ROLE_ID",ROLE_ID);
mv.addObject("msg", msg);
} catch(Exception e){
logger.error(e.toString(), e);
}
mv.setViewName("system/role/b4Button");
return mv;
}
/**根据角色权限处理权限状态(递归处理)
* @param menuList:传入的总菜单
* @param roleRights:加密的权限字符串
* @return
*/
public List<Menu> readMenu(List<Menu> menuList,String roleRights){
for(int i=0;i<menuList.size();i++){
menuList.get(i).setHasMenu(RightsHelper.testRights(roleRights, menuList.get(i).getMENU_ID()));
this.readMenu(menuList.get(i).getSubMenu(), roleRights); //是:继续排查其子菜单
}
return menuList;
}
/**
* 保存角色按钮权限
*/
/**
* @param ROLE_ID
* @param menuIds
* @param msg
* @param out
* @throws Exception
*/
@RequestMapping(value="/saveB4Button")
public void saveB4Button(@RequestParam String ROLE_ID,@RequestParam String menuIds,@RequestParam String msg,PrintWriter out)throws Exception{
vpd.put("var17", varOList.get(i).getString("MARITAL")); //17
vpd.put("var18", varOList.get(i).getString("DJOINTIME")); //18
vpd.put("var19", varOList.get(i).getString("POST")); //19
vpd.put("var20", varOList.get(i).getString("POJOINTIME")); //20
vpd.put("var21", varOList.get(i).getString("EDUCATION")); //21
vpd.put("var22", varOList.get(i).getString("SCHOOL")); //22
vpd.put("var23", varOList.get(i).getString("MAJOR")); //23
vpd.put("var24", varOList.get(i).getString("FTITLE")); //24
vpd.put("var25", varOList.get(i).getString("CERTIFICATE")); //25
vpd.put("var26", varOList.get(i).get("CONTRACTLENGTH").toString()); //26
vpd.put("var27", varOList.get(i).getString("CSTARTTIME")); //27
vpd.put("var28", varOList.get(i).getString("CENDTIME")); //28
vpd.put("var29", varOList.get(i).getString("ADDRESS")); //29
vpd.put("var30", varOList.get(i).getString("USER_ID")); //30
vpd.put("var31", varOList.get(i).getString("BZ")); //31
varList.add(vpd);
}
dataMap.put("varList", varList);
ObjectExcelView erv = new ObjectExcelView();
mv = new ModelAndView(erv,dataMap);
return mv;
}
@InitBinder
public void initBinder(WebDataBinder binder){
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(format,true));
}
}
}else{
String rights = roleService.findObjectById(pd).getString("RIGHTS");
pd.put("RIGHTS", (null == rights)?"":rights); //组菜单权限
}
pd.put("ROLE_ID", this.get32UUID()); //主键
pd.put("ADD_QX", "0"); //初始新增权限为否
pd.put("DEL_QX", "0"); //删除权限
pd.put("EDIT_QX", "0"); //修改权限
pd.put("CHA_QX", "0"); //查看权限
roleService.add(pd);
FHLOG.save(Jurisdiction.getUsername(), "新增角色:"+pd.getString("ROLE_NAME"));
} catch(Exception e){
logger.error(e.toString(), e);
mv.addObject("msg","failed");
}
mv.setViewName("save_result");
return mv;
}
/**请求编辑
* @param ROLE_ID
* @return
* @throws Exception
*/
@RequestMapping(value="/toEdit")
public ModelAndView toEdit( String ROLE_ID )throws Exception{
ModelAndView mv = this.getModelAndView();
PageData pd = new PageData();
try{
pd = this.getPageData();
pd.put("ROLE_ID", ROLE_ID);
pd = roleService.findObjectById(pd);
mv.addObject("msg", "edit");
mv.addObject("pd", pd);
mv.setViewName("system/role/role_edit");
} catch(Exception e){
logger.error(e.toString(), e);
}
return mv;
}
/**保存修改
* @return
* @throws Exception
*/
@RequestMapping(value="/edit")
public ModelAndView edit()throws Exception{
if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
logBefore(logger, Jurisdiction.getUsername()+"修改角色");
ModelAndView mv = this.getModelAndView();
// +"<set name='08' value='8' color='588526'/>"
// +"<set name='09' value='9' color='B3AA00'/>"
// +"<set name='10' value='10' color='008ED6'/>"
// +"<set name='11' value='11' color='9D080D'/>"
// +"<set name='12' value='12' color='A186BE'/>"
// +"</graph>" ;
// mv.addObject("strXML", strXML);
mv.addObject("xmlStrList", xmlStrList);
mv.setViewName("salary/salary/salary_chart");
return mv;
}
}
/**
vpd.put("var9", userList.get(i).getString("END_TIME")); //9
vpd.put("var10", userList.get(i).getString("IP")); //10
varList.add(vpd);
}
dataMap.put("varList", varList);
ObjectExcelView erv = new ObjectExcelView();
mv = new ModelAndView(erv,dataMap);
}
} catch(Exception e){
logger.error(e.toString(), e);
}
return mv;
}
@InitBinder
public void initBinder(WebDataBinder binder){
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(format,true));
}
}
* @return
* @throws Exception
*/
@RequestMapping(value="/login_toLogin")
public ModelAndView toLogin()throws Exception{
ModelAndView mv = this.getModelAndView();
PageData pd = new PageData();
pd = this.getPageData();
pd = this.setLoginPd(pd); //设置登录页面的配置参数
mv.setViewName("system/index/login");
mv.addObject("pd",pd);
return mv;
}
/**请求登录,验证用户
* @return
* @throws Exception
*/
@RequestMapping(value="/login_login" ,produces="application/json;charset=UTF-8")
@ResponseBody
public Object login()throws Exception{
Map<String,String> map = new HashMap<String,String>();
PageData pd = new PageData();
pd = this.getPageData();
String errInfo = "";
String KEYDATA[] = pd.getString("KEYDATA").split(",");
if(null != KEYDATA && KEYDATA.length == 3){
Session session = Jurisdiction.getSession();
String sessionCode = (String)session.getAttribute(Const.SESSION_SECURITY_CODE); //获取session中的验证码
String code = KEYDATA[2];
if(null == code || "".equals(code)){//判断效验码
errInfo = "nullcode"; //效验码为空
}else{
String USERNAME = KEYDATA[0]; //登录过来的用户名
String PASSWORD = KEYDATA[1]; //登录过来的密码
pd.put("USERNAME", USERNAME);
if(Tools.notEmpty(sessionCode) && sessionCode.equalsIgnoreCase(code)){ //判断登录验证码
pd.put("PASSWORD", PASSWORD);
pd = userService.getUserByNameAndPwd(pd); //根据用户名和密码去读取用户信息
if(pd != null){
this.removeSession(USERNAME);//请缓存
pd.put("LAST_LOGIN",DateUtil.getTime().toString());
userService.updateLastLogin(pd);
User user = new User();
user.setUSER_ID(pd.getString("USER_ID"));
user.setUSERNAME(pd.getString("USERNAME"));
// +"</graph>" ;
mv.addObject("strXML", strXML);
mv.setViewName("car/car/car_chart");
return mv;
}
}
/**
* 说明:聊天即使通讯接口
* 创建人:F H ad min Q 3 135 96 790
*/