diff --git a/src/main/java/com/supwisdom/dlpay/atte/bean/AtteReport.java b/src/main/java/com/supwisdom/dlpay/atte/bean/AtteReport.java
index e5f2f3a..23e3623 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/bean/AtteReport.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/bean/AtteReport.java
@@ -17,6 +17,9 @@
     private float cnt4; //旷工
     private float cnts;//
     private float cnt5;//迟到或早退
+    private float cnt7;//补休
+    private float cnt8;//外出办案
+    private float cnt9;//出差
     private String custtypename;
     private String deptname;
 
@@ -123,4 +126,28 @@
     public void setCnt5(float cnt5) {
         this.cnt5 = cnt5;
     }
+
+    public float getCnt7() {
+        return cnt7;
+    }
+
+    public void setCnt7(float cnt7) {
+        this.cnt7 = cnt7;
+    }
+
+    public float getCnt8() {
+        return cnt8;
+    }
+
+    public void setCnt8(float cnt8) {
+        this.cnt8 = cnt8;
+    }
+
+    public float getCnt9() {
+        return cnt9;
+    }
+
+    public void setCnt9(float cnt9) {
+        this.cnt9 = cnt9;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/bean/AttedtlSearchBean.java b/src/main/java/com/supwisdom/dlpay/atte/bean/AttedtlSearchBean.java
index aba9081..c319093 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/bean/AttedtlSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/bean/AttedtlSearchBean.java
@@ -8,6 +8,7 @@
     private String cardno;
     private String deptcode;
     private String devname;
+    private String dtcode;
 
     public String getStartdate() {
         return startdate;
@@ -64,4 +65,12 @@
     public void setDevname(String devname) {
         this.devname = devname;
     }
+
+    public String getDtcode() {
+        return dtcode;
+    }
+
+    public void setDtcode(String dtcode) {
+        this.dtcode = dtcode;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/bean/ReportInfo.java b/src/main/java/com/supwisdom/dlpay/atte/bean/ReportInfo.java
new file mode 100644
index 0000000..4a59b23
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/bean/ReportInfo.java
@@ -0,0 +1,67 @@
+package com.supwisdom.dlpay.atte.bean;
+
+public class ReportInfo {
+    private String custid;
+    private String attedate;
+    private Integer state;
+    private String custname;
+    private String deptcode;
+    private Integer apflag;
+    private Integer custtypeid;
+
+    public String getCustid() {
+        return custid;
+    }
+
+    public void setCustid(String custid) {
+        this.custid = custid;
+    }
+
+    public String getAttedate() {
+        return attedate;
+    }
+
+    public void setAttedate(String attedate) {
+        this.attedate = attedate;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public String getCustname() {
+        return custname;
+    }
+
+    public void setCustname(String custname) {
+        this.custname = custname;
+    }
+
+    public String getDeptcode() {
+        return deptcode;
+    }
+
+    public void setDeptcode(String deptcode) {
+        this.deptcode = deptcode;
+    }
+
+    public Integer getApflag() {
+        return apflag;
+    }
+
+    public void setApflag(Integer apflag) {
+        this.apflag = apflag;
+    }
+
+    public Integer getCusttypeid() {
+        return custtypeid;
+    }
+
+    public void setCusttypeid(Integer custtypeid) {
+        this.custtypeid = custtypeid;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/bean/Sum.java b/src/main/java/com/supwisdom/dlpay/atte/bean/Sum.java
index 254ca65..a28dd5a 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/bean/Sum.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/bean/Sum.java
@@ -7,6 +7,9 @@
     private float cnt4;
     private float cnts;
     private float cnt5;
+    private float cnt7;
+    private float cnt8;
+    private float cnt9;
 
     public Sum() {
         this.cnt1=0;
@@ -15,6 +18,9 @@
         this.cnt4=0;
         this.cnts=0;
         this.cnt5=0;
+        this.cnt7=0;
+        this.cnt8=0;
+        this.cnt9=0;
     }
 
     public float getCnt1() {
@@ -64,4 +70,28 @@
     public void setCnt5(float cnt5) {
         this.cnt5 = cnt5;
     }
+
+    public float getCnt7() {
+        return cnt7;
+    }
+
+    public void setCnt7(float cnt7) {
+        this.cnt7 = cnt7;
+    }
+
+    public float getCnt8() {
+        return cnt8;
+    }
+
+    public void setCnt8(float cnt8) {
+        this.cnt8 = cnt8;
+    }
+
+    public float getCnt9() {
+        return cnt9;
+    }
+
+    public void setCnt9(float cnt9) {
+        this.cnt9 = cnt9;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java b/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
index d6f55b9..ac936d7 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
@@ -6,6 +6,7 @@
 import com.supwisdom.dlpay.atte.domain.TAtteClock;
 import com.supwisdom.dlpay.atte.domain.TAtteRest;
 import com.supwisdom.dlpay.atte.service.AtteClassService;
+import com.supwisdom.dlpay.atte.service.AtteReportService;
 import com.supwisdom.dlpay.atte.service.AtteRestService;
 import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
@@ -40,6 +41,8 @@
     private WebInterfaceService webInterfaceService;
     @Autowired
     private AtteClassService atteClassService;
+    @Autowired
+    private AtteReportService atteReportService;
     /**
      *    菜单
      * @param
@@ -212,7 +215,10 @@
                rest.setStatus(status);
                atteRestService.updateAtteRest(rest);
                if(status==1){
+                   //修改考勤状态
                 atteClassService.updateRestDtl(rest.getStartdate(),rest.getEnddate(),rest.getCustid(),rest.getRtype());
+                  //修改报表
+                atteReportService.updateReport(rest.getStartdate(),rest.getEnddate(),rest.getCustid());
                }
                map.put("errStr","");
             }else {
@@ -393,6 +399,8 @@
                 atteRestService.updateClock(clock);
                 if(status==1){
                    atteRestService.updateAtteDtl(clock.getCustid(),clock.getAttedate(),clock.getTimeid(),clock.getRemark());
+
+                   atteReportService.updateReport(clock.getAttedate(),clock.getAttedate(),clock.getCustid());
                 }
                 map.put("errStr","");
             }else {
@@ -408,4 +416,21 @@
     }
 
 
+    /**
+     *  外出申请页面
+     */
+    @RequestMapping("/atte/askoutindex")
+    public String askoutindex(@RequestParam(value = "custid") String custid, Model model) {
+        model.addAttribute("custid", custid);
+        return "apph5/askforout";
+    }
+
+
+    @RequestMapping("/refreshattereport")
+    public String refresh(@RequestParam(value = "startdate") String startdate,
+                          @RequestParam(value = "enddate") String enddate,Model model) {
+        atteReportService.refreshReport(null,startdate,enddate);
+        return "1";
+    }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java b/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java
index b6c9631..805bead 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java
@@ -4,11 +4,9 @@
 import com.supwisdom.dlpay.atte.bean.AttedtlSearchBean;
 import com.supwisdom.dlpay.atte.bean.RestSearchBean;
 import com.supwisdom.dlpay.atte.bean.Sum;
+import com.supwisdom.dlpay.atte.dao.AtteReportDao;
 import com.supwisdom.dlpay.atte.domain.*;
-import com.supwisdom.dlpay.atte.service.AtteClassService;
-import com.supwisdom.dlpay.atte.service.AtteRestService;
-import com.supwisdom.dlpay.atte.service.CustseaService;
-import com.supwisdom.dlpay.atte.service.SeasonService;
+import com.supwisdom.dlpay.atte.service.*;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
@@ -64,6 +62,8 @@
     private ManagerService managerService;
     @Autowired
     private AtteRestService atteRestService;
+    @Autowired
+    private AtteReportService atteReportService;
 
     @GetMapping("/rule/index")
     public String seasonindex(){
@@ -647,6 +647,8 @@
             }
         }
         atteClassService.addBatchDtl(startdate,enddate,deptcode);
+        String sdate=startdate;
+        String edate=enddate;
         Integer start=Integer.parseInt(startdate);
         Integer end=Integer.parseInt(enddate);
         while (start<=end){
@@ -654,6 +656,7 @@
             startdate= DateUtil.getNewDay(startdate,1);
             start=Integer.parseInt(startdate);
         }
+        atteReportService.refreshReport(deptcode,sdate,edate);
         return map;
     }
 
@@ -793,6 +796,8 @@
             dtl.setState(state);
             dtl.setRemark(remark);
             atteClassService.updateAtteDtl(dtl);
+            //修改报表
+            atteReportService.updateReport(dtl.getAttedate(),dtl.getAttedate(),dtl.getCustid());
             map.put("errStr","");
         } catch (Exception e) {
             e.printStackTrace();
@@ -1019,6 +1024,9 @@
                     sum.setCnt4(sum.getCnt4()+report.getCnt4());
                     sum.setCnts(sum.getCnts()+report.getCnts());
                     sum.setCnt5(sum.getCnt5()+report.getCnt5());
+                    sum.setCnt7(sum.getCnt7()+report.getCnt7());
+                    sum.setCnt8(sum.getCnt8()+report.getCnt8());
+                    sum.setCnt9(sum.getCnt9()+report.getCnt9());
                 }
                 map.addAttribute("sum",sum);
             }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/AtteReportDao.java b/src/main/java/com/supwisdom/dlpay/atte/dao/AtteReportDao.java
new file mode 100644
index 0000000..cd422d3
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/AtteReportDao.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.atte.dao;
+
+import com.supwisdom.dlpay.atte.bean.ReportInfo;
+import com.supwisdom.dlpay.atte.domain.TAtteReport;
+import org.apache.poi.ss.formula.functions.T;
+
+import java.util.List;
+
+public interface AtteReportDao {
+
+    public boolean delAtteReport(String attedate,String deptcode);
+
+    public boolean addReport(TAtteReport bean);
+
+    public TAtteReport findReportById(String custid,String attedate,Integer apflag);
+
+    public List<ReportInfo> getreportfromView(String deptcode,String attedate);
+
+    public List<ReportInfo> getfromView(String deptcode,String attedate,String custid);
+
+    public boolean updateReport(TAtteReport bean);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java
index eba37a7..97781e0 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java
@@ -296,6 +296,9 @@
             if(!StringUtil.isEmpty(searchBean.getDeptcode())){
                 sql.append(" and c.deptcode = :dcode ");
             }
+            if(!StringUtil.isEmpty(searchBean.getDtcode())){
+                sql.append(" and c.deptcode = :dtcode ");
+            }
             sql.append(" order by t.atteno desc ");
             Query query=entityManager.createNativeQuery(sql.toString(), AtteDetailInfo.class);
         if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
@@ -314,6 +317,9 @@
         if(!StringUtil.isEmpty(searchBean.getDeptcode())){
             query.setParameter("dcode",searchBean.getDeptcode());
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            query.setParameter("dtcode",searchBean.getDtcode());
+        }
         pageNo = pageNo <= 0 ? 1 : pageNo;
         query.setFirstResult((pageNo - 1) * pageSize);
         query.setMaxResults(pageSize);
@@ -348,6 +354,9 @@
         if(!StringUtil.isEmpty(searchBean.getDeptcode())){
             sql.append(" and c.deptcode = :dcode");
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            sql.append(" and c.deptcode = :dtcode ");
+        }
         Query query=entityManager.createNativeQuery(sql.toString());
         if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
             query.setParameter("sdate",searchBean.getStartdate());
@@ -365,6 +374,9 @@
         if(!StringUtil.isEmpty(searchBean.getDeptcode())){
             query.setParameter("dcode",searchBean.getDeptcode());
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            query.setParameter("dtcode",searchBean.getDtcode());
+        }
         Object object=query.getSingleResult();
         if(object!=null){
             result= Integer.parseInt(object.toString());
@@ -444,6 +456,9 @@
         if(!StringUtil.isEmpty(searchBean.getDeptcode())){
             sql+="  and c.deptcode = :dcode ";
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            sql+=" and c.deptcode = :dtcode ";
+        }
         if(!StringUtil.isEmpty(searchBean.getDevname())){
             sql+="  and d.devname like :dname";
         }
@@ -471,6 +486,9 @@
         if(!StringUtil.isEmpty(searchBean.getCardno())){
             query.setParameter("cno",searchBean.getCardno());
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            query.setParameter("dtcode",searchBean.getDtcode());
+        }
         pageNo = pageNo <= 0 ? 1 : pageNo;
         query.setFirstResult((pageNo - 1) * pageSize);
         query.setMaxResults(pageSize);
@@ -499,6 +517,9 @@
         if(!StringUtil.isEmpty(searchBean.getDeptcode())){
             sql+="  and c.deptcode = :dcode ";
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            sql+=" and c.deptcode = :dtcode ";
+        }
         if(!StringUtil.isEmpty(searchBean.getDevname())){
             sql+="  and d.devname like :dname";
         }
@@ -526,6 +547,9 @@
         if(!StringUtil.isEmpty(searchBean.getCardno())){
             query.setParameter("cno",searchBean.getCardno());
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            query.setParameter("dtcode",searchBean.getDtcode());
+        }
         List<AtteDtl> list=query.getResultList();
         if(list!=null){
             return list.size();
@@ -533,6 +557,7 @@
         return 0;
     }
 
+    @Transactional
     @Override
     public boolean delAtteDtl(String attedate, String deptcode) {
         if(!StringUtil.isEmpty(attedate)){
@@ -674,7 +699,7 @@
     @Override
     public Pagination getPReportWithPage(AttedtlSearchBean searchBean, int pageNo, int pageSize) {
         StringBuffer sql=new StringBuffer();
-        sql.append(" with a as ( select v.*,c.cardno,ct.custtypename,d.deptname from v_atte_info v left join t_card c on v. custid=c.custid  left join tb_custtype ct on v.custtypeid=ct.custtypeid left join tb_dept d on v.deptcode=d.deptcode   ")
+        sql.append(" with a as ( select v.*,c.cardno,ct.custtypename,d.deptname from t_atte_report v left join t_card c on v. custid=c.custid  left join tb_custtype ct on v.custtypeid=ct.custtypeid left join tb_dept d on v.deptcode=d.deptcode   ")
             .append(" where  c.status='normal' and c.transtatus='normal'   ");
         if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
             sql.append(" and v.attedate between :sdate and :edate ");
@@ -688,6 +713,9 @@
         if(!StringUtil.isEmpty(searchBean.getDeptcode())){
             sql.append("  and v.deptcode = :dcode ");
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            sql.append(" and v.deptcode = :dtcode ");
+        }
         if(!StringUtil.isEmpty(searchBean.getCardno())){
             sql.append("  and c.cardno like :cno ");
         }
@@ -696,7 +724,10 @@
                 .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=1) cnt1,")
                 .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=2) cnt2,")
                 .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=3) cnt3,")
-                .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=0) cnt4 ")
+                .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=0) cnt4, ")
+                .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=7) cnt7, ")
+                .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=8) cnt8, ")
+                .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=9) cnt9 ")
         .append(" from a group by a.custname,a.cardno,a.custtypeid,a.deptcode,a.custid,a.deptname,a.custtypename  ")
          .append(" order by a.deptcode desc ,a.custtypeid desc ");
         Query query=entityManager.createNativeQuery(sql.toString(), AtteReport.class);
@@ -716,6 +747,9 @@
         if(!StringUtil.isEmpty(searchBean.getCardno())){
            query.setParameter("cno",searchBean.getCardno());
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            query.setParameter("dtcode",searchBean.getDtcode());
+        }
         pageNo = pageNo <= 0 ? 1 : pageNo;
         query.setFirstResult((pageNo - 1) * pageSize);
         query.setMaxResults(pageSize);
@@ -745,6 +779,9 @@
         if(!StringUtil.isEmpty(searchBean.getDeptcode())){
             sql.append("  and v.deptcode = :dcode ");
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            sql.append(" and v.deptcode = :dtcode ");
+        }
         if(!StringUtil.isEmpty(searchBean.getCardno())){
             sql.append("  and c.cardno like :cno ");
         }
@@ -767,6 +804,9 @@
         if(!StringUtil.isEmpty(searchBean.getCardno())){
             query.setParameter("cno",searchBean.getCardno());
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            query.setParameter("dtcode",searchBean.getDtcode());
+        }
         int result=0;
         Object object=query.getSingleResult();
         if(object!=null){
@@ -778,7 +818,7 @@
     @Override
     public List<AtteReport> getPReportList(AttedtlSearchBean searchBean) {
         StringBuffer sql=new StringBuffer();
-        sql.append(" with a as ( select v.*,c.cardno,ct.custtypename,d.deptname from v_atte_info v left join t_card c on v. custid=c.custid left join tb_custtype ct on v.custtypeid=ct.custtypeid left join tb_dept d on v.deptcode=d.deptcode   ")
+        sql.append(" with a as ( select v.*,c.cardno,ct.custtypename,d.deptname from t_atte_report v left join t_card c on v. custid=c.custid left join tb_custtype ct on v.custtypeid=ct.custtypeid left join tb_dept d on v.deptcode=d.deptcode   ")
                 .append(" where  c.status='normal' and c.transtatus='normal' ");
         if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
             sql.append(" and v.attedate between :sdate and :edate ");
@@ -792,6 +832,9 @@
         if(!StringUtil.isEmpty(searchBean.getDeptcode())){
             sql.append("  and v.deptcode = :dcode ");
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            sql.append(" and v.deptcode = :dtcode ");
+        }
         if(!StringUtil.isEmpty(searchBean.getCardno())){
             sql.append("  and c.cardno like :cno ");
         }
@@ -800,7 +843,10 @@
                 .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=1) cnt1,")
                 .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=2) cnt2,")
                 .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=3) cnt3,")
