科目汇总表
authorXia Kaixiang <kaixiang.xia@supwisdom.com>
Tue, 11 Jun 2019 03:09:41 +0000 (11:09 +0800)
committerXia Kaixiang <kaixiang.xia@supwisdom.com>
Tue, 11 Jun 2019 03:10:58 +0000 (11:10 +0800)
src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
src/main/java/com/supwisdom/dlpay/framework/dao/SubjectdayDao.java
src/main/java/com/supwisdom/dlpay/system/bean/SubjectDayInfo.java [new file with mode: 0644]
src/main/java/com/supwisdom/dlpay/system/bean/SubjectDayShowBean.java [new file with mode: 0644]
src/main/java/com/supwisdom/dlpay/system/controller/SettleReportController.java [new file with mode: 0644]
src/main/java/com/supwisdom/dlpay/system/service/SettleReportService.java [new file with mode: 0644]
src/main/java/com/supwisdom/dlpay/system/service/impl/SettleReportServiceImpl.java [new file with mode: 0644]
src/main/resources/static/custom/module/treetable-lay/treetable.css
src/main/resources/static/custom/module/treetable-lay/treetable.js
src/main/resources/templates/system/report/subjectday.html [new file with mode: 0644]

index 785ef41..0560c06 100644 (file)
@@ -22,8 +22,8 @@ public class DayendSettleTask {
 
   private static final Logger logger = LoggerFactory.getLogger(DayendSettleTask.class);
 
-//  @Scheduled(cron="0 3/30 2-3 * * ? ")
-  @Scheduled(cron="0 0/2 * * * ? ")
+  @Scheduled(cron="0 3/30 2-3 * * ? ")
+//  @Scheduled(cron="0 0/2 * * * ? ")
   public void doSettleTask() {
     if (logger.isDebugEnabled()) logger.debug("进入日结算任务!");
 
index fb10362..9a6a92c 100644 (file)
@@ -4,6 +4,7 @@ import com.supwisdom.dlpay.framework.data.FSubjectInfoBean;
 import com.supwisdom.dlpay.framework.data.MerchBean;
 import com.supwisdom.dlpay.framework.domain.TSubjectday;
 import com.supwisdom.dlpay.framework.domain.TSubjectdayPK;
+import com.supwisdom.dlpay.system.bean.SubjectDayInfo;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
@@ -28,10 +29,20 @@ public interface SubjectdayDao extends JpaRepository<TSubjectday, TSubjectdayPK>
 
   @Query(value = "select sum(sb.begindrbal) as begindrbal,sum(sb.begincrbal) as begincrbal,sum(sb.dramt) as dramt,sum(sb.cramt) as cramt,sum(sb.drbal) as drbal,sum(sb.crbal) as crbal  " +
       "from TB_SUBJECTDAY sb, TB_SUBJECT s " +
-      "where sb.accdate =:accdate and sb.subjno=s.subjno and s.subjlevel=2 and s.fsubjno=:fsubjno ",nativeQuery = true)
+      "where sb.accdate =:accdate and sb.subjno=s.subjno and s.subjlevel=2 and s.fsubjno=:fsubjno ", nativeQuery = true)
   FSubjectInfoBean getParentSumInfo(@Param("accdate") String accdate, @Param("fsubjno") String fsubjno);
 
   @Query(value = "select sum(begindrbal) as begindrbal,sum(begincrbal) as begincrbal,sum(dramt) as dramt,sum(cramt) as cramt,sum(drbal) as drbal,sum(crbal) as crbal " +
       "from tb_subjectday where accdate=:accdate and subjno in (select subjno from tb_subject where subjlevel=1) ", nativeQuery = true)
   FSubjectInfoBean getAllParentSubjectSumInfo(@Param("accdate") String accdate);
+
+  @Query(value = "SELECT t.subjno AS subjno, t.subjname AS subjname,t.fsubjno AS fsubjno,t.subjlevel AS subjlevel,t.displayflag, " +
+      "a.begindrbal  AS lastdaydrbal,a.begincrbal  AS lastdaycrbal, " +
+      "b.dramt AS dramt,b.cramt AS cramt,c.drbal AS drbal,c.crbal AS crbal " +
+      "FROM tb_subject t " +
+      "left join (SELECT t1.subjno,t1.begindrbal,t1.begincrbal FROM tb_subjectday t1 WHERE t1.accdate = :startdate ) a on t.subjno=a.subjno " +
+      "left join (SELECT t2.subjno,SUM(t2.dramt) dramt,SUM(t2.cramt) cramt FROM tb_subjectday t2 WHERE t2.accdate>=:startdate and t2.accdate<=:enddate GROUP BY t2.subjno) b on t.subjno=b.subjno " +
+      "left join (SELECT t3.subjno, t3.drbal, t3.crbal FROM tb_subjectday t3 WHERE t3.accdate = :enddate) c on t.subjno=c.subjno " +
+      "ORDER BY t.subjno asc ", nativeQuery = true)
+  List<SubjectDayInfo> getAllTSubjectday(@Param("startdate") String startdate, @Param("enddate") String enddate);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/SubjectDayInfo.java b/src/main/java/com/supwisdom/dlpay/system/bean/SubjectDayInfo.java
new file mode 100644 (file)
index 0000000..f31d5b5
--- /dev/null
@@ -0,0 +1,25 @@
+package com.supwisdom.dlpay.system.bean;
+
+public interface SubjectDayInfo {
+  String getSubjno();
+
+  String getSubjname();
+
+  String getFsubjno();
+
+  Integer getSubjlevel();
+
+  String getDisplayflag();
+
+  Double getLastdaydrbal();
+
+  Double getLastdaycrbal();
+
+  Double getDramt();
+
+  Double getCramt();
+
+  Double getDrbal();
+
+  Double getCrbal();
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/SubjectDayShowBean.java b/src/main/java/com/supwisdom/dlpay/system/bean/SubjectDayShowBean.java
new file mode 100644 (file)
index 0000000..c36c212
--- /dev/null
@@ -0,0 +1,103 @@
+package com.supwisdom.dlpay.system.bean;
+
+public class SubjectDayShowBean {
+  private String subjno;
+  private String subjname;
+  private String fsubjno;
+  private Integer subjlevel;
+  private String displayflag;
+  private Double lastdaydrbal;
+  private Double lastdaycrbal;
+  private Double dramt;
+  private Double cramt;
+  private Double drbal;
+  private Double crbal;
+
+  public String getSubjno() {
+    return subjno;
+  }
+
+  public void setSubjno(String subjno) {
+    this.subjno = subjno;
+  }
+
+  public String getSubjname() {
+    return subjname;
+  }
+
+  public void setSubjname(String subjname) {
+    this.subjname = subjname;
+  }
+
+  public String getFsubjno() {
+    return fsubjno;
+  }
+
+  public void setFsubjno(String fsubjno) {
+    this.fsubjno = fsubjno;
+  }
+
+  public Integer getSubjlevel() {
+    return subjlevel;
+  }
+
+  public void setSubjlevel(Integer subjlevel) {
+    this.subjlevel = subjlevel;
+  }
+
+  public String getDisplayflag() {
+    return displayflag;
+  }
+
+  public void setDisplayflag(String displayflag) {
+    this.displayflag = displayflag;
+  }
+
+  public Double getLastdaydrbal() {
+    return lastdaydrbal;
+  }
+
+  public void setLastdaydrbal(Double lastdaydrbal) {
+    this.lastdaydrbal = lastdaydrbal;
+  }
+
+  public Double getLastdaycrbal() {
+    return lastdaycrbal;
+  }
+
+  public void setLastdaycrbal(Double lastdaycrbal) {
+    this.lastdaycrbal = lastdaycrbal;
+  }
+
+  public Double getDramt() {
+    return dramt;
+  }
+
+  public void setDramt(Double dramt) {
+    this.dramt = dramt;
+  }
+
+  public Double getCramt() {
+    return cramt;
+  }
+
+  public void setCramt(Double cramt) {
+    this.cramt = cramt;
+  }
+
+  public Double getDrbal() {
+    return drbal;
+  }
+
+  public void setDrbal(Double drbal) {
+    this.drbal = drbal;
+  }
+
+  public Double getCrbal() {
+    return crbal;
+  }
+
+  public void setCrbal(Double crbal) {
+    this.crbal = crbal;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/SettleReportController.java b/src/main/java/com/supwisdom/dlpay/system/controller/SettleReportController.java
new file mode 100644 (file)
index 0000000..b86669e
--- /dev/null
@@ -0,0 +1,57 @@
+package com.supwisdom.dlpay.system.controller;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.framework.domain.TSubject;
+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.system.bean.SubjectDayShowBean;
+import com.supwisdom.dlpay.system.service.SettleReportService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+public class SettleReportController {
+  @Autowired
+  private SettleReportService settleReportService;
+
+  /**
+   * ====================================================
+   * 科目日结表
+   * ====================================================
+   */
+  @GetMapping("/report/subjectday")
+  public String subjectdayReport(ModelMap map) {
+    String settledate = settleReportService.getSystemSettledate();
+    map.addAttribute("maxdate", DateUtil.parseToDateFormat(DateUtil.getNewDay(settledate, -1)));
+    return "system/report/subjectday";
+  }
+
+  @GetMapping("/report/subjectdaylist")
+  @PreAuthorize("hasPermission('/report/subjectday','')")
+  @ResponseBody
+  public PageResult<SubjectDayShowBean> getSubjectdayData(@RequestParam(value = "startdate",required = false) String startdate,
+                                                          @RequestParam(value = "enddate",required = false) String enddate,
+                                                          @RequestParam(value = "nodealshow", required = false, defaultValue = "false") Boolean noDealShow) {
+    try {
+      if (StringUtil.isEmpty(startdate) || StringUtil.isEmpty(enddate)) {
+        return new PageResult<>(99, "请选择时间段");
+      } else if (!DateUtil.checkDatetimeValid(DateUtil.unParseToDateFormat(startdate), "yyyyMMdd")) {
+        return new PageResult<>(99, "起始时间非法");
+      } else if (!DateUtil.checkDatetimeValid(DateUtil.unParseToDateFormat(enddate), "yyyyMMdd")) {
+        return new PageResult<>(99, "截止时间非法");
+      }
+      return settleReportService.getSubjectDayInfos(DateUtil.unParseToDateFormat(startdate), DateUtil.unParseToDateFormat(enddate), noDealShow);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return new PageResult<>(99, "系统查询错误");
+    }
+  }
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/SettleReportService.java b/src/main/java/com/supwisdom/dlpay/system/service/SettleReportService.java
new file mode 100644 (file)
index 0000000..cf59944
--- /dev/null
@@ -0,0 +1,14 @@
+package com.supwisdom.dlpay.system.service;
+
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.system.bean.SubjectDayShowBean;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+public interface SettleReportService {
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  String getSystemSettledate();
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  PageResult<SubjectDayShowBean> getSubjectDayInfos(String startdate,String enddate, boolean nodealshow);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/SettleReportServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/SettleReportServiceImpl.java
new file mode 100644 (file)
index 0000000..dabf5e8
--- /dev/null
@@ -0,0 +1,69 @@
+package com.supwisdom.dlpay.system.service.impl;
+
+import com.supwisdom.dlpay.framework.dao.SettleCtlDao;
+import com.supwisdom.dlpay.framework.dao.SubjectdayDao;
+import com.supwisdom.dlpay.framework.domain.TSettlectl;
+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.system.bean.SubjectDayInfo;
+import com.supwisdom.dlpay.system.bean.SubjectDayShowBean;
+import com.supwisdom.dlpay.system.service.SettleReportService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class SettleReportServiceImpl implements SettleReportService {
+  @Autowired
+  private SubjectdayDao subjectdayDao;
+  @Autowired
+  private SettleCtlDao settleCtlDao;
+
+  @Override
+  public String getSystemSettledate() {
+    TSettlectl settlectl = settleCtlDao.getOne(1);
+    if (null != settlectl && null != settlectl.getSettledate()) {
+      return settlectl.getSettledate().toString();
+    }
+    return DateUtil.getNow("yyyyMMdd");
+  }
+
+  @Override
+  public PageResult<SubjectDayShowBean> getSubjectDayInfos(String startdate, String enddate, boolean nodealshow) {
+    List<SubjectDayInfo> list = subjectdayDao.getAllTSubjectday(startdate, enddate);
+    if (StringUtil.isEmpty(list)) {
+      return new PageResult<>(99, "无数据");
+    }
+
+    List<SubjectDayShowBean> result = new ArrayList<>(0);
+    for (SubjectDayInfo info : list) {
+      SubjectDayShowBean bean = new SubjectDayShowBean();
+      bean.setSubjno(info.getSubjno());
+      bean.setSubjname(info.getSubjname());
+      bean.setFsubjno(info.getFsubjno() == null ? "-1" : info.getFsubjno());
+      bean.setSubjlevel(info.getSubjlevel());
+      bean.setDisplayflag(info.getDisplayflag());
+      bean.setLastdaydrbal(info.getLastdaydrbal() == null ? 0.00 : info.getLastdaydrbal());
+      bean.setLastdaycrbal(info.getLastdaycrbal() == null ? 0.00 : info.getLastdaycrbal());
+      bean.setDramt(info.getDramt() == null ? 0.00 : info.getDramt());
+      bean.setCramt(info.getCramt() == null ? 0.00 : info.getCramt());
+      bean.setDrbal(info.getDrbal() == null ? 0.00 : info.getDrbal());
+      bean.setCrbal(info.getCrbal() == null ? 0.00 : info.getCrbal());
+      if (bean.getLastdaydrbal() == 0 && bean.getLastdaycrbal() == 0 && bean.getDramt() == 0 && bean.getCramt() == 0 && bean.getDrbal() == 0 && bean.getCrbal() == 0) {
+        //无交易记录
+        if (nodealshow && "y".equals(bean.getDisplayflag())) {
+          result.add(bean); //显示
+        } else {
+          continue;
+        }
+      } else {
+        result.add(bean);
+      }
+    }
+    return new PageResult<SubjectDayShowBean>(result);
+  }
+}
index ca2922d..584b2f8 100755 (executable)
@@ -13,5 +13,6 @@
 
 .treeTable-icon.open .layui-icon-triangle-d:before {
     content: "\e625";
+    background-color: transparent;
 }
 
index 35efdcf..af7361a 100755 (executable)
@@ -10,91 +10,105 @@ layui.define(['layer', 'table'], function (exports) {
             if (!treetable.checkParam(param)) {
                 return;
             }
-            var doneCallback = param.done;
             // 获取数据
+            if (param.data) {
+                treetable.init(param, param.data);
+            } else {
+                $.getJSON(param.url, param.where, function (res) {
+                    treetable.init(param, res.data);
+                });
+            }
+        },
+        // 渲染表格
+        init: function (param, data) {
             var mData = [];
-            $.getJSON(param.url, param.where, function (res) {
-                var tNodes = res.data;
-                // 补上id和pid字段
-                for (var i = 0; i < tNodes.length; i++) {
-                    var tt = tNodes[i];
-                    if (!tt.id) {
-                        if (!param.treeIdName) {
-                            layer.msg('参数treeIdName不能为空', {icon: 5});
-                            return;
-                        }
-                        tt.id = tt[param.treeIdName];
+            var doneCallback = param.done;
+            var tNodes = data;
+            // 补上id和pid字段
+            for (var i = 0; i < tNodes.length; i++) {
+                var tt = tNodes[i];
+                if (!tt.id) {
+                    if (!param.treeIdName) {
+                        layer.msg('参数treeIdName不能为空', {icon: 5});
+                        return;
                     }
-                    if (!tt.pid) {
-                        if (!param.treePidName) {
-                            layer.msg('参数treePidName不能为空', {icon: 5});
-                            return;
-                        }
-                        tt.pid = tt[param.treePidName];
+                    tt.id = tt[param.treeIdName];
+                }
+                if (!tt.pid) {
+                    if (!param.treePidName) {
+                        layer.msg('参数treePidName不能为空', {icon: 5});
+                        return;
                     }
+                    tt.pid = tt[param.treePidName];
                 }
+            }
 
-                // 对数据进行排序
-                var sort = function (s_pid, data) {
-                    for (var i = 0; i < data.length; i++) {
-                        if (data[i].pid == s_pid) {
-                            var len = mData.length;
-                            if (len > 0 && mData[len - 1].id == s_pid) {
-                                mData[len - 1].isParent = true;
-                            }
-                            mData.push(data[i]);
-                            sort(data[i].id, data);
+            // 对数据进行排序
+            var sort = function (s_pid, data) {
+                for (var i = 0; i < data.length; i++) {
+                    if (data[i].pid == s_pid) {
+                        var len = mData.length;
+                        if (len > 0 && mData[len - 1].id == s_pid) {
+                            mData[len - 1].isParent = true;
                         }
+                        mData.push(data[i]);
+                        sort(data[i].id, data);
                     }
-                };
-                sort(param.treeSpid, tNodes);
+                }
+            };
+            sort(param.treeSpid, tNodes);
 
-                // 重写参数
-                param.url = undefined;
-                param.data = mData;
-                param.page = {
-                    count: param.data.length,
-                    limit: param.data.length
-                };
-                param.cols[0][param.treeColIndex].templet = function (d) {
-                    var mId = d.id;
-                    var mPid = d.pid;
-                    var isDir = d.isParent;
-                    var emptyNum = treetable.getEmptyNum(mPid, mData);
-                    var iconHtml = '';
-                    for (var i = 0; i < emptyNum; i++) {
-                        iconHtml += '<span class="treeTable-empty"></span>';
-                    }
+            // 重写参数
+            param.url = undefined;
+            param.data = mData;
+            param.page = {
+                count: param.data.length,
+                limit: param.data.length
+            };
+            param.cols[0][param.treeColIndex].templet = function (d) {
+                var mId = d.id;
+                var mPid = d.pid;
+                var isDir = d.isParent;
+                var showIcon = true;
+                if (undefined != param.showicon && (param.showicon == true || param.showicon == false)) {
+                    showIcon = param.showicon;
+                }
+                var emptyNum = treetable.getEmptyNum(mPid, mData);
+                var iconHtml = '';
+                for (var i = 0; i < emptyNum; i++) {
+                    iconHtml += '<span class="treeTable-empty"></span>';
+                }
+                if (showIcon) {
                     if (isDir) {
                         iconHtml += '<i class="layui-icon layui-icon-triangle-d"></i> <i class="layui-icon layui-icon-layer"></i>';
                     } else {
                         iconHtml += '<i class="layui-icon layui-icon-file"></i>';
                     }
-                    iconHtml += '&nbsp;&nbsp;';
-                    var ttype = isDir ? 'dir' : 'file';
-                    var vg = '<span class="treeTable-icon open" lay-tid="' + mId + '" lay-tpid="' + mPid + '" lay-ttype="' + ttype + '">';
-                    return vg + iconHtml + d[param.cols[0][param.treeColIndex].field] + '</span>'
-                };
+                }
+                iconHtml += '&nbsp;&nbsp;';
+                var ttype = isDir ? 'dir' : 'file';
+                var vg = '<span class="treeTable-icon open" lay-tid="' + mId + '" lay-tpid="' + mPid + '" lay-ttype="' + ttype + '">';
+                return vg + iconHtml + d[param.cols[0][param.treeColIndex].field] + '</span>'
+            };
 
-                param.done = function (res, curr, count) {
-                    $(param.elem).next().addClass('treeTable');
-                    $('.treeTable .layui-table-page').css('display', 'none');
-                    $(param.elem).next().attr('treeLinkage', param.treeLinkage);
-                    // 绑定事件换成对body绑定
-                    /*$('.treeTable .treeTable-icon').click(function () {
-                        treetable.toggleRows($(this), param.treeLinkage);
-                    });*/
-                    if (param.treeDefaultClose) {
-                        treetable.foldAll(param.elem);
-                    }
-                    if (doneCallback) {
-                        doneCallback(res, curr, count);
-                    }
-                };
+            param.done = function (res, curr, count) {
+                $(param.elem).next().addClass('treeTable');
+                $('.treeTable .layui-table-page').css('display', 'none');
+                $(param.elem).next().attr('treeLinkage', param.treeLinkage);
+                // 绑定事件换成对body绑定
+                /*$('.treeTable .treeTable-icon').click(function () {
+                    treetable.toggleRows($(this), param.treeLinkage);
+                });*/
+                if (param.treeDefaultClose) {
+                    treetable.foldAll(param.elem);
+                }
+                if (doneCallback) {
+                    doneCallback(res, curr, count);
+                }
+            };
 
-                // 渲染表格
-                table.render(param);
-            });
+            // 渲染表格
+            table.render(param);
         },
         // 计算缩进的数量
         getEmptyNum: function (pid, data) {
diff --git a/src/main/resources/templates/system/report/subjectday.html b/src/main/resources/templates/system/report/subjectday.html
new file mode 100644 (file)
index 0000000..75c140c
--- /dev/null
@@ -0,0 +1,165 @@
+<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="subjectday-search-form">
+            <input type="hidden" id="subjectday-hidden-maxdate" th:value="${maxdate}" />
+            <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="subjectday-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="subjectday-search-enddate" placeholder="截止日期" th:value="${maxdate}"
+                               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="subjectday-search-nodealshow" lay-skin="primary" title="显示未交易科目"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <button id="subjectday-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-btn-group">-->
+            <!--<button class="layui-btn" id="btn-fold-subjectday">仅看一级</button>-->
+            <!--<button class="layui-btn" id="btn-expand-subjectday">查看二级</button>-->
+        <!--</div>-->
+        <table class="layui-table" id="subjectDayTable" lay-filter="subjectDayTable-filter"></table>
+    </div>
+</div>
+
+<script type="text/html" id="subjectday-toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-fold-subjectday" lay-event="subjectdayShowFold">仅看一级</button>
+        <button class="layui-btn layui-btn-sm" id="btn-expand-subjectday" lay-event="subjectdayExpandAll">查看二级</button>
+    </div>
+</script>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate', 'treetable'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var laydate = layui.laydate;
+        var treetable = layui.treetable;
+
+        form.render("checkbox");
+        laydate.render({
+            elem: '#subjectday-search-startdate',
+            max: $("#subjectday-hidden-maxdate").val()
+        });
+        laydate.render({
+            elem: '#subjectday-search-enddate',
+            max: $("#subjectday-hidden-maxdate").val()
+        });
+
+        var renderTable = function (obj) {
+            layer.load(2);
+            treetable.render({
+                id: 'subjectDayReport',
+                title: '科目汇总表',
+                treeColIndex: 0,
+                treeSpid: '-1',
+                treeIdName: 'subjno',
+                treePidName: 'fsubjno',
+                treeDefaultClose: false,
+                treeLinkage: false,
+                elem: '#subjectDayTable',
+                url: '/report/subjectdaylist',
+                page: false,
+                where: obj,
+                showicon: false,
+                toolbar:'#subjectday-toolbar',
+                cols: [
+                    [
+                        {field: 'subjno', title: '科目号', align: 'left', rowspan: 2},
+                        {
+                            field: 'subjname', title: '科目名称', align: 'left', rowspan: 2, templet: function (d) {
+                                if (d.subjlevel == 1) {
+                                    return '<span>' + d.subjname + '</span>';
+                                } else {
+                                    return '<span>&nbsp;&nbsp;&nbsp;&nbsp;' + d.subjname + '</span>';
+                                }
+
+                            }
+                        },
+                        {align: 'center', title: '期初余额', colspan: 2},
+                        {align: 'center', title: '本期发生额', colspan: 2},
+                        {align: 'center', title: '期末余额', colspan: 2}
+                    ], [
+                        {field: 'lastdaydrbal', title: '借方', align: 'center'},
+                        {field: 'lastdaycrbal', title: '贷方', align: 'center'},
+                        {field: 'dramt', title: '借方', align: 'center'},
+                        {field: 'cramt', title: '贷方', align: 'center'},
+                        {field: 'drbal', title: '借方', align: 'center'},
+                        {field: 'crbal', title: '贷方', align: 'center'}
+                    ]
+                ],
+                done: function (res, curr, count) {
+                    layer.closeAll('loading');
+                }
+            });
+        }
+        renderTable({
+            startdate: $("#subjectday-search-startdate").val(),
+            enddate: $("#subjectday-search-enddate").val(),
+            nodealshow: false
+        });
+
+        $('#btn-expand-subjectday').click(function () {
+            treetable.expandAll('#subjectDayTable');
+        });
+
+        $('#btn-fold-subjectday').click(function () {
+            treetable.foldAll('#subjectDayTable');
+        });
+
+        $('#subjectday-search-btn').click(function () {
+            var startdate = $("#subjectday-search-startdate").val();
+            var enddate = $("#subjectday-search-enddate").val();
+            var nodealshow = $("#subjectday-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,
+                nodealshow: nodealshow
+            });
+        });
+
+        table.on('toolbar(subjectDayTable-filter)', function(obj){
+            switch(obj.event){
+                case 'subjectdayShowFold':
+                    treetable.foldAll('#subjectDayTable');
+                    break;
+                case 'subjectdayExpandAll':
+                    treetable.expandAll('#subjectDayTable');
+                    break;
+            }
+        });
+    });
+</script>
\ No newline at end of file