SpringBoot+Vue实现前后端分离OA办公管理系统
文末獲取源碼
開發語言:Java
使用框架:spring boot
前端技術:JavaScript、Vue.js 、css3
開發工具:IDEA/MyEclipse/Eclipse、Visual Studio Code
數據庫:MySQL 5.7/8.0
數據庫管理工具:phpstudy/Navicat
JDK版本:Java jdk8
Maven:apache-maven 3.8.1-bin
目錄
一、前言介紹
二、數據庫設計
2.1考勤統計E-R圖
2.2職員OA審批E-R圖
三、管理員功能模塊?
3.1系統登陸頁面
3.2職員用戶添加模塊
3.3職員考勤模塊
3.4職員任務管理模塊
3.5職員OA審批模塊
四、職員用戶模塊?
4.1通知公告模塊
4.2職員考勤模塊
五、部分核心代碼
5.1用戶管理關鍵代碼
5.2考勤信息管理關鍵代碼
5.3登錄關鍵代碼
一、前言介紹
一個企業實現辦公自動化的程度是衡量其實現現代化管理的標準。辦公自動化就是采用Internet技術,基于工作流的概念,使企業內部人員方便快捷地共享信息,高效協同工作。
OA辦公管理系統主要功能模塊包括管理員、職員用戶、管理層用戶、通知公告、職員考勤、管理層考勤、職員任務管理、管理層任務管理、職員OA審批、管理員OA審批、筆記心得等,采取面對對象的開發模式進行軟件的開發和硬體的架設,能很好的滿足實際使用的需求,完善了對應的軟體架設以及程序編碼的工作,采取MySQL作為后臺數據的主要存儲單元,采用SringBoot框架、Java技術、Ajax技術進行業務系統的編碼及其開發,實現了本系統的全部功能。本次報告,首先分析了研究的背景、作用、意義,為研究工作的合理性打下了基礎。針對OA辦公管理系統的各項需求以及技術問題進行分析,證明了系統的必要性和技術可行性,然后對設計系統需要使用的技術軟件以及設計思想做了基本的介紹,最后來實現OA辦公管理系統和部署運行使用它。
二、數據庫設計
數據庫是整個軟件編程中最重要的一個步驟,對于數據庫問題主要是判定數據庫的數量和結構公式的創建。展示系統使用的是Mysql進行對數據庫進行管理,進行保證數據的安全性、穩定性等。
概念模型的設計是為了抽象真實世界的信息,并對信息世界進行建模。它是數據庫設計的強大工具。數據庫概念模型設計可以通過E-R圖描述現實世界的概念模型。系統的E-R圖顯示了系統中實體之間的鏈接。而且Mysql數據庫是自我保護能力比較強的數據庫,下圖主要是對數據庫實體的E-R圖:
2.1考勤統計E-R圖
2.2職員OA審批E-R圖
三、管理員功能模塊?
3.1系統登陸頁面
3.2職員用戶添加模塊
3.3職員考勤模塊
3.4職員任務管理模塊
3.5職員OA審批模塊
四、職員用戶模塊?
4.1通知公告模塊
4.2職員考勤模塊
五、部分核心代碼
5.1用戶管理關鍵代碼
@RequestMapping(value = "/del")@Transactionalpublic Map<String, Object> del(HttpServletRequest request) {service.delete(service.readQuery(request), service.readConfig(request));return success(1);}5.2考勤信息管理關鍵代碼
@PostMapping("/add")@Transactionalpublic Map<String, Object> add(HttpServletRequest request) throws IOException {service.insert(service.readBody(request.getReader()));return success(1);}@Transactionalpublic Map<String, Object> addMap(Map<String,Object> map){service.insert(map);return success(1);}5.3登錄關鍵代碼
/*** 登錄* @param data* @param httpServletRequest* @return*/@PostMapping("login")public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {log.info("[執行登錄接口]");String username = data.get("username");String email = data.get("email");String phone = data.get("phone");String password = data.get("password");List resultList = null;QueryWrapper wrapper = new QueryWrapper<User>();Map<String, String> map = new HashMap<>();if(username != null && "".equals(username) == false){map.put("username", username);resultList = service.selectBaseList(service.select(map, new HashMap<>()));}else if(email != null && "".equals(email) == false){map.put("email", email);resultList = service.selectBaseList(service.select(map, new HashMap<>()));}else if(phone != null && "".equals(phone) == false){map.put("phone", phone);resultList = service.selectBaseList(service.select(map, new HashMap<>()));}else{return error(30000, "賬號或密碼不能為空");}if (resultList == null || password == null) {return error(30000, "賬號或密碼不能為空");}//判斷是否有這個用戶if (resultList.size()<=0){return error(30000,"用戶不存在");}User byUsername = (User) resultList.get(0);Map<String, String> groupMap = new HashMap<>();groupMap.put("name",byUsername.getUserGroup());List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));if (groupList.size()<1){return error(30000,"用戶組不存在");}UserGroup userGroup = (UserGroup) groupList.get(0);//查詢用戶審核狀態if (!StringUtils.isEmpty(userGroup.getSourceTable())){String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());if (res==null){return error(30000,"用戶不存在");}if (!res.equals("已通過")){return error(30000,"該用戶審核未通過");}}//查詢用戶狀態if (byUsername.getState()!=1){return error(30000,"用戶非可用狀態,不能登錄");}String md5password = service.encryption(password);if (byUsername.getPassword().equals(md5password)) {// 存儲Token到數據庫AccessToken accessToken = new AccessToken();accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));accessToken.setUser_id(byUsername.getUserId());tokenService.save(accessToken);// 返回用戶信息JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));user.put("token", accessToken.getToken());JSONObject ret = new JSONObject();ret.put("obj",user);return success(ret);} else {return error(30000, "賬號或密碼不正確");}}public String select(Map<String,String> query,Map<String,String> config){StringBuffer sql = new StringBuffer("select ");sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");}if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");}if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);}log.info("[{}] - 查詢操作,sql: {}",table,sql);return sql.toString();}public List selectBaseList(String select) {List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);List<E> list = new ArrayList<>();for (Map<String,Object> map:mapList) {list.add(JSON.parseObject(JSON.toJSONString(map),eClass));}return list;}總結
以上是生活随笔為你收集整理的SpringBoot+Vue实现前后端分离OA办公管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《变量:大国的腾挪》摘记
- 下一篇: 如何将一个现有的Vue网页项目封装成el