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 23e3623..5968db7 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/bean/AtteReport.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/bean/AtteReport.java
@@ -22,6 +22,72 @@
     private float cnt9;//出差
     private String custtypename;
     private String deptname;
+    private Integer a1;
+    private Integer p1;
+    private Integer a2;
+    private Integer p2;
+    private Integer a3;
+    private Integer p3;
+    private Integer a4;
+    private Integer p4;
+    private Integer a5;
+    private Integer p5;
+    private Integer a6;
+    private Integer p6;
+    private Integer a7;
+    private Integer p7;
+    private Integer a8;
+    private Integer p8;
+    private Integer a9;
+    private Integer p9;
+    private Integer a10;
+    private Integer p10;
+    private Integer a11;
+    private Integer p11;
+    private Integer a12;
+    private Integer p12;
+    private Integer a13;
+    private Integer p13;
+    private Integer a14;
+    private Integer p14;
+    private Integer a15;
+    private Integer p15;
+    private Integer a16;
+    private Integer p16;
+    private Integer a17;
+    private Integer p17;
+    private Integer a18;
+    private Integer p18;
+    private Integer a19;
+    private Integer p19;
+    private Integer a20;
+    private Integer p20;
+    private Integer a21;
+    private Integer p21;
+    private Integer a22;
+    private Integer p22;
+    private Integer a23;
+    private Integer p23;
+    private Integer a24;
+    private Integer p24;
+    private Integer a25;
+    private Integer p25;
+    private Integer a26;
+    private Integer p26;
+    private Integer a27;
+    private Integer p27;
+    private Integer a28;
+    private Integer p28;
+    private Integer a29;
+    private Integer p29;
+    private Integer a30;
+    private Integer p30;
+    private Integer a31;
+    private Integer p31;
+
+
+
+
 
     public String getCustid() {
         return custid;
@@ -150,4 +216,500 @@
     public void setCnt9(float cnt9) {
         this.cnt9 = cnt9;
     }
+
+    public Integer getA1() {
+        return a1;
+    }
+
+    public void setA1(Integer a1) {
+        this.a1 = a1;
+    }
+
+    public Integer getP1() {
+        return p1;
+    }
+
+    public void setP1(Integer p1) {
+        this.p1 = p1;
+    }
+
+    public Integer getA2() {
+        return a2;
+    }
+
+    public void setA2(Integer a2) {
+        this.a2 = a2;
+    }
+
+    public Integer getP2() {
+        return p2;
+    }
+
+    public void setP2(Integer p2) {
+        this.p2 = p2;
+    }
+
+    public Integer getA3() {
+        return a3;
+    }
+
+    public void setA3(Integer a3) {
+        this.a3 = a3;
+    }
+
+    public Integer getP3() {
+        return p3;
+    }
+
+    public void setP3(Integer p3) {
+        this.p3 = p3;
+    }
+
+    public Integer getA4() {
+        return a4;
+    }
+
+    public void setA4(Integer a4) {
+        this.a4 = a4;
+    }
+
+    public Integer getP4() {
+        return p4;
+    }
+
+    public void setP4(Integer p4) {
+        this.p4 = p4;
+    }
+
+    public Integer getA5() {
+        return a5;
+    }
+
+    public void setA5(Integer a5) {
+        this.a5 = a5;
+    }
+
+    public Integer getP5() {
+        return p5;
+    }
+
+    public void setP5(Integer p5) {
+        this.p5 = p5;
+    }
+
+    public Integer getA6() {
+        return a6;
+    }
+
+    public void setA6(Integer a6) {
+        this.a6 = a6;
+    }
+
+    public Integer getP6() {
+        return p6;
+    }
+
+    public void setP6(Integer p6) {
+        this.p6 = p6;
+    }
+
+    public Integer getA7() {
+        return a7;
+    }
+
+    public void setA7(Integer a7) {
+        this.a7 = a7;
+    }
+
+    public Integer getP7() {
+        return p7;
+    }
+
+    public void setP7(Integer p7) {
+        this.p7 = p7;
+    }
+
+    public Integer getA8() {
+        return a8;
+    }
+
+    public void setA8(Integer a8) {
+        this.a8 = a8;
+    }
+
+    public Integer getP8() {
+        return p8;
+    }
+
+    public void setP8(Integer p8) {
+        this.p8 = p8;
+    }
+
+    public Integer getA9() {
+        return a9;
+    }
+
+    public void setA9(Integer a9) {
+        this.a9 = a9;
+    }
+
+    public Integer getP9() {
+        return p9;
+    }
+
+    public void setP9(Integer p9) {
+        this.p9 = p9;
+    }
+
+    public Integer getA10() {
+        return a10;
+    }
+
+    public void setA10(Integer a10) {
+        this.a10 = a10;
+    }
+
+    public Integer getP10() {
+        return p10;
+    }
+
+    public void setP10(Integer p10) {
+        this.p10 = p10;
+    }
+
+    public Integer getA11() {
+        return a11;
+    }
+
+    public void setA11(Integer a11) {
+        this.a11 = a11;
+    }
+
+    public Integer getP11() {
+        return p11;
+    }
+
+    public void setP11(Integer p11) {
+        this.p11 = p11;
+    }
+
+    public Integer getA12() {
+        return a12;
+    }
+
+    public void setA12(Integer a12) {
+        this.a12 = a12;
+    }
+
+    public Integer getP12() {
+        return p12;
+    }
+
+    public void setP12(Integer p12) {
+        this.p12 = p12;
+    }
+
+    public Integer getA13() {
+        return a13;
+    }
+
+    public void setA13(Integer a13) {
+        this.a13 = a13;
+    }
+
+    public Integer getP13() {
+        return p13;
+    }
+
+    public void setP13(Integer p13) {
+        this.p13 = p13;
+    }
+
+    public Integer getA14() {
+        return a14;
+    }
+
+    public void setA14(Integer a14) {
+        this.a14 = a14;
+    }
+
+    public Integer getP14() {
+        return p14;
+    }
+
+    public void setP14(Integer p14) {
+        this.p14 = p14;
+    }
+
+    public Integer getA15() {
+        return a15;
+    }
+
+    public void setA15(Integer a15) {
+        this.a15 = a15;
+    }
+
+    public Integer getP15() {
+        return p15;
+    }
+
+    public void setP15(Integer p15) {
+        this.p15 = p15;
+    }
+
+    public Integer getA16() {
+        return a16;
+    }
+
+    public void setA16(Integer a16) {
+        this.a16 = a16;
+    }
+
+    public Integer getP16() {
+        return p16;
+    }
+
+    public void setP16(Integer p16) {
+        this.p16 = p16;
+    }
+
+    public Integer getA17() {
+        return a17;
+    }
+
+    public void setA17(Integer a17) {
+        this.a17 = a17;
+    }
+
+    public Integer getP17() {
+        return p17;
+    }
+
+    public void setP17(Integer p17) {
+        this.p17 = p17;
+    }
+
+    public Integer getA18() {
+        return a18;
+    }
+
+    public void setA18(Integer a18) {
+        this.a18 = a18;
+    }
+
+    public Integer getP18() {
+        return p18;
+    }
+
+    public void setP18(Integer p18) {
+        this.p18 = p18;
+    }
+
+    public Integer getA19() {
+        return a19;
+    }
+
+    public void setA19(Integer a19) {
+        this.a19 = a19;
+    }
+
+    public Integer getP19() {
+        return p19;
+    }
+
+    public void setP19(Integer p19) {
+        this.p19 = p19;
+    }
+
+    public Integer getA20() {
+        return a20;
+    }
+
+    public void setA20(Integer a20) {
+        this.a20 = a20;
+    }
+
+    public Integer getP20() {
+        return p20;
+    }
+
+    public void setP20(Integer p20) {
+        this.p20 = p20;
+    }
+
+    public Integer getA21() {
+        return a21;
+    }
+
+    public void setA21(Integer a21) {
+        this.a21 = a21;
+    }
+
+    public Integer getP21() {
+        return p21;
+    }
+
+    public void setP21(Integer p21) {
+        this.p21 = p21;
+    }
+
+    public Integer getA22() {
+        return a22;
+    }
+
+    public void setA22(Integer a22) {
+        this.a22 = a22;
+    }
+
+    public Integer getP22() {
+        return p22;
+    }
+
+    public void setP22(Integer p22) {
+        this.p22 = p22;
+    }
+
+    public Integer getA23() {
+        return a23;
+    }
+
+    public void setA23(Integer a23) {
+        this.a23 = a23;
+    }
+
+    public Integer getP23() {
+        return p23;
+    }
+
+    public void setP23(Integer p23) {
+        this.p23 = p23;
+    }
+
+    public Integer getA24() {
+        return a24;
+    }
+
+    public void setA24(Integer a24) {
+        this.a24 = a24;
+    }
+
+    public Integer getP24() {
+        return p24;
+    }
+
+    public void setP24(Integer p24) {
+        this.p24 = p24;
+    }
+
+    public Integer getA25() {
+        return a25;
+    }
+
+    public void setA25(Integer a25) {
+        this.a25 = a25;
+    }
+
+    public Integer getP25() {
+        return p25;
+    }
+
+    public void setP25(Integer p25) {
+        this.p25 = p25;
+    }
+
+    public Integer getA26() {
+        return a26;
+    }
+
+    public void setA26(Integer a26) {
+        this.a26 = a26;
+    }
+
+    public Integer getP26() {
+        return p26;
+    }
+
+    public void setP26(Integer p26) {
+        this.p26 = p26;
+    }
+
+    public Integer getA27() {
+        return a27;
+    }
+
+    public void setA27(Integer a27) {
+        this.a27 = a27;
+    }
+
+    public Integer getP27() {
+        return p27;
+    }
+
+    public void setP27(Integer p27) {
+        this.p27 = p27;
+    }
+
+    public Integer getA28() {
+        return a28;
+    }
+
+    public void setA28(Integer a28) {
+        this.a28 = a28;
+    }
+
+    public Integer getP28() {
+        return p28;
+    }
+
+    public void setP28(Integer p28) {
+        this.p28 = p28;
+    }
+
+    public Integer getA29() {
+        return a29;
+    }
+
+    public void setA29(Integer a29) {
+        this.a29 = a29;
+    }
+
+    public Integer getP29() {
+        return p29;
+    }
+
+    public void setP29(Integer p29) {
+        this.p29 = p29;
+    }
+
+    public Integer getA30() {
+        return a30;
+    }
+
+    public void setA30(Integer a30) {
+        this.a30 = a30;
+    }
+
+    public Integer getP30() {
+        return p30;
+    }
+
+    public void setP30(Integer p30) {
+        this.p30 = p30;
+    }
+
+    public Integer getA31() {
+        return a31;
+    }
+
+    public void setA31(Integer a31) {
+        this.a31 = a31;
+    }
+
+    public Integer getP31() {
+        return p31;
+    }
+
+    public void setP31(Integer p31) {
+        this.p31 = p31;
+    }
 }
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 0cc130e..24d1b15 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/controller/CustAtteController.java
@@ -1102,4 +1102,123 @@
         return map;
     }
 
