欢迎访问wabc.cc — 源码交易 · 软件定制 · 建站服务一站式平台
全部分类
首页 - 首页 - 解决方案 - 推荐文章 - Go语言免费入门视频教程:后台管理页面统计功能开发(2)

Go语言免费入门视频教程:后台管理页面统计功能开发(2)

分类:推荐文章 · 发布:2025-12-21 · 浏览:1

@author:Davie

版权所有:北京千锋互联科技有限公司

上节内容介绍了后台管理页面统计功能开发(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">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
}

本节内容开发完毕实现效果如下所示,具体代码在课程配套中提供:


上一篇:湛江吴川——鼎龙湾——售楼处位置在哪里
下一篇:菩萨心肠微商管理系统软件开发

相关文章

源码分类

热门源码

最新资讯

联系我们