survey.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. package survey
  2. import (
  3. "surveyService/model"
  4. "surveyService/response"
  5. "surveyService/validators"
  6. "github.com/golang-module/carbon"
  7. )
  8. // 创建或修改问卷
  9. func UpdateOrCreate(surveyForm *validators.Survey) *response.ErrCode {
  10. if surveyForm.ID == "" {
  11. return Create(surveyForm)
  12. } else {
  13. return Update(surveyForm)
  14. }
  15. }
  16. // 创建问卷
  17. func Create(surveyForm *validators.Survey) *response.ErrCode {
  18. // // 如果是定制体检,要禁止他创建多个
  19. // if surveyForm.Type == model.SURVEY_TYPE_PHYSICAL {
  20. // // 检查是否有定制体检
  21. // var physicalSurveyTotal int64
  22. // model.DB.Model(&model.Survey{}).Where("type = ?", model.SURVEY_TYPE_PHYSICAL).Count(&physicalSurveyTotal)
  23. // if physicalSurveyTotal > 0 {
  24. // return &response.ErrCode{
  25. // Code: response.ERROR,
  26. // Msg: "当前已设置有定制体检,请先修改原问卷的类型后再添加",
  27. // }
  28. // }
  29. // }
  30. surveyModel := &model.Survey{
  31. Name: surveyForm.Name,
  32. Cover: surveyForm.Cover,
  33. SurveyCode: surveyForm.SurveyCode,
  34. Type: surveyForm.Type,
  35. Status: model.SURVEY_STATUS_ENABLE,
  36. }
  37. err := model.DB.Create(surveyModel).Error
  38. if err != nil {
  39. return &response.ErrCode{
  40. Code: response.ERROR,
  41. Msg: "创建问卷失败",
  42. }
  43. }
  44. return nil
  45. }
  46. // 修改问卷
  47. func Update(surveyForm *validators.Survey) *response.ErrCode {
  48. if surveyForm.ID == "" {
  49. return &response.ErrCode{
  50. Code: response.ERROR,
  51. Msg: "问卷编号不能为空",
  52. }
  53. }
  54. // 获取问卷信息
  55. surveyModel, errCode := FindBySn(surveyForm.ID)
  56. if errCode != nil {
  57. return errCode
  58. }
  59. // 如果没有SurveyCode,表示是默认值,不允许修改类型、模型编号
  60. if surveyModel.SurveyCode == "" {
  61. if surveyForm.Type != surveyModel.Type {
  62. return &response.ErrCode{
  63. Code: response.ERROR,
  64. Msg: "问卷类型不允许修改",
  65. }
  66. }
  67. if surveyForm.SurveyCode != "" {
  68. return &response.ErrCode{
  69. Code: response.ERROR,
  70. Msg: "问卷模型编号不允许修改",
  71. }
  72. }
  73. }
  74. // // 如果是定制体检,要禁止他创建多个
  75. // if surveyForm.Type == model.SURVEY_TYPE_PHYSICAL {
  76. // // 检查是否有定制体检
  77. // var physicalSurveyTotal int64
  78. // model.DB.Model(&model.Survey{}).Where("type = ? and sn != ?", model.SURVEY_TYPE_PHYSICAL, surveyForm.ID).Count(&physicalSurveyTotal)
  79. // if physicalSurveyTotal > 0 {
  80. // return &response.ErrCode{
  81. // Code: response.ERROR,
  82. // Msg: "当前已设置有定制体检,请先修改原问卷的类型后再添加",
  83. // }
  84. // }
  85. // }
  86. err := model.DB.Model(model.Survey{}).Where("id = ?", surveyModel.ID).Select("name", "cover", "survey_code", "type").Updates(map[string]any{
  87. "name": surveyForm.Name,
  88. "cover": surveyForm.Cover,
  89. "survey_code": surveyForm.SurveyCode,
  90. "type": surveyForm.Type,
  91. }).Error
  92. if err != nil {
  93. return &response.ErrCode{
  94. Code: response.ERROR,
  95. Msg: "修改问卷失败",
  96. }
  97. }
  98. return nil
  99. }
  100. // 获取问卷信息
  101. func Find(id int64) (*model.Survey, *response.ErrCode) {
  102. var surveyModel model.Survey
  103. err := model.DB.Where("id = ?", id).First(&surveyModel).Error
  104. if err != nil {
  105. return nil, &response.ErrCode{
  106. Code: response.ERROR,
  107. Msg: "获取问卷信息失败",
  108. }
  109. }
  110. return &surveyModel, nil
  111. }
  112. // 通过编号获取问卷信息
  113. func FindBySn(sn string) (*model.Survey, *response.ErrCode) {
  114. var surveyModel model.Survey
  115. err := model.DB.Where("sn = ?", sn).First(&surveyModel).Error
  116. if err != nil {
  117. return nil, &response.ErrCode{
  118. Code: response.ERROR,
  119. Msg: "获取问卷信息失败",
  120. }
  121. }
  122. return &surveyModel, nil
  123. }
  124. // 修改备注
  125. func UpdateRemark(sn string, remark string) *response.ErrCode {
  126. // 检查是否存在
  127. _, errCode := FindBySn(sn)
  128. if errCode != nil {
  129. return errCode
  130. }
  131. err := model.DB.Model(&model.Survey{}).Where("sn = ?", sn).Update("remark", remark).Error
  132. if err != nil {
  133. return &response.ErrCode{
  134. Code: response.ERROR,
  135. Msg: "修改备注失败",
  136. }
  137. }
  138. return nil
  139. }
  140. // 修改状态
  141. func UpdateStatus(sn string, status int) *response.ErrCode {
  142. if status != model.SURVEY_STATUS_ENABLE && status != model.SURVEY_STATUS_DISABLE {
  143. return &response.ErrCode{
  144. Code: response.ERROR,
  145. Msg: "状态不在许可范围内",
  146. }
  147. }
  148. // 检查是否存在
  149. _, errCode := FindBySn(sn)
  150. if errCode != nil {
  151. return errCode
  152. }
  153. err := model.DB.Model(&model.Survey{}).Where("sn = ?", sn).Update("status", status).Error
  154. if err != nil {
  155. return &response.ErrCode{
  156. Code: response.ERROR,
  157. Msg: "修改状态失败",
  158. }
  159. }
  160. return nil
  161. }
  162. // 获取列表
  163. func List(key string, surveyCode string, status int) []*model.Survey {
  164. var surveyModels []*model.Survey
  165. query := model.DB.Model(&model.Survey{})
  166. if key != "" {
  167. query = query.Where("name like @key or remark like @key", map[string]any{
  168. "key": "%" + key + "%",
  169. })
  170. }
  171. if surveyCode != "" {
  172. query = query.Where("survey_code = ?", surveyCode)
  173. }
  174. if status != 0 {
  175. query = query.Where("status = ?", status)
  176. }
  177. query.Order("id desc").Find(&surveyModels)
  178. return surveyModels
  179. }
  180. // 分页获取列表
  181. func Paginate(page, pageSize int, key string, surveyCode string, status int) ([]*model.Survey, int64) {
  182. var surveyModels []*model.Survey
  183. var total int64
  184. query := model.DB.Model(&model.Survey{})
  185. if key != "" {
  186. query = query.Where("name like @key or remark like @key", map[string]any{
  187. "key": "%" + key + "%",
  188. })
  189. }
  190. if surveyCode != "" {
  191. query = query.Where("survey_code = ?", surveyCode)
  192. }
  193. if status != 0 {
  194. query = query.Where("status = ?", status)
  195. }
  196. query.Count(&total)
  197. query.Scopes(model.Paginate(page, pageSize)).Order("id desc").Find(&surveyModels)
  198. return surveyModels, total
  199. }
  200. // 格式化
  201. func Format(surveyModel *model.Survey) *validators.Survey {
  202. return &validators.Survey{
  203. ID: surveyModel.SN,
  204. Name: surveyModel.Name,
  205. Cover: surveyModel.Cover,
  206. SurveyCode: surveyModel.SurveyCode,
  207. Status: surveyModel.Status,
  208. Remark: surveyModel.Remark,
  209. Type: surveyModel.Type,
  210. CreatedAt: carbon.Time2Carbon(surveyModel.CreatedAt).Format("Y/m/d H:i:s"),
  211. UpdatedAt: carbon.Time2Carbon(surveyModel.UpdatedAt).Format("Y/m/d H:i:s"),
  212. }
  213. }