今天在项目中,运用到了Java树结构,是在一个查询中,选择树结构例如图片

该结构采用了前段的最新的知识,通过xml结构的数据库,后端Spring的映射实现的。

代码示例:

数据库:

<!-- 取得税种分布 -->
<select id="getTaxTypeDistribution" resultType="ElectronicTax">
<if test="taxtypeCode != null and taxtypeCode !='' ">
SELECT aa.taxtype_code, SUM( aa.amount ) amount, d.label AS taxtype_name
FROM (
</if>
SELECT e.taxtype_code, SUM( e.amount ) amount, e.taxtype_name FROM(
SELECT
e.taxtype_code, e.amount, e.taxtype_name
FROM ${jdbc.prefix}sys_electronic_tax_done e
INNER JOIN ${jdbc.prefix}sys_company c ON c.id=e.company_id
WHERE 1
<if test="cp != null and cp.isEmphases!=null">
and c.is_emphases=#{cp.isEmphases}
</if>
<if test="cp != null and cp.isSmall!=null">
and c.is_small=#{cp.isSmall}
</if>
<if test="currentMonth != null and currentMonth !='' ">
AND e.accounting REGEXP #{currentMonth}
</if>
<if test="startAmount != null and startAmount !='' ">
<![CDATA[AND e.amount>=#{startAmount}]]>
</if>
<if test="startTime!=null and lastTime!=null">
<![CDATA[AND e.accounting >= #{startTime} AND e.accounting <= #{lastTime}]]>
</if>
<if test="lastAmount != null and lastAmount !='' ">
<![CDATA[AND e.amount<=#{lastAmount}]]>
</if> <if test="taxpayerSn!=null and taxpayerSn!=''">
AND e.taxpayer_sn=#{taxpayerSn}
</if>
<if test="taxtypeCode != null and taxtypeCode !='' ">
AND e.taxtype_code REGEXP CONCAT('^(', #{taxtypeCode}, ')')
</if>
) e GROUP BY e.taxtype_code
<if test="taxtypeCode != null and taxtypeCode !='' ">
)aa INNER JOIN ${jdbc.prefix}sys_dict d ON aa.taxtype_code REGEXP
CONCAT('^', d.`value`) WHERE `value` REGEXP CONCAT('^(',
#{taxtypeCode}, ')$') AND d.type='taxtype_code' GROUP BY `value`
</if>
ORDER BY amount DESC
</select>

后台action层:

/**
* 企业税种分布统计
*
* @return
*/
@RequiresPermissions("analysis:analysis:getCompanyTaxTwelveTotal")
@RequestMapping(value = "/analysis/analysis/companyTaxTypeDistribution")
public String companyTaxTypeDistribution()
{
List<String> yearMonthList = companyService.getYearMonth();
Page<ElectronicTax> page = new Page<ElectronicTax>(request, response);
page.setPageSize(10); el.setCurrentMonth(null);
el.setStartTime(yearMonthList.get(11) + "-01");
el.setLastTime(yearMonthList.get(0) + "-01"); List<ElectronicTax> taxList = companyService.getElectronicTaxDao().getTaxTypeDistribution(el);
page = companyService.getTaxTypeDistribution(page, el); model.addAttribute("taxList", taxList);
model.addAttribute("page", page);
model.addAttribute("yearMonthList", yearMonthList); return "addons/analysis/analysis/companyTaxTypeList";
}

前台页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="org.apache.shiro.web.filter.authc.FormAuthenticationFilter"%>
<%@ include file="../../../admin/defaults/include/header.jsp" %> <body>
<script type="text/javascript" src="${ctxStatic}/js/gvChart/jsapi.js"></script>
<script type="text/javascript" src="${ctxStatic}/js/gvChart/format+zh_CN,default,corechart.I.js"></script>
<script type="text/javascript" src="${ctxStatic}/js/gvChart/jquery.gvChart-1.0.1.min.js"></script>
<script type="text/javascript" src="${ctxStatic}/js/gvChart/jquery.ba-resize.min.js"></script>
<%@ include file="../../../admin/defaults/include/treetable.jsp" %>
<script type="text/javascript">
gvChartInit();
$(document).ready(function(){
$('#myTable5').gvChart({
chartType: 'PieChart',
gvSettings: {
vAxis: {title: 'No of players'},
hAxis: {title: 'Month'},
width: 710,
height: 400
}
}); $("#treeTable").treeTable({expandLevel : 3}).show(); $('#guosScjydzxzqhszDm').attr('name','company.guosScjydzxzqhszDm');
});
function updateSort() {
loading('正在提交,请稍等...');
$("#form_menu").attr("action", "${ctx}/sys/menu/updateSort");
$("#form_menu").submit();
}
</script>
<div id="append_parent"></div>
<div id="ajaxwaitid"></div>
<link href="${ctxStatic}${fns:getConfig('adminThems')}/css/font/font-awesome/css/font-awesome.min.css" rel="stylesheet" />
<!--[if IE 7]>
<link rel="stylesheet" href="${ctxStatic}${fns:getConfig('adminThems')}/css/font/font-awesome/css/font-awesome-ie7.min.css">
<![endif]-->
<div class="page" style="overflow:auto;">
<div class="fixed-bar">
<div class="item-title">
<h3>分析</h3>
<ul class="tab-base">
<!-- <li><a href="./amountFilter<c:if test="${el.cp.isEmphases=='Y' }">?el.cp.isEmphases=Y</c:if><c:if test="${el.cp.isSmall=='Y' }">?el.cp.isSmall=Y</c:if>"><span>所有记录</span></a></li> -->
<li><a href="./taxTypeDistribution<c:if test="${el.cp.isEmphases=='Y' }">?el.cp.isEmphases=Y</c:if><c:if test="${el.cp.isSmall=='Y' }">?el.cp.isSmall=Y</c:if>" class="current"><span>税种分布</span></a></li>
<li><a href="./twelveTaxType<c:if test="${el.cp.isEmphases=='Y' }">?el.cp.isEmphases=Y</c:if><c:if test="${el.cp.isSmall=='Y' }">?el.cp.isSmall=Y</c:if>"><span>走势图</span></a></li>
<li><a href="./columnTaxType<c:if test="${el.cp.isEmphases=='Y' }">?el.cp.isEmphases=Y</c:if><c:if test="${el.cp.isSmall=='Y' }">?el.cp.isSmall=Y</c:if>"><span>柱状图</span></a></li>
</ul>
</div>
</div>
<div class="fixed-empty"></div>
<form id="searchForm" action="" method="post" class="breadcrumb form-search">
<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
<table class="tb-type1 noborder search">
<tbody>
<tr>
<th>时间跨度:</th>
<td>
<select name="el.startTime">
<c:forEach items="${yearMonthList}" var="value">
<option value="${value }"${fn:indexOf(el.startTime, value)!=-1?' selected':'' }>${value }</option>
</c:forEach>
</select>
-
<select name="el.lastTime">
<c:forEach items="${yearMonthList}" var="value">
<option value="${value }"${fn:indexOf(el.lastTime, value)!=-1?' selected':'' }>${value }</option>
</c:forEach>
</select>
</td>
<th>金额:</th>
<td>
<input name="el.startAmount" placeholder="金额下限" value="${el.startAmount }" maxlength="50" class="input-medium"/> -
<input name="el.lastAmount" placeholder="金额上限" value="${el.lastAmount }" maxlength="50" class="input-medium"/>
</td>
<th>税种:</th>
<td>
<sys:dicttreeselect id="taxtypeCode" name="el.taxtypeCode" value="${el.taxtypeCode}" labelName="el.taxtypeName" labelValue="${el.taxtypeName }"
title="税种" url="/sys/dict/treeData?type=taxtype_code" cssStyle="width:170px;" cssClass="required txt" notAllowSelectParent="false" notAllowSelectRoot="falsse" checked="true" isChild="true" />
</td>
<td><a href="javascript:void(0);" id="ncsubmit" class="btn-search " title="查询" onclick="$('#searchForm').submit();">&nbsp;</a></td>
<td class="w120">&nbsp;</td>
</tr>
</tbody>
</table>
</form>
<sys:message content="${message}"/>
<table class="table tb-type2" id="contentTable" style="width:400px; float:left;">
<thead>
<tr>
<th>税种</th>
<th>金额</th>
</tr>
</thead>
<tbody>
<c:forEach items="${page.list}" var="el">
<tr>
<td>${el.taxtypeName}</td>
<td><fmt:formatNumber value="${el.amount}" pattern="¥#,#00.00#"/></td>
</tr>
</c:forEach>
</tbody>
<tfoot>
<tr class="tfoot">
<td colspan="5">
<div class="pagination">
${page }
</div>
</td>
</tr>
</tfoot>
</table>
<div style="float:left;">
<table id='myTable5'>
<caption></caption>
<thead>
<tr> <th></th>
<c:forEach items="${taxList }" var="item">
<th>${item.taxtypeName }</th>
</c:forEach>
</tr>
</thead>
<tbody>
<tr>
<th>${el.currentMonth }</th>
<c:forEach items="${taxList }" var="item">
<td>${item.amount }</td>
</c:forEach>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>

Java树结构的更多相关文章

  1. Java 树结构实际应用 一(堆排序2秒排完800w数据)

    堆排序 1 堆排序基本介绍 1) 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复 杂度均为 O(nlogn),它也是不稳定排序. 2) 堆是具有以下性 ...

  2. Java 树结构实际应用 二(哈夫曼树和哈夫曼编码)

     赫夫曼树 1 基本介绍 1) 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为 最优二叉树,也称为哈夫曼树(Huffman Tree), ...

  3. Java 树结构的基础部分(一)

    二叉树 1.1 为什么需要树这种数据结构 1) 数组存储方式的分析 优点:通过下标方式访问元素,速度快.对于有序数组,还可使用二分查找提高检索速度. 缺点:如果要检索具体某个值,或者插入值(按一定顺序 ...

  4. Java 树结构的基础部分(二)

    1 顺序存储二叉树 1.1 顺序存储二叉树的概念  基本说明 从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组, 看下面的示意图.  要求: 1) 右 ...

  5. Java 树结构实际应用 三(二叉排序树)

    二叉排序树 1 先看一个需求 给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加   2 解决方案分析  使用数组 数组未排序, 优点:直接在数组尾添 ...

  6. Java 树结构实际应用 四(平衡二叉树/AVL树)

    平衡二叉树(AVL 树) 1 看一个案例(说明二叉排序树可能的问题) 给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在.  左边 BST 存在的问题分析: ...

  7. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  8. Java数据结构和算法(三)顺序存储的树结构

    Java数据结构和算法(三)顺序存储的树结构 二叉树也可以用数组存储,可以和完全二叉树的节点一一对应. 一.树的遍历 // 二叉树保存在数组中 int[] data; public void preO ...

  9. JAVA 转换 树结构数据

    JAVA 转换 树结构数据 第一步:引入fastjson <dependency> <groupId>com.alibaba</groupId> <artif ...

随机推荐

  1. 再来看看Java的新特性——Stream流

    半年前开始试着使用Java的新特性,给我印象最深的就是Stream流和Optional.其中Stream提高了看法效率,让代码看起来十分清爽. 为什么要使用流? 摘要中已经说明了,为了提高开发效率.流 ...

  2. Review For Exam

    Review For Exam [2019 福建省赛] 一个很简单的状态压缩DP,结果集体走偏 如何解决连续几日的限制问题?这种东西普通的DP很难写 #include <bits/stdc++. ...

  3. springboot多数据源+jta事务管理配置

    1.创建一个maven项目,导入相关配置: <?xml version="1.0" encoding="UTF-8"?> <project x ...

  4. pip install torch出现错误

    首先使用Python的pip安装命令: pip install torch 出现错误 解决办法:这时需要先下载pytorch包,根据自己的python版本选择.pytorch包链接: https:// ...

  5. [从 0 开始的 Angular 生活]No.38 实现一个 Angular Router 切换组件页面(一)

    前言 今天是进入公司的第三天,为了能尽快投入项目与成为团队可用的战力,我正在努力啃官方文档学习 Angular 的知识,所以这一篇文章主要是记录我如何阅读官方文档后,实现这个非常基本的.带导航的网页应 ...

  6. 做成像的你不得不了解的真相2-灵敏度和QE

    科研级相机的灵敏度由三个主要参数决定: 探测器的QE, 像元尺寸和相机噪声. 后两项我们以后再做专题讨论.这期先讲讲小编认为顶顶重要,看起来最容易理解,但是其实还有些奥妙的QE. QE-量子效率 QE ...

  7. mysql安装后,进DOS输入命令mysql,提示错误:mysql ERROR 1045 (28000)的解决办法

    一.修改my.ini文件,并重启mysql服务 找到配置文件my.ini  ,然后将其打开,可以选择用记事本打开 打开后,搜索mysqld关键字,找到后,在mysqld下面添加skip-grant-t ...

  8. Angular开发者指南(四)控制器

    了解控制器controller 在AngularJS中,Controller由JavaScript构造函数定义,用于扩充AngularJS Scope. 当控制器通过ng-controller指令连接 ...

  9. Qt HWND转QWidget

    HWND m_hWnd; QWidget *newWidget; newWidget = QWidget::find((WId)m_hWnd): //需要用(WID)

  10. C语言数据类型char

    char简介 char是C/C++中的基本数据类型,可容纳单个字符的一种基本数据类型. char占一个字节,也就是8个bit(二进制位),0000 0000 ~ 1111 1111,在无符号类型时ch ...