package cygx import ( "encoding/json" "github.com/rdlucklib/rdluck_tools/paging" "github.com/tealeg/xlsx" "hongze/hz_crm_api/controllers" "hongze/hz_crm_api/models" "hongze/hz_crm_api/models/cygx" "hongze/hz_crm_api/models/system" cygxService "hongze/hz_crm_api/services/cygx" "hongze/hz_crm_api/utils" "os" "path/filepath" "strconv" "time" ) // 固收时间线 type GushouTimeLineController struct { controllers.BaseAuthController } // @Title 新增固收时间线 // @Description 新增固收时间线接口 // @Param request body cygx.AddGushouTimeLineReq true "type json string" // @Success 200 {object} "保存成功" // @router /gushouTimeLine/preserveAndPublish [post] func (this *GushouTimeLineController) 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.AddGushouTimeLineReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } publishTime := utils.StrDateToDate(req.PublishTime) //时间字符串格式转时间格式 timeLineId := req.TimeLineId link := req.Link articleId, chartId := cygxService.HandleTacticsTimeLinLink(link) item := new(cygx.CygxGushouTimeLine) item.PublishTime = publishTime item.CreateTime = time.Now() item.ModifyTime = time.Now() item.Content = req.Content item.Link = req.Link item.AdminId = sysUser.AdminId if articleId > 0 { item.ArticleId = articleId } if chartId > 0 { item.ChartId = chartId } if timeLineId == 0 { //新增 err = cygx.AddCygxGushouTimeLine(item) } else { //更新 item.TimeLineId = timeLineId err = cygx.UpdateCygxGushouTimeLine(item) } 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开始" // @Param Status query int false "发布状态 ,1未发布,1已发布,传2查询所有" // @Success Ret=200 {object} cygx.GetCygxGushouTimeLineResp // @router /gushouTimeLine/list [get] func (this *GushouTimeLineController) 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.GetCygxGushouTimeLineResp) pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") status, _ := this.GetInt("Status") 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{} if status == 0 || status == 1 { condition += ` AND art.status = ? ` pars = append(pars, status) } total, err := cygx.GetCygxGushouTimeLineCount(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } condition += " ORDER BY art.publish_time DESC , art.time_line_id DESC " list, err := cygx.GetCygxGushouTimeLineList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } var TimeLineIds []int var ArticleIds []int var ChartIds []int for _, v := range list { v.PublishTime = utils.TimeRemoveHms(v.PublishTime) TimeLineIds = append(TimeLineIds, v.TimeLineId) if v.ArticleId > 0 { ArticleIds = append(ArticleIds, v.ArticleId) } if v.ChartId > 0 { ChartIds = append(ChartIds, v.ChartId) } } //获取关联的文章map articleTitleMap := make(map[int]string) if len(ArticleIds) > 0 { articleTitleMap = cygxService.GetArticleTitleMapByid(ArticleIds) } chartTitleMap := make(map[int]string) if len(ChartIds) > 0 { chartTitleMap = cygxService.GetChartTitleMapByid(ChartIds) } //获取pv/Uv map mapPv, mapUv := cygxService.GetCygxGushouTimeLineHistoryListMap(TimeLineIds) for _, v := range list { v.Pv = mapPv[v.TimeLineId] v.Uv = mapUv[v.TimeLineId] if v.ArticleId > 0 { v.Title = articleTitleMap[v.ArticleId] } if v.ChartId > 0 { v.Title = chartTitleMap[v.ChartId] } } detail, err := cygx.GetCygxConfigDetailByCode(utils.CYGX_GUSHOU_TIME_LINE_STATUS) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取数据失败,Err:" + err.Error() return } resp.Status, _ = strconv.Atoi(detail.ConfigValue) 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 TimeLineId query int true "时间线ID" // @Success Ret=200 {object} cygx.ActivitySpecialDetail // @router /gushouTimeLine/detail [get] func (this *GushouTimeLineController) Detail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() AdminUser := this.SysUser if AdminUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } resp := new(cygx.GetCygxGushouTimeLineDetailResp) timeLineId, _ := this.GetInt("TimeLineId") if timeLineId < 1 { br.Msg = "请输入详情ID" return } detail, err := cygx.GetCygxGushouTimeLineDetail(timeLineId) if err != nil { br.Msg = "详情不存在" br.ErrMsg = "获取失败,Err:" + err.Error() return } detail.PublishTime = utils.TimeRemoveHms(detail.PublishTime) resp.Detail = detail br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 删除 // @Description 获取详情接口 // @Param request body cygx.GushouTimeLineTimeLineIdReq true "type json string" // @Success 200 {object} "操作成功" // @router /gushouTimeLine/delete [POST] func (this *GushouTimeLineController) Delete() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() AdminUser := this.SysUser if AdminUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } var req cygx.GushouTimeLineTimeLineIdReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } timeLineId := req.TimeLineId if timeLineId == 0 { br.Msg = "参数错误" br.ErrMsg = "参数错误,id不可为空" return } err = cygx.DeleteCygxGushouTimeLine(timeLineId) 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 request body cygx.GushouTimeLineTimeLineIdReq true "type json string" // @Success 200 Ret=200 发布成功 // @router /gushouTimeLine/publishAndcancel [post] func (this *GushouTimeLineController) PublishReport() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() var req cygx.GushouTimeLineTimeLineIdReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } timeLineId := req.TimeLineId if timeLineId == 0 { br.Msg = "参数错误" br.ErrMsg = "参数错误,id不可为空" return } detail, err := cygx.GetCygxGushouTimeLineDetail(timeLineId) if err != nil { br.Msg = "详情不存在" br.ErrMsg = "获取失败,Err:" + err.Error() return } var status int if detail.Status == 0 { status = 1 } else { status = 0 } err = cygx.EditCygxGushouTimeLineStatus(status, timeLineId) if err != nil { br.Msg = "操作失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.IsAddLog = true br.Msg = "操作成功" } // @Title 一键发布/取消发布报告接口 // @Description 一键发布/取消发布报告 // @Success 200 Ret=200 取消发布成功 // @router /gushouTimeLine/all/publishAndcancel [post] func (this *GushouTimeLineController) PublishCancleReport() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() detail, err := cygx.GetCygxConfigDetailByCode(utils.CYGX_GUSHOU_TIME_LINE_STATUS) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取数据失败,Err:" + err.Error() return } var status int if detail.ConfigValue == "0" { status = 1 } else { status = 0 } err = cygx.EditCygxGushouTimeLineStatusAll(status) if err != nil { br.Msg = "修改失败" br.ErrMsg = "修改失败,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.IsAddLog = true br.Msg = "操作成功" } // @Title 下载PV // @Description 下载PV接口 // @Param TimeLineId query int true "时间线ID" // @router /gushouTimeLine/PvExport [get] func (this *GushouTimeLineController) PvExport() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() AdminUser := this.SysUser if AdminUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } timeLineId, _ := this.GetInt("TimeLineId") if timeLineId < 1 { br.Msg = "请输入详情ID" return } var condition string var pars []interface{} condition = ` AND time_line_id = ? ` pars = append(pars, timeLineId) var respList []*cygx.CygxGushouTimeLineHistory //respList := new(cygx.CygxGushouTimeLineHistory) list, err := cygx.GetCygxGushouTimeLineHistoryList(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取数据失败,Err:" + err.Error() return } //超级管理员和权益管理员、权益研究员可以下载所有客户,销售组长能下载本组客户,销售只能下载本人名下客户 resp := new(cygx.CanDownload) adminInfo, errAdmin := system.GetSysUserById(AdminUser.AdminId) if errAdmin != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + errAdmin.Error() return } if adminInfo.Role == "admin" || adminInfo.Role == "researcher" { resp.IsCanDownload = true } //销售查看自己客户,销售组长查看组员 if resp.IsCanDownload == false { mapMobile, err := cygxService.GetAdminLookUserMobile(adminInfo) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,销售对应权限,Err:" + err.Error() return } for _, v := range list { if _, ok := mapMobile[v.Mobile]; ok { respList = append(respList, v) } } } else { respList = list } //创建excel dir, err := os.Executable() exPath := filepath.Dir(dir) downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx" xlsxFile := xlsx.NewFile() if err != nil { br.Msg = "生成文件失败" br.ErrMsg = "生成文件失败" return } style := xlsx.NewStyle() alignment := xlsx.Alignment{ Horizontal: "center", Vertical: "center", WrapText: true, } style.Alignment = alignment style.ApplyAlignment = true sheet, err := xlsxFile.AddSheet("阅读明细") if err != nil { br.Msg = "新增Sheet失败" br.ErrMsg = "新增Sheet失败,Err:" + err.Error() return } rowTitle := sheet.AddRow() cellA := rowTitle.AddCell() cellA.Value = "姓名" cellB := rowTitle.AddCell() cellB.Value = "手机号" cellC := rowTitle.AddCell() cellC.Value = "公司名称" cellD := rowTitle.AddCell() cellD.Value = "所属权益销售" cellE := rowTitle.AddCell() cellE.Value = "点击时间" for _, item := range respList { row := sheet.AddRow() cellA := row.AddCell() cellA.Value = item.RealName cellB := row.AddCell() cellB.Value = item.Mobile cellC := row.AddCell() cellC.Value = item.CompanyName cellD := row.AddCell() cellD.Value = item.SellerName cellE := row.AddCell() cellE.Value = item.CreateTime.Format(utils.FormatDateTime) } err = xlsxFile.Save(downLoadnFilePath) if err != nil { br.Msg = "保存文件失败" br.ErrMsg = "保存文件失败" return } downloadFileName := time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx" this.Ctx.Output.Download(downLoadnFilePath, downloadFileName) defer func() { os.Remove(downLoadnFilePath) }() br.Ret = 200 br.Success = true br.Msg = "获取成功" }