小小千想和您聊一聊

当前位置: 首页> 技术分享> 用户列表、订单列表功能开发

用户列表、订单列表功能开发

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

上节内容我们在统计功能中引入了Redis缓存功能。Redis可以帮助我们实现将数据存储在在内存中,提高请求处理能力。本节内容,我们继续学习开发用户列表功能和订单列表功能。

用户列表功能开发

在小幺鸡文档中,我们可以查询得到用户列表接口的相关信息。

  • 用户列表接口:/v1/users/list

  • 携带参数:

    • offset:偏移量

    • limit:每次请求的记录条数

  • 请求示例:/v1/users/list?offset=0&limit=20

  • 路由注册在main.go文件中,使用app.Party("/v1/users")进行路由组解析。请求末级的url为list。请求类型为GET。因此,在UserController中定义func GetList(),用以来进行请求解析。路由组解析如下:

    userService := service.NewUserService(engine)
    	user := mvc.New(app.Party("/v1/users"))
    	user.Register(
    		userService,
    		sessManager.Start,
    	)
    	user.Handle(new(controller.UserController))
  • Get请求方法定义

    func (uc *UserController) GetList() mvc.Result {
    
    	offsetStr := uc.Ctx.FormValue("offset")
    	limitStr := uc.Ctx.FormValue("limit")
    	var offset int
    	var limit int
    
    	//判断offset和limit两个变量任意一个都不能为""
    	if offsetStr == "" || limitStr == "" {
    
    		return mvc.Response{
    			Object: map[string]interface{}{
    				"status":  utils.RECODE_FAIL,
    				"type":    utils.RESPMSG_ERROR_USERLIST,
    				"message": utils.Recode2Text(utils.RESPMSG_ERROR_USERLIST),
    			},
    		}
    	}
    
    	offset, err := strconv.Atoi(offsetStr)
    	limit, err = strconv.Atoi(limitStr)
    	if err != nil {
    		return mvc.Response{
    			Object: map[string]interface{}{
    				"status":  utils.RECODE_FAIL,
    				"type":    utils.RESPMSG_ERROR_USERLIST,
    				"message": utils.Recode2Text(utils.RESPMSG_ERROR_USERLIST),
    			},
    		}
    	}
    
    	//做页数的限制检查
    	if offset <= 0 {
    		offset = 0
    	}
    
    	//做最大的限制
    	if limit > MaxLimit {
    		limit = MaxLimit
    	}
    
    	userList := uc.UserService.GetUserList(offset, limit)
    
    	if len(userList) == 0 {
    		return mvc.Response{
    			Object: map[string]interface{}{
    				"status":  utils.RECODE_FAIL,
    				"type":    utils.RESPMSG_ERROR_USERLIST,
    				"message": utils.Recode2Text(utils.RESPMSG_ERROR_USERLIST),
    			},
    		}
    	}
    
    	//将查询到的用户数据进行转换成前端需要的内容
    	var respList []interface{}
    	for _, user := range userList {
    		respList = append(respList, user.UserToRespDesc())
    	}
    
    	//返回用户列表
    	return mvc.Response{
    		Object: &respList,
    	}
    }


  • 获取请求参数

    offsetStr := uc.Ctx.FormValue("offset")
    limitStr := uc.Ctx.FormValue("limit")


  • 服务功能实现UserService与UserController配合实现的是UserService,来实现需要的功能数据查询与操作。在UserService中定义GetUserList方法来获取用户列表,实现功能如下:

    func (uc *userService) GetUserList(offset, limit int) []*model.User {
    
    	var userList []*model.User
    
    	err := uc.Engine.Where("del_flag = ?", 0).Limit(limit, offset).Find(&userList)
    	if err != nil {
    		iris.New().Logger().Error(err.Error())
    		panic(err.Error())
    		return nil
    	}
    	return userList
    }


  • User用户实体转换为Json格式获取到User用户后,可以通过工具方法将用户User实体结构体转换为Json格式,定义实现转换格式的功能方法UserToRespDesc。该方法实现如下:

    func (user *User) UserToRespDesc() interface{} {
    	respInfo := map[string]interface{}{
    		"id":           user.Id,
    		"user_id":      user.Id,
    		"username":     user.UserName,
    		"city":         user.CityName,
    		"registe_time": utils.FormatDatetime(user.RegisterTime),
    		"mobile":       user.Mobile,
    		"is_active":    user.IsActive,
    		"balance":      user.Balance,
    		"avatar":       user.Avatar,
    	}
    	return respInfo
    }


  • 用户列表效果

订单列表功能开发

