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

报销单处理持久层

实体类

报销单

ClaimVoucher:

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; //创建人@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm")private Date createTime;    //创建时间private String nextDealSn; //待处理人private Double totalAmount; //总金额private String status; //状态//get和setprivate Employee creater;private Employee dealer;//get和set
}

报销单条目

ClaimVoucherItem :

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

处理记录

DealRecord:

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; //处理人@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm")private Date dealTime; //处理时间private String dealWay; //处理类型private String dealResult; //处理结果private String comment; //备注//get和setprivate Employee dealer;//get和set
}

持久化操作接口

报销单接口

ClaimVoucherDao:

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<ClaimVoucher> selectByCreateSn(String csn);List<ClaimVoucher> selectByNextDealSn(String ndsn);
}

报销单条目接口

package com.imooc.oa.dao;import com.imooc.oa.entity.ClaimVoucherItem;
import com.imooc.oa.entity.Department;
import org.springframework.stereotype.Repository;import java.util.List;
@Repository("claimVoucherItemDao")
public interface ClaimVoucherItemDao {void insert(ClaimVoucherItem claimVoucherItem);void update(ClaimVoucherItem claimVoucherItem);void delete(int id);List<ClaimVoucherItem> selectByClaimVoucher(int cvid);
}

处理记录接口

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<DealRecord> selectByClaimVoucher(int cvid);
}

映射文件

报销单映射文件

ClaimVoucherDao.xml:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.imooc.oa.dao.ClaimVoucherDao"><resultMap id="claimVoucher" type="ClaimVoucher"><id property="id" column="id" javaType="int"/><result property="cause" column="cause" javaType="String"/><result property="createSn" column="create_sn" javaType="String"/><result property="createTime" column="create_time" javaType="java.util.Date"/><result property="nextDealSn" column="next_deal_sn" javaType="String"/><result property="totalAmount" column="total_amount" javaType="Double"/><result property="status" column="status" javaType="String"/><association property="creater" column="create_sn" javaType="Employee"><result property="name" column="cname" javaType="String"/><result property="post" column="cpost" javaType="String"/></association><association property="dealer" column="next_deal_sn" javaType="Employee"><result property="name" column="dname" javaType="String"/><result property="post" column="dpost" javaType="String"/></association></resultMap><insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="ClaimVoucher">insert into claim_voucher(cause,create_sn,create_time,next_deal_sn,total_amount,status)values(#{cause},#{createSn},#{createTime},#{nextDealSn},#{totalAmount},#{status})</insert><update id="update" parameterType="ClaimVoucher">update claim_voucher set cause=#{cause},next_deal_sn=#{nextDealSn},total_amount=#{totalAmount},status=#{status} where id=#{id}</update><delete id="delete" parameterType="Integer">delete from claim_voucher where id=#{id}</delete><select id="select" resultMap="claimVoucher" parameterType="Integer">select cv.*,ce.name cname,ce.post cpost,d.name dname,d.post dpostfrom claim_voucher cvleft join employee ce on ce.sn=cv.create_snleft join employee d on d.sn = cv.next_deal_snwhere cv.id=#{id}</select><select id="selectByCreateSn" resultMap="claimVoucher" parameterType="String">select cv.*,ce.name cname,ce.post cpost,d.name dname,d.post dpostfrom claim_voucher cvleft join employee ce on ce.sn=cv.create_snleft join employee d on d.sn = cv.next_deal_snwhere cv.create_sn=#{csn} order by cv.create_time desc</select><select id="selectByNextDealSn" resultMap="claimVoucher" parameterType="String">select cv.*,ce.name cname,ce.post cpost,d.name dname,d.post dpostfrom claim_voucher cvleft join employee ce on ce.sn=cv.create_snleft join employee d on d.sn = cv.next_deal_snwhere cv.next_deal_sn=#{ndsn} order by cv.create_time desc</select>
</mapper>

报销单条目映射文件

ClaimVoucherItemDao.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.imooc.oa.dao.ClaimVoucherItemDao"><resultMap id="claim_voucher_item" type="ClaimVoucherItem"><id property="id" column="id" javaType="Integer"/><result property="claimVoucherId" column="claim_voucher_id" javaType="Integer"/><result property="item" column="item" javaType="String"/><result property="amount" column="amount" javaType="Double"/><result property="comment" column="comment" javaType="String"/></resultMap><insert id="insert" parameterType="ClaimVoucherItem">insert into claim_voucher_item(claim_voucher_id,item,amount,comment)values(#{claimVoucherId},#{item},#{amount},#{comment})</insert><update id="update" parameterType="ClaimVoucherItem">update  claim_voucher_item set claim_voucher_id=#{claimVoucherId},item=#{item},amount=#{amount},comment=#{comment}where id=#{id}</update><delete id="delete" parameterType="Integer">delete from claim_voucher_item where id=#{id}</delete><select id="selectByClaimVoucher" resultMap="claim_voucher_item">select * from claim_voucher_item where claim_voucher_id=#{cvid} order by id;</select>
</mapper>

