123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- package services
- import (
- "errors"
- "eta/eta_hub/models"
- "eta/eta_hub/models/report"
- "eta/eta_hub/utils"
- "fmt"
- "html"
- "sort"
- "strconv"
- "strings"
- )
- // UpdateReportEs 更新报告/章节Es
- func UpdateReportEs(reportId int, publishState int) (err error) {
- if reportId <= 0 {
- return
- }
- reportInfo, err := models.GetReportByReportId(reportId)
- if err != nil {
- return
- }
- categories := ""
- if reportInfo.HasChapter == 1 {
- // 晨周报
- chapterList, tmpErr := models.GetPublishedChapterListByReportId(reportInfo.Id)
- if tmpErr != nil {
- return
- }
- if len(chapterList) > 0 {
- // 更新章节的es数据
- for _, chapterInfo := range chapterList {
- err = updateReportChapterEsByChapter(chapterInfo)
- if err != nil {
- return
- }
- }
- }
- } else {
- //if utils.BusinessCode == utils.BusinessCodeRelease || utils.BusinessCode == utils.BusinessCodeSandbox {
- permissionList, tmpErr := models.GetChartPermissionNameFromMappingByKeyword("rddp", reportInfo.ClassifyIdSecond)
- if tmpErr != nil {
- return
- }
- categoryArr := make([]string, 0)
- for i := 0; i < len(permissionList); i++ {
- categoryArr = append(categoryArr, permissionList[i].PermissionName)
- }
- aliasArr, _ := addCategoryAliasToArr(categoryArr)
- categories = strings.Join(aliasArr, ",")
- //}
- }
- // 最小单位的分类id
- minClassifyId, minClassifyName, err := getMinClassify(reportInfo)
- if err != nil {
- return
- }
- // 新增报告ES
- esReport := &models.ElasticReportDetail{
- ReportId: reportInfo.Id,
- ReportChapterId: 0,
- Title: reportInfo.Title,
- Abstract: reportInfo.Abstract,
- BodyContent: utils.TrimHtml(html.UnescapeString(reportInfo.Content)),
- PublishTime: reportInfo.PublishTime.Format(utils.FormatDateTime),
- PublishState: publishState,
- Author: reportInfo.Author,
- ClassifyIdFirst: reportInfo.ClassifyIdFirst,
- ClassifyNameFirst: reportInfo.ClassifyNameFirst,
- ClassifyIdSecond: reportInfo.ClassifyIdSecond,
- ClassifyNameSecond: reportInfo.ClassifyNameSecond,
- ClassifyId: minClassifyId,
- ClassifyName: minClassifyName,
- Categories: categories,
- StageStr: strconv.Itoa(reportInfo.Stage),
- }
- docId := fmt.Sprintf("%d-%d", reportInfo.Id, 0)
- if err = EsAddOrEditReport(utils.EsReportIndexName, docId, esReport); err != nil {
- return
- }
- return
- }
- // updateReportChapterEsByChapter
- // @Description: 通过章节详情更新报告章节ES
- // @author: Roc
- // @datetime 2024-06-20 13:16:11
- // @param chapterInfo *models.ReportChapter
- // @return err error
- func updateReportChapterEsByChapter(chapterInfo *models.ReportChapter) (err error) {
- // 章节对应的品种
- obj := report.ReportChapterPermissionMapping{}
- permissionList, tmpErr := obj.GetPermissionItemListById(chapterInfo.ReportChapterId)
- if tmpErr != nil {
- return
- }
- categoryArr := make([]string, 0)
- if len(permissionList) > 0 {
- for ii := 0; ii < len(permissionList); ii++ {
- categoryArr = append(categoryArr, permissionList[ii].ChartPermissionName)
- }
- }
- aliasArr, _ := addCategoryAliasToArr(categoryArr)
- categories := strings.Join(aliasArr, ",")
- // 新增/编辑ES
- esChapter := &models.ElasticReportDetail{
- ReportId: chapterInfo.ReportId,
- ReportChapterId: chapterInfo.ReportChapterId,
- Title: chapterInfo.Title,
- Abstract: chapterInfo.Abstract,
- BodyContent: utils.TrimHtml(html.UnescapeString(chapterInfo.Content)),
- PublishTime: chapterInfo.PublishTime.Format(utils.FormatDateTime),
- PublishState: chapterInfo.PublishState,
- Author: chapterInfo.Author,
- ClassifyIdFirst: chapterInfo.ClassifyIdFirst,
- ClassifyNameFirst: chapterInfo.ClassifyNameFirst,
- ClassifyIdSecond: 0,
- ClassifyNameSecond: "",
- ClassifyId: chapterInfo.ClassifyIdFirst,
- ClassifyName: chapterInfo.ClassifyNameFirst,
- Categories: categories,
- StageStr: strconv.Itoa(chapterInfo.Stage),
- }
- chapterDocId := fmt.Sprintf("%d-%d", chapterInfo.ReportId, chapterInfo.ReportChapterId)
- if err = EsAddOrEditReport(utils.EsReportIndexName, chapterDocId, esChapter); err != nil {
- return
- }
- return
- }
- // addCategoryAliasToArr 品种别名
- func addCategoryAliasToArr(categoryArr []string) (aliasArr []string, err error) {
- aliasArr = categoryArr
- if len(categoryArr) > 0 {
- for i := 0; i < len(categoryArr); i++ {
- if strings.Contains(categoryArr[i], "沥青") {
- aliasArr = append(aliasArr, "BU")
- }
- if strings.Contains(categoryArr[i], "MEG") {
- aliasArr = append(aliasArr, "EG", "乙二醇")
- }
- if strings.Contains(categoryArr[i], "聚酯") {
- aliasArr = append(aliasArr, "长丝", "短纤", "瓶片")
- }
- if strings.Contains(categoryArr[i], "纯苯+苯乙烯") {
- aliasArr = append(aliasArr, "EB")
- }
- if strings.Contains(categoryArr[i], "聚乙烯") {
- aliasArr = append(aliasArr, "PP", "PE")
- }
- if strings.Contains(categoryArr[i], "玻璃纯碱") {
- aliasArr = append(aliasArr, "玻璃", "纯碱", "FG", "SA")
- }
- if strings.Contains(categoryArr[i], "甲醇") {
- aliasArr = append(aliasArr, "甲醇", "MA")
- }
- if strings.Contains(categoryArr[i], "橡胶") {
- aliasArr = append(aliasArr, "橡胶", "RU")
- }
- }
- }
- return
- }
- // getMinClassify
- // @Description: 获取最小分类ID
- // @author: Roc
- // @datetime 2024-06-20 09:23:19
- // @param reportInfo *models.Report
- // @return minClassifyId int
- // @return minClassifyName string
- // @return err error
- func getMinClassify(reportInfo *models.Report) (minClassifyId int, minClassifyName string, err error) {
- defer func() {
- if err != nil {
- utils.FileLog.Error("获取最小分类ID失败,报告ID:%d,Err:%s", reportInfo.Id, err.Error())
- }
- }()
- minClassifyId = reportInfo.ClassifyIdThird
- minClassifyName = reportInfo.ClassifyNameThird
- if minClassifyId <= 0 {
- minClassifyId = reportInfo.ClassifyIdSecond
- minClassifyName = reportInfo.ClassifyNameSecond
- }
- if minClassifyId <= 0 {
- minClassifyId = reportInfo.ClassifyIdFirst
- minClassifyName = reportInfo.ClassifyNameFirst
- }
- if minClassifyId <= 0 {
- err = errors.New("分类异常")
- }
- return
- }
- // UpdateReportEs 更新报告/章节Es
- //func UpdateReportEs(reportId int, publishState int) (err error) {
- // if reportId <= 0 {
- // return
- // }
- // reportInfo, err := models.GetReportByReportId(reportId)
- // if err != nil {
- // return
- // }
- // categories := ""
- //
- // // 新增报告ES
- // esReport := &models.ElasticReportDetail{
- // ReportId: reportInfo.Id,
- // ReportChapterId: 0,
- // Title: reportInfo.Title,
- // Abstract: reportInfo.Abstract,
- // BodyContent: utils.TrimHtml(html.UnescapeString(reportInfo.Content)),
- // PublishTime: reportInfo.PublishTime.Format(utils.FormatDateTime),
- // PublishState: publishState,
- // Author: reportInfo.Author,
- // ClassifyIdFirst: reportInfo.ClassifyIdFirst,
- // ClassifyNameFirst: reportInfo.ClassifyNameFirst,
- // ClassifyIdSecond: reportInfo.ClassifyIdSecond,
- // ClassifyNameSecond: reportInfo.ClassifyNameSecond,
- // Categories: categories,
- // StageStr: strconv.Itoa(reportInfo.Stage),
- // }
- // docId := fmt.Sprintf("%d-%d", reportInfo.Id, 0)
- // if err = EsAddOrEditReport(utils.EsReportIndexName, docId, esReport); err != nil {
- // return
- // }
- //
- // return
- //}
- // GetParentClassifyListByParentIdList
- // @Description: 递归获取父级分类信息,正常来讲只有三次
- // @author: Roc
- // @datetime 2024-06-19 13:23:33
- // @param parentClassifyIdList []int
- // @return list []*models.ClassifyList
- // @return err error
- func GetParentClassifyListByParentIdList(parentClassifyIdList []int) (list []*models.ClassifyListV2, err error) {
- num := len(parentClassifyIdList)
- if num <= 0 {
- return
- }
- list, err = models.GetClassifyListByParentIdList(parentClassifyIdList)
- if err != nil {
- return
- }
- // 是否还有上级
- {
- currParentClassifyIdList := make([]int, 0)
- for _, v := range list {
- if v.ParentId > 0 {
- currParentClassifyIdList = append(currParentClassifyIdList, v.ParentId)
- }
- }
- if len(currParentClassifyIdList) > 0 {
- tmpList, tmpErr := GetParentClassifyListByParentIdList(currParentClassifyIdList)
- if tmpErr != nil {
- err = tmpErr
- return
- }
- list = append(tmpList, list...)
- }
- }
- return
- }
- // GetClassifyListTreeRecursive
- // @Description: 递归获取分类树形结构
- // @author: Roc
- // @datetime 2024-06-19 13:23:28
- // @param list []*models.ClassifyList
- // @param parentId int
- // @return []*models.ClassifyListV2
- func GetClassifyListTreeRecursive(list []*models.ClassifyListV2, parentId int) []*models.ClassifyListV2 {
- res := make([]*models.ClassifyListV2, 0)
- for _, v := range list {
- if v.ParentId == parentId {
- v.Child = GetClassifyListTreeRecursive(list, v.Id)
- res = append(res, v)
- }
- }
- // 前端的JP需要我这么返回
- //if len(res) <= 0 {
- // res = nil
- //}
- return res
- }
- // BySortAndCreateTime 用来排序,先按Sort字段升序排序,若Sort相同,则按照CreateTime字段升序排序。
- type BySortAndCreateTime []*models.ClassifyListV2
- func (a BySortAndCreateTime) Len() int {
- return len(a)
- }
- func (a BySortAndCreateTime) Swap(i, j int) {
- a[i], a[j] = a[j], a[i]
- }
- func (a BySortAndCreateTime) Less(i, j int) bool {
- if a[i].Sort == a[j].Sort {
- return a[i].CreateTime.Before(a[j].CreateTime)
- }
- return a[i].Sort < a[j].Sort
- }
- // SortClassifyListBySortAndCreateTime sorts the ClassifyList slice by Sort and then CreateTime in ascending order.
- func SortClassifyListBySortAndCreateTime(classifyList []*models.ClassifyListV2) {
- sort.Sort(BySortAndCreateTime(classifyList))
- }
|