在GVA框架中用go写接口的步骤

在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.FileName
   curUser := 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.CdPlaceRoom
   db := 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).Error
   if 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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终生成长者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值