questionnaire_template.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. package questionnaire_template
  2. import (
  3. "surveyService/model"
  4. "surveyService/response"
  5. "surveyService/service/questionnaire_subject"
  6. "surveyService/validators"
  7. "github.com/golang-module/carbon"
  8. "gorm.io/gorm"
  9. )
  10. // 创建
  11. func Create(template *validators.QuestionnaireTemplate) *response.ErrCode {
  12. // 检查编号是否存在
  13. if template.SN == "" {
  14. return &response.ErrCode{
  15. Code: response.VALIDATOR_ERROR,
  16. Msg: "编号不能为空",
  17. }
  18. }
  19. // 检查编号是否重复
  20. existsErr := ExistBySn(template.SN, 0)
  21. if existsErr != nil {
  22. return existsErr
  23. }
  24. // 创建
  25. templateModel := model.QuestionnaireTemplate{
  26. SN: template.SN,
  27. Title: template.Title,
  28. }
  29. if err := model.DB.Create(&templateModel).Error; err != nil {
  30. return &response.ErrCode{
  31. Code: response.ERROR,
  32. Msg: "创建失败",
  33. }
  34. }
  35. return nil
  36. }
  37. // 更新
  38. func Update(template *validators.QuestionnaireTemplate) *response.ErrCode {
  39. if template.ID <= 0 {
  40. return &response.ErrCode{
  41. Code: response.VALIDATOR_ERROR,
  42. Msg: "ID不能为空",
  43. }
  44. }
  45. // 检查编号是否重复
  46. existsErr := ExistBySn(template.SN, template.ID)
  47. if existsErr != nil {
  48. return existsErr
  49. }
  50. updateErr := model.DB.Transaction(func(tx *gorm.DB) error {
  51. // 更新
  52. tx.Where("id = ?", template.ID).Select("title").Updates(model.QuestionnaireSubject{
  53. Title: template.Title,
  54. })
  55. return nil
  56. })
  57. if updateErr != nil {
  58. return &response.ErrCode{
  59. Code: response.ERROR,
  60. Msg: updateErr.Error(),
  61. }
  62. }
  63. return nil
  64. }
  65. // 获取单个
  66. func Find(id int64) (*model.QuestionnaireTemplate, *response.ErrCode) {
  67. var template model.QuestionnaireTemplate
  68. model.DB.Where("id = ?", id).First(&template)
  69. if template.ID <= 0 {
  70. return nil, &response.ErrCode{
  71. Code: response.ERROR,
  72. Msg: "没有找到有效的问题模板",
  73. }
  74. }
  75. return &template, nil
  76. }
  77. // 删除
  78. func Delete(id int64) *response.ErrCode {
  79. // 删除问题模板
  80. model.DB.Where("id = ?", id).Delete(&model.QuestionnaireTemplate{})
  81. // 删除问题模板关联的数据
  82. model.DB.Where("template_id = ?", id).Delete(&model.QuestionnaireTemplateSubject{})
  83. return nil
  84. }
  85. // 检查编号是否已存在
  86. func ExistBySn(sn string, subjectId int64) *response.ErrCode {
  87. // 检查编号是否重复
  88. query := model.DB.Where("sn = ?", sn)
  89. if subjectId > 0 {
  90. query = query.Where("id <> ?", subjectId)
  91. }
  92. var total int64
  93. query.Model(&model.QuestionnaireTemplate{}).Count(&total)
  94. if total > 0 {
  95. return &response.ErrCode{
  96. Code: response.ERROR,
  97. Msg: "编号已存在",
  98. }
  99. }
  100. return nil
  101. }
  102. // 获取列表(分页)
  103. func Paginate(page, pageSize int, key string) ([]*model.QuestionnaireTemplate, int64) {
  104. var total int64
  105. var subjects []*model.QuestionnaireTemplate = make([]*model.QuestionnaireTemplate, 0)
  106. query := model.DB.Model(&model.QuestionnaireTemplate{})
  107. if key != "" {
  108. query = query.Where("title like @key or sn like @key", map[string]interface{}{
  109. "key": "%" + key + "%",
  110. })
  111. }
  112. query.Count(&total)
  113. if total > 0 {
  114. query.Scopes(model.Paginate(page, pageSize)).Preload("SubjectRelations.Subject").Preload("SystemTags").Find(&subjects)
  115. }
  116. return subjects, total
  117. }
  118. // 获取所有列表
  119. func List(key string) []*model.QuestionnaireTemplate {
  120. var subjects []*model.QuestionnaireTemplate = make([]*model.QuestionnaireTemplate, 0)
  121. query := model.DB.Model(&model.QuestionnaireTemplate{})
  122. if key != "" {
  123. query = query.Where("title like @key or sn like @key", map[string]interface{}{
  124. "key": "%" + key + "%",
  125. })
  126. }
  127. query.Preload("SubjectRelations.Subject").Preload("SystemTags").Find(&subjects)
  128. return subjects
  129. }
  130. // 修改Peg.js
  131. func UpdatePeg(id int64, peg string) *response.ErrCode {
  132. _, findErr := Find(id)
  133. if findErr != nil {
  134. return findErr
  135. }
  136. // 更新
  137. err := model.DB.Model(model.QuestionnaireTemplate{}).Where("id = ?", id).Update("peg", peg).Error
  138. if err != nil {
  139. return &response.ErrCode{
  140. Code: response.ERROR,
  141. Msg: "更新失败",
  142. }
  143. }
  144. return nil
  145. }
  146. // 格式化
  147. func Format(template *model.QuestionnaireTemplate) *validators.QuestionnaireTemplate {
  148. var subjectTotal int = len(template.SubjectRelations)
  149. var subjectIds []string = make([]string, 0)
  150. var subjects []*validators.QuestionnaireSubject = make([]*validators.QuestionnaireSubject, 0)
  151. for _, subject := range template.SubjectRelations {
  152. subjectIds = append(subjectIds, subject.Subject.SN)
  153. subjects = append(subjects, questionnaire_subject.Format(&subject.Subject))
  154. }
  155. return &validators.QuestionnaireTemplate{
  156. ID: template.ID,
  157. SN: template.SN,
  158. Title: template.Title,
  159. Peg: template.Peg,
  160. SubjectTotal: subjectTotal,
  161. SubjectIds: subjectIds,
  162. Subjects: subjects,
  163. CreatedAt: carbon.Time2Carbon(template.CreatedAt).Format("Y/m/d H:i:s"),
  164. }
  165. }