task.go 17 KB

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