Java项目:14 SSM的OA办公管理系统

作者主页:源码空间codegym

简介:Java领域优质创作者、Java项目、学习资料、技术互助

文中获取源码

项目介绍

系统描述: OA办公管理系统,这是一款由jsp+ssm(spring+s pringmvc+mybatis)+mysql实现的简单的OA办公管理系统。

主要实现的功能:有员工注册登录,自动计算当前月迟到、早退、加班、缺勤天数并根据图表展示,任务管理 (任务发布、更新、删除、进度条展示完成度),通知管理(通知发布、更新、删除),站内信发布、回复、删除等,发布公告和任务及站内信时可上传图片等。

运行环境:jdk1.8 eclipse tomcat7 mysql5.7

运用技术:jsp+ssm(spring+s pringmvc+mybatis)+mysql

环境要求

1.运行环境:最好是java jdk1.8,我们在这个平台上运行的。其他版本理论上也可以。

2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;

3.tomcat环境:Tomcat7.x,8.X,9.x版本均可

4.硬件环境:windows7/8/10 4G内存以上;或者Mac OS;

5.是否Maven项目:是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven.项目

6.数据库:MySql5.7/8.0等版本均可;

技术栈

后台框架:ssm、MyBatis

数据库:MySQL

环境:JDK8、TOMCAT、IDEA

使用说明

1.使用Navicati或者其它工具,在mysql中创建对应sq文件名称的数据库,并导入项目的sql文件;

2.使用IDEA/Eclipse/MyEclipse导入项目,修改配置,运行项目;

3.将项目中config-propertiesi配置文件中的数据库配置改为自己的配置,然后运行;

运行指导

idea导入源码空间站顶目教程说明(Vindows版)-ssm篇:

http://mtw.so/5MHvZq

源码地址:http://codegym.top。

运行截图

QQ截图20240126110706

界面QQ截图20240126110142

QQ截图20240126110203

QQ截图20240126110222

QQ截图20240126110232

QQ截图20240126110243

QQ截图20240126110254

代码

HomeController

package com.noa.controller;



import java.util.List;

import javax.servlet.http.HttpSession;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.noa.po.Announcement;
import com.noa.po.AnnouncementCustom;
import com.noa.po.EmployeeCustom;
import com.noa.service.AnnouncementService;
import com.noa.service.AttendanceService;
import com.noa.service.EmployeeService;
import com.noa.service.SysService;



@Controller
public class HomeController {
    
    @Autowired
    EmployeeService employeeService;
    
    @Autowired
    AttendanceService attendanceService;
    
    @Autowired
    AnnouncementService announcementService;
    
    @Autowired
    SysService sysService;
    
    EmployeeCustom activeEmp;
    

    @RequestMapping("/home")
    public String showHome(Model model,HttpSession session) throws Exception{

       
       activeEmp = (EmployeeCustom) SecurityUtils.getSubject().getPrincipal();
       session.setAttribute("activeEmp", activeEmp);
       
    
       //展示出勤率,[0]正常 [1]加班 [2]迟到早退 [3]缺席[4]剩余天数
       int[] attendance = attendanceService.countMonthState(activeEmp);
       
       model.addAttribute("attendance",attendance);

       //公告一览
       List<AnnouncementCustom> announceList = announcementService.showAllAnnouncement(activeEmp);
       model.addAttribute("announceList", announceList);
       
       //可发布公告的对象
       model.addAttribute("departmentList", sysService.getAbleToAnnounceDeps());
       
       return "/home/home";
    }
    
    @RequestMapping("/announce.action")
    @RequiresPermissions(value={"announce:create:all","announce:create:main","announce:create:sub"},logical=Logical.OR)
    public String annouce(HttpSession session,String target,Announcement announcement) throws Exception{
       activeEmp = (EmployeeCustom)session.getAttribute("activeEmp");

       announcement.setText(announcement.getText().replaceAll("\r\n", "
"
)); announcementService.announce(announcement, activeEmp); return "redirect:/home"; } @RequestMapping("/delete_announce.action") public String deleteAnnouce(HttpSession session,Integer delete_id) throws Exception{ announcementService.deleteAnnouncement(delete_id); return "redirect:/home"; } }

CustomRealm

package com.noa.shiro;

import java.util.List;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;

import com.noa.po.Employee;
import com.noa.po.EmployeeCustom;
import com.noa.service.EmployeeService;
import com.noa.service.SysService;

public class CustomRealm extends AuthorizingRealm {

    @Autowired
    EmployeeService employeeService;

    @Autowired
    SysService sysService;

    @Override
    public void setName(String name) {
       super.setName("customRealm");
    }

    @Override // 认证, 认证失败返回null,
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

       // 取出身份信息
       String username = (String) token.getPrincipal();
       Employee authenticateInfo = null;
       try {
          authenticateInfo = employeeService.findAccountByUsername(username);
       } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
       }

       // 不存在该username的account时,返回null
       if (authenticateInfo == null) {
          return null;
       }

       EmployeeCustom activeEmp = null;
       try {
          activeEmp = employeeService.findEmployeeById(authenticateInfo.getId());
       } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
       }

       // 存在用户时返回SimpleAuthenticationInfo

       SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(activeEmp,
             authenticateInfo.getPassword(), ByteSource.Util.bytes(authenticateInfo.getSalt()), this.getName());

       // 接下来由authenticator通过 散列算法(xml中设置) 和盐(第三个参数)和输入的password(token中)
       // 与正确的密码匹配(第二个参数)
       return simpleAuthenticationInfo;
    }

    @Override // 授权
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

       EmployeeCustom activeEmp = (EmployeeCustom) principals.getPrimaryPrincipal();
       List<String> permissionList = null;
       try {
          permissionList = sysService.getPermissionByEmpId(activeEmp.getId());
       } catch (Exception e) {
          e.printStackTrace();
       }

       SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
       simpleAuthorizationInfo.addStringPermissions(permissionList);
       
       //计算出勤
       if(simpleAuthorizationInfo != null){
          try {
             employeeService.login(employeeService.findEmployeeById(activeEmp.getId()));
          } catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
          }
       }
       return simpleAuthorizationInfo;
    }

}

你可能感兴趣的:(源码资源,java,开发语言)