处理记录映射文件

DealRecordDao.xml:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.imooc.oa.dao.DealRecordDao"><resultMap id="deal_record" type="DealRecord"><id property="id" column="id" javaType="Integer"/><result property="claimVoucherId" column="claim_voucher_id" javaType="Integer"/><result property="dealSn" column="deal_sn" javaType="String"/><result property="dealTime" column="deal_time" javaType="java.util.Date"/><result property="dealWay" column="deal_way" javaType="String"/><result property="dealResult" column="deal_result" javaType="String"/><result property="comment" column="comment" javaType="String"/><association property="dealer" column="next_deal_sn" javaType="Employee"><result property="name" column="ename" javaType="String"/><result property="post" column="epost" javaType="String"/></association></resultMap><insert id="insert" parameterType="DealRecord">insert into deal_record(claim_voucher_id,deal_sn,deal_time,deal_way,deal_result,comment)values(#{claimVoucherId},#{dealSn},#{dealTime},#{dealWay},#{dealResult},#{comment})</insert><select id="selectByClaimVoucher" resultMap="deal_record">select d.*,e.name ename,e.post epost from deal_record dleft join employee e on d.deal_sn = e.snwhere d.claim_voucher_id=#{cvid} order by d.deal_time;</select>
</mapper>

填写报销单

业务处理接口

ClaimVoucherBiz:

package com.imooc.oa.biz;import com.imooc.oa.entity.ClaimVoucher;
import com.imooc.oa.entity.ClaimVoucherItem;
import com.imooc.oa.entity.DealRecord;import java.util.List;public interface ClaimVoucherBiz {void save(ClaimVoucher claimVoucher, List<ClaimVoucherItem> items);ClaimVoucher get(int id);List<ClaimVoucherItem> getItems(int cvid);List<DealRecord> getRecords(int cvid);
}

实现类

ClaimVoucherBizImpl:

package com.imooc.oa.biz.impl;import com.imooc.oa.biz.ClaimVoucherBiz;
import com.imooc.oa.dao.ClaimVoucherDao;
import com.imooc.oa.dao.ClaimVoucherItemDao;
import com.imooc.oa.dao.DealRecordDao;
import com.imooc.oa.entity.ClaimVoucher;
import com.imooc.oa.entity.ClaimVoucherItem;
import com.imooc.oa.entity.DealRecord;
import com.imooc.oa.global.Contant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.Date;
import java.util.List;
@Service("claimVoucherBiz")
public class ClaimVoucherBizImpl implements ClaimVoucherBiz {@Autowiredprivate ClaimVoucherDao claimVoucherDao;@Autowiredprivate ClaimVoucherItemDao claimVoucherItemDao;@Autowiredprivate DealRecordDao dealRecordDao;public void save(ClaimVoucher claimVoucher, List<ClaimVoucherItem> items) {claimVoucher.setCreateTime(new Date());claimVoucher.setNextDealSn(claimVoucher.getCreateSn());claimVoucher.setStatus(Contant.CLAIMVOUCHER_CREATED);claimVoucherDao.insert(claimVoucher);for(ClaimVoucherItem item:items){item.setClaimVoucherId(claimVoucher.getId());claimVoucherItemDao.insert(item);}}public ClaimVoucher get(int id) {return claimVoucherDao.select(id);}public List<ClaimVoucherItem> getItems(int cvid) {return claimVoucherItemDao.selectByClaimVoucher(cvid);}public List<DealRecord> getRecords(int cvid) {return dealRecordDao.selectByClaimVoucher(cvid);}
}

表现层

收集页面信息

dto/ClaimVoucherInfo:

package com.imooc.oa.dto;import com.imooc.oa.entity.ClaimVoucher;
import com.imooc.oa.entity.ClaimVoucherItem;import java.util.List;public class ClaimVoucherInfo {private ClaimVoucher claimVoucher;private List<ClaimVoucherItem> items;//get和set
}

控制器

ClaimVoucherController :