-                .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=0) cnt4 ")
+                .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=0) cnt4, ")
+                .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=7) cnt7, ")
+                .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=8) cnt8, ")
+                .append(" (select count(*)/2.0 from a aa where aa.custid=a.custid and aa.state=9) cnt9  ")
                 .append(" from a group by a.custname,a.cardno,a.custtypeid,a.deptcode,a.custid,a.custtypename,a.deptname ")
                 .append(" order by a.deptcode desc ,a.custtypeid desc ");
         Query query=entityManager.createNativeQuery(sql.toString(), AtteReport.class);
@@ -821,6 +867,9 @@
         if(!StringUtil.isEmpty(searchBean.getCardno())){
             query.setParameter("cno",searchBean.getCardno());
         }
+        if(!StringUtil.isEmpty(searchBean.getDtcode())){
+            query.setParameter("dtcode",searchBean.getDtcode());
+        }
         List<AtteReport> list=query.getResultList();
         return list;
     }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClockDaoImpl.java b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClockDaoImpl.java
index 4726afa..bb3e0dd 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClockDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClockDaoImpl.java
@@ -94,6 +94,7 @@
         if(searchBean.getCusttypeid()!=null){
             sql.append(" and ct.custtypeid=:ctypeid ");
         }
+        sql.append(" order by t.attedate desc ");
         Query query=entityManager.createNativeQuery(sql.toString());
         if(!StringUtil.isEmpty(searchBean.getAttedate())){
             query.setParameter("adate",searchBean.getAttedate());
diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteReportDaoImpl.java b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteReportDaoImpl.java
new file mode 100644
index 0000000..7a18ef3
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteReportDaoImpl.java
@@ -0,0 +1,136 @@
+package com.supwisdom.dlpay.atte.dao.impl;
+
+import com.supwisdom.dlpay.atte.bean.ReportInfo;
+import com.supwisdom.dlpay.atte.dao.AtteReportDao;
+import com.supwisdom.dlpay.atte.domain.TAtteReport;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import org.hibernate.query.internal.NativeQueryImpl;
+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;
+
+@Service
+public class AtteReportDaoImpl implements AtteReportDao {
+    @PersistenceContext
+    EntityManager entityManager;
+
+
+    @Transactional
+    @Override
+    public boolean delAtteReport(String attedate, String deptcode) {
+        if(!StringUtil.isEmpty(attedate)){
+            String sql=" delete from t_atte_report t  where t.attedate=:adate ";
+            if(!StringUtil.isEmpty(deptcode)){
+                sql+=" and t.custid in (select c.custid from t_customer c where c.deptcode = :dcode )";
+            }
+            try {
+                Query query=entityManager.createNativeQuery(sql);
+                if(!StringUtil.isEmpty(deptcode)){
+                    query.setParameter("dcode",deptcode);
+                }
+                query.setParameter("adate",attedate);
+                query.executeUpdate();
+                return true;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return false;
+    }
+
+    @Transactional
+    @Override
+    public boolean addReport(TAtteReport bean) {
+        boolean flag=false;
+        try {
+            entityManager.persist(bean);
+            flag=true;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return flag;
+    }
+
+
+    @Override
+    public TAtteReport findReportById(String custid, String attedate, Integer apflag) {
+        if(StringUtil.isEmpty(custid)||StringUtil.isEmpty(attedate)||apflag==null){
+            return null;
+        }
+        String sql=" select bean from TAtteReport bean where bean.id.custid = :cid and bean.id.attedate = :adate and bean.id.apflag = :aflag ";
+        TypedQuery<TAtteReport> query=entityManager.createQuery(sql,TAtteReport.class);
+        query.setParameter("cid",custid);
+        query.setParameter("adate",attedate);
+        query.setParameter("aflag",apflag);
+        List<TAtteReport> list=query.getResultList();
+        if(list!=null&&list.size()>0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public List<ReportInfo> getreportfromView(String deptcode, String attedate) {
+        if(StringUtil.isEmpty(attedate)){
+            return null;
+        }
+        String sql=" select v.* from v_atte_info v where v.attedate = :adate ";
+        if(!StringUtil.isEmpty(deptcode)){
+            sql+=" and v.custid in ( select c.custid from t_customer c where c.deptcode = :dcode ) ";
+        }
+        Query query=entityManager.createNativeQuery(sql);
+        query.setParameter("adate",attedate);
+        if(!StringUtil.isEmpty(deptcode)){
+            query.setParameter("dcode",deptcode);
+        }
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(ReportInfo.class));
+        List<ReportInfo> list=query.getResultList();
+        return list;
+    }
+
+
+    @Override
+    public List<ReportInfo> getfromView(String deptcode, String attedate, String custid) {
+        if(StringUtil.isEmpty(attedate)){
+            return null;
+        }
+        String sql=" select v.* from v_atte_info v where v.attedate = :adate ";
+        if(!StringUtil.isEmpty(deptcode)){
+            sql+=" and v.custid in ( select c.custid from t_customer c where c.deptcode = :dcode ) ";
+        }
+        if(!StringUtil.isEmpty(custid)){
+            sql+=" and v.custid = :cid ";
+        }
+        Query query=entityManager.createNativeQuery(sql);
+        query.setParameter("adate",attedate);
+        if(!StringUtil.isEmpty(deptcode)){
+            query.setParameter("dcode",deptcode);
+        }
+        if(!StringUtil.isEmpty(custid)){
+            query.setParameter("cid",custid);
+        }
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(ReportInfo.class));
+        List<ReportInfo> list=query.getResultList();
+        return list;
+    }
+
+    @Transactional
+    @Override
+    public boolean updateReport(TAtteReport bean) {
+        boolean flag=false;
+
+        try {
+            entityManager.merge(bean);
+            flag=true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return flag;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/domain/TAReportId.java b/src/main/java/com/supwisdom/dlpay/atte/domain/TAReportId.java
new file mode 100644
index 0000000..a9032b1
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/domain/TAReportId.java
@@ -0,0 +1,37 @@
+package com.supwisdom.dlpay.atte.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+
+@Embeddable
+public class TAReportId implements Serializable {
+    private String custid;
+    private String attedate;
+    private Integer apflag;
+
+    @Column(name = "custid", nullable = false, length = 32)
+    public String getCustid() {
+        return custid;
+    }
+
+    public void setCustid(String custid) {
+        this.custid = custid;
+    }
+    @Column(name = "attedate", nullable = false, length = 8)
+    public String getAttedate() {
+        return attedate;
+    }
+
+    public void setAttedate(String attedate) {
+        this.attedate = attedate;
+    }
+    @Column(name = "apflag",nullable = false,precision = 4, scale = 0)
+    public Integer getApflag() {
+        return apflag;
+    }
+
+    public void setApflag(Integer apflag) {
+        this.apflag = apflag;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteReport.java b/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteReport.java
new file mode 100644
index 0000000..6462e77
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteReport.java
@@ -0,0 +1,61 @@
+package com.supwisdom.dlpay.atte.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "t_atte_report",
+        indexes = {@Index(name = "idx_ar_custid", columnList = "custid"),
+                @Index(name="idx_ar_attedate",columnList = "attedate"),
+                @Index(name="idx_ar_apflag",columnList = "apflag")})
+public class TAtteReport {
+    private TAReportId id;
+    private Integer state;
+    private String custname;
+    private String deptcode;
+    private Integer custtypeid;
+
+    @EmbeddedId
+    @AttributeOverrides({
+            @AttributeOverride(name = "custid", column = @Column(name = "custid", nullable = false, length = 32)),
+            @AttributeOverride(name = "attedate", column = @Column(name = "attedate", nullable = false, length = 8)),
+            @AttributeOverride(name = "apflag", column = @Column(name = "apflag", nullable = false, precision = 4, scale = 0)) })
+    public TAReportId getId() {
+        return id;
+    }
+
+    public void setId(TAReportId id) {
+        this.id = id;
+    }
+    @Column(name = "state",precision = 4, scale = 0)
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+    @Column(name = "custname", length = 64)
+    public String getCustname() {
+        return custname;
+    }
+
+    public void setCustname(String custname) {
+        this.custname = custname;
+    }
+    @Column(name = "deptcode",  length = 64)
+    public String getDeptcode() {
+        return deptcode;
+    }
+
+    public void setDeptcode(String deptcode) {
+        this.deptcode = deptcode;
+    }
+    @Column(name = "custtypeid",precision = 9, scale = 0)
+    public Integer getCusttypeid() {
+        return custtypeid;
+    }
+
+    public void setCusttypeid(Integer custtypeid) {
+        this.custtypeid = custtypeid;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/service/AtteReportService.java b/src/main/java/com/supwisdom/dlpay/atte/service/AtteReportService.java
new file mode 100644
index 0000000..2bbb8ef
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/AtteReportService.java
@@ -0,0 +1,29 @@
+package com.supwisdom.dlpay.atte.service;
+
+import com.supwisdom.dlpay.atte.bean.ReportInfo;
+import com.supwisdom.dlpay.atte.domain.TAtteReport;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+public interface AtteReportService {
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean delAtteReport(String attedate,String deptcode);
+
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean addReport(TAtteReport bean);
+
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public TAtteReport findReportById(String custid,String attedate,Integer apflag);
+
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public List<ReportInfo> getreportfromView(String deptcode, String attedate);
+
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean refreshReport(String deptcode,String startdate,String enddate);
+
+
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean updateReport(String startdate,String enddate,String custid);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java
index 123a115..e330734 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java
@@ -9,7 +9,9 @@
 import com.supwisdom.dlpay.atte.service.AtteClassService;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
 import com.supwisdom.dlpay.framework.dao.BusinessparaDao;
+import com.supwisdom.dlpay.framework.dao.SysparaDao;
 import com.supwisdom.dlpay.framework.domain.TBusinesspara;
+import com.supwisdom.dlpay.framework.domain.TSyspara;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.mainservice.dao.CustomerDao;
@@ -55,6 +57,7 @@
     @Autowired
     AtteClockDao atteClockDao;
 
+
     @Override
     public Pagination getClassWithPage(String classname,String deptcode, int pageNo, int pageSize) {
         return atteClassDao.getClassWithPage(classname,deptcode,pageNo,pageSize);
@@ -225,7 +228,12 @@
                     dtl.setUpdatetime(DateUtil.getNow());
                     TNcTime time=ncTimeDao.findByTimeId(timeid);
                     String etime=time.getEtime().replace(":","")+"00";
-                    int diff=getDiffMin("130000",etime);
+                    String divtime="130000";
+                    TBusinesspara para=businessparaDao.findByParakey("divtime");
+                    if(para!=null&&!StringUtil.isEmpty(para.getParaval())){
+                        divtime=para.getParaval();
+                    }
+                    int diff=getDiffMin(divtime,etime);
                     if(diff>0){
                         dtl.setApflag(2);
                     }else{
@@ -362,7 +370,11 @@
                         }
                        int state= 0;
                        try {
-                           state = getState(detail.getTimeid(),dtl.getAttetime(),nextid);
+                           if(details.size()==4){
+                               state = getState(detail.getTimeid(),dtl.getAttetime(),nextid);
+                           }else if(details.size()==2){
+                               state = getStateNew(detail.getTimeid(),dtl.getAttetime());
+                           }
                        } catch (Exception e) {
                            System.out.println(detail.getTimeid()+"=nextid:"+nextid);
                            System.out.println(dtl.getAttetime());
@@ -446,6 +458,53 @@
         return flag;
     }
 
+    public int getStateNew(Integer timeid,String attetime){
+        int flag=0;
+        TNcTime time=ncTimeDao.findByTimeId(timeid);
+        if(time==null){
+            return flag;
+        }
+        String btime=time.getBtime().replace(":","")+"00";
+        String etime=time.getEtime().replace(":","")+"00";
+        int bmin=getDiffMin(attetime,btime);
+        int emin=getDiffMin(attetime,etime);
+        int d_min=0;
+        String divtime="130000";
+        TBusinesspara para=businessparaDao.findByParakey("divtime");
+        if(para!=null&&!StringUtil.isEmpty(para.getParaval())){
+            divtime=para.getParaval();
+        }
+         d_min=getDiffMin(attetime,divtime);
+        if(time.getTimetype()==1){   //考到
+
+            if(d_min>0){
+                if(bmin<=0&&emin>=0){
+                    flag=1;
+                }else{
+                    flag=2;
+                }
+            }
+
+        }else if(time.getTimetype()==2){ //考离
+            if(d_min<=0){
+                if(bmin<=0&&emin>=0){
+                    flag=1;
+                }else{
+                    flag=2;
+                }
+            }
+
+        }else{
+
+            if(bmin<0&&emin>0){
+                flag=1;
+            }else{
+                flag=0;
+            }
+        }
+        return flag;
+    }
+
     @Override
     public List<TCustomerInfo> getReviewList(String deptcode) {
         return atteClassDao.getReviewList(deptcode);
diff --git a/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteReportServiceImpl.java b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteReportServiceImpl.java
new file mode 100644
index 0000000..b9b3c4f
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteReportServiceImpl.java
@@ -0,0 +1,105 @@
+package com.supwisdom.dlpay.atte.service.impl;
+
+import com.supwisdom.dlpay.atte.bean.ReportInfo;
+import com.supwisdom.dlpay.atte.dao.AtteReportDao;
+import com.supwisdom.dlpay.atte.domain.TAReportId;
+import com.supwisdom.dlpay.atte.domain.TAtteReport;
+import com.supwisdom.dlpay.atte.service.AtteReportService;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class AtteReportServiceImpl implements AtteReportService {
+    @Autowired
+    private AtteReportDao atteReportDao;
+
+    @Override
+    public boolean delAtteReport(String attedate, String deptcode) {
+        return atteReportDao.delAtteReport(attedate,deptcode);
+    }
+
+    @Override
+    public boolean addReport(TAtteReport bean) {
+        return atteReportDao.addReport(bean);
+    }
+
+    @Override
+    public TAtteReport findReportById(String custid, String attedate, Integer apflag) {
+        return atteReportDao.findReportById(custid,attedate,apflag);
+    }
+
+    @Override
+    public List<ReportInfo> getreportfromView(String deptcode, String attedate) {
+        return atteReportDao.getreportfromView(deptcode,attedate);
+    }
+
+    @Override
+    public boolean refreshReport(String deptcode, String startdate, String enddate) {
+        if(StringUtil.isEmpty(startdate)||StringUtil.isEmpty(enddate)){
+            return false;
+        }
+        Integer start=Integer.parseInt(startdate);
+        Integer end=Integer.parseInt(enddate);
+        while (start<=end){
+            //
+            atteReportDao.delAtteReport(startdate,deptcode);
+
+            List<ReportInfo> list=atteReportDao.getreportfromView(deptcode,startdate);
+            if(list!=null&&list.size()>0){
+                for(ReportInfo info:list){
+                    System.out.println(info.getCustid()+" "+info.getAttedate()+" "+info.getApflag());
+                    TAtteReport report=atteReportDao.findReportById(info.getCustid(),info.getAttedate(),info.getApflag());
+                    if(report==null){
+                        report=new TAtteReport();
+                        TAReportId id=new TAReportId();
+                        id.setCustid(info.getCustid());
+                        id.setAttedate(info.getAttedate());
+                        id.setApflag(info.getApflag());
+                        report.setId(id);
+                        report.setCustname(info.getCustname());
+                        report.setDeptcode(info.getDeptcode());
+                        report.setState(info.getState());
+                        report.setCusttypeid(info.getCusttypeid());
+                        atteReportDao.addReport(report);
+                    }
+                }
+            }
+
+
+            startdate= DateUtil.getNewDay(startdate,1);
+            start=Integer.parseInt(startdate);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean updateReport(String startdate, String enddate, String custid) {
+        if(StringUtil.isEmpty(startdate)||StringUtil.isEmpty(enddate)||StringUtil.isEmpty(custid)){
+            return false;
+        }
+        Integer start=Integer.parseInt(startdate);
+        Integer end=Integer.parseInt(enddate);
+        while (start<=end){
+            //查视图信息
+            List<ReportInfo> list=atteReportDao.getfromView(null,startdate,custid);
+            if(list!=null&&list.size()>0){
+                for(ReportInfo info:list){
+                    TAtteReport report=atteReportDao.findReportById(info.getCustid(),info.getAttedate(),info.getApflag());
+                    if(report!=null){
+                        report.setState(info.getState());
+                        atteReportDao.updateReport(report);
+                    }
+                }
+            }
+
+
+            startdate= DateUtil.getNewDay(startdate,1);
+            start=Integer.parseInt(startdate);
+        }
+        return true;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/task/CreateAtteDtlTask.java b/src/main/java/com/supwisdom/dlpay/atte/task/CreateAtteDtlTask.java
index 626b098..0801656 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/task/CreateAtteDtlTask.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/task/CreateAtteDtlTask.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.atte.task;
 
 import com.supwisdom.dlpay.atte.service.AtteClassService;
+import com.supwisdom.dlpay.atte.service.AtteReportService;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.task.SyncCustomerTask;
 import org.slf4j.Logger;
@@ -20,6 +21,8 @@
     protected static Logger logger = LoggerFactory.getLogger(CreateAtteDtlTask.class);
     @Autowired
     AtteClassService atteClassService;
+    @Autowired
+    AtteReportService atteReportService;
 
     @Override
     public void run(ApplicationArguments args) throws Exception {
@@ -50,4 +53,23 @@
             e.printStackTrace();
         }
     }
+
+    @Scheduled(cron = "${atte.create.dtl}")//每天一点生成前一天报表
+    public void createAtteReport(){
+
+        String attedate= null;
+        try {
+            String now = DateUtil.getNow();
+            logger.info("时间:" + now + "--生成前一天考勤报表");
+          String  cdate=DateUtil.getNow("yyyyMMdd");
+            attedate=DateUtil.getNewDay(cdate,-1);
+            atteReportService.refreshReport(null,attedate,attedate);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        System.out.println(DateUtil.getNewDay("20200617",-1));
+    }
 }
diff --git a/src/main/resources/templates/apph5/askforleave.html b/src/main/resources/templates/apph5/askforleave.html
index 1a6dcd7..6c451d9 100644
--- a/src/main/resources/templates/apph5/askforleave.html
+++ b/src/main/resources/templates/apph5/askforleave.html
@@ -195,6 +195,10 @@
                 label: '调休'
             });
             sexl.push({
+                value: '7',
+                label: '补休'
+            });
+            sexl.push({
                 value: '15',
                 label: '其他'
             });
diff --git a/src/main/resources/templates/apph5/askforout.html b/src/main/resources/templates/apph5/askforout.html
new file mode 100644
index 0000000..32cea98
--- /dev/null
+++ b/src/main/resources/templates/apph5/askforout.html
@@ -0,0 +1,287 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+
+<head>
+    <title>首页</title>
+    <meta name="_csrf_header" th:content="${_csrf.headerName}" />
+    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />
+    <meta charset="utf-8"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="/static/libs/layui/css/layui.css" th:href="@{/static/libs/layui/css/layui.css}"/>
+
+    <link rel="stylesheet" href="/static/res/assets/plugins/element-ui/theme-default/index.css"
+          th:href="@{/static/res/assets/plugins/element-ui/theme-default/index.css}"/>
+
+    <!--<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.min.js}"></script>
+    <!--<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>-->
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/jquery/jquery.form.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/layer/layer.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/vue.min.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/plugins/element-ui/index.js}"></script>
+
+
+</head>
+
+<body>
+
+<div id="app_out">
+    <div class="page-title" style="text-align:center; font-size: 24px;color: #FF8247;margin-top:7%">外出申请</div>
+    <br>
+
+    <el-form ref="outtempform" :model="outtempform" :rules="rules" size="mini" label-width="36%" style="margin-top:7%">
+        <el-form-item label="申请类型:" prop="rtype">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-select v-model="outtempform.rtype" id="rtype">
+                        <el-option
+                                v-for="status in rtypelist"
+                                :key="status.value"
+                                :label="status.label"
+                                :value="status.value">
+                        </el-option>
+                    </el-select>
+                </div>
+            </div>
+        </el-form-item>
+        <el-form-item label="开始时间:" prop="startdate">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-date-picker type="date" v-model="outtempform.startdate" id="time"
+                                    :picker-options="pickerOptions0" :editable="false"
+                                    value-format="yyyyMMdd"
+                                    style="width:100%;"></el-date-picker>
+                </div>
+            </div>
+        </el-form-item>
+        <el-form-item label="结束时间:" prop="enddate">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-date-picker type="date" v-model="outtempform.enddate" id="time"
+                                    :picker-options="pickerOptions1" :editable="false"
+                                    value-format="yyyyMMdd"
+                                    style="width:100%;"></el-date-picker>
+                </div>
+            </div>
+        </el-form-item>
+
+
+        <el-form-item label="备注:" prop="remark">
+            <div class="el-col el-col-18">
+                <div class="el-input" style="width: 187px;">
+                    <el-input v-model="outtempform.remark">
+                    </el-input>
+                </div>
+            </div>
+        </el-form-item>
+
+    </el-form>
+    <div slot="footer" style="text-align:center; ">
+        <el-button type="primary" @click="saveTemp('outtempform')">申 请</el-button>
+    </div>
+
+</div>
+
+</body>
+
+<script>
+    var validatePhone = function (rule, value, callback) {
+        if (value == "") {
+            callback(new Error("请输入手机号"));
+        } else if (!isCellPhone(value)) {//引入methods中封装的检查手机格式的方法
+            callback(new Error("请输入正确的手机号!"));
+        } else {
+            callback();
+        }
+    }
+
+    var askout_app_vue = new Vue({
+        el: '#app_out',
+        data: {
+            dialogFormVisible: true,
+            outtempform: {
+                rtype: '',
+
+                startdate: '',
+                enddate: '',
+
+                custid: '',
+
+                remark: '',
+            },
+            rtypelist: [],
+            bannerHeight: 1000,
+            screenWidth: 0,
+            userId: '',
+            pickerOptions0: {
+                disabledDate: function (time) {
+                    return false;
+                }
+            },pickerOptions1: {
+                disabledDate:function(time) {
+                    if(askout_app_vue.outtempform.startdate !=''){
+
+                        return time.getTime() < askout_app_vue.outtempform.startdate.getTime();
+                    }else {
+                        return time.getTime() > Date.now();
+                    }
+                }
+            },
+            rules: {
+                rtype: [
+                    {required: true, message: '请选择请假类型', trigger: 'blur'},
+                ],
+                remark: [
+                    {required: true, message: '请输入备注', trigger: 'blur'}
+                ]
+            },
+        },
+
+        methods: {
+            saveTemp: function (formName) {
+                var _that = this;
+                var vali = false;
+                this.$refs[formName].validate(
+                    function (valid) {
+                        if (valid) {
+                            vali = true;
+                        } else {
+                            vali = false;
+                        }
+                    });
+                if (vali == true) {
+                    saveTempCustomer(_that, _that, formName);
+                }
+            },
+
+            indexChange: function (pre, next) {
+                var _self = this;
+                var devIdListTmp = _self.devIdList;
+                _self.selectDevId = devIdListTmp[pre];
+                // console.log(_self.selectDevId)
+
+            },
+            setSize: function () {
+                // 通过浏览器宽度(图片宽度)计算高度
+                this.bannerHeight = this.screenWidth;
+            },
+        },
+        created: function () {
+            var _self = this;
+            // 首次加载时,需要调用一次
+            _self.screenWidth = window.innerWidth;
+            _self.setSize();
+            var confid = '[[${custid}]]';
+            console.log(confid);
+            _self.outtempform.custid = confid;
+            var sexl = [];
+            sexl.push({
+                value: '',
+                label: '请选择'
+            });
+            sexl.push({
+                value: '8',
+                label: '外出办案'
+            });sexl.push({
+                value: '9',
+                label: '出差'
+            });
+            _self.rtypelist = sexl;
+
+        }
+    })
+
+    // 窗口大小发生改变时,调用一次
+    window.onresize = function () {
+        askout_app_vue.screenWidth = window.innerWidth;
+        askout_app_vue.setSize();
+    }
+
+    function saveTempCustomer(_that, that, formName) {
+        var token = $("meta[name='_csrf_token']").attr("value");
+        console.log(that.outtempform.startdate)
+        console.log(that.outtempform.enddate)
+        var startdate=class_Formatdate(that.outtempform.startdate);
+        var enddate=class_Formatdate(that.outtempform.enddate);
+        var rtype=that.outtempform.rtype;
+        var remark=that.outtempform.remark;
+        var custid=that.outtempform.custid;
+        $.ajax({
+            type: "post",
+            url: encodeURI("[[@{/app/atte/savetempcust?startdate=}]]"+startdate+"&enddate="+enddate+"&rtype="+rtype+"&remark="+remark+"&custid="+custid),
+            dataType: "json",
+            contentType: "application/json",
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json',
+                'X-CSRF-TOKEN': token,
+            },
+            success: function (data) {
+
+                if (data.errStr != "") {
+                    layer.msg(data.errStr, {icon: 2, time: 2000});
+                } else {
+                    layer.msg('申请成功!', {icon: 1, time: 1000});
+                }
+            }
+        });
+    }
+
+
+    function isCellPhone(val) {
+        if (!/^1(3|4|5|6|7|8)\d{9}$/.test(val)) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+    function class_Formatdate(date){
+        if(date==null||date==''){
+            return '';
+        }
+        var d=new Date(date);
+        var month=d.getMonth() + 1+'';
+        var date=d.getDate()+'';
+        if(month.length==1){
+            month='0'+month;
+        }
+        if(date.length==1){
+            date='0'+date;
+        }
+        var formated=d.getFullYear() + '' + month + '' +date;
+
+        return formated;
+    }
+
+
+
+</script>
+
+<style>
+
+    .el-carousel__item h3 {
+        color: #ff3366;
+        font-size: 14px;
+        opacity: 0.75;
+        line-height: 300px;
+        margin: 0;
+        /*background-color:#66cccc;
+        border: 0px solid #e5e5e5;
+        width: 50%;
+        left: 10%;
+        height: 100%;*/
+    }
+
+    .el-carousel__item:nth-child(2n) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item:nth-child(2n+1) {
+        background-color: #ffffff;
+    }
+
+    .el-carousel__item .Carousel {
+        border-bottom: 1px solid #f1f4f8;
+    }
+</style>
\ No newline at end of file
diff --git a/src/main/resources/templates/apph5/leavehistory.html b/src/main/resources/templates/apph5/leavehistory.html
index 8253be8..87fb2e1 100644
--- a/src/main/resources/templates/apph5/leavehistory.html
+++ b/src/main/resources/templates/apph5/leavehistory.html
@@ -410,6 +410,16 @@
                 label: '请选择'
             });
             sexl.push({
+                value: '8',
+                label: '外出办案'
+            });sexl.push({
+                value: '9',
+                label: '出差'
+            });sexl.push({
+                value: '7',
+                label: '补休'
+            });
+            sexl.push({
                 value: '11',
                 label: '事假'
             });
@@ -479,6 +489,10 @@
                 }
             })
 
+            this.pagesize = 10;
+            this.currPage = 1;
+            commonQuery(this, this.tempform.rtype, this.tempform.custtype, this.tempform.status, this.tempform.custid, this.currPage, this.pageSize);
+
         }
     })
 
@@ -523,6 +537,12 @@
             _self.historyform.rtypename = "调休"
         } else if (row.rtype == "15") {
             _self.historyform.rtypename = "其他"
+        } else if (row.rtype == "8") {
+            _self.historyform.rtypename = "外出办案"
+        } else if (row.rtype == "9") {
+            _self.historyform.rtypename = "出差"
+        } else if (row.rtype == "7") {
+            _self.historyform.rtypename = "补休"
         }
         _self.historyform.remark = row.remark;
     }
diff --git a/src/main/resources/templates/apph5/myleave.html b/src/main/resources/templates/apph5/myleave.html
index b4a0b2c..3af662c 100644
--- a/src/main/resources/templates/apph5/myleave.html
+++ b/src/main/resources/templates/apph5/myleave.html
@@ -385,6 +385,13 @@
                 label: '请选择'
             });
             sexl.push({
+                value: '8',
+                label: '外出办案'
+            });sexl.push({
+                value: '9',
+                label: '出差'
+            });
+            sexl.push({
                 value: '11',
                 label: '事假'
             });