我们可以在小幺鸡文档:http://www.xiaoyaoji.cn/doc/yw9VTiEtz 查看到获取订单列表接口,我们根据接口信息开发用户订单列表功能。

  • 用户列表接口: /bos/orders

  • 请求类型:GET

  • 携带参数:

    • offset:偏移量

    • limit:每次请求的记录条数

  • 请求示例:/bos/orders?offset=0&limit=20

  • 路由注册:在main.go文件中,使用app.Party("/bos/orders/")路由组对用户订单进行路由解析。请求末级的url为/,请求类型为GET。我们在OrderController中定义func Get(),用来进行解析请求。路由组解析设置如下:

    orderService := service.NewOrderService(engine)
    order := mvc.New(app.Party("/bos/orders/"))
    order.Register(
    	orderService,
    	sessManager.Start,
    )
    order.Handle(new(controller.OrderController))//控制器


    Get解析方法定义
    
    func (orderController *OrderController) Get() mvc.Result {
    
    iris.New().Logger().Info(" 查询订单列表 ")
    
    offsetStr := orderController.Ctx.FormValue("offset")
    limitStr := orderController.Ctx.FormValue("limit")
    var offset int
    var limit int
    
    //判断offset和limit两个变量任意一个都不能为""
    if offsetStr == "" || limitStr == "" {
    
    	return mvc.Response{
    		Object: map[string]interface{}{
    			"status":  utils.RECODE_FAIL,
    			"type":    utils.RESPMSG_ERROR_ORDERLIST,
    			"message": utils.Recode2Text(utils.RESPMSG_ERROR_ORDERLIST),
    		},
    	}
    }
    
    offset, err := strconv.Atoi(offsetStr)
    limit, err = strconv.Atoi(limitStr)
    if err != nil {
    	return mvc.Response{
    		Object: map[string]interface{}{
    			"status":  utils.RECODE_FAIL,
    			"type":    utils.RESPMSG_ERROR_ORDERLIST,
    			"message": utils.Recode2Text(utils.RESPMSG_ERROR_ORDERLIST),
    		},
    	}
    }
    
    //做页数的限制检查
    if offset <= 0 {
    	offset = 0
    }
    
    //做最大的限制
    if limit > MaxLimit {
    	limit = MaxLimit
    }
    
    orderList := orderController.Service.GetOrderList(offset, limit)
    
    if len(orderList) == 0 {
    	return mvc.Response{
    		Object: map[string]interface{}{
    			"status":  utils.RECODE_FAIL,
    			"type":    utils.RESPMSG_ERROR_ORDERLIST,
    			"message": utils.Recode2Text(utils.RESPMSG_ERROR_ORDERLIST),
    		},
    	}
    }
    
    //将查询到的用户数据进行转换成前端需要的内容
    var respList []interface{}
    for _, order := range orderList {
    	respList = append(respList, order.UserOrder2Resp())
    }
    
    //返回用户列表
    return mvc.Response{
    	Object: &respList,
    }
    }
  • 获取请求参数
    
    offsetStr := orderController.Ctx.FormValue("offset")
    limitStr := orderController.Ctx.FormValue("limit")
  • OrderService实现查询订单列表功能同UserService的实现一样,我们通过OrderService来定义GetOrderList方法实现对用户订单列表的查询,GetOrderList方法实现如下:
    
    func (orderService *orderService) GetOrderList(offset, limit int) []*model.UserOrder {
    
    	var orderList []*model.UserOrder
    
    	err := orderService.Engine.Where(" del_flag = 0 ").Limit(limit, offset).Find(&orderList)
    	if err != nil {
    		iris.New().Logger().Error(err.Error())
    		panic(err.Error())
    		return nil
    	}
    	return orderList
    }
  • 请求数据Json格式化获取到OrderService提供的[]*model.UserOrder数据以后,使用工具方法将UserOrder对象转换为前端可接收的Jsoon格式,转换方法如下:

    func (this *UserOrder) UserOrder2Resp() interface{} {
    	respDesc := map[string]interface{}{
    		"id":                   this.Id,
    		"total_amount":         this.SumMoney,
    		"user_id":              this.User.UserName,          //用户名
    		"status":               this.OrderStatus.StatusDesc, //订单状态
    		"restaurant_id":        this.Shop.Id,                //商铺id
    		"restaurant_image_url": this.Shop.ImagePath,         //商铺图片
    		"restaurant_name":      this.Shop.Name,              //商铺名称
    		"formatted_created_at": this.Time,
    		"status_code":          0,
    		"address_id":           this.Address.Id, //订单地址id
    	}
    
    	statusDesc := map[string]interface{}{
    		"color":     "f60",
    		"sub_title": "15分钟内支付",
    		"title":     this.OrderStatus.StatusDesc,
    	}
    
    	respDesc["status_bar"] = statusDesc
    	return respDesc
    }



上一篇:HTML5工具初识之网页编辑器

下一篇:菜鸟Vue学习笔记(一)

QQ技术交流群

千锋go语言官方①群
816085262

加入群聊