123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- package services
- import (
- "errors"
- "fmt"
- "github.com/PuerkitoBio/goquery"
- "hongze/hongze_clpt/models"
- "hongze/hongze_clpt/utils"
- "html"
- "strconv"
- "strings"
- "time"
- "unicode/utf8"
- )
- func FixArticleImgUrl(body string) (contentSub string, err error) {
- r := strings.NewReader(string(body))
- doc, err := goquery.NewDocumentFromReader(r)
- if err != nil {
- fmt.Println(err)
- }
- doc.Find("img").Each(func(i int, s *goquery.Selection) {
- src, _ := s.Attr("src")
- if i == 0 && src != "" {
- contentSub = src
- }
- })
- return
- }
- //GetReportContentTextSubByarticle 解析文章内容
- func GetReportContentTextSubByarticle(content, abstract string, articleId int) (contentSub string, err error) {
- var lenabstract int
- //如果不是研选就这么展示
- if articleId < utils.SummaryArticleId {
- abstract = html.UnescapeString(abstract)
- doc, errdoc := goquery.NewDocumentFromReader(strings.NewReader(abstract))
- if errdoc != nil {
- err = errdoc
- return
- }
- docabstract := doc.Text()
- lenabstract = utf8.RuneCountInString(docabstract)
- if lenabstract >= 20 {
- contentSub = docabstract
- return
- } else {
- contentSub, err = GetReportContentTextSub(content)
- }
- } else {
- contentSub, err = GetReportContentTextSub(content)
- }
- return
- }
- func GetReportContentTextSub(content string) (contentSub string, err error) {
- content = html.UnescapeString(content)
- doc, errdoc := goquery.NewDocumentFromReader(strings.NewReader(content))
- if errdoc != nil {
- err = errdoc
- return
- }
- docText := doc.Text()
- bodyRune := []rune(docText)
- bodyRuneLen := len(bodyRune)
- body := string(bodyRune[:bodyRuneLen])
- contentSub = body
- contentSub = strings.Replace(body, "Powered by Froala Editor", "", -1)
- contentSub = strings.Replace(body, "PoweredbyFroalaEditor", "", -1)
- contentSub = strings.Replace(body, " ", "", -1)
- return
- }
- func GetReportContentTextArticleBody(content string) (contentSub string) {
- contentSub = html.UnescapeString(content)
- contentSub = strings.Replace(contentSub, "<p data-f-id=\"pbf\" style=\"text-align: center; font-size: 14px; margin-top: 30px; opacity: 0.65; font-family: sans-serif;\">Powered by <a href=\"https://www.froala.com/wysiwyg-editor?pb=1\" title=\"Froala Editor\">Froala Editor</a></p>", "", -1)
- contentSub = strings.Replace(contentSub, "pre", "div", -1)
- return
- }
- //HandleArticleCategoryImg 预处理文章的封面图片
- func HandleArticleCategoryImg(list []*models.ArticleListResp) (items []*models.ArticleListResp, err error) {
- //研选的五张图片
- detailResearch, e := models.GetConfigByCode("category_research_img_url")
- if e != nil {
- err = errors.New("获取研选的五张图片失败" + e.Error())
- return
- }
- researchList := strings.Split(detailResearch.ConfigValue, "{|}")
- //对应分类的所图片
- detailCategoryUrl, err := models.GetConfigByCode("category_map_img_url")
- if err != nil {
- err = errors.New("获取对应分类的所图片失败" + err.Error())
- return
- }
- categoryUrlList := strings.Split(detailCategoryUrl.ConfigValue, "{|}")
- mapCategoryUrl := make(map[string]string)
- var categoryId string
- var imgUrlChart string
- for _, v := range categoryUrlList {
- vslice := strings.Split(v, "_")
- categoryId = vslice[0]
- imgUrlChart = vslice[len(vslice)-1]
- mapCategoryUrl[categoryId] = imgUrlChart
- }
- mapChartPerssion := make(map[string]string)
- reportMappingList, err := models.GetReportMappingStrategyAll()
- if err != nil {
- err = errors.New("GetReportMappingStrategyAll err" + err.Error())
- return
- }
- for _, v := range reportMappingList {
- mapChartPerssion[strconv.Itoa(v.CategoryId)] = v.ChartPermissionName
- }
- for k, v := range list {
- item := list[k]
- //如果文章一开始的内容是图片,优先展示第一张图片
- newBody, _ := GetReportContentTextSubByarticle(item.Body, item.Annotation, item.ArticleId)
- list[k].Annotation = newBody
- list[k].Body = ""
- list[k].Abstract, _ = GetReportContentTextSub(v.Abstract)
- list[k].PublishDate = utils.StrTimeToTime(item.PublishDate).Format(utils.FormatDate) //时间字符串格式转时间格式
- if item.Pv > 999 {
- list[k].Pv = 999
- }
- list[k].ChartPermissionName = mapChartPerssion[v.CategoryId]
- //如果是研选系列的任意取五张图片的中的一张
- if v.CategoryId == "0" || v.ArticleId > utils.SummaryArticleId {
- knum := v.ArticleId % 5
- list[k].ImgUrlPc = researchList[knum]
- } else {
- list[k].ImgUrlPc = mapCategoryUrl[v.CategoryId]
- }
- if list[k].ArticleId < utils.SummaryArticleId {
- list[k].HttpUrl = utils.StrategyPlatform + strconv.Itoa(v.ArticleId)
- list[k].IsNeedJump = true
- }
- list[k].Source = 1
- //添加行业默认图片
- if v.ImgUrlPc == "" {
- if v.ChartPermissionName == utils.YI_YAO_NAME {
- list[k].ImgUrlPc = utils.YI_YAO_OTHER_IMG
- } else if v.ChartPermissionName == utils.XIAO_FEI_NAME {
- list[k].ImgUrlPc = utils.XIAO_FEI_OTHER_IMG
- } else if v.ChartPermissionName == utils.KE_JI_NAME {
- list[k].ImgUrlPc = utils.KE_JI_OTHER_IMG
- } else if v.ChartPermissionName == utils.ZHI_ZAO_NAME {
- list[k].ImgUrlPc = utils.ZHI_ZAO_OTHER_IMG
- }
- }
- }
- articleIds := make([]int, 0)
- for i := range list {
- articleIds = append(articleIds, list[i].ArticleId)
- }
- // 报告关联产业信息
- industryMap := make(map[int][]*models.IndustrialManagementIdInt, 0)
- if len(articleIds) > 0 {
- var industryCond string
- var industryPars []interface{}
- industryCond += ` AND mg.article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `)`
- industryPars = append(industryPars, articleIds)
- industryList, e := models.GetIndustrialListByarticleId(industryPars, industryCond)
- if e != nil {
- err = errors.New("GetIndustrialListByarticleId" + e.Error())
- return
- }
- for i := range industryList {
- v := industryList[i]
- industryMap[v.ArticleId] = append(industryMap[v.ArticleId], &models.IndustrialManagementIdInt{
- ArticleId: v.ArticleId,
- IndustrialManagementId: v.IndustrialManagementId,
- IndustryName: v.IndustryName,
- ChartPermissionId: v.ChartPermissionId,
- })
- }
- }
- for k, v := range list {
- if len(industryMap[v.ArticleId]) > 0 {
- list[k].List = industryMap[v.ArticleId]
- } else {
- list[k].List = make([]*models.IndustrialManagementIdInt, 0)
- }
- }
- if len(list) == 0 {
- list = make([]*models.ArticleListResp, 0)
- }
- items = list
- return
- }
- //HandleArticleStock 处理报告关联的个股标签
- func HandleArticleStock(stock string) (items []*models.ComapnyNameResp) {
- sliceSubjects := strings.Split(stock, "/")
- if len(sliceSubjects) > 0 {
- for _, vSubject := range sliceSubjects {
- sliceKuohao := strings.Split(vSubject, "(") //过滤括号
- sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
- subject := sliceXiahuaxian[0]
- items = append(items, &models.ComapnyNameResp{ComapnyName: subject})
- }
- }
- return
- }
- //弘则报告发布日期在三个月以内的
- func GetArticNewLabelWhithActivity3Month() (labelMap map[int]bool, err error) {
- var condition string
- var pars []interface{}
- condition += ` AND publish_date <= ? AND article_id < ? `
- pars = append(pars, time.Now().AddDate(0, -3, 0), utils.SummaryArticleId)
- articleList, e := models.GetArticleList(condition, pars)
- if e != nil {
- err = errors.New("GetArticleList, Err: " + e.Error())
- return
- }
- var articleIds []int
- for _, v := range articleList {
- articleIds = append(articleIds, v.ArticleId)
- }
- if len(articleIds) == 0 {
- return
- }
- pars = make([]interface{}, 0)
- condition = ` AND article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `)`
- pars = append(pars, articleIds)
- industrialList, e := models.GetIndustrialArticleGroupManagementList(condition, pars)
- if e != nil {
- err = errors.New("GetIndustrialArticleGroupManagementList, Err: " + e.Error())
- return
- }
- labelMap = make(map[int]bool, 0)
- var industrialIds []int
- for _, v := range industrialList {
- industrialIds = append(industrialIds, v.IndustrialManagementId)
- }
- // 获取活动关联的产业
- var groupCond string
- var groupPars []interface{}
- groupCond += ` AND b.industrial_management_id IN (` + utils.GetOrmInReplace(len(industrialIds)) + `) AND b.source = 1 `
- groupPars = append(groupPars, industrialIds)
- groups, e := models.GetActivityIndustryRelationList(groupCond, groupPars)
- if e != nil {
- err = errors.New("获取活动产业关联列表失败, Err: " + e.Error())
- return
- }
- for _, v := range groups {
- labelMap[v.ActivityId] = true
- }
- return
- }
- //GetSpecialArticleDetailUserPower 处理用户查看专项调研文章详情的权限
- func GetSpecialArticleDetailUserPower(user *models.WxUserItem, articleInfo *models.ArticleDetail) (havePower bool, err error) {
- permissionStr, e := GetCompanyPermissionUpgrade(user.CompanyId)
- if e != nil {
- err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())
- return
- }
- reportMapDetail, e := models.GetdetailByCategoryIdPush(articleInfo.CategoryId)
- if e != nil {
- err = errors.New("GetdetailByCategoryIdPush, Err: " + e.Error())
- return
- }
- if reportMapDetail == nil {
- err = errors.New("GetdetailByCategoryIdP,获取详情失败, Err: ")
- return
- }
- fmt.Println(permissionStr)
- //如果没有对应的升级权限,则返回
- if !strings.Contains(permissionStr, reportMapDetail.ChartPermissionName) {
- return
- } else {
- havePower = true
- }
- return
- }
|