package controller import ( "go-template/business/dto" "go-template/business/exception" "strconv" "time" "gitea.ckfah.com/cjjy/gocommon/pkg/common" "gitea.ckfah.com/cjjy/gocommon/pkg/logger" "gitea.ckfah.com/cjjy/gocommon/pkg/net/engines" ) type reportController struct { } func NewReportController() *reportController { return new(reportController) } // 普通请求 func (rc *reportController) ReportInfo(ctx *engines.Context) { request := new(dto.ReportInfoRequest) err := ctx.ShouldBindJSON(request) if err != nil { logger.Warnc(ctx, "[ReportInfo] bind params err,err=%v", err) common.FailJson(ctx, exception.ParamsBindError) return } logger.Infoc(ctx, "[ReportInfo] start,request=%+v", request) result, cerr := reportService.ReportInfo(ctx, &request.Params) if cerr != nil { logger.Warnc(ctx, "[ReportInfo] end err,err=%v", cerr) common.FailJson(ctx, cerr) return } logger.Infoc(ctx, "[ReportInfo] end,result=%+v", result) common.SuccessJson(ctx, result) } // 分页请求查询 func (rc *reportController) ReportList(ctx *engines.Context) { request := new(dto.ReportListRequest) err := ctx.ShouldBindJSON(request) if err != nil { logger.Warnc(ctx, "[ReportList] bind params err,err=%v", err) common.FailJson(ctx, exception.ParamsBindError) return } logger.Infoc(ctx, "[ReportList] start,request=%+v", request) result, cerr := reportService.ReportList(ctx, &request.Params) if cerr != nil { logger.Warnc(ctx, "[ReportList] end err,err=%v", cerr) common.FailJson(ctx, cerr) return } logger.Infoc(ctx, "[ReportList] end,result=%+v", result) common.SuccessJson(ctx, result) } /** 下载excel文件 url: http://localhost:8080/go-template/download/xlsx/file?row=1000&column=12&&sheet=2 */ func (rc *reportController) DownLoadXlsxFile(ctx *engines.Context) { // get请求的参数请使用 ctx.Query rowStr := ctx.Query("row") columnStr := ctx.Query("column") sheetStr := ctx.Query("sheet") row, err := strconv.ParseInt(rowStr, 10, 64) if err != nil { logger.Warnc(ctx, "[DownLoadXlsxFile] start,bind params find err, err=%v", err) common.FailJson(ctx, exception.ParamsBindError) return } column, err := strconv.ParseInt(columnStr, 10, 64) if err != nil { logger.Warnc(ctx, "[DownLoadXlsxFile] start,bind params find err, err=%v", err) common.FailJson(ctx, exception.ParamsBindError) return } sheet, err := strconv.ParseInt(sheetStr, 10, 64) if err != nil { logger.Warnc(ctx, "[DownLoadXlsxFile] start,bind params find err, err=%v", err) common.FailJson(ctx, exception.ParamsBindError) return } params := dto.DownLoadXlsxFileParams{ Row: int(row), Column: int(column), Sheet: int(sheet), } logger.Infoc(ctx, "[DownLoadXlsxFile] start,request=%+v", ¶ms) if err := reportService.DownLoadXlsxFile(ctx, ctx.Writer, ¶ms); err != nil { logger.Warnc(ctx, "[DownLoadXlsxFile] end err,err=%v", err) common.FailJson(ctx, err) return } logger.Infoc(ctx, "[DownLoadXlsxFile] end success") } /** 下载csv文件 url: http://localhost:8080/go-template/download/csv/file?row=10000&column=10 */ func (rc *reportController) DownLoadCsvFile(ctx *engines.Context) { // get请求的参数请使用 ctx.Query rowStr := ctx.Query("row") columnStr := ctx.Query("column") row, err := strconv.ParseInt(rowStr, 10, 64) if err != nil { logger.Warnc(ctx, "[DownLoadCsvFile] start,bind params find err, err=%v", err) common.FailJson(ctx, exception.ParamsBindError) return } column, err := strconv.ParseInt(columnStr, 10, 64) if err != nil { logger.Warnc(ctx, "[DownLoadCsvFile] start,bind params find err, err=%v", err) common.FailJson(ctx, exception.ParamsBindError) return } params := dto.DownLoadCsvFileParams{ Row: int(row), Column: int(column), } logger.Infoc(ctx, "[DownLoadCsvFile] start,request=%+v", ¶ms) if err := reportService.DownLoadCsvFile(ctx, ctx.Writer, ¶ms); err != nil { logger.Warnc(ctx, "[DownLoadCsvFile] end err,err=%v", err) common.FailJson(ctx, err) return } logger.Infoc(ctx, "[DownLoadCsvFile] end success") } /** 下载excel文件 url: http://localhost:8080/go-template/download/xlsx/file?row=1000&column=12&&sheet=2 */ func (rc *reportController) UploadXlsxFile(ctx *engines.Context) { // 参数为 sheet_name sheetName := ctx.Request.FormValue("sheet_name") params := dto.UploadXlsxFileParams{ SheetName: sheetName, } logger.Infoc(ctx, "[UploadXlsxFile] start, params=%v", ¶ms) // 首先拿到 参数为 file的文件 fileDesc, err := ctx.FormFile("file") if err != nil { logger.Warnc(ctx, "[UploadXlsxFile] get file err, err=%v", err) common.FailJson(ctx, exception.DefaultError(err)) return } file, err := fileDesc.Open() if err != nil { logger.Errorc(ctx, "[UploadXlsxFile] open file err, err=%v", err) common.FailJson(ctx, exception.DefaultError(err)) return } // 记得关闭流 defer file.Close() // 处理业务 response, cerror := reportService.UploadXlsxFile(ctx, file, ¶ms) if cerror != nil { logger.Errorc(ctx, "[UploadXlsxFile] end find err, err=%v", cerror) common.FailJson(ctx, cerror) } logger.Infoc(ctx, "[UploadXlsxFile] end,result=%+v", response) common.SuccessJson(ctx, response) return } // 发送MQ消息 func (rc *reportController) SendMQ(ctx *engines.Context) { request := new(dto.SendMQRequest) err := ctx.ShouldBindJSON(request) if err != nil { logger.Warnc(ctx, "[SendMQ] bind params err,err=%v", err) common.FailJson(ctx, exception.ParamsBindError) return } logger.Infoc(ctx, "[SendMQ] start,request=%+v", request) result, cerr := reportService.SendMQ(ctx, &request.Params) if cerr != nil { logger.Warnc(ctx, "[SendMQ] end err,err=%v", cerr) common.FailJson(ctx, cerr) return } logger.Infoc(ctx, "[SendMQ] end,result=%+v", result) common.SuccessJson(ctx, result) } /** 模拟超时请看 access_log url: http://localhost:8080/go-template/timeout?sleep=25 */ func (rc *reportController) SleepTimeout(ctx *engines.Context) { sleepStr := ctx.Query("sleep") sleepSeconds, err := strconv.ParseInt(sleepStr, 10, 64) if err != nil { logger.Warnc(ctx, "[SleepTimeout] start,bind params find err, err=%v", err) common.FailJson(ctx, exception.ParamsBindError) return } logger.Infoc(ctx, "[SleepTimeout] start, sleep=%sm", sleepSeconds) time.Sleep(time.Second * time.Duration(sleepSeconds)) logger.Infoc(ctx, "[SleepTimeout] end success !") common.SuccessJson(ctx, nil) } /** 模拟panic 请看 access_log 和 error log url: http://localhost:8080/go-template/panic */ func (rc *reportController) TestPanic(ctx *engines.Context) { logger.Infoc(ctx, "[SleepTimeout] start") panic("test panic !!!") }