+    /**
+     *  新考勤报表 （按月）
+     */
+    @GetMapping("/newreport/index")
+    public String newreportindex(){
+        return "atte/newreport/index";
+    }
+
+    @ResponseBody
+    @RequestMapping(value="/newreport/prepare")
+    public Map policerepostlistpre(HttpServletRequest request,
+                                   HttpServletResponse response,
+                                   @RequestBody AttedtlSearchBean searchBean,
+                                   @AuthenticationPrincipal TOperator operUser) {
+
+        Map map=new HashMap();
+        try {
+            String opertype=operUser.getOpertype();
+            List<TCustType> custtypelist=systemService.findAllCusttype();
+
+            map.put("custtypelist",custtypelist);
+            List<TDept> deptlist=systemService.findAllDept();
+            map.put("deptlist",deptlist);
+            map.put("operator",operUser);
+        }catch (Exception e) {
+            e.printStackTrace();
+            log.error("查询新考勤规则失败：" + e.getMessage());
+        }
+        return map;
+    }
+    @ResponseBody
+    @RequestMapping(value="/newreport/list")
+    public Map newreportlist(HttpServletRequest request,
+                                HttpServletResponse response,
+                                @RequestParam(value = "pageNo", required = false, defaultValue = "1") int pageNo,
+                                @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize,
+                                @RequestParam(value = "startdate") String  startdate,
+                                @RequestParam(value = "enddate") String  enddate,
+                                @RequestBody AttedtlSearchBean searchBean,
+                                @AuthenticationPrincipal TOperator operUser) {
+        searchBean.setStartdate(startdate);
+        searchBean.setEnddate(enddate);
+        Map map=new HashMap();
+        try {
+            Pagination page=null;
+            String opertype=operUser.getOpertype();
+            String deptcode=operUser.getDeptcode();
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
+                deptcode=null;
+            }else {
+                if(StringUtil.isEmpty(deptcode)){
+                    deptcode="-99";
+                }
+            }
+            searchBean.setDeptcode(deptcode);
+            page=atteClassService.getNewReportWithPage(searchBean,pageNo,pageSize);
+            map.put("PageResult",page);
+            List<TCustType> custtypelist=systemService.findAllCusttype();
+            map.put("custtypelist",custtypelist);
+            List<TDept> deptlist=systemService.findAllDept();
+            map.put("deptlist",deptlist);
+            map.put("operator",operUser);
+        }catch (Exception e) {
+            e.printStackTrace();
+            log.error("查询考勤规则失败：" + e.getMessage());
+        }
+        return map;
+    }
+
+    @GetMapping("/print/printnewreport")
+    public String printLaborCountnew(@ModelAttribute("searchBean") AttedtlSearchBean searchBean,
+                                  @RequestParam(value = "opercode",required = false) String opercode,ModelMap map) {
+        try {
+            TOperator operUser=managerService.getOperatorByOpercode(opercode);
+            String opertype=operUser.getOpertype();
+            String deptcode=operUser.getDeptcode();
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
+                deptcode=null;
+            }else {
+                if(StringUtil.isEmpty(deptcode)){
+                    deptcode="-99";
+                }
+            }
+            List<TDept> deptlist=systemService.findAllDept();
+            TDept tdept=null;
+            for(TDept dept:deptlist){
+                if(dept.getDeptcode().equals(deptcode)){
+                    tdept=dept;
+                }
+            }
+            map.addAttribute("deptname", tdept == null ? " " :tdept.getDeptname());
+            map.addAttribute("startdate",DateUtil.reformatDatetime(searchBean.getStartdate(),"yyyyMMdd","yyyy-MM-dd"));
+            map.addAttribute("enddate",DateUtil.reformatDatetime(searchBean.getEnddate(),"yyyyMMdd","yyyy-MM-dd"));
+            searchBean.setDeptcode(deptcode);
+            List<AtteReport> list=atteClassService.getNewReportList(searchBean);
+            map.addAttribute("showlist", list);
+            if(list!=null&&list.size()>0){
+                Sum sum=new Sum();
+                for(AtteReport report:list){
+                    sum.setCnt1(sum.getCnt1()+report.getCnt1());
+                    sum.setCnt2(sum.getCnt2()+report.getCnt2());
+                    sum.setCnt3(sum.getCnt3()+report.getCnt3());
+                    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);
+            }
+            map.addAttribute("opername", operUser == null ? "unknow" : operUser.getOpername());
+            map.addAttribute("printdatetime",DateUtil.reformatDatetime(systemUtilService.getSysdatetime().getHostdatetime(),DateUtil.DATETIME_FMT,"yyyy-MM-dd HH:mm:ss"));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "atte/report/print/newreportindex";
+    }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/AtteClassDao.java b/src/main/java/com/supwisdom/dlpay/atte/dao/AtteClassDao.java
index 27c65d7..69455c2 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/dao/AtteClassDao.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/AtteClassDao.java
@@ -82,5 +82,7 @@
             String startTranDate, String endTranDate,String startTranTime, String endTranTime,String cardno,
             String custname,String buildingid,String devname,String streamstatus,int pageNo,int pageSize,String regionid);
 
