SSM整合开发办公系统核心模块五(报销单处理)
- 填写报销单
- 个人报销单、待处理报销单
- 修改报销单
- 提交报销单
- 审核报销单
- 打款
报销单处理持久层
实体类
报销单
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
}
报销单条目
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
}
处理记录
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
}
持久化操作接口
报销单接口
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);}
}
表现层
收集页面信息
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
}
控制器
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";}
}
个人报销单、待处理报销单
业务层
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);}
表现层
控制器
@RequestMapping("/submit")public String submit(int id,Map<String,Object> map){claimVoucherBiz.submit(id);return "redirect:deal";}
审核报销单、打款
业务层
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整合开发办公系统核心模块五(报销单处理)相关推荐
- 手把手教你SSM整合开发办公系统(OA)——报销单(含源码)
文章目录 前言 项目展示 技能要求 一.开始前的准备 1.OA系统是什么? 2.人员权利与报销流程 3.数据库设计 4.创建项目及作用说明 5.包与全局变量配置 6.编写过滤器 7.静态资源的复制与请 ...
- 阿里开发规范文档_华为阿里等技术专家15年开发经验总结:SSM整合开发实战文档...
前言 Spring自2002年诞生至今,已有近20年的历史,虽然几经变迁,但始终在继续发展和精进.Spring目前由Pivotal维护和开发. Pivotal是PaaS(平台即服务)的领导者,也是消息 ...
- SSM整合的配置+功能模块+测试
SSM整合的配置+功能模块+测试 一. 配置准备 1.1 module结构 1.2 pom.xml 1.3 resources 1.3.1 jdbc.properties: 1.4 config 1. ...
- OA办公自动化系统~~~SSM整合开发
简介: OA( Office Automation System)办公自动化系统是一个企业用来管理日常事务的系统,它一般用来管理各种流程(报销.请假. . .)审批,通讯录.日程.文件管理.通知 ...
- SSM整合开发学习笔记
1. 整合配置 1.1 配置项目依赖 <?xml version="1.0" encoding="UTF-8"?><project xmlns ...
- SSM 整合开发初见面
SpringMVC是Spring其中的一个模块,我们直接使用即可: SSM的整合:将Mybatis 和 Spring进行整合: >类的根路径:classpath,也就是classes文件夹 sr ...
- ssm整合开发配置文件
配置的具体解释可以参考米米商城项目实战 ssm框架部分 pom.xml <?xml version="1.0" encoding="UTF-8"?> ...
- ssm整合开发 动力节点王鹤版本
目录 介绍 整合 1. pom.xml 2. web.xml 3. 新建包.目录.文件 4. applicationContext.xml 5. dispatcherServlet.xml 6. jd ...
- 简单的SSM整合项目。
文章目录 前言 1.SSM的定义 2. SSM整合开发的流程 3.SSM整合需要用到的容器 4. SSM整合的实现步骤 1.准备好本次项目所需要使用的数据库表 2.新建maven web项目 3.加入 ...
最新文章
- Android Fragment 调用宿主Activity 里面的方法
- QIIME 2教程. 09数据导入Importing data(2020.11)
- 列举数据挖掘领域的十大挑战问题
- 易语言 企鹅机器人开发文档
- chapter13 机器学习之利用PCA简化数据
- Linux uniq命令
- 动态规划---背包问题分析
- LeetCode 385. 迷你语法分析器(栈)
- form表单提交,后台实体类接收转义问题 解决方案
- linux程序改ip地址吗,如何在Linux中从C设置IP地址
- NYOJ-区域赛系列一多边形划分(贪心)
- c语言伪常量const理解
- [游戏] - 游戏教程
- poj 1466 Girls and Boys
- js、jQuery实现自定义弹出框效果
- mt3dgis 视频教程
- 如何在 Bios 中更改硬盘模式?
- 643 · 最长绝对文件路径
- Debian10.12安装oracle11g(亲测有效)
- 解决开启VMware虚拟机后宿主机出现插U盘没反应的问题
热门文章
- 只做macd二次金叉_macd二次金叉的定义
- YC1040载货汽车底盘总体及制动器设计
- Master指令,Control指令,Register指令,PreviousPageType指令,MasterType指令
- 深入浅出计算机组成原理20-面向流水线的指令设计(上):一心多用的现代CPU
- 在两个数字之间求出其间所有质数
- 关于华为NQA track 联动配置
- js延迟window.open window.location几秒之后跳转
- html网页的无缝拼接,2、图形化的网页-)图形的无缝拼接
- Linux中/dev/ram是什么?
- 离散数学实验报告 实验3 欧拉路的确定