栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SSM整合模块-开发办公系统核心模块

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSM整合模块-开发办公系统核心模块

开发办公系统核心模块
  • 1、项目介绍
    • 1.1网页图片
  • 2. 数据库设计
  • 3、创建项目
      • 3.0.0 项目条目图片
      • 3.0.1 oa_dao持久层依赖
      • 3.0.1 oa_biz业务层依赖
      • 3.0.1 oa_web表现层依赖
    • 3.1包及全局配置
      • 3.1.1 oa_dao全局配置文件spring-dao.xml
      • 3.1.2 oa_biz全局配置文件spring-biz.xml
      • 3.1.3.oa_web全局配置文件spring-web.xml及启动加载文件web.xml
    • 3.2工具类
      • 3.2.1 编码过滤器
      • 3.2.1 常量类
  • 4、功能实现
    • 4.1 部门实现
      • 4.1.1 实体类
      • 4.1.2 dao接口及sql映射文件
      • 4.1.3 biz接口与实现类
      • 4.1.4 控制器
      • 4.1.5 页面
    • 4.2 员工管理
      • 4.2.1 实体类
      • 4.2.2 dao接口及sql映射文件
      • 4.2.3 biz接口与实现类
      • 4.2.4 控制器
      • 4.2.5 页面
    • 4.3 登录及个人中心
      • 4.3.1 biz接口与实现类
      • 4.3.2 控制器
      • 4.3.5 登录拦截器
      • 4.3.6 页面
    • 4.4 报销单处理
      • 4.4.1实体类
      • 4.4.2Dao和映射文件
      • 4.4.3biz和实现类
      • 4.4.4填写报销单
      • 4.4.5个人报销单、待处理报销单
      • 4.4.6修改报销单
      • 4.4.7提交报销单
      • 4.4.8审核报销单
      • 4.4.9打款
      • 4.4.10 页面
    • 4.5 top.jsp
    • 4.6 bottom.jsp

1、项目介绍

前置条件:

  • Mybatis、Spring、Spring MVC
  • Mysql

主要技术:

  • Spring IOC
  • Mybatis+Spring整合
  • 声明式事务
  • Spring标签库
  • Spring拦截器

开发环境:

  • 操作系统:win10
  • 数据库:Mysql-8.0
  • web容器:Tomcat-8.5.69
  • 开发工具 :Intellij IDEA-2021.2.2

相关资料

  • Spring -5.3.8
  • MyBatis-3.4.4
  • mybatis-spring:2.0.4
  • mysql-connector-java-8.0.24
  • 文档
    • 配置文件模板
    • 页面原型

项目结构

  • 三层架构
    • 持久层–Mybatis
    • 表现层–Servlet+Jsp
    • Spring–管理对象、切面处理
  • 基于MVC模式
    • 视图–Jsp
    • 模型–JavaBean
    • 控制器–Spring Controller

用例分析:

报销单处理流程:

1.1网页图片

2. 数据库设计

drop database if exists oa;

create database oa;
use oa;




create table claim_voucher
(
   id                   int not null auto_increment,
   cause                varchar(100),
   create_sn            char(5),
   create_time          datetime,
   next_deal_sn         char(5),
   total_amount         double,
   status               varchar(20),
   primary key (id)
);




create table claim_voucher_item
(
   id                   int not null auto_increment,
   claim_voucher_id     int,
   item                 varchar(20),
   amount               double,
   comment              varchar(100),
   primary key (id)
);




create table deal_record
(
   id                   int not null auto_increment,
   claim_voucher_id     int,
   deal_sn              char(5),
   deal_time            datetime,
   deal_way             varchar(20),
   deal_result          varchar(20),
   comment              varchar(100),
   primary key (id)
);




create table department
(
   sn                   char(5) not null,
   name                 varchar(20),
   address              varchar(100),
   primary key (sn)
);




create table employee
(
   sn                   char(5) not null,
   password             varchar(20),
   name                 varchar(20),
   department_sn        char(5),
   post                 varchar(20),
   primary key (sn)
);