@@ -404,6 +411,10 @@
                 value: '15',
                 label: '其他'
             });
+            sexl.push({
+                value: '7',
+                label: '补休'
+            });
             _self.rtypelist = sexl;
             var statl = [];
             statl.push({
@@ -454,6 +465,11 @@
                 }
             })
 
+            this.pagesize = 10;
+            this.currPage = 1;
+            commonQuery(this, this.tempform.rtype,  this.tempform.status, this.tempform.custid, this.currPage, this.pageSize);
+
+
         }
     })
 
@@ -498,34 +514,16 @@
             _self.historyform.rtypename = "调休"
         } else if (row.rtype == "15") {
             _self.historyform.rtypename = "其他"
+        } else if (row.rtype == "8") {
+            _self.historyform.rtypename = "外出办案"
+        } else if (row.rtype == "9") {
+            _self.historyform.rtypename = "出差"
+        } else if (row.rtype == "7") {
+            _self.historyform.rtypename = "补休"
         }
         _self.historyform.remark = row.remark;
     }
 
-    function saveTempCustomer(_that, formdata, formName) {
-        var token = $("meta[name='_csrf_token']").attr("value");
-        $.ajax({
-            type: "post",
-            url: encodeURI("[[@{/app/atte/getreviewlist}]]"),
-            dataType: "json",
-            contentType: "application/json",
-            headers: {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-                'X-CSRF-TOKEN': token,
-            },
-            data: JSON.stringify(formdata),
-            success: function (data) {
-
-                if (data.retcode != "0") {
-                    layer.msg(data.retmsg, {icon: 2, time: 2000});
-                    window.location = "[[@{/app/getapplyqrcode?visitorid=}]]" + data.visitorid;
-                } else {
-                    layer.msg('登记成功!', {icon: 1, time: 1000});
-                }
-            }
-        });
-    }
 
     function commonQuery(_self, rtype,  status, custid, pageno, pagesize) {
         $.ajax({
diff --git a/src/main/resources/templates/apph5/reviewclock.html b/src/main/resources/templates/apph5/reviewclock.html
index f411658..dddbe06 100644
--- a/src/main/resources/templates/apph5/reviewclock.html
+++ b/src/main/resources/templates/apph5/reviewclock.html
@@ -273,10 +273,10 @@
                 var _that = this;
                 this.pagesize = 10;
                 this.currPage = 1;
-                if(this.tempform.attedate==''||this.tempform.attedate==undefined){
-                    layer.msg("请选择日期！", {icon: 2, time: 2000});
-                    return ;
-                }
+                // if(this.tempform.attedate==''||this.tempform.attedate==undefined){
+                //     layer.msg("请选择日期！", {icon: 2, time: 2000});
+                //     return ;
+                // }
                 this.dialogFormVisible = false;
                 commonQuery(this, this.currPage, this.pageSize);
             },
@@ -391,6 +391,10 @@
                 }
             })
 
