h_exam.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package handler
  2. import (
  3. webServerEntity "cicv-data-closedloop/amd64/web_server/entity"
  4. "cicv-data-closedloop/common/config/c_db"
  5. "cicv-data-closedloop/common/config/c_log"
  6. commonEntity "cicv-data-closedloop/common/entity"
  7. "cicv-data-closedloop/common/util"
  8. "github.com/gin-gonic/gin"
  9. "net/http"
  10. "time"
  11. )
  12. // 考试开始时间
  13. func Begin(c *gin.Context) {
  14. param := new(webServerEntity.ExamPao)
  15. // 映射到结构体
  16. if err := c.ShouldBindJSON(&param); err != nil {
  17. c_log.GlobalLogger.Error("项目启动接收请求参数报错:", err)
  18. c.JSON(http.StatusBadRequest, commonEntity.Response{
  19. Code: 500,
  20. Msg: "请求体解析失败。",
  21. })
  22. return
  23. }
  24. // 插入到数据库
  25. sqlTemplate, _ := util.ReadFile(c_db.SqlFilesMap["exam-insert-begin_time-by-team_name.sql"])
  26. if err := c_db.DoTx(sqlTemplate, []any{
  27. param.TeamName,
  28. time.Now(),
  29. }); err != nil {
  30. c_log.GlobalLogger.Error("插入数据报错:", err)
  31. c.JSON(http.StatusBadRequest, commonEntity.Response{
  32. Code: 500,
  33. Msg: "插入数据报错。",
  34. })
  35. return
  36. }
  37. c.JSON(http.StatusOK, commonEntity.Response{
  38. Code: 200,
  39. Msg: "插入数据成功。",
  40. })
  41. }
  42. // 考试结束时间
  43. func End(c *gin.Context) {
  44. param := new(webServerEntity.ExamPao)
  45. // 映射到结构体
  46. if err := c.ShouldBindJSON(&param); err != nil {
  47. c_log.GlobalLogger.Error("项目启动接收请求参数报错:", err)
  48. c.JSON(http.StatusBadRequest, commonEntity.Response{
  49. Code: 500,
  50. Msg: "请求体解析失败。",
  51. })
  52. return
  53. }
  54. // 1 查询指定队伍的开始时间最新的考试是否有结束时间,如果有则不在处理,如果没有则更新
  55. var result webServerEntity.ExamPo
  56. selectSql, err := util.ReadFile(c_db.SqlFilesMap["exam-select-latest-by-team_name.sql"])
  57. if err != nil {
  58. c_log.GlobalLogger.Error("读取sql文件报错:", err)
  59. c.JSON(http.StatusBadRequest, commonEntity.Response{
  60. Code: 500,
  61. Msg: "读取sql文件报错。",
  62. })
  63. return
  64. }
  65. // 可以传参数
  66. if err = c_db.MysqlDb.Select(&result, selectSql, param.TeamName); err != nil {
  67. c_log.GlobalLogger.Error("数据库查询报错:", err)
  68. c.JSON(http.StatusBadRequest, commonEntity.Response{
  69. Code: 500,
  70. Msg: "数据库查询报错。",
  71. })
  72. return
  73. }
  74. c_log.GlobalLogger.Info("数据库查询成功:", result)
  75. if !result.EndTime.IsZero() {
  76. c_log.GlobalLogger.Error("赛队", param.TeamName, "重复请求考试结束接口!")
  77. c.JSON(http.StatusBadRequest, commonEntity.Response{
  78. Code: 500,
  79. Msg: "重复请求。",
  80. })
  81. return
  82. }
  83. // 更新到数据库
  84. sqlTemplate, _ := util.ReadFile(c_db.SqlFilesMap["exam-update-end_time-by-team_name.sql"])
  85. if err := c_db.DoTx(sqlTemplate, []any{
  86. time.Now(),
  87. param.TeamName,
  88. }); err != nil {
  89. c_log.GlobalLogger.Error("插入数据报错:", err)
  90. c.JSON(http.StatusBadRequest, commonEntity.Response{
  91. Code: 500,
  92. Msg: "插入数据报错。",
  93. })
  94. return
  95. }
  96. c.JSON(http.StatusOK, commonEntity.Response{
  97. Code: 200,
  98. Msg: "插入数据成功。",
  99. })
  100. }
  101. // 分页查询
  102. func Page(c *gin.Context) {
  103. param := new(webServerEntity.ExamPagePao)
  104. _ = c.ShouldBindJSON(&param)
  105. var resultPos []webServerEntity.ExamPo
  106. var selectSql string
  107. offset := (param.CurrentPage - 1) * param.PageSize
  108. size := param.PageSize
  109. if param.TeamName == "" && param.Topic == "" {
  110. selectSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page.sql"])
  111. _ = c_db.MysqlDb.Select(&resultPos, selectSql, offset, size)
  112. }
  113. if param.TeamName != "" && param.Topic == "" {
  114. selectSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page-by-team_name.sql"])
  115. _ = c_db.MysqlDb.Select(&resultPos, selectSql, "%"+param.TeamName+"%", offset, size)
  116. }
  117. if param.TeamName == "" && param.Topic != "" {
  118. selectSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page-by-topic.sql"])
  119. _ = c_db.MysqlDb.Select(&resultPos, selectSql, "%"+param.Topic+"%", offset, size)
  120. }
  121. if param.TeamName != "" && param.Topic != "" {
  122. selectSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page-by-team_name-and-topic.sql"])
  123. _ = c_db.MysqlDb.Select(&resultPos, selectSql, "%"+param.TeamName+"%", "%"+param.Topic+"%", offset, size)
  124. }
  125. var resultVos []webServerEntity.ExamVo
  126. for _, po := range resultPos {
  127. resultVos = append(resultVos, webServerEntity.ExamVo{
  128. Id: po.Id,
  129. TeamName: po.TeamName,
  130. Topic: po.Topic,
  131. BeginTime: util.GetTimeString(po.BeginTime),
  132. EndTime: util.GetTimeString(po.EndTime),
  133. ScoreOnline: po.ScoreOnline,
  134. ScoreOffline: po.ScoreOffline,
  135. ScoreFinal: po.ScoreFinal,
  136. Details: po.Details,
  137. ScoreReportPath: po.ScoreReportPath,
  138. })
  139. }
  140. c.JSON(http.StatusOK, commonEntity.Response{
  141. Code: 200,
  142. Msg: "分页查询成功!",
  143. Data: resultVos,
  144. })
  145. }