diff --git a/src/main/java/com/supwisdom/dlpay/atte/Test.java b/src/main/java/com/supwisdom/dlpay/atte/Test.java
index af20887..bb72c7b 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/Test.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/Test.java
@@ -1,5 +1,14 @@
 package com.supwisdom.dlpay.atte;
 
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
 public class Test {
+    public static void main(String[] args) {
+
+    }
     
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/bean/AtteRestInfo.java b/src/main/java/com/supwisdom/dlpay/atte/bean/AtteRestInfo.java
new file mode 100644
index 0000000..2c280ec
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/bean/AtteRestInfo.java
@@ -0,0 +1,148 @@
+package com.supwisdom.dlpay.atte.bean;
+
+public class AtteRestInfo {
+    private String id; //请假条编号
+    private String custid;
+    private String custname;
+    private String custtypeid;
+    private String custtypename;
+    private String cardno;
+    private String startdate;
+    private String enddate;
+    private String remark;
+    private String rtype;
+    private String status;
+    private String recustid;
+    private String recustname;
+    private String updatetime;
+    private String deptcode;
+    private String deptname;
+
+    public String getCustid() {
+        return custid;
+    }
+
+    public void setCustid(String custid) {
+        this.custid = custid;
+    }
+
+    public String getCustname() {
+        return custname;
+    }
+
+    public void setCustname(String custname) {
+        this.custname = custname;
+    }
+
+    public String getCusttypeid() {
+        return custtypeid;
+    }
+
+    public void setCusttypeid(String custtypeid) {
+        this.custtypeid = custtypeid;
+    }
+
+    public String getCusttypename() {
+        return custtypename;
+    }
+
+    public void setCusttypename(String custtypename) {
+        this.custtypename = custtypename;
+    }
+
+    public String getCardno() {
+        return cardno;
+    }
+
+    public void setCardno(String cardno) {
+        this.cardno = cardno;
+    }
+
+    public String getStartdate() {
+        return startdate;
+    }
+
+    public void setStartdate(String startdate) {
+        this.startdate = startdate;
+    }
+
+    public String getEnddate() {
+        return enddate;
+    }
+
+    public void setEnddate(String enddate) {
+        this.enddate = enddate;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getRtype() {
+        return rtype;
+    }
+
+    public void setRtype(String rtype) {
+        this.rtype = rtype;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getRecustid() {
+        return recustid;
+    }
+
+    public void setRecustid(String recustid) {
+        this.recustid = recustid;
+    }
+
+    public String getRecustname() {
+        return recustname;
+    }
+
+    public void setRecustname(String recustname) {
+        this.recustname = recustname;
+    }
+
+    public String getUpdatetime() {
+        return updatetime;
+    }
+
+    public void setUpdatetime(String updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getDeptcode() {
+        return deptcode;
+    }
+
+    public void setDeptcode(String deptcode) {
+        this.deptcode = deptcode;
+    }
+
+    public String getDeptname() {
+        return deptname;
+    }
+
+    public void setDeptname(String deptname) {
+        this.deptname = deptname;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/bean/RestSearchBean.java b/src/main/java/com/supwisdom/dlpay/atte/bean/RestSearchBean.java
new file mode 100644
index 0000000..01342ea
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/bean/RestSearchBean.java
@@ -0,0 +1,76 @@
+package com.supwisdom.dlpay.atte.bean;
+
+public class RestSearchBean {
+    private String startdate;
+    private String enddate;
+    private String custid;
+    private String deptcode;
+    private String custname;
+    private String status;
+    private String rtype;
+    private String custtypeid;
+
+    public String getStartdate() {
+        return startdate;
+    }
+
+    public void setStartdate(String startdate) {
+        this.startdate = startdate;
+    }
+
+    public String getEnddate() {
+        return enddate;
+    }
+
+    public void setEnddate(String enddate) {
+        this.enddate = enddate;
+    }
+
+    public String getCustid() {
+        return custid;
+    }
+
+    public void setCustid(String custid) {
+        this.custid = custid;
+    }
+
+    public String getDeptcode() {
+        return deptcode;
+    }
+
+    public void setDeptcode(String deptcode) {
+        this.deptcode = deptcode;
+    }
+
+    public String getCustname() {
+        return custname;
+    }
+
+    public void setCustname(String custname) {
+        this.custname = custname;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getRtype() {
+        return rtype;
+    }
+
+    public void setRtype(String rtype) {
+        this.rtype = rtype;
+    }
+
+    public String getCusttypeid() {
+        return custtypeid;
+    }
+
+    public void setCusttypeid(String custtypeid) {
+        this.custtypeid = custtypeid;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/AtteRestDao.java b/src/main/java/com/supwisdom/dlpay/atte/dao/AtteRestDao.java
index 83ca9f8..93facb2 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/dao/AtteRestDao.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/AtteRestDao.java
@@ -1,10 +1,19 @@
 package com.supwisdom.dlpay.atte.dao;
 
+import com.supwisdom.dlpay.atte.bean.AtteRestInfo;
+import com.supwisdom.dlpay.atte.bean.RestSearchBean;
 import com.supwisdom.dlpay.atte.domain.TAtteRest;
+import com.supwisdom.dlpay.system.page.Pagination;
+
+import java.util.List;
 
 public interface AtteRestDao {
     public boolean  saveAtteRest(TAtteRest bean);
     public boolean  updateAtteRest(TAtteRest bean);
     public TAtteRest getAtteRestById(String id);
 
+    public Pagination getRestInfo(RestSearchBean searchBean,int pageNo,int pageSize);
+
+    //是否可以申请
+    public boolean canask(String custid,String startdate,String enddate);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteRestDaoImpl.java b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteRestDaoImpl.java
index 8bdf9a5..767114f 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteRestDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteRestDaoImpl.java
@@ -1,14 +1,22 @@
 package com.supwisdom.dlpay.atte.dao.impl;
 
+import com.supwisdom.dlpay.atte.bean.AtteDetailInfo;
+import com.supwisdom.dlpay.atte.bean.AtteRestInfo;
+import com.supwisdom.dlpay.atte.bean.RestSearchBean;
 import com.supwisdom.dlpay.atte.dao.AtteRestDao;
 import com.supwisdom.dlpay.atte.domain.TAtteClass;
 import com.supwisdom.dlpay.atte.domain.TAtteRest;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.system.page.Pagination;
+import org.hibernate.query.internal.NativeQueryImpl;
+import org.hibernate.transform.ResultTransformer;
+import org.hibernate.transform.Transformers;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
 import javax.persistence.TypedQuery;
 import java.util.List;
 
@@ -57,4 +65,144 @@
         }
         return null;
     }
+
+    @Override
+    public Pagination getRestInfo(RestSearchBean searchBean,int pageNo,int pageSize) {
+        StringBuffer sql=new StringBuffer();
+        sql.append(" select r.id,c.custid,c.custname,ct.custtypeid,ct.custtypename,tc.cardno,r.startdate,r.enddate,r.remark,r.rtype,r.status,r.updatetime  ");
+        sql.append(" ,td.deptcode,td.deptname,r.re_custid,(select custname from t_customer where custid=r.re_custid) recustname ");
+        sql.append(" from t_atte_rest r left join t_customer c on r.custid=c.custid ")
+                .append(" left join t_card tc on r.custid=tc.custid ")
+                .append(" left join tb_custtype ct on c.custtypeid=ct.custtypeid ")
+                .append(" left join tb_dept td on c.deptcode=td.deptcode ")
+                .append(" where c.status='1' and tc.status='normal' and tc.transtatus='normal' ");
+            if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
+                sql.append(" and ( (:sdate between r.startdate and r.enddate) or (:edate between r.startdate and r.enddate) ");
+                sql.append(" or (:sdate < r.startdate and :edate > r.enddate ) )");
+            }
+            if(!StringUtil.isEmpty(searchBean.getCustid())){
+                sql.append(" and r.custid = :cid ");
+            }
+            if(!StringUtil.isEmpty(searchBean.getDeptcode())){
+                sql.append(" and c.deptcode = :dcode ");
+            }
+            if(!StringUtil.isEmpty(searchBean.getCustname())){
+                sql.append(" and c.custname like :cname ");
+            }
+            if(!StringUtil.isEmpty(searchBean.getStatus())){
+                sql.append(" and r.status= :stat ");
+            }
+            if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+                sql.append(" and c.custtypeid= :ctypeid ");
+            }
+            sql.append(" order by r.startdate desc,r.enddate desc ");
+            Query query=entityManager.createNativeQuery(sql.toString(), AtteRestInfo.class);
+        if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
+            query.setParameter("sdate",searchBean.getStartdate());
+            query.setParameter("edate",searchBean.getEnddate());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustid())){
+           query.setParameter("cid",searchBean.getCustid());
+        }
+        if(!StringUtil.isEmpty(searchBean.getDeptcode())){
+            query.setParameter("dcode",searchBean.getDeptcode());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustname())){
+            query.setParameter("cname","%"+searchBean.getCustname()+"%");
+        }
+        if(!StringUtil.isEmpty(searchBean.getStatus())){
+            query.setParameter("stat",searchBean.getStatus());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+            query.setParameter("ctypeid",Integer.parseInt(searchBean.getCusttypeid()));
+        }
+        pageNo = pageNo <= 0 ? 1 : pageNo;
+        query.setFirstResult((pageNo - 1) * pageSize);
+        query.setMaxResults(pageSize);
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(AtteRestInfo.class));
+        Pagination page = new Pagination();
+        page.setPageNo(pageNo);
+        page.setPageSize(pageSize);
+        List<AtteRestInfo> list=query.getResultList();
+        page.setList(list);
+        int totalCount= getRestCount(searchBean);
+        page.setTotalCount(totalCount);
+        return page;
+    }
+
+    public int getRestCount(RestSearchBean searchBean){
+        StringBuffer sql=new StringBuffer();
+        sql.append(" select count(*)");
+        sql.append(" from t_atte_rest r left join t_customer c on r.custid=c.custid ")
+                .append(" left join t_card tc on r.custid=tc.custid ")
+                .append(" left join tb_custtype ct on c.custtypeid=ct.custtypeid ")
+                .append(" left join tb_dept td on c.deptcode=td.deptcode ")
+                .append(" where c.status='1' and tc.status='normal' and tc.transtatus='normal' ");
+        if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
+            sql.append(" and ( (:sdate between r.startdate and r.enddate) or (:edate between r.startdate and r.enddate) ");
+            sql.append(" or (:sdate < r.startdate and :edate > r.enddate ) )");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustid())){
+            sql.append(" and r.custid = :cid ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getDeptcode())){
+            sql.append(" and c.deptcode = :dcode ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustname())){
+            sql.append(" and c.custname like :cname ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getStatus())){
+            sql.append(" and r.status= :stat ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+            sql.append(" and c.custtypeid= :ctypeid ");
+        }
+        sql.append(" order by r.startdate desc,r.enddate desc ");
+        Query query=entityManager.createNativeQuery(sql.toString(), AtteRestInfo.class);
+        if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
+            query.setParameter("sdate",searchBean.getStartdate());
+            query.setParameter("edate",searchBean.getEnddate());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustid())){
+            query.setParameter("cid",searchBean.getCustid());
+        }
+        if(!StringUtil.isEmpty(searchBean.getDeptcode())){
+            query.setParameter("dcode",searchBean.getDeptcode());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustname())){
+            query.setParameter("cname","%"+searchBean.getCustname()+"%");
+        }
+        if(!StringUtil.isEmpty(searchBean.getStatus())){
+            query.setParameter("stat",searchBean.getStatus());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+            query.setParameter("ctypeid",Integer.parseInt(searchBean.getCusttypeid()));
+        }
+        int cnt=0;
+        Object obj=query.getSingleResult();
+        if(obj!=null){
+            cnt=Integer.parseInt(obj.toString());
+        }
+        return cnt;
+    }
+
+    @Transactional
+    @Override
+    public boolean canask(String custid, String startdate, String enddate) {
+        if(StringUtil.isEmpty(custid)||StringUtil.isEmpty(startdate)||StringUtil.isEmpty(enddate)){
+            return false;
+        }
+        String sql=" select a from TAtteRest a where a.custid= :cid and a.status in (0,1) ";
+        sql+=" and ( (:sdate between a.startdate and a.enddate) or (:edate between a.startdate and a.enddate)  ";
+        sql+=" or (:sdate < a.startdate and :edate > a.enddate ) )";
+        TypedQuery<TAtteRest> query=entityManager.createQuery(sql,TAtteRest.class);
+        query.setParameter("cid",custid);
+        query.setParameter("sdate",startdate);
+        query.setParameter("edate",enddate);
+        List<TAtteRest> list=query.getResultList();
+        if(list!=null&&list.size()>0){
+            return false;
+        }
+        return true;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteRest.java b/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteRest.java
index f85dbc2..fb70fa3 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteRest.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteRest.java
@@ -12,7 +12,7 @@
     @Column(name="custid",length = 32)
     private String custid;
     @Column(name="rtype",length = 4)
-    private Integer rtype;
+    private Integer rtype;  // 11-事假 12-病假 13-年假 14-调休 15-其他
     @Column(name="startdate", length = 8)
     private String startdate;
     @Column(name="enddate",length= 8)
@@ -20,9 +20,11 @@
     @Column(name="remark",length = 255 )
     private String remark;
     @Column(name="status",length = 4)
-    private String status;
+    private String status;  // 0-未审核 1-已通过 2-未通过 3-取消
     @Column(name="updatetime",length = 14)
     private String updatetime;
+    @Column(name="re_custid",length = 32)
+    private String recustid;
 
     public String getId() {
         return id;
@@ -87,4 +89,12 @@
     public void setUpdatetime(String updatetime) {
         this.updatetime = updatetime;
     }
+
+    public String getRecustid() {
+        return recustid;
+    }
+
+    public void setRecustid(String recustid) {
+        this.recustid = recustid;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/service/AtteRestService.java b/src/main/java/com/supwisdom/dlpay/atte/service/AtteRestService.java
new file mode 100644
index 0000000..e972b29
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/AtteRestService.java
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.atte.service;
+
+import com.supwisdom.dlpay.atte.domain.TAtteRest;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+public interface AtteRestService {
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean  saveAtteRest(TAtteRest bean);
+
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean  updateAtteRest(TAtteRest bean);
+
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public TAtteRest getAtteRestById(String id);
+
+    //是否可以申请
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean canask(String custid,String startdate,String enddate);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteRestServiceImpl.java b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteRestServiceImpl.java
new file mode 100644
index 0000000..5de5149
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteRestServiceImpl.java
@@ -0,0 +1,33 @@
+package com.supwisdom.dlpay.atte.service.impl;
+
+import com.supwisdom.dlpay.atte.dao.AtteRestDao;
+import com.supwisdom.dlpay.atte.domain.TAtteRest;
+import com.supwisdom.dlpay.atte.service.AtteRestService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AtteRestServiceImpl implements AtteRestService {
+    @Autowired
+    AtteRestDao atteRestDao;
+
+    @Override
+    public boolean saveAtteRest(TAtteRest bean) {
+        return atteRestDao.saveAtteRest(bean);
+    }
+
+    @Override
+    public boolean updateAtteRest(TAtteRest bean) {
+        return atteRestDao.updateAtteRest(bean);
+    }
+
+    @Override
+    public TAtteRest getAtteRestById(String id) {
+        return atteRestDao.getAtteRestById(id);
+    }
+
+    @Override
+    public boolean canask(String custid, String startdate, String enddate) {
+        return atteRestDao.canask(custid,startdate,enddate);
+    }
+}
