考勤
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);
+    }
+}