package cygx import ( "encoding/json" "github.com/rdlucklib/rdluck_tools/paging" "hongze/hz_crm_api/controllers" "hongze/hz_crm_api/models" "hongze/hz_crm_api/models/cygx" cygxService "hongze/hz_crm_api/services/cygx" "hongze/hz_crm_api/utils" "time" ) // 问卷调查 type QuestionnaireController struct { controllers.BaseAuthController } // @Title 新增、修改问卷内容 // @Description 新增、修改问卷内容接口 // @Param request body cygx.AddCygxQuestionnaireReq true "type json string" // @Success 200 {object} "保存成功" // @router /questionnaire/preserveAndEdit [post] func (this *QuestionnaireController) PreserveAndPublish() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req cygx.AddCygxQuestionnaireReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } endTime := utils.StrDateToDate(req.EndTime) //时间字符串格式转时间格式 questionnaireId := req.QuestionnaireId activityTypeId := req.ActivityTypeId content := req.Content maxChooseTotal := req.MaxChooseTotal listTheme := req.ListTheme activityTypeInfo, errType := cygx.GetActivityTypeDetailById(activityTypeId) if errType != nil { br.Msg = "请选择活动类型" br.ErrMsg = "获取活动类型信息失败,Err:" + errType.Error() return } item := new(cygx.CygxQuestionnaire) item.QuestionnaireId = req.QuestionnaireId item.ActivityTypeId = activityTypeId item.ActivityTypeName = activityTypeInfo.ActivityTypeName item.Content = content item.EndTime = endTime item.PublishTime = time.Now() item.CreateTime = time.Now() item.ModifyTime = time.Now() item.AdminId = sysUser.AdminId item.MaxChooseTotal = maxChooseTotal if questionnaireId == 0 { newId, err := cygx.AddCygxQuestionnaire(item, listTheme) if err != nil { br.Msg = "保存失败" br.ErrMsg = "保存失败,Err:" + err.Error() return } //投票发布时,给所有开通买方研选正式试用的客户,推送模板消息 go cygxService.SendWxMsgCygxQuestionnaire(int(newId)) } else { err = cygx.EditCygxQuestionnaire(item, listTheme) if err != nil { br.Msg = "保存失败" br.ErrMsg = "保存失败,Err:" + err.Error() return } } br.Ret = 200 br.Success = true br.IsAddLog = true br.Msg = "操作成功" } // @Title 列表 // @Description 列表接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Success Ret=200 {object} cygx.GetCygxQuestionnaireResp // @router /questionnaire/list [get] func (this *QuestionnaireController) List() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } resp := new(cygx.GetCygxQuestionnaireResp) pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = utils.StartIndex(currentIndex, pageSize) var condition string var pars []interface{} total, err := cygx.GetCygxQuestionnaireCount(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } condition += " ORDER BY art.publish_time DESC " list, err := cygx.GetCygxQuestionnaireList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } for _, v := range list { endTime := utils.StrTimeToTime(v.EndTime + " 23:59:59") //时间字符串格式转时间格式 if endTime.Before(time.Now()) { v.State = "已截止" } else { v.State = "发布中" } } page := paging.GetPaging(currentIndex, pageSize, total) resp.List = list resp.Paging = page br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 详情 // @Description 详情接口 // @Param QuestionnaireId query int true "问卷ID" // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp // @router /questionnaire/detail [get] func (this *QuestionnaireController) Detail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } resp := new(cygx.GetCygxQuestionnaireDetailResp) questionnaireId, _ := this.GetInt("QuestionnaireId") detail, err := cygx.GetCygxQuestionnaireDetail(questionnaireId) if err != nil { br.Msg = "详情不存在" br.ErrMsg = "获取失败,GetCygxQuestionnaireDetail Err:" + err.Error() return } ListTheme, err := cygx.GetCygxQuestionnaireThemeListByQuestionnaireId(questionnaireId) if err != nil { br.Msg = "详情不存在" br.ErrMsg = "获取失败,GetCygxQuestionnaireThemeListByQuestionnaireId Err:" + err.Error() return } detail.ListTheme = ListTheme resp.Detail = detail br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 投票结果 // @Description 投票结果接口 // @Param QuestionnaireId query int true "问卷ID" // @Success Ret=200 {object} cygx.CygxQuestionnaireVoteListResp // @router /questionnaire/vote_detail [get] func (this *QuestionnaireController) VoteDetail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } resp := new(cygx.CygxQuestionnaireVoteListResp) questionnaireId, _ := this.GetInt("QuestionnaireId") listTheme, err := cygx.GetCygxQuestionnaireThemeListByQuestionnaireId(questionnaireId) if err != nil { br.Msg = "详情不存在" br.ErrMsg = "获取失败,GetCygxQuestionnaireThemeListByQuestionnaireId Err:" + err.Error() return } listVote, err := cygx.GetCygxCygxQuestionnaireVoteListByQuestionnaireId(questionnaireId) if err != nil { br.Msg = "详情不存在" br.ErrMsg = "获取失败,GetCygxCygxQuestionnaireVoteListByQuestionnaireId Err:" + err.Error() return } //计算每个主题的投票数量 mapVoteTotal := make(map[int]int) for _, v := range listVote { mapVoteTotal[v.QuestionnaireThemeId] += 1 } for _, v := range listTheme { item := new(cygx.AddCygxQuestionnaireThemeReq) item.QuestionnaireThemeId = v.QuestionnaireThemeId item.ActivityTheme = v.ActivityTheme item.VoteTotal = mapVoteTotal[v.QuestionnaireThemeId] resp.List = append(resp.List, item) } if len(resp.List) == 0 { resp.List = make([]*cygx.AddCygxQuestionnaireThemeReq, 0) } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 票数明细 // @Description 票数明细接口 // @Param QuestionnaireThemeId query int true "主题问卷ID" // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp // @router /questionnaire/vote_list [get] func (this *QuestionnaireController) VoteList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } resp := new(cygx.CygxCygxQuestionnaireVoteListResp) questionnaireThemeId, _ := this.GetInt("QuestionnaireThemeId") listVote, err := cygx.GetCygxQuestionnaireVoteListByQuestionnaireThemeId(questionnaireThemeId) if err != nil { br.Msg = "详情不存在" br.ErrMsg = "获取失败,GetCygxQuestionnaireVoteListByQuestionnaireThemeId Err:" + err.Error() return } resp.List = listVote if len(resp.List) == 0 { resp.List = make([]*cygx.CygxQuestionnaireVoteResp, 0) } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 其余主题投票结果 // @Description 其余主题投票结果接口 // @Param QuestionnaireId query int true "问卷ID" // @Success Ret=200 {object} cygx.CygxQuestionnaireVoteListResp // @router /questionnaire/vote_other [get] func (this *QuestionnaireController) VoteOther() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } resp := new(cygx.CygxQuestionnaireVoteOtherThemeListResp) questionnaireId, _ := this.GetInt("QuestionnaireId") listOther, err := cygx.GetCygxQuestionnaireVoteOtherThemeListByQuestionnaireId(questionnaireId) if err != nil { br.Msg = "详情不存在" br.ErrMsg = "获取失败,GetCygxCygxQuestionnaireVoteListByQuestionnaireId Err:" + err.Error() return } resp.List = listOther if len(resp.List) == 0 { resp.List = make([]*cygx.CygxQuestionnaireVoteOtherThemeResp, 0) } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp }