report_controller.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package controller
  2. import (
  3. "go-template/business/dto"
  4. "go-template/business/exception"
  5. "strconv"
  6. "time"
  7. "gitea.ckfah.com/cjjy/gocommon/pkg/common"
  8. "gitea.ckfah.com/cjjy/gocommon/pkg/logger"
  9. "gitea.ckfah.com/cjjy/gocommon/pkg/net/engines"
  10. )
  11. type reportController struct {
  12. }
  13. func NewReportController() *reportController {
  14. return new(reportController)
  15. }
  16. // 普通请求
  17. func (rc *reportController) ReportInfo(ctx *engines.Context) {
  18. request := new(dto.ReportInfoRequest)
  19. err := ctx.ShouldBindJSON(request)
  20. if err != nil {
  21. logger.Warnc(ctx, "[ReportInfo] bind params err,err=%v", err)
  22. common.FailJson(ctx, exception.ParamsBindError)
  23. return
  24. }
  25. logger.Infoc(ctx, "[ReportInfo] start,request=%+v", request)
  26. result, cerr := reportService.ReportInfo(ctx, &request.Params)
  27. if cerr != nil {
  28. logger.Warnc(ctx, "[ReportInfo] end err,err=%v", cerr)
  29. common.FailJson(ctx, cerr)
  30. return
  31. }
  32. logger.Infoc(ctx, "[ReportInfo] end,result=%+v", result)
  33. common.SuccessJson(ctx, result)
  34. }
  35. // 分页请求查询
  36. func (rc *reportController) ReportList(ctx *engines.Context) {
  37. request := new(dto.ReportListRequest)
  38. err := ctx.ShouldBindJSON(request)
  39. if err != nil {
  40. logger.Warnc(ctx, "[ReportList] bind params err,err=%v", err)
  41. common.FailJson(ctx, exception.ParamsBindError)
  42. return
  43. }
  44. logger.Infoc(ctx, "[ReportList] start,request=%+v", request)
  45. result, cerr := reportService.ReportList(ctx, &request.Params)
  46. if cerr != nil {
  47. logger.Warnc(ctx, "[ReportList] end err,err=%v", cerr)
  48. common.FailJson(ctx, cerr)
  49. return
  50. }
  51. logger.Infoc(ctx, "[ReportList] end,result=%+v", result)
  52. common.SuccessJson(ctx, result)
  53. }
  54. /**
  55. 下载excel文件
  56. url: http://localhost:8080/go-template/download/xlsx/file?row=1000&column=12&&sheet=2
  57. */
  58. func (rc *reportController) DownLoadXlsxFile(ctx *engines.Context) {
  59. // get请求的参数请使用 ctx.Query
  60. rowStr := ctx.Query("row")
  61. columnStr := ctx.Query("column")
  62. sheetStr := ctx.Query("sheet")
  63. row, err := strconv.ParseInt(rowStr, 10, 64)
  64. if err != nil {
  65. logger.Warnc(ctx, "[DownLoadXlsxFile] start,bind params find err, err=%v", err)
  66. common.FailJson(ctx, exception.ParamsBindError)
  67. return
  68. }
  69. column, err := strconv.ParseInt(columnStr, 10, 64)
  70. if err != nil {
  71. logger.Warnc(ctx, "[DownLoadXlsxFile] start,bind params find err, err=%v", err)
  72. common.FailJson(ctx, exception.ParamsBindError)
  73. return
  74. }
  75. sheet, err := strconv.ParseInt(sheetStr, 10, 64)
  76. if err != nil {
  77. logger.Warnc(ctx, "[DownLoadXlsxFile] start,bind params find err, err=%v", err)
  78. common.FailJson(ctx, exception.ParamsBindError)
  79. return
  80. }
  81. params := dto.DownLoadXlsxFileParams{
  82. Row: int(row),
  83. Column: int(column),
  84. Sheet: int(sheet),
  85. }
  86. logger.Infoc(ctx, "[DownLoadXlsxFile] start,request=%+v", &params)
  87. if err := reportService.DownLoadXlsxFile(ctx, ctx.Writer, &params); err != nil {
  88. logger.Warnc(ctx, "[DownLoadXlsxFile] end err,err=%v", err)
  89. common.FailJson(ctx, err)
  90. return
  91. }
  92. logger.Infoc(ctx, "[DownLoadXlsxFile] end success")
  93. }
  94. /**
  95. 下载csv文件
  96. url: http://localhost:8080/go-template/download/csv/file?row=10000&column=10
  97. */
  98. func (rc *reportController) DownLoadCsvFile(ctx *engines.Context) {
  99. // get请求的参数请使用 ctx.Query
  100. rowStr := ctx.Query("row")
  101. columnStr := ctx.Query("column")
  102. row, err := strconv.ParseInt(rowStr, 10, 64)
  103. if err != nil {
  104. logger.Warnc(ctx, "[DownLoadCsvFile] start,bind params find err, err=%v", err)
  105. common.FailJson(ctx, exception.ParamsBindError)
  106. return
  107. }
  108. column, err := strconv.ParseInt(columnStr, 10, 64)
  109. if err != nil {
  110. logger.Warnc(ctx, "[DownLoadCsvFile] start,bind params find err, err=%v", err)
  111. common.FailJson(ctx, exception.ParamsBindError)
  112. return
  113. }
  114. params := dto.DownLoadCsvFileParams{
  115. Row: int(row),
  116. Column: int(column),
  117. }
  118. logger.Infoc(ctx, "[DownLoadCsvFile] start,request=%+v", &params)
  119. if err := reportService.DownLoadCsvFile(ctx, ctx.Writer, &params); err != nil {
  120. logger.Warnc(ctx, "[DownLoadCsvFile] end err,err=%v", err)
  121. common.FailJson(ctx, err)
  122. return
  123. }
  124. logger.Infoc(ctx, "[DownLoadCsvFile] end success")
  125. }
  126. /**
  127. 下载excel文件
  128. url: http://localhost:8080/go-template/download/xlsx/file?row=1000&column=12&&sheet=2
  129. */
  130. func (rc *reportController) UploadXlsxFile(ctx *engines.Context) {
  131. // 参数为 sheet_name
  132. sheetName := ctx.Request.FormValue("sheet_name")
  133. params := dto.UploadXlsxFileParams{
  134. SheetName: sheetName,
  135. }
  136. logger.Infoc(ctx, "[UploadXlsxFile] start, params=%v", &params)
  137. // 首先拿到 参数为 file的文件
  138. fileDesc, err := ctx.FormFile("file")
  139. if err != nil {
  140. logger.Warnc(ctx, "[UploadXlsxFile] get file err, err=%v", err)
  141. common.FailJson(ctx, exception.DefaultError(err))
  142. return
  143. }
  144. file, err := fileDesc.Open()
  145. if err != nil {
  146. logger.Errorc(ctx, "[UploadXlsxFile] open file err, err=%v", err)
  147. common.FailJson(ctx, exception.DefaultError(err))
  148. return
  149. }
  150. // 记得关闭流
  151. defer file.Close()
  152. // 处理业务
  153. response, cerror := reportService.UploadXlsxFile(ctx, file, &params)
  154. if cerror != nil {
  155. logger.Errorc(ctx, "[UploadXlsxFile] end find err, err=%v", cerror)
  156. common.FailJson(ctx, cerror)
  157. }
  158. logger.Infoc(ctx, "[UploadXlsxFile] end,result=%+v", response)
  159. common.SuccessJson(ctx, response)
  160. return
  161. }
  162. // 发送MQ消息
  163. func (rc *reportController) SendMQ(ctx *engines.Context) {
  164. request := new(dto.SendMQRequest)
  165. err := ctx.ShouldBindJSON(request)
  166. if err != nil {
  167. logger.Warnc(ctx, "[SendMQ] bind params err,err=%v", err)
  168. common.FailJson(ctx, exception.ParamsBindError)
  169. return
  170. }
  171. logger.Infoc(ctx, "[SendMQ] start,request=%+v", request)
  172. result, cerr := reportService.SendMQ(ctx, &request.Params)
  173. if cerr != nil {
  174. logger.Warnc(ctx, "[SendMQ] end err,err=%v", cerr)
  175. common.FailJson(ctx, cerr)
  176. return
  177. }
  178. logger.Infoc(ctx, "[SendMQ] end,result=%+v", result)
  179. common.SuccessJson(ctx, result)
  180. }
  181. /**
  182. 模拟超时请看 access_log
  183. url: http://localhost:8080/go-template/timeout?sleep=25
  184. */
  185. func (rc *reportController) SleepTimeout(ctx *engines.Context) {
  186. sleepStr := ctx.Query("sleep")
  187. sleepSeconds, err := strconv.ParseInt(sleepStr, 10, 64)
  188. if err != nil {
  189. logger.Warnc(ctx, "[SleepTimeout] start,bind params find err, err=%v", err)
  190. common.FailJson(ctx, exception.ParamsBindError)
  191. return
  192. }
  193. logger.Infoc(ctx, "[SleepTimeout] start, sleep=%sm", sleepSeconds)
  194. time.Sleep(time.Second * time.Duration(sleepSeconds))
  195. logger.Infoc(ctx, "[SleepTimeout] end success !")
  196. common.SuccessJson(ctx, nil)
  197. }
  198. /**
  199. 模拟panic 请看 access_log 和 error log
  200. url: http://localhost:8080/go-template/panic
  201. */
  202. func (rc *reportController) TestPanic(ctx *engines.Context) {
  203. logger.Infoc(ctx, "[SleepTimeout] start")
  204. panic("test panic !!!")
  205. }