task.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. package services
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/beego/beego/v2/adapter/logs"
  6. "hongze/hz_eta_api/models"
  7. saModel "hongze/hz_eta_api/models/semantic_analysis"
  8. "hongze/hz_eta_api/services/alarm_msg"
  9. "hongze/hz_eta_api/services/data"
  10. "hongze/hz_eta_api/utils"
  11. "strings"
  12. "time"
  13. )
  14. func Task() {
  15. fmt.Println("task start")
  16. {
  17. // 修复客户试用数据
  18. //FixCompanyUpdateData()
  19. //FixCompanyTryDay()
  20. //FixCompanyTryDay()
  21. //StaticCompanyTryDay()
  22. //return
  23. }
  24. //FixPermissionStatus()
  25. //GetCompanyInfo()
  26. //ReportCount()
  27. //windSourceUrl:=`http://47.100.166.55:7002/edbInfo/wind/?EdbCode=M0001427&StartDate=2020-11-01&EndDate=2021-03-01`
  28. //data.AddAllArticle()
  29. //data.GetSmmIndex()
  30. //data.GetSmmIndexData()
  31. go AutoInsertLogToDB()
  32. // TODO:确定晨报在新后台撰写之后打开, 防止误写之后被自动推送
  33. //go AutoPublishDayReport()
  34. go AutoSyncOldReport()
  35. //手工数据表格导入后的指标库刷新
  36. go ImportManualDataRefresh()
  37. //ImportManualDataRefresh()
  38. //修复用户关注标识
  39. //GetWxUsersSubscribe()
  40. //go UpdateOldTrialUsersManualAuth()
  41. go AutoInsertAdminOperateRecordToDB()
  42. // TODO:修复权限
  43. //FixEnCompanyPermission()
  44. fmt.Println("task end")
  45. }
  46. // 每日发布晨报
  47. func AutoPublishDayReport() {
  48. defer func() {
  49. if err := recover(); err != nil {
  50. fmt.Println("[AutoPublishDayReport]", err)
  51. }
  52. }()
  53. // 每日8:42发布晨报
  54. ticker := time.Tick(50 * time.Second)
  55. for range ticker {
  56. nowTime := time.Now()
  57. clock := nowTime.Format("1504")
  58. if clock == "0842" {
  59. if err := PublishTodayDayReport(); err != nil {
  60. go alarm_msg.SendAlarmMsg(fmt.Sprint("每日晨报自动发送 AutoPublishDayReport ERR:", err), 3)
  61. //utils.SendEmail(utils.APPNAME+" "+utils.RunMode+" 失败提醒", fmt.Sprint("AutoPublishDayReport ERR:", err), utils.EmailSendToUsers)
  62. }
  63. }
  64. }
  65. }
  66. // ImportManualDataRefresh 导入手工数据后的刷新
  67. func ImportManualDataRefresh() {
  68. defer func() {
  69. if err := recover(); err != nil {
  70. fmt.Println("[ImportManualDataRefresh]", err)
  71. }
  72. }()
  73. for {
  74. utils.Rc.Brpop(utils.CACHE_IMPORT_MANUAL_DATA, func(b []byte) {
  75. edbCode := string(b)
  76. edbCode = strings.TrimPrefix(edbCode, `"`)
  77. edbCode = strings.TrimSuffix(edbCode, `"`)
  78. data.RefreshManualData(edbCode)
  79. })
  80. }
  81. }
  82. //func init() {
  83. // fmt.Println("start task init")
  84. // UpdateEnglishEmailLogErrMsg()
  85. // fmt.Println("end task init")
  86. //}
  87. //
  88. //// UpdateEnglishEmailLogErrMsg 更新英文邮件日志的ErrMsg(研报后台4.2上线后执行, 仅一次)
  89. //func UpdateEnglishEmailLogErrMsg() {
  90. // var cond string
  91. // var pars []interface{}
  92. // list, e := models.GetEnglishReportEmailLogList(cond, pars)
  93. // if e != nil {
  94. // fmt.Println("获取日志列表失败")
  95. // return
  96. // }
  97. // for _, v := range list {
  98. // if v.SendStatus != 0 || v.Source != 1 || v.Result == "" || v.ErrMsg != "" {
  99. // continue
  100. // }
  101. // // 取出错误信息
  102. // fmt.Printf("正在更新%d\n", v.Id)
  103. // r := new(AliyunEmailResult)
  104. // if e = json.Unmarshal([]byte(v.Result), &r); e != nil {
  105. // fmt.Println("JSON解析报错了1" + e.Error())
  106. // continue
  107. // }
  108. // rd := new(AliyunEmailResultData)
  109. // res := strings.Replace(r.Data, `\`, ``, -1)
  110. // if e = json.Unmarshal([]byte(res), &rd); e != nil {
  111. // fmt.Println("JSON解析报错了2" + e.Error())
  112. // continue
  113. // }
  114. // v.ErrMsg = rd.Message
  115. // if e = v.Update([]string{"ErrMsg"}); e != nil {
  116. // fmt.Println("更新失败了" + e.Error())
  117. // continue
  118. // }
  119. // }
  120. // fmt.Println("更新成功")
  121. //}
  122. //func FixCompanyUpdateData1() {
  123. // list, err := company.GetCompanyProductUpdateLogList()
  124. // if err != nil {
  125. // fmt.Println("获取客户变更数据失败:", err)
  126. // return
  127. // }
  128. //
  129. // nowTime := time.Now()
  130. // for _, v := range list {
  131. // //item, tmpErr := company.GetCompanyProductLogItem(v.CompanyId, v.ProductId, v.CreateTime)
  132. // //if tmpErr != nil {
  133. // // fmt.Println(v.Id, "找数据,", tmpErr)
  134. // // continue
  135. // //}
  136. //
  137. // //permissionList := make([]*company.CompanyReportPermission, 0)
  138. // //switch v.Source {
  139. // //case "add", "receive", "thaw", "delay", "apply_receive":
  140. // //
  141. // //}
  142. // permissionList, err := company.GetCompanyReportPermission(v.CompanyId, v.ProductId)
  143. // if err != nil {
  144. // fmt.Println("err:", err)
  145. // continue
  146. // }
  147. //
  148. // startDate := v.CreateTime
  149. // endDate := v.CreateTime.AddDate(0, 2, 0)
  150. // isStop := 1
  151. // realEndDate := endDate
  152. // if realEndDate.After(nowTime) {
  153. // realEndDate = nowTime
  154. // isStop = 0
  155. // }
  156. // for _, permission := range permissionList {
  157. // permission.StartDate = startDate.Format(utils.FormatDate)
  158. // permission.EndDate = v.CreateTime.Format(utils.FormatDate)
  159. // }
  160. // companyProductTryOutUpdateLogItem := &company.CompanyProductTryOutUpdateLog{
  161. // Id: 0,
  162. // CompanyId: v.CompanyId,
  163. // ProductId: v.ProductId,
  164. // SellerId: v.SellerId,
  165. // SellerName: v.SellerName,
  166. // Source: v.Source,
  167. // StartDate: startDate,
  168. // EndDate: endDate,
  169. // RealEndDate: realEndDate,
  170. // IsStop: isStop,
  171. // CreateTime: v.CreateTime,
  172. // }
  173. // err = company.AddCompanyProductTryOutUpdateLog(companyProductTryOutUpdateLogItem, permissionList)
  174. // }
  175. // //fmt.Println("结束")
  176. //}
  177. //func FixCompanyUpdateData2() {
  178. // list, err := company.GetTryOutCompanyOperationRecordList()
  179. // if err != nil {
  180. // fmt.Println("获取客户变更数据失败:", err)
  181. // return
  182. // }
  183. //
  184. // nowTime := time.Now()
  185. // for _, v := range list {
  186. // //item, tmpErr := company.GetCompanyProductLogItem(v.CompanyId, v.ProductId, v.CreateTime)
  187. // //if tmpErr != nil {
  188. // // fmt.Println(v.Id, "找数据,", tmpErr)
  189. // // continue
  190. // //}
  191. //
  192. // //permissionList := make([]*company.CompanyReportPermission, 0)
  193. // //switch v.Source {
  194. // //case "add", "receive", "thaw", "delay", "apply_receive":
  195. // //
  196. // //}
  197. // permissionList, err := company.GetCompanyReportPermission(v.CompanyId, v.ProductId)
  198. // if err != nil {
  199. // fmt.Println("err:", err)
  200. // continue
  201. // }
  202. //
  203. // startDate := v.CreateTime
  204. // endDate := v.CreateTime.AddDate(0, 2, 0)
  205. // isStop := 1
  206. // realEndDate := endDate
  207. // if realEndDate.After(nowTime) {
  208. // realEndDate = nowTime
  209. // isStop = 0
  210. // }
  211. // for _, permission := range permissionList {
  212. // permission.StartDate = startDate.Format(utils.FormatDate)
  213. // permission.EndDate = v.CreateTime.Format(utils.FormatDate)
  214. // }
  215. // sellerName := ``
  216. // {
  217. // sysUser, _ := system.GetSysAdminById(v.SellerId)
  218. // if sysUser != nil {
  219. // sellerName = sysUser.RealName
  220. // }
  221. // }
  222. // companyProductTryOutUpdateLogItem := &company.CompanyProductTryOutUpdateLog{
  223. // Id: 0,
  224. // CompanyId: v.CompanyId,
  225. // ProductId: v.ProductId,
  226. // SellerId: v.SellerId,
  227. // SellerName: sellerName,
  228. // Source: "formal_to_try_out",
  229. // StartDate: startDate,
  230. // EndDate: endDate,
  231. // RealEndDate: realEndDate,
  232. // IsStop: isStop,
  233. // CreateTime: v.CreateTime,
  234. // }
  235. // err = company.AddCompanyProductTryOutUpdateLog(companyProductTryOutUpdateLogItem, permissionList)
  236. // }
  237. // fmt.Println("结束")
  238. //}
  239. // FixCompanyTryDay 修复试用天数
  240. //func FixCompanyTryDay() {
  241. // list, err := company.GetCompanyProductTryOutUpdateGroup()
  242. // if err != nil {
  243. // fmt.Println("获取客户变更数据失败:", err)
  244. // return
  245. // }
  246. //
  247. // lenList := len(list)
  248. // for k, v := range list {
  249. // fmt.Println("剩余", lenList-k-1, "条数据修复")
  250. // companyProduct, tmpErr := company.GetCompanyProductByCompanyIdAndProductId(v.CompanyId, v.ProductId)
  251. // if tmpErr != nil {
  252. // fmt.Println("company_id:", v.CompanyId, ";product_id:", v.ProductId, ";找不到对应的客户,Err:", tmpErr)
  253. // continue
  254. // }
  255. //
  256. // logList, err := company.GetCompanyProductTryOutUpdateList(v.CompanyId, v.ProductId)
  257. // if err != nil {
  258. // fmt.Println("查找客户日志失败,err:", err)
  259. // continue
  260. // }
  261. //
  262. // //lenLog := len(logList)
  263. // var day int //实际试用天数
  264. // var endDate time.Time
  265. // for _, log := range logList {
  266. // startDate := log.StartDate
  267. // if endDate.IsZero() {
  268. // endDate = log.RealEndDate
  269. // day = utils.GetTimeSubDay(startDate, log.RealEndDate) + 1
  270. // } else {
  271. // if log.RealEndDate.After(endDate) {
  272. // if endDate.After(startDate) {
  273. // startDate = endDate
  274. // }
  275. // if startDate.Equal(log.EndDate) {
  276. // day += utils.GetTimeSubDay(startDate, log.RealEndDate)
  277. // } else {
  278. // day += utils.GetTimeSubDay(startDate, log.RealEndDate) + 1
  279. // }
  280. // endDate = log.RealEndDate
  281. // }
  282. // }
  283. // }
  284. // companyProduct.TryOutDayTotal = day
  285. // companyProduct.Update([]string{"TryOutDayTotal"})
  286. // }
  287. // fmt.Println("结束")
  288. //}
  289. // StaticCompanyTryDay 定时任务每天更新试用天数
  290. //func StaticCompanyTryDay() {
  291. // list, err := company.GetCompanyProductTryOutUpdateNoStopGroup()
  292. // if err != nil {
  293. // fmt.Println("获取客户变更数据失败:", err)
  294. // return
  295. // }
  296. //
  297. // lenList := len(list)
  298. // for k, v := range list {
  299. // isAdd := false //是否要增加一天,默认不加
  300. // fmt.Println("剩余", lenList-k-1, "条数据修复")
  301. // permissionList, tmpErr := company.GetCompanyReportPermissionByStatus(v.CompanyId, v.ProductId, "试用")
  302. // if tmpErr == nil {
  303. // fmt.Println("company_id:", v.CompanyId, ";product_id:", v.ProductId, ";寻找对应的试用品种失败,Err:", tmpErr)
  304. // continue
  305. // }
  306. // currPermissionIdList := make([]int, 0) //当前试用的品种
  307. // for _, permission := range permissionList {
  308. // currPermissionIdList = append(currPermissionIdList, permission.ChartPermissionId)
  309. // }
  310. //
  311. // //获取所有未停止的记录列表
  312. // logList, err := company.GetCompanyProductTryOutUpdateNoStopListByEndDate(v.CompanyId, v.ProductId)
  313. // if err != nil {
  314. // fmt.Println("查找客户日志失败,err:", err)
  315. // continue
  316. // }
  317. //
  318. // logPermissionIdList := make([]int, 0) //当前日志中的试用的品种
  319. // for _, log := range logList {
  320. // //获取所有未停止的品种试用记录列表
  321. // logPermissionList, tmpErr := company.GetCompanyProductTryOutPermissionUpdateNoStopListByEndDate(log.Id)
  322. // if tmpErr != nil {
  323. // fmt.Println("查找客户品种变更日志失败,err:", tmpErr)
  324. // continue
  325. // }
  326. // lenLogPermissionList := len(logPermissionList) //当前日志存在试用的品种数量
  327. // stopPermission := 0 //当前日志需要停止的品种数量
  328. //
  329. // currTime := time.Now() //当前时间
  330. // for _, logPermission := range logPermissionList {
  331. // if utils.InArrayByInt(logPermissionIdList, logPermission.ChartPermissionId) {
  332. // // 如果已经被其他记录使用了,那么就将当前记录给标记停止
  333. // logPermission.IsStop = 1
  334. //
  335. // // 如果当前时间晚于结束日期,那么实际结束日期就是今天之前一天,否则就是当天
  336. // if currTime.After(logPermission.EndDate) {
  337. // logPermission.RealEndDate = currTime.AddDate(0, 0, -1)
  338. // } else {
  339. // logPermission.RealEndDate = time.Now()
  340. // }
  341. // logPermission.Update([]string{"IsStop", "RealEndDate"})
  342. // stopPermission++
  343. // continue
  344. // } else if !utils.InArrayByInt(currPermissionIdList, logPermission.ChartPermissionId) {
  345. // // 如果该品种不在当前客户的品种里面,那么也要将当前记录给标记停止
  346. // logPermission.IsStop = 1
  347. // // 如果当前时间晚于结束日期,那么实际结束日期就是今天之前一天,否则就是当天
  348. // if currTime.After(logPermission.EndDate) {
  349. // logPermission.RealEndDate = currTime.AddDate(0, 0, -1)
  350. // } else {
  351. // logPermission.RealEndDate = time.Now()
  352. // }
  353. // logPermission.Update([]string{"IsStop", "RealEndDate"})
  354. // stopPermission++
  355. // continue
  356. // }
  357. //
  358. // // 剩下的说明还处于试用状态,需要添加1天试用期,且需要把该品种加入到当前日志中的试用的品种列表
  359. // isAdd = true
  360. // logPermissionIdList = append(logPermissionIdList, logPermission.ChartPermissionId)
  361. // }
  362. //
  363. // //如果当前日志存在试用的品种数量 == 当前日志需要停止的品种数量
  364. // // 那么当前日志也是处于停用状态
  365. // if lenLogPermissionList == stopPermission {
  366. // log.IsStop = 1
  367. // // 如果当前时间晚于结束日期,那么实际结束日期就是今天之前一天,否则就是当天
  368. // if currTime.After(log.EndDate) {
  369. // log.RealEndDate = currTime.AddDate(0, 0, -1)
  370. // } else {
  371. // log.RealEndDate = time.Now()
  372. // }
  373. // log.Update([]string{"IsStop", "RealEndDate"})
  374. // }
  375. //
  376. // }
  377. //
  378. // // 如果需要添加,那么将该客户品种添加1天
  379. // if isAdd {
  380. //
  381. // }
  382. // // 更新客户产品的试用天数
  383. // tmpErr = company.AddCompanyProductTryOutDayTotal(v.CompanyId, v.ProductId)
  384. // if tmpErr != nil {
  385. // fmt.Println("company_id:", v.CompanyId, ";product_id:", v.ProductId, ";更新客户产品的试用天数,Err:", tmpErr)
  386. // continue
  387. // }
  388. // }
  389. // fmt.Println("结束")
  390. //}
  391. //func Task2() {
  392. // fmt.Println("task start")
  393. //
  394. // //_, _ = maycur.GetPublicOfferingSaleLeader()
  395. // //_ = maycur.TestSyncCompanyProfile()
  396. // //_ = maycur.SyncCompanyProfile()
  397. // //_ = maycur.ImportExcelEmployeeId()
  398. // //_ = maycur.ApiTest()
  399. // //_ = maycur.ApiTest2()
  400. // fmt.Println("task end")
  401. //}
  402. // FixEnCompanyPermission 英文权限上线时修复英文客户拥有所有权限(一次性)
  403. func FixEnCompanyPermission() {
  404. var err error
  405. defer func() {
  406. if err != nil {
  407. fmt.Println("FixEnCompanyPermission Err: ", err.Error())
  408. }
  409. }()
  410. // 获取正式客户
  411. companies := make([]*models.EnglishCompany, 0)
  412. {
  413. cond := ` AND status = ?`
  414. pars := make([]interface{}, 0)
  415. pars = append(pars, 1)
  416. list, e := models.GetEnglishCompanyList(cond, pars, "")
  417. if e != nil {
  418. err = fmt.Errorf("GetEnglishCompanyList err: %s", e.Error())
  419. return
  420. }
  421. companies = list
  422. }
  423. // 获取所有权限
  424. permissions := make([]*models.EnPermission, 0)
  425. {
  426. cond := ` AND parent_id > ?`
  427. pars := make([]interface{}, 0)
  428. pars = append(pars, 0)
  429. ob := new(models.EnPermission)
  430. list, e := ob.GetItemsByCondition(cond, pars, []string{}, "")
  431. if e != nil {
  432. err = fmt.Errorf("GetPermissionItemsByCondition err: %s", e.Error())
  433. return
  434. }
  435. permissions = list
  436. }
  437. for _, c := range companies {
  438. ps := make([]*models.EnCompanyPermission, 0)
  439. for _, p := range permissions {
  440. ps = append(ps, &models.EnCompanyPermission{
  441. EnCompanyId: c.CompanyId,
  442. EnPermissionId: p.EnPermissionId,
  443. CreateTime: time.Now().Local(),
  444. })
  445. }
  446. if e := models.ClearAndCreateEnCompanyPermissions(c.CompanyId, ps); e != nil {
  447. err = fmt.Errorf("ClearAndCreateEnCompanyPermissions err: %s", e.Error())
  448. return
  449. }
  450. }
  451. fmt.Println("修复完成")
  452. }
  453. func ElasticSaCompareInit() {
  454. // 标题去重
  455. CreateSaCompareES()
  456. var err error
  457. defer func() {
  458. if err != nil {
  459. logs.Info("批量新增文档对比es出错" + err.Error())
  460. }
  461. }()
  462. existItem := new(saModel.SaCompare)
  463. existCond := fmt.Sprintf(` AND result_img != ""`)
  464. existPars := make([]interface{}, 0)
  465. list, e := existItem.GetItemsByCondition(existCond, existPars, []string{}, "")
  466. if e != nil {
  467. err = e
  468. return
  469. }
  470. client := utils.EsClient
  471. for _, saCompare := range list {
  472. // 新增报告ES
  473. item := &saModel.SaCompareElastic{
  474. SaCompareId: saCompare.SaCompareId,
  475. ClassifyId: saCompare.ClassifyId,
  476. ClassifyName: saCompare.ClassifyName,
  477. Title: saCompare.Title,
  478. ResultImg: saCompare.ResultImg,
  479. CreateTime: saCompare.CreateTime.Format(utils.FormatDateTime),
  480. ModifyTime: saCompare.ModifyTime.Format(utils.FormatDateTime),
  481. SysAdminId: saCompare.SysAdminId,
  482. SysAdminName: saCompare.SysAdminName,
  483. }
  484. docId := fmt.Sprintf("%d", saCompare.SaCompareId)
  485. indexName := utils.EsSemanticAnalysisCompareIndexName
  486. // docId为报告ID
  487. searchById, err := client.Get().Index(indexName).Id(docId).Do(context.Background())
  488. if err != nil {
  489. if strings.Contains(err.Error(), "404") {
  490. err = nil
  491. } else {
  492. fmt.Println("Get Err" + err.Error())
  493. return
  494. }
  495. }
  496. if searchById != nil && searchById.Found {
  497. resp, e := client.Update().Index(indexName).Id(docId).Doc(map[string]interface{}{
  498. "SaCompareId": item.SaCompareId,
  499. "ClassifyName": item.ClassifyName,
  500. "ClassifyId": item.ClassifyId,
  501. "Title": item.Title,
  502. "ResultImg": item.ResultImg,
  503. "CreateTime": item.CreateTime,
  504. "ModifyTime": item.ModifyTime,
  505. "SysAdminId": item.SysAdminId,
  506. "SysAdminName": item.SysAdminName,
  507. }).Do(context.Background())
  508. if e != nil {
  509. err = e
  510. return
  511. }
  512. //fmt.Println(resp.Status, resp.Result)
  513. if resp.Status == 0 {
  514. fmt.Println("修改成功" + docId)
  515. err = nil
  516. } else {
  517. fmt.Println("EditData", resp.Status, resp.Result)
  518. }
  519. } else {
  520. resp, e := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background())
  521. if e != nil {
  522. err = e
  523. fmt.Println("新增失败:", err.Error())
  524. return
  525. }
  526. if resp.Status == 0 && resp.Result == "created" {
  527. fmt.Println("新增成功" + docId)
  528. } else {
  529. fmt.Println("AddData", resp.Status, resp.Result)
  530. }
  531. }
  532. }
  533. }