完成数据分析
This commit is contained in:
parent
155afa715d
commit
47c7fa9ca7
|
|
@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import org.springframework.web.servlet.ModelAndView;
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
@ -52,7 +53,7 @@ public class DataAnalysisController extends BaseController{
|
||||||
public ModelAndView defaultHandle(HttpServletRequest req,
|
public ModelAndView defaultHandle(HttpServletRequest req,
|
||||||
HttpServletResponse res) throws Exception {
|
HttpServletResponse res) throws Exception {
|
||||||
req.setAttribute("users", getSubmitUsers(req));
|
req.setAttribute("users", getSubmitUsers(req));
|
||||||
return new ModelAndView("dataAnalysis");
|
return new ModelAndView("dfm/dataAnalysis");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -154,7 +155,8 @@ public class DataAnalysisController extends BaseController{
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
@RequestMapping("/analysis")
|
@RequestMapping("/analysis")
|
||||||
public void analysis(HttpServletRequest req, HttpServletResponse res) throws Exception {
|
@ResponseBody
|
||||||
|
public Result analysis(HttpServletRequest req, HttpServletResponse res) throws Exception {
|
||||||
String projectName = req.getParameter("projectName");
|
String projectName = req.getParameter("projectName");
|
||||||
String submitUser = req.getParameter("submitUser");
|
String submitUser = req.getParameter("submitUser");
|
||||||
|
|
||||||
|
|
@ -163,10 +165,8 @@ public class DataAnalysisController extends BaseController{
|
||||||
|
|
||||||
String analysisType = req.getParameter("analysisType");
|
String analysisType = req.getParameter("analysisType");
|
||||||
|
|
||||||
//List<DataAnalysisBean> data = null;
|
|
||||||
Map<String, Object> data = new TreeMap<>();
|
Map<String, Object> data = new TreeMap<>();
|
||||||
|
|
||||||
UserInfo currentUser = getUserInfo(req);
|
|
||||||
//获取当前登陆用户的用户组
|
//获取当前登陆用户的用户组
|
||||||
//分析原则:系统管理员分析所有的,部门管理员只能分析本部门的,普通用户只能分析自己的
|
//分析原则:系统管理员分析所有的,部门管理员只能分析本部门的,普通用户只能分析自己的
|
||||||
|
|
||||||
|
|
@ -174,7 +174,8 @@ public class DataAnalysisController extends BaseController{
|
||||||
//校验projectName是否是当前用户可以看到的
|
//校验projectName是否是当前用户可以看到的
|
||||||
Result checkResult = checkProjectNameByLoginUser(req, res);
|
Result checkResult = checkProjectNameByLoginUser(req, res);
|
||||||
if(null == checkResult || !checkResult.isSuccess()) {
|
if(null == checkResult || !checkResult.isSuccess()) {
|
||||||
outputJson(res, JSON.toJSONString(checkResult));
|
// outputJson(res, JSON.toJSONString(checkResult));
|
||||||
|
return checkResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<DataAnalysisBean> result = dataAnalysisService.analysisByProject(projectName, startSubmitTime, endSubmitTime);
|
List<DataAnalysisBean> result = dataAnalysisService.analysisByProject(projectName, startSubmitTime, endSubmitTime);
|
||||||
|
|
@ -256,8 +257,8 @@ public class DataAnalysisController extends BaseController{
|
||||||
Result result = new Result();
|
Result result = new Result();
|
||||||
result.setSuccess(false);
|
result.setSuccess(false);
|
||||||
result.setMessage("分析失败,未选择分析类型!");
|
result.setMessage("分析失败,未选择分析类型!");
|
||||||
outputJson(res, JSON.toJSONString(result));
|
// outputJson(res, JSON.toJSONString(result));
|
||||||
return;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -266,7 +267,8 @@ public class DataAnalysisController extends BaseController{
|
||||||
result.setSuccess(true);
|
result.setSuccess(true);
|
||||||
result.setMessage("分析成功");
|
result.setMessage("分析成功");
|
||||||
result.setData(data);
|
result.setData(data);
|
||||||
outputJson(res, JSON.toJSONString(result));
|
// outputJson(res, JSON.toJSONString(result));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,498 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||||
|
<head>
|
||||||
|
<th:block th:include="include :: header('数据分析')" />
|
||||||
|
<th:block th:include="include :: select2-css" />
|
||||||
|
</head>
|
||||||
|
<body class="gray-bg">
|
||||||
|
<div class="container-div">
|
||||||
|
|
||||||
|
<div class="main-content">
|
||||||
|
<form id="dataAnalysisForm" class="form-horizontal">
|
||||||
|
<h4 class="form-header h4">数据分析</h4>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-1" style="text-align:right;">
|
||||||
|
<label class="check-box">
|
||||||
|
<input type="checkbox" name="analysisType" value="submitProject">
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<label class="col-sm-2 control-label">项目描述:</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<input name="projectName" id="projectName" placeholder="请输入项目名称" class="form-control" type="text" maxlength="30" >
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-1" style="text-align:right;">
|
||||||
|
<label class="check-box">
|
||||||
|
<input type="checkbox" name="analysisType" value="submitUser">
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<label class="col-sm-2 control-label">上传人:</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<select name="submitUser" id="submitUser" class="form-control m-b">
|
||||||
|
<option value="-1">--请选择--</option>
|
||||||
|
<option th:each="user : ${users}" th:text="${user.username}" th:value="${user.username}"></option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-1" style="text-align:right;"></div>
|
||||||
|
<label class="col-sm-2 control-label is-required">上传时间段:</label>
|
||||||
|
<div class="select-time col-sm-7">
|
||||||
|
<input type="text" style="width: 200px;display: inline" class="form-control time-input" id="startSubmitTime" placeholder="开始时间" name="startSubmitTime" required readOnly/>
|
||||||
|
<span>-</span>
|
||||||
|
<input type="text" style="width: 200px;display: inline" class="form-control time-input" id="endSubmitTime" placeholder="结束时间" name="endSubmitTime" required readOnly/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-10" >
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-1"></div>
|
||||||
|
<label class="col-sm-2 control-label">所有用户:</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<label class="check-box">
|
||||||
|
<input type="checkbox" name="analysisType" value="allUser" >
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-10" >
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-1"></div>
|
||||||
|
<label class="col-sm-2 control-label">所有问题:</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<label class="check-box">
|
||||||
|
<input type="checkbox" name="analysisType" value="allIssue" checked="checked">
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-offset-5 col-sm-10">
|
||||||
|
<button type="button" class="btn btn-sm btn-primary" onclick="submitAnalysis()"><i class="fa fa-check"></i>提 交</button>
|
||||||
|
<button type="button" class="btn btn-sm btn-danger" onclick="closeItem()"><i class="fa fa-reply-all"></i>关 闭 </button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-sm-12 select-table table-striped" >
|
||||||
|
<table id="analysisResultTable"></table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="analysisResultChart" style="width:98%;height:400px;"></div>
|
||||||
|
</div>
|
||||||
|
<th:block th:include="include :: footer" />
|
||||||
|
<script th:inline="javascript">
|
||||||
|
|
||||||
|
var prefix = ctx + "dataAnalysis.do";
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
|
||||||
|
var options = {
|
||||||
|
sortName: "roleSort",
|
||||||
|
modalName: "用户数据分析",
|
||||||
|
pagination: false,
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: 'submitUserName',
|
||||||
|
title: '上传人',
|
||||||
|
sortable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'issueQty',
|
||||||
|
title: '问题数量',
|
||||||
|
sortable: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
$.table.init(options);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化
|
||||||
|
*/
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
$.each($("input:checkbox[name='analysisType']"), function(i, obj){
|
||||||
|
$(this).on("ifClicked",function(){
|
||||||
|
$.each($("input:checkbox[name='analysisType']"), function(i, obj){
|
||||||
|
$(this).iCheck('uncheck');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//设置时间默认值
|
||||||
|
var today = new Date();
|
||||||
|
var endSubmitTime = today.getFullYear().toString() + '-'+addzero(today.getMonth() + 1) + '-' + addzero(today.getDate());
|
||||||
|
$('#endSubmitTime').val(endSubmitTime);
|
||||||
|
|
||||||
|
//
|
||||||
|
var startTime = new Date(today.getFullYear(),today.getMonth() - 3 ,today.getDate());
|
||||||
|
var startSubmitTime = startTime.getFullYear().toString() + '-'+addzero(startTime.getMonth() + 1) + '-' + addzero(startTime.getDate());
|
||||||
|
$('#startSubmitTime').val(startSubmitTime);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
function addzero(v) {
|
||||||
|
if (v < 10) return '0' + v;
|
||||||
|
return v.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
//提交分析
|
||||||
|
function submitAnalysis(){
|
||||||
|
|
||||||
|
//验证业务选择条件
|
||||||
|
var analysisType = $("[name='analysisType']:checked").val();
|
||||||
|
|
||||||
|
if(!analysisType) {
|
||||||
|
$.modal.alertError("请选择分析类型");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if("submitUser" == analysisType) {
|
||||||
|
if($("#submitUser").val().trim() == "") {
|
||||||
|
$.modal.alertError("请填写提交人");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if("submitProject" == analysisType) {
|
||||||
|
if($("#projectName").val().trim() == "") {
|
||||||
|
$.modal.alertError("请填写项目描述");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var data = $("#dataAnalysisForm").serialize();
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: prefix + "/analysis",
|
||||||
|
data: data,
|
||||||
|
cache:false,
|
||||||
|
dataType:"json",
|
||||||
|
success: function(json){
|
||||||
|
//销毁表格
|
||||||
|
$("#analysisResultTable").html("");
|
||||||
|
//销毁图表
|
||||||
|
$("#analysisResultChart").html("");
|
||||||
|
var myChart = echarts.init(document.getElementById('analysisResultChart'));
|
||||||
|
myChart.dispose();
|
||||||
|
if (json.success) {
|
||||||
|
$.modal.alertSuccess("分析成功");
|
||||||
|
showAnalysisResult(json.data);
|
||||||
|
} else {
|
||||||
|
$.modal.alertError("分析失败,原因是:" + json.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//展示分析结果
|
||||||
|
function showAnalysisResult(data) {
|
||||||
|
var analysisType = $("[name='analysisType']:checked").val();
|
||||||
|
|
||||||
|
if ("submitUser" == analysisType) {
|
||||||
|
showAnalysisResultByUserWithTable(data);
|
||||||
|
showAnalysisResultByUserWithChart(data);
|
||||||
|
} else if ("submitProject" == analysisType) {
|
||||||
|
showAnalysisResultByProjectWithTable(data);
|
||||||
|
showAnalysisResultByProjectWithChart(data);
|
||||||
|
} else if ("allUser" == analysisType) {
|
||||||
|
showAnalysisResultByAllUserWithTable(data);
|
||||||
|
showAnalysisResultByAllUserWithChart(data);
|
||||||
|
} else if ("allIssue" == analysisType) {
|
||||||
|
showAnalysisResultByUserWithTable(data);
|
||||||
|
showAnalysisResultByUserWithChart(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//按照提交人
|
||||||
|
function showAnalysisResultByAllUserWithTable(data) {
|
||||||
|
|
||||||
|
var options = {
|
||||||
|
sortName: "roleSort",
|
||||||
|
modalName: "问题数据分析",
|
||||||
|
pagination: false,
|
||||||
|
id:"analysisResultTable"
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
var table = $("#analysisResultTable");
|
||||||
|
var result = data.result;
|
||||||
|
var tableHtml = "";
|
||||||
|
tableHtml += "<TABLE id=grid ";
|
||||||
|
tableHtml += "style='BORDER-TOP-WIDTH: 0px; FONT-WEIGHT: normal; BORDER-LEFT-WIDTH: 0px; BORDER-LEFT-COLOR: #cccccc;BORDER-BOTTOM-WIDTH: 0px; BORDER-BOTTOM-COLOR: #cccccc; WIDTH: 100%; BORDER-TOP-COLOR: #cccccc; FONT-STYLE: normal; BACKGROUND-COLOR: #cccccc; BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none; BORDER-RIGHT-COLOR: #cccccc'";
|
||||||
|
tableHtml += "cellSpacing=1 cellPadding=2 rules=all border=0> ";
|
||||||
|
tableHtml += "<TBODY>";
|
||||||
|
tableHtml += "<TR style='FONT-WEIGHT: bold;text-align:center; FONT-STYLE: normal; BACKGROUND-COLOR: #eeeeee; TEXT-DECORATION: none'>";
|
||||||
|
|
||||||
|
tableHtml += "<TD>上传人</TD>";
|
||||||
|
tableHtml += "<TD>问题数量</TD>";
|
||||||
|
|
||||||
|
tableHtml += "</TR>";
|
||||||
|
|
||||||
|
//构造数据行
|
||||||
|
if (null == result || result.length == 0) {
|
||||||
|
tableHtml += "<TR style='FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none'>";
|
||||||
|
tableHtml += "<TD colspan=2>--没有数据--</TD>";
|
||||||
|
tableHtml += "</TR>";
|
||||||
|
} else {
|
||||||
|
for (var i=0;i<result.length;i++) {
|
||||||
|
tableHtml += "<TR style='FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none'>";
|
||||||
|
tableHtml += "<TD >" + result[i].submitUserName + "</TD>";
|
||||||
|
tableHtml += "<TD >" + result[i].issueQty + "</TD>";
|
||||||
|
tableHtml += "</TR>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tableHtml += "</TBODY>";
|
||||||
|
tableHtml += "</TABLE>";
|
||||||
|
|
||||||
|
$(table).html(tableHtml);
|
||||||
|
|
||||||
|
$("#analysisResultTable").bootstrapTable(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
//按照提交人
|
||||||
|
function showAnalysisResultByAllUserWithChart(data) {
|
||||||
|
if (null == data || null == data.result) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var result = data.result;
|
||||||
|
var myChart = echarts.init(document.getElementById('analysisResultChart'));
|
||||||
|
|
||||||
|
var xAxisData = new Array();
|
||||||
|
var seriesData = new Array();
|
||||||
|
|
||||||
|
for(var i=0;i<result.length;i++) {
|
||||||
|
xAxisData.push(result[i].submitUserName);
|
||||||
|
seriesData.push(result[i].issueQty);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 指定图表的配置项和数据
|
||||||
|
var option = {
|
||||||
|
title: {
|
||||||
|
text: '根据提交人数据分析图表展示'
|
||||||
|
},
|
||||||
|
tooltip: {},
|
||||||
|
legend: {
|
||||||
|
data:['问题数量']
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
data: xAxisData
|
||||||
|
},
|
||||||
|
yAxis: {},
|
||||||
|
series: [{
|
||||||
|
name: '问题数量',
|
||||||
|
type: 'bar',
|
||||||
|
data: seriesData
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
|
||||||
|
// 使用刚指定的配置项和数据显示图表。
|
||||||
|
myChart.setOption(option);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//按照提交人
|
||||||
|
function showAnalysisResultByUserWithTable(data) {
|
||||||
|
var result = data.result;
|
||||||
|
var options = {
|
||||||
|
sortName: "roleSort",
|
||||||
|
modalName: "问题数据分析",
|
||||||
|
pagination: false,
|
||||||
|
id:"analysisResultTable",
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
field: 'issueDescription',
|
||||||
|
title: '问题描述',
|
||||||
|
sortable: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'issueQty',
|
||||||
|
title: '问题数量',
|
||||||
|
sortable: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
$.table.init(options);
|
||||||
|
$("#analysisResultTable").bootstrapTable('load', result);
|
||||||
|
}
|
||||||
|
|
||||||
|
//按照提交人
|
||||||
|
function showAnalysisResultByUserWithChart(data) {
|
||||||
|
if (null == data || null == data.result) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var result = data.result;
|
||||||
|
var myChart = echarts.init(document.getElementById('analysisResultChart'));
|
||||||
|
|
||||||
|
var xAxisData = new Array();
|
||||||
|
var seriesData = new Array();
|
||||||
|
|
||||||
|
for(var i=0;i<result.length;i++) {
|
||||||
|
xAxisData.push(result[i].issueDescription);
|
||||||
|
seriesData.push(result[i].issueQty);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 指定图表的配置项和数据
|
||||||
|
var option = {
|
||||||
|
title: {
|
||||||
|
text: '根据提交人数据分析图表展示'
|
||||||
|
},
|
||||||
|
tooltip: {},
|
||||||
|
legend: {
|
||||||
|
data:['问题数量']
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
data: xAxisData
|
||||||
|
},
|
||||||
|
yAxis: {},
|
||||||
|
series: [{
|
||||||
|
name: '问题数量',
|
||||||
|
type: 'bar',
|
||||||
|
data: seriesData
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
|
||||||
|
// 使用刚指定的配置项和数据显示图表。
|
||||||
|
myChart.setOption(option);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//按照项目
|
||||||
|
function showAnalysisResultByProjectWithTable(data) {
|
||||||
|
|
||||||
|
var result = data.result;
|
||||||
|
var versions = data.versions;
|
||||||
|
var options = {
|
||||||
|
sortName: "roleSort",
|
||||||
|
modalName: "问题数据分析",
|
||||||
|
pagination: false,
|
||||||
|
id:"analysisResultTable"
|
||||||
|
};
|
||||||
|
|
||||||
|
var table = $("#analysisResultTable");
|
||||||
|
var tableHtml = "";
|
||||||
|
tableHtml += "<TABLE id=grid ";
|
||||||
|
tableHtml += "style='BORDER-TOP-WIDTH: 0px; FONT-WEIGHT: normal; BORDER-LEFT-WIDTH: 0px; BORDER-LEFT-COLOR: #cccccc;BORDER-BOTTOM-WIDTH: 0px; BORDER-BOTTOM-COLOR: #cccccc; WIDTH: 100%; BORDER-TOP-COLOR: #cccccc; FONT-STYLE: normal; BACKGROUND-COLOR: #cccccc; BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none; BORDER-RIGHT-COLOR: #cccccc'";
|
||||||
|
tableHtml += "cellSpacing=1 cellPadding=2 rules=all border=0> ";
|
||||||
|
tableHtml += "<TBODY>";
|
||||||
|
tableHtml += "<TR style='FONT-WEIGHT: bold;text-align:center; FONT-STYLE: normal; BACKGROUND-COLOR: #eeeeee; TEXT-DECORATION: none'>";
|
||||||
|
|
||||||
|
tableHtml += "<TD>问题描述</TD>";
|
||||||
|
if (null != versions && versions.length > 0) {
|
||||||
|
//构造表头
|
||||||
|
for (var i = 0; i < versions.length; i++) {
|
||||||
|
tableHtml += "<TD>版本" + versions[i] + "</TD>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tableHtml += "</TR>";
|
||||||
|
|
||||||
|
//构造数据行
|
||||||
|
if (null == result || result.length == 0) {
|
||||||
|
tableHtml += "<TR style='FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none'>";
|
||||||
|
if (null != versions && versions.length > 0) {
|
||||||
|
tableHtml += "<TD colspan=" + (versions.length + 1)
|
||||||
|
+ ">--没有数据--</TD>";
|
||||||
|
} else {
|
||||||
|
tableHtml += "<TD >--没有数据--</TD>";
|
||||||
|
}
|
||||||
|
tableHtml += "</TR>";
|
||||||
|
} else {
|
||||||
|
for ( var key in result) {
|
||||||
|
tableHtml += "<TR style='FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none'>";
|
||||||
|
tableHtml += "<TD >" + key + "</TD>";
|
||||||
|
for (var i = 0; i < result[key].length; i++) {
|
||||||
|
tableHtml += "<TD >" + result[key][i].issueQty + "</TD>";
|
||||||
|
}
|
||||||
|
tableHtml += "</TR>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tableHtml += "</TBODY>";
|
||||||
|
tableHtml += "</TABLE>";
|
||||||
|
|
||||||
|
$(table).html(tableHtml);
|
||||||
|
$("#analysisResultTable").bootstrapTable(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
//按照项目
|
||||||
|
function showAnalysisResultByProjectWithChart(data) {
|
||||||
|
if (null == data || null == data.result || null == data.versions) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var GROUP_VERSION_COUNT = 3;
|
||||||
|
var result = data.result;
|
||||||
|
var versions = data.versions;
|
||||||
|
var myChart = echarts.init(document.getElementById('analysisResultChart'));
|
||||||
|
|
||||||
|
var xAxisData = new Array();
|
||||||
|
|
||||||
|
for ( var key in result) {
|
||||||
|
xAxisData.push(key);
|
||||||
|
}
|
||||||
|
var seriesDataArr = new Array();
|
||||||
|
for (var i = 0; i < versions.length; i++) {
|
||||||
|
var seriesData = {};
|
||||||
|
seriesData.name = "版本" + versions[i];
|
||||||
|
seriesData.type = "bar";
|
||||||
|
seriesData.data = [];
|
||||||
|
for ( var key in result) {
|
||||||
|
var list = result[key];
|
||||||
|
for (var j = 0; j < list.length; j++) {
|
||||||
|
if (list[j].version == versions[i]) {
|
||||||
|
seriesData.data.push(list[j].issueQty);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
seriesDataArr.push(seriesData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 指定图表的配置项和数据
|
||||||
|
var option = {
|
||||||
|
title : {
|
||||||
|
text : '根据项目描述数据分析图表展示'
|
||||||
|
},
|
||||||
|
tooltip : {},
|
||||||
|
legend : {
|
||||||
|
data : [ '问题数量' ]
|
||||||
|
},
|
||||||
|
xAxis : {
|
||||||
|
type : 'category',
|
||||||
|
data : xAxisData
|
||||||
|
},
|
||||||
|
yAxis : {},
|
||||||
|
series : seriesDataArr
|
||||||
|
};
|
||||||
|
|
||||||
|
// 使用刚指定的配置项和数据显示图表。
|
||||||
|
myChart.setOption(option);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -111,7 +111,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// document.location.href = 'project.do?method=serverMonitor&server=' + v;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function fillParams(project) {
|
function fillParams(project) {
|
||||||
|
|
@ -152,7 +151,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// document.location.href = 'project.do?method=stopProject&pid=' + pid + '&server=' + server;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@
|
||||||
<script th:src="@{/ajax/libs/layui/layui.js}"></script>
|
<script th:src="@{/ajax/libs/layui/layui.js}"></script>
|
||||||
<script th:src="@{/ruoyi/js/common.js?v=4.4.0}"></script>
|
<script th:src="@{/ruoyi/js/common.js?v=4.4.0}"></script>
|
||||||
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.4.0}"></script>
|
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.4.0}"></script>
|
||||||
|
<script th:src="@{/ajax/libs/echarts/echarts.js}"></script>
|
||||||
<script th:inline="javascript"> var ctx = [[@{/}]]; </script>
|
<script th:inline="javascript"> var ctx = [[@{/}]]; </script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ public class DataAnalysisDAO extends JdbcBaseDao {
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("SELECT t.F_PROJECT_NAME, t.F_VERSION , t.F_ISSUE_DESCRIPTION, SUM(t.F_ISSUE_QTY) F_ISSUE_QTY ");
|
sb.append("SELECT t.F_PROJECT_NAME, t.F_VERSION , t.F_ISSUE_DESCRIPTION, SUM(t.F_ISSUE_QTY) F_ISSUE_QTY ");
|
||||||
sb.append("FROM dfm.t_dataays t ");
|
sb.append("FROM t_dataays t ");
|
||||||
sb.append("where t.F_PROJECT_NAME = ? AND T.F_SUBMIT_TIME >= ? AND T.F_SUBMIT_TIME <= ? ");
|
sb.append("where t.F_PROJECT_NAME = ? AND T.F_SUBMIT_TIME >= ? AND T.F_SUBMIT_TIME <= ? ");
|
||||||
sb.append("group by t.F_PROJECT_NAME, t.F_VERSION , t.F_ISSUE_DESCRIPTION ");
|
sb.append("group by t.F_PROJECT_NAME, t.F_VERSION , t.F_ISSUE_DESCRIPTION ");
|
||||||
sb.append("order by SUM(t.F_ISSUE_QTY) desc, t.F_VERSION ASC");
|
sb.append("order by SUM(t.F_ISSUE_QTY) desc, t.F_VERSION ASC");
|
||||||
|
|
@ -47,7 +47,7 @@ public class DataAnalysisDAO extends JdbcBaseDao {
|
||||||
public List<DataAnalysisBean> analysisByUser(String userName, String startSubmitTime, String endSubmitTime) {
|
public List<DataAnalysisBean> analysisByUser(String userName, String startSubmitTime, String endSubmitTime) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("SELECT t.F_SUBMIT_USERNAME, t.F_ISSUE_DESCRIPTION, SUM(t.F_ISSUE_QTY) F_ISSUE_QTY ");
|
sb.append("SELECT t.F_SUBMIT_USERNAME, t.F_ISSUE_DESCRIPTION, SUM(t.F_ISSUE_QTY) F_ISSUE_QTY ");
|
||||||
sb.append("FROM dfm.t_dataays t ");
|
sb.append("FROM t_dataays t ");
|
||||||
sb.append("where t.F_SUBMIT_USERNAME = ? AND T.F_SUBMIT_TIME >= ? AND T.F_SUBMIT_TIME <= ? ");
|
sb.append("where t.F_SUBMIT_USERNAME = ? AND T.F_SUBMIT_TIME >= ? AND T.F_SUBMIT_TIME <= ? ");
|
||||||
sb.append("group by t.F_SUBMIT_USERNAME, t.F_ISSUE_DESCRIPTION ");
|
sb.append("group by t.F_SUBMIT_USERNAME, t.F_ISSUE_DESCRIPTION ");
|
||||||
sb.append("order by SUM(t.F_ISSUE_QTY) DESC");
|
sb.append("order by SUM(t.F_ISSUE_QTY) DESC");
|
||||||
|
|
@ -75,7 +75,7 @@ public class DataAnalysisDAO extends JdbcBaseDao {
|
||||||
public List<DataAnalysisBean> analysisByAllUser(String startSubmitTime, String endSubmitTime, List<UserInfo> submitUsers) {
|
public List<DataAnalysisBean> analysisByAllUser(String startSubmitTime, String endSubmitTime, List<UserInfo> submitUsers) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("SELECT t.F_SUBMIT_USERNAME, SUM(t.F_ISSUE_QTY) F_ISSUE_QTY ");
|
sb.append("SELECT t.F_SUBMIT_USERNAME, SUM(t.F_ISSUE_QTY) F_ISSUE_QTY ");
|
||||||
sb.append("FROM dfm.t_dataays t ");
|
sb.append("FROM t_dataays t ");
|
||||||
sb.append("where T.F_SUBMIT_TIME >= ? AND T.F_SUBMIT_TIME <= ? ");
|
sb.append("where T.F_SUBMIT_TIME >= ? AND T.F_SUBMIT_TIME <= ? ");
|
||||||
sb.append("AND T.F_SUBMIT_USER IN (-1");
|
sb.append("AND T.F_SUBMIT_USER IN (-1");
|
||||||
for (int i = 0; i < submitUsers.size(); ++i)
|
for (int i = 0; i < submitUsers.size(); ++i)
|
||||||
|
|
@ -108,7 +108,7 @@ public class DataAnalysisDAO extends JdbcBaseDao {
|
||||||
public List<DataAnalysisBean> analysisByAllIssue(String startSubmitTime, String endSubmitTime, List<UserInfo> submitUsers) {
|
public List<DataAnalysisBean> analysisByAllIssue(String startSubmitTime, String endSubmitTime, List<UserInfo> submitUsers) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("SELECT t.F_ISSUE_DESCRIPTION, SUM(t.F_ISSUE_QTY) F_ISSUE_QTY ");
|
sb.append("SELECT t.F_ISSUE_DESCRIPTION, SUM(t.F_ISSUE_QTY) F_ISSUE_QTY ");
|
||||||
sb.append("FROM dfm.t_dataays t ");
|
sb.append("FROM t_dataays t ");
|
||||||
sb.append("where T.F_SUBMIT_TIME >= ? AND T.F_SUBMIT_TIME <= ? ");
|
sb.append("where T.F_SUBMIT_TIME >= ? AND T.F_SUBMIT_TIME <= ? ");
|
||||||
sb.append("AND T.F_SUBMIT_USER IN (-1");
|
sb.append("AND T.F_SUBMIT_USER IN (-1");
|
||||||
for (int i = 0; i < submitUsers.size(); ++i)
|
for (int i = 0; i < submitUsers.size(); ++i)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue