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 } fmt.Println(user.CompanyId) //`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) fmt.Println(companyPermission) if companyPermission == "" { if applyCount > 0 { hasPermission = 5 } else { hasPermission = 2 } hasFree = 2 goto Loop } else { hasFree = 1 // 原有的权限校验 更改于 2021-05-18 //articlePermission, err := models.GetArticlePermission(detail.SubCategoryName) //fmt.Println(articlePermission) //fmt.Println(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:" + 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 // } //} articlePermission, err := models.GetArticlePermission(detail.SubCategoryName) fmt.Println(articlePermission) fmt.Println(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:" + 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 } } if hasPermission == 1 { key := "CYGX_ARTICLE_" + strconv.Itoa(articleId) + "_" + strconv.Itoa(uid) if !utils.Rc.IsExist(key) { //新增浏览记录 record := new(models.CygxArticleViewRecord) record.UserId = uid record.ArticleId = articleId record.CreateTime = time.Now() record.Mobile = user.Mobile record.Email = user.Email record.CompanyId = user.CompanyId record.CompanyName = user.CompanyName go models.AddCygxArticleViewRecord(record) utils.Rc.Put(key, 1, 5*time.Second) models.ModifyReportLastViewTime(uid) } } } 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) detail.Abstract = html.UnescapeString(detail.Abstract) } sellerList, err := models.GetSellerList(detail.ArticleId) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取销售数据失败,Err:" + err.Error() + ";articleId" + strconv.Itoa(detail.ArticleId) return } detail.SellerList = sellerList 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 // fmt.Println(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)) // // summaryCategoryIds := "28,32,45,50,57,62,72,74,79,84,86,88,90,95,96" //纪要库的文章类型ID // listSummarys := strings.Split(summaryCategoryIds, ",") // fmt.Println(listSummarys) // for _, v := range listSummarys { // vs, _ := strconv.Atoi(v) // fmt.Printf("n 的类型 %T", vs) // } // // for _, v := range list { // for _, vs := range listSummarys { // vint, _ := strconv.Atoi(vs) // //fmt.Printf("vint 的类型 %T", vint) // //fmt.Println("————————————") // //fmt.Printf("vCategoryId 的类型 %T", v.CategoryId) // //fmt.Println("————————————") // // if v.CategoryId == vint { // // } // } // } // // br.Msg = "测试!" // br.ErrMsg = "参数解析失败,Err:" // return //listSummary, errsu := models.GetReportMappingCategoryID() //if errsu != nil { // fmt.Println("GetTacticsList Err:", errsu.Error()) // return //} // //listPermission, errper := models.GetPermissionMappingCategoryID() //if errper != nil { // fmt.Println("GetTacticsList Err:", errper.Error()) // return //} //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 // //} // for _, vSum := range listSummary { // if v.CategoryId == vSum.CategoryId { // v.IsSummary = 1 // } // } // //是否属于报告 // //countReport, err := models.GetReportMappingById(v.CategoryId) // //if err != nil && err.Error() != utils.ErrNoRow() { // // br.Msg = "参数解析异常!" // // br.ErrMsg = "参数解析失败,Err:" + err.Error() // // return // //} // for _, vPer := range listPermission { // if v.CategoryId == vPer.CategoryId { // v.IsReport = 1 // } // } // if v.IsReport > 0 { // //是否属于策略 策略自动归类 // //是否属于行业报告 行业报告自动归类 // if v.CategoryId == 7 || v.CategoryId == 11 || v.CategoryId == 51 || v.CategoryId == 52 || v.CategoryId == 64 || v.CategoryId == 80 || v.CategoryId == 87 { // 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 // } // fmt.Println(v.IsClass) // 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") // //articleInfo, err := models.GetArticleDetailById(v.ArticleId) // //if err != nil { // // br.Msg = "同步失败!文章ID:" + strconv.Itoa(v.ArticleId) // // br.ErrMsg = "同步失败,Err:" + err.Error() // // return // //} // //if articleInfo.IsClass == 1 { // // v.IsClass = 1 // //} // 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 // } // } // //纪要库的数据同步到Es // if v.IsSummary == 1 { // 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(services.ElasticTestArticleDetail) // item.ArticleId = v.ArticleId // item.Title = v.Title // item.BodyText = bodyText // item.PublishDate = v.PublishDate.Format(utils.FormatDateTime) // services.EsAddOrEditData(indexName, strconv.Itoa(v.ArticleId), item) // } //} //br.Ret = 200 //br.Success = true //br.Msg = "同步成功" //}