+            this.pagesize = 10;
+            this.currPage = 1;
+            commonQuery(this, this.currPage, this.pageSize);
+
         }
     })
 
@@ -445,30 +449,7 @@
 
         return formated;
     }
-    function saveTempCustomer(_that, formdata, formName) {
-        var token = $("meta[name='_csrf_token']").attr("value");
-        $.ajax({
-            type: "post",
-            url: encodeURI("[[@{/app/atte/getreviewlist}]]"),
-            dataType: "json",
-            contentType: "application/json",
-            headers: {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json',
-                'X-CSRF-TOKEN': token,
-            },
-            data: JSON.stringify(formdata),
-            success: function (data) {
 
-                if (data.retcode != "0") {
-                    layer.msg(data.retmsg, {icon: 2, time: 2000});
-                    window.location = "[[@{/app/getapplyqrcode?visitorid=}]]" + data.visitorid;
-                } else {
-                    layer.msg('登记成功!', {icon: 1, time: 1000});
-                }
-            }
-        });
-    }
 
     function commonQuery(_self, pageno, pagesize) {
         var attedate=class_Formatdate(_self.tempform.attedate);
diff --git a/src/main/resources/templates/atte/app/index.html b/src/main/resources/templates/atte/app/index.html
index 5318c23..127a623 100644
--- a/src/main/resources/templates/atte/app/index.html
+++ b/src/main/resources/templates/atte/app/index.html
@@ -40,6 +40,16 @@
 
 </div>
 <div class="weui-cells">
+    <a class="weui-cell weui-cell_access" th:href="@{'/app/atte/askoutindex?custid='+${custid}}" >
+        <div class="weui-cell__bd">
+            <p>外出申请</p>
+        </div>
+        <div class="weui-cell__ft">
+        </div>
+    </a>
+
+</div>
+<div class="weui-cells">
     <a class="weui-cell weui-cell_access" th:href="@{'/app/atte/searchindex?custid='+${custid}}" >
         <div class="weui-cell__bd">
             <p>查看假条</p>
diff --git a/src/main/resources/templates/atte/app/re_index.html b/src/main/resources/templates/atte/app/re_index.html
index 3dd8f97..4e1cb48 100644
--- a/src/main/resources/templates/atte/app/re_index.html
+++ b/src/main/resources/templates/atte/app/re_index.html
@@ -40,6 +40,16 @@
 
 </div>
 <div class="weui-cells">
+    <a class="weui-cell weui-cell_access" th:href="@{'/app/atte/askoutindex?custid='+${custid}}" >
+        <div class="weui-cell__bd">
+            <p>外出申请</p>
+        </div>
+        <div class="weui-cell__ft">
+        </div>
+    </a>
+
+</div>
+<div class="weui-cells">
     <a class="weui-cell weui-cell_access" th:href="@{'/app/atte/searchindex?custid='+${custid}}" >
         <div class="weui-cell__bd">
             <p>查看假条</p>
diff --git a/src/main/resources/templates/atte/dtl/index.html b/src/main/resources/templates/atte/dtl/index.html
index 51dc8d3..b5ce591 100644
--- a/src/main/resources/templates/atte/dtl/index.html
+++ b/src/main/resources/templates/atte/dtl/index.html
@@ -77,7 +77,22 @@
                         </div>
                     </div>
                 </div>
-
+                <div class="col-md-4">
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">部门:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-select v-model="attedtlform.dtcode" style="width:100%;" clearable filterable placeholder="请选择">
+                                <el-option
+                                        v-for="dtcode in deptlist"
+                                        :key="dtcode.value"
+                                        :label="dtcode.label"
+                                        :value="dtcode.value">
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </div>
+                </div>
 
                 <div    class="col-md-4">
                     <div class="form-group">
@@ -191,7 +206,8 @@
                 custname:'',
                 custtypeid:'',
                 deptcode:'',
-                devname:''
+                devname:'',
+                dtcode:''
             },
             timegrplist:[],
             typegrplist:[],
