es_comprehensive.go 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336
  1. package services
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/PuerkitoBio/goquery"
  7. "github.com/olivere/elastic/v7"
  8. "strconv"
  9. //"go/doc"
  10. "hongze/hongze_cygx/models"
  11. "hongze/hongze_cygx/utils"
  12. "html"
  13. //"strconv"
  14. "errors"
  15. "strings"
  16. "time"
  17. )
  18. type SearchComprehensiveItem struct {
  19. SourceId int `description:"资源ID"`
  20. IsSummary int `description:"是否是纪要"`
  21. Source string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial 、 本周研究汇总: researchsummary 、 上周纪要汇总 :minutessummary 、晨会精华 :meetingreviewchapt 、 产品内测:productinterior"`
  22. Title string `description:"标题"`
  23. BodyText string `description:"内容"`
  24. PublishDate string `description:"发布时间"`
  25. Abstract string `description:"摘要"`
  26. Annotation string `description:"核心观点"`
  27. IndustryName string `description:"产业名称"`
  28. SubjectNames string `description:"标的名称"`
  29. Body []string
  30. }
  31. type ElasticComprehensiveDetail struct {
  32. SourceId int `description:"资源ID"`
  33. IsSummary int `description:"是否是纪要"`
  34. Source string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial 、 本周研究汇总: researchsummary 、 上周纪要汇总 :minutessummary 、晨会精华 :meetingreviewchapt 、 产品内测:productinterior 、 产业资源包:industrialsource"`
  35. Title string `description:"标题"`
  36. BodyText string `description:"内容"`
  37. PublishDate string `description:"发布时间"`
  38. Abstract string `description:"摘要"`
  39. Annotation string `description:"核心观点"`
  40. IndustryName string `description:"产业名称"`
  41. SubjectNames string `description:"标的名称"`
  42. }
  43. func init() {
  44. AddComprehensiveIndustrialSource("Yx", 0)
  45. }
  46. // 添加文章:报告、纪要
  47. func AddComprehensiveArticle(articleId int) {
  48. var err error
  49. defer func() {
  50. if err != nil {
  51. fmt.Println(err)
  52. go utils.SendAlarmMsg("删除数据综合页面数据Es失败"+err.Error(), 2)
  53. }
  54. }()
  55. var condition string
  56. var pars []interface{}
  57. condition += ` AND publish_status = 1 `
  58. if articleId > 0 {
  59. condition = ` AND article_id = ? `
  60. pars = append(pars, articleId)
  61. }
  62. articleList, e := models.GetArticleList(condition, pars)
  63. if e != nil {
  64. err = errors.New("GetArticleList, Err: " + e.Error())
  65. return
  66. }
  67. //indexName := utils.IndexNameComprehensive
  68. for _, v := range articleList {
  69. content := html.UnescapeString(v.Body)
  70. doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
  71. if err != nil {
  72. fmt.Println("create doc err:", err.Error())
  73. return
  74. }
  75. bodyText := doc.Text()
  76. item := new(ElasticComprehensiveDetail)
  77. item.SourceId = v.ArticleId
  78. item.IsSummary = v.IsSummary
  79. item.Source = "article"
  80. item.Title = v.Title
  81. item.PublishDate = v.PublishDate
  82. item.BodyText = bodyText
  83. item.Annotation, _ = GetReportContentTextSubNew(v.Annotation)
  84. item.Abstract, _ = GetReportContentTextSubNew(v.Abstract)
  85. EsAddOrEditComprehensiveData(item)
  86. fmt.Println(v.ArticleId)
  87. }
  88. }
  89. // 添加图表
  90. func AddComprehensiveChart(chartId int) {
  91. var err error
  92. defer func() {
  93. if err != nil {
  94. fmt.Println(err)
  95. go utils.SendAlarmMsg("AddComprehensiveChart Err"+err.Error()+fmt.Sprint(chartId), 2)
  96. }
  97. }()
  98. var condition string
  99. var pars []interface{}
  100. condition += ` AND publish_status = 1 `
  101. if chartId > 0 {
  102. condition = ` AND chart_id = ? `
  103. pars = append(pars, chartId)
  104. }
  105. list, e := models.GetChartList(condition, pars, 0, 1000000)
  106. if e != nil {
  107. err = errors.New("GetChartList, Err: " + e.Error())
  108. return
  109. }
  110. //indexName := utils.IndexNameComprehensive
  111. for _, v := range list {
  112. item := new(ElasticComprehensiveDetail)
  113. item.SourceId = v.ChartId
  114. item.Source = "newchart"
  115. item.Title = v.Title
  116. item.PublishDate = v.CreateDate
  117. EsAddOrEditComprehensiveData(item)
  118. fmt.Println(v.ChartId)
  119. }
  120. }
  121. // 添加产业资源包
  122. func AddComprehensiveIndustrialSource(sourceType string, articleId int) {
  123. var err error
  124. defer func() {
  125. if err != nil {
  126. fmt.Println(err)
  127. go utils.SendAlarmMsg("AddComprehensiveIndustrialSource"+err.Error(), 2)
  128. }
  129. }()
  130. var condition string
  131. var pars []interface{}
  132. mapActivitySubject := make(map[int][]string, 0)
  133. listsubject, e := models.GetCygxIndustrialSubjectListCondition(condition, pars)
  134. if e != nil {
  135. err = errors.New("GetIndustrialManagementRepList, Err: " + e.Error())
  136. return
  137. }
  138. for _, v := range listsubject {
  139. mapActivitySubject[v.IndustrialManagementId] = append(mapActivitySubject[v.IndustrialManagementId], v.SubjectName)
  140. }
  141. var industrialsource string
  142. if sourceType == "Hz" {
  143. condition = " AND a.article_type_id = 0 " // 弘则资源包
  144. industrialsource = "industrialsourceHz"
  145. } else {
  146. condition = " AND a.article_type_id > 0 " //研选资源包
  147. industrialsource = "industrialsourceYx"
  148. }
  149. if articleId > 0 {
  150. condition += " AND a.article_id = " + strconv.Itoa(articleId)
  151. }
  152. list, err := models.GetSearchResourceList(0, condition, 0, 0)
  153. if err != nil {
  154. fmt.Println(err)
  155. return
  156. }
  157. //indexName := utils.IndexNameComprehensive
  158. for _, v := range list {
  159. item := new(ElasticComprehensiveDetail)
  160. item.SourceId = v.IndustrialManagementId
  161. item.Source = industrialsource
  162. item.IndustryName = v.IndustryName
  163. item.SubjectNames = strings.Join(mapActivitySubject[v.IndustrialManagementId], ",")
  164. item.PublishDate = v.PublishDate
  165. EsAddOrEditComprehensiveData(item)
  166. fmt.Println(item)
  167. }
  168. }
  169. // 添加晨会精华
  170. func AddComprehensiveMeetingreviewchapt() {
  171. var condition string
  172. var pars []interface{}
  173. IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap()
  174. list, err := models.GetCygxMorningMeetingReviewChapterList(condition, pars)
  175. if err != nil {
  176. fmt.Println(err)
  177. return
  178. }
  179. //indexName := utils.IndexNameComprehensive
  180. for _, v := range list {
  181. content := html.UnescapeString(v.Content)
  182. doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
  183. if err != nil {
  184. fmt.Println("create doc err:", err.Error())
  185. return
  186. }
  187. bodyText := doc.Text()
  188. item := new(ElasticComprehensiveDetail)
  189. item.SourceId = v.Id
  190. item.Source = "meetingreviewchapt"
  191. item.IndustryName = IndustrialManagementRespMap[v.IndustryId]
  192. item.PublishDate = v.PublishTime
  193. item.BodyText = bodyText
  194. EsAddOrEditComprehensiveData(item)
  195. fmt.Println(item)
  196. }
  197. }
  198. // 添加活动
  199. func AddComprehensiveActivity() {
  200. var condition string
  201. var pars []interface{}
  202. condition = ` AND publish_status = 1 `
  203. //condition = ` AND publish_status = 1 AND activity_id = 2407 `
  204. list, err := models.GetCygxActivityList(condition, pars, 0, 100000)
  205. if err != nil {
  206. fmt.Println(err)
  207. return
  208. }
  209. IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap()
  210. IndustrialSubjectMap, _ := GetCygxIndustrialSubjectMap()
  211. var condition1 string
  212. var pars1 []interface{}
  213. mapActivityIndustrialManagement := make(map[int][]string)
  214. industrialgroupList, e := models.GetCygxIndustrialActivityGroupManagementList(condition1+" AND source = 1 ", pars1)
  215. if e != nil {
  216. fmt.Println(e)
  217. return
  218. }
  219. for _, v := range industrialgroupList {
  220. if v.ActivityId == 0 {
  221. continue
  222. }
  223. mapActivityIndustrialManagement[v.ActivityId] = append(mapActivityIndustrialManagement[v.ActivityId], IndustrialManagementRespMap[v.IndustrialManagementId])
  224. }
  225. mapActivitySubject := make(map[int][]string)
  226. SubjectgroupList, e := models.GetCygxIndustrialActivityGroupSubjectList(condition1+" AND source = 1 ", pars1)
  227. if e != nil {
  228. fmt.Println(e)
  229. return
  230. }
  231. for _, v := range SubjectgroupList {
  232. if v.ActivityId == 0 {
  233. continue
  234. }
  235. mapActivitySubject[v.ActivityId] = append(mapActivitySubject[v.ActivityId], IndustrialSubjectMap[v.IndustrialSubjectId])
  236. }
  237. fmt.Println(mapActivitySubject[141])
  238. fmt.Println(mapActivityIndustrialManagement[141])
  239. //return
  240. for _, v := range list {
  241. item := new(ElasticComprehensiveDetail)
  242. item.SourceId = v.ActivityId
  243. //item.IsSummary = v.IsSummary
  244. item.Source = "activity"
  245. //item.SubjectNames = json.Sprint(mapActivitySubject[v.ActivityId])
  246. item.SubjectNames = strings.Join(mapActivitySubject[v.ActivityId], ",")
  247. item.IndustryName = strings.Join(mapActivityIndustrialManagement[v.ActivityId], ",")
  248. item.Title = v.ActivityName
  249. item.PublishDate = v.ActivityTime
  250. //item.BodyText = bodyText
  251. //item.Annotation, _ = GetReportContentTextSubNew(v.Annotation)
  252. //item.Abstract, _ = GetReportContentTextSubNew(v.Abstract)
  253. //EsAddOrEditComprehensiveData(indexName, item)
  254. EsAddOrEditComprehensiveData(item)
  255. fmt.Println(item)
  256. }
  257. }
  258. // 添加专项调研活动
  259. func AddComprehensiveActivitySpecial() {
  260. var condition string
  261. var pars []interface{}
  262. condition = ` AND publish_status = 1 `
  263. list, err := models.GetActivitySpecialListAll(condition, pars, 0, 100000)
  264. if err != nil {
  265. fmt.Println(err)
  266. return
  267. }
  268. //indexName := utils.IndexNameComprehensive
  269. IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap() // 产业标签
  270. IndustrialSubjectMap, _ := GetCygxIndustrialSubjectMap() // 标的标签
  271. var condition1 string
  272. var pars1 []interface{}
  273. mapActivityIndustrialManagement := make(map[int][]string)
  274. industrialgroupList, e := models.GetCygxIndustrialActivityGroupManagementList(condition1+" AND source = 2 ", pars1)
  275. if e != nil {
  276. fmt.Println(e)
  277. return
  278. }
  279. for _, v := range industrialgroupList {
  280. if v.ActivityId == 0 {
  281. continue
  282. }
  283. mapActivityIndustrialManagement[v.ActivityId] = append(mapActivityIndustrialManagement[v.ActivityId], IndustrialManagementRespMap[v.IndustrialManagementId])
  284. }
  285. mapActivitySubject := make(map[int][]string)
  286. SubjectgroupList, e := models.GetCygxIndustrialActivityGroupSubjectList(condition1+" AND source = 2 ", pars1)
  287. if e != nil {
  288. fmt.Println(e)
  289. return
  290. }
  291. for _, v := range SubjectgroupList {
  292. if v.ActivityId == 0 {
  293. continue
  294. }
  295. mapActivitySubject[v.ActivityId] = append(mapActivitySubject[v.ActivityId], IndustrialSubjectMap[v.IndustrialSubjectId])
  296. }
  297. for _, v := range list {
  298. item := new(ElasticComprehensiveDetail)
  299. item.SourceId = v.ActivityId
  300. item.Source = "activityspecial"
  301. item.Title = v.ResearchTheme
  302. item.PublishDate = v.ActivityTime
  303. if v.ActivityTime == utils.FormatDateTimeInit {
  304. item.PublishDate = v.LastUpdatedTime.Format(utils.FormatDateTime)
  305. } else {
  306. item.PublishDate = v.ActivityTime
  307. }
  308. item.SubjectNames = strings.Join(mapActivitySubject[v.ActivityId], ",")
  309. item.IndustryName = strings.Join(mapActivityIndustrialManagement[v.ActivityId], ",")
  310. EsAddOrEditComprehensiveData(item)
  311. }
  312. }
  313. // 添加活动视频
  314. func AddComprehensiveActivityVideo() {
  315. var err error
  316. defer func() {
  317. if err != nil {
  318. fmt.Println(err)
  319. go utils.SendAlarmMsg("添加活动视频综合页面数据Es失败"+err.Error(), 2)
  320. }
  321. }()
  322. var condition string
  323. var pars []interface{}
  324. list, e := models.GetActivityVideoListAll(condition, pars, 0, 100000)
  325. if e != nil {
  326. err = errors.New("GetActivityVideoListAll, Err: " + e.Error())
  327. return
  328. }
  329. if len(list) == 0 {
  330. return
  331. }
  332. var activityIds []int
  333. for _, v := range list {
  334. activityIds = append(activityIds, v.ActivityId)
  335. }
  336. pars = make([]interface{}, 0)
  337. condition = ` AND publish_status = 1 AND art.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)`
  338. pars = append(pars, activityIds)
  339. listArt, e := models.GetCygxActivityList(condition, pars, 0, 100000)
  340. if e != nil {
  341. err = errors.New("GetCygxActivityList, Err: " + e.Error())
  342. return
  343. }
  344. mapActivity := make(map[int]string)
  345. for _, v := range listArt {
  346. mapActivity[v.ActivityId] = v.ActivityName
  347. }
  348. IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap()
  349. IndustrialSubjectMap, _ := GetCygxIndustrialSubjectMap()
  350. var condition1 string
  351. var pars1 []interface{}
  352. mapActivityIndustrialManagement := make(map[int][]string)
  353. industrialgroupList, e := models.GetCygxIndustrialActivityGroupManagementList(condition1+" AND source = 1 ", pars1)
  354. if e != nil {
  355. fmt.Println(e)
  356. return
  357. }
  358. //产业名称
  359. for _, v := range industrialgroupList {
  360. if v.ActivityId == 0 {
  361. continue
  362. }
  363. mapActivityIndustrialManagement[v.ActivityId] = append(mapActivityIndustrialManagement[v.ActivityId], IndustrialManagementRespMap[v.IndustrialManagementId])
  364. }
  365. //标的名称
  366. mapActivitySubject := make(map[int][]string)
  367. SubjectgroupList, e := models.GetCygxIndustrialActivityGroupSubjectList(condition1+" AND source = 1 ", pars1)
  368. if e != nil {
  369. fmt.Println(e)
  370. return
  371. }
  372. for _, v := range SubjectgroupList {
  373. if v.ActivityId == 0 {
  374. continue
  375. }
  376. mapActivitySubject[v.ActivityId] = append(mapActivitySubject[v.ActivityId], IndustrialSubjectMap[v.IndustrialSubjectId])
  377. }
  378. //indexName := utils.IndexNameComprehensive
  379. for _, v := range list {
  380. item := new(ElasticComprehensiveDetail)
  381. item.SourceId = v.ActivityId
  382. item.Source = "activityvideo"
  383. item.Title = v.Title
  384. item.PublishDate = v.ActivityTime
  385. item.BodyText = mapActivity[v.ActivityId]
  386. item.SubjectNames = strings.Join(mapActivitySubject[v.ActivityId], ",")
  387. item.IndustryName = strings.Join(mapActivityIndustrialManagement[v.ActivityId], ",")
  388. EsAddOrEditComprehensiveData(item)
  389. fmt.Println(item)
  390. }
  391. }
  392. // 添加活动音频
  393. func AddComprehensiveActivityVoice() {
  394. var err error
  395. defer func() {
  396. if err != nil {
  397. fmt.Println(err)
  398. go utils.SendAlarmMsg("AddComprehensiveActivityVoice"+err.Error(), 2)
  399. }
  400. }()
  401. var condition string
  402. var pars []interface{}
  403. list, err := models.GetActivityVoiceList(condition, pars, 0, 100000)
  404. if err != nil {
  405. fmt.Println(err)
  406. return
  407. }
  408. if len(list) == 0 {
  409. return
  410. }
  411. var activityIds []int
  412. for _, v := range list {
  413. activityIds = append(activityIds, v.ActivityId)
  414. }
  415. pars = make([]interface{}, 0)
  416. condition = ` AND publish_status = 1 AND art.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)`
  417. pars = append(pars, activityIds)
  418. listArt, e := models.GetCygxActivityList(condition, pars, 0, 100000)
  419. if e != nil {
  420. err = errors.New("GetCygxActivityList, Err: " + e.Error())
  421. return
  422. }
  423. mapActivity := make(map[int]string)
  424. for _, v := range listArt {
  425. mapActivity[v.ActivityId] = v.ActivityName
  426. }
  427. IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap()
  428. IndustrialSubjectMap, _ := GetCygxIndustrialSubjectMap()
  429. var condition1 string
  430. var pars1 []interface{}
  431. mapActivityIndustrialManagement := make(map[int][]string)
  432. industrialgroupList, e := models.GetCygxIndustrialActivityGroupManagementList(condition1+" AND source = 1 ", pars1)
  433. if e != nil {
  434. fmt.Println(e)
  435. return
  436. }
  437. //产业名称
  438. for _, v := range industrialgroupList {
  439. if v.ActivityId == 0 {
  440. continue
  441. }
  442. mapActivityIndustrialManagement[v.ActivityId] = append(mapActivityIndustrialManagement[v.ActivityId], IndustrialManagementRespMap[v.IndustrialManagementId])
  443. }
  444. //标的名称
  445. mapActivitySubject := make(map[int][]string)
  446. SubjectgroupList, e := models.GetCygxIndustrialActivityGroupSubjectList(condition1+" AND source = 1 ", pars1)
  447. if e != nil {
  448. fmt.Println(e)
  449. return
  450. }
  451. for _, v := range SubjectgroupList {
  452. if v.ActivityId == 0 {
  453. continue
  454. }
  455. mapActivitySubject[v.ActivityId] = append(mapActivitySubject[v.ActivityId], IndustrialSubjectMap[v.IndustrialSubjectId])
  456. }
  457. //indexName := utils.IndexNameComprehensive
  458. for _, v := range list {
  459. item := new(ElasticComprehensiveDetail)
  460. item.SourceId = v.ActivityId
  461. item.Source = "activityvoice"
  462. item.Title = v.VoiceName
  463. item.PublishDate = v.ActivityTime
  464. item.BodyText = mapActivity[v.ActivityId]
  465. item.SubjectNames = strings.Join(mapActivitySubject[v.ActivityId], ",")
  466. item.IndustryName = strings.Join(mapActivityIndustrialManagement[v.ActivityId], ",")
  467. EsAddOrEditComprehensiveData(item)
  468. fmt.Println(item)
  469. }
  470. }
  471. // 微路演
  472. func AddComprehensiveRoadshow() {
  473. var condition string
  474. var pars []interface{}
  475. IndustrialManagementRespMap, _ := GetIndustrialManagementRespMap()
  476. list, err := models.GetMicroRoadshowVideoListBycondition(condition, pars, 0, 100000)
  477. if err != nil {
  478. fmt.Println(err)
  479. return
  480. }
  481. //indexName := utils.IndexNameComprehensive
  482. for _, v := range list {
  483. item := new(ElasticComprehensiveDetail)
  484. item.SourceId = v.VideoId
  485. item.Source = "roadshow"
  486. item.IndustryName = IndustrialManagementRespMap[v.IndustryId]
  487. item.Title = v.VideoName
  488. item.PublishDate = v.PublishDate.Format(utils.FormatDateTime)
  489. EsAddOrEditComprehensiveData(item)
  490. fmt.Println(item)
  491. }
  492. }
  493. // 新增和修改数据
  494. func EsAddOrEditComprehensiveData(item *ElasticComprehensiveDetail) (err error) {
  495. indexName := utils.IndexNameComprehensive
  496. //return
  497. defer func() {
  498. if err != nil {
  499. fmt.Println(err, item.SourceId)
  500. //go utils.SendAlarmMsg("更新综合页面数据Es失败"+err.Error()+fmt.Sprint(item), 2)
  501. }
  502. }()
  503. client := utils.Client
  504. mustMap := make([]interface{}, 0)
  505. mustMap = append(mustMap, map[string]interface{}{
  506. "term": map[string]interface{}{
  507. "SourceId": item.SourceId,
  508. },
  509. })
  510. mustMap = append(mustMap, map[string]interface{}{
  511. "term": map[string]interface{}{
  512. "Source": item.Source,
  513. },
  514. })
  515. queryMap := map[string]interface{}{
  516. "query": map[string]interface{}{
  517. "bool": map[string]interface{}{
  518. "must": mustMap,
  519. },
  520. },
  521. }
  522. requestTotalHits := client.Count(indexName).BodyJson(queryMap)
  523. total, e := requestTotalHits.Do(context.Background())
  524. if e != nil {
  525. err = errors.New("requestTotalHits.Do(context.Background()), Err: " + e.Error())
  526. return
  527. }
  528. //return
  529. //根据来源以及ID ,判断内容是否存在,如果存在就新增,如果不存在就修改
  530. if total == 0 {
  531. resp, e := client.Index().Index(indexName).BodyJson(item).Do(context.Background())
  532. if e != nil {
  533. err = errors.New("client.Index().Index(indexName).BodyJson(item).Do(context.Background()), Err: " + e.Error())
  534. return
  535. }
  536. if resp.Status == 0 && resp.Result == "created" {
  537. //fmt.Println("新增成功")
  538. //err = nil
  539. return
  540. } else {
  541. //err = errors.New(fmt.Sprint(resp))
  542. err = errors.New(fmt.Sprint("articleId", item.SourceId))
  543. return
  544. }
  545. } else {
  546. //拼接需要改动的前置条件
  547. bool_query := elastic.NewBoolQuery()
  548. bool_query.Must(elastic.NewTermQuery("SourceId", item.SourceId))
  549. bool_query.Must(elastic.NewTermQuery("Source", item.Source))
  550. //设置需要改动的内容
  551. var script string
  552. script += fmt.Sprint("ctx._source['SubjectNames'] = '", item.SubjectNames, "';")
  553. script += fmt.Sprint("ctx._source['PublishDate'] = '", item.PublishDate, "';")
  554. script += fmt.Sprint("ctx._source['IsSummary'] = ", item.IsSummary, ";")
  555. script += fmt.Sprint("ctx._source['Abstract'] = '", item.Abstract, "';")
  556. script += fmt.Sprint("ctx._source['Title'] = '", item.Title, "';")
  557. script += fmt.Sprint("ctx._source['BodyText'] = '", item.BodyText, "';")
  558. script += fmt.Sprint("ctx._source['Annotation'] = '", item.Annotation, "';")
  559. script += fmt.Sprint("ctx._source['IndustryName'] = '", item.IndustryName, "'")
  560. _, e = client.UpdateByQuery(indexName).
  561. Query(bool_query).
  562. Script(elastic.NewScriptInline(script)).
  563. Refresh("true").
  564. Do(context.Background())
  565. if e != nil && e.Error() != "elastic: Error 400 (Bad Request): compile error [type=script_exception]" {
  566. //文本内容过长的时候,修改会报 400 的错误,暂时先不处理
  567. //fmt.Println("err", e.Error())
  568. ////err = e
  569. //err = errors.New("client.UpdateByQuery(indexName), Err: " + e.Error())
  570. return
  571. }
  572. }
  573. return
  574. }
  575. // 删除数据
  576. func EsDeleteComprehensiveData(item *ElasticComprehensiveDetail) (err error) {
  577. defer func() {
  578. if err != nil {
  579. fmt.Println(err)
  580. go utils.SendAlarmMsg("删除数据综合页面数据Es失败"+err.Error()+fmt.Sprint(item), 2)
  581. }
  582. }()
  583. indexName := utils.IndexNameComprehensive
  584. client := utils.Client
  585. //拼接需要删除的前置条件
  586. bool_query := elastic.NewBoolQuery()
  587. bool_query.Must(elastic.NewTermQuery("SourceId", item.SourceId))
  588. bool_query.Must(elastic.NewTermQuery("Source", item.Source))
  589. _, e := client.DeleteByQuery(indexName).
  590. Query(bool_query).
  591. Do(context.Background())
  592. if e != nil {
  593. err = errors.New(" client.DeleteByQuery(indexName), Err: " + e.Error())
  594. return
  595. }
  596. return
  597. }
  598. func EsComprehensiveSearch(keyWord string, startSize, pageSize int) (result []*SearchComprehensiveItem, total int64, err error) {
  599. indexName := utils.IndexNameComprehensive
  600. client := utils.Client
  601. var keyWordArr []string
  602. keyWordArr = append(keyWordArr, keyWord)
  603. //Es 的高级查询有 自定义排序 文档一时半会儿撸不懂,先做多次查询手动过滤 2023.2.2
  604. //ikType 查询方式 ,0:查所有 、 1:查询键入词 、 2:查询除了查询键入词之外的联想词
  605. mustMap := make([]interface{}, 0)
  606. shouldMap := make(map[string]interface{}, 0)
  607. shouldMapquery := make([]interface{}, 0)
  608. mustNotMap := make([]interface{}, 0)
  609. shouldNotMap := make(map[string]interface{}, 0)
  610. shouldNotMapquery := make([]interface{}, 0)
  611. var boost int
  612. //lenkeyWordArr := len(keyWordArr)
  613. for k, v := range keyWordArr {
  614. if k > 0 {
  615. continue
  616. }
  617. if k == 0 {
  618. boost = 2 * 1000
  619. } else {
  620. boost = 1
  621. }
  622. if v != "" {
  623. shouldMapquery = append(shouldMapquery, map[string]interface{}{
  624. "function_score": map[string]interface{}{
  625. "query": map[string]interface{}{
  626. "multi_match": map[string]interface{}{
  627. //"boost": (lenkeyWordArr - k) * boost, //给查询的值赋予权重
  628. "boost": boost, //给查询的值赋予权重
  629. "fields": []interface{}{"Title"},
  630. "query": v,
  631. },
  632. },
  633. },
  634. })
  635. shouldMapquery = append(shouldMapquery, map[string]interface{}{
  636. "function_score": map[string]interface{}{
  637. "query": map[string]interface{}{
  638. "multi_match": map[string]interface{}{
  639. "boost": boost, //给查询的值赋予权重
  640. "fields": []interface{}{"Abstract"},
  641. "query": v,
  642. },
  643. },
  644. },
  645. })
  646. shouldMapquery = append(shouldMapquery, map[string]interface{}{
  647. "function_score": map[string]interface{}{
  648. "query": map[string]interface{}{
  649. "multi_match": map[string]interface{}{
  650. "boost": boost, //给查询的值赋予权重
  651. "fields": []interface{}{"Annotation"},
  652. "query": v,
  653. },
  654. },
  655. },
  656. })
  657. shouldMapquery = append(shouldMapquery, map[string]interface{}{
  658. "function_score": map[string]interface{}{
  659. "query": map[string]interface{}{
  660. "multi_match": map[string]interface{}{
  661. //"boost": (lenkeyWordArr-k)*boost - 1, //给查询的值赋予权重
  662. "boost": boost, //给查询的值赋予权重
  663. "fields": []interface{}{"BodyText"},
  664. "query": v,
  665. },
  666. },
  667. },
  668. })
  669. shouldMapquery = append(shouldMapquery, map[string]interface{}{
  670. "function_score": map[string]interface{}{
  671. "query": map[string]interface{}{
  672. "multi_match": map[string]interface{}{
  673. //"boost": (lenkeyWordArr-k)*boost - 1, //给查询的值赋予权重
  674. "boost": boost, //给查询的值赋予权重
  675. "fields": []interface{}{"IndustryName"},
  676. "query": v,
  677. },
  678. },
  679. },
  680. })
  681. shouldMapquery = append(shouldMapquery, map[string]interface{}{
  682. "function_score": map[string]interface{}{
  683. "query": map[string]interface{}{
  684. "multi_match": map[string]interface{}{
  685. //"boost": (lenkeyWordArr-k)*boost - 1, //给查询的值赋予权重
  686. "boost": boost, //给查询的值赋予权重
  687. "fields": []interface{}{"SubjectNames"},
  688. "query": v,
  689. },
  690. },
  691. },
  692. })
  693. }
  694. }
  695. shouldMap = map[string]interface{}{
  696. "should": shouldMapquery,
  697. }
  698. shouldNotMap = map[string]interface{}{
  699. "should": shouldNotMapquery,
  700. }
  701. //排序
  702. sortMap := make([]interface{}, 0)
  703. //时间
  704. sortMap = append(sortMap, map[string]interface{}{
  705. "PublishDate": map[string]interface{}{
  706. "order": "desc",
  707. },
  708. })
  709. //sortMap = append(sortMap, map[string]interface{}{
  710. // "_score": map[string]interface{}{
  711. // "order": "desc",
  712. // },
  713. //})
  714. //高亮
  715. highlightMap := make(map[string]interface{}, 0)
  716. highlightMap = map[string]interface{}{
  717. "fields": map[string]interface{}{
  718. "BodyText": map[string]interface{}{},
  719. "Title": map[string]interface{}{},
  720. "Abstract": map[string]interface{}{},
  721. "Annotation": map[string]interface{}{},
  722. },
  723. //样式 红色
  724. "post_tags": []interface{}{"</font>"},
  725. "pre_tags": []interface{}{"<font color='red'>"},
  726. "fragment_size": 50,
  727. }
  728. mustMap = append(mustMap, map[string]interface{}{
  729. "bool": shouldMap,
  730. })
  731. mustNotMap = append(mustNotMap, map[string]interface{}{
  732. "term": shouldNotMap,
  733. })
  734. //mustMap = append(mustMap, map[string]interface{}{
  735. // "term": map[string]interface{}{
  736. // "IsSummary": "1",
  737. // },
  738. //})
  739. queryMap := map[string]interface{}{
  740. "query": map[string]interface{}{
  741. "bool": map[string]interface{}{
  742. "must": mustMap,
  743. },
  744. },
  745. }
  746. queryMap["sort"] = sortMap
  747. queryMap["from"] = startSize
  748. queryMap["size"] = pageSize
  749. queryMap["highlight"] = highlightMap
  750. //jsonBytes, _ := json.Marshal(queryMap)
  751. //fmt.Println(string(jsonBytes))
  752. //utils.FileLog.Info(string(jsonBytes))
  753. request := client.Search(indexName).Source(queryMap) // sets the JSON request
  754. searchByMatch, err := request.Do(context.Background())
  755. if searchByMatch != nil {
  756. if searchByMatch.Hits != nil {
  757. for _, v := range searchByMatch.Hits.Hits {
  758. var isAppend bool
  759. articleJson, err := v.Source.MarshalJSON()
  760. if err != nil {
  761. return nil, 0, err
  762. }
  763. article := new(ElasticComprehensiveDetail)
  764. err = json.Unmarshal(articleJson, &article)
  765. if err != nil {
  766. return nil, 0, err
  767. }
  768. //fmt.Println(article.SourceId, article.Title, article.Source)
  769. searchItem := new(SearchComprehensiveItem)
  770. searchItem.SourceId = article.SourceId
  771. if len(v.Highlight["Annotation"]) > 0 {
  772. for _, vText := range v.Highlight["Annotation"] {
  773. searchItem.Body = append(searchItem.Body, vText)
  774. }
  775. }
  776. if len(v.Highlight["Abstract"]) > 0 {
  777. for _, vText := range v.Highlight["Abstract"] {
  778. searchItem.Body = append(searchItem.Body, vText)
  779. }
  780. }
  781. if len(v.Highlight["BodyText"]) > 0 {
  782. for _, vText := range v.Highlight["BodyText"] {
  783. searchItem.Body = append(searchItem.Body, vText)
  784. }
  785. }
  786. searchItem.IsSummary = article.IsSummary
  787. if len(searchItem.Body) == 0 {
  788. bodyRune := []rune(article.BodyText)
  789. bodyRuneLen := len(bodyRune)
  790. if bodyRuneLen > 100 {
  791. bodyRuneLen = 100
  792. }
  793. body := string(bodyRune[:bodyRuneLen])
  794. searchItem.Body = []string{body}
  795. }
  796. var title string
  797. if len(v.Highlight["Title"]) > 0 {
  798. title = v.Highlight["Title"][0]
  799. } else {
  800. title = article.Title
  801. }
  802. searchItem.Title = title
  803. searchItem.Source = article.Source
  804. searchItem.PublishDate = article.PublishDate
  805. if !isAppend {
  806. result = append(result, searchItem)
  807. }
  808. }
  809. }
  810. total = searchByMatch.Hits.TotalHits.Value
  811. }
  812. return
  813. }
  814. func GetResourceDataEsList(list []*SearchComprehensiveItem, user *models.WxUserItem) (items []*models.CygxResourceDataResp, err error) {
  815. var condition string
  816. var pars []interface{}
  817. uid := user.UserId
  818. titleHighlight := make(map[int]string)
  819. bodyHighlight := make(map[int][]string)
  820. //var bodyHighlight []string
  821. mapItems := make(map[string]*models.CygxResourceDataResp)
  822. for _, v := range list {
  823. //预处理文章
  824. item := new(models.CygxResourceDataResp)
  825. item.SourceId = v.SourceId
  826. item.Source = v.Source
  827. if v.IsSummary == 1 {
  828. item.BodyHighlight = v.Body
  829. titleHighlight[v.SourceId] = v.Title
  830. bodyHighlight[v.SourceId] = v.Body
  831. //fmt.Println(v.Title)
  832. } else {
  833. item.BodyHighlight = make([]string, 0)
  834. }
  835. item.PublishDate = utils.TimeRemoveHms2(v.PublishDate)
  836. mapItems[fmt.Sprint(v.Source, v.SourceId)] = item
  837. }
  838. var articleIds []int
  839. var newchartIds []int
  840. var roadshowIds []string
  841. var activityIds []int
  842. var activityvideoIds []string
  843. var activityvoiceIds []string
  844. var activityspecialIds []int
  845. var researchsummaryIds []int
  846. var minutessummaryIds []int
  847. var meetingreviewchaptIds []int
  848. var productinteriorIds []int
  849. var industrialResourceIds []int
  850. //Source string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial 、 本周研究汇总: researchsummary 、 上周纪要汇总 :minutessummary 、晨会精华 :meetingreviewchapt "`
  851. for _, v := range list {
  852. if v.Source == "article" {
  853. articleIds = append(articleIds, v.SourceId)
  854. } else if v.Source == "newchart" {
  855. newchartIds = append(newchartIds, v.SourceId)
  856. } else if v.Source == "roadshow" {
  857. roadshowIds = append(roadshowIds, strconv.Itoa(v.SourceId))
  858. } else if v.Source == "activity" {
  859. activityIds = append(activityIds, v.SourceId)
  860. } else if v.Source == "activityvideo" {
  861. activityvideoIds = append(activityvideoIds, strconv.Itoa(v.SourceId))
  862. } else if v.Source == "activityvoice" {
  863. activityvoiceIds = append(activityvoiceIds, strconv.Itoa(v.SourceId))
  864. } else if v.Source == "activityspecial" {
  865. activityspecialIds = append(activityspecialIds, v.SourceId)
  866. } else if v.Source == "researchsummary" {
  867. researchsummaryIds = append(researchsummaryIds, v.SourceId)
  868. } else if v.Source == "minutessummary" {
  869. minutessummaryIds = append(minutessummaryIds, v.SourceId)
  870. } else if v.Source == "meetingreviewchapt" {
  871. meetingreviewchaptIds = append(meetingreviewchaptIds, v.SourceId)
  872. } else if v.Source == "productinterior" {
  873. productinteriorIds = append(productinteriorIds, v.SourceId)
  874. } else if v.Source == "industrialsource" {
  875. industrialResourceIds = append(industrialResourceIds, v.SourceId)
  876. }
  877. }
  878. //处理文章
  879. if len(articleIds) > 0 {
  880. pars = make([]interface{}, 0)
  881. condition = ` AND a.article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `)`
  882. pars = append(pars, articleIds)
  883. listArticle, e := models.GetHomeList(condition, pars, 0, len(articleIds))
  884. if e != nil {
  885. err = errors.New("GetResourceDataList, Err: " + e.Error())
  886. return
  887. }
  888. listArticle, e = HandleArticleCategoryImg(listArticle)
  889. if e != nil {
  890. err = errors.New("HandleArticleCategoryImg, Err: " + e.Error())
  891. return
  892. }
  893. for _, v := range listArticle {
  894. v.Body = ""
  895. v.BodyHtml = ""
  896. if titleHighlight[v.ArticleId] != "" {
  897. v.Title = titleHighlight[v.ArticleId]
  898. }
  899. if len(bodyHighlight[v.ArticleId]) > 0 {
  900. v.Abstract = ""
  901. v.Annotation = ""
  902. v.BodyHighlight = bodyHighlight[v.ArticleId]
  903. } else {
  904. v.BodyHighlight = make([]string, 0)
  905. }
  906. mapItems[fmt.Sprint("article", v.ArticleId)].Article = v
  907. }
  908. }
  909. //处理晨会精华
  910. if len(meetingreviewchaptIds) > 0 {
  911. pars = make([]interface{}, 0)
  912. condition = ` AND c.id IN (` + utils.GetOrmInReplace(len(meetingreviewchaptIds)) + `)`
  913. pars = append(pars, meetingreviewchaptIds)
  914. listrMeet, e := models.GetCygxMorningMeetingReviewChapterList(condition, pars)
  915. if e != nil {
  916. err = errors.New("GetResourceDataList, Err: " + e.Error())
  917. return
  918. }
  919. for _, v := range listrMeet {
  920. v.Content = AnnotationHtml(v.Content)
  921. v.PublishTime = utils.TimeRemoveHms2(v.PublishTime)
  922. mapItems[fmt.Sprint("meetingreviewchapt", v.Id)].Meetingreviewchapt = v
  923. }
  924. }
  925. //处理上周纪要汇总
  926. if len(minutessummaryIds) > 0 {
  927. pars = make([]interface{}, 0)
  928. condition = ` AND article_id IN (` + utils.GetOrmInReplace(len(minutessummaryIds)) + `)`
  929. pars = append(pars, minutessummaryIds)
  930. listresearchsummary, e := models.GetReportSelectionListHome(condition, "cygx_minutes_summary", pars, 0, len(minutessummaryIds))
  931. if e != nil {
  932. err = errors.New("GetResourceDataList, Err: " + e.Error())
  933. return
  934. }
  935. for _, v := range listresearchsummary {
  936. v.PublishDate = utils.TimeRemoveHms2(v.PublishDate)
  937. mapItems[fmt.Sprint("minutessummary", v.ArticleId)].Minutessummary = v
  938. }
  939. }
  940. //处理本周纪要汇总
  941. if len(researchsummaryIds) > 0 {
  942. pars = make([]interface{}, 0)
  943. condition = ` AND article_id IN (` + utils.GetOrmInReplace(len(researchsummaryIds)) + `)`
  944. pars = append(pars, researchsummaryIds)
  945. listresearchsummary, e := models.GetReportSelectionListHome(condition, "cygx_research_summary", pars, 0, len(researchsummaryIds))
  946. if e != nil {
  947. err = errors.New("GetReportSelectionListHome, Err: " + e.Error())
  948. return
  949. }
  950. for _, v := range listresearchsummary {
  951. v.PublishDate = utils.TimeRemoveHms2(v.PublishDate)
  952. mapItems[fmt.Sprint("researchsummary", v.ArticleId)].Researchsummary = v
  953. }
  954. }
  955. //处理产品内测
  956. if len(productinteriorIds) > 0 {
  957. pars = make([]interface{}, 0)
  958. condition = ` AND art.status = 1 AND art.product_interior_id IN (` + utils.GetOrmInReplace(len(productinteriorIds)) + `)`
  959. pars = append(pars, productinteriorIds)
  960. listProductInterior, e := models.GetCygxProductInteriorList(condition, pars, 0, len(productinteriorIds))
  961. if e != nil {
  962. err = errors.New("GetCygxProductInteriorList, Err: " + e.Error())
  963. return
  964. }
  965. for _, v := range listProductInterior {
  966. v.Body = ProductInteriorHtml(v.Body)
  967. v.PublishTime = utils.TimeRemoveHms2(v.PublishTime)
  968. mapItems[fmt.Sprint("productinterior", v.ProductInteriorId)].ProductInterior = v
  969. }
  970. }
  971. detail, e := models.GetConfigByCode("city_img_url")
  972. if e != nil {
  973. err = errors.New("GetResourceDataList, Err: " + e.Error())
  974. return
  975. }
  976. detailChart, e := models.GetConfigByCode("chart_img_url")
  977. if e != nil {
  978. err = errors.New("GetResourceDataList, Err: " + e.Error())
  979. return
  980. }
  981. addressList := strings.Split(detail.ConfigValue, "{|}")
  982. mapAddress := make(map[string]string)
  983. chartList := strings.Split(detailChart.ConfigValue, "{|}")
  984. mapChart := make(map[string]string)
  985. var cityName string
  986. var chartName string
  987. var imgUrl string
  988. var imgUrlChart string
  989. for _, v := range addressList {
  990. vslice := strings.Split(v, "_")
  991. cityName = vslice[0]
  992. imgUrl = vslice[len(vslice)-1]
  993. mapAddress[cityName] = imgUrl
  994. }
  995. for _, v := range chartList {
  996. vslice := strings.Split(v, "_")
  997. chartName = vslice[0]
  998. imgUrlChart = vslice[len(vslice)-1]
  999. mapChart[chartName] = imgUrlChart
  1000. }
  1001. var imgUrlResp string
  1002. fmt.Println(activityIds)
  1003. //处理活动
  1004. if len(activityIds) > 0 {
  1005. for _, vss := range activityIds {
  1006. imgUrlResp += strconv.Itoa(vss) + ","
  1007. }
  1008. pars = make([]interface{}, 0)
  1009. condition = ` AND art.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)`
  1010. pars = append(pars, activityIds)
  1011. activityList, e := models.GetActivityListNew(condition, pars, uid, 0, len(activityIds), 0, 0, "")
  1012. if e != nil {
  1013. err = errors.New("GetResourceDataList, Err: " + e.Error())
  1014. return
  1015. }
  1016. //处理不同的报名方式按钮回显
  1017. mapActivitySignup, e := GetActivitySignupResp(activityIds, user)
  1018. if e != nil {
  1019. e = errors.New("GetActivitySignupResp, Err: " + e.Error())
  1020. return
  1021. }
  1022. var activityListRersp []*models.ActivityDetail
  1023. for _, v := range activityList {
  1024. v.SignupType = mapActivitySignup[v.ActivityId]
  1025. activityListRersp = append(activityListRersp, ActivityButtonShow(v))
  1026. }
  1027. for _, v := range activityListRersp {
  1028. if v == nil {
  1029. continue
  1030. }
  1031. if v.ActivityType == 0 {
  1032. if mapAddress[v.City] != "" {
  1033. imgUrlResp = mapAddress[v.City]
  1034. } else {
  1035. imgUrlResp = mapAddress["其它"]
  1036. }
  1037. } else {
  1038. if mapChart[v.ChartPermissionName] != "" {
  1039. imgUrlResp = mapChart[v.ChartPermissionName]
  1040. }
  1041. }
  1042. v.SourceType = 1
  1043. v.Expert, _ = GetReportContentTextSub(v.Expert)
  1044. mapItems[fmt.Sprint("activity", v.ActivityId)].Activity = v
  1045. }
  1046. }
  1047. //产业资源包
  1048. if len(industrialResourceIds) > 0 {
  1049. pars = make([]interface{}, 0)
  1050. var industrialResourceIdstring []string
  1051. for _, v := range industrialResourceIds {
  1052. industrialResourceIdstring = append(industrialResourceIdstring, strconv.Itoa(v))
  1053. }
  1054. industrialId := strings.Join(industrialResourceIdstring, ",")
  1055. condition = ` AND m.industrial_management_id IN (` + industrialId + `) `
  1056. listIndustrialResourceIds, e := models.GetSearchResourceList(user.UserId, condition, 0, len(industrialResourceIds))
  1057. if e != nil {
  1058. err = errors.New("GetSearchResourceList, Err: " + e.Error())
  1059. return
  1060. }
  1061. //合并产业关联的标的
  1062. listSubjcet, e := models.GetIndustrialSubjectAllByIndustrialId(industrialResourceIds)
  1063. if e != nil {
  1064. e = errors.New("GetIndustrialSubjectAllByIndustrialId, Err: " + e.Error())
  1065. return
  1066. }
  1067. mapIndustrial := make(map[string]int)
  1068. for _, v := range listSubjcet {
  1069. for k2, v2 := range listIndustrialResourceIds {
  1070. if v2.IndustrialManagementId == v.IndustrialManagementId && mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Yx", v.SubjectName)] == 0 {
  1071. listIndustrialResourceIds[k2].IndustrialSubjectList = append(listIndustrialResourceIds[k2].IndustrialSubjectList, v)
  1072. }
  1073. }
  1074. }
  1075. for _, v := range listIndustrialResourceIds {
  1076. mapItems[fmt.Sprint("industrialsource", v.IndustrialManagementId)].IndustrialResource = v
  1077. }
  1078. }
  1079. //处理图表
  1080. if len(newchartIds) > 0 {
  1081. pars = make([]interface{}, 0)
  1082. condition = ` AND a.chart_id IN (` + utils.GetOrmInReplace(len(newchartIds)) + `)`
  1083. pars = append(pars, newchartIds)
  1084. chartDateList, e := models.GetChartListCollectionNew(condition, pars, uid, 0, len(newchartIds))
  1085. if e != nil {
  1086. err = errors.New("GetResourceDataList, Err: " + e.Error())
  1087. return
  1088. }
  1089. for _, v := range chartDateList {
  1090. mapItems[fmt.Sprint("newchart", v.ChartId)].Newchart = v
  1091. }
  1092. }
  1093. //处理专项调研
  1094. if len(activityspecialIds) > 0 {
  1095. pars = make([]interface{}, 0)
  1096. condition = ` AND art.activity_id IN (` + utils.GetOrmInReplace(len(activityspecialIds)) + `)`
  1097. pars = append(pars, activityspecialIds)
  1098. activitySpeciallist, e := models.GetCygxActivitySpecialDetailList(condition, pars, user.UserId, 0, len(activityspecialIds))
  1099. if e != nil {
  1100. err = errors.New("GetCygxActivitySpecialDetailList, Err: " + e.Error())
  1101. return
  1102. }
  1103. UserMap, e := GetSpecialTripUserMap(activityIds, user.UserId)
  1104. if e != nil {
  1105. err = errors.New("GetSpecialTripUserMap, Err: " + e.Error())
  1106. return
  1107. }
  1108. for _, v := range activitySpeciallist {
  1109. if mapChart[v.ChartPermissionName] != "" {
  1110. imgUrlResp = mapChart[v.ChartPermissionName]
  1111. }
  1112. if _, ok := UserMap[v.ActivityId]; ok {
  1113. v.IsTrip = 1
  1114. }
  1115. if v.Days == 0 {
  1116. v.TripStatus = 1
  1117. v.TripImgLink = v.TripImgLink
  1118. } else {
  1119. v.TripStatus = 2
  1120. v.TripImgLink = v.TripImgLinkFix
  1121. v.ActivityTimeText = v.ActivityTimeTextByDay
  1122. }
  1123. resultTimeStart := utils.StrTimeToTime(v.ActivityTime) //时间字符串格式转时间格式
  1124. resultTimeEnd := utils.StrTimeToTime(v.ActivityTimeEnd) //时间字符串格式转时间格式
  1125. if resultTimeStart.After(time.Now()) {
  1126. v.ActiveState = 1
  1127. } else if time.Now().After(resultTimeEnd) {
  1128. v.ActiveState = 3
  1129. } else {
  1130. v.ActiveState = 2
  1131. }
  1132. v.ImgUrl = imgUrlResp
  1133. mapItems[fmt.Sprint("activityspecial", v.ActivityId)].Activityspecial = v
  1134. }
  1135. }
  1136. if len(roadshowIds)+len(activityvideoIds)+len(activityvoiceIds) > 0 {
  1137. audioIdstr := strings.Join(activityvoiceIds, ",")
  1138. ideoIdsStr := strings.Join(roadshowIds, ",")
  1139. activityVideoIdsStr := strings.Join(activityvideoIds, ",")
  1140. list, _, e := GetMicroRoadShowMycollect(len(roadshowIds)+len(activityvideoIds)+len(activityvoiceIds), 0, audioIdstr, ideoIdsStr, activityVideoIdsStr)
  1141. if e != nil {
  1142. err = errors.New("GetMicroRoadShowMycollect, Err: " + e.Error())
  1143. return
  1144. }
  1145. for _, item := range list {
  1146. if item.Type == 1 {
  1147. //音频
  1148. count, e := models.GetVoiceCollectCount(user.UserId, item.Id)
  1149. if e != nil {
  1150. err = errors.New("GetVoiceCollectCount, Err: " + e.Error())
  1151. return
  1152. }
  1153. if count > 0 {
  1154. item.IsCollect = true
  1155. }
  1156. } else if item.Type == 2 {
  1157. //活动视频
  1158. count, e := models.GetActivityVideoCollectCount(user.UserId, item.Id)
  1159. if e != nil {
  1160. err = errors.New("GetActivityVideoCollectCount, Err: " + e.Error())
  1161. return
  1162. }
  1163. if count > 0 {
  1164. item.IsCollect = true
  1165. }
  1166. } else if item.Type == 3 {
  1167. //微路演视频
  1168. count, e := models.GetVideoCollectCount(user.UserId, item.Id)
  1169. if e != nil {
  1170. err = errors.New("GetVideoCollectCount, Err: " + e.Error())
  1171. return
  1172. }
  1173. if count > 0 {
  1174. item.IsCollect = true
  1175. }
  1176. }
  1177. }
  1178. // 用户权限
  1179. authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
  1180. if e != nil {
  1181. err = errors.New("GetUserRaiPermissionInfo, Err: " + e.Error())
  1182. return
  1183. }
  1184. // 获取默认图配置
  1185. audioMap, videoMap, audioShareMap, videoShareMap, e := GetMicroRoadShowDefaultImgConfig()
  1186. if e != nil {
  1187. err = errors.New("GetMicroRoadShowDefaultImgConfig, Err: " + e.Error())
  1188. return
  1189. }
  1190. //Source string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
  1191. for i := range list {
  1192. // 权限
  1193. au := new(models.UserPermissionAuthInfo)
  1194. au.SellerName = authInfo.SellerName
  1195. au.SellerMobile = authInfo.SellerMobile
  1196. au.HasPermission = authInfo.HasPermission
  1197. au.OperationMode = authInfo.OperationMode
  1198. if au.HasPermission == 1 {
  1199. // 非宏观权限进一步判断是否有权限
  1200. if list[i].ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, list[i].ChartPermissionName) {
  1201. au.HasPermission = 2
  1202. }
  1203. }
  1204. // 无权限的弹框提示
  1205. if au.HasPermission != 1 {
  1206. if au.OperationMode == UserPermissionOperationModeCall {
  1207. if list[i].Type == 1 {
  1208. au.PopupMsg = UserPermissionPopupMsgCallActivity
  1209. } else {
  1210. au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
  1211. }
  1212. } else {
  1213. if list[i].Type == 1 {
  1214. au.PopupMsg = UserPermissionPopupMsgApplyActivity
  1215. } else {
  1216. au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo
  1217. }
  1218. }
  1219. }
  1220. list[i].AuthInfo = au
  1221. list[i].PublishTime = utils.StrTimeToTime(list[i].PublishTime).Format(utils.FormatDate)
  1222. // 默认图
  1223. if list[i].BackgroundImg == "" {
  1224. if list[i].Type == 1 {
  1225. list[i].BackgroundImg = audioMap[list[i].ChartPermissionId]
  1226. } else {
  1227. list[i].BackgroundImg = videoMap[list[i].ChartPermissionId]
  1228. }
  1229. }
  1230. // 分享图
  1231. if list[i].ShareImg == "" {
  1232. if list[i].Type == 1 {
  1233. list[i].ShareImg = audioShareMap[list[i].ChartPermissionId]
  1234. } else {
  1235. list[i].ShareImg = videoShareMap[list[i].ChartPermissionId]
  1236. }
  1237. }
  1238. }
  1239. //Type int `description:"类型: 1-音频; 2-活动视频; 3-产业视频"`
  1240. for _, item := range list {
  1241. if item.Type == 1 {
  1242. mapItems[fmt.Sprint("activityvoice", item.Id)].Activityvoice = item
  1243. } else if item.Type == 2 {
  1244. mapItems[fmt.Sprint("activityvideo", item.Id)].Activityvideo = item
  1245. } else if item.Type == 3 {
  1246. mapItems[fmt.Sprint("roadshow", item.Id)].Roadshow = item
  1247. }
  1248. }
  1249. }
  1250. for _, vList := range list {
  1251. for _, v := range mapItems {
  1252. //如果这些类型都为空,那么就不合并
  1253. if v.Article == nil && v.Newchart == nil && v.Roadshow == nil && v.Activity == nil && v.Activityvideo == nil && v.Activityvoice == nil && v.Activityspecial == nil && v.Researchsummary == nil && v.Minutessummary == nil && v.Meetingreviewchapt == nil && v.ProductInterior == nil && v.IndustrialResource == nil {
  1254. continue
  1255. }
  1256. if v.SourceId == vList.SourceId {
  1257. items = append(items, v)
  1258. }
  1259. }
  1260. }
  1261. return
  1262. }