task.go 11 KB

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