在gva框架中如何用Golang写一个完整的接口(场所信息Excel表导出接口)

router–>api–>service(router–>controller–>logic–>dao)

1.router

先在router层里面注册路由,例如:

cdPlaceRoomRouter.POST("exportExcel", cdPlaceRoomApi.CdPlaceRoomExport)
//导出Excel表

2.api

然后在api层中,进行三个步骤。

1.做参数请求和参数校验(post请求需要入参)

2.业务逻辑处理

3.返回逻辑响应

例如:

func (a *CdPlaceRoomApi) CdPlaceRoomExport(c *gin.Context) {var excelInfo cdReq.CdPlaceRoomExcelInfo_ = c.ShouldBindJSON(&excelInfo)                       //参数绑定filePath := global.GSD_CONFIG.Excel.Dir + excelInfo.FileNamecurUser := utils.GetUser(c)placeList, isAll := dataScope.GetPlaceDataScope(curUser)if err := cdPlaceRoomService.CdPlaceRoomToExcel(excelInfo, filePath, placeList, isAll); err != nil {                            //业务逻辑处理global.GSD_LOG.Error("导出场所信息excel失败", zap.Error(err), utils.GetRequestID(c))response.FailWithMessage("导出场所信息excel失败", c)   //返回响应return}c.Writer.Header().Add("success", "true")c.File(filePath)
}

3.service

在service层中存放业务逻辑的代码。(对数据库进行增删改查)

func (s CdPlaceRoomService) CdPlaceRoomToExcel(room ResCd.CdPlaceRoomExcelInfo, path string, place []string, all bool) (err error) {excel := excelize.NewFile()excel.SetSheetRow("Sheet1", "A1", &[]string{"场所编号","房间号", "隔离房间号", "隔离点楼号", "隔离点楼层号", "状态"})var placeRooms []cdfield.CdPlaceRoomdb := global.GSD_DB.Table("cd_place_rooms")if  room.PlaceID!=""{db = db.Where("csbh LIKE ?", room.PlaceID+"%")}if room.RoomNumber!= "" {db = db.Where("fjh LIKE ?", room.RoomNumber+"%")}if room.GLRoomNumber != "" {db = db.Where("gldfjh LIKE ?", room.GLRoomNumber+"%")}if room.BuildingNumber != "" {db = db.Where("lh LIKE ?", room.BuildingNumber+"%")}if room.FloorNumber != "" {db = db.Where("lch LIKE ?", room.FloorNumber+"%")}if room.State != "" {db = db.Where("syzt LIKE ?", room.State+"%")}if !reflect.ValueOf(room.StartTime).IsNil() && !reflect.ValueOf(room.EndTime).IsNil() {db = db.Where("update_at BETWEEN ? AND ?", room.StartTime, room.EndTime)}if room.Csmc != "" {ids, _ :=  cdPlaceRoomService.GetCdPlaceRoomByCsmc(room.Csmc)db = db.Where("csbh in (?)", ids)}if !all {db = db.Where("csbh in (?)", place)}err = db.Find(&placeRooms).Errorif err != nil {return}for i, cdPlaceRoom := range placeRooms {axis := fmt.Sprintf("A%d", i+2)excel.SetSheetRow("Sheet1", axis, &[]interface{}{cdPlaceRoom.PlaceID,cdPlaceRoom.RoomNumber,cdPlaceRoom.GLRoomNumber,cdPlaceRoom.BuildingNumber,cdPlaceRoom.FloorNumber,cdPlaceRoom.State,})}mkdirErr := os.MkdirAll(global.GSD_CONFIG.Excel.Dir, os.ModePerm)if mkdirErr != nil {global.GSD_LOG.Error("function os.MkdirAll() Filed", zap.Any("err", mkdirErr.Error()))return errors.New("function os.MkdirAll() Filed, err:" + mkdirErr.Error())}rows, err := excel.Rows("Sheet1")fmt.Println(rows)if err != nil {return err}err = excel.SaveAs(path)return err
}

