diff --git a/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java b/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
index b8349ee..d984b9f 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
@@ -42,11 +42,11 @@
 
     //sql,xss过滤
     HttpServletRequest httpServletRequest = (HttpServletRequest) request;
-    logger.error("CrosXssFilter.......orignal url:{},ParameterMap:{}",httpServletRequest.getRequestURI(), new Gson().toJson(httpServletRequest.getParameterMap()));
+    logger.error("..........RequestUrl:{},RequestParam:{}",httpServletRequest.getRequestURI(), new Gson().toJson(httpServletRequest.getParameterMap()));
     XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper(
         httpServletRequest);
     chain.doFilter(xssHttpServletRequestWrapper, response);
-    logger.error("CrosXssFilter..........doFilter url:{},ParameterMap:{}",xssHttpServletRequestWrapper.getRequestURI(), new Gson().toJson(xssHttpServletRequestWrapper.getParameterMap()));
+//    logger.error("CrosXssFilter..........doFilter url:{},ParameterMap:{}",xssHttpServletRequestWrapper.getRequestURI(), new Gson().toJson(xssHttpServletRequestWrapper.getParameterMap()));
   }
 
   @Override
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/LaborCountSearchData.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/LaborCountSearchData.java
new file mode 100644
index 0000000..c6f6e16
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/LaborCountSearchData.java
@@ -0,0 +1,106 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+public class LaborCountSearchData {
+  private Integer rownum; //行号
+
+  private Integer dwid; //单位id 设备组一级
+  private String dwname; //单位名称
+  private Integer groupid; //食堂ID 设备组二级
+  private String groupname; //单位名称
+
+  private Integer bfeecnt;
+  private Integer lfeecnt;
+  private Integer dfeecnt;
+
+  private Double bfeeamt;
+  private Double lfeeamt;
+  private Double dfeeamt;
+
+  public Integer getRownum() {
+    return rownum;
+  }
+
+  public void setRownum(Integer rownum) {
+    this.rownum = rownum;
+  }
+
+  public Integer getDwid() {
+    return dwid;
+  }
+
+  public void setDwid(Integer dwid) {
+    this.dwid = dwid;
+  }
+
+  public String getDwname() {
+    return dwname;
+  }
+
+  public void setDwname(String dwname) {
+    this.dwname = dwname;
+  }
+
+  public Integer getGroupid() {
+    return groupid;
+  }
+
+  public void setGroupid(Integer groupid) {
+    this.groupid = groupid;
+  }
+
+  public String getGroupname() {
+    return groupname;
+  }
+
+  public void setGroupname(String groupname) {
+    this.groupname = groupname;
+  }
+
+  public Integer getBfeecnt() {
+    return bfeecnt;
+  }
+
+  public void setBfeecnt(Integer bfeecnt) {
+    this.bfeecnt = bfeecnt;
+  }
+
+  public Integer getLfeecnt() {
+    return lfeecnt;
+  }
+
+  public void setLfeecnt(Integer lfeecnt) {
+    this.lfeecnt = lfeecnt;
+  }
+
+  public Integer getDfeecnt() {
+    return dfeecnt;
+  }
+
+  public void setDfeecnt(Integer dfeecnt) {
+    this.dfeecnt = dfeecnt;
+  }
+
+  public Double getBfeeamt() {
+    return bfeeamt;
+  }
+
+  public void setBfeeamt(Double bfeeamt) {
+    this.bfeeamt = bfeeamt;
+  }
+
+  public Double getLfeeamt() {
+    return lfeeamt;
+  }
+
+  public void setLfeeamt(Double lfeeamt) {
+    this.lfeeamt = lfeeamt;
+  }
+
+  public Double getDfeeamt() {
+    return dfeeamt;
+  }
+
+  public void setDfeeamt(Double dfeeamt) {
+    this.dfeeamt = dfeeamt;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/LaborCountShowBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/LaborCountShowBean.java
new file mode 100644
index 0000000..0ce0a08
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/LaborCountShowBean.java
@@ -0,0 +1,117 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class LaborCountShowBean {
+  private Integer dwid; //单位id 设备组一级
+  private String dwname; //单位名称
+
+  private Integer bfeecnt;
+  private Integer lfeecnt;
+  private Integer dfeecnt;
+
+  private Double bfeeamt;
+  private Double lfeeamt;
+  private Double dfeeamt;
+
+  private List<LaborCountSearchData> datalist = new ArrayList<LaborCountSearchData>(0);
+
+  public LaborCountShowBean() {
+  }
+
+  public LaborCountShowBean(Integer dwid, String dwname, Integer bfeecnt, Integer lfeecnt, Integer dfeecnt, Double bfeeamt, Double lfeeamt, Double dfeeamt) {
+    this.dwid = dwid;
+    this.dwname = dwname;
+    this.bfeecnt = bfeecnt;
+    this.lfeecnt = lfeecnt;
+    this.dfeecnt = dfeecnt;
+    this.bfeeamt = bfeeamt;
+    this.lfeeamt = lfeeamt;
+    this.dfeeamt = dfeeamt;
+  }
+
+  public LaborCountShowBean(Integer dwid, String dwname, Integer bfeecnt, Integer lfeecnt, Integer dfeecnt, Double bfeeamt, Double lfeeamt, Double dfeeamt, List<LaborCountSearchData> datalist) {
+    this.dwid = dwid;
+    this.dwname = dwname;
+    this.bfeecnt = bfeecnt;
+    this.lfeecnt = lfeecnt;
+    this.dfeecnt = dfeecnt;
+    this.bfeeamt = bfeeamt;
+    this.lfeeamt = lfeeamt;
+    this.dfeeamt = dfeeamt;
+    this.datalist = datalist;
+  }
+
+  public Integer getDwid() {
+    return dwid;
+  }
+
+  public void setDwid(Integer dwid) {
+    this.dwid = dwid;
+  }
+
+  public String getDwname() {
+    return dwname;
+  }
+
+  public void setDwname(String dwname) {
+    this.dwname = dwname;
+  }
+
+  public Integer getBfeecnt() {
+    return bfeecnt;
+  }
+
+  public void setBfeecnt(Integer bfeecnt) {
+    this.bfeecnt = bfeecnt;
+  }
+
+  public Integer getLfeecnt() {
+    return lfeecnt;
+  }
+
+  public void setLfeecnt(Integer lfeecnt) {
+    this.lfeecnt = lfeecnt;
+  }
+
+  public Integer getDfeecnt() {
+    return dfeecnt;
+  }
+
+  public void setDfeecnt(Integer dfeecnt) {
+    this.dfeecnt = dfeecnt;
+  }
+
+  public Double getBfeeamt() {
+    return bfeeamt;
+  }
+
+  public void setBfeeamt(Double bfeeamt) {
+    this.bfeeamt = bfeeamt;
+  }
+
+  public Double getLfeeamt() {
+    return lfeeamt;
+  }
+
+  public void setLfeeamt(Double lfeeamt) {
+    this.lfeeamt = lfeeamt;
+  }
+
+  public Double getDfeeamt() {
+    return dfeeamt;
+  }
+
+  public void setDfeeamt(Double dfeeamt) {
+    this.dfeeamt = dfeeamt;
+  }
+
+  public List<LaborCountSearchData> getDatalist() {
+    return datalist;
+  }
+
+  public void setDatalist(List<LaborCountSearchData> datalist) {
+    this.datalist = datalist;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/StatementReportController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/StatementReportController.java
index 1bbc804..edbb2a4 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/StatementReportController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/StatementReportController.java
@@ -4,6 +4,7 @@
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 
+import com.supwisdom.dlpay.restaurant.bean.LaborCountShowBean;
 import com.supwisdom.dlpay.restaurant.bean.LaborfeeSearchBean;
 import com.supwisdom.dlpay.restaurant.bean.LaborfeeShowBean;
 import com.supwisdom.dlpay.restaurant.service.StatementReportService;
@@ -106,4 +107,79 @@
 
 
 
+  @GetMapping("/laborcount")
+  public String LaborCountIndex(@ModelAttribute("searchBean") LaborfeeSearchBean searchBean,
+                              @AuthenticationPrincipal UserDetails operUser,
+                              ModelMap map) {
+    try {
+      String statdate = statementReportService.getMaxStatementDate();
+      String maxdate = DateUtil.reformatDatetime(statdate, "yyyyMMdd", "yyyy-MM-dd");
+      String maxmonth = DateUtil.reformatDatetime(statdate.substring(0, 6), "yyyyMM", "yyyy-MM");
+      map.addAttribute("maxdate", maxdate);
+      map.addAttribute("maxmonth", maxmonth);
+
+      searchBean.setStartdate(statdate);
+      searchBean.setEnddate(statdate);
+      searchBean.setDatetype("days");
+      searchBean.setYearmonth(maxmonth);
+      map.addAttribute("showlist", statementReportService.getLaborCountSearchData(searchBean));
+
+      TOperator oper = (TOperator) operUser;
+      map.addAttribute("opercode", oper == null ? "unknow" : oper.getOpercode());
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+
+    return "restaurant/report/laborcount";
+  }
+
+  @PostMapping("/searchlaborcount")
+  @PreAuthorize("hasPermission('/report/laborcount','')")
+  public String searchLaborCountData(@ModelAttribute("searchBean") LaborfeeSearchBean searchBean,
+                               @AuthenticationPrincipal UserDetails operUser,
+                               ModelMap map) {
+    try {
+      TOperator oper = (TOperator) operUser;
+      map.addAttribute("opercode", oper == null ? "unknow" : oper.getOpercode());
+
+      map.addAttribute("showlist", statementReportService.getLaborCountSearchData(searchBean));
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+    return "restaurant/report/laborcount::laborCountTable";
+  }
+
+  @GetMapping("/excelexportlaborcnt")
+  @PreAuthorize("hasPermission('/report/excelexportlaborcnt','')")
+  public void excelExportLaborCount(@ModelAttribute("searchBean") LaborfeeSearchBean searchBean,
+                                  @AuthenticationPrincipal UserDetails operUser,
+                                  HttpServletRequest request, HttpServletResponse response, ModelMap map){
+    try {
+      List<LaborCountShowBean> datalist = statementReportService.getLaborCountSearchData(searchBean);
+      TOperator oper = (TOperator) operUser;
+      String filename="商户劳务费人次统计表";
+      statementReportService.doCreateLaborCountExcel(response, datalist, searchBean, filename, oper);
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+
+  @GetMapping("/print/printlaborcnt")
+  public String printLaborCount(@ModelAttribute("searchBean") LaborfeeSearchBean searchBean,
+                              @RequestParam(value = "opercode",required = false) String opercode, ModelMap map) {
+    try {
+      map.addAttribute("showlist", statementReportService.getLaborCountSearchData(searchBean));
+
+      TOperator oper = statementReportService.getOperatorByOpercode(opercode);
+      map.addAttribute("opername", oper == null ? "unknow" : oper.getOpername());
+      map.addAttribute("period", statementReportService.getLaborfeeSearchPeriod(searchBean));
+      map.addAttribute("printdatetime",DateUtil.reformatDatetime(systemUtilService.getSysdatetime().getHostdatetime(),DateUtil.DATETIME_FMT,"yyyy-MM-dd HH:mm:ss"));
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+    return "restaurant/report/print/printlaborcount";
+  }
+
+
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/StatementReportService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/StatementReportService.java
index 2af4d7a..e758c65 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/StatementReportService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/StatementReportService.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.restaurant.service;
 
 import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.restaurant.bean.LaborCountShowBean;
 import com.supwisdom.dlpay.restaurant.bean.LaborfeeSearchBean;
 import com.supwisdom.dlpay.restaurant.bean.LaborfeeShowBean;
 import org.springframework.transaction.annotation.Transactional;
@@ -25,4 +26,10 @@
   void doCreateLaborfeeExcel(HttpServletResponse response, List<LaborfeeShowBean> datalist, LaborfeeSearchBean searchBean, String filename, TOperator oper);
 
 
+  @Transactional(rollbackFor = Exception.class,readOnly = true)
+  List<LaborCountShowBean> getLaborCountSearchData(LaborfeeSearchBean searchBean);
+
+  @Transactional(rollbackFor = Exception.class,readOnly = true)
+  void doCreateLaborCountExcel(HttpServletResponse response, List<LaborCountShowBean> datalist, LaborfeeSearchBean searchBean, String filename, TOperator oper);
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/StatementReportServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/StatementReportServiceImpl.java
index 5bc7a76..3472a38 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/StatementReportServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/StatementReportServiceImpl.java
@@ -6,9 +6,7 @@
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.MoneyUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
-import com.supwisdom.dlpay.restaurant.bean.LaborfeeSearchBean;
-import com.supwisdom.dlpay.restaurant.bean.LaborfeeSearchData;
-import com.supwisdom.dlpay.restaurant.bean.LaborfeeShowBean;
+import com.supwisdom.dlpay.restaurant.bean.*;
 import com.supwisdom.dlpay.restaurant.dao.CheckCtlDao;
 import com.supwisdom.dlpay.restaurant.domain.TCheckCtl;
 import com.supwisdom.dlpay.restaurant.service.StatementReportService;
@@ -391,4 +389,280 @@
 
   }
 
+  @Override
+  public List<LaborCountShowBean> getLaborCountSearchData(LaborfeeSearchBean searchBean) {
+    if (null != searchBean) {
+      String startdate = DateUtil.unParseToDateFormat(searchBean.getStartdate());
+      String enddate = DateUtil.unParseToDateFormat(searchBean.getEnddate());
+      if ("month".equals(searchBean.getDatetype())) {
+        //按月查询
+        startdate = DateUtil.unParseToDateFormat(searchBean.getYearmonth().trim() + "-01");
+        enddate = String.valueOf(DateUtil.getLastDayOfMonth(Integer.valueOf(searchBean.getYearmonth().substring(0, 4)), Integer.valueOf(searchBean.getYearmonth().substring(5, 7))));
+      }
+
+      StringBuffer sb = new StringBuffer("select cast(ROW_NUMBER() OVER() as int4) as rownum,case when a2.devgroupid is not null then a2.devgroupid when a1.devgroupid is not null then a1.devgroupid else t.devgroupid end as dwid," +
+          " case when a2.devgroupid is not null then a2.groupname when a1.devgroupid is not null then a1.groupname else '' end as dwname," +
+          " t.devgroupid as groupid, case when a1.devgroupid is not null then a1.groupname else '' end as groupname," +
+          " cast(sum(case when t.mealtype='breakfast' then t.feecnt else 0 end) as int4) as bfeecnt, " +
+          " cast(sum(case when t.mealtype='lunch' then t.feecnt else 0 end) as int4) as lfeecnt, " +
+          " cast(sum(case when t.mealtype='dinner' then t.feecnt else 0 end) as int4) as dfeecnt, " +
+          " sum(case when t.mealtype='breakfast' then t.feeamt else 0 end) as bfeeamt, " +
+          " sum(case when t.mealtype='lunch' then t.feeamt else 0 end) as lfeeamt, " +
+          " sum(case when t.mealtype='dinner' then t.feeamt else 0 end) as dfeeamt " +
+          "from tb_rpt_mealsdtl t left join tb_devicegroup a1 on t.devgroupid=a1.devgroupid left join tb_devicegroup a2 on a1.pid=a2.devgroupid " +
+          "where t.checkdate>=:startdate and t.checkdate<=:enddate " +
+          "group by t.devgroupid,a1.devgroupid,a2.devgroupid order by t.devgroupid ");
+      Query query = entityManager.createNativeQuery(sb.toString());
+      query.setParameter("startdate", startdate);
+      query.setParameter("enddate", enddate);
+      query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(LaborCountSearchData.class));
+      List<LaborCountSearchData> list = query.getResultList();
+      if (null != list) return transforLaborCountShowBean(list);
+    }
+    return new ArrayList<>(0);
+  }
+
+  private List<LaborCountShowBean> transforLaborCountShowBean(List<LaborCountSearchData> list) {
+    if (StringUtil.isEmpty(list)) return new ArrayList<>(0);
+
+    List<LaborCountShowBean> result = new ArrayList<>(0);
+    LaborCountShowBean sumBean = new LaborCountShowBean(-1, "总 计", 0, 0, 0, 0D, 0D, 0D);
+    for (LaborCountSearchData data : list) {
+      sumBean.setBfeecnt(sumBean.getBfeecnt() + data.getBfeecnt());
+      sumBean.setLfeecnt(sumBean.getLfeecnt() + data.getLfeecnt());
+      sumBean.setDfeecnt(sumBean.getDfeecnt() + data.getDfeecnt());
+      sumBean.setBfeeamt(sumBean.getBfeeamt() + data.getBfeeamt());
+      sumBean.setLfeeamt(sumBean.getLfeeamt() + data.getLfeeamt());
+      sumBean.setDfeeamt(sumBean.getDfeeamt() + data.getDfeeamt()); //总计求和
+
+      boolean exist = false;
+      for (LaborCountShowBean bean : result) {
+        if (bean.getDwid().intValue() == data.getDwid()) {
+          exist = true;
+          bean.getDatalist().add(data);
+
+          bean.setBfeecnt(bean.getBfeecnt() + data.getBfeecnt());
+          bean.setLfeecnt(bean.getLfeecnt() + data.getLfeecnt());
+          bean.setDfeecnt(bean.getDfeecnt() + data.getDfeecnt());
+
+          bean.setBfeeamt(bean.getBfeeamt() + data.getBfeeamt());
+          bean.setLfeeamt(bean.getLfeeamt() + data.getLfeeamt());
+          bean.setDfeeamt(bean.getDfeeamt() + data.getDfeeamt());
+          break;
+        }
+      }
+
+      if (!exist) {
+        LaborCountShowBean tmp = new LaborCountShowBean();
+        tmp.setDwid(data.getDwid());
+        tmp.setDwname(data.getDwname());
+
+        tmp.setBfeecnt(data.getBfeecnt());
+        tmp.setLfeecnt(data.getLfeecnt());
+        tmp.setDfeecnt(data.getDfeecnt());
+
+        tmp.setBfeeamt(data.getBfeeamt());
+        tmp.setLfeeamt(data.getLfeeamt());
+        tmp.setDfeeamt(data.getDfeeamt());
+        tmp.getDatalist().add(data);
+
+        result.add(tmp);
+      }
+
+    }
+
+    result.add(sumBean); //最后加上总计
+    return result;
+  }
+
+  @Override
+  public void doCreateLaborCountExcel(HttpServletResponse response, List<LaborCountShowBean> datalist, LaborfeeSearchBean searchBean, String filename, TOperator oper) {
+    // 创建工作簿实例
+    HSSFWorkbook workbook = new HSSFWorkbook();
+    HSSFSheet sheet = workbook.createSheet("商户劳务费清单(刷卡次数版)");
+
+    //TODO：设置列宽
+    //序号|单位|食堂|(正价：早餐|中餐|晚餐)|(折后：早餐|中餐|晚餐)|(劳务费：早餐|中餐|晚餐|小计)
+    int columns = 10; //
+    sheet.setColumnWidth(0, ExcelPoiUtil.columnWidth(6)); //序号
+    sheet.setColumnWidth(1, ExcelPoiUtil.columnWidth(25)); //单位
+    sheet.setColumnWidth(2, ExcelPoiUtil.columnWidth(20)); //食堂
+    for (int i = 3; i < columns; i++) {
+      sheet.setColumnWidth(i, ExcelPoiUtil.columnWidth(14));
+    }
+
+    //标题样式
+    HSSFCellStyle titleStyle = ExcelPoiUtil.creatStyle(workbook, "宋体", true, 20, HSSFCellStyle.ALIGN_CENTER, false); //设置单元格样式
+    //表头样式
+    HSSFCellStyle headStyle = ExcelPoiUtil.creatStyle(workbook, "宋体", true, 15, HSSFCellStyle.ALIGN_CENTER, true); //设置单元格样式
+    //正文样式 有边框-textStyle1 无边框-textStyle2
+    HSSFCellStyle textStyle1 = ExcelPoiUtil.creatStyle(workbook, "宋体", false, 10, HSSFCellStyle.ALIGN_CENTER, true); //设置单元格样式
+    HSSFCellStyle textStyle2 = ExcelPoiUtil.creatStyle(workbook, "宋体", false, 10, HSSFCellStyle.ALIGN_CENTER, false); //设置单元格样式
+
+
+    //TODO：创建标题
+    HSSFRow row0 = ExcelPoiUtil.createRow(sheet, 0, 800); //表格标题
+    ExcelPoiUtil.createCell(row0, 0, titleStyle, filename);
+    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, columns - 1)); //合并单元格CellRangeAddress构造参数依次表示 起始行，截至行，起始列， 截至列
+
+    //TODO：创建表格页眉
+    HSSFRow row1 = ExcelPoiUtil.createRow(sheet, 1, 400);
+    ExcelPoiUtil.createCell(row1, 0, textStyle2, "区间");
+    ExcelPoiUtil.createCell(row1, 1, textStyle2, getLaborfeeSearchPeriod(searchBean));
+    ExcelPoiUtil.createCell(row1, columns - 1, ExcelPoiUtil.creatStyle(workbook, "宋体", false, 10, HSSFCellStyle.ALIGN_RIGHT, false), "单位：元");
+
+    //TODO：创建表头（poi做多行合并，一定需要先绘制单元格，然后写入数据，最后合并）
+    HSSFRow row2 = ExcelPoiUtil.createRow(sheet, 2, 600);
+    ExcelPoiUtil.createCell(row2, 0, headStyle, "序号");
+    ExcelPoiUtil.createCell(row2, 1, headStyle, "单位");
+    ExcelPoiUtil.createCell(row2, 2, headStyle, "食堂");
+
+    ExcelPoiUtil.createCell(row2, 3, headStyle, "刷卡次数（人）");
+    ExcelPoiUtil.createCell(row2, 4, headStyle, null);
+    ExcelPoiUtil.createCell(row2, 5, headStyle, null);
+    sheet.addMergedRegion(new CellRangeAddress(2, 2, 3, 5)); //合并单元格CellRangeAddress构造参数依次表示 起始行，截至行，起始列， 截至列
+
+    ExcelPoiUtil.createCell(row2, 6, headStyle, "应支付劳务费（元）");
+    ExcelPoiUtil.createCell(row2, 7, headStyle, null);
+    ExcelPoiUtil.createCell(row2, 8, headStyle, null);
+    ExcelPoiUtil.createCell(row2, 9, headStyle, null);
+    sheet.addMergedRegion(new CellRangeAddress(2, 2, 6, 9)); //合并单元格CellRangeAddress构造参数依次表示 起始行，截至行，起始列， 截至列
+
+
+    HSSFRow row3 = ExcelPoiUtil.createRow(sheet, 3, 800); //表头第二行
+    ExcelPoiUtil.createCell(row3, 0, headStyle, null);
+    sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 0)); //合并列
+
+    ExcelPoiUtil.createCell(row3, 1, headStyle, null);
+    sheet.addMergedRegion(new CellRangeAddress(2, 3, 1, 1)); //合并列
+
+    ExcelPoiUtil.createCell(row3, 2, headStyle, null);
+    sheet.addMergedRegion(new CellRangeAddress(2, 3, 2, 2)); //合并列
+
+    ExcelPoiUtil.createCell(row3, 3, headStyle, "早餐");
+    ExcelPoiUtil.createCell(row3, 4, headStyle, "午餐");
+    ExcelPoiUtil.createCell(row3, 5, headStyle, "晚餐");
+
+    ExcelPoiUtil.createCell(row3, 6, headStyle, "早餐\n应付劳务费");
+    ExcelPoiUtil.createCell(row3, 7, headStyle, "午餐\n应付劳务费");
+    ExcelPoiUtil.createCell(row3, 8, headStyle, "晚餐\n应付劳务费");
+    ExcelPoiUtil.createCell(row3, 9, headStyle, "应支付劳\n务费小计");
+
+    //TODO: 数据
+    int rowNum = 4;
+    if (StringUtil.isEmpty(datalist)) {
+      //无数据
+      HSSFRow row4 = ExcelPoiUtil.createRow(sheet, rowNum, 500);
+      ExcelPoiUtil.createCell(row4, 0, textStyle1, "无数据");
+      for(int n=1;n<columns;n++) ExcelPoiUtil.createCell(row4, n, textStyle1, null);
+      sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, 0, columns - 1)); //合并列
+    } else {
+      //有数据
+      for (int i = 0; i < datalist.size() - 1; i++) {
+        LaborCountShowBean rowData = datalist.get(i);
+        if (StringUtil.isEmpty(rowData.getDatalist())) continue;
+
+        int firstRowNo = rowNum;
+        HSSFRow row = ExcelPoiUtil.createRow(sheet, rowNum++, 500);
+        ExcelPoiUtil.createCell(row, 0, textStyle1, "" + rowData.getDatalist().get(0).getRownum()); //序号
+        ExcelPoiUtil.createCell(row, 1, textStyle1, rowData.getDwname()); //单位
+
+        for (int j = 0; j < rowData.getDatalist().size(); j++) {
+          LaborCountSearchData detail = rowData.getDatalist().get(j);
+          if (j > 0) {
+            //非首行
+            row = ExcelPoiUtil.createRow(sheet, rowNum++, 500);
+            ExcelPoiUtil.createCell(row, 0, textStyle1, "" + detail.getRownum()); //序号
+            ExcelPoiUtil.createCell(row, 1, textStyle1, null); //序号
+          }
+          ExcelPoiUtil.createCell(row, 2, textStyle1, detail.getGroupname()); //食堂
+          ExcelPoiUtil.createCell(row, 3, textStyle1,""+detail.getBfeecnt()); //早餐
+          ExcelPoiUtil.createCell(row, 4, textStyle1,""+detail.getLfeecnt()); //午餐
+          ExcelPoiUtil.createCell(row, 5, textStyle1,""+detail.getDfeecnt()); //晚餐
+
+          ExcelPoiUtil.createCell(row, 6, textStyle1, MoneyUtil.formatYuanToString(detail.getBfeeamt())); //早餐
+          ExcelPoiUtil.createCell(row, 7, textStyle1, MoneyUtil.formatYuanToString(detail.getLfeeamt())); //午餐
+          ExcelPoiUtil.createCell(row, 8, textStyle1, MoneyUtil.formatYuanToString(detail.getDfeeamt())); //晚餐
+          ExcelPoiUtil.createCell(row, 9, textStyle1, MoneyUtil.formatYuanToString(detail.getBfeeamt() + detail.getLfeeamt() + detail.getDfeeamt())); //小计
+        }
+        if (rowData.getDatalist().size() > 1) {
+          sheet.addMergedRegion(new CellRangeAddress(firstRowNo, rowNum - 1, 1, 1));  //合并列
+
+          //单位小计行
+          row = ExcelPoiUtil.createRow(sheet, rowNum++, 500);
+          ExcelPoiUtil.createCell(row, 0, textStyle1, rowData.getDwname() + "小计");
+          ExcelPoiUtil.createCell(row, 1, textStyle1, null);
+          ExcelPoiUtil.createCell(row, 2, textStyle1, null);
+          sheet.addMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, 2));  //合并列
+
+          ExcelPoiUtil.createCell(row, 3, textStyle1,""+rowData.getBfeecnt()); //早餐
+          ExcelPoiUtil.createCell(row, 4, textStyle1,""+rowData.getLfeecnt()); //午餐
+          ExcelPoiUtil.createCell(row, 5, textStyle1,""+rowData.getDfeecnt()); //晚餐
+
+          ExcelPoiUtil.createCell(row, 6, textStyle1, MoneyUtil.formatYuanToString(rowData.getBfeeamt())); //早餐
+          ExcelPoiUtil.createCell(row, 7, textStyle1, MoneyUtil.formatYuanToString(rowData.getLfeeamt())); //午餐
+          ExcelPoiUtil.createCell(row, 8, textStyle1, MoneyUtil.formatYuanToString(rowData.getDfeeamt())); //晚餐
+          ExcelPoiUtil.createCell(row, 9, textStyle1, MoneyUtil.formatYuanToString(rowData.getBfeeamt() + rowData.getLfeeamt() + rowData.getDfeeamt())); //小计
+        }
+      }
+
+      //TODO: 总计
+      LaborCountShowBean sumBean = datalist.get(datalist.size() - 1);
+      HSSFRow sumRow = ExcelPoiUtil.createRow(sheet, rowNum, 500);
+      ExcelPoiUtil.createCell(sumRow, 0, textStyle1, sumBean.getDwname());
+      ExcelPoiUtil.createCell(sumRow, 1, textStyle1, null);
+      ExcelPoiUtil.createCell(sumRow, 2, textStyle1, null);
+      sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, 0, 2));  //合并列
+
+      ExcelPoiUtil.createCell(sumRow, 3, textStyle1, ""+sumBean.getBfeecnt()); //早餐
+      ExcelPoiUtil.createCell(sumRow, 4, textStyle1, ""+sumBean.getLfeecnt()); //午餐
+      ExcelPoiUtil.createCell(sumRow, 5, textStyle1, ""+sumBean.getDfeecnt()); //晚餐
+
+      ExcelPoiUtil.createCell(sumRow, 6, textStyle1, MoneyUtil.formatYuanToString(sumBean.getBfeeamt())); //早餐
+      ExcelPoiUtil.createCell(sumRow, 7, textStyle1, MoneyUtil.formatYuanToString(sumBean.getLfeeamt())); //午餐
+      ExcelPoiUtil.createCell(sumRow, 8, textStyle1, MoneyUtil.formatYuanToString(sumBean.getDfeeamt())); //晚餐
+      ExcelPoiUtil.createCell(sumRow, 9, textStyle1, MoneyUtil.formatYuanToString(sumBean.getBfeeamt() + sumBean.getLfeeamt() + sumBean.getDfeeamt())); //小计
+    }
+
+    //TODO: 表格页脚
+    HSSFCellStyle textStyle3 = ExcelPoiUtil.creatStyle(workbook, "宋体", false, 10, HSSFCellStyle.ALIGN_LEFT, false); //设置单元格样式
+    HSSFRow buttom = ExcelPoiUtil.createRow(sheet, ++rowNum, 400);
+    ExcelPoiUtil.createCell(buttom, 0, textStyle3, "制表人：" + (oper == null ? "unknow" : oper.getOpername()) + "  " + DateUtil.reformatDatetime(systemUtilService.getSysdatetime().getHostdatetime(), DateUtil.DATETIME_FMT, "yyyy-MM-dd HH:mm:ss"));
+    sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, 0, 2));  //合并列
+
+    //TODO: 审核信息
+    HSSFRow signRow10 = ExcelPoiUtil.createRow(sheet, rowNum + 3, 400);
+    ExcelPoiUtil.createCell(signRow10, 0, textStyle3, "银行方审核盖章：");
+    ExcelPoiUtil.createCell(signRow10, 5, textStyle3, "苍山饭店审核盖章：");
+    sheet.addMergedRegion(new CellRangeAddress(rowNum + 3, rowNum + 3, 0, 4));  //合并列
+    sheet.addMergedRegion(new CellRangeAddress(rowNum + 3, rowNum + 3, 5, columns - 1));  //合并列
+    HSSFRow signRow11 = ExcelPoiUtil.createRow(sheet, rowNum + 4, 400);
+    ExcelPoiUtil.createCell(signRow11, 0, textStyle3, "审核人：");
+    ExcelPoiUtil.createCell(signRow11, 5, textStyle3, "审核人：");
+    sheet.addMergedRegion(new CellRangeAddress(rowNum + 4, rowNum + 4, 0, 4));  //合并列
+    sheet.addMergedRegion(new CellRangeAddress(rowNum + 4, rowNum + 4, 5, columns - 1));  //合并列
+
+    HSSFRow signRow20 = ExcelPoiUtil.createRow(sheet, rowNum + 8, 400);
+    ExcelPoiUtil.createCell(signRow20, 0, textStyle3, "市民卡公司审核盖章：");
+    ExcelPoiUtil.createCell(signRow20, 5, textStyle3, "建桥园审核盖章：");
+    sheet.addMergedRegion(new CellRangeAddress(rowNum + 8, rowNum + 8, 0, 4));  //合并列
+    sheet.addMergedRegion(new CellRangeAddress(rowNum + 8, rowNum + 8, 5, columns - 1));  //合并列
+    HSSFRow signRow21 = ExcelPoiUtil.createRow(sheet, rowNum + 9, 400);
+    ExcelPoiUtil.createCell(signRow21, 0, textStyle3, "审核人：");
+    ExcelPoiUtil.createCell(signRow21, 5, textStyle3, "审核人：");
+    sheet.addMergedRegion(new CellRangeAddress(rowNum + 9, rowNum + 9, 0, 4));  //合并列
+    sheet.addMergedRegion(new CellRangeAddress(rowNum + 9, rowNum + 9, 5, columns - 1));  //合并列
+
+    try {
+      response.setContentType("application/x-msdownload");
+      response.setHeader("Content-Disposition", "attachment;" + " filename="+ new String(filename.getBytes(), "ISO-8859-1") + ".xls");
+      OutputStream out = response.getOutputStream();
+      workbook.write(out);
+      out.flush();
+      out.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+
 }
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index b49c77f..6d69446 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -126,6 +126,7 @@
 INSERT INTO  "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (34, NULL, 1, NULL, '', '/customerlist/index', '餐补人员名单管理', 1, 24);
 INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (35, NULL, 0, NULL, 'layui-icon-rmb', '#', '报表中心', 10, -1);
 INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (36, NULL, 1, NULL, '', '/report/laborfee', '商户劳务费报表', 1, 35);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (37, NULL, 1, NULL, '', '/report/laborcount', '商户劳务费人次统计表', 2, 35);
 
 
 