alter table claim_voucher add constraint FK_Reference_2 foreign key (next_deal_sn)
      references employee (sn) on delete restrict on update restrict;

alter table claim_voucher add constraint FK_Reference_3 foreign key (create_sn)
      references employee (sn) on delete restrict on update restrict;

alter table claim_voucher_item add constraint FK_Reference_4 foreign key (claim_voucher_id)
      references claim_voucher (id) on delete restrict on update restrict;

alter table deal_record add constraint FK_Reference_5 foreign key (claim_voucher_id)
      references claim_voucher (id) on delete restrict on update restrict;

alter table deal_record add constraint FK_Reference_6 foreign key (deal_sn)
      references employee (sn) on delete restrict on update restrict;

alter table employee add constraint FK_Reference_1 foreign key (department_sn)
      references department (sn) on delete restrict on update restrict;

insert into department values('10001','总经理办公室','星星大厦E座1201');
insert into department values('10002','财务部','星星大厦E座1202');
insert into department values('10003','事业部','星星大厦E座1101');

insert into employee values('10001','000000','刘备','10001','总经理');
insert into employee values('10002','000000','孙尚香','10002','财务');
insert into employee values('10003','000000','关羽','10003','部门经理');
insert into employee values('10004','000000','周仓','10003','员工');

3、创建项目
  • oa
    • 父moudle
    • 全局定义与组织
  • oa_dao
    • 持久层
    • Mybatis依赖、Spring依赖、Mybatis-Spring整合
  • oa_biz
    • 业务层
    • Aspectj依赖、AOP依赖
  • oa_web
    • 表现层
    • Servlet依赖、Spring MVC依赖
3.0.0 项目条目图片

哈哈哈哈哈就大概大概的把

3.0.1 oa_dao持久层依赖

pom.xml(oa_dao)



    
        oa
        com.imooc
        1.0-SNAPSHOT
    
    4.0.0

    oa_dao
    
        
            mysql
            mysql-connector-java
            8.0.24
        
        
            org.mybatis
            mybatis
            3.4.4
        
        
            org.springframework
            spring-beans
            ${spring.version}
        
        
            org.springframework
            spring-context
            ${spring.version}
        
        
            org.springframework
            spring-jdbc
            ${spring.version}
        
        
            org.mybatis
            mybatis-spring
            2.0.4
        
    

    
        8
        8
    


3.0.1 oa_biz业务层依赖

pom.xml(oa_biz)



    
        oa
        com.imooc
        1.0-SNAPSHOT
    
    4.0.0

    oa_biz
    
        
            com.imooc
            oa_dao
            1.0-SNAPSHOT
        

        
        
            org.springframework
            spring-tx
            ${spring.version}
        
        
            org.springframework
            spring-aop
            ${spring.version}
        

        
            org.aspectj
            aspectjweaver
            1.9.0
        
    

    
        8
        8
    


3.0.1 oa_web表现层依赖

pom.xml(oa_web)




  4.0.0

  com.imooc
  oa_web
  1.0-SNAPSHOT
  war

  oa_web Maven Webapp
  
  http://www.example.com

  
    UTF-8
    1.7
    1.7
  

  
    
      junit
      junit
      4.11
      test
    
    
      com.imooc
      oa_biz
      1.0-SNAPSHOT
    
    
      javax.servlet
      javax.servlet-api
      4.0.0
    
    
      jstl
      jstl
      1.2
    
    
      org.springframework
      spring-web
      5.3.8
    
    
      org.springframework
      spring-webmvc
      5.3.8
    
  

  
    oa_web
    
      
        
          maven-clean-plugin
          3.1.0
        
        
        
          maven-resources-plugin
          3.0.2
        
        
          maven-compiler-plugin
          3.8.0
        
        
          maven-surefire-plugin
          2.22.1
        
        
          maven-war-plugin
          3.2.2
        
        
          maven-install-plugin
          2.5.2
        
        
          maven-deploy-plugin
          2.8.2
        
      
    
  


