diff --git a/src/main/java/com/supwisdom/dlpay/conference/bean/ConfReportShowBean.java b/src/main/java/com/supwisdom/dlpay/conference/bean/ConfReportShowBean.java
index b93d495..ebb7e81 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/bean/ConfReportShowBean.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/bean/ConfReportShowBean.java
@@ -8,6 +8,8 @@
     private String attendtime;
     private String timeperoid;
     private String attendrate;
+    private String actualcnt;
+    private String totcnt;
 
     public Integer getConfid() {
         return confid;
@@ -66,4 +68,20 @@
     public void setAttendtime(String attendtime) {
         this.attendtime = attendtime;
     }
+
+    public String getActualcnt() {
+        return actualcnt;
+    }
+
+    public void setActualcnt(String actualcnt) {
+        this.actualcnt = actualcnt;
+    }
+
+    public String getTotcnt() {
+        return totcnt;
+    }
+
+    public void setTotcnt(String totcnt) {
+        this.totcnt = totcnt;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/controller/ConfReportController.java b/src/main/java/com/supwisdom/dlpay/conference/controller/ConfReportController.java
index 5dbeb2e..a77c228 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/controller/ConfReportController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/controller/ConfReportController.java
@@ -12,16 +12,19 @@
 import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
 import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.WebConstant;
 import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
+import com.supwisdom.dlpay.system.service.ManagerService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.annotation.AuthenticationPrincipal;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -35,14 +38,17 @@
     @Autowired
     private ConferenceService conferenceService;
     @Autowired
-    private WebInterfaceService webInterfaceService;
+    private SystemUtilService systemUtilService;
+    @Autowired
+    private ManagerService managerService;
 
 
     @GetMapping("/confreport/index")
-    public String ConferenceView(Model model) {
+    public String ConferenceView( @AuthenticationPrincipal UserDetails operUser,Model model) {
         String today = DateUtil.getNow("yyyy-MM-dd");
-
-        model.addAttribute("confDate", today);
+        model.addAttribute("startdate", today);
+        TOperator oper = (TOperator) operUser;
+        model.addAttribute("opercode", oper.getOpercode());
         return "confreport/index";
     }
 
@@ -52,7 +58,8 @@
                                                            @RequestParam("limit") Integer pageSize,
                                                            @RequestParam(value = "confname", required = false) String confname,
                                                            @RequestParam(value = "conftype", required = false) String conftype,
-                                                           @RequestParam(value = "confdate", required = false) String confdate,
+                                                           @RequestParam(value = "startdate", required = false) String startdate,
+                                                           @RequestParam(value = "enddate", required = false) String enddate,
                                                            @AuthenticationPrincipal UserDetails operUser,
                                                            Model model) {
         try {
@@ -61,12 +68,16 @@
             TOperator oper = (TOperator) operUser;
             String deptcode = oper.getDeptcode();
             String status = ConferenceConstant.CONFSTATUS_OVER;
-            String date="";
-            if(!StringUtil.isEmpty(confdate)){
-                date=DateUtil.reformatDatetime(confdate,"yyyy-MM-dd","yyyyMMdd");
+            String stdate="";
+            String eddate="";
+            if(!StringUtil.isEmpty(startdate)){
+                stdate=DateUtil.reformatDatetime(startdate,"yyyy-MM-dd","yyyyMMdd");
+            }
+            if(!StringUtil.isEmpty(enddate)){
+                eddate=DateUtil.reformatDatetime(enddate,"yyyy-MM-dd","yyyyMMdd");
             }
 
-            return conferenceService.getConfReportPage(confname, conftype, deptcode, date, status, pageNo, pageSize);
+            return conferenceService.getConfReportPage(confname, conftype, deptcode, stdate,eddate, status, pageNo, pageSize);
         } catch (Exception e) {
             e.printStackTrace();
             return new PageResult<>(99, "系统查询错误");
@@ -108,4 +119,36 @@
             return new PageResult<>(99, "系统查询错误");
         }
     }
+
+    @GetMapping("/confreport/print")
+    public String printReport( @RequestParam(value = "confname", required = false) String confname,
+                                  @RequestParam(value = "conftype", required = false) String conftype,
+                                  @RequestParam(value = "startdate", required = false) String startdate,
+                                  @RequestParam(value = "enddate", required = false) String enddate,
+                               @RequestParam(value = "opercode",required = false) String opercode,
+                               ModelMap model) {
+        TOperator oper=managerService.getOperatorByOpercode(opercode);
+
+        String deptcode = oper.getDeptcode();
+        String status = ConferenceConstant.CONFSTATUS_OVER;
+        String stdate="";
+        String eddate="";
+        if(!StringUtil.isEmpty(startdate)){
+            stdate=DateUtil.reformatDatetime(startdate,"yyyy-MM-dd","yyyyMMdd");
+        }
+        if(!StringUtil.isEmpty(enddate)){
+            eddate=DateUtil.reformatDatetime(enddate,"yyyy-MM-dd","yyyyMMdd");
+        }
+        PageResult<ConfReportShowBean> page=conferenceService.getConfReportPage(confname, conftype, deptcode, stdate,eddate, status, 1, 100);
+
+        model.addAttribute("startdate", startdate);
+        model.addAttribute("enddate", enddate);
+        model.addAttribute("showlist",page.getData());
+        model.addAttribute("opername", oper == null ? "unknow" : oper.getOpername());
+        model.addAttribute("printdatetime",DateUtil.reformatDatetime(systemUtilService.getSysdatetime().getHostdatetime(),DateUtil.DATETIME_FMT,"yyyy-MM-dd HH:mm:ss"));
+
+
+        return "confreport/print/printindex";
+    }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
index 8f1dd95..73cd92f 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
@@ -23,7 +23,7 @@
     PageResult<ConferenceShowBean> getConferenceInfos(String confname, String conftype,String deptocde,String confdate, int pageNo, int pageSize);
 
     @Transactional(rollbackFor = Exception.class, readOnly = true)
-    PageResult<ConfReportShowBean> getConfReportPage(String confname, String conftype, String deptcode, String confdate,String status, int pageNo, int pageSize);
+    PageResult<ConfReportShowBean> getConfReportPage(String confname, String conftype, String deptcode, String startdate,String enddate,String status, int pageNo, int pageSize);
 
     @Transactional(rollbackFor = Exception.class)
     boolean deleteConference(int confid) throws Exception;
diff --git a/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
index 56b4af9..82df227 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
@@ -75,7 +75,7 @@
 
     @Override
     public PageResult<ConferenceShowBean> getConferenceInfos(String confname, String conftype,String deptcode,String confdate, int pageNo, int pageSize) {
-        Page<TConference> page = getConferencePage(confname, conftype, deptcode, confdate,"", pageNo, pageSize);
+        Page<TConference> page = getConferencePage(confname, conftype, deptcode, "","","", pageNo, pageSize);
         List<ConferenceShowBean> result = new ArrayList<>(0);
         if (null != page && page.getTotalElements() > 0) {
             for (TConference conf : page.getContent()) {
@@ -97,8 +97,8 @@
     }
 
     @Override
-    public PageResult<ConfReportShowBean> getConfReportPage(String confname, String conftype, String deptcode, String confdate,String status, int pageNo, int pageSize) {
-        Page<TConference> page = getConferencePage(confname, conftype, deptcode, confdate,status, pageNo, pageSize);
+    public PageResult<ConfReportShowBean> getConfReportPage(String confname, String conftype, String deptcode, String startdate,String enddate,String status, int pageNo, int pageSize) {
+        Page<TConference> page = getConferencePage(confname, conftype, deptcode, startdate,enddate,status, pageNo, pageSize);
         List<ConfReportShowBean> result = new ArrayList<>(0);
         DecimalFormat format=new DecimalFormat("0.00");
         if (null != page && page.getTotalElements() > 0) {
@@ -113,12 +113,14 @@
                 bean.setTimeperoid(starttime+"~"+endtime);
                 bean.setAttendtime(conf.getAttendtime().substring(0, 2) + ":" + conf.getAttendtime().substring(2));
                 if(ConferenceConstant.CONFTYPE_NOLIST.equals(conf.getConftype())){
-                    Integer totcnt=checkNolistDeptCustomer(conf.getConfid());
+                    Integer totcnt=getNoListConfPeopleTotalCount(conf.getConfid());
                     Integer actualcnt=nolistConfPeopleDao.countByConfid(conf.getConfid());
                     Float rate=0f;
                     if(0!=totcnt){
                         rate=actualcnt*100f/totcnt;
                     }
+                    bean.setActualcnt(actualcnt+"");
+                    bean.setTotcnt(totcnt+"");
                     bean.setAttendrate(format.format(rate)+"%");
 
                 }else if(ConferenceConstant.CONFTYPE_LIST.equals(conf.getConftype())){
@@ -127,9 +129,11 @@
                     Float rate=0f;
                     if(0!=totcnt){
                         rate=actualcnt*100f/totcnt;
+                        bean.setAttendrate(format.format(rate)+"%");
                     }
+                    bean.setActualcnt(actualcnt+"");
+                    bean.setTotcnt(totcnt+"");
                     bean.setAttendrate(format.format(rate)+"%");
-
                 }
                 result.add(bean);
 
@@ -139,7 +143,7 @@
     }
 
     @NotNull
-    private Page<TConference> getConferencePage(String confname, String conftype, String deptcode, String confdate,String status, int pageNo, int pageSize) {
+    private Page<TConference> getConferencePage(String confname, String conftype, String deptcode, String startdate,String enddate,String status, int pageNo, int pageSize) {
         Sort.Order order1=new Sort.Order(Sort.Direction.DESC, "confdate");
         Sort.Order order2=new Sort.Order(Sort.Direction.DESC, "confid");
         List<Sort.Order> list = new ArrayList<>();
@@ -167,8 +171,11 @@
                     predicates.add(root.get("deptcode").in(childdplist));
 
                 }
-                if (!StringUtil.isEmpty(confdate)) {
-                    predicates.add(criteriaBuilder.equal(root.get("confdate").as(String.class), confdate));
+                if (!StringUtil.isEmpty(startdate)) {
+                    predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("confdate").as(String.class), startdate));
+                }
+                if (!StringUtil.isEmpty(enddate)) {
+                    predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("confdate").as(String.class), enddate));
                 }
                 if (!StringUtil.isEmpty(status)) {
                     predicates.add(criteriaBuilder.equal(root.get("status").as(String.class), status));
@@ -789,7 +796,7 @@
         return null;
     }
 
-    private Integer checkNolistDeptCustomer(Integer confid) {
+    private Integer getNoListConfPeopleTotalCount(Integer confid) {
         Query query = entityManager.createNativeQuery("select count(t.custid) from t_customer t " +
                 "where t.deptcode in (select distinct d.deptcode from tb_conf_people p left join t_customer t " +
                 "on p.custid=t.custid left join tb_dept d on d.deptcode=t.deptcode where confid=:confid)");
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 9fc95e1..b823768 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -203,6 +203,7 @@
                         .antMatchers("/login", "/login/form","/app/**").permitAll()
                         .antMatchers("/static/**").permitAll()
                         .antMatchers("/code/image").permitAll()
+                        .antMatchers("/confreport/print").permitAll()
                         .antMatchers("/atte/print/**").permitAll()
                         .antMatchers("/**").hasAnyRole("USER", "ADMIN")
                         .anyRequest().authenticated()
diff --git a/src/main/resources/templates/confreport/index.html b/src/main/resources/templates/confreport/index.html
index 7717bdb..5da8028 100644
--- a/src/main/resources/templates/confreport/index.html
+++ b/src/main/resources/templates/confreport/index.html
@@ -27,11 +27,21 @@
                                placeholder="输入名称查询"/>
                     </div>
                 </div>
+            </div>
+            <div class="layui-form-item">
                 <div class="layui-inline">
-                    <label class="layui-form-label" style="width:120px">会议日期：</label>
+                    <label class="layui-form-label" style="width:120px">起始日期</label>
                     <div class="layui-input-inline">
-                        <input type="text" name="confdate" class="layui-input" th:value="${confDate}"
-                               id="search-confreport-confdate" placeholder="yyyy-MM-dd">
+                        <input type="text" name="startdate" class="layui-input" th:value="${startdate}"
+                               id="search-confreport-startdate" placeholder="yyyy-MM-dd">
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label" style="width:120px">结束日期</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="enddate" class="layui-input" th:value="${startdate}"
+                               id="search-confreport-enddate" placeholder="yyyy-MM-dd">
                     </div>
                 </div>
 
@@ -39,16 +49,17 @@
                     <button id="btn-search-confreport" class="layui-btn icon-btn" data-type="search"><i
                             class="layui-icon">&#xe615;</i>搜索
                     </button>
+                    <button id="btn-search-confreportprint" class="layui-btn icon-btn" data-type="search"><i
+                            class="layui-icon">&#xe615;</i>打印
+                    </button>
                 </div>
-
             </div>
 
-
         </div>
         <table class="layui-table" id="confreportTable" lay-filter="confreportTable-filter"></table>
     </div>
 </div>
-
+<input hidden th:value="${opercode}" id="confreport-opercode">
 
 <!-- 表格操作列 -->
 <script type="text/html" id="confreport-table-bar">
@@ -63,20 +74,27 @@
         var element = layui.element;
 
         form.render("select");
-        var confdate = $("#search-confreport-confdate").val();
+        var startdate = $("#search-confreport-startdate").val();
+        var enddate = $("#search-confreport-enddate").val();
 
         var laydate = layui.laydate;
         laydate.render({
-            elem: '#search-confreport-confdate',
+            elem: '#search-confreport-startdate',
             btns: ['now', 'confirm'],
             trigger: 'click',
-            max: confdate
+            max: startdate
         });
-
+        laydate.render({
+            elem: '#search-confreport-enddate',
+            btns: ['now', 'confirm'],
+            trigger: 'click',
+            max: startdate
+        });
         // 渲染表格
         table.render({
             elem: '#confreportTable',
             url: '[[@{/confreport/reportlist}]]',
+            where: {startdate: startdate},
             page: true,
             cols: [
                 [
@@ -119,12 +137,35 @@
         $('#btn-search-confreport').click(function () {
             var conftype = $("#search-confreport-conftype").val();
             var confname = $("#search-confreport-confname").val();
-            var confdate = $("#search-confreport-confdate").val();
+            var startdate = $("#search-confreport-startdate").val();
+            var enddate = $("#search-confreport-enddate").val();
             table.reload('confreportTable', {
-                where: {conftype: conftype, confname: confname, confdate: confdate},
+                where: {conftype: conftype, confname: confname, startdate: startdate, enddate: enddate},
                 page: {curr: 1}
             });
         });
+        var LODOP;
+        $('#btn-search-confreportprint').click(function () {
+            var conftype = $("#search-confreport-conftype").val();
+            var opercode = $("#confreport-opercode").val();
+            var confname = $("#search-confreport-confname").val();
+            var startdate = $("#search-confreport-startdate").val();
+            var enddate = $("#search-confreport-enddate").val();
+            var url = '/confreport/print?startdate=' + startdate + '&enddate=' + enddate + '&conftype=' + conftype + '&confname=' + confname+ '&opercode=' + opercode;
+
+            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();
+
+        });
 
 
         //监听单元格
diff --git a/src/main/resources/templates/confreport/print/printindex.html b/src/main/resources/templates/confreport/print/printindex.html
new file mode 100644
index 0000000..1483b94
--- /dev/null
+++ b/src/main/resources/templates/confreport/print/printindex.html
@@ -0,0 +1,97 @@
+<!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: 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>
+            </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.confname}"></td>
+                    <td th:text="${data.confdate}"></td>
+                    <td th:text="${data.totcnt}"></td>
+                    <td th:text="${data.actualcnt}"></td>
+                    <td th:text="${data.attendrate}"></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.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
