@@ -199,17 +199,16 @@ func QueryUserStaticDataPage(opts *UserBusinessAnalysisQueryOptions) ([]*UserBus | |||
} | |||
statictisSess.Limit(opts.PageSize, start) | |||
} | |||
statictisSess.OrderBy("count_date desc") | |||
userBusinessAnalysisList := make([]*UserBusinessAnalysis, 0) | |||
if err := statictisSess.Table("user_business_analysis").Where(cond). | |||
if err := statictisSess.Table("user_business_analysis").Where(cond).OrderBy("count_date desc"). | |||
Find(&userBusinessAnalysisList); err != nil { | |||
return nil, 0 | |||
} | |||
resultMap := make(map[int64]*UserBusinessAnalysis) | |||
if opts.Page >= 0 && opts.PageSize > 0 && len(userBusinessAnalysisList) > 0 { | |||
if len(userBusinessAnalysisList) > 0 { | |||
var newAndCond = builder.NewCond() | |||
var newOrCond = builder.NewCond() | |||
for _, userRecord := range userBusinessAnalysisList { | |||
@@ -228,9 +227,8 @@ func QueryUserStaticDataPage(opts *UserBusinessAnalysisQueryOptions) ([]*UserBus | |||
builder.Lte{"count_date": opts.EndTime}, | |||
) | |||
} | |||
userBusinessAnalysisList = make([]*UserBusinessAnalysis, 0) | |||
if err := statictisSess.Table("user_business_analysis").Where(newAndCond). | |||
if err := statictisSess.Table("user_business_analysis").Where(newAndCond).OrderBy("count_date desc"). | |||
Find(&userBusinessAnalysisList); err != nil { | |||
return nil, 0 | |||
} | |||
@@ -314,6 +314,7 @@ func GetProjectLatestStatistics(ctx *context.Context) { | |||
Mode: mode, | |||
PR: pr, | |||
RelAvatarLink: contributor.RelAvatarLink, | |||
Email: contributor.Email, | |||
} | |||
users = append(users, userInfo) | |||
@@ -44,9 +44,5 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
m.Post("/manager/flush-queues", bind(private.FlushOptions{}), FlushQueues) | |||
m.Post("/tool/update_all_repo_commit_cnt", UpdateAllRepoCommitCnt) | |||
m.Post("/tool/repo_stat", RepoStatisticManually) | |||
m.Post("/tool/create_model", CreateModel) | |||
m.Delete("/tool/delete_model", DeleteModel) | |||
m.Get("/tool/show_model", ShowModel) | |||
m.Put("/tool/modify_model", ModifyModel) | |||
}, CheckInternalToken) | |||
} |
@@ -5,7 +5,6 @@ | |||
package private | |||
import ( | |||
"fmt" | |||
"net/http" | |||
"code.gitea.io/gitea/models" | |||
@@ -46,6 +45,7 @@ func RepoStatisticManually(ctx *macaron.Context) { | |||
repo.TimingCountDataByDate(date) | |||
} | |||
/* | |||
func CreateModel(ctx *macaron.Context) { | |||
JobId := ctx.Query("JobId") | |||
VersionName := ctx.Query("VersionName") | |||
@@ -88,3 +88,4 @@ func ModifyModel(ctx *macaron.Context) { | |||
ctx.JSON(500, "Failed.") | |||
} | |||
} | |||
*/ |
@@ -25,7 +25,7 @@ const ( | |||
MODEL_NOT_LATEST = 0 | |||
) | |||
func SaveModelByParameters(jobId string, versionName string, name string, version string, label string, description string, userId int64) error { | |||
func saveModelByParameters(jobId string, versionName string, name string, version string, label string, description string, userId int64) error { | |||
aiTask, err := models.GetCloudbrainByJobIDAndVersionName(jobId, versionName) | |||
//aiTask, err := models.GetCloudbrainByJobID(jobId) | |||
if err != nil { | |||
@@ -110,7 +110,7 @@ func SaveModel(ctx *context.Context) { | |||
label := ctx.Query("Label") | |||
description := ctx.Query("Description") | |||
err := SaveModelByParameters(JobId, VersionName, name, version, label, description, ctx.User.ID) | |||
err := saveModelByParameters(JobId, VersionName, name, version, label, description, ctx.User.ID) | |||
if err != nil { | |||
log.Info("save model error." + err.Error()) | |||
@@ -49,13 +49,13 @@ func QueryUserStaticDataPage(ctx *context.Context) { | |||
startTime = time.Now() | |||
endTime = time.Now() | |||
} else { | |||
startTime, _ = time.Parse("2006-01-02", startDate) | |||
startTime, _ = time.ParseInLocation("2006-01-02", startDate, time.Local) | |||
settingStartTime, _ := time.Parse("2006-01-02", setting.RadarMap.RecordBeginTime) | |||
if startTime.Unix() < settingStartTime.Unix() { | |||
startTime = settingStartTime | |||
startDate = settingStartTime.Format("2006-01-02") | |||
} | |||
endTime, _ = time.Parse("2006-01-02", endDate) | |||
endTime, _ = time.ParseInLocation("2006-01-02", endDate, time.Local) | |||
endTime = endTime.AddDate(0, 0, 1) | |||
isAll = false | |||
log.Info("startTime=" + fmt.Sprint(startTime.Unix()) + " endDate=" + fmt.Sprint(endTime.Unix())) | |||
@@ -970,7 +970,10 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
m.Post("/create", reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainForm{}), repo.CloudBrainCreate) | |||
}, context.RepoRef()) | |||
m.Group("/modelmanage", func() { | |||
m.Get("", reqRepoCloudBrainReader, repo.ShowModelPageInfo) | |||
m.Post("/create_model", repo.SaveModel) | |||
m.Delete("/delete_model", repo.DeleteModel) | |||
m.Put("/modify_model", repo.ModifyModelInfo) | |||
m.Get("/show_model", reqRepoCloudBrainReader, repo.ShowModelPageInfo) | |||
m.Group("/:ID", func() { | |||
m.Get("", reqRepoCloudBrainReader, repo.ShowSingleModel) | |||
m.Get("/downloadsingle", reqRepoCloudBrainReader, repo.DownloadSingleModelFile) | |||
@@ -7,10 +7,8 @@ | |||
</el-image> | |||
概览 | |||
</span> | |||
<div >概览.......</div> | |||
<div >概览.......</div> | |||
<div >概览.......</div><div >概览.......</div> | |||
<div >概览.......</div> | |||
<div >暂无内容.......</div> | |||
</el-tab-pane> | |||
<el-tab-pane label="项目分析" name="second" id="second" > | |||
<ProAnalysis ref='ProAnalysis'id="pro" v-if="isRouterAlive"></ProAnalysis> | |||
@@ -20,13 +18,13 @@ | |||
项目分析 | |||
</span> | |||
</el-tab-pane> | |||
<el-tab-pane name="third" id='third'> | |||
<el-tab-pane name="third" id='third' > | |||
<span slot='label'> | |||
<el-image style="width: 13px; height: 13px" src="/img/name.png"> | |||
</el-image> | |||
用户分析 | |||
</span> | |||
<UserAnalysis ref='UserAnalysis' id ="usr"></UserAnalysis> | |||
<UserAnalysis ref='UserAnalysis' v-if="isRouterAlive1" id ="usr"></UserAnalysis> | |||
</el-tab-pane> | |||
</el-tabs> | |||
</div> | |||
@@ -48,6 +46,7 @@ | |||
loading:true, | |||
loading1:true, | |||
isRouterAlive: true, | |||
isRouterAlive1: true, | |||
isSecond:true, | |||
isThird:false, | |||
@@ -57,24 +56,20 @@ | |||
handleClick(tab, event){ | |||
if(tab.name=="second"){ | |||
this.reload() | |||
//document.getElementById('usr').style.display="none" | |||
//document.getElementById("pro").style.display='block' | |||
//this.$refs.ProAnalysis.getAllProList("all",7) | |||
this.isSecond = true | |||
this.isThird = false | |||
this.$refs.ProAnalysis.getAllProList("all",7) | |||
} | |||
if(tab.name=="third"){ | |||
// document.getElementById('usr').style.display="block" | |||
// document.getElementById("pro").style.display='none' | |||
this.reload() | |||
this.reload1() | |||
this.isSecond = false | |||
this.isThird = true | |||
this.$refs.UserAnalysis.resetPage() | |||
this.$refs.UserAnalysis.getUpdateTime() | |||
this.$refs.UserAnalysis.getUserList("all_usr",7) | |||
} | |||
@@ -84,6 +79,10 @@ | |||
reload () { | |||
this.isRouterAlive = false | |||
this.$nextTick(() => (this.isRouterAlive = true)) | |||
}, | |||
reload1 () { | |||
this.isRouterAlive1 = false | |||
this.$nextTick(() => (this.isRouterAlive1 = true)) | |||
} | |||
}, | |||
@@ -29,8 +29,13 @@ | |||
</span> | |||
<span style="float:right; margin-right: 20px;"> | |||
<div style="display:inline-block;margin-left: 20px; "> | |||
<i class="el-icon-download"></i> | |||
<span ><a id = "download_file" :href= "'../api/v1/projectboard/downloadAll/?type='+this.params.type+'&beginTime='+this.params.beginTime+'&endTime='+this.params.endTime+'&q='+this.params.q+'&sort=openi'" >下载报告</a> </span> | |||
<a class="el-icon-download" v-if="tableData!=''" :href= "'../api/v1/projectboard/downloadAll/?type='+this.params.type+'&beginTime='+this.params.beginTime+'&endTime='+this.params.endTime+'&q='+this.params.q+'&sort=openi'" ></a> | |||
<i class="el-icon-download" v-else="tableData=''" href="#" style="color:rgba(187, 187, 187, 100);" @click='popMark()'></i> | |||
<!-- <span ><a id = "download_file" :href= "'../api/v1/projectboard/downloadAll/?type='+this.params.type+'&beginTime='+this.params.beginTime+'&endTime='+this.params.endTime+'&q='+this.params.q+'&sort=openi'" >下载报告</a> </span> --> | |||
<span > | |||
<a id = "download_file" v-if="tableData!=''" :href= "'../api/v1/projectboard/downloadAll/?type='+this.params.type+'&beginTime='+this.params.beginTime+'&endTime='+this.params.endTime+'&q='+this.params.q+'&sort=openi'">下载报告</a> | |||
<a id = "download_file" v-else="tableData=''" href= "#" style="color:rgba(187, 187, 187, 100);" @click='popMark()'>下载报告</a> | |||
</span> | |||
</div> | |||
@@ -142,10 +147,12 @@ | |||
<div style="margin-top:50px;text-align:center"> | |||
<el-pagination | |||
background | |||
@size-change="handleSizeChange" | |||
@current-change="handleCurrentChange" | |||
:current-page="page" | |||
:page-size="pageSize" | |||
layout="prev, pager, next" | |||
:page-sizes="[5,10,20]" | |||
layout="total, sizes,prev, pager, next,jumper" | |||
:total="totalNum"> | |||
</el-pagination> | |||
</div> | |||
@@ -153,7 +160,7 @@ | |||
</div> | |||
<div id ="pro_detail" style="display:none;width: 100%;"> | |||
<div style="margin-top: 10px;"> | |||
<b class="pro_item">{{this.ownerName}} / {{this.pro_name}}</b> <span class="update_time">数据更新时间:</span><span style="font-size: 12px;">{{tableDataIDTotal.lastUpdatedTime}} / 从{{tableDataIDTotal.recordBeginTime}}开始</span> | |||
<b class="pro_item">{{this.ownerName}} / {{this.pro_name}}</b> <span class="update_time">数据更新时间:</span><span style="font-size: 12px;">{{tableDataIDTotal.lastUpdatedTime}} / 从{{tableDataIDTotal.recordBeginTime}}开始统计</span> | |||
</div> | |||
<div style="margin-top: 10px;"> | |||
项目描述:{{tableDataIDTotal.description | discriptionFun}} | |||
@@ -210,7 +217,7 @@ | |||
> | |||
<el-table-column | |||
label="用户名" | |||
align="center" | |||
align="left" | |||
prop="user"> | |||
<template slot-scope="scope"> | |||
<a v-if="scope.row.mode!=-1" :href="AppSubUrl +'../../../'+ scope.row.user"><img class="ui avatar s16 image js-popover-card" :src="scope.row.relAvatarLink">{{scope.row.user}} </a> | |||
@@ -266,8 +273,12 @@ | |||
</span> | |||
<span style="float:right; margin-right: 20px;"> | |||
<div style="display:inline-block;margin-left: 20px;"> | |||
<i class="el-icon-download"></i> | |||
<span ><a @click="exportData()">下载报告</a> </span> | |||
<a v-if="tableDataID!=''" @click="exportData()" class="el-icon-download"></a> | |||
<a v-else="tableDataID=''" @click="exportData()" style="color:rgba(187, 187, 187, 100);" class="el-icon-download"></a> | |||
<span > | |||
<a v-if="tableDataID!=''" @click="exportData()">下载报告</a> | |||
<a v-else="tableDataID=''" @click="exportData()" style="color:rgba(187, 187, 187, 100);">下载报告</a> | |||
</span> | |||
</div> | |||
</span> | |||
</div> | |||
@@ -286,7 +297,7 @@ | |||
</div> | |||
<div style="margin-top: 30px;"> | |||
<el-table | |||
:data="tableDataID.slice((currentPage-1)*pageSize,currentPage*pageSize)" | |||
:data="tableDataID.slice((currentPage-1)*pageSize1,currentPage*pageSize1)" | |||
style="width: 100%" | |||
:header-cell-style="tableHeaderStyle" | |||
:cell-style='cellStyle'> | |||
@@ -318,10 +329,12 @@ | |||
<div style="margin-top:50px;text-align:center"> | |||
<el-pagination | |||
background | |||
@size-change="handleSizeChangeID" | |||
@current-change="handleCurrentChangeID" | |||
:current-page="currentPage" | |||
:page-size="pageSize1" | |||
layout="prev, pager, next" | |||
:page-sizes="[5,10,20]" | |||
layout="total, sizes,prev, pager, next,jumper" | |||
:total="tableDataID.length"> | |||
</el-pagination> | |||
</div> | |||
@@ -357,6 +370,7 @@ | |||
search:'', | |||
dynamic:7, | |||
download_a:"", | |||
downLoadSrc:'', | |||
//单个项目参数 | |||
@@ -385,14 +399,22 @@ | |||
// download_file(){ | |||
// this.params.type='all' | |||
// }, | |||
popMark(){ | |||
alert("数据为空时,不能下载!") | |||
}, | |||
exportData(){ | |||
// this.getOneProList(this.pro_id,'all',true,7) | |||
// this.getOneProList(this.pro_id,'all',false,7) | |||
// this.fileName() | |||
this.currentPage=1 | |||
var saveFileName = this.getFileName() | |||
export2Excel(this.columns,this.tableDataID,saveFileName) | |||
if (this.tableDataID!=''){ | |||
this.currentPage=1 | |||
var saveFileName = this.getFileName() | |||
export2Excel(this.columns,this.tableDataID,saveFileName) | |||
}else{ | |||
alert("数据为空时,不能下载!") | |||
} | |||
}, | |||
getFileName(){ | |||
@@ -406,11 +428,7 @@ | |||
var yesterday = this.saveFormatDate(tmp.getFullYear(),tmp.getMonth()+1,tmp.getDate()); | |||
var yesterday_tmp = this.formatDate(tmp.getFullYear(),tmp.getMonth()+1,tmp.getDate()) | |||
let lastMonthDate = new Date(); // 上月日期 | |||
lastMonthDate.setDate(1); | |||
lastMonthDate.setMonth(lastMonthDate.getMonth()-1); | |||
let lastYear = lastMonthDate.getYear(); | |||
let lastMonth = lastMonthDate.getMonth(); | |||
var startDate='' | |||
var endDate='' | |||
var saveFileName = '' | |||
@@ -458,10 +476,22 @@ | |||
break | |||
} | |||
case "last_month":{ | |||
startDate=this.formatDate(nowYear, lastMonth+1, 1); | |||
let lastMonthDate = new Date(); // 上月日期 | |||
lastMonthDate.setDate(1); | |||
lastMonthDate.setMonth(lastMonthDate.getMonth()-1); | |||
let lastYear = lastMonthDate.getFullYear(); | |||
let lastMonth = lastMonthDate.getMonth(); | |||
startDate=this.formatDate(lastYear, lastMonth+1, 1); | |||
startDate = this.comparedate(startDate,this.recordBeginTime) | |||
endDate=this.saveFormatDate(nowYear, lastMonth+1, this.saveFormatDate(nowYear,lastMonth)); | |||
var monthStartDate = new Date(lastYear, lastMonth, 1); | |||
var monthEndDate = new Date(lastYear, lastMonth+1, 1); | |||
var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24) | |||
endDate=this.saveFormatDate(lastYear, lastMonth+1, days); //月份从0开始,所以+1保存月份 | |||
saveFileName = this.pro_name+"_"+startDate+'_'+ endDate | |||
break | |||
} | |||
@@ -501,6 +531,11 @@ | |||
resetCurrentPage(){ | |||
this.currentPage=1 | |||
}, | |||
handleSizeChange(val){ | |||
this.params.pagesize = val | |||
this.resetPage() | |||
this.getAllProList(this.params.type, this.dynamic) | |||
}, | |||
handleCurrentChange(val){ | |||
console.log(val) | |||
this.params.page = val | |||
@@ -576,6 +611,9 @@ | |||
} | |||
return (myyear +'-'+ mymonth +'-'+ myweekday); | |||
}, | |||
//获得某月的天数 | |||
getAllProList(type_val,index){ | |||
console.log("类型:"+type_val) | |||
@@ -636,10 +674,14 @@ | |||
return 'background:#f5f5f6;color:#606266' | |||
} | |||
}, | |||
handleSizeChangeID(val){ | |||
this.pageSize1=val | |||
}, | |||
handleCurrentChangeID(currentPage){ | |||
this.currentPage = currentPage; | |||
}, | |||
getOneProData(pro_id){ | |||
this.$axios.get('../api/v1/projectboard/project/'+pro_id,{ | |||
}).then((res)=>{ | |||
@@ -698,7 +740,39 @@ | |||
textStyle:{ | |||
color:'black' | |||
}, | |||
position: 'right' | |||
position: 'right', | |||
// formatter: function (params) { | |||
// console.log('params:',params) | |||
// console.log('params.data:',params[0]) | |||
// let str = params.data.name + "<br />"; | |||
// params.data.forEach((item) => { | |||
// str += | |||
// '<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color:'+params.color+'"></span>' + item.seriesName + " : " + '<span style="float:right">'+item.data[1] +'</span>'+ "<br />"; | |||
// }); | |||
// return str; | |||
// }, | |||
// formatter: function (params, ticket, callback) { | |||
// console.log(params); | |||
// var showHtm=""; | |||
// var data = params.data.value | |||
// for(var i=0;i<data.length;i++){ | |||
// //x轴名称 | |||
// var name = data[i]; | |||
// //值 | |||
// var value = params[i][2]; | |||
// showHtm+= text+ '--' + name + ' :' + value+'<br>' | |||
// } | |||
// return showHtm; | |||
// } | |||
},//提示层 | |||
legend: { | |||
@@ -792,7 +866,7 @@ | |||
backgroundColor:'rgba(255,255,255,0.8)', | |||
color:'black', | |||
borderWidth:'1', | |||
borderColor:'gray', | |||
borderColor:'#DCE7FB', | |||
textStyle:{ | |||
color:'black' | |||
}, | |||
@@ -1070,6 +1144,11 @@ | |||
created() { | |||
// this.download_a=document.getElementById("download_file") | |||
}, | |||
updated(){ | |||
if(document.querySelectorAll('img[avatar]').length!==0){ | |||
window.LetterAvatar.transform() | |||
} | |||
} | |||
} | |||
</script> | |||
@@ -1127,7 +1206,7 @@ | |||
} | |||
.items{ | |||
text-align: center; | |||
border-right:2px solid rgba(219, 219, 219, 100); | |||
border-right:1px solid rgba(219, 219, 219, 100); | |||
} | |||
.item_l{ | |||
margin-right: 5px; | |||
@@ -1139,6 +1218,7 @@ | |||
margin-right:5px; | |||
border:1px solid rgba(219, 219, 219, 100); | |||
height: 370px; | |||
overflow:auto | |||
} | |||
.item_echart{ | |||
margin-top: 10px; | |||
@@ -1150,5 +1230,6 @@ | |||
.item_content{ | |||
color: #409eff; | |||
margin-top: 10px; | |||
font-weight:bold; | |||
} | |||
</style> |
@@ -27,8 +27,12 @@ | |||
</span> | |||
<span style="float:right; margin-right: 20px;" > | |||
<a style="display:inline-block;margin-left: 20px; " id = 'download'> | |||
<i class="el-icon-download"></i> | |||
<span ><a :href= "'../tool/query_user_static_page/?startDate='+this.params.startDate+'&endDate='+this.params.endDate+'&IsReturnFile=true'+'&userName='+this.params.userName" >下载报告</a> </span> | |||
<a class="el-icon-download" v-if="tableData!=''" :href= "'../tool/query_user_static_page/?startDate='+this.params.startDate+'&endDate='+this.params.endDate+'&IsReturnFile=true'+'&userName='+this.params.userName" ></a> | |||
<i class="el-icon-download" v-else="tableData=''" href="#" style="color:rgba(187, 187, 187, 100);" @click='popMark()'></i> | |||
<span > | |||
<a v-if="tableData!=''" :href= "'../tool/query_user_static_page/?startDate='+this.params.startDate+'&endDate='+this.params.endDate+'&IsReturnFile=true'+'&userName='+this.params.userName" >下载报告</a> | |||
<a v-else="tableData=''" href= "#" style="color:rgba(187, 187, 187, 100);" @click='popMark()'>下载报告</a> | |||
</span> | |||
</a> | |||
<span style="display:inline-block;margin-left: 20px; "> | |||
<el-input size="small" placeholder="输入用户名搜索" v-model="search" class="input-with-select" @keyup.enter.native="searchName() "><i slot="suffix" class="el-input__icon el-icon-search" @click="searchName() "></i> | |||
@@ -141,10 +145,12 @@ | |||
<div style="margin-top:50px;text-align:center"> | |||
<el-pagination | |||
background | |||
@size-change="handleSizeChange" | |||
@current-change="handleCurrentChange" | |||
:current-page="page" | |||
:page-size="pageSize" | |||
layout="prev, pager, next" | |||
:page-sizes="[5,10,20]" | |||
layout="total, sizes, prev, pager, next,jumper" | |||
:total="totalNum"> | |||
</el-pagination> | |||
</div> | |||
@@ -181,6 +187,9 @@ | |||
}, | |||
methods: { | |||
popMark(){ | |||
alert("数据为空时,不能下载!") | |||
}, | |||
exportData(){ | |||
// this.getUserList('all_usr',7) | |||
var saveFileName = this.getFileName() | |||
@@ -206,10 +215,16 @@ | |||
this.getUserList(this.type_val,this.dynamic) | |||
}, | |||
handleSizeChange(val){ | |||
this.params.pageSize = val | |||
this.resetPage() | |||
this.getUserList(this.type_val,this.dynamic) | |||
}, | |||
resetPage(){ | |||
this.page=1 | |||
this.params.page = 1 | |||
}, | |||
formatDate(myyear,mymonth,myweekday) { | |||
// var myyear = this.date.getFullYear(); | |||
// var mymonth = this.date.getMonth() + 1; | |||
@@ -408,6 +423,7 @@ | |||
mounted() { | |||
// document.getElementById("all_usr").style.outline="none" | |||
// document.getElementById("all_usr").focus() | |||
this.getUpdateTime() | |||
this.getUserList("all_usr",7) | |||
}, | |||
created() { | |||