3.1包及全局配置
  • oa_dao
    • dao、entity、global
    • 配置数据源、Session工厂、映射器接口
  • oa_biz
    • biz
    • 配置事务(持久化的操作太细,表现层的请求太粗,所有把业务层的方法封装成事务最合适)
  • oa_web
    • controller、dto、global
    • 静态资源处理、视图转换器
    • Spring MVC加载

dto层:
通常是用来做数据传输的,当实体类无法满足数据传输的要求时,通常会扩展一个类来进行数据的传输。这里页面可以传入报销单和报销单条目,于是创建一个类既包含报销单,也包含报销单条目

3.1.1 oa_dao全局配置文件spring-dao.xml
  • dao、entity、global
  • 配置数据源、Session工厂、映射器接口
    spring-dao.xml


    
    
    
    
        
        
        
        
    

    
    
        
        
        
    

    
    
        
        
    

    

3.1.2 oa_biz全局配置文件spring-biz.xml
  • biz
  • 事务

Spring-biz.xml



    
    
    
    
    

    
    
    
        
    

    
    
        
            
            
            
            
        
    

    
    
        
        
    


3.1.3.oa_web全局配置文件spring-web.xml及启动加载文件web.xml
  • controller、dto、global
  • 静态资源处理、视图转换器
  • Spring MVC加载(复制web.xml模板到WEB-INF)
    spring-web.xml


    
    
	
    

    
    

    
    
        
        
        
        
    

	
    
        
             map){
        map.put("list",departmentBiz.getAll());//把所有部门信息存储到list里
        return "department_list";//转发到department_list.jsp页面去;在spring-web.xml里配置过前缀后缀
    }
    //增
    @RequestMapping("/to_add")
    public String toAdd(Map map){
        map.put("department",new Department());
        return "department_add";//转发到department_add.jsp页面去;在spring-web.xml里配置过前缀后缀
    }

    @RequestMapping("/add")
    public String add(Department department){
        departmentBiz.add(department);
        return "redirect:list";//不能直接转到jsp页面,因为信息还没更新,得转到list的路径下
    }

    //删
    @RequestMapping(value = "/remove",params = "sn")
    public String remove(String sn){
        departmentBiz.remove(sn);
        return "redirect:list";//不能直接转到jsp页面,因为信息还没更新,得转到list的路径下
    }

    //改
    @RequestMapping(value = "/to_update",params = "sn")
    public String toUpdate(String sn,Map map){
        map.put("department",departmentBiz.get(sn));
        return "department_update";//转发到department_add.jsp页面去;在spring-web.xml里配置过前缀后缀
    }
    @RequestMapping("/update")
    public String update(Department department){
        departmentBiz.edit(department);
        return "redirect:list";//不能直接转到jsp页面,因为信息还没更新,得转到list的路径下
    }
}

4.2.5 页面

department_list.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>



部门列表

操作
${dept.sn} ${dept.name} ${dept.address} 编辑 删除

department_add.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>



添加部门

<%--不使用form表单,这里使用spring mvc里的form表单--%> <%--
--%> <%--modelAttribute="department"这里的department这个名字要和控制器里的toAdd那里设置的map里的名称一样--%>
基本信息

department_update.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>



编辑部门

<%--不使用form表单,这里使用spring mvc里的form表单--%> <%----%> <%--modelAttribute="department"这里的department这个名字要和控制器里的toAdd那里设置的map里的名称一样--%>
基本信息
4.3 登录及个人中心
  • 登录、退出、个人信息、修改密码
  • 关注点:Session操作、登录拦截器(以前是使用登录过滤器的方式,但是这里spring提供了一个登录拦截器的工具)

实体类:Employee
dao接口及sql映射文件也是在前面已经写过的了

4.3.1 biz接口与实现类
package com.imooc.oa.biz;

import com.imooc.oa.entity.Employee;

public interface GlobalBiz {
    Employee login(String sn,String password);
    void changePassword(Employee employee);
}
package com.imooc.oa.biz.impl;