在GVA框架中用go写接口的步骤相关推荐

  1. layui框架中用laypage与后端搭配使用做分页列表

    layui框架中用laypage与后端搭配使用做分页列表 layui中文离线文档,包含html文档及layui源码 首先我们需要在layui.use中引入laypage: layui.use(['la ...

  2. 如何搭建python框架_从零开始:写一个简单的Python框架

    原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...

  3. python连接sqlserver_python 链接sqlserver 写接口实例

    我是使用pymssql完成的sqlserver,首先下载符合版本的pymssql的whl,然后安装,在pycharm的default setting->project Interpreter中确 ...

  4. [MyBatis]DAO层只写接口,不用写实现类

    团队开发一个项目,由老大架了一个框架,遇到了DAO层不用写接口了,我也是用了2次才记住这个事的,因为自己一直都是习惯于写DAO层的实现类,所以,习惯性的还是写了个实现类.于是遇到错误了. 找不到那个方 ...

  5. node搭建服务器,写接口,调接口,跨域

    刚开始学node,今天做这个也是累死宝宝了,以后可以自己写接口自己用了,再也不用麻烦人家后台人员了,这些年我们欠他们的太多了,说多了都是泪,不多说,往下看吧... 服务端项目目录下: 1.npm in ...

  6. rest风格使用两个变量_为什么要用Rest风格,接口应该怎么定义,除了Rest还可用什么方式写接口的?...

    这里是修真院后端小课堂,每篇分享文从 深度思考中的知识点--为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的? 1.背景介绍 REST ...

  7. [java基础] --- java开发,service层是不是一定要写接口

    估计很多java开发的同学都遇到过,service层要写一个接口,然后再写接口的实现类,但这个接口从项目开始到项目倒闭,都不会有第二个实现,那为什么不直接写个service类呢?如果你还没想过这个问题 ...

  8. 快速的利用 Express 框架实现一个 Rustfull 接口的后端 Server

    快速的利用 Express 框架实现一个 Rustfull 接口的后端 Server 附:基于 Nodejs 的服务器后端的框架用的比较多的是 Koa : github/kaojs/koa 但本文这里 ...

  9. 服务端api用php写还是用node,如何使用node搭建服务器,写接口,调接口,跨域

    这次给大家带来如何使用node搭建服务器,写接口,调接口,跨域,使用node搭建服务器,写接口,调接口,跨域的注意事项有哪些,下面就是实战案例,一起来看一下.. 服务端项目目录下: 1.npm ini ...

最新文章

  1. word 生成HTML
  2. ubuntu 配置samba
  3. Meditation Guide
  4. 神经网络优化中的Weight Averaging
  5. 电路中滤波电容和退耦电容_电子电路中电容的作用,滤波消抖,充放电,耦合,退耦...
  6. java8optional_关于Java 8的Optional的介绍
  7. 【渝粤题库】国家开放大学2021春2772家畜环境卫生与设施题目
  8. LeetCode--3. 无重复字符的最长子串(双指针)
  9. mysql 集中join的区别
  10. SAP License:SAP ECC6安装系列三:关于SAP你也许想知道的一些事
  11. java spring boot 项目 热加载 有利于快速开发
  12. 【元胞自动机】基于matlab元胞自动机超车换道【含Matlab源码 359期】
  13. java 生成kml 文件
  14. JavaWeb实现的超市收银、基于SSM+mysql的 vue便利店收银管理系统实现【文档】【代码过程】
  15. 【GlobalMapper精品教程】003:影像裁剪、批量影像分幅案例详解
  16. 程序化交易高手的交易心得 分享~
  17. Python基础刻意练习:魔方方法
  18. 1 什么叫多媒体计算机,选择1多媒体计算机中的媒体信息是指()文字声音.ppt
  19. Mac 安装 Xcode工具软件
  20. 未来已来:探寻2019智博会上的前沿科技

热门文章

  1. 怎么样才能写好自媒体原创文章?掌握好这3要点就够了
  2. fadeTo in dojo
  3. mysql least null_MySQL LEAST()函數不返回結果的問題
  4. OmniGraffle
  5. 说给青春听的那些语句,为什么总那么疼
  6. 【小迪安全】web安全|渗透测试|网络安全 | 学习笔记-10
  7. 论文列表——stance detection
  8. 创新界,聚势行 | 2022人大金仓“百城巡展”火热开启
  9. 详解代码覆盖率及各语言主流工具
  10. 为什么说苹果收购Beats不值?