考勤新报表
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