-
+    //
+    public Pagination getNewReportWithPage(AttedtlSearchBean searchBean,int pageNo,int pageSize);
+    public List<AtteReport> getNewReportList(AttedtlSearchBean searchBean);
 }
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 97fe433..018928b 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
@@ -1081,4 +1081,274 @@
         }
         return 0;
     }
+
+
+    @Override
+    public Pagination getNewReportWithPage(AttedtlSearchBean searchBean, int pageNo, int pageSize) {
+        StringBuffer sql=new StringBuffer();
+        sql.append(" with aa as (select v.*,substr(v.attedate,7) as ad 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  ")
+                .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 ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustname())){
+            sql.append("  and v.custname like :cname ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+            sql.append("  and v.custtypeid = :ctypeid ");
+        }
+        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 ");
+        }
+        sql.append(" ),  ");
+        sql.append("  bb as (select count(custid)/2.0 cnts,custid,custname,deptcode,custtypeid from aa group by custid,custname,deptcode,custtypeid ), ")
+                .append("cc as (select custid,sum(case when (apflag=1 and ad = '01') then state else null end ) as a1\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '01' then state else null end ) as p1\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '02' then state else null end ) as a2\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '02' then state else null end ) as p2\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '03' then state else null end ) as a3\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '03' then state else null end ) as p3\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '04' then state else null end ) as a4\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '04' then state else null end ) as p4\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '05' then state else null  end) as a5\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '05' then state else null  end) as p5\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '06' then state else null  end) as a6\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '06' then state else null  end) as p6\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '07' then state else null end ) as a7\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '07' then state else null  end) as p7\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '08' then state else null end ) as a8\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '08' then state else null  end) as p8\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '09' then state else null  end) as a9\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '09' then state else null  end) as p9\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '10' then state else null  end) as a10\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '10' then state else null  end) as p10\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '11' then state else null  end) as a11\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '11' then state else null  end) as p11\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '12' then state else null  end) as a12\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '12' then state else null  end) as p12\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '13' then state else null  end) as a13\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '13' then state else null  end) as p13\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '14' then state else null  end) as a14\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '14' then state else null  end) as p14\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '15' then state else null  end) as a15\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '15' then state else null  end) as p15\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '16' then state else null  end) as a16\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '16' then state else null  end) as p16\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '17' then state else null  end) as a17\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '17' then state else null  end) as p17\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '18' then state else null  end) as a18\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '18' then state else null end ) as p18\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '19' then state else null end ) as a19\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '19' then state else null end ) as p19\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '20' then state else null end ) as a20\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '20' then state else null  end) as p20\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '21' then state else null  end) as a21\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '21' then state else null  end) as p21\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '22' then state else null  end) as a22\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '22' then state else null  end) as p22\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '23' then state else null  end) as a23\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '23' then state else null  end) as p23\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '24' then state else null  end) as a24\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '24' then state else null  end) as p24\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '25' then state else null  end) as a25\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '25' then state else null  end) as p25\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '26' then state else null  end) as a26\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '26' then state else null  end) as p26\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '27' then state else null  end) as a27\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '27' then state else null  end) as p27\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '28' then state else null  end) as a28\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '28' then state else null  end) as p28\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '29' then state else null  end) as a29\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '29' then state else null  end) as p29\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '30' then state else null  end) as a30\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '30' then state else null  end) as p30\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '31' then state else null  end) as a31\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '31' then state else null  end) as p31 ")
+                .append(" from aa group by aa.custid ),")
+                .append(" dd as (select count(aa.custid)/2.0 cnt,state,custid  from aa group by aa.custid,aa.state), ")
+                .append(" ee as (select  custid,0 cnt5,\n" +
+                        "\t\t\t\t\tsum(case when state=1   then cnt else 0  end) as cnt1\n" +
+                        "\t\t\t\t\t,sum(case when state=2   then cnt else 0  end) as cnt2\n" +
+                        "\t\t\t\t\t,sum(case when state=3   then cnt else 0  end) as cnt3\n" +
+                        "\t\t\t\t\t,sum(case when state=0   then cnt else 0  end) as cnt4\n" +
+                        "\t\t\t\t\t,sum(case when state=7   then cnt else 0  end) as cnt7\n" +
+                        "\t\t\t\t\t,sum(case when state=8   then cnt else 0  end) as cnt8\n" +
+                        "\t\t\t\t\t,sum(case when state=9   then cnt else 0  end) as cnt9\n" +
+                        "\t      from dd group by dd.custid )")
+                .append(" select bb.custid,bb.custname,c.cardno,ct.custtypeid,d.deptcode,ct.custtypename,d.deptname,bb.cnts,cc.*,ee.*\n" +
+                        "                 from bb left join t_card c on ( bb.custid=c.custid and c.status='normal' and c.transtatus='normal' ) \n" +
+                        "                 left join tb_custtype ct on bb.custtypeid=ct.custtypeid  \n" +
+                        "                 left join tb_dept d on bb.deptcode=d.deptcode \n" +
+                        "                 left join cc on cc.custid=bb.custid\n" +
+                        "                 left join ee on bb.custid=ee.custid\n" +
+                        "                 order by d.deptcode desc ,ct.custtypeid desc ");
+        Query query=entityManager.createNativeQuery(sql.toString(), AtteReport.class);
+
+        if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
+            query.setParameter("sdate",searchBean.getStartdate());
+            query.setParameter("edate",searchBean.getEnddate());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustname())){
+            query.setParameter("cname","%"+searchBean.getCustname()+"%");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+            query.setParameter("ctypeid",Integer.parseInt(searchBean.getCusttypeid()));
+        }
+        if(!StringUtil.isEmpty(searchBean.getDeptcode())){
+            query.setParameter("dcode",searchBean.getDeptcode());
+        }
+        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);
+        Pagination page = new Pagination();
+        page.setPageNo(pageNo);
+        page.setPageSize(pageSize);
+        List<AtteReport> list=query.getResultList();
+        page.setList(list);
+        int totalCount= getPReportCount(searchBean);
+        page.setTotalCount(totalCount);
+        return page;
+    }
+
+    @Override
+    public List<AtteReport> getNewReportList(AttedtlSearchBean searchBean) {
+        StringBuffer sql=new StringBuffer();
+        sql.append(" with aa as (select v.*,substr(v.attedate,7) as ad 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  ")
+                .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 ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustname())){
+            sql.append("  and v.custname like :cname ");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+            sql.append("  and v.custtypeid = :ctypeid ");
+        }
+        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 ");
+        }
+        sql.append(" ),  ");
+        sql.append("  bb as (select count(custid)/2.0 cnts,custid,custname,deptcode,custtypeid from aa group by custid,custname,deptcode,custtypeid ), ")
+                .append("cc as (select custid,sum(case when (apflag=1 and ad = '01') then state else null end ) as a1\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '01' then state else null end ) as p1\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '02' then state else null end ) as a2\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '02' then state else null end ) as p2\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '03' then state else null end ) as a3\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '03' then state else null end ) as p3\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '04' then state else null end ) as a4\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '04' then state else null end ) as p4\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '05' then state else null  end) as a5\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '05' then state else null  end) as p5\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '06' then state else null  end) as a6\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '06' then state else null  end) as p6\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '07' then state else null end ) as a7\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '07' then state else null  end) as p7\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '08' then state else null end ) as a8\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '08' then state else null  end) as p8\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '09' then state else null  end) as a9\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '09' then state else null  end) as p9\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '10' then state else null  end) as a10\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '10' then state else null  end) as p10\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '11' then state else null  end) as a11\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '11' then state else null  end) as p11\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '12' then state else null  end) as a12\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '12' then state else null  end) as p12\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '13' then state else null  end) as a13\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '13' then state else null  end) as p13\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '14' then state else null  end) as a14\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '14' then state else null  end) as p14\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '15' then state else null  end) as a15\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '15' then state else null  end) as p15\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '16' then state else null  end) as a16\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '16' then state else null  end) as p16\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '17' then state else null  end) as a17\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '17' then state else null  end) as p17\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '18' then state else null  end) as a18\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '18' then state else null end ) as p18\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '19' then state else null end ) as a19\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '19' then state else null end ) as p19\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '20' then state else null end ) as a20\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '20' then state else null  end) as p20\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '21' then state else null  end) as a21\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '21' then state else null  end) as p21\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '22' then state else null  end) as a22\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '22' then state else null  end) as p22\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '23' then state else null  end) as a23\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '23' then state else null  end) as p23\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '24' then state else null  end) as a24\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '24' then state else null  end) as p24\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '25' then state else null  end) as a25\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '25' then state else null  end) as p25\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '26' then state else null  end) as a26\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '26' then state else null  end) as p26\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '27' then state else null  end) as a27\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '27' then state else null  end) as p27\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '28' then state else null  end) as a28\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '28' then state else null  end) as p28\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '29' then state else null  end) as a29\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '29' then state else null  end) as p29\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '30' then state else null  end) as a30\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '30' then state else null  end) as p30\n" +
+                        "\t\t\t\t\t,sum(case when apflag=1 and ad = '31' then state else null  end) as a31\n" +
+                        "\t\t\t\t\t,sum(case when apflag=2 and ad = '31' then state else null  end) as p31 ")
+                .append(" from aa group by aa.custid ),")
+                .append(" dd as (select count(aa.custid)/2.0 cnt,state,custid  from aa group by aa.custid,aa.state), ")
+                .append(" ee as (select  custid,0 cnt5,\n" +
+                        "\t\t\t\t\tsum(case when state=1   then cnt else 0  end) as cnt1\n" +
+                        "\t\t\t\t\t,sum(case when state=2   then cnt else 0  end) as cnt2\n" +
+                        "\t\t\t\t\t,sum(case when state=3   then cnt else 0  end) as cnt3\n" +
+                        "\t\t\t\t\t,sum(case when state=0   then cnt else 0  end) as cnt4\n" +
+                        "\t\t\t\t\t,sum(case when state=7   then cnt else 0  end) as cnt7\n" +
+                        "\t\t\t\t\t,sum(case when state=8   then cnt else 0  end) as cnt8\n" +
+                        "\t\t\t\t\t,sum(case when state=9   then cnt else 0  end) as cnt9\n" +
+                        "\t      from dd group by dd.custid )")
+                .append(" select bb.custid,bb.custname,c.cardno,ct.custtypeid,d.deptcode,ct.custtypename,d.deptname,bb.cnts,cc.*,ee.*\n" +
+                        "                 from bb left join t_card c on ( bb.custid=c.custid and c.status='normal' and c.transtatus='normal' ) \n" +
+                        "                 left join tb_custtype ct on bb.custtypeid=ct.custtypeid  \n" +
+                        "                 left join tb_dept d on bb.deptcode=d.deptcode \n" +
+                        "\t\t\t\t  left join cc on cc.custid=bb.custid\n" +
+                        "        left join ee on bb.custid=ee.custid\n" +
+                        "                 order by d.deptcode desc ,ct.custtypeid desc ");
+        Query query=entityManager.createNativeQuery(sql.toString(), AtteReport.class);
+
+        if(!StringUtil.isEmpty(searchBean.getStartdate())&&!StringUtil.isEmpty(searchBean.getEnddate())){
+            query.setParameter("sdate",searchBean.getStartdate());
+            query.setParameter("edate",searchBean.getEnddate());
+        }
+        if(!StringUtil.isEmpty(searchBean.getCustname())){
+            query.setParameter("cname","%"+searchBean.getCustname()+"%");
+        }
+        if(!StringUtil.isEmpty(searchBean.getCusttypeid())){
+            query.setParameter("ctypeid",Integer.parseInt(searchBean.getCusttypeid()));
+        }
+        if(!StringUtil.isEmpty(searchBean.getDeptcode())){
+            query.setParameter("dcode",searchBean.getDeptcode());
+        }
+        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/service/AtteClassService.java b/src/main/java/com/supwisdom/dlpay/atte/service/AtteClassService.java
index fb39b27..ad63dd1 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/service/AtteClassService.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/AtteClassService.java
@@ -101,4 +101,10 @@
      public Pagination findSystemTDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String cardno,
                                           String custname, String buildingid, String devname, String streamstatus, int pageNo, int pageSize,String regionid);
 
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public Pagination getNewReportWithPage(AttedtlSearchBean searchBean,int pageNo,int pageSize);
+
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public List<AtteReport> getNewReportList(AttedtlSearchBean searchBean);
+
 }
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 33d6443..fae9504 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
@@ -576,4 +576,14 @@
     public Pagination findSystemTDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String cardno, String custname, String buildingid, String devname, String streamstatus, int pageNo, int pageSize, String regionid) {
         return atteClassDao.findSystemTDoordtl(startTranDate, endTranDate, startTranTime, endTranTime, cardno, custname, buildingid, devname, streamstatus, pageNo, pageSize, regionid);
     }
