mysql.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package dao
  2. import (
  3. "context"
  4. "database/sql"
  5. "fmt"
  6. "go-common/app/admin/main/answer/model"
  7. "go-common/library/log"
  8. )
  9. const (
  10. _questionTable = "ans_v3_question"
  11. _typeTable = "ans_v3_question_type"
  12. _queHistory = "answer_history_%d"
  13. )
  14. // QueByID by id.
  15. func (d *Dao) QueByID(c context.Context, id int64) (res *model.Question, err error) {
  16. que := &model.QuestionDB{}
  17. if err := d.db.Table(_questionTable).Where("id=?", id).First(que).Error; err != nil {
  18. return nil, err
  19. }
  20. res = &model.Question{QuestionDB: que, Ans: []string{que.Ans1, que.Ans2, que.Ans3, que.Ans4}}
  21. return
  22. }
  23. // ByIDs by id.
  24. func (d *Dao) ByIDs(c context.Context, IDs []int64) (res []*model.QuestionDB, err error) {
  25. if err := d.db.Table(_questionTable).Where("id in (?)", IDs).Find(&res).Error; err != nil {
  26. return nil, err
  27. }
  28. return
  29. }
  30. // IDsByState by id.
  31. func (d *Dao) IDsByState(c context.Context) (res []int64, err error) {
  32. var (
  33. rows *sql.Rows
  34. )
  35. if rows, err = d.db.Table(_questionTable).Select("id").Where("state = ?", 1).Rows(); err != nil {
  36. return nil, err
  37. }
  38. for rows.Next() {
  39. var qid int64
  40. if err = rows.Scan(&qid); err != nil {
  41. return
  42. }
  43. res = append(res, qid)
  44. }
  45. return
  46. }
  47. // QuestionAdd add register question.
  48. func (d *Dao) QuestionAdd(c context.Context, q *model.QuestionDB) (aff int64, err error) {
  49. db := d.db.Save(q)
  50. if err = db.Error; err != nil {
  51. return
  52. }
  53. aff = db.RowsAffected
  54. return
  55. }
  56. // QuestionEdit edit register question.
  57. func (d *Dao) QuestionEdit(c context.Context, arg *model.QuestionDB) (aff int64, err error) {
  58. que := map[string]interface{}{
  59. "question": arg.Question,
  60. "ans1": arg.Ans1,
  61. "ans2": arg.Ans2,
  62. "ans3": arg.Ans3,
  63. "ans4": arg.Ans4,
  64. "operator": arg.Operator,
  65. }
  66. db := d.db.Table(_questionTable).Omit("ctime, operator").Where("id = ?", arg.ID).Updates(que)
  67. if err = db.Error; err != nil {
  68. log.Error("%+v", err)
  69. return
  70. }
  71. aff = db.RowsAffected
  72. return
  73. }
  74. // QuestionList .
  75. func (d *Dao) QuestionList(c context.Context, arg *model.ArgQue) (res []*model.QuestionDB, err error) {
  76. db := d.db.Table(_questionTable)
  77. if arg.TypeID != 0 {
  78. db = db.Where("type_id=?", arg.TypeID)
  79. }
  80. if arg.State != -1 {
  81. db = db.Where("state=?", arg.State)
  82. }
  83. if len(arg.Question) != 0 {
  84. db = db.Where("question LIKE '%%" + arg.Question + "%%'")
  85. }
  86. db = db.Offset((arg.Pn - 1) * arg.Ps).Limit(arg.Ps).Order("id desc")
  87. if err = db.Find(&res).Error; err != nil {
  88. return nil, err
  89. }
  90. return
  91. }
  92. // QuestionCount question page total count.
  93. func (d *Dao) QuestionCount(c context.Context, arg *model.ArgQue) (res int64, err error) {
  94. db := d.db.Table(_questionTable)
  95. if arg.TypeID != 0 {
  96. db = db.Where("type_id=?", arg.TypeID)
  97. }
  98. if arg.State != -1 {
  99. db = db.Where("state=?", arg.State)
  100. }
  101. if len(arg.Question) != 0 {
  102. db = db.Where("question LIKE '%%" + arg.Question + "%%'")
  103. }
  104. if err = db.Count(&res).Error; err != nil {
  105. return 0, err
  106. }
  107. return
  108. }
  109. // UpdateStatus update question state.
  110. func (d *Dao) UpdateStatus(c context.Context, state int8, qid int64, operator string) (aff int64, err error) {
  111. val := map[string]interface{}{
  112. "state": state,
  113. "operator": operator,
  114. }
  115. db := d.db.Table(_questionTable).Where("id=?", qid).Updates(val)
  116. if err = db.Error; err != nil {
  117. return
  118. }
  119. aff = db.RowsAffected
  120. return
  121. }
  122. // Types get all types.
  123. func (d *Dao) Types(c context.Context) (res []*model.TypeInfo, err error) {
  124. db := d.db.Table(_typeTable)
  125. if err = db.Where("parentid != 0").Find(&res).Error; err != nil {
  126. return nil, err
  127. }
  128. return
  129. }
  130. // TypeSave add register question type.
  131. func (d *Dao) TypeSave(c context.Context, t *model.TypeInfo) (aff int64, err error) {
  132. db := d.db.Save(t)
  133. if err = db.Error; err != nil {
  134. return
  135. }
  136. aff = db.RowsAffected
  137. return
  138. }
  139. // BaseQS .
  140. func (d *Dao) BaseQS(c context.Context) (res []*model.QuestionDB, err error) {
  141. db := d.db.Table("ans_register_question")
  142. db = db.Where("type_id=6 AND state=1")
  143. if err = db.Omit("id").Find(&res).Error; err != nil {
  144. return nil, err
  145. }
  146. return
  147. }
  148. // AllQS .
  149. func (d *Dao) AllQS(c context.Context) (res []*model.QuestionDB, err error) {
  150. db := d.db.Table("ans_v3_question")
  151. if err = db.Find(&res).Error; err != nil {
  152. return nil, err
  153. }
  154. return
  155. }
  156. // InsBaseQs .
  157. func (d *Dao) InsBaseQs(c context.Context, qs *model.QuestionDB) (lastID int64, err error) {
  158. db := d.db.Table(_questionTable)
  159. qs.TypeID = 36
  160. qs.State = 1
  161. db = db.Create(qs)
  162. if err = db.Error; err != nil {
  163. return
  164. }
  165. lastID = qs.ID
  166. return
  167. }
  168. // QueHistory .
  169. func (d *Dao) QueHistory(c context.Context, arg *model.ArgHistory) (res []*model.AnswerHistoryDB, err error) {
  170. db := d.db.Table(fmt.Sprintf(_queHistory, arg.Mid%10))
  171. db = db.Where("mid = ?", arg.Mid).Offset((arg.Pn - 1) * arg.Ps).Limit(arg.Ps).Order("id desc")
  172. if err = db.Find(&res).Error; err != nil {
  173. return nil, err
  174. }
  175. return
  176. }
  177. // HistoryCount .
  178. func (d *Dao) HistoryCount(c context.Context, arg *model.ArgHistory) (res int64, err error) {
  179. db := d.db.Table(fmt.Sprintf(_queHistory, arg.Mid%10))
  180. if err = db.Where("mid = ?", arg.Mid).Count(&res).Error; err != nil {
  181. return 0, err
  182. }
  183. return
  184. }