import com.imooc.oa.biz.GlobalBiz;
import com.imooc.oa.dao.EmployeeDao;
import com.imooc.oa.entity.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service("globalBiz")
public class GlobalBizImpl implements GlobalBiz {
    @Resource(name = "employeeDao")
    private EmployeeDao employeeDao;

    public Employee login(String sn, String password) {
        Employee employee = employeeDao.select(sn);
        if(employee!=null&&employee.getPassword().equals(password)){
            return  employee;
        }
        return null;
    }

    public void changePassword(Employee employee) {
        employeeDao.update(employee);
    }
}


4.3.2 控制器
package com.imooc.oa.controller;

import com.imooc.oa.biz.GlobalBiz;
import com.imooc.oa.entity.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;
@Controller("globalController")
public class GlobalController {
    @Autowired
    private GlobalBiz globalBiz;

    @RequestMapping("/to_login")
    public String toLogin(){
        return "login";
    }

    @RequestMapping("/login")
    public String login(HttpSession session, @RequestParam String sn, @RequestParam String password){
        Employee employee = globalBiz.login(sn,password);
        if (employee == null) {
            return "redirect:to_login";
        }
        session.setAttribute("employee",employee);
        return "redirect:self";
    }
    @RequestMapping("/self")
    public String self(){
        return  "self";//个人信息的jsp页面
    }

    @RequestMapping("/quit")
    public String quit(HttpSession session){
        session.setAttribute("employee",null);
        return "redirect:to_login";
    }

    @RequestMapping("/to_change_password")
    public String toChangePassword(){
        return "change_password";
    }

    @RequestMapping("/change_password")
    public String changePassword(HttpSession session, @RequestParam String old, @RequestParam String new1 ,@RequestParam String new2){
        Employee employee = (Employee)session.getAttribute("employee");
        if(employee.getPassword().equals(old)){
            if(new1.equals(new2)){
                employee.setPassword(new1);
                globalBiz.changePassword(employee);
                return "redirect:self";
            }
        }
        return "redirect:to_change_password";
    }

}

4.3.5 登录拦截器

这个是Spring提供的,在oa_web包里的global里新建一个类,写完之后要到sping.xml里配置才能生效的。

package com.imooc.oa.global;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//登录拦截器,如果你没有登录就拦截你,所有方法写在登录前;写完之后要到sping.xml里配置才能生效的
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //有些路径是可以不用登录不拦截的
        String url=request.getRequestURI();
        if(url.toLowerCase().indexOf("login")>=0){
            return true;//去登录的url不拦截,直接放行,toLowerCase()是把字母全部转换成小写
        }
        HttpSession session=request.getSession();
        if(session.getAttribute("employee")!=null){
            return true;//session不为空,证明已经登录过了
        }
        response.sendRedirect("/to_login");
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

配置的信息在前面已经展示过了

4.3.6 页面

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>



    
    欢迎使用办公报销OA
    
    
    
    
    
    
    


报销OA

欢迎使用报销自动化管理系统

change_password.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>



修改密码

基本信息
4.4 报销单处理

填写报销单、个人报销单、待处理报销单
修改报销单、提交报销单、审核报销单
打款

4.4.1实体类
package com.imooc.oa.entity;

import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

//报销单
public class ClaimVoucher {
    private Integer id;
    private String cause;
    private String createSn;//创建人:关联employee对象
    @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm")
    private Date createTime;//创建时间

    private String nextDealSn;//待处理人:关联employee对象
    private Double totalAmount;//总金额
    private String status;//状态

    private Employee creator;
    private Employee dealer;
}

package com.imooc.oa.entity;
//报销单条目
public class ClaimVoucherItem {
    private Integer id;
    private Integer claimVoucherId;
    private String item;//费用类型
    private Double amount;//金额
    private String comment;//描述
}

package com.imooc.oa.entity;

import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

//处理记录
public class DealRecord {
    private Integer id;
    private Integer claimVoucherId;
    private String dealSn;//处理人:关联employee
    @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm")
    private Date dealTime;//处理时间
    private String dealWay;//处理类型
    private String dealResult;//处理结果
    private String comment;//备注

