questionnaire.go 9.1 KB

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