+
+    @Override
+    public Pagination getNewReportWithPage(AttedtlSearchBean searchBean, int pageNo, int pageSize) {
+        return atteClassDao.getNewReportWithPage(searchBean,pageNo,pageSize);
+    }
+
+    @Override
+    public List<AtteReport> getNewReportList(AttedtlSearchBean searchBean) {
+        return atteClassDao.getNewReportList(searchBean);
+    }
 }
diff --git a/src/main/resources/templates/atte/newreport/index.html b/src/main/resources/templates/atte/newreport/index.html
new file mode 100644
index 0000000..2cd476f
--- /dev/null
+++ b/src/main/resources/templates/atte/newreport/index.html
@@ -0,0 +1,839 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">考勤报表</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">人员考勤</a>
+          <a><cite>考勤报表</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body" >
+        <div id="polreportapp">
+            <el-form :inline="true" ref="preportform" :model="preportform" data-parsley-validate class="form-horizontal form-label-left">
+                <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-date-picker style="width: 100%"
+                                    v-model="preportform.startdate" type="date"
+                                    placeholder="选择日期" :editable="false"  value-format="yyyyMMdd">
+                            </el-date-picker>
+                        </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-date-picker style="width: 100%"
+                                    v-model="preportform.enddate" type="date"
+                                    placeholder="选择日期" :editable="false"  value-format="yyyyMMdd">
+                            </el-date-picker>
+                        </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-input v-model="preportform.cardno" placeholder="输入%模糊查询"></el-input>
+                        </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-input v-model="preportform.custname" ></el-input>
+                        </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="preportform.custtypeid" style="width:100%;" clearable filterable placeholder="请选择">
+                                <el-option
+                                        v-for="custtypeid in typegrplist"
+                                        :key="custtypeid.value"
+                                        :label="custtypeid.label"
+                                        :value="custtypeid.value">
+                                </el-option>
+                            </el-select>
+                        </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="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">
+                        <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">
+                        <button type="button" class="btn btn-info" @click="query" id="attedtl_qrybtn">查看报表</button>
+                        <button type="button" class="btn btn-info" @click="print" id="print_preport">打印</button>
+                        </div>
+                    </div>
+                </div>
+            </el-form>
+
+            <template>
+                <el-table
+                        ref="singleTable"
+                        :data="tableData"
+                        highlight-current-row
+                        @current-change="currRowChange"
+                        stripe
+                        border
+                        max-height="2000"
+                        style="width: 100%">
+
+                    <el-table-column
+                            prop="custname"
+                            label="姓名"
+                            sortable
+                           >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cardno"
+                            label="卡号"
+                            sortable
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="custtypename"
+                            label="人员类别"
+                           >
+                    </el-table-column>
+                    <el-table-column
+                            prop="deptname"
+                            label="部门"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cnt1"
+                            label="正常(天)"
+
+                            >
+                    </el-table-column>
+                        <el-table-column
+                                prop="cnt2"
+                                label="异常(天)"
+                        >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cnt3"
+                            label="请假(天)"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="cnt4"
+                            label="旷工(天)"
+                    >
+                    </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="总考勤天数"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="a1"
+                            label="1(am)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="p1"
+                            label="1(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="a2"
+                            label="2(am)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="p2"
+                            label="2(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="a3"
+                            label="3(am)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="p3"
+                            label="3(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="a4"
+                            label="4(am)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="p4"
+                            label="4(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="a5"
+                            label="5(am)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="p5"
+                            label="5(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="a6"
+                            label="6(am)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="p6"
+                            label="6(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="a7"
+                            label="7(am)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="p7"
+                            label="7(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="a8"
+                            label="8(am)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="p9"
+                            label="9(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="a10"
+                            label="10(am)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="p10"
+                            label="10(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="a11"
+                            label="11(am)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="p11"
+                            label="11(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="a12"
+                            label="12(am)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                            prop="p12"
+                            label="12(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column><el-table-column
+                        prop="a13"
+                        label="13(am)"
+                        :formatter="stateTypeform"
+                >
+                </el-table-column>
+                    <el-table-column
+                            prop="p13"
+                            label="13(pm)"
+                            :formatter="stateTypeform"
+                    >
+                    </el-table-column>
+                    <el-table-column
+                        prop="a14"
+                        label="14(am)"
+                        :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p14"
+                            label="14(pm)"
+                            :formatter="stateTypeform" >
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a15"
+                            label="15(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p15"
+                            label="15(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a16"
+                            label="16(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p16"
+                            label="16pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a17"
+                            label="17(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p17"
+                            label="17(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a18"
+                            label="18(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p18"
+                            label="18(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a19"
+                            label="19(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p19"
+                            label="19(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a20"
+                            label="20(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p20"
+                            label="20(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a21"
+                            label="21(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p21"
+                            label="21(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a22"
+                            label="22(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p22"
+                            label="22(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a23"
+                            label="23(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p23"
+                            label="23(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a24"
+                            label="24(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p24"
+                            label="24(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a25"
+                            label="25(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p25"
+                            label="25(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a26"
+                            label="26(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p26"
+                            label="26(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a27"
+                            label="27(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p27"
+                            label="27(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a28"
+                            label="28(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p28"
+                            label="28(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a29"
+                            label="29(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p29"
+                            label="29(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a30"
+                            label="30(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p30"
+                            label="30(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="a31"
+                            label="31(am)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+                    <el-table-column
+                            prop="p31"
+                            label="31(pm)"
+                            :formatter="stateTypeform">
+
+                    </el-table-column>
+
+                </el-table>
+                <div class="clearfix"></div>
+                <el-pagination
+                        @size-change="handleSizeChange"
+                        @current-change="currPageChange"
+                        :current-page="currPage"
+                        :page-sizes="[10, 20, 50, 100]"
+                        :page-size="pageSize"
+                        layout="prev, pager, next,sizes, jumper,total"
+                        :total="totSize">
+                </el-pagination>
+            </template>
+
+        </div>
+
+
+    </div>
+</div>
+
+<script>
+    var newreport_vue = new Vue({
+        el: '#polreportapp',
+        data:{
+            tableData: [],
+            currPage: 1,
+            pageSize:10,
+            totSize:0,
+            currentRow: null,
+            stategrplist:[{value:0,label:'未打卡'},{value:1,label:'正常'},{value:2,label:'异常'},{value:3,label:'请假'},{value:4,label:'旷工'},],
+            preportform:{
+                startdate:Date.now(),
+                enddate:Date.now(),
+                cardno:'',
+                custname:'',
+                custtypeid:'',
+                deptcode:'',
+                dtcode:''
+            },
+            timegrplist:[],
+            typegrplist:[],
+            deptlist:[],
+            dialogFormVisible: false,
+            dlgAllotDevVisible:false,
+            updatetitle:'修改考勤状态',
+            dtlDiaForm:{
+                atteno:'',
+                custname:'',
+                state:'',
+                remark:''
+            },
+            rules: {
+                season: [
+                    { required: true, message: '请输入时令名', trigger: 'blur' },
+                    { min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur'}
+                ],
+
+
+            },
+
+        },
+        methods: {
+            handleSizeChange:function(val) {
+                this.pageSize=val;
+                report_commonQuery(this,this.currPage,val);
+            },
+            currPageChange:function(val) {
+                this.currPage=val;
+                report_commonQuery(this,this.currPage,this.pageSize);
+            },
+            currRowChange:function(val) {
+                this.currentRow = val;
+            },
+
+
+
+            query:function () {
+                this.pagesize=10;
+                this.currPage=1;
+                report_commonQuery(this,this.currPage,this.pageSize);
+            },
+            print:function () {
+                that=this;
+                print(that);
+            },
+            resetForm:function(formName) {
+                this.$refs[formName].resetFields();
+                this.dialogFormVisible = false
+            },
+            closeDialog:function(formName) {
+                this.$refs[formName].resetFields();
+                this.dialogFormVisible = false
+            },
+            stateTypeform:function(row, column, cellValue){
+              //  alert(cellValue)
+                if(cellValue == 0){
+                    return '未打卡';
+                }else if(cellValue == 1){
+                    return '正常';
+                }else if(cellValue == 2){
+                    return '异常';
+                }else if(cellValue == 7){
+                    return '补休';
+                }else if(row.cellValue == 8){
+                    return '外出办公';
+                }else if(cellValue == 9){
+                    return '出差';
+                }else if(cellValue == 11){
+                    return '请假';
+                }else {
+                    return '';
+                }
+
+            },
+        },
+        created:function(){
+            var _self=this;
+            var token=$("meta[name='_csrf_token']").attr("value");
+            var startdate=class_Formatdate(_self.preportform.startdate);
+            var firstdate=startdate.substring(0,4)+"-"+startdate.substring(4,6)+"-"+'01';
+             _self.preportform.startdate=new Date(firstdate);
+           // var enddate=class_Formatdate(_self.preportform.enddate);
+            $.ajax({
+                type:"post",
+                dataType:"json",
+                url:"[[@{/atte/newreport/prepare}]]",
+                contentType: "application/json",
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                    'X-CSRF-TOKEN':token,
+                },
+                data:JSON.stringify(_self.preportform),
+                success:function(ret){
+                    // //console.log(ret);
+                  //  _self.tableData=ret.PageResult.list;
+                    var custtypelist = [];
+                    var types=ret.custtypelist;
+                    for (var i = 0; i < types.length; i++) {
+                        custtypelist.push({
+                            value: types[i].custtypeid,
+                            label: types[i].custtypename
+                        });
+                    }
+                    var deptlist=[];
+                    var depts=ret.deptlist;
+                    for (var i = 0; i < depts.length; i++) {
+                        deptlist.push({
+                            value: depts[i].deptcode,
+                            label: depts[i].deptname
+                        });
+                    }
+                    _self.deptlist=deptlist;
+                    _self.typegrplist=custtypelist;
+                    _self.oper=ret.operator;
+                }
+            })
+        }
+
+    })
+
+
+
+
+
+
+    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;
+    }
+    function report_commonQuery(_self,pageno,pagesize) {
+        var token=$("meta[name='_csrf_token']").attr("value");
+        var startdate=class_Formatdate(_self.preportform.startdate);
+        var enddate=class_Formatdate(_self.preportform.enddate);
+        if(startdate.substring(0,6) != enddate.substring(0,6)){
+            layer.msg("开始日期和结束日期必须属于同一月份！", {icon: 1, time: 1000});
+            return ;
+        }
+
+        var custtypeid=_self.preportform.custtypeid;
+        var custname=_self.preportform.custname;
+        var cardno=_self.preportform.cardno;
+        var dtcode=_self.preportform.dtcode;
+        if(checkEmpty(custtypeid)&&checkEmpty(custname)&&checkEmpty(cardno)&&checkEmpty(dtcode)){
+            layer.msg("姓名丶卡号丶人员类别丶部门四个查询条件至少选择一个！", {icon: 1, time: 2000});
+            return ;
+        }
+        layer.msg("正在生成报表,请稍等！", {icon: 1, time: 5000});
+        $.ajax({
+            type:"post",
+            dataType:"json",
+            url:"[[@{/atte/newreport/list?startdate=}]]"+startdate+"&enddate="+enddate+"&pageNo="+pageno+"&pageSize="+pagesize,
+            contentType: "application/json",
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json',
+                'X-CSRF-TOKEN':token,
+            },
+            data:JSON.stringify(_self.preportform),
+            success:function(ret){
+                _self.totSize=ret.PageResult.totalCount;
+                _self.tableData=ret.PageResult.list;
+                alert(_self.tableData)
+                if(_self.totSize == 0 ){
+                    layer.msg("暂无数据", {icon: 2, time: 1000});
+                }
+
+            }
+        })
+    }
+
+    function dtl_getFillData(_self,row){
+            _self.dtlDiaForm.atteno=row.atteno;
+            _self.dtlDiaForm.custname=row.custname;
+            _self.dtlDiaForm.state=row.state;
+            _self.dtlDiaForm.remark=row.remark;
+    }
+
+    function checkEmpty(str) {
+        if (undefined == str || null == str || "" == str || "" == ("" + str).replace(/ /g, "")) {
+            return true;
+        }
+        return false;
+    }
+    function attedtl_saveData(_that,formName) {
+            var atteno=_that.dtlDiaForm.atteno;
+            var state=_that.dtlDiaForm.state;
+            var remark=_that.dtlDiaForm.remark;
+            if(remark==null){
+                remark='';
+            }
+            var token=$("meta[name='_csrf_token']").attr("value");
+            $.ajax({
+                type: "POST",
+                url: '[[@{/atte/updatetimeDtl?atteno=}]]'+atteno+"&state="+state+"&remark="+remark,
+                dataType: "json",
+                contentType: "application/json",
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                    'X-CSRF-TOKEN':token,
+                },
+                success: function (data) {
+                    if (data.errStr == undefined) {
+                        layer.msg('用户认证已过期，请重新登录', {icon: 2, time: 1000});
+                        window.location = "login";
+                        return;
+                    }
+                    if (data.errStr != "") {
+                        layer.msg(data.errStr, {icon: 2, time: 1000});
+                    } else {
+                        layer.msg('保存信息成功!', {icon: 1, time: 1000});
+                        _that.dialogFormVisible = false;
+                        report_refreshThisTable();
+                        _that.$refs[formName].resetFields();
+                    }
+                }
+            })
+
+    }
+
+    function report_refreshThisTable(){
+        report_commonQuery(newreport_vue,newreport_vue.currPage,newreport_vue.pageSize);
+    };
+    var LODOP;
+    function print(that){
+        layer.msg("正在打印,请稍等！", {icon: 1, time: 1000});
+        var startdate=class_Formatdate(that.preportform.startdate);
+        var enddate=class_Formatdate(that.preportform.enddate);
+        var custtypeid=that.preportform.custtypeid;
+        var custname=that.preportform.custname;
+        var cardno=that.preportform.cardno;
+        var opercode=that.oper.opercode;
+        var dtcode=that.preportform.dtcode;
+        var url = '/atte/print/printnewreport?startdate=' + startdate + '&enddate=' + enddate + '&custtypeid=' + custtypeid + '&custname=' + custname+"&cardno="+cardno+"&opercode="+opercode+"&dtcode="+dtcode;
+
+        LODOP = getLodop();
+        LODOP.PRINT_INIT("考勤报表");
+        LODOP.SET_PRINT_PAGESIZE(2, 0, 0,"A4");
+        LODOP.ADD_PRINT_URL(30, 20, "95%", "90%", encodeURI(url));
+        LODOP.ADD_PRINT_HTM("95%", "48%", 150, 50, "<font style='font-size:12px'><span tdata='pageNO'>##</span>/<span tdata='pageCount'>&nbsp;&nbsp;##</span></font>");
+        LODOP.SET_PRINT_STYLEA(0, "ItemType", 1);
+        LODOP.SET_PRINT_STYLEA(0, "HOrient", 3);
+        LODOP.SET_PRINT_STYLEA(0, "VOrient", 3);
+        LODOP.SET_SHOW_MODE("NP_NO_RESULT", true);
+        LODOP.SET_PRINT_MODE("FULL_WIDTH_FOR_OVERFLOW",true);
+        LODOP.PREVIEW();
+
+    }
+
+
+
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/atte/report/print/newreportindex.html b/src/main/resources/templates/atte/report/print/newreportindex.html
new file mode 100644
index 0000000..9137fe8
--- /dev/null
+++ b/src/main/resources/templates/atte/report/print/newreportindex.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+<head>
+    <meta charset="UTF-8">
+    <title>考勤统计表</title>
+
+    <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}"/>
+    <link rel="stylesheet" th:href="@{/static/custom/css/custom.css}"/>
+</head>
+<body>
+<div class="layui-card">
+    <div class="layui-card-header" style="text-align: center;">
+        <h1>考勤统计表</h1>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            <div style="float: left;padding-left: 3px;font-size:16px" th:text="${'部门：'+deptname}"></div>
+            <div style="float: left;padding-left: 10px;font-size:16px" th:text="${'时间：'+startdate +'至'+ enddate}"></div>
+        </div>
+        <table class="layui-table sw-table sw-print">
+            <thead>
+            <tr>
+                <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>
+                <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>
+            <tbody>
+            <tr th:if="${null==showlist || showlist.size()==0}">
+                <td colspan="13">无数据</td>
+            </tr>
+            <div th:remove="tag" th:if="${null!=showlist && showlist.size()>0}" th:each="data:${showlist}"
+                 >
+
+                <tr >
+                    <td th:text="${data.custname}"></td>
+                    <td th:text="${data.cardno}"></td>
+                    <td th:text="${data.custtypename}"></td>
+                    <td th:text="${data.deptname}"></td>
+                    <td th:text="${data.cnt1}"></td>
+                    <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>
+
+            </div>
+            <div th:if="${null!=sum}">
+                <tr>
+                    <td colspan="4" >合计：</td>
+                    <td th:text="${sum.cnt1}"></td>
+                    <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>
+            </tbody>
+        </table>
+        <!--<div class="layui-form toolbar">-->
+            <!--<div style="float: left;padding-left: 3px;" th:text="${'制表人：'+opername+' &nbsp;&nbsp; '+ printdatetime}"></div>-->
+        <!--</div>-->
+    </div>
+    <div class="layui-card-body" style="margin-top: 25px;">
+    <div class="col-sm-12">
+        <table width="100%">
+            <tr style="height: 25px;">
+                <td width="12%" style="text-align: right;padding-right: 5px;"></td>
+                <td width="18%"
+                    style="text-align: left;" ></td>
+                <td width="5%">&nbsp;</td>
+                <td width="12%" style="text-align: right;padding-right: 5px;">制表人：</td>
+                <td width="18%"
+                    style="text-align: left;border-bottom: 1px solid #666;" th:text="${opername}"></td>
+                <td width="5%">&nbsp;</td>
+                <td width="12%" style="text-align: right;padding-right: 5px;">制表日期：</td>
+                <td width="18%"
+                    style="text-align: left;border-bottom: 1px solid #666;" th:text="${printdatetime}">
+                </td>
+            </tr>
+            <tr style="height: 25px;"></tr>
+            <tr style="height: 25px;">
+                <td width="12%" style="text-align: right;padding-right: 5px;"></td>
+                <td width="18%"
+                    style="text-align: left;" ></td>
+                <td width="5%">&nbsp;</td>
+                <td width="12%" style="text-align: right;padding-right: 5px;">审核人签字：</td>
+                <td width="18%"
+                    style="text-align: left;border-bottom: 1px solid #666;"></td>
+                <td width="5%">&nbsp;</td>
+                <td width="12%" style="text-align: right;padding-right: 5px;">盖章：</td>
+                <td width="18%"
+                    style="text-align: left;border-bottom: 1px solid #666;">
+                </td>
+            </tr>
+        </table>
+    </div>
+    </div>
+</div>
+</body>
+</html>
\ No newline at end of file
