task.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  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. if utils.RunMode == "release" && utils.IsTask {
  16. //syncTacticsListAddreport := task.NewTask("syncTacticsListAddreport", "0 */5 * * * *", SyncTacticsListAddreport) //同步文章
  17. //task.AddTask("syncTacticsListAddreport", syncTacticsListAddreport)
  18. //getSummarytoEs := task.NewTask("getSummarytoEs", "0 */30 * * * *", GetSummarytoEs) //同步纪要库内容到Es
  19. //task.AddTask("getSummarytoEs", getSummarytoEs)
  20. getArticleListByApi := task.NewTask("getArticleListByApi", "0 */5 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章
  21. task.AddTask("getArticleListByApi", getArticleListByApi)
  22. //会议提醒模板消息推送
  23. sendActivityBeginMsg := task.NewTask("sendActivityBeginMsg", "0 */10 6-23 * * *", SendActivityBeginMsg) //会议前60分钟的提醒
  24. task.AddTask("sendActivityBeginMsg", sendActivityBeginMsg)
  25. sendActivityBeginMsgMeeting := task.NewTask("sendActivityBeginMsgMeeting", "0 */5 6-23 * * *", SendActivityBeginMsgMeeting) //会议前15分钟的提醒
  26. task.AddTask("sendActivityBeginMsgMeeting", sendActivityBeginMsgMeeting)
  27. //预约外呼名单,会前1小时自动发送邮件给专家组
  28. sendEmailFileToExpert := task.NewTask("sendEmailFileToExpert", "0 */5 6-23 * * *", SendEmailFileToExpert) //预约外呼名单,会前1小时自动发送邮件给专家组
  29. task.AddTask("sendEmailFileToExpert", sendEmailFileToExpert)
  30. sendEmailUserWhiteListChange := task.NewTask("sendEmailUserWhiteListChange", "0 00 17 * * *", SendEmailUserWhiteListChange) //新增 和冻结的客户白名单
  31. task.AddTask("白名单发送", sendEmailUserWhiteListChange)
  32. dotongbuShangHaiSendEmail := task.NewTask("dotongbuShangHaiSendEmail", "0 00 4 * * *", DotongbuShangHaiSendEmail) //发送上海策略品台同步结果名单的邮件附件
  33. task.AddTask("发送上海策略品台同步结果名单的邮件附件", dotongbuShangHaiSendEmail)
  34. getChartListByApi := task.NewTask("getChartListByApi", "0 */10 * * * *", GetChartDetailByChartId) //同步图表
  35. task.AddTask("getChartListByApi", getChartListByApi)
  36. }
  37. if utils.IsTask {
  38. getYiDongActivity := task.NewTask("getYiDongActivity", "0 */10 * * * *", GetYiDongActivity) //同步易董的活动信息
  39. task.AddTask("getYiDongActivity", getYiDongActivity)
  40. getYiDongActivityMeeting := task.NewTask("getYiDongActivityMeeting", "0 */30 * * * *", GetYiDongActivityMeeting) //同步易董的活动信息
  41. task.AddTask("getYiDongActivityMeeting", getYiDongActivityMeeting)
  42. yiDongSignAppointmentsForThird := task.NewTask("yiDongSignAppointmentsForThird", "0 */10 * * * *", YiDongSignAppointmentsForThird) //会前一小时将,报名信息同步到易董
  43. task.AddTask("yiDongSignAppointmentsForThird", yiDongSignAppointmentsForThird)
  44. //修改任务状
  45. updateActivitySattus := task.NewTask("syncTacticsListAddreport", "0 */1 6-23 * * *", UpdateActivitySattus)
  46. task.AddTask("updateActivitySattus", updateActivitySattus)
  47. //更新深 和新的标签
  48. updateIndustrialManagementLabel := task.NewTask("updateIndustrialManagementLabel", "0 */30 * * * *", UpdateIndustrialManagementLabel)
  49. task.AddTask("updateIndustrialManagementLabel", updateIndustrialManagementLabel)
  50. //更改对应产业的文章阅读数量
  51. chageIndustrialArticleNum := task.NewTask("chageIndustrialArticleNum", "0 01 00 * * *", ChageIndustrialArticleNum) //更改对应产业的文章阅读数量
  52. task.AddTask("chageIndustrialArticleNum", chageIndustrialArticleNum)
  53. activityAttendanceDetail := task.NewTask("activityAttendanceDetail", "0 00 3 * * *", ActivityAttendanceDetail) //同步进门财经的路演信息
  54. task.AddTask("sendEmailUserWhiteListChange", activityAttendanceDetail)
  55. sendEmailFileForAskMsgResearch := task.NewTask("sendEmailFileForAskMsgResearch", "0 */5 6-23 * * *", SendEmailFileForAskMsgResearch) //研选系列专家电话会,会前1小时将问题列表发送给邮箱
  56. task.AddTask("sendEmailFileForAskMsgResearch", sendEmailFileForAskMsgResearch)
  57. sendEmailFileForAskMsg := task.NewTask("sendEmailFileForAskMsg", "0 */5 6-23 * * *", SendEmailFileForAskMsg) //非研选系列专家电话会,根据主持人姓名,会前15分钟将问题列表发送给至该主持人对应邮箱
  58. task.AddTask("sendEmailFileForAskMsg", sendEmailFileForAskMsg)
  59. updateWxUserLabel := task.NewTask("updateWxUserLabel", "0 01 0 * * *", UpdateWxUserLabel) //更新用户的标签
  60. task.AddTask("updateWxUserLabel", updateWxUserLabel)
  61. addAllArticleHistory := task.NewTask("addAllArticleHistory", "0 30 2 * * *", AddAllArticleHistory) //把前一天的用户阅读记录同步到ES
  62. task.AddTask("addAllArticleHistory", addAllArticleHistory)
  63. getCeLueArticlePv := task.NewTask("getCeLueArticlePv", "0 */10 * * * *", GetCeLueArticlePv) //通过三方接口获取策略平台上的阅读记录
  64. task.AddTask("getCeLueArticlePv", getCeLueArticlePv)
  65. reportBillboardUpdate := task.NewTask("reportBillboardUpdate", "0 10 0 * * *", ReportBillboardUpdate) //报告榜单更新
  66. task.AddTask("reportBillboardUpdate", reportBillboardUpdate)
  67. doActivityOnenIdWxTemplateMsg := task.NewTask("doActivityOnenIdWxTemplateMsg", "0 30 16 * * 0", DoActivityOnenIdWxTemplateMsg) //周日下午四点半推送全部活动
  68. task.AddTask("doActivityOnenIdWxTemplateMsg", doActivityOnenIdWxTemplateMsg)
  69. updateCygxActivitySpecialSignupNum := task.NewTask("updateCygxActivitySpecialSignupNum", "0 25 0 * * *", UpdateCygxActivitySpecialSignupNum) //修改专项调研,用户与公司的参与数量
  70. task.AddTask("updateCygxActivitySpecialSignupNum", updateCygxActivitySpecialSignupNum)
  71. dotongbuShangHai := task.NewTask("dotongbuShangHai", "0 */20 * * * *", DotongbuShangHai) //把信息同步到上海策略品台
  72. task.AddTask("同步用户到上海", dotongbuShangHai)
  73. updateDailyMonthReadBillboard := task.NewTask("updateDailyMonthReadBillboard", "0 0 3 * * *", UpdateDailyMonthReadBillboard) // 每日3:00更新阅读飙升榜单
  74. task.AddTask("updateDailyMonthReadBillboard", updateDailyMonthReadBillboard)
  75. addctivitySignupDetail := task.NewTask("addctivitySignupDetail", "0 0 23 * * *", AddctivitySignupDetail) // 获取当天已结束的活动的报名信息。添加到到会详情
  76. task.AddTask("addctivitySignupDetail", addctivitySignupDetail)
  77. sendWxMsgActivitySpecialTwoDays := task.NewTask("sendWxMsgActivitySpecialTwoDays", "0 0 8 * * *", SendWxMsgActivitySpecialTwoDays)
  78. task.AddTask("sendWxMsgActivitySpecialTwoDays", sendWxMsgActivitySpecialTwoDays) //活动开始前两天08:00,提醒报名客户 \提醒报名客户的对口销售
  79. //sendWxMsgActivitySpecialCancel := task.NewTask("sendWxMsgActivitySpecialCancel", "0 0 8 * * *", SendWxMsgActivitySpecialCancel)
  80. //task.AddTask("sendWxMsgActivitySpecialCancel", sendWxMsgActivitySpecialCancel) // 线下活动前4天08:00报名人数不足7人,线上活动前3天08:00报名人数不足10人,活动自动取消发布,并推送模板消息至报名客户及对口销售
  81. }
  82. if utils.RunMode != "release" {
  83. getArticleListByApi := task.NewTask("getArticleListByApi", "0 */60 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章
  84. task.AddTask("getArticleListByApi", getArticleListByApi)
  85. }
  86. //GetCygxActivityAttendanceDetail()
  87. //CreateIndexNameArticleHistory()
  88. //AddAllArticleHistory()
  89. //DoCompany()
  90. //ActivityAttendanceDetail()
  91. //SynchronizationArthistory()//同步原有的阅读记录
  92. //GetAddpArticle() //同步日度点评数据
  93. //SendEmailAllUserWithRAI() //发送当前所有权益用户到沈大爷的邮箱
  94. //SendEmailAllUserWithCompany() //发送这些公司下的用户到沈大爷的邮箱
  95. task.StartTask()
  96. //StatisticalReport()//导出报表
  97. fmt.Println("end")
  98. }
  99. ////白名单发送
  100. //sendEmailUserWhiteList := task.NewTask("sendEmailUserWhiteList", "0 27 17 * * *", SendEmailUserWhiteList) //白名单发送
  101. //task.AddTask("sendEmailUserWhiteList", sendEmailUserWhiteList)
  102. //editOutboundMobile := task.NewTask("editOutboundMobile", "0 */1 8-22 * * *", EditOutboundMobile) //同步外呼号码与手机号
  103. //task.AddTask("sendEmailFileToExpert", editOutboundMobile)
  104. //editUserOutboundMobile := task.NewTask("editUserOutboundMobile", "0 27 14 * * * ", EditUserOutboundMobile) //同步外呼号码与手机号
  105. //task.AddTask("editUserOutboundMobile", editUserOutboundMobile)
  106. func CreateIndex() {
  107. indexName := utils.IndexName
  108. mappingJson := `{
  109. "mappings": {
  110. "dynamic": true,
  111. "properties": {
  112. "ArticleId": {
  113. "type": "integer"
  114. },
  115. "CategoryId": {
  116. "type": "text"
  117. },
  118. "BodyText": {
  119. "type": "text",
  120. "term_vector": "with_positions_offsets",
  121. "analyzer": "ik_smart"
  122. },
  123. "PublishDate": {
  124. "type": "keyword"
  125. },
  126. "SubCategoryName": {
  127. "type": "text",
  128. "term_vector": "with_positions_offsets",
  129. "analyzer": "ik_smart"
  130. },
  131. "Title": {
  132. "type": "text",
  133. "term_vector": "with_positions_offsets",
  134. "analyzer": "ik_smart"
  135. },
  136. "Abstract": {
  137. "type": "text",
  138. "term_vector": "with_positions_offsets",
  139. "analyzer": "ik_smart"
  140. },
  141. "Annotation": {
  142. "type": "text",
  143. "term_vector": "with_positions_offsets",
  144. "analyzer": "ik_smart"
  145. },
  146. "TitleEn": {
  147. "type": "text",
  148. "term_vector": "with_positions_offsets"
  149. },
  150. "UpdateFrequency": {
  151. "type": "text",
  152. "term_vector": "with_positions_offsets"
  153. },
  154. "ExpertBackground": {
  155. "type": "text",
  156. "term_vector": "with_positions_offsets"
  157. }
  158. }
  159. }
  160. }`
  161. EsCreateIndex(indexName, mappingJson)
  162. AddAllArticle()
  163. }
  164. func AddAllArticle() {
  165. endDate := time.Now().AddDate(0, 0, -30).Format(utils.FormatDate)
  166. //allList, err := models.GetArticleAll()
  167. allList, err := models.GetArticleAllDate(endDate)
  168. if err != nil {
  169. fmt.Println("GetArticleAll Err:", err.Error())
  170. return
  171. }
  172. indexName := utils.IndexName
  173. for _, v := range allList {
  174. content := html.UnescapeString(v.Body)
  175. doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
  176. if err != nil {
  177. fmt.Println("create doc err:", err.Error())
  178. return
  179. }
  180. bodyText := doc.Text()
  181. item := new(ElasticTestArticleDetail)
  182. item.ArticleId = v.ArticleId
  183. item.Title = v.Title
  184. item.PublishDate = v.PublishDate
  185. item.BodyText = bodyText
  186. item.ExpertBackground = v.ExpertBackground
  187. item.Annotation, _ = GetReportContentTextSubNew(v.Annotation)
  188. item.Abstract, _ = GetReportContentTextSubNew(v.Abstract)
  189. item.CategoryId = strconv.Itoa(v.CategoryId)
  190. EsAddOrEditData(indexName, strconv.Itoa(v.ArticleId), item)
  191. fmt.Println(v.ArticleId)
  192. }
  193. }
  194. func AddAllArticleV4() {
  195. allList, err := models.GetArticleAll2()
  196. if err != nil {
  197. fmt.Println("GetArticleAll Err:", err.Error())
  198. return
  199. }
  200. indexName := "cygx_article_v4"
  201. for _, v := range allList {
  202. content := html.UnescapeString(v.Body)
  203. doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
  204. if err != nil {
  205. fmt.Println("create doc err:", err.Error())
  206. return
  207. }
  208. bodyText := doc.Text()
  209. item := new(ElasticTestArticleDetailV4)
  210. item.ArticleId = v.ArticleId
  211. item.Title = v.Title
  212. item.PublishDate = v.PublishDate
  213. item.BodyText = bodyText
  214. item.IsSummary = v.IsSummary
  215. item.IsReport = v.IsReport
  216. //if v.IsReport == 1 {
  217. // item.IsReport = true
  218. //}
  219. //if v.IsSummary == 1 {
  220. // item.IsSummary = true
  221. //}
  222. EsAddOrEditDataV4(indexName, strconv.Itoa(v.ArticleId), item)
  223. fmt.Println(v.ArticleId)
  224. }
  225. }
  226. // "term_vector": "with_positions_offsets"
  227. type ElasticArticleDetail struct {
  228. ArticleId int `description:"报告id"`
  229. Title string `description:"标题"`
  230. TitleEn string `description:"英文标题 "`
  231. UpdateFrequency string `description:"更新周期"`
  232. CreateDate string `description:"创建时间"`
  233. PublishDate string `description:"发布时间"`
  234. Abstract string `description:"摘要"`
  235. CategoryName string `description:"一级分类"`
  236. SubCategoryName string `description:"二级分类"`
  237. InterviewDate string `description:"访谈时间"`
  238. ExpertBackground string `description:"专家背景"`
  239. ExpertNumber string `description:"专家编号"`
  240. Department string `description:"作者"`
  241. ArticleIdMd5 string `description:"纪要id"`
  242. BodyText string `description:"内容"`
  243. }
  244. type ElasticTestArticleDetail struct {
  245. ArticleId int `description:"报告id"`
  246. Title string `description:"标题"`
  247. BodyText string `description:"内容"`
  248. PublishDate string `description:"发布时间"`
  249. ExpertBackground string `description:"专家背景"`
  250. CategoryId string `description:"文章分类"`
  251. Abstract string `description:"摘要"`
  252. Annotation string `description:"核心观点"`
  253. }
  254. type ElasticTestArticleDetailV4 struct {
  255. ArticleId int `description:"报告id"`
  256. Title string `description:"标题"`
  257. BodyText string `description:"内容"`
  258. PublishDate string `description:"发布时间"`
  259. IsSummary int `description:"是否属于纪要库"`
  260. IsReport int `description:"是否属于报告"`
  261. }
  262. func GetAddpArticle() {
  263. list, err := models.GetReportList()
  264. for _, v := range list {
  265. var articleId int
  266. maxArticleIdArticleInfo, errMax := models.GetMaxArticleIdInfo()
  267. if errMax != nil {
  268. fmt.Println(errMax)
  269. return
  270. }
  271. articleId = maxArticleIdArticleInfo.ArticleId + 1
  272. item := new(models.CygxArticle)
  273. item.Title = v.Title
  274. item.ArticleId = articleId
  275. item.SellerAndMobile = v.Author
  276. item.PublishDate = v.PublishTime
  277. item.Abstract = v.Abstract
  278. item.Body = html.UnescapeString(v.Content)
  279. item.BodyText, _ = GetReportContentTextSub(v.Content)
  280. item.IsReport = 1
  281. item.Source = 1
  282. item.ArticleIdMd5 = utils.MD5(strconv.Itoa(articleId))
  283. item.Department = "弘则产品组"
  284. item.ArticleType = "lyjh"
  285. item.IsClass = 1
  286. item.CreateDate = v.CreateTime
  287. item.UpdateFrequency = "unknow"
  288. item.CategoryId = 100 // 100是路演精华对应ID
  289. item.SubCategoryName = "路演精华"
  290. item.HavePublish = 1
  291. item.PublishStatus = 1
  292. item.Periods = strconv.Itoa(v.Stage)
  293. item.VideoUrl = v.VideoUrl
  294. item.VideoName = v.VideoName
  295. item.VideoPlaySeconds = v.VideoPlaySeconds
  296. newId, _ := models.AddCygxArticles(item)
  297. fmt.Println(articleId)
  298. fmt.Println(newId)
  299. fmt.Println(item.ArticleIdMd5)
  300. }
  301. fmt.Println(err)
  302. fmt.Println(list)
  303. }
  304. func SynchronizationArthistory() {
  305. go SynchronizationArtclehistory()
  306. }
  307. //func init() {
  308. //
  309. // var newActivityName string
  310. // list, err := models.GetActivityList()
  311. // if err != nil {
  312. // fmt.Println(err)
  313. // }
  314. // for _, v := range list {
  315. //
  316. // fmt.Println("原来的", v.ActivityName)
  317. // newActivityName = v.ActivityName
  318. // newActivityName = strings.Replace(newActivityName, "【", "", -1)
  319. // newActivityName = strings.Replace(newActivityName, "】", "", -1)
  320. // newActivityName = strings.Replace(newActivityName, "-", "", -1)
  321. // newActivityName = strings.Replace(newActivityName, "—", "", -1)
  322. // newActivityName = strings.Replace(newActivityName, " ", "", -1)
  323. // newActivityName = strings.Replace(newActivityName, ":", "", -1)
  324. // fmt.Println("处理的", newActivityName)
  325. // err = models.UpdateCygxActivityName(v.ActivityId, newActivityName)
  326. // if err != nil {
  327. // fmt.Println(err)
  328. // }
  329. // }
  330. //}
  331. //func init() {
  332. // fmt.Println("init start")
  333. // go UpdateDailyMonthReadBillboardV2()
  334. // fmt.Println("init end")
  335. //}