@@ -311,6 +312,8 @@
 
 INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816ea5a411016ea5bc08af007d', 95, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816eb6236e016eb62961f8007d', 96, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816ec4640b016ec471f89d0080', 97, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816ec4640b016ec471f89d007f', 98, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 
 
 INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (4, '1', 4, '添加功能', '/function/add');
@@ -413,6 +416,8 @@
 INSERT INTO "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (94, '', 34, '查询', '/customerlist/index');
 INSERT INTO  "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (95, '', 36, '查询', '/report/laborfee');
 INSERT INTO  "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (96, '', 36, '导出', '/report/excelexportlaborfee');
+INSERT INTO  "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (97, '', 37, '查询', '/report/laborcount');
+INSERT INTO  "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (98, '', 37, '导出', '/report/excelexportlaborcnt');
 
 
 
@@ -465,6 +470,7 @@
 
 INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('ff8080816ea5a411016ea5bc08ae007b', 35, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('ff8080816ea5a411016ea5bc08ae007c', 36, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('ff8080816ec4640b016ec471f89d007e', 37, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 
 
 INSERT INTO "tb_shopsettlement" (shopsettlementno,operno,shopid,shopname) VALUES ('1', '1234', '2000000012', '测试商户');
diff --git a/src/main/resources/static/libs/CLodop/LodopFuncs.js b/src/main/resources/static/libs/CLodop/LodopFuncs.js
index 59b481c..3a21b3f 100755
--- a/src/main/resources/static/libs/CLodop/LodopFuncs.js
+++ b/src/main/resources/static/libs/CLodop/LodopFuncs.js
@@ -13,12 +13,12 @@
 //====页面引用CLodop云打印必须的JS文件,用双端口(8000和18000）避免其中某个被占用：====
 if (needCLodop()) {
     // https
-    // var src1 = "https://localhost:8443/CLodopfuncs.js?priority=1";
-    // var src2 = "https://localhost:8444/CLodopfuncs.js?priority=0";
+    var src1 = "https://localhost:8443/CLodopfuncs.js?priority=1";
+    var src2 = "https://localhost:8444/CLodopfuncs.js?priority=0";
 
     //http
-    var src1 = "http://localhost:8000/CLodopfuncs.js?priority=1";
-    var src2 ="http://localhost:18000/CLodopfuncs.js?priority=0";
+    // var src1 = "http://localhost:8000/CLodopfuncs.js?priority=1";
+    // var src2 ="http://localhost:18000/CLodopfuncs.js?priority=0";
 
     var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
     var oscript = document.createElement("script");
diff --git a/src/main/resources/templates/restaurant/report/laborcount.html b/src/main/resources/templates/restaurant/report/laborcount.html
new file mode 100644
index 0000000..c5826be
--- /dev/null
+++ b/src/main/resources/templates/restaurant/report/laborcount.html
@@ -0,0 +1,261 @@
+<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 class="layui-form" lay-filter="shopreport-labercount-search-form">
+            <input type="hidden" id="shopreport-labercount-hidden-maxdate" th:value="${maxdate}"/>
+            <input type="hidden" id="shopreport-labercount-hidden-maxmonth" th:value="${maxmonth}"/>
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">汇总日期</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="startdate" id="shopreport-labercount-search-startdate" placeholder="起始日期"
+                               th:value="${maxdate}"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline">
+                        <input type="text" name="enddate" id="shopreport-labercount-search-enddate" placeholder="截止日期"
+                               th:value="${maxdate}"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">汇总月份</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="yearmonth" id="shopreport-labercount-search-yearmonth" placeholder="选择月份"
+                               th:value="${maxmonth}" autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <div class="layui-input-block" style="margin-left: 0;">
+                        <input type="checkbox" name="datetype" id="shopreport-labercount-datetype" lay-skin="primary"
+                               title="按月份查询"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <button id="shopreport-labercount-search-btn" class="layui-btn icon-btn" data-type="search"><i
+                            class="layui-icon">&#xe615;</i>搜索
+                    </button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            <div class="layui-btn-group">
+                <button id="shopreport-labercount-export-excel" class="layui-btn layui-btn-sm layui-btn-primary sw-print"><i class="layui-icon layui-icon-export"></i>导出</button>
+                <button id="shopreport-labercount-print-table" class="layui-btn layui-btn-sm layui-btn-primary sw-print"><i class="layui-icon layui-icon-print"></i>打印</button>
+            </div>
+        </div>
+        <table class="layui-table sw-table" id="shopreport-labercount-table" th:fragment="laborCountTable">
+            <thead>
+            <tr>
+                <th rowspan="3" style="text-align: center;min-width: 35px;">序号</th>
+                <th rowspan="3" style="text-align: center;min-width: 100px;">单位</th>
+                <th rowspan="3" style="text-align: center;min-width: 100px;">食堂</th>
+                <th colspan="3" style="text-align: center;">刷卡次数（人）</th>
+                <th colspan="4" style="text-align: center;">应支付劳务费（元）</th>
+            </tr>
+            <tr>
+                <th rowspan="2" style="text-align: center;min-width: 60px;">早餐</th>
+                <th rowspan="2" style="text-align: center;min-width: 60px;">午餐</th>
+                <th rowspan="2" style="text-align: center;min-width: 60px;">晚餐</th>
+
+                <th rowspan="2" style="text-align: center;min-width: 60px;">早餐<br/>应付劳务费</th>
+                <th rowspan="2" style="text-align: center;min-width: 60px;">午餐<br/>应付劳务费</th>
+                <th rowspan="2" style="text-align: center;min-width: 60px;">晚餐<br/>应付劳务费</th>
+                <th rowspan="2" style="text-align: center;min-width: 60px;">应支付劳<br/>务费小计</th>
+            </tr>
+            </thead>
+            <tbody id="shopreport-labercount-tbody" th:data-startdate="${searchBean.startdate}" th:data-enddate="${searchBean.enddate}"  th:data-datetype="${searchBean.datetype}" th:data-yearmonth="${searchBean.yearmonth}" th:data-opercode="${opercode}">
+            <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}" th:with="childCount=${data.datalist.size()}">
+                <tr th:if=${!dataStat.last}>
+                    <td th:text="${childCount>0}?${data.datalist[0].rownum}:''"></td>
+                    <td th:text="${data.dwname}" th:rowspan="${data.datalist.size()}"></td>
+                    <td th:text="${childCount>0}?${data.datalist[0].groupname}:''"></td>
+                    <td th:text="${childCount>0}?${data.datalist[0].bfeecnt}:''"></td>
+                    <td th:text="${childCount>0}?${data.datalist[0].lfeecnt}:''"></td>
+                    <td th:text="${childCount>0}?${data.datalist[0].dfeecnt}:''"></td>
+                    <td th:text="${childCount>0}?${#numbers.formatDecimal(data.datalist[0].bfeeamt,1,2)}:''"></td>
+                    <td th:text="${childCount>0}?${#numbers.formatDecimal(data.datalist[0].lfeeamt,1,2)}:''"></td>
+                    <td th:text="${childCount>0}?${#numbers.formatDecimal(data.datalist[0].dfeeamt,1,2)}:''"></td>
+                    <td th:text="${childCount>0}?${#numbers.formatDecimal(data.datalist[0].bfeeamt+data.datalist[0].lfeeamt+data.datalist[0].dfeeamt,1,2)}:''"></td>
+                </tr>
+                <tr th:each="article,stats:${data.datalist}" th:if="${!stats.first}">
+                    <td th:text="${article.rownum}"></td>
+                    <td th:text="${article.groupname}"></td>
+                    <td th:text="${article.bfeecnt}"></td>
+                    <td th:text="${article.lfeecnt}"></td>
+                    <td th:text="${article.dfeecnt}"></td>
+                    <td th:text="${#numbers.formatDecimal(article.bfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(article.lfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(article.dfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(article.bfeeamt+article.lfeeamt+article.dfeeamt,1,2)}"></td>
+                </tr>
+                <tr th:if="${childCount>1}">
+                    <td colspan="3" th:text="${data.dwname+'小计'}"></td>
+                    <td th:text="${data.bfeecnt}"></td>
+                    <td th:text="${data.lfeecnt}"></td>
+                    <td th:text="${data.dfeecnt}"></td>
+                    <td th:text="${#numbers.formatDecimal(data.bfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(data.lfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(data.dfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(data.bfeeamt+data.lfeeamt+data.dfeeamt,1,2)}"></td>
+                </tr>
+                <tr th:if="${dataStat.last}">
+                    <td style="font-weight: bold;" colspan="3" th:text="${data.dwname}"></td>
+                    <td style="font-weight: bold;" th:text="${data.bfeecnt}"></td>
+                    <td style="font-weight: bold;" th:text="${data.lfeecnt}"></td>
+                    <td style="font-weight: bold;" th:text="${data.dfeecnt}"></td>
+                    <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.bfeeamt,1,2)}"></td>
+                    <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.lfeeamt,1,2)}"></td>
+                    <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.dfeeamt,1,2)}"></td>
+                    <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.bfeeamt+data.lfeeamt+data.dfeeamt,1,2)}"></td>
+                </tr>
+            </div>
+            </tbody>
+        </table>
+    </div>
+</div>
+
+<script>
+    layui.use(['form', 'layer', 'laydate', 'admin'], function () {
+        var form = layui.form;
+        var laydate = layui.laydate;
+        var layer = layui.layer;
+        var $ = layui.jquery;
+
+        form.render("checkbox");
+        laydate.render({
+            elem: '#shopreport-labercount-search-yearmonth',
+            type: 'month',
+            max: $("#shopreport-labercount-hidden-maxdate").val(),
+            trigger: 'click',
+            change: function (value, date, endDate) {
+                $('#shopreport-labercount-search-yearmonth').val(value);
+                $('#layui-laydate1').remove();
+            }
+        });
+        laydate.render({
+            elem: '#shopreport-labercount-search-startdate',
+            max: $("#shopreport-labercount-hidden-maxdate").val(),
+            trigger: 'click'
+        });
+        laydate.render({
+            elem: '#shopreport-labercount-search-enddate',
+            max: $("#shopreport-labercount-hidden-maxdate").val(),
+            trigger: 'click'
+        });
+
+        $("#shopreport-labercount-search-btn").click(function(){
+            var startdate=$("#shopreport-labercount-search-startdate").val();
+            var enddate = $("#shopreport-labercount-search-enddate").val();
+            var yearmonth=$("#shopreport-labercount-search-yearmonth").val();
+            var dtype = $("#shopreport-labercount-datetype").is(":checked")?"month":"days";
+            if ("month" == dtype) {
+                if (isempty(yearmonth)) {
+                    layer.msg('请选择月份', {icon: 2});
+                    return;
+                }
+            } else {
+                if (isempty(startdate) || isempty(enddate)) {
+                    layer.msg('请选择汇总时间段', {icon: 2});
+                    return;
+                }
+            }
+
+            layer.load(2);
+            $.ajax({
+                url: '[[@{/report/searchlaborcount}]]',
+                type: "POST",
+                data: {
+                    startdate: startdate,
+                    enddate: enddate,
+                    datetype: dtype,
+                    yearmonth: yearmonth,
+                    _csrf: $("meta[name='_csrf_token']").attr("value")
+                },
+                success: function (data) {
+                    $("#shopreport-labercount-table").html(data);
+                    layer.closeAll('loading');
+                },
+                error: function (status, err) {
+                    layer.closeAll('loading');
+                    layer.msg('查询失败了', {icon: 2});
+                }
+            });
+        });
+
+        //打印
+        var LODOP; //声明为全局变量
+        $("#shopreport-labercount-print-table").click(function(){
+            var startdate= $("#shopreport-labercount-tbody").attr("data-startdate");
+            var enddate= $("#shopreport-labercount-tbody").attr("data-enddate");
+            var datetype= $("#shopreport-labercount-tbody").attr("data-datetype");
+            var yearmonth= $("#shopreport-labercount-tbody").attr("data-yearmonth");
+            var opercode = $("#shopreport-labercount-tbody").attr("data-opercode");
+            var url = '/report/print/printlaborcnt?startdate=' + startdate + '&enddate=' + enddate + '&datetype=' + datetype + '&yearmonth=' + yearmonth + '&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();
+        });
+
+        //导出
+        $("#shopreport-labercount-export-excel").click(function(){
+            var startdate= $("#shopreport-labercount-tbody").attr("data-startdate");
+            var enddate= $("#shopreport-labercount-tbody").attr("data-enddate");
+            var datetype= $("#shopreport-labercount-tbody").attr("data-datetype");
+            var yearmonth= $("#shopreport-labercount-tbody").attr("data-yearmonth");
+
+            var dataUrl='[[@{/report/excelexportlaborcnt}]]?startdate='+startdate+'&enddate='+enddate+'&datetype='+datetype+'&yearmonth='+yearmonth;
+            var xhr = new XMLHttpRequest();
+            xhr.responseType = "blob"; //设置响应类型为blob类型
+            xhr.onload = function () {
+                debugger
+                if (this.status == "200") {
+                    //获取响应文件流　
+                    var blob = this.response;
+                    // 转换完成，创建一个a标签用于下载
+                    var aElem = document.createElement('a');
+                    aElem.href = window.URL.createObjectURL(blob);
+                    aElem.download = "商户劳务费人次统计表.xls";
+                    aElem.onload = function (e) {
+                        window.URL.revokeObjectURL(aElem.href);
+                    };
+                    $("body").append(aElem);  // 修复firefox中无法触发click
+                    aElem.click();
+                    $(aElem).remove();
+
+                }else if(this.status == "403"){
+                    layer.msg('无导出资源权限', {icon: 2});
+                } else {
+                    layer.msg('导出excel失败了', {icon: 2});
+                }
+            }
+            xhr.open("GET", dataUrl, true);
+            xhr.send();
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/report/print/printlaborcount.html b/src/main/resources/templates/restaurant/report/print/printlaborcount.html
new file mode 100644
index 0000000..255777f
--- /dev/null
+++ b/src/main/resources/templates/restaurant/report/print/printlaborcount.html
@@ -0,0 +1,129 @@
+<!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;" th:text="${'区间：'+period}"></div>
+            <div style="float: right;" th:text="'单位：元'"></div>
+        </div>
+        <table class="layui-table sw-table sw-print">
+            <thead>
+            <tr>
+                <th rowspan="3" style="text-align: center;width: 28px;">序号</th>
+                <th rowspan="3" style="text-align: center;min-width: 100px;">单位</th>
+                <th rowspan="3" style="text-align: center;min-width: 100px;">食堂</th>
+                <th colspan="3" style="text-align: center;">刷卡次数（人）</th>
+                <th colspan="4" style="text-align: center;">应支付劳务费（元）</th>
+            </tr>
+            <tr>
+                <th rowspan="2" style="text-align: center;min-width: 50px;">早餐</th>
+                <th rowspan="2" style="text-align: center;min-width: 50px;">午餐</th>
+                <th rowspan="2" style="text-align: center;min-width: 50px;">晚餐</th>
+
+                <th rowspan="2" style="text-align: center;min-width: 70px;">早餐<br/>应付劳务费</th>
+                <th rowspan="2" style="text-align: center;min-width: 70px;">午餐<br/>应付劳务费</th>
+                <th rowspan="2" style="text-align: center;min-width: 70px;">晚餐<br/>应付劳务费</th>
+                <th rowspan="2" style="text-align: center;min-width: 70px;">应支付劳<br/>务费小计</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}"
+                 th:with="childCount=${data.datalist.size()}">
+                <tr th:if=${!dataStat.last}>
+                    <td th:text="${childCount>0}?${data.datalist[0].rownum}:''"></td>
+                    <td th:text="${data.dwname}" th:rowspan="${data.datalist.size()}"></td>
+                    <td th:text="${childCount>0}?${data.datalist[0].groupname}:''"></td>
+                    <td th:text="${childCount>0}?${data.datalist[0].bfeecnt}:''"></td>
+                    <td th:text="${childCount>0}?${data.datalist[0].lfeecnt}:''"></td>
+                    <td th:text="${childCount>0}?${data.datalist[0].dfeecnt}:''"></td>
+                    <td th:text="${childCount>0}?${#numbers.formatDecimal(data.datalist[0].bfeeamt,1,2)}:''"></td>
+                    <td th:text="${childCount>0}?${#numbers.formatDecimal(data.datalist[0].lfeeamt,1,2)}:''"></td>
+                    <td th:text="${childCount>0}?${#numbers.formatDecimal(data.datalist[0].dfeeamt,1,2)}:''"></td>
+                    <td th:text="${childCount>0}?${#numbers.formatDecimal(data.datalist[0].bfeeamt+data.datalist[0].lfeeamt+data.datalist[0].dfeeamt,1,2)}:''"></td>
+                </tr>
+                <tr th:each="article,stats:${data.datalist}" th:if="${!stats.first}">
+                    <td th:text="${article.rownum}"></td>
+                    <td th:text="${article.groupname}"></td>
+                    <td th:text="${article.bfeecnt}"></td>
+                    <td th:text="${article.lfeecnt}"></td>
+                    <td th:text="${article.dfeecnt}"></td>
+                    <td th:text="${#numbers.formatDecimal(article.bfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(article.lfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(article.dfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(article.bfeeamt+article.lfeeamt+article.dfeeamt,1,2)}"></td>
+                </tr>
+                <tr th:if="${childCount>1}">
+                    <td colspan="3" th:text="${data.dwname+'小计'}"></td>
+                    <td th:text="${data.bfeecnt}"></td>
+                    <td th:text="${data.lfeecnt}"></td>
+                    <td th:text="${data.dfeecnt}"></td>
+                    <td th:text="${#numbers.formatDecimal(data.bfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(data.lfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(data.dfeeamt,1,2)}"></td>
+                    <td th:text="${#numbers.formatDecimal(data.bfeeamt+data.lfeeamt+data.dfeeamt,1,2)}"></td>
+                </tr>
+                <tr th:if="${dataStat.last}">
+                    <td style="font-weight: bold;" colspan="3" th:text="${data.dwname}"></td>
+                    <td style="font-weight: bold;" th:text="${data.bfeecnt}"></td>
+                    <td style="font-weight: bold;" th:text="${data.lfeecnt}"></td>
+                    <td style="font-weight: bold;" th:text="${data.dfeecnt}"></td>
+                    <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.bfeeamt,1,2)}"></td>
+                    <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.lfeeamt,1,2)}"></td>
+                    <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.dfeeamt,1,2)}"></td>
+                    <td style="font-weight: bold;"
+                        th:text="${#numbers.formatDecimal(data.bfeeamt+data.lfeeamt+data.dfeeamt,1,2)}"></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;">
+        <table class="sw-print-sign">
+            <tr>
+                <td width="50%">银行方审核盖章：</td>
+                <td width="50%">苍山饭店审核盖章：</td>
+            </tr>
+            <tr>
+                <td>审核人：</td>
+                <td>审核人：</td>
+            </tr>
+            <tr>
+                <td colspan="2">&nbsp;</td>
+            </tr>
+            <tr>
+                <td colspan="2">&nbsp;</td>
+            </tr>
+            <tr>
+                <td colspan="2">&nbsp;</td>
+            </tr>
+            <tr>
+                <td>市民卡公司审核盖章：</td>
+                <td>建桥园审核盖章：</td>
+            </tr>
+            <tr>
+                <td>审核人：</td>
+                <td>审核人：</td>
+            </tr>
+        </table>
+    </div>
+</div>
+</body>
+</html>
\ No newline at end of file
