dao-class.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package dao
  2. import (
  3. "database/sql"
  4. "exam_system/config"
  5. "exam_system/entity"
  6. "exam_system/result"
  7. "exam_system/utils"
  8. "exam_system/vo"
  9. "github.com/jmoiron/sqlx"
  10. "time"
  11. )
  12. func AddClass(c *entity.Class) *result.Result {
  13. tx, err := config.DB.Beginx()
  14. if err != nil {
  15. tx.Commit()
  16. return result.UNKNOW_ERROR.SetData(err)
  17. }
  18. return utils.Transation(tx, err, func(tx *sqlx.Tx) *result.Result {
  19. // 判断是否存在term
  20. sqlStr := "select id from term where id = ? and delete_at is null limit 1"
  21. var termId int64
  22. err = tx.Get(&termId, sqlStr, c.TermId)
  23. if err != nil {
  24. if err == sql.ErrNoRows {
  25. return result.DATA_NOT_FOUND
  26. }
  27. return result.UNKNOW_ERROR.SetData(err)
  28. }
  29. // 插入
  30. sqlStr = "insert into class(name,term_id,create_at,update_at) values (?,?,?,?)"
  31. res, err := config.DB.Exec(sqlStr, c.Name, c.TermId, time.Now(), time.Now())
  32. if err != nil {
  33. return result.UNKNOW_ERROR.SetData(err)
  34. }
  35. id, _ := res.LastInsertId()
  36. return result.SuccessResult(id)
  37. })
  38. }
  39. func ClassDetail(id string) *result.Result {
  40. sqlStr := `SELECT
  41. c.id,
  42. c.name,
  43. c.term_id,
  44. c.create_at,
  45. c.update_at,
  46. t.name term_name
  47. FROM
  48. class c,
  49. term t
  50. WHERE
  51. c.id =?
  52. AND c.delete_at IS NULL
  53. AND c.term_id = t.id`
  54. var c vo.ClassVo
  55. err := config.DB.Get(&c, sqlStr, id)
  56. if err != nil {
  57. if err == sql.ErrNoRows {
  58. return result.DATA_NOT_FOUND
  59. }
  60. return result.UNKNOW_ERROR.SetData(err.Error())
  61. }
  62. return result.SuccessResult(&c)
  63. }
  64. func ClassList(page, size int, sort string, query map[string]interface{}) *result.Result {
  65. parm := make([]interface{}, 0)
  66. sqlStr := "select c.* from class c,term t where c.term_id = t.id and c.delete_at is null"
  67. if query["term_id"] != "" {
  68. sqlStr += `and t.id=? `
  69. parm = append(parm, query["term_id"])
  70. }
  71. sqlStr += `order by create_at `
  72. if sort == "desc" {
  73. sqlStr += "desc "
  74. }
  75. sqlStr += "limit ?,?"
  76. parm = append(parm, utils.PostionSize(page, size),size)
  77. var ts []*vo.ClassVo
  78. err := config.DB.Select(&ts, sqlStr, parm...)
  79. if err != nil {
  80. return result.UNKNOW_ERROR.SetMsg(err.Error())
  81. }
  82. // 获取总数
  83. sqlStr = "select count(c.id) from class c "
  84. parm = make([]interface{}, 0)
  85. if query["term_id"] != "" {
  86. sqlStr += `,term t where c.term_id = t.id and t.id=? and c.delete_at is null`
  87. parm = append(parm, query["term_id"])
  88. }
  89. var total int
  90. err = config.DB.Get(&total, sqlStr, parm...)
  91. if err != nil {
  92. return result.UNKNOW_ERROR.SetMsg(err.Error())
  93. }
  94. return result.SUCCESS.SetData(result.NewPage(page,len(ts),total,ts))
  95. }
  96. func UpdateClass(t *entity.Class) *result.Result {
  97. // 判断是否存在term
  98. tx, err := config.DB.Beginx()
  99. if err != nil {
  100. return result.UNKNOW_ERROR.SetData(err)
  101. }
  102. return utils.Transation(tx, err, func(tx *sqlx.Tx) *result.Result {
  103. sqlStr := "select id from term where id = ? and delete_at is null limit 1"
  104. var termId int64
  105. err = tx.Get(&termId, sqlStr, t.TermId)
  106. if err != nil {
  107. if err == sql.ErrNoRows {
  108. return result.DATA_NOT_FOUND
  109. }
  110. return result.UNKNOW_ERROR.SetData(err)
  111. }
  112. sqlStr = `update class set name=?,term_id=?,update_at=? where id=? and delete_at is null `
  113. var res sql.Result
  114. res, err = config.DB.Exec(sqlStr, t.Name, t.TermId, time.Now(), t.Id)
  115. if err != nil {
  116. return result.UNKNOW_ERROR.SetData(err)
  117. }
  118. affected, _ := res.RowsAffected()
  119. return result.SuccessResult(result.NewResultChange(affected))
  120. })
  121. }
  122. func DeleteClasss(ids []string) *result.Result {
  123. sqlStr := "update class c left join user u on c.id = u.class_id set c.delete_at=?,u.delete_at=? where c.id in (?)"
  124. query, param, err := sqlx.In(sqlStr, time.Now(),time.Now(),ids)
  125. if err != nil {
  126. return result.UNKNOW_ERROR.SetMsg(err.Error())
  127. }
  128. res, err := config.DB.Exec(query, param...)
  129. if err != nil {
  130. return result.UNKNOW_ERROR.SetMsg(err.Error())
  131. }
  132. affected, _ := res.RowsAffected()
  133. return result.SUCCESS.SetData(result.NewResultChange(affected))
  134. }