diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettleReportController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettleReportController.java
index c7cb46b..749fae7 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettleReportController.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettleReportController.java
@@ -156,4 +156,42 @@
   }
 
 
+  /**
+   * ====================================================
+   * 商户当天统计表
+   * ====================================================
+   */
+  @GetMapping("/report/shoptodaybusiness")
+  public String shopTodayBusinessReport(ModelMap map) {
+    String settledate = settleReportService.getSystemSettledate();
+    map.addAttribute("mindate", DateUtil.parseToDateFormat(settledate));
+    return "system/report/shoptodaybusiness";
+  }
+
+  @GetMapping("/report/selectshoptodaytree")
+  @PreAuthorize("hasPermission('/report/shoptodaybusiness','')")
+  @ResponseBody
+  public List<TreeSelectNode> searchShopTodayTree() {
+    return settleReportService.getSystemNormalShopTree();
+  }
+
+  @GetMapping("/report/shoptodaybusinesslist")
+  @PreAuthorize("hasPermission('/report/shoptodaybusiness','')")
+  @ResponseBody
+  public PageResult<ShopBusinessShowBean> getShopTodayBusinessData(@RequestParam(value = "startdate", required = false) String startdate,
+                                                                   @RequestParam(value = "enddate", required = false) String enddate,
+                                                                   @RequestParam(value = "shopid", required = false) String shopid,
+                                                                   @RequestParam(value = "nodealshow", required = false, defaultValue = "false") Boolean noDealShow) {
+    try {
+      BaseResp resp = new BaseResp();
+      if (!checkReportDate(startdate, enddate, resp)) {
+        return new PageResult<>(99, resp.getRetmsg());
+      }
+      return settleReportService.getShopTodayBusinessShowInfos(DateUtil.unParseToDateFormat(startdate), DateUtil.unParseToDateFormat(enddate), shopid, noDealShow);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return new PageResult<>(99, "系统查询异常");
+    }
+  }
+
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/SettleReportService.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/SettleReportService.java
index 6b60bca..2b704eb 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/SettleReportService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/SettleReportService.java
@@ -28,4 +28,8 @@
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
   PageResult<ShopBusinessShowBean> getShopBusinessShowInfos(String startdate, String enddate, String shopid, boolean nodealshow);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  PageResult<ShopBusinessShowBean> getShopTodayBusinessShowInfos(String startdate, String enddate, String shopid, boolean nodealshow);
+
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SettleReportServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SettleReportServiceImpl.java
index 7aaac69..4d3a830 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SettleReportServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SettleReportServiceImpl.java
@@ -5,20 +5,26 @@
 import com.supwisdom.dlpay.framework.domain.TSettlectl;
 import com.supwisdom.dlpay.framework.domain.TShop;
 import com.supwisdom.dlpay.framework.domain.TSubject;
-import com.supwisdom.dlpay.framework.util.DateUtil;
-import com.supwisdom.dlpay.framework.util.MoneyUtil;
-import com.supwisdom.dlpay.framework.util.PageResult;
-import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.system.bean.*;
 import com.supwisdom.dlpay.system.service.SettleReportService;
 import com.supwisdom.dlpay.util.EnumCheck;
+import org.hibernate.query.internal.NativeQueryImpl;
+import org.hibernate.transform.Transformers;
+import org.hibernate.type.DoubleType;
+import org.hibernate.type.LongType;
+import org.hibernate.type.StringType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 @Service
@@ -34,6 +40,9 @@
   @Autowired
   private ShopDao shopDao;
 
+  @PersistenceContext
+  private EntityManager entityManager;
+
   private EnumCheck<ShopTypes, String> shoptypeCheck = new EnumCheck<>();
 
   @Override
@@ -190,10 +199,14 @@
 
   @Override
   public PageResult<ShopBusinessShowBean> getShopBusinessShowInfos(String startdate, String enddate, String shopid, boolean nodealshow) {
-    List<ShopBusinessInfo> businessInfos = voucherDao.getShopBusinessInfos(Integer.valueOf(startdate), Integer.valueOf(enddate));
+    List<ShopBusinessInfo> businessInfos = voucherDao.getShopBusinessInfos(Integer.valueOf(startdate), Integer.valueOf(enddate)); //根据凭证统计历史的数据
     if (StringUtil.isEmpty(businessInfos) && !nodealshow) {
       return new PageResult<>(99, "无数据"); //无交易记录
     }
+    return new PageResult<>(getShopBusinessShowBean(businessInfos, shopid, nodealshow));
+  }
+
+  private List<ShopBusinessShowBean> getShopBusinessShowBean(List<ShopBusinessInfo> businessInfos, String shopid, boolean nodealshow) {
     List<TShop> shopAllList = shopDao.getNormalShops();
     List<ShopBusinessShowBean> result = new ArrayList<>(0);
     List<TShop> shopList = getShopBusinessSelectShops(shopAllList, shopid);
@@ -252,6 +265,42 @@
         result.add(bean);
       }
     }