diff --git a/src/main/resources/templates/atte/report/p_index.html b/src/main/resources/templates/atte/report/p_index.html
index 3ebafe4..4844024 100644
--- a/src/main/resources/templates/atte/report/p_index.html
+++ b/src/main/resources/templates/atte/report/p_index.html
@@ -69,6 +69,22 @@
                     </div>
                 </div>
 
+                <div class="col-md-4">
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">部门:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-select v-model="preportform.dtcode" style="width:100%;" clearable filterable placeholder="请选择">
+                                <el-option
+                                        v-for="dtcode in deptlist"
+                                        :key="dtcode.value"
+                                        :label="dtcode.label"
+                                        :value="dtcode.value">
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </div>
+                </div>
 
                 <div    class="col-md-4">
                     <div class="form-group">
@@ -137,6 +153,21 @@
                     >
                     </el-table-column>
                     <el-table-column
+                            prop="cnt7"
+                            label="补休(天)"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cnt8"
+                            label="外出办案(天)"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cnt9"
+                            label="出差(天)"
+                    >
+                    </el-table-column>
+                    <el-table-column
                             prop="cnts"
                             label="总考勤天数"
                     >
@@ -177,7 +208,8 @@
                 cardno:'',
                 custname:'',
                 custtypeid:'',
-                deptcode:''
+                deptcode:'',
+                dtcode:''
             },
             timegrplist:[],
             typegrplist:[],
