go语言实战教程之 后台管理页面统计功能开发(2)
上节内容介绍了后台管理页面统计功能开发(1),从功能介绍,到接口请求分析和归类,最后是代码设计。经过上节内容的介绍,已经将业务逻辑和开发逻辑解释清楚,本节内容侧重于编程代码实现具体的功能。
当日增长数据功能、七日增长数据功能
通过浏览器工具调试会发现,当日增长功能和近7日增长数据使用的请求接口相同,只是传值较为特殊。以当日用户增长请求为例,当日用户增长数据请求接口如下:
/statis/user/NaN-NaN-NaN/count
可见,传递的值为NaN-NaN-NaN。
进而查看近七日增长数据请求。仍以用户增长请求为例,近七日中的某天数据增长请求接口如下:
/statis/user/2019-04-08/count
综合上述两种情况的分析,当日请求与近七日请求url相同,只是传值不同。因此,在程序开发实现时,可以将当日增长数据和7日增长数据请求合并开发,仅对当日数据增长请求做单独的处理即可。
我们已经定义过了StatisController结构体,用来实现统计数据的功能请求,如下所示:
type StatisController struct {
//上下文环境对象
Ctx iris.Context
//统计功能的服务实现接口
Service service.StatisService
//session
Session *sessions.Session
}
路由组解析统计接口 我们已经分析过接口,可以发现管理员,用户,及订单,三者的请求形式相同,因此可以采用路由组的方式解析统计接口,我们定义解析的路由组如下:
app.Party("/statis/{model}/{date}/")
定义统计接口 根据我们分析的接口的规则,我们可以在StatisController结构体中定义GetCount方法用来处理,GetCount方法定义如下:
func (sc *StatisController) GetCount() mvc.Result {
// /statis/user/2019-03-10/count
path := sc.Ctx.Path()
var pathSlice []string
if path != "" {
pathSlice = strings.Split(path, "/")
}
//不符合请求格式
if len(pathSlice) != 5 {
return mvc.Response{
Object: map[string]interface{}{
"status": utils.RECODE_FAIL,
"count": 0,
},
}
}
//将最前面的去掉
pathSlice = pathSlice[1:]
model := pathSlice[1]
date := pathSlice[2]
var result int64
switch model {
case "user":
iris.New().Logger().Error(date) //时间
result = sc.Service.GetUserDailyCount(date)
case "order":
result = sc.Service.GetOrderDailyCount(date)
case "admin":
result = sc.Service.GetAdminDailyCount(date)
}
return mvc.Response{
Object: map[string]interface{}{
"status": utils.RECODE_OK,
"count": result,
},
}
}
GetCount方法通过解析请求URL,对不同的请求类型进行分类调用不同的功能方法,分别是:GetUserDailyCount,GetOrderDailyCount,GetAdminDailyCount。三者方法均由service.StatisService提供。在本节内容中,我们以用户数据增长接口请求为例,代码实现如下:
func (ss *statisService) GetUserDailyCount(date string) int64 {
if date == "NaN-NaN-NaN" { //当日增长数据请求
date = time.Now().Format("2006-01-02")
}
startDate, err := time.Parse("2006-01-02", date)
if err != nil {
return 0
}
endDate := startDate.AddDate(0, 0, 1)
result, err := ss.Engine.Where(" register_time between ? and ? and del_flag = 0 ", startDate.Format("2006-01-02 15:04:05"), endDate.Format("2006-01-02 15:04:05")).Count(model.User{})
if err != nil {
return 0
}
return result
}
其他两个功能模块的实现相同,查询数据表不同。详细内容在课程配套视频和源码中提供。
SQL语句查询
在该功能中,日期字段在数据结构体定义中使用的是time.Time类型,在数据库中会被映射成DateTime类型。
时间范围查询 在进行数据库查询时,时间的查询使用的sql语句是between ... and...。本节内容的功能查询语句为:
select count(*) from user where register_time between start and end and del_flag = 0
日期格式 在golang语言中,日期格式使用time.Format方法来自定义时间的格式。但是,有一点需要注意,在输入Format标准时间格式时,要求的时间点必须是2006-01-02 15:04:05。如果不是该时间点,格式化出来的时间就会出现错误,这是需要注意的一点。
数据总数功能开发
数据总记录数功能请求是按照模块的功能来进行开发的,以管理员数据总记录请求为例,请求url如下:
/admin/count
在AdminController结构体中,定义GetCount方法用来获取管理员总数,方法详情如下:
func (ac *AdminController) GetCount() mvc.Result {
count, err := ac.Service.GetAdminCount()
if err != nil {
return mvc.Response{
Object: map[string]interface{}{
"status": utils.RECODE_FAIL,
"message": utils.Recode2Text(utils.RESPMSG_ERRORADMINCOUNT),
"count": 0,
},
}
}
return mvc.Response{
Object: map[string]interface{}{
"status": utils.RECODE_OK,
"count": count,
},
}
}
在该控制器处理请求的过程中,调用到了AdminService提供的查询管理员总记录数的功能,GetAdminCount方法实现如下:
func (ac *adminSevice) GetAdminCount() (int64, error) {
count, err := ac.engine.Count(new(model.Admin))
if err != nil {
panic(err.Error())
return 0, err
}
return count, nil
}
本节内容开发完毕实现效果如下所示,具体代码在课程配套中提供:

