es_comprehensive.go 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290
  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. titleHeight := make(map[int]string)
  785. mapItems := make(map[string]*models.CygxResourceDataResp)
  786. for _, v := range list {
  787. //预处理文章
  788. item := new(models.CygxResourceDataResp)
  789. item.SourceId = v.SourceId
  790. item.Source = v.Source
  791. if v.IsSummary == 1 {
  792. item.BodyHeight = v.Body
  793. titleHeight[v.SourceId] = v.Title
  794. //fmt.Println(v.Title)
  795. } else {
  796. item.BodyHeight = make([]string, 0)
  797. }
  798. item.PublishDate = utils.TimeRemoveHms2(v.PublishDate)
  799. mapItems[fmt.Sprint(v.Source, v.SourceId)] = item
  800. }
  801. var articleIds []int
  802. var newchartIds []int
  803. var roadshowIds []string
  804. var activityIds []int
  805. var activityvideoIds []string
  806. var activityvoiceIds []string
  807. var activityspecialIds []int
  808. var researchsummaryIds []int
  809. var minutessummaryIds []int
  810. var meetingreviewchaptIds []int
  811. var productinteriorIds []int
  812. var industrialResourceIds []int
  813. //Source string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial 、 本周研究汇总: researchsummary 、 上周纪要汇总 :minutessummary 、晨会精华 :meetingreviewchapt "`
  814. for _, v := range list {
  815. if v.Source == "article" {
  816. articleIds = append(articleIds, v.SourceId)
  817. } else if v.Source == "newchart" {
  818. newchartIds = append(newchartIds, v.SourceId)
  819. } else if v.Source == "roadshow" {
  820. roadshowIds = append(roadshowIds, strconv.Itoa(v.SourceId))
  821. } else if v.Source == "activity" {
  822. activityIds = append(activityIds, v.SourceId)
  823. } else if v.Source == "activityvideo" {
  824. activityvideoIds = append(activityvideoIds, strconv.Itoa(v.SourceId))
  825. } else if v.Source == "activityvoice" {
  826. activityvoiceIds = append(activityvoiceIds, strconv.Itoa(v.SourceId))
  827. } else if v.Source == "activityspecial" {
  828. activityspecialIds = append(activityspecialIds, v.SourceId)
  829. } else if v.Source == "researchsummary" {
  830. researchsummaryIds = append(researchsummaryIds, v.SourceId)
  831. } else if v.Source == "minutessummary" {
  832. minutessummaryIds = append(minutessummaryIds, v.SourceId)
  833. } else if v.Source == "meetingreviewchapt" {
  834. meetingreviewchaptIds = append(meetingreviewchaptIds, v.SourceId)
  835. } else if v.Source == "productinterior" {
  836. productinteriorIds = append(productinteriorIds, v.SourceId)
  837. } else if v.Source == "industrialsource" {
  838. industrialResourceIds = append(industrialResourceIds, v.SourceId)
  839. }
  840. }
  841. //处理文章
  842. if len(articleIds) > 0 {
  843. pars = make([]interface{}, 0)
  844. condition = ` AND a.article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `)`
  845. pars = append(pars, articleIds)
  846. listArticle, e := models.GetHomeList(condition, pars, 0, len(articleIds))
  847. if e != nil {
  848. err = errors.New("GetResourceDataList, Err: " + e.Error())
  849. return
  850. }
  851. listArticle, e = HandleArticleCategoryImg(listArticle)
  852. if e != nil {
  853. err = errors.New("HandleArticleCategoryImg, Err: " + e.Error())
  854. return
  855. }
  856. for _, v := range listArticle {
  857. v.Body = ""
  858. v.BodyHtml = ""
  859. if titleHeight[v.ArticleId] != "" {
  860. v.Title = titleHeight[v.ArticleId]
  861. }
  862. mapItems[fmt.Sprint("article", v.ArticleId)].Article = v
  863. }
  864. }
  865. //处理晨会精华
  866. if len(meetingreviewchaptIds) > 0 {
  867. pars = make([]interface{}, 0)
  868. condition = ` AND c.id IN (` + utils.GetOrmInReplace(len(meetingreviewchaptIds)) + `)`
  869. pars = append(pars, meetingreviewchaptIds)
  870. listrMeet, e := models.GetCygxMorningMeetingReviewChapterList(condition, pars)
  871. if e != nil {
  872. err = errors.New("GetResourceDataList, Err: " + e.Error())
  873. return
  874. }
  875. for _, v := range listrMeet {
  876. v.Content = AnnotationHtml(v.Content)
  877. v.PublishTime = utils.TimeRemoveHms2(v.PublishTime)
  878. mapItems[fmt.Sprint("meetingreviewchapt", v.Id)].Meetingreviewchapt = v
  879. }
  880. }
  881. //处理上周纪要汇总
  882. if len(minutessummaryIds) > 0 {
  883. pars = make([]interface{}, 0)
  884. condition = ` AND article_id IN (` + utils.GetOrmInReplace(len(minutessummaryIds)) + `)`
  885. pars = append(pars, minutessummaryIds)
  886. listresearchsummary, e := models.GetReportSelectionListHome(condition, "cygx_minutes_summary", pars, 0, len(minutessummaryIds))
  887. if e != nil {
  888. err = errors.New("GetResourceDataList, Err: " + e.Error())
  889. return
  890. }
  891. for _, v := range listresearchsummary {
  892. v.PublishDate = utils.TimeRemoveHms2(v.PublishDate)
  893. mapItems[fmt.Sprint("minutessummary", v.ArticleId)].Minutessummary = v
  894. }
  895. }
  896. //处理本周纪要汇总
  897. if len(researchsummaryIds) > 0 {
  898. pars = make([]interface{}, 0)
  899. condition = ` AND article_id IN (` + utils.GetOrmInReplace(len(researchsummaryIds)) + `)`
  900. pars = append(pars, researchsummaryIds)
  901. listresearchsummary, e := models.GetReportSelectionListHome(condition, "cygx_research_summary", pars, 0, len(researchsummaryIds))
  902. if e != nil {
  903. err = errors.New("GetReportSelectionListHome, Err: " + e.Error())
  904. return
  905. }
  906. for _, v := range listresearchsummary {
  907. v.PublishDate = utils.TimeRemoveHms2(v.PublishDate)
  908. mapItems[fmt.Sprint("researchsummary", v.ArticleId)].Researchsummary = v
  909. }
  910. }
  911. //处理产品内测
  912. if len(productinteriorIds) > 0 {
  913. pars = make([]interface{}, 0)
  914. condition = ` AND art.status = 1 AND art.product_interior_id IN (` + utils.GetOrmInReplace(len(productinteriorIds)) + `)`
  915. pars = append(pars, productinteriorIds)
  916. listProductInterior, e := models.GetCygxProductInteriorList(condition, pars, 0, len(productinteriorIds))
  917. if e != nil {
  918. err = errors.New("GetCygxProductInteriorList, Err: " + e.Error())
  919. return
  920. }
  921. for _, v := range listProductInterior {
  922. v.Body = ProductInteriorHtml(v.Body)
  923. v.PublishTime = utils.TimeRemoveHms2(v.PublishTime)
  924. mapItems[fmt.Sprint("productinterior", v.ProductInteriorId)].ProductInterior = v
  925. }
  926. }
  927. detail, e := models.GetConfigByCode("city_img_url")
  928. if e != nil {
  929. err = errors.New("GetResourceDataList, Err: " + e.Error())
  930. return
  931. }
  932. detailChart, e := models.GetConfigByCode("chart_img_url")
  933. if e != nil {
  934. err = errors.New("GetResourceDataList, Err: " + e.Error())
  935. return
  936. }
  937. addressList := strings.Split(detail.ConfigValue, "{|}")
  938. mapAddress := make(map[string]string)
  939. chartList := strings.Split(detailChart.ConfigValue, "{|}")
  940. mapChart := make(map[string]string)
  941. var cityName string
  942. var chartName string
  943. var imgUrl string
  944. var imgUrlChart string
  945. for _, v := range addressList {
  946. vslice := strings.Split(v, "_")
  947. cityName = vslice[0]
  948. imgUrl = vslice[len(vslice)-1]
  949. mapAddress[cityName] = imgUrl
  950. }
  951. for _, v := range chartList {
  952. vslice := strings.Split(v, "_")
  953. chartName = vslice[0]
  954. imgUrlChart = vslice[len(vslice)-1]
  955. mapChart[chartName] = imgUrlChart
  956. }
  957. var imgUrlResp string
  958. fmt.Println(activityIds)
  959. //处理活动
  960. if len(activityIds) > 0 {
  961. for _, vss := range activityIds {
  962. imgUrlResp += strconv.Itoa(vss) + ","
  963. }
  964. pars = make([]interface{}, 0)
  965. condition = ` AND art.activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `)`
  966. pars = append(pars, activityIds)
  967. activityList, e := models.GetActivityListNew(condition, pars, uid, 0, len(activityIds), 0, 0, "")
  968. if e != nil {
  969. err = errors.New("GetResourceDataList, Err: " + e.Error())
  970. return
  971. }
  972. //处理不同的报名方式按钮回显
  973. mapActivitySignup, e := GetActivitySignupResp(activityIds, user)
  974. if e != nil {
  975. e = errors.New("GetActivitySignupResp, Err: " + e.Error())
  976. return
  977. }
  978. var activityListRersp []*models.ActivityDetail
  979. for _, v := range activityList {
  980. v.SignupType = mapActivitySignup[v.ActivityId]
  981. activityListRersp = append(activityListRersp, ActivityButtonShow(v))
  982. }
  983. for _, v := range activityListRersp {
  984. if v == nil {
  985. continue
  986. }
  987. if v.ActivityType == 0 {
  988. if mapAddress[v.City] != "" {
  989. imgUrlResp = mapAddress[v.City]
  990. } else {
  991. imgUrlResp = mapAddress["其它"]
  992. }
  993. } else {
  994. if mapChart[v.ChartPermissionName] != "" {
  995. imgUrlResp = mapChart[v.ChartPermissionName]
  996. }
  997. }
  998. v.SourceType = 1
  999. v.Expert, _ = GetReportContentTextSub(v.Expert)
  1000. mapItems[fmt.Sprint("activity", v.ActivityId)].Activity = v
  1001. }
  1002. }
  1003. //产业资源包
  1004. if len(industrialResourceIds) > 0 {
  1005. pars = make([]interface{}, 0)
  1006. var industrialResourceIdstring []string
  1007. for _, v := range industrialResourceIds {
  1008. industrialResourceIdstring = append(industrialResourceIdstring, strconv.Itoa(v))
  1009. }
  1010. industrialId := strings.Join(industrialResourceIdstring, ",")
  1011. condition = ` AND m.industrial_management_id IN (` + industrialId + `) `
  1012. listIndustrialResourceIds, e := models.GetSearchResourceList(user.UserId, condition, 0, len(industrialResourceIds))
  1013. if e != nil {
  1014. err = errors.New("GetSearchResourceList, Err: " + e.Error())
  1015. return
  1016. }
  1017. //合并产业关联的标的
  1018. listSubjcet, e := models.GetIndustrialSubjectAllByIndustrialId(industrialResourceIds)
  1019. if e != nil {
  1020. e = errors.New("GetIndustrialSubjectAllByIndustrialId, Err: " + e.Error())
  1021. return
  1022. }
  1023. mapIndustrial := make(map[string]int)
  1024. for _, v := range listSubjcet {
  1025. for k2, v2 := range listIndustrialResourceIds {
  1026. if v2.IndustrialManagementId == v.IndustrialManagementId && mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Yx", v.SubjectName)] == 0 {
  1027. listIndustrialResourceIds[k2].IndustrialSubjectList = append(listIndustrialResourceIds[k2].IndustrialSubjectList, v)
  1028. }
  1029. }
  1030. }
  1031. for _, v := range listIndustrialResourceIds {
  1032. mapItems[fmt.Sprint("industrialsource", v.IndustrialManagementId)].IndustrialResource = v
  1033. }
  1034. }
  1035. //处理图表
  1036. if len(newchartIds) > 0 {
  1037. pars = make([]interface{}, 0)
  1038. condition = ` AND a.chart_id IN (` + utils.GetOrmInReplace(len(newchartIds)) + `)`
  1039. pars = append(pars, newchartIds)
  1040. chartDateList, e := models.GetChartListCollectionNew(condition, pars, uid, 0, len(newchartIds))
  1041. if e != nil {
  1042. err = errors.New("GetResourceDataList, Err: " + e.Error())
  1043. return
  1044. }
  1045. for _, v := range chartDateList {
  1046. mapItems[fmt.Sprint("newchart", v.ChartId)].Newchart = v
  1047. }
  1048. }
  1049. //处理专项调研
  1050. if len(activityspecialIds) > 0 {
  1051. pars = make([]interface{}, 0)
  1052. condition = ` AND art.activity_id IN (` + utils.GetOrmInReplace(len(activityspecialIds)) + `)`
  1053. pars = append(pars, activityspecialIds)
  1054. activitySpeciallist, e := models.GetCygxActivitySpecialDetailList(condition, pars, user.UserId, 0, len(activityspecialIds))
  1055. if e != nil {
  1056. err = errors.New("GetCygxActivitySpecialDetailList, Err: " + e.Error())
  1057. return
  1058. }
  1059. UserMap, e := GetSpecialTripUserMap(activityIds, user.UserId)
  1060. if e != nil {
  1061. err = errors.New("GetSpecialTripUserMap, Err: " + e.Error())
  1062. return
  1063. }
  1064. for _, v := range activitySpeciallist {
  1065. if mapChart[v.ChartPermissionName] != "" {
  1066. imgUrlResp = mapChart[v.ChartPermissionName]
  1067. }
  1068. if _, ok := UserMap[v.ActivityId]; ok {
  1069. v.IsTrip = 1
  1070. }
  1071. if v.Days == 0 {
  1072. v.TripStatus = 1
  1073. v.TripImgLink = v.TripImgLink
  1074. } else {
  1075. v.TripStatus = 2
  1076. v.TripImgLink = v.TripImgLinkFix
  1077. v.ActivityTimeText = v.ActivityTimeTextByDay
  1078. }
  1079. resultTimeStart := utils.StrTimeToTime(v.ActivityTime) //时间字符串格式转时间格式
  1080. resultTimeEnd := utils.StrTimeToTime(v.ActivityTimeEnd) //时间字符串格式转时间格式
  1081. if resultTimeStart.After(time.Now()) {
  1082. v.ActiveState = 1
  1083. } else if time.Now().After(resultTimeEnd) {
  1084. v.ActiveState = 3
  1085. } else {
  1086. v.ActiveState = 2
  1087. }
  1088. v.ImgUrl = imgUrlResp
  1089. mapItems[fmt.Sprint("activityspecial", v.ActivityId)].Activityspecial = v
  1090. }
  1091. }
  1092. if len(roadshowIds)+len(activityvideoIds)+len(activityvoiceIds) > 0 {
  1093. audioIdstr := strings.Join(activityvoiceIds, ",")
  1094. ideoIdsStr := strings.Join(roadshowIds, ",")
  1095. activityVideoIdsStr := strings.Join(activityvideoIds, ",")
  1096. list, _, e := GetMicroRoadShowMycollect(len(roadshowIds)+len(activityvideoIds)+len(activityvoiceIds), 0, audioIdstr, ideoIdsStr, activityVideoIdsStr)
  1097. if e != nil {
  1098. err = errors.New("GetMicroRoadShowMycollect, Err: " + e.Error())
  1099. return
  1100. }
  1101. for _, item := range list {
  1102. if item.Type == 1 {
  1103. //音频
  1104. count, e := models.GetVoiceCollectCount(user.UserId, item.Id)
  1105. if e != nil {
  1106. err = errors.New("GetVoiceCollectCount, Err: " + e.Error())
  1107. return
  1108. }
  1109. if count > 0 {
  1110. item.IsCollect = true
  1111. }
  1112. } else if item.Type == 2 {
  1113. //活动视频
  1114. count, e := models.GetActivityVideoCollectCount(user.UserId, item.Id)
  1115. if e != nil {
  1116. err = errors.New("GetActivityVideoCollectCount, Err: " + e.Error())
  1117. return
  1118. }
  1119. if count > 0 {
  1120. item.IsCollect = true
  1121. }
  1122. } else if item.Type == 3 {
  1123. //微路演视频
  1124. count, e := models.GetVideoCollectCount(user.UserId, item.Id)
  1125. if e != nil {
  1126. err = errors.New("GetVideoCollectCount, Err: " + e.Error())
  1127. return
  1128. }
  1129. if count > 0 {
  1130. item.IsCollect = true
  1131. }
  1132. }
  1133. }
  1134. // 用户权限
  1135. authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
  1136. if e != nil {
  1137. err = errors.New("GetUserRaiPermissionInfo, Err: " + e.Error())
  1138. return
  1139. }
  1140. // 获取默认图配置
  1141. audioMap, videoMap, audioShareMap, videoShareMap, e := GetMicroRoadShowDefaultImgConfig()
  1142. if e != nil {
  1143. err = errors.New("GetMicroRoadShowDefaultImgConfig, Err: " + e.Error())
  1144. return
  1145. }
  1146. //Source string `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
  1147. for i := range list {
  1148. // 权限
  1149. au := new(models.UserPermissionAuthInfo)
  1150. au.SellerName = authInfo.SellerName
  1151. au.SellerMobile = authInfo.SellerMobile
  1152. au.HasPermission = authInfo.HasPermission
  1153. au.OperationMode = authInfo.OperationMode
  1154. if au.HasPermission == 1 {
  1155. // 非宏观权限进一步判断是否有权限
  1156. if list[i].ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, list[i].ChartPermissionName) {
  1157. au.HasPermission = 2
  1158. }
  1159. }
  1160. // 无权限的弹框提示
  1161. if au.HasPermission != 1 {
  1162. if au.OperationMode == UserPermissionOperationModeCall {
  1163. if list[i].Type == 1 {
  1164. au.PopupMsg = UserPermissionPopupMsgCallActivity
  1165. } else {
  1166. au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
  1167. }
  1168. } else {
  1169. if list[i].Type == 1 {
  1170. au.PopupMsg = UserPermissionPopupMsgApplyActivity
  1171. } else {
  1172. au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo
  1173. }
  1174. }
  1175. }
  1176. list[i].AuthInfo = au
  1177. list[i].PublishTime = utils.StrTimeToTime(list[i].PublishTime).Format(utils.FormatDate)
  1178. // 默认图
  1179. if list[i].BackgroundImg == "" {
  1180. if list[i].Type == 1 {
  1181. list[i].BackgroundImg = audioMap[list[i].ChartPermissionId]
  1182. } else {
  1183. list[i].BackgroundImg = videoMap[list[i].ChartPermissionId]
  1184. }
  1185. }
  1186. // 分享图
  1187. if list[i].ShareImg == "" {
  1188. if list[i].Type == 1 {
  1189. list[i].ShareImg = audioShareMap[list[i].ChartPermissionId]
  1190. } else {
  1191. list[i].ShareImg = videoShareMap[list[i].ChartPermissionId]
  1192. }
  1193. }
  1194. }
  1195. //Type int `description:"类型: 1-音频; 2-活动视频; 3-产业视频"`
  1196. for _, item := range list {
  1197. if item.Type == 1 {
  1198. mapItems[fmt.Sprint("activityvoice", item.Id)].Activityvoice = item
  1199. } else if item.Type == 2 {
  1200. mapItems[fmt.Sprint("activityvideo", item.Id)].Activityvideo = item
  1201. } else if item.Type == 3 {
  1202. mapItems[fmt.Sprint("roadshow", item.Id)].Roadshow = item
  1203. }
  1204. }
  1205. }
  1206. for _, vList := range list {
  1207. for _, v := range mapItems {
  1208. //如果这些类型都为空,那么就不合并
  1209. 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 {
  1210. continue
  1211. }
  1212. if v.SourceId == vList.SourceId {
  1213. items = append(items, v)
  1214. }
  1215. }
  1216. }
  1217. return
  1218. }