-    return new PageResult<>(result);
+    return result;
+  }
+
+
+  @Override
+  public PageResult<ShopBusinessShowBean> getShopTodayBusinessShowInfos(String startdate, String enddate, String shopid, boolean nodealshow){
+    List<ShopBusinessInfo> businessInfos = getTodayShopbusiness(startdate, enddate); //根据流水统计当天的数据
+    if (StringUtil.isEmpty(businessInfos) && !nodealshow) {
+      return new PageResult<>(99, "无数据"); //无交易记录
+    }
+    return new PageResult<>(getShopBusinessShowBean(businessInfos, shopid, nodealshow));
+  }
+
+  private List<ShopBusinessInfo> getTodayShopbusiness(String startdate, String enddate) {
+    StringBuffer sql = new StringBuffer("select tt.shopaccno,tt.summary,count(distinct tt.refno) as transcnt,sum(tt.dramt) as dramt,sum(tt.cramt) as cramt \n" +
+        "from ( \n" +
+        "  select t.draccno as shopaccno,t.summary,t.refno,t.amount as dramt,0.0 as cramt \n" +
+        "  from tb_userdtl_debitcredit t left join tb_transactionmain a on t.refno=a.refno \n" +
+        "  where a. status='success' and t.drsubjno=:subjno and a.accdate>=:startdate and a.accdate<=:enddate \n" +
+        "  union all \n" +
+        "  select t.craccno as shopaccno,t.summary,t.refno,0.0 as dramt,t.amount as cramt \n" +
+        "  from tb_userdtl_debitcredit t left join tb_transactionmain a on t.refno=a.refno \n" +
+        "  where a. status='success' and t.crsubjno=:subjno and a.accdate>=:startdate and a.accdate<=:enddate \n" +
+        ") tt group by tt.shopaccno,tt.summary ");
+    Query query = entityManager.createNativeQuery(sql.toString());
+    query.setParameter("subjno", Subject.SUBJNO_MACHANT_INCOME); //商户收入科目
+    query.setParameter("startdate", DateUtil.unParseToDateFormat(startdate));
+    query.setParameter("enddate", DateUtil.unParseToDateFormat(enddate));
+    query.unwrap(NativeQueryImpl.class)
+        .addScalar("shopaccno", StringType.INSTANCE)
+        .addScalar("summary", StringType.INSTANCE)
+        .addScalar("transcnt", LongType.INSTANCE)
+        .addScalar("dramt", DoubleType.INSTANCE)
+        .addScalar("cramt", DoubleType.INSTANCE)
+        .setResultTransformer(Transformers.aliasToBean(ShopBusinessInfo.class));
+    List<ShopBusinessInfo> list = query.getResultList();
+    return list;
   }
 }
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index 446650b..cefb007 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -75,6 +75,8 @@
 VALUES (36, NULL, 1, NULL, '', '/shop/shopcheck', '商户审批', 2, 7, '{tenantid}');
 INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
 VALUES (37, NULL, 1, NULL, '', '/user/card', '市民卡查询', 1, 19, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (38, NULL, 1, NULL, '', '/report/shoptodaybusiness', '商户当天统计表', 4, 20, '{tenantid}');
 
 
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
@@ -141,6 +143,8 @@
 VALUES ('ff8080816db87e27016db88be41a0014', 36, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
 VALUES ('ff8080816db87e27016db88be41f0015', 37, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
+VALUES ('4028ee9f6e5d95d8016e5d99e8d50012', 38, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 
 
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
@@ -297,6 +301,8 @@
 VALUES (89, '', 36, '审核', '/shop/docheckshop', '{tenantid}');
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (90, '', 37, '查询', '/user/card', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (91, '', 38, '查询', '/report/shoptodaybusiness', '{tenantid}');
 
 
 INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
@@ -453,6 +459,8 @@
 VALUES ('ff8080816db87e27016db94468da008a', 89, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
 VALUES ('ff8080816db87e27016db9446fda008b', 90, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('4028ee9f6e5d95d8016e5d99e8dd0013', 91, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 
 
 INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
diff --git a/payapi/src/main/resources/templates/system/report/shoptodaybusiness.html b/payapi/src/main/resources/templates/system/report/shoptodaybusiness.html
new file mode 100644
index 0000000..c01ddbf
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/report/shoptodaybusiness.html
@@ -0,0 +1,190 @@
+<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="today-shopbusiness-search-form">
+            <input type="hidden" id="today-shopbusiness-hidden-mindate" th:value="${mindate}"/>
+            <input type="hidden" id="today-shopbusiness-hidden-parentId" value="0"/>
+            <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="today-shopbusiness-search-startdate" placeholder="起始日期"
+                               th:value="${mindate}"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline">
+                        <input type="text" name="enddate" id="today-shopbusiness-search-enddate" placeholder="截止日期"
+                               th:value="${mindate}"
+                               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="shopid" id="today-shopbusiness-search-shopid" placeholder="选择商户"
+                               lay-filter="today-shopbusiness-search-shopid-filter"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <div class="layui-input-block" style="margin-left: 0;">
+                        <input type="checkbox" name="nodealshow" id="today-shopbusiness-search-nodealshow" lay-skin="primary"
+                               title="显示未交易商户"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <button id="today-shopbusiness-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">
+        <table class="layui-table" id="todayShopbusinessTable" lay-filter="todayShopbusinessTable-filter"></table>
+    </div>
+</div>
+
+<script type="text/html" id="today-shopbusiness-toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-fold-today-shopbusiness" lay-event="todayShopbusinessShowFold">全部折叠</button>
+        <button class="layui-btn layui-btn-sm" id="btn-expand-today-shopbusiness" lay-event="todayShopbusinessExpandAll">全部展开
+        </button>
+    </div>
+</script>
+
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate', 'treeSelect', 'treetable'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var laydate = layui.laydate;
+        var treetable = layui.treetable;
+        var treeSelect = layui.treeSelect;
+
+        form.render("checkbox");
+        laydate.render({
+            elem: '#today-shopbusiness-search-startdate',
+            min: $("#today-shopbusiness-hidden-mindate").val(),
+            trigger: 'click'
+        });
+        laydate.render({
+            elem: '#today-shopbusiness-search-enddate',
+            min: $("#today-shopbusiness-hidden-mindate").val(),
+            trigger: 'click'
+        });
+
+        treeSelect.render({
+            elem: '#today-shopbusiness-search-shopid',
+            data: '[[@{/report/selectshoptodaytree}]]',
+            type: 'get',
+            placeholder: '选择商户',
+            search: false,
+            style: {
+                folder: {
+                    enable: false
+                },
+                line: {
+                    enable: true
+                }
+            },
+            // 点击回调
+            click: function (d) {
+                var treeNode = d.current;
+                console.log(treeNode);
+                $("#today-shopbusiness-hidden-parentId").val(treeNode.pId);
+                return true;
+            },
+            success: function (d) {
+                console.log(d); // 加载完成后的回调函数
+            }
+        });
+
+        var renderTable = function (obj) {
+            layer.load(2);
+            var parentId = $("#today-shopbusiness-hidden-parentId").val();
+            console.log(parentId);
+            treetable.render({
+                id: 'todayShopBusinessReport',
+                title: '商户营业情况表',
+                treeColIndex: 0,
+                treeSpid: parentId,
+                treeIdName: 'shopid',
+                treePidName: 'fshopid',
+                treeDefaultClose: false,
+                treeLinkage: false,
+                elem: '#todayShopbusinessTable',
+                url: '[[@{/report/shoptodaybusinesslist}]]',
+                page: false,
+                where: obj,
+                showicon: false,
+                toolbar: '#today-shopbusiness-toolbar',
+                cols: [
+                    [
+                        {field: 'shopname', title: '商户名称', align: 'left'},
+                        {field: 'summary', title: '交易摘要', align: 'center'},
+                        {field: 'transcnt', title: '交易次数', align: 'center'},
+                        {
+                            field: 'transamt', title: '交易金额', align: 'center', templet: function (e) {
+                                return parseFloat(e.transamt).toFixed(2);
+                            }
+                        }
+                    ]
+                ],
+                done: function (res, curr, count) {
+                    console.log(res);
+                    layer.closeAll('loading');
+                }
+            });
+        }
+        renderTable({
+            startdate: $("#today-shopbusiness-search-startdate").val(),
+            enddate: $("#today-shopbusiness-search-enddate").val(),
+            shopid: "",
+            nodealshow: false
+        });
+
+        $('#today-shopbusiness-search-btn').click(function () {
+            var startdate = $("#today-shopbusiness-search-startdate").val();
+            var enddate = $("#today-shopbusiness-search-enddate").val();
+            var shopid = $("#today-shopbusiness-search-shopid").val();
+            var nodealshow = $("#today-shopbusiness-search-nodealshow").is(':checked');
+            if (null == startdate || "" == $.trim(startdate)) {
+                layer.msg('请选择起始日期', {icon: 2, time: 1500});
+                return;
+            }
+            if (null == enddate || "" == $.trim(enddate)) {
+                layer.msg('请选择截止日期', {icon: 2, time: 1500});
+                return;
+            }
+            renderTable({
+                startdate: startdate,
+                enddate: enddate,
+                shopid: shopid,
+                nodealshow: nodealshow
+            });
+        });
+
+        table.on('toolbar(todayShopbusinessTable-filter)', function (obj) {
+            switch (obj.event) {
+                case 'todayShopbusinessShowFold':
+                    treetable.foldAll('#todayShopbusinessTable');
+                    break;
+                case 'todayShopbusinessExpandAll':
+                    treetable.expandAll('#todayShopbusinessTable');
+                    break;
+            }
+        });
+    });
+</script>
\ No newline at end of file
