h_exam.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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. var defaultTime = time.Date(2006, time.January, 2, 15, 4, 5, 0, time.Local)
  13. // 考试开始时间
  14. func Begin(c *gin.Context) {
  15. param := new(webServerEntity.ExamPao)
  16. // 映射到结构体
  17. if err := c.ShouldBindJSON(&param); err != nil {
  18. c_log.GlobalLogger.Error("项目启动接收请求参数报错:", err)
  19. c.JSON(http.StatusBadRequest, commonEntity.Response{
  20. Code: 500,
  21. Msg: "请求体解析失败。",
  22. })
  23. return
  24. }
  25. // 插入到数据库
  26. sqlTemplate, _ := util.ReadFile(c_db.SqlFilesMap["exam-insert-begin_time-by-team_name.sql"])
  27. if err := c_db.DoTx(sqlTemplate, []any{
  28. param.TeamName,
  29. time.Now(),
  30. }); err != nil {
  31. c_log.GlobalLogger.Error("插入数据报错:", err)
  32. c.JSON(http.StatusBadRequest, commonEntity.Response{
  33. Code: 500,
  34. Msg: "插入数据报错。",
  35. })
  36. return
  37. }
  38. c.JSON(http.StatusOK, commonEntity.Response{
  39. Code: 200,
  40. Msg: "插入数据成功。",
  41. })
  42. }
  43. // 考试结束时间
  44. func End(c *gin.Context) {
  45. param := new(webServerEntity.ExamPao)
  46. // 映射到结构体
  47. if err := c.ShouldBindJSON(&param); err != nil {
  48. c_log.GlobalLogger.Error("项目启动接收请求参数报错:", err)
  49. c.JSON(http.StatusBadRequest, commonEntity.Response{
  50. Code: 500,
  51. Msg: "请求体解析失败。",
  52. })
  53. return
  54. }
  55. // 1 查询指定队伍的开始时间最新的考试是否有结束时间,如果有则不在处理,如果没有则更新
  56. var result webServerEntity.ExamPo
  57. selectSql, err := util.ReadFile(c_db.SqlFilesMap["exam-select-latest-by-team_name.sql"])
  58. if err != nil {
  59. c_log.GlobalLogger.Error("读取sql文件报错:", err)
  60. c.JSON(http.StatusBadRequest, commonEntity.Response{
  61. Code: 500,
  62. Msg: "读取sql文件报错。",
  63. })
  64. return
  65. }
  66. // 可以传参数
  67. if err = c_db.MysqlDb.Select(&result, selectSql, param.TeamName); err != nil {
  68. c_log.GlobalLogger.Error("数据库查询报错:", err)
  69. c.JSON(http.StatusBadRequest, commonEntity.Response{
  70. Code: 500,
  71. Msg: "数据库查询报错。",
  72. })
  73. return
  74. }
  75. c_log.GlobalLogger.Info("数据库查询成功:", result)
  76. if !result.EndTime.IsZero() {
  77. c_log.GlobalLogger.Error("赛队", param.TeamName, "重复请求考试结束接口!")
  78. c.JSON(http.StatusBadRequest, commonEntity.Response{
  79. Code: 500,
  80. Msg: "重复请求。",
  81. })
  82. return
  83. }
  84. // 更新到数据库
  85. sqlTemplate, _ := util.ReadFile(c_db.SqlFilesMap["exam-update-end_time-by-team_name.sql"])
  86. if err := c_db.DoTx(sqlTemplate, []any{
  87. time.Now(),
  88. param.TeamName,
  89. }); err != nil {
  90. c_log.GlobalLogger.Error("插入数据报错:", err)
  91. c.JSON(http.StatusBadRequest, commonEntity.Response{
  92. Code: 500,
  93. Msg: "插入数据报错。",
  94. })
  95. return
  96. }
  97. c.JSON(http.StatusOK, commonEntity.Response{
  98. Code: 200,
  99. Msg: "插入数据成功。",
  100. })
  101. }
  102. // 分页查询
  103. // todo 如果日期为默认值,则返回空""
  104. func Page(c *gin.Context) {
  105. param := new(webServerEntity.ExamPagePao)
  106. _ = c.ShouldBindJSON(&param)
  107. var resultPos []webServerEntity.ExamPo
  108. var resultPosTotal []int
  109. var pageSql string
  110. var totalSql string
  111. offset := (param.CurrentPage - 1) * param.PageSize
  112. size := param.PageSize
  113. if param.TeamName == "" && param.Topic == "" {
  114. pageSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page.sql"])
  115. totalSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-total.sql"])
  116. err := c_db.MysqlDb.Select(&resultPos, pageSql, offset, size)
  117. if err != nil {
  118. c_log.GlobalLogger.Error(err)
  119. }
  120. err = c_db.MysqlDb.Select(&resultPosTotal, totalSql)
  121. if err != nil {
  122. c_log.GlobalLogger.Error(err)
  123. }
  124. }
  125. if param.TeamName != "" && param.Topic == "" {
  126. pageSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page-by-team_name.sql"])
  127. totalSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-total-by-team_name.sql"])
  128. _ = c_db.MysqlDb.Select(&resultPos, pageSql, "%"+param.TeamName+"%", offset, size)
  129. _ = c_db.MysqlDb.Select(&resultPosTotal, totalSql, "%"+param.TeamName+"%")
  130. }
  131. if param.TeamName == "" && param.Topic != "" {
  132. pageSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page-by-topic.sql"])
  133. totalSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-total-by-topic.sql"])
  134. _ = c_db.MysqlDb.Select(&resultPos, pageSql, "%"+param.Topic+"%", offset, size)
  135. _ = c_db.MysqlDb.Select(&resultPosTotal, totalSql, "%"+param.Topic+"%")
  136. }
  137. if param.TeamName != "" && param.Topic != "" {
  138. pageSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-page-by-team_name-and-topic.sql"])
  139. totalSql, _ = util.ReadFile(c_db.SqlFilesMap["exam-select-total-by-team_name-and-topic.sql"])
  140. _ = c_db.MysqlDb.Select(&resultPos, pageSql, "%"+param.TeamName+"%", "%"+param.Topic+"%", offset, size)
  141. _ = c_db.MysqlDb.Select(&resultPosTotal, totalSql, "%"+param.TeamName+"%", "%"+param.Topic+"%")
  142. }
  143. var resultVos []webServerEntity.ExamVo
  144. for _, po := range resultPos {
  145. resultVos = append(resultVos, webServerEntity.ExamVo{
  146. Id: po.Id,
  147. TeamName: po.TeamName,
  148. Topic: po.Topic,
  149. BeginTime: util.GetTimeString(po.BeginTime),
  150. EndTime: util.GetTimeString(po.EndTime),
  151. ScoreOnline: po.ScoreOnline,
  152. ScoreOffline: po.ScoreOffline,
  153. ScoreFinal: po.ScoreFinal,
  154. Details: po.Details,
  155. ScoreReportPath: po.ScoreReportPath,
  156. })
  157. }
  158. c.JSON(http.StatusOK, commonEntity.Response{
  159. Code: 200,
  160. Msg: "分页查询成功!",
  161. Data: resultVos,
  162. Total: resultPosTotal[0],
  163. })
  164. }
  165. //// 评分报告pdf下载
  166. //func Report(c *gin.Context) {
  167. // param := new(webServerEntity.ExamReportPao)
  168. // _ = c.ShouldBindJSON(&param)
  169. // // 1 根据ID查询数据
  170. // // 2 根据数据生成pdf
  171. // // 3 返回pdf文件流
  172. //
  173. // c.JSON(http.StatusOK, commonEntity.Response{
  174. // Code: 200,
  175. // Msg: "分页查询成功!",
  176. // Data: resultVos,
  177. // Total: resultPosTotal[0],
  178. // })
  179. //}