@@ -386,7 +418,8 @@
         var custname=that.preportform.custname;
         var cardno=that.preportform.cardno;
         var opercode=that.oper.opercode;
-        var url = '/atte/print/printpreport?startdate=' + startdate + '&enddate=' + enddate + '&custtypeid=' + custtypeid + '&custname=' + custname+"&cardno="+cardno+"&opercode="+opercode;
+        var dtcode=that.preportform.dtcode;
+        var url = '/atte/print/printpreport?startdate=' + startdate + '&enddate=' + enddate + '&custtypeid=' + custtypeid + '&custname=' + custname+"&cardno="+cardno+"&opercode="+opercode+"&dtcode="+dtcode;
 
         LODOP = getLodop();
         LODOP.PRINT_INIT("考勤报表");
diff --git a/src/main/resources/templates/atte/report/print/p_printindex.html b/src/main/resources/templates/atte/report/print/p_printindex.html
index 98e2b78..d17e278 100644
--- a/src/main/resources/templates/atte/report/print/p_printindex.html
+++ b/src/main/resources/templates/atte/report/print/p_printindex.html
@@ -28,6 +28,9 @@
                 <th  style="text-align: center;">异常(天)</th>
                 <th  style="text-align: center;">请假(天)</th>
                 <th  style="text-align: center;">旷工(天)</th>
