task.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. package services
  2. import (
  3. "fmt"
  4. "github.com/PuerkitoBio/goquery"
  5. "github.com/beego/beego/v2/task"
  6. "hongze/hongze_cygx/models"
  7. "hongze/hongze_cygx/utils"
  8. "html"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. func Task() {
  14. fmt.Println("start")
  15. //同步数据
  16. if utils.RunMode == "release" {
  17. //syncTacticsListAddreport := task.NewTask("syncTacticsListAddreport", "0 */5 * * * *", SyncTacticsListAddreport) //同步文章
  18. //task.AddTask("syncTacticsListAddreport", syncTacticsListAddreport)
  19. getSummarytoEs := task.NewTask("getSummarytoEs", "0 */30 * * * *", GetSummarytoEs) //同步纪要库内容到Es
  20. task.AddTask("getSummarytoEs", getSummarytoEs)
  21. getArticleListByApi := task.NewTask("getArticleListByApi", "0 */5 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章
  22. task.AddTask("getArticleListByApi", getArticleListByApi)
  23. //会议提醒模板消息推送
  24. sendActivityBeginMsg := task.NewTask("sendActivityBeginMsg", "0 */10 8-22 * * *", SendActivityBeginMsg) //会议前60分钟的提醒
  25. task.AddTask("sendActivityBeginMsg", sendActivityBeginMsg)
  26. sendActivityBeginMsgMeeting := task.NewTask("sendActivityBeginMsgMeeting", "0 */5 8-22 * * *", SendActivityBeginMsgMeeting) //会议前15分钟的提醒
  27. task.AddTask("sendActivityBeginMsgMeeting", sendActivityBeginMsgMeeting)
  28. }
  29. //修改任务状态
  30. updateActivitySattus := task.NewTask("syncTacticsListAddreport", "0 */1 8-22 * * *", UpdateActivitySattus)
  31. task.AddTask("updateActivitySattus", updateActivitySattus)
  32. //更新深 和新的标签
  33. updateIndustrialManagementLabel := task.NewTask("updateIndustrialManagementLabel", "0 */30 * * * *", UpdateIndustrialManagementLabel)
  34. task.AddTask("updateIndustrialManagementLabel", updateIndustrialManagementLabel)
  35. //更新报告的搜索栏内容
  36. //UpdateIndustrialManagementSubjectNnames()
  37. //预约外呼名单,会前1小时自动发送邮件给专家组
  38. sendEmailFileToExpert := task.NewTask("sendEmailFileToExpert", "0 */5 8-22 * * *", SendEmailFileToExpert) //预约外呼名单,会前1小时自动发送邮件给专家组
  39. task.AddTask("sendEmailFileToExpert", sendEmailFileToExpert)
  40. sendEmailFileForAskMsgResearch := task.NewTask("sendEmailFileForAskMsgResearch", "0 */5 8-22 * * *", SendEmailFileForAskMsgResearch) //研选系列专家电话会,会前1小时将问题列表发送给邮箱
  41. task.AddTask("sendEmailFileForAskMsgResearch", sendEmailFileForAskMsgResearch)
  42. sendEmailFileForAskMsg := task.NewTask("sendEmailFileForAskMsg", "0 */5 8-22 * * *", SendEmailFileForAskMsg) //非研选系列专家电话会,根据主持人姓名,会前15分钟将问题列表发送给至该主持人对应邮箱
  43. task.AddTask("sendEmailFileForAskMsg", sendEmailFileForAskMsg)
  44. //白名单发送2
  45. sendEmailUserWhiteListChange := task.NewTask("sendEmailUserWhiteListChange", "0 00 17 * * *", SendEmailUserWhiteListChange) //新增 和冻结的客户白名单
  46. task.AddTask("sendEmailUserWhiteListChange", sendEmailUserWhiteListChange)
  47. //更改对应产业的文章阅读数量
  48. chageIndustrialArticleNum := task.NewTask("chageIndustrialArticleNum", "0 01 00 * * *", ChageIndustrialArticleNum) //更改对应产业的文章阅读数量
  49. task.AddTask("chageIndustrialArticleNum", chageIndustrialArticleNum)
  50. //IndustrialArticleNum()
  51. //GetAddpArticle() //同步日度点评数据
  52. task.StartTask()
  53. fmt.Println("end")
  54. }
  55. ////白名单发送
  56. //sendEmailUserWhiteList := task.NewTask("sendEmailUserWhiteList", "0 27 17 * * *", SendEmailUserWhiteList) //白名单发送
  57. //task.AddTask("sendEmailUserWhiteList", sendEmailUserWhiteList)
  58. //editOutboundMobile := task.NewTask("editOutboundMobile", "0 */1 8-22 * * *", EditOutboundMobile) //同步外呼号码与手机号
  59. //task.AddTask("sendEmailFileToExpert", editOutboundMobile)
  60. //editUserOutboundMobile := task.NewTask("editUserOutboundMobile", "0 27 14 * * * ", EditUserOutboundMobile) //同步外呼号码与手机号
  61. //task.AddTask("editUserOutboundMobile", editUserOutboundMobile)
  62. func ElasticOption() {
  63. //SyncTacticsList()
  64. //toolbox.StartTask()
  65. //keyWord := "专家"
  66. //pageSize := 20
  67. //SearchByKeyWord(keyWord, pageSize)
  68. //SaveData()
  69. //GetIndustryMap()
  70. //解析报告
  71. //GetArticleExpert()
  72. //SearchByKeyWordQuery("")
  73. //AddMap()
  74. //同步数据
  75. //ImportData()
  76. //AddMap()
  77. //Search("光伏行业")
  78. //修复报告内容
  79. //GetArticleAll()
  80. //indexName := "article_list"
  81. // mappingJson := `{
  82. //"mappings": {
  83. // "dynamic": true,
  84. // "properties": {
  85. // "ArticleId": {
  86. // "type": "integer"
  87. // },
  88. // "Title": {
  89. // "type": "text",
  90. // "analyzer": "ik_smart"
  91. // },
  92. // "TitleEn": {
  93. // "type": "text",
  94. // "analyzer": "ik_smart"
  95. // },
  96. // "UpdateFrequency": {
  97. // "type": "text",
  98. // "analyzer": "ik_smart"
  99. // },
  100. // "CreateDate": {
  101. // "type": "text",
  102. // "analyzer": "ik_smart"
  103. // },
  104. // "PublishDate": {
  105. // "type": "text",
  106. // "analyzer": "ik_smart"
  107. // },
  108. // "Abstract": {
  109. // "type": "text",
  110. // "analyzer": "ik_smart"
  111. // },
  112. // "CategoryName": {
  113. // "type": "text",
  114. // "analyzer": "ik_smart"
  115. // },
  116. // "SubCategoryName": {
  117. // "type": "text",
  118. // "analyzer": "ik_smart"
  119. // },
  120. // "InterviewDate": {
  121. // "type": "text",
  122. // "analyzer": "ik_smart"
  123. // },
  124. // "ExpertBackground": {
  125. // "type": "text",
  126. // "analyzer": "ik_smart"
  127. // },
  128. // "ExpertNumber": {
  129. // "type": "text",
  130. // "analyzer": "ik_smart"
  131. // },
  132. // "Department": {
  133. // "type": "text",
  134. // "analyzer": "ik_smart"
  135. // },
  136. // "BodyText": {
  137. // "type": "text",
  138. // "analyzer": "ik_smart"
  139. // },
  140. // "ArticleIdMd5": {
  141. // "type": "text",
  142. // "analyzer": "ik_smart"
  143. // }
  144. // }
  145. //}
  146. //}`
  147. //EsCreateIndex(indexName,mappingJson)
  148. //插入数据
  149. //allList, err := models.GetArticleAll()
  150. //if err != nil {
  151. // fmt.Println("GetArticleAll Err:", err.Error())
  152. // return
  153. //}
  154. //
  155. //indexName := "article_list"
  156. //
  157. //for _, v := range allList {
  158. // content := html.UnescapeString(v.Body)
  159. // doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
  160. // if err != nil {
  161. // fmt.Println("create doc err:", err.Error())
  162. // return
  163. // }
  164. // bodyText := doc.Text()
  165. //
  166. // item := new(ElasticArticleDetail)
  167. // item.ArticleId = v.ArticleId
  168. // item.Title = v.Title
  169. // item.TitleEn = v.TitleEn
  170. // item.UpdateFrequency = v.UpdateFrequency
  171. // item.CreateDate = v.CreateDate
  172. // item.PublishDate = v.PublishDate
  173. // item.Abstract = v.Abstract
  174. // item.CategoryName = v.CategoryName
  175. // item.SubCategoryName = v.SubCategoryName
  176. // item.InterviewDate = v.InterviewDate
  177. // item.ExpertBackground = v.ExpertBackground
  178. // item.ExpertNumber = v.ExpertNumber
  179. // item.Department = v.Department
  180. // item.ArticleIdMd5 = v.ArticleIdMd5
  181. // item.BodyText = bodyText
  182. // EsAddOrEditData(indexName, strconv.Itoa(v.ArticleId), item)
  183. //}
  184. //fmt.Println("bm")
  185. //bm, err := cache.NewCache("file", `{"CachePath":"./cache","FileSuffix":".cache", "EmbedExpiry": "120"}`)
  186. ////
  187. //if err != nil {
  188. // fmt.Println("false",err)
  189. //}
  190. ////fmt.Println(bm)
  191. //key:="put_key_one"
  192. ////bm.Put(key,1,1*time.Second)
  193. //b:=bm.IsExist(key)
  194. //fmt.Println(b)
  195. //同步策略文章
  196. //SyncTacticsList()
  197. //indexName := "article_list"
  198. //EsDeleteData(indexName,)
  199. }
  200. /*
  201. searchItem := new(models.SearchItem)
  202. searchItem.ArticleId, _ = strconv.Atoi(v.Id)
  203. searchItem.Body = v.Highlight["BodyText"]
  204. searchItem.Title = title
  205. searchItem.PublishDate = article.PublishDate
  206. */
  207. func CreateIndex() {
  208. indexName := "cygx_article_v4" //utils.IndexName
  209. mappingJson := `{
  210. "mappings": {
  211. "dynamic": true,
  212. "properties": {
  213. "ArticleId": {
  214. "type": "integer"
  215. },
  216. "BodyText": {
  217. "type": "text",
  218. "term_vector": "with_positions_offsets",
  219. "analyzer": "ik_smart"
  220. },
  221. "PublishDate": {
  222. "type": "keyword"
  223. },
  224. "SubCategoryName": {
  225. "type": "text",
  226. "term_vector": "with_positions_offsets",
  227. "analyzer": "ik_smart"
  228. },
  229. "Title": {
  230. "type": "text",
  231. "term_vector": "with_positions_offsets",
  232. "analyzer": "ik_smart"
  233. },
  234. "TitleEn": {
  235. "type": "text",
  236. "term_vector": "with_positions_offsets"
  237. },
  238. "UpdateFrequency": {
  239. "type": "text",
  240. "term_vector": "with_positions_offsets"
  241. }
  242. }
  243. }
  244. }`
  245. EsCreateIndex(indexName, mappingJson)
  246. AddAllArticle()
  247. }
  248. func AddAllArticle() {
  249. endDate := time.Now().AddDate(0, 0, -30).Format(utils.FormatDate)
  250. //allList, err := models.GetArticleAll()
  251. allList, err := models.GetArticleAllDate(endDate)
  252. if err != nil {
  253. fmt.Println("GetArticleAll Err:", err.Error())
  254. return
  255. }
  256. indexName := utils.IndexName
  257. for _, v := range allList {
  258. content := html.UnescapeString(v.Body)
  259. doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
  260. if err != nil {
  261. fmt.Println("create doc err:", err.Error())
  262. return
  263. }
  264. bodyText := doc.Text()
  265. item := new(ElasticTestArticleDetail)
  266. item.ArticleId = v.ArticleId
  267. item.Title = v.Title
  268. item.PublishDate = v.PublishDate
  269. item.BodyText = bodyText
  270. EsAddOrEditData(indexName, strconv.Itoa(v.ArticleId), item)
  271. fmt.Println(v.ArticleId)
  272. }
  273. }
  274. func AddAllArticleV4() {
  275. allList, err := models.GetArticleAll2()
  276. if err != nil {
  277. fmt.Println("GetArticleAll Err:", err.Error())
  278. return
  279. }
  280. indexName := "cygx_article_v4"
  281. for _, v := range allList {
  282. content := html.UnescapeString(v.Body)
  283. doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
  284. if err != nil {
  285. fmt.Println("create doc err:", err.Error())
  286. return
  287. }
  288. bodyText := doc.Text()
  289. item := new(ElasticTestArticleDetailV4)
  290. item.ArticleId = v.ArticleId
  291. item.Title = v.Title
  292. item.PublishDate = v.PublishDate
  293. item.BodyText = bodyText
  294. item.IsSummary = v.IsSummary
  295. item.IsReport = v.IsReport
  296. //if v.IsReport == 1 {
  297. // item.IsReport = true
  298. //}
  299. //if v.IsSummary == 1 {
  300. // item.IsSummary = true
  301. //}
  302. EsAddOrEditDataV4(indexName, strconv.Itoa(v.ArticleId), item)
  303. fmt.Println(v.ArticleId)
  304. }
  305. }
  306. // "term_vector": "with_positions_offsets"
  307. type ElasticArticleDetail struct {
  308. ArticleId int `description:"报告id"`
  309. Title string `description:"标题"`
  310. TitleEn string `description:"英文标题 "`
  311. UpdateFrequency string `description:"更新周期"`
  312. CreateDate string `description:"创建时间"`
  313. PublishDate string `description:"发布时间"`
  314. Abstract string `description:"摘要"`
  315. CategoryName string `description:"一级分类"`
  316. SubCategoryName string `description:"二级分类"`
  317. InterviewDate string `description:"访谈时间"`
  318. ExpertBackground string `description:"专家背景"`
  319. ExpertNumber string `description:"专家编号"`
  320. Department string `description:"作者"`
  321. ArticleIdMd5 string `description:"纪要id"`
  322. BodyText string `description:"内容"`
  323. }
  324. type ElasticTestArticleDetail struct {
  325. ArticleId int `description:"报告id"`
  326. Title string `description:"标题"`
  327. BodyText string `description:"内容"`
  328. PublishDate string `description:"发布时间"`
  329. }
  330. type ElasticTestArticleDetailV4 struct {
  331. ArticleId int `description:"报告id"`
  332. Title string `description:"标题"`
  333. BodyText string `description:"内容"`
  334. PublishDate string `description:"发布时间"`
  335. IsSummary int `description:"是否属于纪要库"`
  336. IsReport int `description:"是否属于报告"`
  337. }
  338. func GetAddpArticle() {
  339. list, err := models.GetReportList()
  340. for _, v := range list {
  341. var articleId int
  342. maxArticleIdArticleInfo, errMax := models.GetMaxArticleIdInfo()
  343. if errMax != nil {
  344. fmt.Println(errMax)
  345. return
  346. }
  347. articleId = maxArticleIdArticleInfo.ArticleId + 1
  348. item := new(models.CygxArticle)
  349. item.Title = v.Title
  350. item.ArticleId = articleId
  351. item.SellerAndMobile = v.Author
  352. item.PublishDate = v.PublishTime
  353. item.Abstract = v.Abstract
  354. item.Body = html.UnescapeString(v.Content)
  355. item.BodyText, _ = GetReportContentTextSub(v.Content)
  356. item.IsReport = 1
  357. item.Source = 1
  358. item.ArticleIdMd5 = utils.MD5(strconv.Itoa(articleId))
  359. item.Department = "弘则产品组"
  360. item.ArticleType = "lyjh"
  361. item.IsClass = 1
  362. item.CreateDate = v.CreateTime
  363. item.UpdateFrequency = "unknow"
  364. item.CategoryId = 100 // 100是路演精华对应ID
  365. item.SubCategoryName = "路演精华"
  366. item.HavePublish = 1
  367. item.PublishStatus = 1
  368. item.Periods = strconv.Itoa(v.Stage)
  369. item.VideoUrl = v.VideoUrl
  370. item.VideoName = v.VideoName
  371. item.VideoPlaySeconds = v.VideoPlaySeconds
  372. newId, _ := models.AddCygxArticles(item)
  373. fmt.Println(articleId)
  374. fmt.Println(newId)
  375. fmt.Println(item.ArticleIdMd5)
  376. }
  377. fmt.Println(err)
  378. fmt.Println(list)
  379. }