结算整理和结算日志查询
diff --git a/payapi/src/main/resources/data-postgresql.sql b/payapi/src/main/resources/data-postgresql.sql
index 89ba0ee..4298c90 100644
--- a/payapi/src/main/resources/data-postgresql.sql
+++ b/payapi/src/main/resources/data-postgresql.sql
@@ -1,6 +1,6 @@
 --pg--
-INSERT INTO "tb_period" ("period_year", "period_month", "startdate", "enddate", "settleflag" , "tenantid")
-VALUES (to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'), to_char(CURRENT_TIMESTAMP,'yyyyMM')||'01', to_char((to_date(to_char(CURRENT_TIMESTAMP+'1 month','yyyyMM')||'01','yyyyMMdd')-1)::Timestamp,'yyyyMMdd'), 0, '{tenantid}');
+INSERT INTO "tb_period" ("id", "period_year", "period_month", "startdate", "enddate", "settleflag" , "tenantid")
+VALUES ('8a53b7826c65b925016c65bfa7c3001c',to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'), to_char(CURRENT_TIMESTAMP,'yyyyMM')||'01', to_char((to_date(to_char(CURRENT_TIMESTAMP+'1 month','yyyyMM')||'01','yyyyMMdd')-1)::Timestamp,'yyyyMMdd'), 0, '{tenantid}');
 
 insert into TB_SETTLECTL(BOOKSETNO,PERIODYEAR,PERIODMONTH,STATDATE,SETTLEDATE,STATUS,updtime, "tenantid")
 values (1,to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),0,to_char(CURRENT_TIMESTAMP,'yyyyMMddhh24miss'), '{tenantid}');
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index c177115..80a95a2 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -63,6 +63,8 @@
 VALUES (30, NULL, 1, NULL, '', '/report/subjectdetail', '科目明细账', 2, 20, '{tenantid}');
 INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
 VALUES (31, NULL, 1, NULL, '', '/report/shopbusiness', '商户营业情况表', 3, 20, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (32, NULL, 1, NULL, '', '/settlelog/index', '结算日志', 5, 3, '{tenantid}');
 
 
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
@@ -117,6 +119,8 @@
 VALUES ('ff8080816b7947ed016b79557736007b', 12, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
 VALUES ('ff8080816b7947ed016b795577370081', 18, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
+VALUES ('ff8080816c8468e8016c846d7a570017', 32, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (4, '1', 4, '添加功能', '/function/add', '{tenantid}');
@@ -244,6 +248,10 @@
 VALUES (74, '', 31, '查询', '/report/shopbusiness', '{tenantid}');
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (76, '', 18, '新增', '/param/addsourcetype', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (77, '', 32, '查询', '/settlelog/index', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (78, '', 32, '查询', '/settlelog/dosettle', '{tenantid}');
 
 INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
 VALUES ('ff8080816b7947ed016b795577300036', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
@@ -371,7 +379,10 @@
 VALUES ('ff8080816bbb130c016bbb6ea2f700c9', 76, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
 VALUES ('ff8080816bbb130c016bbb6ea2f600b3', 26, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
-
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816c8468e8016c846d7a5d0018', 77, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816c85279d016c852aa829000d', 78, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 
 INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
 VALUES (1, '1001', 1, 'y', 1, NULL, 20190430, 1, '库存现金', 1, '{tenantid}');
diff --git a/payapi/src/main/resources/templates/system/settlelog/index.html b/payapi/src/main/resources/templates/system/settlelog/index.html
new file mode 100644
index 0000000..3ba86e1
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/settlelog/index.html
@@ -0,0 +1,152 @@
+<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 toolbar">
+            搜索:
+            <input id="search-settlelog-accdate" class="layui-input search-input" type="text" style="width: 150px;"
+                   placeholder="输入执行日期查询"/>&emsp;
+            <select id="search-settlelog-status" class="layui-select search-input">
+                <option value="">--请选择状态--</option>
+                <option value="success">成功</option>
+                <option value="error">失败</option>
+            </select>
+            <button id="search-settlelog-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+            <button id="search-settlelog-deal" class="layui-btn icon-btn layui-btn-normal" data-type="add"><i
+                    class="layui-icon">&#xe605;</i>执行结算
+            </button>
+            <button id="search-settlelog-reset" class="layui-btn layui-btn-primary" data-type="reset"><i
+                    class="layui-icon"></i>清 空
+            </button>
+        </div>
+        <table class="layui-table" id="settlementLogTable" lay-filter="settlementLogTable-filter"></table>
+    </div>
+</div>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var laydate = layui.laydate;
+
+        form.render("select");
+        laydate.render({
+            elem: '#search-settlelog-accdate',
+            trigger: 'click'
+        });
+
+        // 渲染表格
+        table.render({
+            elem: '#settlementLogTable',
+            url: '[[@{/settlelog/datalist}]]',
+            page: true,
+            cols: [
+                [
+                    {
+                        field: 'starttime',
+                        title: '开始时间',
+                        width: 200,
+                        align: 'center',
+                        fixed: 'left',
+                        sort: true,
+                        templet: function (e) {
+                            return admin.formatDate(e.starttime);
+                        }
+                    },
+                    {
+                        field: 'endtime',
+                        title: '结束时间',
+                        width: 200,
+                        align: 'center',
+                        fixed: 'left',
+                        sort: true,
+                        templet: function (e) {
+                            return admin.formatDate(e.endtime);
+                        }
+                    },
+                    {
+                        field: 'errcode', title: '状态', width: 100, align: 'center', sort: true, templet: function (e) {
+                            if (null == e.errcode) {
+                                return '';
+                            } else if ('0' == e.errcode) {
+                                return '<span class="layui-badge layui-bg-green">成功</span>';
+                            } else if('-99' == e.errcode){
+                                return '<span class="layui-badge layui-bg-gray">无效</span>';
+                            } else {
+                                return '<span class="layui-badge">失败</span>';
+                            }
+                        }
+                    },
+                    {
+                        align: 'center', title: '执行时间', width: 120, templet: function (e) {
+                            if (null == e.endtime) {
+                                return '-';
+                            }
+                            var seconds = moment(e.endtime, 'YYYYMMDDHHmmss').diff(moment(e.starttime, 'YYYYMMDDHHmmss'), 'seconds');
+                            if (seconds > 0) {
+                                var h = parseInt(seconds / 3600);
+                                var m = parseInt((seconds - 3600 * h) / 60);
+                                var s = seconds % 60;
+                                var msg = '';
+                                if (h > 0) {
+                                    msg = msg + h + '时';
+                                }
+                                if (m > 0) {
+                                    msg = msg + m + '分';
+                                }
+                                if (s > 0) {
+                                    msg = msg + s + '秒';
+                                }
+                                return msg;
+                            } else {
+                                return '0';
+                            }
+                        }
+                    },
+                    {field: 'errcode', title: '错误码', width: 100, align: 'center'},
+                    {field: 'errmsg', title: '错误信息', align: 'left'}
+                ]
+            ]
+        });
+        // 搜索按钮点击事件
+        $('#search-settlelog-search').click(function () {
+            var accdate = $("#search-settlelog-accdate").val();
+            var status = $("#search-settlelog-status").val();
+            table.reload('settlementLogTable', {where: {accdate: accdate, status: status}, page: {curr: 1}});
+        });
+
+        $('#search-settlelog-deal').click(function () {
+            var token = $("meta[name='_csrf_token']").attr("value");
+            admin.go('[[@{/settlelog/dosettle}]]', {
+                _csrf: token
+            }, function (data) {
+                if (data.code === 200) {
+                    layer.msg(data.msg, {icon: 1, time: 1000});
+                    table.reload('settlementLogTable');
+                } else if (data.code === 401) {
+                    layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                        location.replace('[[@{/login}]]');
+                    }, 1000);
+                } else {
+                    layer.msg(data.msg, {icon: 2});
+                    return;
+                }
+            }, function (err) {
+                admin.errorBack(err);
+            });
+        });
+
+        $('#search-settlelog-reset').click(function () {
+            $("#search-settlelog-accdate").val("");
+            $("#search-settlelog-status").val("");
+            form.render("select");
+        });
+    });
+</script>
\ No newline at end of file