package com.imooc.oa.controller;import com.imooc.oa.biz.ClaimVoucherBiz;
import com.imooc.oa.dto.ClaimVoucherInfo;
import com.imooc.oa.entity.Employee;
import com.imooc.oa.global.Contant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpSession;
import java.util.Map;
@Controller("claimVoucherController")
@RequestMapping("/claim_voucher")
public class ClaimVoucherController {@Autowiredprivate ClaimVoucherBiz claimVoucherBiz;@RequestMapping("/to_add")public String toAdd(Map<String,Object> map){map.put("items", Contant.getItems());map.put("info",new ClaimVoucherInfo());return "claim_voucher_add";}@RequestMapping("/add")public String add(HttpSession session, ClaimVoucherInfo info){Employee employee=(Employee) session.getAttribute("employee");info.getClaimVoucher().setCreateSn(employee.getSn());claimVoucherBiz.save(info.getClaimVoucher(),info.getItems());return "redirect:detail?id="+info.getClaimVoucher().getId();}@RequestMapping("/detail")public String detail(int id,Map<String,Object> map){map.put("claimVoucher",claimVoucherBiz.get(id));map.put("items",claimVoucherBiz.getItems(id));map.put("records",claimVoucherBiz.getRecords(id));return "claim_voucher_detail";}
}

个人报销单、待处理报销单

业务层

在ClaimVoucherBiz中新增如下语句:

     List<ClaimVoucher> getForSelf(String sn);//获取个人报销单List<ClaimVoucher> getForDeal(String sn);//获取待处理报销单

在ClaimVoucherBizImpl中对上述语句进行实现:

 public List<ClaimVoucher> getForSelf(String sn) {return claimVoucherDao.selectByCreateSn(sn);}public List<ClaimVoucher> getForDeal(String sn) {return claimVoucherDao.selectByNextDealSn(sn);}

表现层

控制器

在ClaimVoucherController中添加如下语句来实现向页面传递数据:

 //向页面传递个人报销单数据@RequestMapping("/self")public String self(HttpSession session,Map<String,Object> map){Employee employee=(Employee) session.getAttribute("employee");map.put("list",claimVoucherBiz.getForSelf(employee.getSn()));return "claim_voucher_self";}//向页面传递待处理报销单数据@RequestMapping("/deal")public String deal(HttpSession session,Map<String,Object> map){Employee employee=(Employee) session.getAttribute("employee");map.put("list",claimVoucherBiz.getForDeal(employee.getSn()));return "claim_voucher_deal";}

修改报销单

业务层

在业务处理接口即ClaimVoucherBiz中添加以下语句:

void update(ClaimVoucher claimVoucher, List<ClaimVoucherItem> items);//修改报销单接口

在ClaimVoucherBizImpl中对上述语句进行实现:

