围棋语言实践课程后台管理页面统计功能的开发(二)
浏览:782 次

上一节的内容介绍了后台管理页面(1)统计功能的开发,从功能介绍到界面请求的分析和分类,最后到代码设计。在上一节的介绍之后,业务逻辑和开发逻辑已经解释清楚了。本节重点介绍编程代码的特定功能。
当日数据增长函数,七天数据增长函数
通过浏览器工具调试发现,当天的增长函数与最近7天的增长数据所使用的请求界面相同,但价值转移是特殊的。以当日用户增长请求为例,当日用户增长数据请求界面如下:
/statis/user/NaN NaN NaN/count
可以看出,传递的值是NaN-NaN-NaN。
然后查看过去七天的增长数据请求。以用户增长请求为例,过去七天中一天的数据增长请求界面如下:
/statis/用户/2019-04-08/count
基于以上两种情况的分析,当天的请求url与最近七天的请求url相同,但值不同。因此,在程序开发和实施过程中,可以将当天的增长数据和7天的增长数据请求结合起来进行开发,并且只能单独处理当天的数据增长请求。
我们定义了StatisController结构来实现统计数据的功能请求,如下所示:
类型StatisController结构{
//上下文对象
Ctx虹膜上下文
//统计功能的服务实现接口
服务服务.站点服务
//会话
会话*会话。会话
}
路由组解析统计接口我们分析了该接口,可以发现管理员、用户和订单的请求形式是相同的,因此我们可以以路由组的方式解析统计接口。我们定义解析的路由组如下:
app.Party(“/statis/{model}/{date}/”)
定义统计接口根据我们分析的接口规则,我们可以在StatisController结构中定义GetCount方法进行处理。GetCount方法定义如下:
func(sc*StatisController)获取计数()mvc。结果{
///statis/user/2019-03-10/count
路径:=sc.Ctx.path()
var pathSlice[]字符串
如果路径!="" {
pathSlice=字符串。拆分(路径,“/”)

}
//不符合请求格式
如果len(pathSlice)!=5 {
return mvc.响应{
对象:map[string]接口{}{
“status”:utils。RECODE_ FAIL,
“计数”:0,
},
}
}
//移除第一个
pathSlice=路径切片[1:]
模型:=路径切片[1]
日期:=路径切片[2]
var结果int64
交换机模型{
案例“用户”:
iris.New().Logger()。错误(日期)//时间
结果=sc.Service.GetUserDailyCount(日期)
案例“订单”:
结果=sc.Service.GetOrderDailyCount(日期)
案例“admin”:
结果=sc.Service.GetAdminDailyCount(日期)
}
return mvc.响应{
对象:map[string]接口{}{
“status”:实用程序。RECODE_ OK,
“计数”:结果,

},
}
}
GetCount方法通过解析请求URL,为不同的请求类型调用不同的函数方法,这些URL是GetUserDailyCount、GetOrderDaylyCount和GetAdminDaily计数。这三种方法都由服务StatisService定义。在本节中,我们以用户数据增长界面请求为例。代码实现如下:
func(ss*statisService)GetUserDailyCount(日期字符串)int64{
如果date==“NaN-NaN-NaN”{//当天的增长数据请求
date=time.Now().格式(“2006-01-02”)
}
startDate,err:=时间。分析(“2006-01-02”,日期)
如果出错!=无{
返回0
}
结束日期:=开始日期。添加日期(0,0,1)
结果,错误:=ss.Engine。其中(“register_time between?and?and del_flag=0”,startDate.Format(“2006-01-02 15:04:05”),endDate。格式(“2006-01-02 15:04:05”)。计数(型号。用户{})
如果出错!=无{
返回0
}
返回结果
}
其他两个功能模块的实现相同,但查询数据表不同。课程的支持视频和源代码中提供了详细内容。
SQL语句查询
在此函数中,日期字段使用时间。数据结构定义中的时间类型,并将映射到数据库中的DateTime类型。
时间范围查询查询数据库时,用于时间查询的SQL语句介于…和之间。本节中的函数查询语句包括:
从用户中选择count(*),其中register_time介于开始和结束之间,del_flag=0

日期格式使用golang语言,日期格式使用时间。format方法定义时间的格式。但是,需要注意的是,当输入格式标准时间格式时