    private Employee dealer;
}

4.4.2Dao和映射文件
package com.imooc.oa.dao;

import com.imooc.oa.entity.ClaimVoucher;
import com.imooc.oa.entity.Employee;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
//报销单接口
@Repository("claimVoucherDao")
public interface ClaimVoucherDao {

    void insert(ClaimVoucher claimVoucher);
    void update(ClaimVoucher claimVoucher);
    void delete(int id);
    ClaimVoucher select(int id);
    List selectByCreateSn(String csn);//查询这个人创建的报销单
    List selectByNextDealSn(String ndsn);//查询这个人需要处理的报销单
}





    
        
        
        
        
        
        
        
        
            
            
        
        
            
            
        
    

    
        insert into claim_voucher(cause,create_sn,create_time,next_deal_sn,total_amount,status)
        values(#{cause},#{createSn},#{createTime},#{nextDealSn},#{totalAmount},#{status})
    
    
        update claim_voucher set cause=#{cause},next_deal_sn=#{nextDealSn},total_amount=#{totalAmount},status=#{status} where id=#{id}
    
    
        delete from claim_voucher where id=#{id}
    
    
        select cv.*,ce.name cname,ce.post cpost,d.name dname,d.post dpost
        from claim_voucher cv
                 left join employee ce on ce.sn=cv.create_sn
                 left join employee d on d.sn = cv.next_deal_sn
        where cv.create_sn=#{csn} order by cv.create_time desc
    
    
        select * from claim_voucher_item where claim_voucher_id=#{cvid} order by id;
    

package com.imooc.oa.dao;

import com.imooc.oa.entity.DealRecord;
import com.imooc.oa.entity.Department;
import org.springframework.stereotype.Repository;

import java.util.List;
@Repository("dealRecordDao")
public interface DealRecordDao {
    void insert(DealRecord dealRecord);
    List selectByClaimVoucher(int cvid);
}




    
        
        
        
        
        
        
        
        
            
            
        
    

    
        insert into deal_record(claim_voucher_id,deal_sn,deal_time,deal_way,deal_result,comment)
        values(#{claimVoucherId},#{dealSn},#{dealTime},#{dealWay},#{dealResult},#{comment})
    
    
                                        
                                    
                                
                                ${cv.cause}
                                
                                     ${cv.status}
                                
                                ${cv.creator.name}
                                ${cv.totalAmount}
                                
                                
                                    
                                        修改
                                        提交
                                    
                                    
                                        审核
                                    
                                    
                                        打款
                                    
                                    详细信息
                                
                            

                        

                        
                    
                

claim_voucher_detail.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>


报销单详情

基本信息
事由
${claimVoucher.cause}
创建人
${claimVoucher.creator.name}
创建时间
待处理人
${claimVoucher.dealer.name}
状态
${claimVoucher.status}
费用明细
${item.item}
${item.amount}
${item.comment}
总金额
${claimVoucher.totalAmount}
处理流程
${record.dealer.name}
${record.dealWay}
${record.dealResult}
备注:${record.comment}

claim_voucher_self.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>



个人报销单

状态 创建时间 操作
${cv.cause} ${cv.creator.name} ${cv.totalAmount} 详细信息

claim_voucher_check.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page import="com.imooc.oa.global.Constant" %>


报销单详情

基本信息
事由
${claimVoucher.cause}
创建人
${claimVoucher.creator.name}
创建时间
待处理人
${claimVoucher.dealer.name}
状态
${claimVoucher.status}
费用明细
${item.item}
${item.amount}
${item.comment}
总金额
${claimVoucher.totalAmount}
处理流程
${record.dealer.name}
${record.dealWay}
${record.dealResult}
备注:${record.comment}

claim_voucher_update.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


修改报销单

基本信息
费用明细
4.5 top.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>






    
    

     爱慕课OA--欢迎使用爱慕课OA系统 

    
    
    



4.6 bottom.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>



















转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462312.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号