+                <th  style="text-align: center;">补休(天)</th>
+                <th  style="text-align: center;">外出办案(天)</th>
+                <th  style="text-align: center;">出差(天)</th>
                 <th  style="text-align: center;">总考勤天数	</th>
             </tr>
             </thead>
@@ -47,6 +50,9 @@
                     <td th:text="${data.cnt2}"></td>
                     <td th:text="${data.cnt3}"></td>
                     <td th:text="${data.cnt4}"></td>
+                    <td th:text="${data.cnt7}"></td>
+                    <td th:text="${data.cnt8}"></td>
+                    <td th:text="${data.cnt9}"></td>
                     <td th:text="${data.cnts}"></td>
                 </tr>
 
@@ -58,6 +64,9 @@
                     <td th:text="${sum.cnt2}"></td>
                     <td th:text="${sum.cnt3}"></td>
                     <td th:text="${sum.cnt4}"></td>
+                    <td th:text="${sum.cnt7}"></td>
+                    <td th:text="${sum.cnt8}"></td>
+                    <td th:text="${sum.cnt9}"></td>
                     <td th:text="${sum.cnts}"></td>
                 </tr>
             </div>
diff --git a/src/main/resources/templates/atte/rest/index.html b/src/main/resources/templates/atte/rest/index.html
index f9b6db6..b062858 100644
--- a/src/main/resources/templates/atte/rest/index.html
+++ b/src/main/resources/templates/atte/rest/index.html
@@ -205,7 +205,7 @@
             pageSize:10,
             totSize:0,
             currentRow: null,
