questionnaire.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. package cygx
  2. import (
  3. "encoding/json"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "hongze/hz_crm_api/controllers"
  6. "hongze/hz_crm_api/models"
  7. "hongze/hz_crm_api/models/cygx"
  8. "hongze/hz_crm_api/utils"
  9. "time"
  10. )
  11. // 问卷调查
  12. type QuestionnaireController struct {
  13. controllers.BaseAuthController
  14. }
  15. // @Title 新增、修改问卷内容
  16. // @Description 新增、修改问卷内容接口
  17. // @Param request body cygx.AddCygxQuestionnaireReq true "type json string"
  18. // @Success 200 {object} "保存成功"
  19. // @router /questionnaire/preserveAndEdit [post]
  20. func (this *QuestionnaireController) PreserveAndPublish() {
  21. br := new(models.BaseResponse).Init()
  22. defer func() {
  23. this.Data["json"] = br
  24. this.ServeJSON()
  25. }()
  26. sysUser := this.SysUser
  27. if sysUser == nil {
  28. br.Msg = "请登录"
  29. br.ErrMsg = "请登录,SysUser Is Empty"
  30. br.Ret = 408
  31. return
  32. }
  33. var req cygx.AddCygxQuestionnaireReq
  34. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  35. if err != nil {
  36. br.Msg = "参数解析异常!"
  37. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  38. return
  39. }
  40. endTime := utils.StrDateToDate(req.EndTime) //时间字符串格式转时间格式
  41. questionnaireId := req.QuestionnaireId
  42. activityTypeId := req.ActivityTypeId
  43. content := req.Content
  44. maxChooseTotal := req.MaxChooseTotal
  45. listTheme := req.ListTheme
  46. activityTypeInfo, errType := cygx.GetActivityTypeDetailById(activityTypeId)
  47. if errType != nil {
  48. br.Msg = "请选择活动类型"
  49. br.ErrMsg = "获取活动类型信息失败,Err:" + errType.Error()
  50. return
  51. }
  52. item := new(cygx.CygxQuestionnaire)
  53. item.QuestionnaireId = req.QuestionnaireId
  54. item.ActivityTypeId = activityTypeId
  55. item.ActivityTypeName = activityTypeInfo.ActivityTypeName
  56. item.Content = content
  57. item.EndTime = endTime
  58. item.PublishTime = time.Now()
  59. item.CreateTime = time.Now()
  60. item.ModifyTime = time.Now()
  61. item.AdminId = sysUser.AdminId
  62. item.MaxChooseTotal = maxChooseTotal
  63. if questionnaireId == 0 {
  64. err = cygx.AddCygxQuestionnaire(item, listTheme)
  65. } else {
  66. err = cygx.EditCygxQuestionnaire(item, listTheme)
  67. }
  68. if err != nil {
  69. br.Msg = "保存失败"
  70. br.ErrMsg = "保存失败,Err:" + err.Error()
  71. return
  72. }
  73. br.Ret = 200
  74. br.Success = true
  75. br.IsAddLog = true
  76. br.Msg = "操作成功"
  77. }
  78. // @Title 列表
  79. // @Description 列表接口
  80. // @Param PageSize query int true "每页数据条数"
  81. // @Param CurrentIndex query int true "当前页页码,从1开始"
  82. // @Success Ret=200 {object} cygx.GetCygxQuestionnaireResp
  83. // @router /questionnaire/list [get]
  84. func (this *QuestionnaireController) List() {
  85. br := new(models.BaseResponse).Init()
  86. defer func() {
  87. this.Data["json"] = br
  88. this.ServeJSON()
  89. }()
  90. sysUser := this.SysUser
  91. if sysUser == nil {
  92. br.Msg = "请登录"
  93. br.ErrMsg = "请登录,SysUser Is Empty"
  94. br.Ret = 408
  95. return
  96. }
  97. resp := new(cygx.GetCygxQuestionnaireResp)
  98. pageSize, _ := this.GetInt("PageSize")
  99. currentIndex, _ := this.GetInt("CurrentIndex")
  100. var startSize int
  101. if pageSize <= 0 {
  102. pageSize = utils.PageSize20
  103. }
  104. if currentIndex <= 0 {
  105. currentIndex = 1
  106. }
  107. startSize = utils.StartIndex(currentIndex, pageSize)
  108. var condition string
  109. var pars []interface{}
  110. total, err := cygx.GetCygxQuestionnaireCount(condition, pars)
  111. if err != nil {
  112. br.Msg = "获取失败"
  113. br.ErrMsg = "获取失败,Err:" + err.Error()
  114. return
  115. }
  116. condition += " ORDER BY art.publish_time DESC "
  117. list, err := cygx.GetCygxQuestionnaireList(condition, pars, startSize, pageSize)
  118. if err != nil {
  119. br.Msg = "获取失败"
  120. br.ErrMsg = "获取失败,Err:" + err.Error()
  121. return
  122. }
  123. for _, v := range list {
  124. endTime := utils.StrTimeToTime(v.EndTime + " 23:59:59") //时间字符串格式转时间格式
  125. if endTime.Before(time.Now()) {
  126. v.State = "已截止"
  127. } else {
  128. v.State = "发布中"
  129. }
  130. }
  131. page := paging.GetPaging(currentIndex, pageSize, total)
  132. resp.List = list
  133. resp.Paging = page
  134. br.Ret = 200
  135. br.Success = true
  136. br.Msg = "获取成功"
  137. br.Data = resp
  138. }
  139. // @Title 详情
  140. // @Description 详情接口
  141. // @Param QuestionnaireId query int true "问卷ID"
  142. // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp
  143. // @router /questionnaire/detail [get]
  144. func (this *QuestionnaireController) Detail() {
  145. br := new(models.BaseResponse).Init()
  146. defer func() {
  147. this.Data["json"] = br
  148. this.ServeJSON()
  149. }()
  150. sysUser := this.SysUser
  151. if sysUser == nil {
  152. br.Msg = "请登录"
  153. br.ErrMsg = "请登录,SysUser Is Empty"
  154. br.Ret = 408
  155. return
  156. }
  157. resp := new(cygx.GetCygxQuestionnaireDetailResp)
  158. questionnaireId, _ := this.GetInt("QuestionnaireId")
  159. detail, err := cygx.GetCygxQuestionnaireDetail(questionnaireId)
  160. if err != nil {
  161. br.Msg = "详情不存在"
  162. br.ErrMsg = "获取失败,GetCygxQuestionnaireDetail Err:" + err.Error()
  163. return
  164. }
  165. ListTheme, err := cygx.GetCygxQuestionnaireThemeListByQuestionnaireId(questionnaireId)
  166. if err != nil {
  167. br.Msg = "详情不存在"
  168. br.ErrMsg = "获取失败,GetCygxQuestionnaireThemeListByQuestionnaireId Err:" + err.Error()
  169. return
  170. }
  171. detail.ListTheme = ListTheme
  172. resp.Detail = detail
  173. br.Ret = 200
  174. br.Success = true
  175. br.Msg = "获取成功"
  176. br.Data = resp
  177. }
  178. // @Title 投票结果
  179. // @Description 投票结果接口
  180. // @Param QuestionnaireId query int true "问卷ID"
  181. // @Success Ret=200 {object} cygx.CygxQuestionnaireVoteListResp
  182. // @router /questionnaire/vote_detail [get]
  183. func (this *QuestionnaireController) VoteDetail() {
  184. br := new(models.BaseResponse).Init()
  185. defer func() {
  186. this.Data["json"] = br
  187. this.ServeJSON()
  188. }()
  189. sysUser := this.SysUser
  190. if sysUser == nil {
  191. br.Msg = "请登录"
  192. br.ErrMsg = "请登录,SysUser Is Empty"
  193. br.Ret = 408
  194. return
  195. }
  196. resp := new(cygx.CygxQuestionnaireVoteListResp)
  197. questionnaireId, _ := this.GetInt("QuestionnaireId")
  198. listTheme, err := cygx.GetCygxQuestionnaireThemeListByQuestionnaireId(questionnaireId)
  199. if err != nil {
  200. br.Msg = "详情不存在"
  201. br.ErrMsg = "获取失败,GetCygxQuestionnaireThemeListByQuestionnaireId Err:" + err.Error()
  202. return
  203. }
  204. listVote, err := cygx.GetCygxCygxQuestionnaireVoteListByQuestionnaireId(questionnaireId)
  205. if err != nil {
  206. br.Msg = "详情不存在"
  207. br.ErrMsg = "获取失败,GetCygxCygxQuestionnaireVoteListByQuestionnaireId Err:" + err.Error()
  208. return
  209. }
  210. //计算每个主题的投票数量
  211. mapVoteTotal := make(map[int]int)
  212. for _, v := range listVote {
  213. mapVoteTotal[v.QuestionnaireThemeId] += 1
  214. }
  215. for _, v := range listTheme {
  216. item := new(cygx.AddCygxQuestionnaireThemeReq)
  217. item.QuestionnaireThemeId = v.QuestionnaireThemeId
  218. item.ActivityTheme = v.ActivityTheme
  219. item.VoteTotal = mapVoteTotal[v.QuestionnaireThemeId]
  220. resp.List = append(resp.List, item)
  221. }
  222. if len(resp.List) == 0 {
  223. resp.List = make([]*cygx.AddCygxQuestionnaireThemeReq, 0)
  224. }
  225. br.Ret = 200
  226. br.Success = true
  227. br.Msg = "获取成功"
  228. br.Data = resp
  229. }
  230. // @Title 票数明细
  231. // @Description 票数明细接口
  232. // @Param QuestionnaireThemeId query int true "主题问卷ID"
  233. // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp
  234. // @router /questionnaire/vote_list [get]
  235. func (this *QuestionnaireController) VoteList() {
  236. br := new(models.BaseResponse).Init()
  237. defer func() {
  238. this.Data["json"] = br
  239. this.ServeJSON()
  240. }()
  241. sysUser := this.SysUser
  242. if sysUser == nil {
  243. br.Msg = "请登录"
  244. br.ErrMsg = "请登录,SysUser Is Empty"
  245. br.Ret = 408
  246. return
  247. }
  248. resp := new(cygx.CygxCygxQuestionnaireVoteListResp)
  249. questionnaireThemeId, _ := this.GetInt("QuestionnaireThemeId")
  250. listVote, err := cygx.GetCygxQuestionnaireVoteListByQuestionnaireThemeId(questionnaireThemeId)
  251. if err != nil {
  252. br.Msg = "详情不存在"
  253. br.ErrMsg = "获取失败,GetCygxQuestionnaireVoteListByQuestionnaireThemeId Err:" + err.Error()
  254. return
  255. }
  256. resp.List = listVote
  257. if len(resp.List) == 0 {
  258. resp.List = make([]*cygx.CygxQuestionnaireVoteResp, 0)
  259. }
  260. br.Ret = 200
  261. br.Success = true
  262. br.Msg = "获取成功"
  263. br.Data = resp
  264. }
  265. // @Title 其余主题投票结果
  266. // @Description 其余主题投票结果接口
  267. // @Param QuestionnaireId query int true "问卷ID"
  268. // @Success Ret=200 {object} cygx.CygxQuestionnaireVoteListResp
  269. // @router /questionnaire/vote_other [get]
  270. func (this *QuestionnaireController) VoteOther() {
  271. br := new(models.BaseResponse).Init()
  272. defer func() {
  273. this.Data["json"] = br
  274. this.ServeJSON()
  275. }()
  276. sysUser := this.SysUser
  277. if sysUser == nil {
  278. br.Msg = "请登录"
  279. br.ErrMsg = "请登录,SysUser Is Empty"
  280. br.Ret = 408
  281. return
  282. }
  283. resp := new(cygx.CygxQuestionnaireVoteOtherThemeListResp)
  284. questionnaireId, _ := this.GetInt("QuestionnaireId")
  285. listOther, err := cygx.GetCygxQuestionnaireVoteOtherThemeListByQuestionnaireId(questionnaireId)
  286. if err != nil {
  287. br.Msg = "详情不存在"
  288. br.ErrMsg = "获取失败,GetCygxCygxQuestionnaireVoteListByQuestionnaireId Err:" + err.Error()
  289. return
  290. }
  291. resp.List = listOther
  292. if len(resp.List) == 0 {
  293. resp.List = make([]*cygx.CygxQuestionnaireVoteOtherThemeResp, 0)
  294. }
  295. br.Ret = 200
  296. br.Success = true
  297. br.Msg = "获取成功"
  298. br.Data = resp
  299. }