utils.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package utils
  2. import (
  3. "encoding/json"
  4. "exam_system/result"
  5. "fmt"
  6. "github.com/gin-gonic/gin"
  7. "github.com/jmoiron/sqlx"
  8. "sort"
  9. "strconv"
  10. "strings"
  11. )
  12. const (
  13. StudentPath = "./file/考生信息导出.xlsx"
  14. ScorePath = "./file/成绩导出.xlsx"
  15. SubTemplatePath = "./file/试题模板.zip"
  16. StuTemplatePath = "./file/考生模板.zip"
  17. SingelChoicePath = "./file/单选题.xlsx"
  18. CompletionPath = "./file/填空题.xlsx"
  19. MultipleChoicePath = "./file/多选题.xlsx"
  20. JudgementPath = "./file/判断题.xlsx"
  21. )
  22. // Page 分页解析
  23. func Page(c *gin.Context) (page, size int, sort string, query map[string]interface{}, err error) {
  24. sizeStr := c.Query("size")
  25. pageStr := c.Query("page")
  26. queryStr := c.Query("query")
  27. sort = c.Query("sort")
  28. size, err = strconv.Atoi(sizeStr)
  29. if err != nil {
  30. return
  31. }
  32. page, err = strconv.Atoi(pageStr)
  33. if err != nil {
  34. return
  35. }
  36. query = make(map[string]interface{})
  37. if queryStr != "" {
  38. err = json.Unmarshal([]byte(queryStr), &query)
  39. if err != nil {
  40. return
  41. }
  42. }
  43. return
  44. }
  45. func PostionSize(page, size int) int {
  46. position := (page - 1) * size
  47. return position
  48. }
  49. // Transation 事务
  50. func Transation(tx *sqlx.Tx, err error, fn func(tx *sqlx.Tx) *result.Result) *result.Result {
  51. defer func() {
  52. if p := recover(); p != nil {
  53. tx.Rollback()
  54. panic(p) // re-throw panic after Rollback
  55. } else if err != nil {
  56. fmt.Println("rollback")
  57. tx.Rollback() // err is non-nil; don't change it
  58. } else {
  59. err = tx.Commit() // err is nil; if Commit returns error update err
  60. fmt.Println("commit")
  61. }
  62. }()
  63. return fn(tx)
  64. }
  65. // SubjectFormat A转0
  66. func SubjectFormat(answer string) string {
  67. answer = strings.ToUpper(answer)
  68. answer = strings.Replace(answer, "A", "1", 1)
  69. answer = strings.Replace(answer, "B", "2", 1)
  70. answer = strings.Replace(answer, "C", "3", 1)
  71. answer = strings.Replace(answer, "D", "4", 1)
  72. // 排序
  73. return SubjectSort(answer)
  74. }
  75. func SubjectSort(answer string) string{
  76. slice := strings.Split(answer, "")
  77. sort.Strings(slice)
  78. answer = strings.Join(slice,"")
  79. return answer
  80. }
  81. // SubjectParse 0转A
  82. func SubjectParse(answer string)string{
  83. answer = strings.Replace(answer, "1", "A", 1)
  84. answer = strings.Replace(answer, "2","B" , 1)
  85. answer = strings.Replace(answer, "3", "C", 1)
  86. answer = strings.Replace(answer, "4", "D", 1)
  87. return answer
  88. }