123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- package roadshow
- import (
- "encoding/json"
- "fmt"
- "github.com/rdlucklib/rdluck_tools/paging"
- "github.com/tealeg/xlsx"
- "hongze/hz_crm_api/models"
- "hongze/hz_crm_api/models/roadshow"
- "hongze/hz_crm_api/utils"
- "os"
- "path/filepath"
- "strconv"
- "strings"
- "time"
- )
- // @Title 路演客户问答保存接口
- // @Description 路演客户问答保存接口
- // @Param request body roadshow.RoadShowQuestionSaveReq true "type json string"
- // @Success Ret=200 保存成功
- // @router /question/save [post]
- func (this *CalendarController) QuestionAdd() {
- 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
- }
- deleteCache := true
- cacheKey := "CACHE_RS_ACTIVITY_QUESTION_SAVE_" + strconv.Itoa(sysUser.AdminId)
- defer func() {
- if deleteCache {
- utils.Rc.Delete(cacheKey)
- }
- }()
- if !utils.Rc.SetNX(cacheKey, 1, 5*time.Second) {
- deleteCache = false
- br.Msg = "系统处理中,请稍后重试!"
- br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
- return
- }
- var req roadshow.RoadShowQuestionSaveReq
- err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
- if err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- if req.RsCalendarId <= 0 || req.RsCalendarResearcherId <= 0 {
- br.Msg = "参数错误!"
- return
- }
- calendarResearcherItem, err := roadshow.GetRsCalendarResearcherById(req.RsCalendarResearcherId)
- if err != nil {
- br.Msg = "获取路演记录失败!"
- br.ErrMsg = "获取路演记录失败,Err:" + err.Error()
- return
- }
- if calendarResearcherItem.QuestionStatus == 1 {
- br.Msg = "问答已填写,不可重复提交!"
- return
- }
- err = roadshow.RoadShowQuestionSave(&req)
- if err != nil {
- br.Msg = "保存失败!"
- br.ErrMsg = "保存失败,Err:" + err.Error()
- return
- }
- br.Ret = 200
- br.Success = true
- br.Msg = "保存成功"
- br.IsAddLog = true
- }
- // ResearcherList
- // @Title 获取路演客户问答信息接口
- // @Description 获取路演客户问答信息接口
- // @Param RsCalendarId query int true "路演日历ID"
- // @Param RsCalendarResearcherId query int true "路演研究员记录ID"
- // @Success 200 {object} roadshow.ResearcherGroup
- // @router /question/list [get]
- func (this *CalendarController) QuestionList() {
- br := new(models.BaseResponse).Init()
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- rsCalendarId, _ := this.GetInt("RsCalendarId")
- rsCalendarResearcherId, _ := this.GetInt("RsCalendarResearcherId")
- if rsCalendarResearcherId <= 0 && rsCalendarId <= 0 {
- br.Msg = "参数错误!"
- return
- }
- var condition string
- var pars []interface{}
- if rsCalendarId > 0 {
- condition += ` AND a.rs_calendar_id = ? `
- pars = append(pars, rsCalendarId)
- }
- if rsCalendarResearcherId > 0 {
- condition += ` AND a.rs_calendar_researcher_id = ? `
- pars = append(pars, rsCalendarResearcherId)
- }
- list, err := roadshow.GetRoadShowQuestionList(condition, pars)
- if err != nil && err.Error() != utils.ErrNoRow() {
- br.Msg = "获取失败!"
- br.ErrMsg = "获取失败,Err:" + err.Error()
- return
- }
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- br.Data = list
- }
- // @Title 获取客户路演问题汇总
- // @Description 获取客户路演问题汇总
- // @Param PageSize query int true "每页数据条数"
- // @Param CurrentIndex query int true "当前页页码,从1开始"
- // @Param StartDate query string true "开始日期"
- // @Param EndDate query string true "结束日期"
- // @Param ResearcherId query string true "研究员id"
- // @Param CompanyId query int true "客户ID"
- // @Param CompanyIndustry query string false "客户行业"
- // @Param CompanyClassify query string false "客户分类"
- // @Param Keyword query string false "关键词: 客户名称/社会信用码"
- // @Success 200 {object} roadshow.QuestionSummaryListResp
- // @router /question/summary/list [get]
- func (this *CalendarController) CalendarSummaryList() {
- 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
- }
- pageSize, _ := this.GetInt("PageSize")
- currentIndex, _ := this.GetInt("CurrentIndex")
- startDate := this.GetString("StartDate")
- endDate := this.GetString("EndDate")
- researcherId := this.GetString("ResearcherId")
- companyIndustry := this.GetString("CompanyIndustry")
- companyClassify := this.GetString("CompanyClassify")
- keyword := this.GetString("Keyword")
- var total int
- page := paging.GetPaging(currentIndex, pageSize, total)
- var startSize int
- if pageSize <= 0 {
- pageSize = utils.PageSize10
- }
- if currentIndex <= 0 {
- currentIndex = 1
- }
- startSize = paging.StartIndex(currentIndex, pageSize)
- var condition string
- var pars []interface{}
- condition += ` AND b.question_status = 1 `
- if startDate != "" {
- condition += ` AND b.start_date >= ?`
- pars = append(pars, startDate)
- }
- if endDate != "" {
- condition += ` AND b.start_date <= ?`
- pars = append(pars, endDate)
- }
- if researcherId != "" {
- condition += ` AND b.researcher_id IN(` + researcherId + `)`
- }
- if companyIndustry != "" {
- condition += ` AND b.company_industry = ?`
- pars = append(pars, companyIndustry)
- }
- if companyClassify != "" {
- condition += ` AND b.company_classify = ?`
- pars = append(pars, companyClassify)
- }
- keyword = strings.TrimSpace(keyword)
- if keyword != "" {
- kw := fmt.Sprint("%", keyword, "%")
- condition += ` AND a.company_name LIKE ? `
- pars = append(pars, kw)
- }
- total, err := roadshow.GetQuestionSummaryListCount(condition, pars)
- if err != nil && err.Error() != utils.ErrNoRow() {
- br.Msg = "获取信息失败"
- br.ErrMsg = "获取数据总数失败,GetQuestionSummaryListCount,Err:" + err.Error()
- return
- }
- dataList, err := roadshow.GetQuestionSummaryList(condition, pars, startSize, pageSize)
- if err != nil {
- br.Msg = "获取指标信息失败"
- br.ErrMsg = "获取数据失败,GetQuestionSummaryList,Err:" + err.Error()
- return
- }
- page = paging.GetPaging(currentIndex, pageSize, total)
- resp := new(roadshow.QuestionSummaryListResp)
- resp.Paging = page
- resp.List = dataList
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- br.Data = resp
- }
- // @Title 导出客户路演问题汇总
- // @Description 导出客户路演问题汇总
- // @Param StartDate query string true "开始日期"
- // @Param EndDate query string true "结束日期"
- // @Param ResearcherId query string true "研究员id"
- // @Param CompanyId query int true "客户ID"
- // @Param CompanyIndustry query string false "客户行业"
- // @Param CompanyClassify query string false "客户分类"
- // @Param Keyword query string false "关键词: 客户名称/社会信用码"
- // @Success 200 {object} roadshow.QuestionSummaryListResp
- // @router /question/summary/export [get]
- func (this *CalendarController) CalendarSummaryExport() {
- 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
- }
- startDate := this.GetString("StartDate")
- endDate := this.GetString("EndDate")
- researcherId := this.GetString("ResearcherId")
- companyIndustry := this.GetString("CompanyIndustry")
- companyClassify := this.GetString("CompanyClassify")
- keyword := this.GetString("Keyword")
- var condition string
- var pars []interface{}
- condition += ` AND b.question_status = 1 `
- if startDate != "" {
- condition += ` AND b.start_date >= ?`
- pars = append(pars, startDate)
- }
- if endDate != "" {
- condition += ` AND b.start_date <= ?`
- pars = append(pars, endDate)
- }
- if researcherId != "" {
- condition += ` AND b.researcher_id IN(` + researcherId + `)`
- }
- if companyIndustry != "" {
- condition += ` AND b.company_industry = ?`
- pars = append(pars, companyIndustry)
- }
- if companyClassify != "" {
- condition += ` AND b.company_classify = ?`
- pars = append(pars, companyClassify)
- }
- keyword = strings.TrimSpace(keyword)
- if keyword != "" {
- kw := fmt.Sprint("%", keyword, "%")
- condition += ` AND a.company_name LIKE ? `
- pars = append(pars, kw)
- }
- dataList, err := roadshow.GetQuestionSummaryExport(condition, pars)
- if err != nil {
- br.Msg = "获取指标信息失败"
- br.ErrMsg = "获取数据失败,GetQuestionSummaryList,Err:" + err.Error()
- return
- }
- var rsCalendarIdArr []string
- for _, v := range dataList {
- rsCalendarIdArr = append(rsCalendarIdArr, strconv.Itoa(v.RsCalendarId))
- }
- questionMap := make(map[int][]*roadshow.RsCalendarResearcherQuestionView)
- var questionMax int
- if len(rsCalendarIdArr) > 0 {
- var questionCondition string
- var questionPars []interface{}
- condition += ` AND a.rs_calendar_id IN (` + strings.Join(rsCalendarIdArr, ",") + `) `
- questionList, err := roadshow.GetRoadShowQuestionList(questionCondition, questionPars)
- if err != nil {
- br.Msg = "获取指标信息失败"
- br.ErrMsg = "获取数据失败,GetRoadShowQuestionList,Err:" + err.Error()
- return
- }
- for _, qv := range questionList {
- if items, ok := questionMap[qv.RsCalendarId]; ok {
- items = append(items, qv)
- questionMap[qv.RsCalendarId] = items
- if len(items) > questionMax {
- questionMax = len(items)
- }
- } else {
- items = make([]*roadshow.RsCalendarResearcherQuestionView, 0)
- items = append(items, qv)
- questionMap[qv.RsCalendarId] = items
- if len(items) > questionMax {
- questionMax = len(items)
- }
- }
- }
- }
- dir, _ := os.Executable()
- exPath := filepath.Dir(dir)
- downloadPath := exPath + "/" + time.Now().Format(utils.FormatDateUnSpace) + "客户路演汇总" + ".xlsx"
- xlsxFile := xlsx.NewFile()
- sheet, e := xlsxFile.AddSheet("客户路演汇总")
- if e != nil {
- br.Msg = "新增Sheet失败"
- br.ErrMsg = "新增Sheet失败, Err: " + e.Error()
- return
- }
- titleRow := sheet.AddRow()
- titleRow.AddCell().SetString("路演时间")
- titleRow.AddCell().SetString("客户名称")
- titleRow.AddCell().SetString("发起人")
- titleRow.AddCell().SetString("研究员")
- titleRow.AddCell().SetString("客户行业")
- titleRow.AddCell().SetString("客户分类")
- for i := 1; i <= questionMax; i++ {
- titleRow.AddCell().SetString("Q" + strconv.Itoa(i))
- titleRow.AddCell().SetString("A" + strconv.Itoa(i))
- }
- for _, v := range dataList {
- dataRow := sheet.AddRow()
- dataRow.AddCell().SetString(v.StartDate + " " + v.StartTime)
- dataRow.AddCell().SetString(v.CompanyName)
- dataRow.AddCell().SetString(v.SysUserRealName)
- dataRow.AddCell().SetString(v.ResearcherName)
- dataRow.AddCell().SetString(v.CompanyIndustry)
- dataRow.AddCell().SetString(v.CompanyClassify)
- questionList := questionMap[v.RsCalendarId]
- for _, qv := range questionList {
- dataRow.AddCell().SetString(qv.QuestionContent)
- dataRow.AddCell().SetString(qv.ReplyContent)
- }
- }
- if e = xlsxFile.Save(downloadPath); e != nil {
- br.Msg = "导出失败"
- br.ErrMsg = "保存文件失败"
- return
- }
- fileName := time.Now().Format(utils.FormatDateUnSpace) + "客户路演汇总" + ".xlsx"
- this.Ctx.Output.Download(downloadPath, fileName)
- defer func() {
- _ = os.Remove(downloadPath)
- }()
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- }
|