package controllers import ( "encoding/json" "fmt" "hongze/hongze_cygx/models" "hongze/hongze_cygx/services" "hongze/hongze_cygx/utils" "html" "strconv" "strings" "time" ) type ArticleController struct { BaseAuthController } type ArticleCommonController struct { BaseCommonController } // @Title 获取报告详情 // @Description 获取报告详情接口 // @Param ArticleId query int true "报告ID" // @Success 200 {object} models.ArticleDetailResp // @router /detail [get] func (this *ArticleController) Detail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请登录" br.ErrMsg = "请登录,用户信息为空" br.Ret = 408 return } uid := user.UserId articleId, err := this.GetInt("ArticleId") if articleId <= 0 { br.Msg = "参数错误" br.ErrMsg = "参数错误" return } detail := new(models.ArticleDetail) hasPermission := 0 hasFree := 0 //判断是否已经申请过 applyCount, err := models.GetApplyRecordCount(uid) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error() return } //`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"` if user.CompanyId > 1 { companyPermission, err := models.GetCompanyPermission(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId) return } detail, err = models.GetArticleDetailById(articleId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取信息失败,Err:" + err.Error() return } fmt.Println(detail.Department) detail.Body = html.UnescapeString(detail.Body) detail.Abstract = html.UnescapeString(detail.Abstract) if companyPermission == "" { if applyCount > 0 { hasPermission = 5 } else { hasPermission = 2 } hasFree = 2 goto Loop } else { hasFree = 1 articlePermission, err := models.GetArticlePermission(detail.SubCategoryName) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取报告权限失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId) return } if articlePermission == nil { br.Msg = "获取信息失败" br.ErrMsg = "报告权限不存在,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId) return } for _, p := range articlePermission { if strings.Contains(companyPermission, p.PermissionName) { hasPermission = 1 historyRecord := new(models.CygxArticleHistoryRecord) historyRecord.UserId = uid historyRecord.ArticleId = articleId historyRecord.CreateTime = time.Now() historyRecord.Mobile = user.Mobile historyRecord.Email = user.Email historyRecord.CompanyId = user.CompanyId historyRecord.CompanyName = user.CompanyName go models.AddCygxArticleHistoryRecord(historyRecord) break } else { //无该行业权限 hasPermission = 3 } } } collectCount, err := models.GetArticleCollectCount(uid, articleId) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "判断是否已收藏失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId) return } if collectCount > 0 { detail.IsCollect = true } interviewApplyItem, err := models.GetArticleInterviewApply(uid, articleId) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId) return } if interviewApplyItem != nil && interviewApplyItem.InterviewApplyId > 0 { detail.IsInterviewApply = true detail.InterviewApplyStatus = interviewApplyItem.Status } //获取销售手机号 sellerItem, err := models.GetSellerByCompanyId(user.CompanyId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取销售数据失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId) return } if sellerItem != nil { detail.SellerMobile = sellerItem.Mobile detail.SellerName = sellerItem.RealName } sellerList, err := models.GetSellerList(articleId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取销售数据失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId) return } detail.SellerList = sellerList } else { //潜在客户 if applyCount > 0 { hasPermission = 5 } else { hasPermission = 4 } } Loop: if hasPermission != 1 { detail.Body = "" detail.BodyText = "" } resp := new(models.ArticleDetailResp) resp.HasPermission = hasPermission resp.HasFree = hasFree resp.Detail = detail br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 收藏 // @Description 收藏 // @Param request body models.ArticleCollectReq true "type json string" // @Success 200 {object} models.FontsCollectResp // @router /collect [post] func (this *ArticleController) ArticleCollect() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请重新登录" br.Ret = 408 return } uid := user.UserId var req models.ArticleCollectReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } count, err := models.GetArticleCollectCount(uid, req.ArticleId) if err != nil { br.Msg = "获取数据失败!" br.ErrMsg = "获取数据失败,Err:" + err.Error() return } resp := new(models.ArticleCollectResp) if count <= 0 { item := new(models.CygxArticleCollect) item.ArticleId = req.ArticleId item.UserId = uid item.CreateTime = time.Now() _, err = models.AddCygxArticleCollect(item) if err != nil { br.Msg = "收藏失败" br.ErrMsg = "收藏失败,Err:" + err.Error() return } br.Msg = "收藏成功" resp.Status = 1 } else { err = models.RemoveArticleCollect(uid, req.ArticleId) if err != nil { br.Msg = "取消收藏失败" br.ErrMsg = "取消收藏失败,Err:" + err.Error() return } br.Msg = "已取消收藏" resp.Status = 2 } collectTotal, err := models.GetArticleCollectUsersCount(req.ArticleId) if err != nil { br.Msg = "获取数据失败" br.ErrMsg = "获取数据失败,Err:" + err.Error() return } resp.CollectCount = collectTotal br.Ret = 200 br.Success = true br.Data = resp } // @Title 访谈申请 // @Description 访谈申请 // @Param request body models.ArticleInterviewApplyReq true "type json string" // @Success 200 {object} models.FontsCollectResp // @router /interview/apply [post] func (this *ArticleController) InterviewApply() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() user := this.User if user == nil { br.Msg = "请重新登录" br.Ret = 408 return } uid := user.UserId var req models.ArticleInterviewApplyReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } article, err := models.GetArticleDetailById(req.ArticleId) if err != nil { br.Msg = "获取纪要失败!" br.ErrMsg = "获取纪要失败,Err:" + err.Error() return } count, err := models.GetArticleInterviewApplyCount(uid, req.ArticleId) if err != nil { br.Msg = "获取数据失败!" br.ErrMsg = "获取数据失败,Err:" + err.Error() return } resp := new(models.ArticleInterviewApplyResp) if count <= 0 { item := new(models.CygxInterviewApply) item.ArticleId = req.ArticleId item.UserId = uid item.CompanyId = user.CompanyId item.Status = "待邀请" item.Sort = 1 item.ArticleTitle = article.Title item.CreateTime = time.Now() item.ModifyTime = time.Now() item.ArticleIdMd5 = article.ArticleIdMd5 _, err = models.AddCygxInterviewApply(item) if err != nil { br.Msg = "申请失败" br.ErrMsg = "申请失败,Err:" + err.Error() return } br.Msg = "申请成功" resp.Status = 1 //发送模板消息 if user.CompanyId > 1 { mobile := user.Mobile if mobile == "" { mobile = user.Email } sellerItem, _ := models.GetSellerByCompanyId(user.CompanyId) if sellerItem != nil && sellerItem.AdminId > 0 && user.Mobile != "" { openIpItem, _ := models.GetUserRecordByUserId(sellerItem.UserId, 1) if openIpItem != nil && openIpItem.OpenId != "" { go services.SendInterviewApplyTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, openIpItem.OpenId) } } } } else { err = models.RemoveArticleInterviewApply(uid, req.ArticleId) if err != nil { br.Msg = "取消申请失败" br.ErrMsg = "取消申请失败,Err:" + err.Error() return } br.Msg = "已取消申请" resp.Status = 2 if user.CompanyId > 1 { mobile := user.Mobile if mobile == "" { mobile = user.Email } sellerItem, _ := models.GetSellerByCompanyId(user.CompanyId) if sellerItem != nil && sellerItem.AdminId > 0 && user.Mobile != "" { openIpItem, _ := models.GetUserRecordByUserId(sellerItem.UserId, 1) if openIpItem != nil && openIpItem.OpenId != "" { go services.SendInterviewApplyCancelTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, openIpItem.OpenId) } } } } br.Ret = 200 br.Success = true br.Data = resp } // @Title 获取报告详情 // @Description 获取报告详情接口 // @Param ArticleIdMd5 query int true "报告ID" // @Success 200 {object} models.ArticleDetailResp // @router /look/detail [get] func (this *ArticleCommonController) Detail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() articleIdMd5 := this.GetString("ArticleIdMd5") if articleIdMd5 == "" { br.Msg = "参数错误" br.ErrMsg = "参数错误" return } resp := new(models.ArticleDetailResp) detail, err := models.GetArticleDetailByIdMd5(articleIdMd5) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "获取信息失败,Err:" + err.Error() return } if detail == nil { resp.HasPermission = 2 } else { resp.HasPermission = 1 } if detail != nil { detail.Body = html.UnescapeString(detail.Body) } resp.Detail = detail br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 获取报告同步 // @Description 获取报告详情接口 // @Param ArticleIdMd5 query int true "报告ID" // @Success 200 {object} models.ArticleDetailResp // @router /tongbu [get] func (this *ArticleCommonController) Tongbu() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() fmt.Println("同步数据") //indexName := utils.IndexName //endDate := time.Now().AddDate(0, 0, -7).Format(utils.FormatDate) //list, err := models.GetTacticsList(endDate) list, err := models.GetTacticsListAll2() if err != nil { fmt.Println("GetTacticsList Err:", err.Error()) return } fmt.Println("list len:", len(list)) for k, v := range list { //是否属于纪要库 countSummary, err := models.GetPermissionMappingById(v.CategoryId) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if countSummary > 0 { v.IsSummary = 1 } //是否属于报告 countReport, err := models.GetReportMappingById(v.CategoryId) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if countReport > 0 { v.IsReport = 1 //是否属于策略 策略自动归类 if v.CategoryId == 7 || v.CategoryId == 11 || v.CategoryId == 51 || v.CategoryId == 52 { v.IsClass = 1 } if v.CategoryId == 64 || v.CategoryId == 87 || v.CategoryId == 80 { v.ReportType = 2 //是否属于行业报告 } else { v.ReportType = 1 //是否属于产业报告 } } v.Department = "弘则权益研究" fmt.Println(k, v.ArticleId) hh, _ := time.ParseDuration("8h") //pDate := publishDate.Add(hh) v.PublishDate = v.PublishDate.Add(hh) //判断是否已经存在 if v.ArticleId < 0 { if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } } count, err := models.GetArticleCountById(v.ArticleId) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } v.Body = strings.Replace(v.Body, "http://vmp.hzinsights.com", "https://vmp.hzinsights.com", -1) expertNumStr, expertContentStr, interviewDateStr := services.BodyAnalysis(v.Body) if count > 0 { fmt.Println(k, v.ArticleId, "edit") bodyText, _ := services.GetReportContentTextSub(v.Body) updateParams := make(map[string]interface{}) updateParams["Title"] = v.Title updateParams["TitleEn"] = v.TitleEn updateParams["UpdateFrequency"] = v.UpdateFrequency updateParams["CreateDate"] = v.CreateDate updateParams["PublishDate"] = v.PublishDate updateParams["Body"] = html.EscapeString(v.Body) updateParams["BodyText"] = bodyText updateParams["Abstract"] = html.EscapeString(v.Abstract) updateParams["CategoryName"] = v.CategoryName updateParams["SubCategoryName"] = v.SubCategoryName updateParams["CategoryId"] = v.CategoryId updateParams["PublishStatus"] = v.PublishStatus updateParams["ExpertBackground"] = expertContentStr updateParams["ExpertNumber"] = expertNumStr updateParams["InterviewDate"] = interviewDateStr updateParams["IsClass"] = v.IsClass updateParams["IsSummary"] = v.IsSummary updateParams["IsReport"] = v.IsReport updateParams["ReportType"] = v.ReportType if v.Department != "弘则权益研究" { v.Department = "弘则权益研究" } updateParams["Department"] = v.Department whereParam := map[string]interface{}{"article_id": v.ArticleId} err = models.UpdateByExpr(models.CygxArticle{}, whereParam, updateParams) if err != nil { fmt.Println("UpdateByExpr Err:" + err.Error()) } } else { fmt.Println(k, v.ArticleId, "add") item := new(models.CygxArticle) articleIdInt := v.ArticleId item.ArticleId = articleIdInt item.Title = v.Title item.TitleEn = v.TitleEn item.UpdateFrequency = v.UpdateFrequency item.CreateDate = v.CreateDate item.PublishDate = v.PublishDate.Format(utils.FormatDateTime) item.Body = html.EscapeString(v.Body) item.Abstract = html.EscapeString(v.Abstract) item.CategoryName = v.CategoryName item.SubCategoryName = v.SubCategoryName item.CategoryId = v.CategoryId item.PublishStatus = v.PublishStatus item.ExpertBackground = expertContentStr item.ExpertNumber = expertNumStr item.InterviewDate = interviewDateStr item.Department = v.Department item.ArticleIdMd5 = utils.MD5(strconv.Itoa(articleIdInt)) item.IsClass = v.IsClass item.IsSummary = v.IsSummary item.IsReport = v.IsReport item.ReportType = v.ReportType _, err = models.AddCygxArticles(item) if err != nil { fmt.Println("AddCygxArticle Err:", err.Error()) br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } } //content := html.UnescapeString(v.Body) //doc, err := goquery.NewDocumentFromReader(strings.NewReader(content)) //if err != nil { // fmt.Println("create doc err:", err.Error()) // br.Msg = "参数解析异常!" // br.ErrMsg = "参数解析失败,Err:" + err.Error() // return //} //doc.Find("a").Each(func(i int, a *goquery.Selection) { // a.Remove() //}) //bodyText := doc.Text() //item := new(ElasticTestArticleDetail) //item.ArticleId = v.ArticleId //item.Title = v.Title //item.BodyText = bodyText //item.PublishDate = v.PublishDate.Format(utils.FormatDateTime) //EsAddOrEditData(indexName, strconv.Itoa(v.ArticleId), item) } br.Ret = 200 br.Success = true br.Msg = "同步成功" }