go语言实战教程之 后台管理页面统计功能开发(2)的更多相关文章
- go语言实战教程之 后台管理页面统计功能开发(1)
本节内容我们将学习开发实现后台管理平台页面统计功能开发的功能接口,本章节内容将涉及到多种请求路由的方式. 功能介绍 后台管理平台不仅是功能管理平台,同时还是数据管理平台.从数据管理平台角度来说,在管理 ...
- 8 功能6:后台管理页面,编辑文章,xss攻击
1.后台管理页面之文本编辑 # 后台管理url re_path(r'^cn_backend/$', views.cn_backend, name='cn_backend'), re_path(r'^c ...
- python:页面布局 后台管理页面之常用布局
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- HTML高级标签(2)————窗体分帧(2)————后台管理页面
使用frameset进行窗体分帧.构建简易的后台页面.这篇博客就作为一个简易后台管理页面的实战演练. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3px ...
- 老男孩Day16作业:登录、注册、后台管理页面(动态)
一.作业需求: 1.后台管理主界面(左边菜单框.(全选.反选)框.返回顶部按钮) 2.老男孩登录.注册页面 二.博客地址:https://www.cnblogs.com/catepython/p/93 ...
- 用jquery-easyui的布局layout写后台管理页面
先在官网下载easyui文档 引入头部文件 <link rel="stylesheet" type="text/css" href="${pag ...
- 前端武器库系列之html后台管理页面布局
设计网页,让网页好看:网上找模板 搜 HTML模板 BootStrap 一.页面布局之主站页面 主站布局一般不占满页面,分为菜单栏.主页面.底部 上中下三部分.伪代码如下: <div class ...
- Django用户登陆以及跳转后台管理页面3
Django用户登陆以及跳转后台管理页面1http://www.cnblogs.com/ujq3/p/7891774.html Django用户登陆以及跳转后台管理页面2http://www.cnbl ...
- Django用户登陆以及跳转后台管理页面2
请先写好以下,再来替换文件 Django用户登陆以及跳转后台管理页面1http://www.cnblogs.com/ujq3/p/7891774.html from django.shortcuts ...
随机推荐
- 蓝桥杯 历届试题 PREV-32 分糖果
历届试题 分糖果 时间限制:1.0s 内存限制:256.0MB 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边 ...
- XXXAction-validation.xml文件中报错:Referenced file Contains errors
我们需要引用与验证器配置相关的dtd文件,这个文件可以在xwork-core-2.3.1.2.jar下找到(xwork-validator-1.0.3.dtd) 网上有很多处理办法,如下所示: 1.直 ...
- 第八课 go的条件语句
1 if ... else package main import "fmt" func main() { flag:= { fmt.Println("flag > ...
- mybatis---demo1--(单表增删改查)----bai
实体类: package com.etc.entity; public class News { private int id; private String title; private Strin ...
- delphi 10.2.2.2004 Tokyo 安装步骤
delphi 各版本的安装,其XX工具都附有详细说明.遵守其安装步骤,很容易成功. 本教就以 delphi 10.2.2.2004 为例,演示一下整个安装过程.其它各版本就自行尝试. 附: delph ...
- bytes,packet区别 字节数据包
“包”(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”.字节(Byte): 字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位. 字节是计算机信息技术用于计量存储容量和 ...
- JavaScript中给对象添加方法
在JavaScript中,我们经常要给已定义的对象添加一些方法,如下: function circle(w,h){ this.width=w; this.height=h; ...
- dubbo错误排查之No provider available for the service
今天搞的一个dubbo服务,暴漏出来了,但是consumer端启动就报这个错,排查过程记录一下 一.启动zkCli 利用命令查看 ls / ls /dubbo 继续查看 ls /dubbo/com.w ...
- Solr各组件之间的关系图
原文地址:http://blog.csdn.net/clj198606061111/article/details/20854419
- R: 关于文件 文件夹的处理:file.show() dir.create().....
文件管理主要函数: setwd( ):设定R软件当前工作目录.getwd( ):查看R软件当前工作目录.list.files( ): 查看当前目录下文件.file.show( ): 显示文件.file ...