es_comprehensive.go 42 KB

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