-            rtypelist:[{value:11,label:'事假'},{value:12,label:'病假'},{value:13,label:'年假'},{value:14,label:'调休'},{value:15,label:'调休'}],
+            rtypelist:[{value:11,label:'事假'},{value:12,label:'病假'},{value:13,label:'年假'},{value:14,label:'调休'},{value:15,label:'其他'},{value:8,label:'外出办案'},{value:9,label:'出差'}],
             statuslist:[{value:0,label:'未审核'},{value:1,label:'已通过'},{value:2,label:'未通过'},{value:3,label:'取消'}],
             preportform:{
                 startdate:Date.now(),
diff --git a/src/main/resources/templates/atte/timedtl/index.html b/src/main/resources/templates/atte/timedtl/index.html
index d2082bc..de0f0c4 100644
--- a/src/main/resources/templates/atte/timedtl/index.html
+++ b/src/main/resources/templates/atte/timedtl/index.html
@@ -69,6 +69,23 @@
                     </div>
                 </div>
 
+                <div class="col-md-4">
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">部门:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-select v-model="timedtlform.dtcode" style="width:100%;" clearable filterable placeholder="请选择">
+                                <el-option
+                                        v-for="dtcode in deptlist"
+                                        :key="dtcode.value"
+                                        :label="dtcode.label"
+                                        :value="dtcode.value">
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </div>
+                </div>
+
 
                 <div    class="col-md-4">
                     <div class="form-group">
@@ -141,6 +158,9 @@
                             <span v-if="scope.row.state=='13'" class="layui-badge layui-bg-gray">年假</span>
                             <span v-if="scope.row.state=='14'" class="layui-badge layui-bg-gray">调休</span>
                             <span v-if="scope.row.state=='15'" class="layui-badge layui-bg-gray">其他</span>
+                            <span v-if="scope.row.state=='8'" class="layui-badge layui-bg-gray">外出办案</span>
+                            <span v-if="scope.row.state=='9'" class="layui-badge layui-bg-gray">出差</span>
+                            <span v-if="scope.row.state=='7'" class="layui-badge layui-bg-gray">补休</span>
                         </template>
                     </el-table-column>
                     <el-table-column
@@ -155,6 +175,9 @@
                             <span v-if="scope.row.oldstate=='13'" class="layui-badge layui-bg-gray">年假</span>
                             <span v-if="scope.row.oldstate=='14'" class="layui-badge layui-bg-gray">调休</span>
                             <span v-if="scope.row.oldstate=='15'" class="layui-badge layui-bg-gray">其他</span>
+                            <span v-if="scope.row.oldstate=='8'" class="layui-badge layui-bg-gray">外出办案</span>
+                            <span v-if="scope.row.oldstate=='9'" class="layui-badge layui-bg-gray">出差</span>
+                            <span v-if="scope.row.oldstate=='7'" class="layui-badge layui-bg-gray">补休</span>
                         </template>
                     </el-table-column>
                     <el-table-column
@@ -239,14 +262,15 @@
             totSize:0,
             currentRow: null,
             stategrplist:[{value:0,label:'未打卡'},{value:1,label:'正常'},{value:2,label:'异常'},
-                {value:11,label:'事假'},{value:12,label:'病假'},{value:13,label:'年假'},{value:14,label:'调休'},{value:15,label:'其他'},],
+                {value:7,label:'补休'},{value:8,label:'外出办案'},{value:9,label:'出差'},{value:11,label:'事假'},{value:12,label:'病假'},{value:13,label:'年假'},{value:14,label:'调休'},{value:15,label:'其他'},],
             timedtlform:{
                 startdate:Date.now(),
                 enddate:Date.now(),
                 cardno:'',
                 custname:'',
                 custtypeid:'',
-                deptcode:''
+                deptcode:'',
+                dtcode:''
             },
             refreshflag:'1',
             timegrplist:[],