public void update(ClaimVoucher claimVoucher, List<ClaimVoucherItem> items) {claimVoucher.setNextDealSn(claimVoucher.getCreateSn());claimVoucher.setStatus(Contant.CLAIMVOUCHER_CREATED);claimVoucherDao.update(claimVoucher);//删除不需要的条目List<ClaimVoucherItem> olds=claimVoucherItemDao.selectByClaimVoucher(claimVoucher.getId());for (ClaimVoucherItem old:olds){boolean isHave=false;for(ClaimVoucherItem item:items){if(item.getId()==old.getId()){isHave=true;break;}}if (!isHave){claimVoucherItemDao.delete(old.getId());}}//修改已有的条目以及添加没有的条目for(ClaimVoucherItem item:items){item.setClaimVoucherId(claimVoucher.getId());if(item.getId()!=null&&item.getId()>0){claimVoucherItemDao.update(item);}else{claimVoucherItemDao.insert(item);}}}

表现层

控制器

在ClaimVoucherController中添加如下语句

 @RequestMapping("/to_update")public String toUpdate(int id,Map<String,Object> map){map.put("items", Contant.getItems());ClaimVoucherInfo info=new ClaimVoucherInfo();info.setClaimVoucher(claimVoucherBiz.get(id));info.setItems(claimVoucherBiz.getItems(id));map.put("info",info);return "claim_voucher_update";}@RequestMapping("/update")public String update(HttpSession session, ClaimVoucherInfo info){Employee employee=(Employee) session.getAttribute("employee");info.getClaimVoucher().setCreateSn(employee.getSn());claimVoucherBiz.update(info.getClaimVoucher(),info.getItems());return "redirect:deal";}

提交报销单

持久层

在EmployeeDao中添加如下方法:

//根据部门编号和职位获取一个或多个员工
List<Employee> selectByDepartmentAndPost(@Param("dsn") String dsn,@Param("post") String post);

在映射文件EmployeeDao.xml中对上述功能进行实现:

 <select id="selectByDepartmentAndPost" resultMap="employee">select e.*,d.sn dsn,d.name dname from employee e left join department d on d.sn=e.department_snwhere e.sn is not null<if test="dsn!=null">and e.department_sn=#{dsn}</if><if test="post!=null">and e.post=#{post}</if></select>

业务层

在ClaimVoucherBiz中定义提交操作接口:

 void submit(int id);

在ClaimVoucherBizImpl中对上述接口进行实现:

 public void submit(int id) {ClaimVoucher claimVoucher=claimVoucherDao.select(id);Employee employee=employeeDao.select(claimVoucher.getCreateSn());claimVoucher.setStatus(Contant.CLAIMVOUCHER_SUBMIT);claimVoucher.setNextDealSn(employeeDao.selectByDepartmentAndPost(employee.getDepartmentSn(),Contant.POST_FM).get(0).getSn());claimVoucherDao.update(claimVoucher);DealRecord dealRecord=new DealRecord();dealRecord.setDealWay(Contant.DEAL_SUBMIT);dealRecord.setDealSn(employee.getSn());dealRecord.setClaimVoucherId(id);dealRecord.setDealResult(Contant.CLAIMVOUCHER_SUBMIT);dealRecord.setDealTime(new Date());dealRecord.setComment("无");dealRecordDao.insert(dealRecord);}

表现层

控制器

ClaimVoucherController:

 @RequestMapping("/submit")public String submit(int id,Map<String,Object> map){claimVoucherBiz.submit(id);return "redirect:deal";}

审核报销单、打款

业务层

在ClaimVoucherBiz中声明如下方法:

 void deal(DealRecord dealRecord);

在ClaimVoucherBizImpl中对上述声明的方法进行实现

 public void deal(DealRecord dealRecord) {ClaimVoucher claimVoucher=claimVoucherDao.select(dealRecord.getClaimVoucherId());Employee employee=employeeDao.select(dealRecord.getDealSn());dealRecord.setDealTime(new Date());if(dealRecord.getDealWay().equals(Contant.DEAL_PASS)){if(claimVoucher.getTotalAmount()<=Contant.LIMIT_CHECK || employee.getPost().equals(Contant.POST_GM)){claimVoucher.setStatus(Contant.CLAIMVOUCHER_APPROVED);claimVoucher.setNextDealSn(employeeDao.selectByDepartmentAndPost(null,Contant.POST_CASHIER).get(0).getSn());dealRecord.setDealResult(Contant.CLAIMVOUCHER_APPROVED);}else{claimVoucher.setStatus(Contant.CLAIMVOUCHER_RECHECK);claimVoucher.setNextDealSn(employeeDao.selectByDepartmentAndPost(null,Contant.POST_GM).get(0).getSn());dealRecord.setDealResult(Contant.CLAIMVOUCHER_RECHECK);}}else if(dealRecord.getDealWay().equals(Contant.DEAL_BACK)){claimVoucher.setStatus(Contant.CLAIMVOUCHER_BACK);claimVoucher.setNextDealSn(claimVoucher.getCreateSn());dealRecord.setDealResult(Contant.CLAIMVOUCHER_BACK);}else if(dealRecord.getDealWay().equals(Contant.DEAL_REJECT)){claimVoucher.setStatus(Contant.CLAIMVOUCHER_TERMINATED);claimVoucher.setNextDealSn(null);dealRecord.setDealResult(Contant.CLAIMVOUCHER_TERMINATED);}else if(dealRecord.getDealWay().equals(Contant.DEAL_PAID)){claimVoucher.setStatus(Contant.CLAIMVOUCHER_PAID);claimVoucher.setNextDealSn(null);dealRecord.setDealResult(Contant.CLAIMVOUCHER_PAID);}claimVoucherDao.update(claimVoucher);dealRecordDao.insert(dealRecord);}

表现层

控制器

在ClaimVoucherController中添加:

 @RequestMapping("/to_check")public String toCheck(int id,Map<String,Object> map){map.put("claimVoucher",claimVoucherBiz.get(id));map.put("items",claimVoucherBiz.getItems(id));map.put("records",claimVoucherBiz.getRecords(id));DealRecord dealRecord=new DealRecord();dealRecord.setClaimVoucherId(id);map.put("record",dealRecord);return "claim_voucher_check";}@RequestMapping("/check")public String check(HttpSession session, DealRecord dealRecord){Employee employee = (Employee)session.getAttribute("employee");dealRecord.setDealSn(employee.getSn());claimVoucherBiz.deal(dealRecord);return "redirect:deal";}

SSM整合开发办公系统核心模块五(报销单处理)相关推荐

  1. 手把手教你SSM整合开发办公系统(OA)——报销单(含源码)

    文章目录 前言 项目展示 技能要求 一.开始前的准备 1.OA系统是什么? 2.人员权利与报销流程 3.数据库设计 4.创建项目及作用说明 5.包与全局变量配置 6.编写过滤器 7.静态资源的复制与请 ...

  2. 阿里开发规范文档_华为阿里等技术专家15年开发经验总结:SSM整合开发实战文档...

    前言 Spring自2002年诞生至今,已有近20年的历史,虽然几经变迁,但始终在继续发展和精进.Spring目前由Pivotal维护和开发. Pivotal是PaaS(平台即服务)的领导者,也是消息 ...

  3. SSM整合的配置+功能模块+测试

    SSM整合的配置+功能模块+测试 一. 配置准备 1.1 module结构 1.2 pom.xml 1.3 resources 1.3.1 jdbc.properties: 1.4 config 1. ...

  4. OA办公自动化系统~~~SSM整合开发

    简介:    OA( Office Automation System)办公自动化系统是一个企业用来管理日常事务的系统,它一般用来管理各种流程(报销.请假. . .)审批,通讯录.日程.文件管理.通知 ...

  5. SSM整合开发学习笔记

    1. 整合配置 1.1 配置项目依赖 <?xml version="1.0" encoding="UTF-8"?><project xmlns ...

  6. SSM 整合开发初见面

    SpringMVC是Spring其中的一个模块,我们直接使用即可: SSM的整合:将Mybatis 和 Spring进行整合: >类的根路径:classpath,也就是classes文件夹 sr ...

  7. ssm整合开发配置文件

    配置的具体解释可以参考米米商城项目实战 ssm框架部分 pom.xml <?xml version="1.0" encoding="UTF-8"?> ...

  8. ssm整合开发 动力节点王鹤版本

    目录 介绍 整合 1. pom.xml 2. web.xml 3. 新建包.目录.文件 4. applicationContext.xml 5. dispatcherServlet.xml 6. jd ...

  9. 简单的SSM整合项目。

    文章目录 前言 1.SSM的定义 2. SSM整合开发的流程 3.SSM整合需要用到的容器 4. SSM整合的实现步骤 1.准备好本次项目所需要使用的数据库表 2.新建maven web项目 3.加入 ...

最新文章

  1. Android Fragment 调用宿主Activity 里面的方法
  2. QIIME 2教程. 09数据导入Importing data(2020.11)
  3. 列举数据挖掘领域的十大挑战问题
  4. 易语言 企鹅机器人开发文档
  5. chapter13 机器学习之利用PCA简化数据
  6. Linux uniq命令
  7. 动态规划---背包问题分析
  8. LeetCode 385. 迷你语法分析器(栈)
  9. form表单提交,后台实体类接收转义问题 解决方案
  10. linux程序改ip地址吗,如何在Linux中从C设置IP地址
  11. NYOJ-区域赛系列一多边形划分(贪心)
  12. c语言伪常量const理解
  13. [游戏] - 游戏教程
  14. poj 1466 Girls and Boys
  15. js、jQuery实现自定义弹出框效果
  16. mt3dgis 视频教程
  17. 如何在 Bios 中更改硬盘模式?
  18. 643 · 最长绝对文件路径
  19. Debian10.12安装oracle11g(亲测有效)
  20. 解决开启VMware虚拟机后宿主机出现插U盘没反应的问题

热门文章

  1. 只做macd二次金叉_macd二次金叉的定义
  2. YC1040载货汽车底盘总体及制动器设计
  3. Master指令,Control指令,Register指令,PreviousPageType指令,MasterType指令
  4. 深入浅出计算机组成原理20-面向流水线的指令设计(上):一心多用的现代CPU
  5. 在两个数字之间求出其间所有质数
  6. 关于华为NQA track 联动配置
  7. js延迟window.open window.location几秒之后跳转
  8. html网页的无缝拼接,2、图形化的网页-)图形的无缝拼接
  9. Linux中/dev/ram是什么?
  10. 离散数学实验报告 实验3 欧拉路的确定