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 {
@Autowired
private ClaimVoucherDao claimVoucherDao;
@Autowired
private ClaimVoucherItemDao claimVoucherItemDao;
@Autowired
private 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);
}
}
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;
public ClaimVoucher getClaimVoucher() {
return claimVoucher;
}
public void setClaimVoucher(ClaimVoucher claimVoucher) {
this.claimVoucher = claimVoucher;
}
public List<ClaimVoucherItem> getItems() {
return items;
}
public void setItems(List<ClaimVoucherItem> items) {
this.items = items;
}
}
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 {
@Autowired
private 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";
}
}
claim_voucher_add.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:include page="top.jsp"/>
<section id="content" class="table-layout animated fadeIn">
<div class="tray tray-center">
<div class="content-header">
<h2> 填写报销单 </h2>
<p class="lead"></p>
</div>
<div class="admin-form theme-primary mw1000 center-block" style="padding-bottom: 175px;">
<div class="panel heading-border">
<form:form id="admin-form" name="addForm" action="/claim_voucher/add" modelAttribute="info">
<div class="panel-body bg-light">
<div class="section-divider mt20 mb40">
<span> 基本信息 </span>
</div>
<div class="section">
<label for="claimVoucher.cause" class="field prepend-icon">
<form:input path="claimVoucher.cause" cssClass="gui-input" placeholder="事由..."/>
<label for="claimVoucher.cause" class="field-icon">
<i class="fa fa-lock"></i>
</label>
</label>
</div>
<div class="section-divider mt20 mb40">
<span> 费用明细 </span>
</div>
<div class="section row" id="items">
<div>
<div class="col-md-3">
<label for="items[0].item" class="field prepend-icon">
<form:select path="items[0].item" cssClass="gui-input" placeholder="花销类型..." items="${items}"/>
</label>
</div>
<div class="col-md-3">
<label for="items[0].amount" class="field prepend-icon">
<form:input path="items[0].amount" cssClass="gui-input money" placeholder="金额..."/>
<label for="items[0].amount" class="field-icon">
<i class="fa fa-lock"></i>
</label>
</label>
</div>
<div class="col-md-5">
<label for="items[0].comment" class="field prepend-icon">
<form:input path="items[0].comment" cssClass="gui-input" placeholder="备注..."/>
<label for="items[0].comment" class="field-icon">
<i class="fa fa-lock"></i>
</label>
</label>
</div>
<div class="col-md-1" style="text-align:right;">
<button type="button" class="button"> X </button>
</div>
</div>
</div>
<div class="section row">
<div class="col-md-3">
<label for="totalMoney" class="field prepend-icon">
<form:input id="totalMoney" path="claimVoucher.totalAmount" cssClass="gui-input" placeholder="总金额..." readonly="true"/>
<label for="totalMoney" class="field-icon">
<i class="fa fa-user"></i>
</label>
</label>
</div>
<div class="section" style="text-align:right;">
<div class="col-md-9">
<button type="button" class="button" id="addItemButton"> + </button>
</div>
</div>
</div>
<div class="panel-footer text-right">
<button type="submit" class="button"> 保存 </button>
<button type="button" class="button" onclick="javascript:window.history.go(-1);"> 返回 </button>
</div>
</div>
</form:form>
</div>
</div>
</div>
</section>
<jsp:include page="bottom.jsp"/>
claim_voucher_detail.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:include page="top.jsp"/>
<section id="content" class="table-layout animated fadeIn">
<div class="tray tray-center">
<div class="content-header">
<h2> 报销单详情 </h2>
<p class="lead"></p>
</div>
<div class="admin-form theme-primary mw1000 center-block" style="padding-bottom: 175px;">
<div class="panel heading-border">
<div class="panel-body bg-light">
<div class="section-divider mt20 mb40">
<span> 基本信息 </span>
</div>
<div class="section row">
<div class="col-md-2">事由</div>
<div class="col-md-6">${
claimVoucher.cause}</div>
</div>
<div class="section row">
<div class="col-md-2">创建人</div>
<div class="col-md-4">${
claimVoucher.creater.name}</div>
<div class="col-md-2">创建时间</div>
<div class="col-md-4"><spring:eval expression="claimVoucher.createTime"/></div>
</div>
<div class="section row">
<div class="col-md-2">待处理人</div>
<div class="col-md-4">${
claimVoucher.dealer.name}</div>
<div class="col-md-2">状态</div>
<div class="col-md-4">${
claimVoucher.status}</div>
</div>
<div class="section-divider mt20 mb40">
<span> 费用明细 </span>
</div>
<div class="section row">
<C:forEach items="${items}" var="item">
<div class="col-md-3">${
item.item}</div>
<div class="col-md-3">${
item.amount}</div>
<div class="col-md-5">${
item.comment}</div>
</C:forEach>
</div>
<div class="section row">
<div class="col-md-2">总金额</div>
<div class="col-md-6">${
claimVoucher.totalAmount}</div>
</div>
<div class="section-divider mt20 mb40">
<span> 处理流程 </span>
</div>
<div class="section row">
<C:forEach items="${records}" var="record">
<div class="col-md-1">${
record.dealer.name}</div>
<div class="col-md-3"><spring:eval expression="record.dealTime"/></div>
<div class="col-md-1">${
record.dealWay}</div>
<div class="col-md-2">${
record.dealWay}</div>
<div class="col-md-5">${
record.comment}</div>
</C:forEach>
</div>
<div class="panel-footer text-right">
<button type="button" class="button" onclick="javascript:window.history.go(-1);"> 返回 </button>
</div>
</div>
</div>
</div>
</div>
</section>
<jsp:include page="bottom.jsp"/>