edb_info.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. package data
  2. import (
  3. "context"
  4. "errors"
  5. "eta_gn/eta_task/models/data_manage"
  6. "eta_gn/eta_task/models/data_manage/edb_refresh"
  7. "eta_gn/eta_task/services/alarm_msg"
  8. "eta_gn/eta_task/utils"
  9. "fmt"
  10. "strings"
  11. "sync"
  12. "time"
  13. )
  14. func RefreshDataFromCalculateAll() (err error) {
  15. errMsgList := make([]string, 0)
  16. defer func() {
  17. if err != nil {
  18. errMsg := "刷新所有计算指标失败 ErrMsg:" + err.Error()
  19. utils.FileLog.Info(errMsg)
  20. go alarm_msg.SendAlarmMsg(errMsg, 3)
  21. }
  22. if len(errMsgList) > 0 {
  23. utils.FileLog.Info("刷新所有计算指标失败 ErrMsg:" + strings.Join(errMsgList, "\n"))
  24. go alarm_msg.SendAlarmMsg("刷新所有计算指标失败 ErrMsg:"+strings.Join(errMsgList, "\n"), 3)
  25. }
  26. }()
  27. var condition string
  28. var pars []interface{}
  29. condition += " AND edb_type=? AND edb_info_type=? AND no_update=0"
  30. pars = append(pars, 2, 0)
  31. items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
  32. if err != nil {
  33. return err
  34. }
  35. nowStr := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
  36. startDateOfWeek := utils.GetNowWeekMonday()
  37. endDateOfWeek := utils.GetNowWeekLastDay()
  38. for _, v := range items {
  39. if v.Frequency == "日度" {
  40. if v.EndDate.Format(utils.FormatDate) == nowStr {
  41. continue
  42. }
  43. } else if v.Frequency == "周度" {
  44. if !v.EndDate.Before(startDateOfWeek) && !v.EndDate.After(endDateOfWeek) {
  45. continue
  46. }
  47. }
  48. source := v.Source
  49. startDate := v.StartDate.Format(utils.FormatDate)
  50. if startDate == "0001-01-01" {
  51. continue
  52. }
  53. fmt.Println(v.EdbInfoId, v.EdbCode, v.EdbName, v.SourceName, source)
  54. fmt.Println("RefreshEdbCalculateData", v.EdbInfoId, v.EdbCode, startDate)
  55. result, tmpErr := RefreshEdbCalculateData(v.EdbInfoId, v.EdbCode, startDate)
  56. if tmpErr != nil {
  57. errMsgList = append(errMsgList, fmt.Sprintf("指标ID:%d;指标编码:%s;err:%s", v.EdbInfoId, v.EdbCode, tmpErr.Error()))
  58. continue
  59. }
  60. if result.Ret != 200 {
  61. errMsgList = append(errMsgList, fmt.Sprintf("指标ID:%d;指标编码:%s;msg:%s;errMsg:%s", v.EdbInfoId, v.EdbCode, result.Msg, result.ErrMsg))
  62. continue
  63. }
  64. }
  65. return err
  66. }
  67. func RefreshBasePredictDataAll() (err error) {
  68. errMsgList := make([]string, 0)
  69. defer func() {
  70. if err != nil {
  71. errMsg := "刷新所有计算指标失败 ErrMsg:" + err.Error()
  72. utils.FileLog.Info(errMsg)
  73. go alarm_msg.SendAlarmMsg(errMsg, 3)
  74. }
  75. if len(errMsgList) > 0 {
  76. utils.FileLog.Info("刷新所有基础预测指标失败 ErrMsg:" + strings.Join(errMsgList, "\n"))
  77. go alarm_msg.SendAlarmMsg("刷新所有基础预测指标失败 ErrMsg:"+strings.Join(errMsgList, "\n"), 3)
  78. }
  79. }()
  80. var condition string
  81. var pars []interface{}
  82. condition += " AND edb_type=? AND edb_info_type=? "
  83. pars = append(pars, 1, 1)
  84. items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
  85. if err != nil {
  86. errMsgList = append(errMsgList, fmt.Sprintf("获取基础预测指标列表失败;err:%s", err.Error()))
  87. return err
  88. }
  89. for _, v := range items {
  90. source := v.Source
  91. startDate := v.StartDate.Format(utils.FormatDate)
  92. if startDate == "0001-01-01" {
  93. continue
  94. }
  95. fmt.Println(v.EdbInfoId, v.EdbCode, v.EdbName, v.SourceName, source, "======RefreshBasePredictDataAll:", startDate)
  96. result, tmpErr := RefreshEdbData(v.EdbInfoId, v.Source, v.SubSource, v.EdbCode, startDate)
  97. if tmpErr != nil {
  98. errMsgList = append(errMsgList, fmt.Sprintf("刷新基础预测指标失败1,指标ID:%d;指标编码:%s;err:%s", v.EdbInfoId, v.EdbCode, tmpErr.Error()))
  99. continue
  100. }
  101. if result.Ret != 200 {
  102. errMsgList = append(errMsgList, fmt.Sprintf("刷新基础预测指标失败2,指标ID:%d;指标编码:%s;报错提示信息msg:%s;报错信息err:%s", v.EdbInfoId, v.EdbCode, result.ErrMsg, result.Msg))
  103. continue
  104. }
  105. }
  106. return err
  107. }
  108. func RefreshPredictDataFromCalculateAll() (err error) {
  109. errMsgList := make([]string, 0)
  110. defer func() {
  111. if err != nil {
  112. errMsg := "刷新所有计算预测指标失败 ErrMsg:" + err.Error()
  113. utils.FileLog.Info(errMsg)
  114. go alarm_msg.SendAlarmMsg(errMsg, 3)
  115. }
  116. if len(errMsgList) > 0 {
  117. utils.FileLog.Info("刷新所有计算预测指标失败 Err:" + strings.Join(errMsgList, "\n"))
  118. go alarm_msg.SendAlarmMsg("刷新所有计算预测指标失败 Err:"+strings.Join(errMsgList, "\n"), 3)
  119. }
  120. }()
  121. var condition string
  122. var pars []interface{}
  123. condition += " AND edb_type=? AND edb_info_type=? "
  124. pars = append(pars, 2, 1)
  125. items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
  126. if err != nil {
  127. return err
  128. }
  129. for _, v := range items {
  130. source := v.Source
  131. startDate := v.StartDate.Format(utils.FormatDate)
  132. if startDate == "0001-01-01" {
  133. continue
  134. }
  135. fmt.Println(v.EdbInfoId, v.EdbCode, v.EdbName, v.SourceName, source, "======RefreshPredictEdbCalculateData:", startDate)
  136. result, tmpErr := RefreshPredictEdbCalculateData(v.EdbInfoId, v.EdbCode, startDate)
  137. if tmpErr != nil {
  138. errMsgList = append(errMsgList, fmt.Sprintf("指标ID:%d;指标编码:%s;err:%s", v.EdbInfoId, v.EdbCode, tmpErr.Error()))
  139. continue
  140. }
  141. if result.Ret != 200 {
  142. errMsgList = append(errMsgList, fmt.Sprintf("指标ID:%d;指标编码:%s;msg:%s;errMsg:%s", v.EdbInfoId, v.EdbCode, result.Msg, result.ErrMsg))
  143. continue
  144. }
  145. }
  146. return err
  147. }
  148. func RefreshDataFromManual(wg *sync.WaitGroup) (err error) {
  149. errMsgList := make([]string, 0)
  150. defer func() {
  151. if err != nil {
  152. fmt.Println("RefreshDataFromManual Err:" + err.Error())
  153. go alarm_msg.SendAlarmMsg("RefreshDataFromManual ErrMsg:"+err.Error(), 3)
  154. }
  155. if len(errMsgList) > 0 {
  156. errMsg := "RefreshDataFromManual Err:" + strings.Join(errMsgList, "\n")
  157. fmt.Println(errMsg)
  158. go alarm_msg.SendAlarmMsg(errMsg, 3)
  159. }
  160. wg.Done()
  161. }()
  162. var condition string
  163. var pars []interface{}
  164. condition += " AND source=? "
  165. pars = append(pars, utils.DATA_SOURCE_MANUAL)
  166. items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
  167. if err != nil {
  168. return errors.New("GetEdbInfoByCondition:" + err.Error())
  169. }
  170. for _, v := range items {
  171. startDate := v.StartDate.Format(utils.FormatDate)
  172. resp, err := RefreshEdbData(v.EdbInfoId, v.Source, v.SubSource, v.EdbCode, startDate)
  173. if err != nil {
  174. errMsgList = append(errMsgList, v.EdbCode+"RefreshEdbData Err:"+err.Error())
  175. continue
  176. }
  177. if resp.Ret != 200 {
  178. errMsgList = append(errMsgList, v.EdbCode+";RefreshEdbData Err:"+resp.Msg+";ErrMsg:"+resp.ErrMsg)
  179. continue
  180. }
  181. }
  182. return err
  183. }
  184. func ResetEdbInfoIsUpdate(cont context.Context) (err error) {
  185. go data_manage.ResetEdbInfoIsUpdate()
  186. return nil
  187. }
  188. func RefreshBaseDataFromSource(wg *sync.WaitGroup, source int) (err error) {
  189. errMsgList := make([]string, 0)
  190. defer func() {
  191. if err != nil {
  192. errMsg := fmt.Sprintf("刷新基础数据失败,来源:%d,ErrMsg:%s", source, err.Error())
  193. utils.FileLog.Info(errMsg)
  194. go alarm_msg.SendAlarmMsg(errMsg, 3)
  195. }
  196. if len(errMsgList) > 0 {
  197. errMsg := fmt.Sprintf("刷新基础数据失败,来源:%d,ErrMsg:%s", source, strings.Join(errMsgList, "\n"))
  198. utils.FileLog.Info(errMsg)
  199. go alarm_msg.SendAlarmMsg(errMsg, 3)
  200. }
  201. wg.Done()
  202. }()
  203. var condition string
  204. var pars []interface{}
  205. condition += " AND source=? "
  206. pars = append(pars, source)
  207. items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
  208. if err != nil {
  209. return errors.New("GetEdbInfoByCondition:" + err.Error())
  210. }
  211. for _, v := range items {
  212. startDate := ""
  213. if v.Frequency == "日度" {
  214. startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
  215. } else if v.Frequency == "周度" {
  216. startDate = v.EndDate.AddDate(0, 0, -(utils.DATA_REFRESH * 7)).Format(utils.FormatDate)
  217. } else if v.Frequency == "月度" {
  218. startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH, 0).Format(utils.FormatDate)
  219. } else if v.Frequency == "季度" {
  220. startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH*3, 0).Format(utils.FormatDate)
  221. } else if v.Frequency == "年度" {
  222. startDate = v.EndDate.AddDate(-utils.DATA_REFRESH, 0, 0).Format(utils.FormatDate)
  223. } else {
  224. startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
  225. }
  226. resp, tmpErr := RefreshEdbData(v.EdbInfoId, v.Source, v.SubSource, v.EdbCode, startDate)
  227. if err != nil {
  228. errMsgList = append(errMsgList, fmt.Sprintf("指标ID:%d;指标编码:%s;err:%s", v.EdbInfoId, v.EdbCode, tmpErr.Error()))
  229. continue
  230. }
  231. if resp.Ret != 200 {
  232. errMsgList = append(errMsgList, fmt.Sprintf("指标ID:%d;指标编码:%s;msg:%s;errMsg:%s", v.EdbInfoId, v.EdbCode, resp.Msg, resp.ErrMsg))
  233. continue
  234. }
  235. }
  236. return err
  237. }
  238. func RefreshDataFromTradeAnalysis(wg *sync.WaitGroup) (err error) {
  239. utils.FileLog.Info(fmt.Sprintf("持仓分析指标刷新开始: %s", time.Now().Format(utils.FormatDateTime)))
  240. errMsgList := make([]string, 0)
  241. defer func() {
  242. if err != nil {
  243. tips := fmt.Sprintf("RefreshDataFromTradeAnalysis err: %v", err)
  244. utils.FileLog.Info(tips)
  245. go alarm_msg.SendAlarmMsg(tips, 3)
  246. }
  247. if len(errMsgList) > 0 {
  248. tips := fmt.Sprintf("RefreshDataFromTradeAnalysis ErrMsg: %s", strings.Join(errMsgList, "\n"))
  249. utils.FileLog.Info(tips)
  250. go alarm_msg.SendAlarmMsg(tips, 3)
  251. }
  252. wg.Done()
  253. }()
  254. var condition string
  255. var pars []interface{}
  256. condition += ` AND source = ? AND no_update = 0 `
  257. pars = append(pars, utils.DATA_SOURCE_TRADE_ANALYSIS)
  258. items, e := data_manage.GetEdbInfoByCondition(condition, pars, 0)
  259. if e != nil {
  260. err = fmt.Errorf("获取持仓分析指标失败, %v", e)
  261. return
  262. }
  263. for _, v := range items {
  264. startDate := v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
  265. resp, e := RefreshEdbData(v.EdbInfoId, v.Source, v.SubSource, v.EdbCode, startDate)
  266. if e != nil {
  267. errMsgList = append(errMsgList, fmt.Sprintf("EdbCode: %s, RefreshEdbData err: %v", v.EdbCode, e))
  268. continue
  269. }
  270. if resp.Ret != 200 {
  271. errMsgList = append(errMsgList, fmt.Sprintf("EdbCode: %s, RefreshEdbData err: %v, errMsg: %s", v.EdbCode, e, resp.ErrMsg))
  272. continue
  273. }
  274. }
  275. utils.FileLog.Info(fmt.Sprintf("持仓分析指标刷新结束: %s", time.Now().Format(utils.FormatDateTime)))
  276. return err
  277. }
  278. func NoneConfigRefreshDataGn(wg *sync.WaitGroup) (err error) {
  279. errMsgList := make([]string, 0)
  280. defer func() {
  281. if err != nil {
  282. tips := fmt.Sprintf("NoneConfigRefreshDataGn ErrMsg: %v", err)
  283. utils.FileLog.Info(tips)
  284. }
  285. if len(errMsgList) > 0 {
  286. errMsg := "NoneConfigRefreshDataGn Err:" + strings.Join(errMsgList, "\n")
  287. utils.FileLog.Info(errMsg)
  288. }
  289. wg.Done()
  290. }()
  291. sourceRefreshIds := make([]int, 0)
  292. {
  293. cond := fmt.Sprintf(" AND is_base = ?")
  294. pars := make([]interface{}, 0)
  295. pars = append(pars, 1)
  296. list, e := data_manage.GetEdbSourceItemsByCondition(cond, pars, []string{}, "")
  297. if e != nil {
  298. err = fmt.Errorf("获取需要刷新的基础指标来源失败, %v", e)
  299. return
  300. }
  301. sourceBaseIds := make([]int, 0)
  302. for _, v := range list {
  303. sourceBaseIds = append(sourceBaseIds, v.EdbSourceId)
  304. }
  305. hasConfigIds, e := edb_refresh.GetDistinctDefaultRefreshSourceIds()
  306. if e != nil {
  307. err = fmt.Errorf("获取已配置过刷新的指标来源失败, %v", e)
  308. return
  309. }
  310. sourceRefreshIds = utils.MinusInt(sourceBaseIds, hasConfigIds)
  311. }
  312. if len(sourceRefreshIds) == 0 {
  313. utils.FileLog.Info("无未配置刷新时间的指标来源需要刷新")
  314. return
  315. }
  316. for _, sourceId := range sourceRefreshIds {
  317. cond := ` AND source = ? `
  318. pars := make([]interface{}, 0)
  319. pars = append(pars, sourceId)
  320. items, e := data_manage.GetEdbInfoByCondition(cond, pars, 0)
  321. if e != nil {
  322. err = fmt.Errorf("获取指标失败, Source: %d, Err: %v", sourceId, e)
  323. return
  324. }
  325. for _, v := range items {
  326. startDate := ""
  327. if v.EndDate.IsZero() {
  328. startDate = utils.BaseEdbRefreshStartDate
  329. }
  330. if v.Frequency == "日度" {
  331. startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
  332. } else if v.Frequency == "周度" {
  333. startDate = v.EndDate.AddDate(0, 0, -(utils.DATA_REFRESH * 7)).Format(utils.FormatDate)
  334. } else if v.Frequency == "月度" {
  335. startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH, 0).Format(utils.FormatDate)
  336. } else if v.Frequency == "季度" {
  337. startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH*3, 0).Format(utils.FormatDate)
  338. } else if v.Frequency == "年度" {
  339. startDate = v.EndDate.AddDate(-utils.DATA_REFRESH, 0, 0).Format(utils.FormatDate)
  340. } else {
  341. startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
  342. }
  343. resp, e := RefreshEdbData(v.EdbInfoId, v.Source, v.SubSource, v.EdbCode, startDate)
  344. if e != nil {
  345. errMsgList = append(errMsgList, fmt.Sprintf("RefreshEdbData Code: %s Err: %v\n", v.EdbCode, e))
  346. continue
  347. }
  348. if resp.Ret != 200 {
  349. errMsgList = append(errMsgList, fmt.Sprintf("RefreshEdbData Code: %s Err: %s, ErrMsg: %s\n", v.EdbCode, resp.Msg, resp.ErrMsg))
  350. continue
  351. }
  352. }
  353. }
  354. return
  355. }