• Java项目:公司企业OA管理系统(java+SSM+JSP+JavaScript+Mysql)


    源码获取:俺的博客首页 "资源" 里下载!

    项目介绍

    OA办公管理系统,这是一款由JSP+SSM(spring+springmvc+mybatis)+MySQL实现的简单的OA办公管理系统,
    主要实现的功能有员工注册登录,自动计算当前月迟到、早退、加班、缺勤天数并根据图表展示,
    任务管理(任务发布、更新、删除、进度条展示完成度),通知管理(通知发布、更新、删除),
    站内信发布、回复、删除等,发布公告和任务及站内信时可上传图片等。

    环境需要

    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项目:否;


    技术栈

    1. 后端:Spring+SpringMVC+Mybatis
    2. 前端:JSP+CSS+JavaScript


    使用说明

    1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
    2. 使用IDEA/Eclipse/MyEclipse导入项目;
    3. 将项目中db.properties配置文件中的数据库配置改为自己的配置;
    4. 运行项目,输入localhost:8080/OAManagerSys 登录 注意:路径必须为/OAManagerSys,否则会有图片加载不出来
    管理员账号/密码:admin/admin
    账号/密码:zhangtao/123

     

     

     

     

     

    邮箱管理控制层: 

    1. @Controller
    2. @RequestMapping("/mail")
    3. @SuppressWarnings("all")
    4. public class MailController {
    5. @Autowired
    6. private MailService mailService;
    7. @Autowired
    8. private EmployeeService employeeService;
    9. @Autowired
    10. private SysService sysService;
    11. // 展示收到的邮件
    12. @RequestMapping("")
    13. public String showMailPage(Model model, HttpSession session, HttpServletRequest request) throws Exception {
    14. List<MailCustom> mailList = new ArrayList<MailCustom>();
    15. switch ((String) request.getParameter("view")) {
    16. case "all":
    17. mailList = mailService.findMailToMe((EmployeeCustom) session.getAttribute("activeEmp"));
    18. model.addAttribute("isSend", false);
    19. break;
    20. case "unread":
    21. mailList = mailService.findUnreadMailToMe((EmployeeCustom) session.getAttribute("activeEmp"));
    22. model.addAttribute("isSend", false);
    23. break;
    24. case "read":
    25. mailList = mailService.findReadMailToMe((EmployeeCustom) session.getAttribute("activeEmp"));
    26. model.addAttribute("isSend", false);
    27. break;
    28. case "send":
    29. mailList = mailService.findMailSendByMe((EmployeeCustom) session.getAttribute("activeEmp"));
    30. model.addAttribute("isSend", true);
    31. break;
    32. default:
    33. mailList = mailService.findMailToMe((EmployeeCustom) session.getAttribute("activeEmp"));
    34. model.addAttribute("isSend", false);
    35. break;
    36. }
    37. model.addAttribute("mailList", mailList);
    38. model.addAttribute("isInbox", true);// mail_common中右上角的的按钮
    39. return "mail/mail_inbox";
    40. }
    41. @RequestMapping("/mail_view")
    42. public String showMailDetail(Model model, HttpServletRequest request) throws Exception {
    43. MailCustom mailDetail = mailService.showMailDetail(Integer.parseInt(request.getParameter("mail_id")),
    44. Integer.parseInt(request.getParameter("otherside_id")));
    45. model.addAttribute("mail", mailDetail);
    46. model.addAttribute("isSend", Boolean.parseBoolean(request.getParameter("isSend")));
    47. return "mail/mail_view";
    48. }
    49. @RequestMapping("/send_mail.action")
    50. public String sendMail(Mail mail, MultipartFile mail_pic) throws Exception {
    51. // 上传图片
    52. // 原始名称
    53. String originalFilename = null;
    54. if (mail_pic != null) {
    55. originalFilename = mail_pic.getOriginalFilename();
    56. }
    57. if (mail_pic != null && originalFilename != null && originalFilename.trim() != "") {
    58. mail.setPic(sysService.uploadPic("mail", mail_pic));
    59. }
    60. // 将新图片名称写入
    61. mail.setText(mail.getText().replaceAll("\r\n", "<br>"));
    62. mailService.sendMail(mail);
    63. return "redirect:/mail?view=all";
    64. }
    65. @RequestMapping("/mail_compose")
    66. public String showComposeForm(Model model, Integer receiver) throws Exception {
    67. if (receiver != null) {
    68. model.addAttribute("receiver", employeeService.findEmployeeById(receiver));
    69. }
    70. return "mail/mail_compose";
    71. }
    72. }

    员工管理控制层:

    1. @Controller
    2. public class EmployeeController {
    3. @Autowired
    4. private EmployeeService employeeService;
    5. @Autowired
    6. private SysService sysService;
    7. @RequestMapping(value = "/changeStage")
    8. public void changeState(Model model, HttpRequest request, HttpSession session, Integer state) throws Exception {
    9. }
    10. @RequestMapping(value = "/search_emp")
    11. public String showSearchPage(Model model, String name, Integer depId, Integer state) throws Exception {
    12. List<EmployeeCustom> employeeList = new ArrayList<EmployeeCustom>();
    13. if ((name != null && name.trim() != "") || depId != null || state != null) {
    14. Employee condition = new Employee();
    15. if (name != null && name.trim() != "") {
    16. condition.setName(name);
    17. model.addAttribute("name", name);
    18. }
    19. if (depId != null) {
    20. condition.setDepartmentId(depId);
    21. model.addAttribute("depId", depId);
    22. }
    23. if (state != null) {
    24. condition.setWorkingState(state);
    25. model.addAttribute("state", state);
    26. }
    27. employeeList = employeeService.findEmployee(condition);
    28. } else {
    29. // show all employee
    30. employeeList = employeeService.findEmployee(new Employee());
    31. }
    32. model.addAttribute("employeeList", employeeList);
    33. model.addAttribute("allDepartment", sysService.getAllDepartment());
    34. return "search/search_emp";
    35. }
    36. }

    登录管理控制层:

    1. @Controller
    2. public class AccountController {
    3. @Autowired
    4. private EmployeeService employeeService;
    5. @Autowired
    6. private SysService sysService;
    7. EmployeeCustom activeEmp;
    8. @RequestMapping("/login")
    9. public String login(Model model, HttpServletRequest request) throws Exception {
    10. String exceptionClassName = (String) request.getAttribute("shiroLoginFailure");
    11. if (exceptionClassName != null) {
    12. if (UnknownAccountException.class.getName().equals(exceptionClassName)) {
    13. // 最终会抛给异常处理器
    14. model.addAttribute("message", "账号不存在");
    15. } else if (IncorrectCredentialsException.class.getName().equals(exceptionClassName)) {
    16. model.addAttribute("message", "用户名/密码错误");
    17. // throw new CustomException("用户名/密码错误");
    18. } else {
    19. model.addAttribute("message", "未知错误");
    20. // throw new Exception();// 最终在异常处理器生成未知错误
    21. }
    22. }
    23. // 访问/login时, 自动进行认证,认证成功后直接跳转出去
    24. // 初次访问时exceptionClassName== null直接到这里
    25. // 认证失败时exceptionClassName!= null , 传递信息后又回到这里
    26. return "misc/login";
    27. }
    28. @RequestMapping(value = "/signup", method = RequestMethod.GET)
    29. public String showSignupPage(Model model) throws Exception {
    30. return "misc/signup";
    31. }
    32. @RequestMapping(value = "/signup", method = RequestMethod.POST)
    33. public String checkUsername(Model model, Employee employee) throws Exception {
    34. try {
    35. employeeService.checkUsername(employee);
    36. model.addAttribute("employee", employee);
    37. model.addAttribute("positionList", sysService.getAbleToRegPos());
    38. return "misc/signup_detail";
    39. } catch (CustomException e) {
    40. model.addAttribute("message", e.getMessage());
    41. }
    42. return "misc/signup";
    43. }
    44. @RequestMapping(value = "/signup2", method = RequestMethod.POST)
    45. public String confirmPosition(Model model, Employee employee, MultipartFile employee_pic) throws Exception {
    46. // 上传图片
    47. String originalFilename = employee_pic.getOriginalFilename();
    48. if (employee_pic != null && originalFilename != null && originalFilename.trim() != "") {
    49. employee.setPic(sysService.uploadPic("employee", employee_pic));
    50. }
    51. model.addAttribute("employee", employee);
    52. model.addAttribute("departmentList", sysService.getAbleToRegDep(employee.getPositionId()));
    53. return "misc/signup_dep";
    54. }
    55. @RequestMapping(value = "/formal_signup", method = RequestMethod.POST)
    56. public String register(Model model, Employee employee) throws Exception {
    57. try {
    58. employeeService.register(employee);
    59. UsernamePasswordToken token = new UsernamePasswordToken(employee.getUsername(), employee.getPassword());
    60. SecurityUtils.getSubject().login(token);
    61. return "redirect:home";
    62. } catch (CustomException e) {
    63. model.addAttribute("message", e.getMessage());
    64. }
    65. // 注册失败
    66. return "misc/signup_detail";
    67. }
    68. @RequestMapping("/logout")
    69. public String logout(HttpSession session) throws Exception {
    70. activeEmp = (EmployeeCustom) session.getAttribute("activeEmp");
    71. employeeService.logout(activeEmp);
    72. session.removeAttribute("activeEmp");
    73. session.invalidate();
    74. return "redirect:/login";
    75. }
    76. @RequestMapping("/refuse")
    77. public String refuse() throws Exception {
    78. return "misc/refuse";
    79. }
    80. }

    源码获取:俺的博客首页 "资源" 里下载!

  • 相关阅读:
    ESDA in PySal (1) 利用 A-DBSCAN 聚类点并探索边界模糊性
    R语言使用lightgbm包构建二分类的LightGBM模型、lgb.plot.importance函数可视化二分类模型特征重要度的排序条形图
    微前端——single-spa源码学习
    Lambda表达式
    PyTorch深度强化学习中蒙特卡洛策略梯度法在短走廊环境(CartPole-v0)中的实战(超详细 附源码)
    线性代数 --- 向量的长度
    vscode git提交
    低代码与医疗的结合
    KITTI 数据集简介
    02 开闭原则
  • 原文地址:https://blog.csdn.net/m0_66863468/article/details/125551450