jiayue_platform.go 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package index_data
  2. import (
  3. "eta/eta_bridge/global"
  4. "eta/eta_bridge/models/jiayue"
  5. "eta/eta_bridge/models/response"
  6. "eta/eta_bridge/services/alarm_msg"
  7. "eta/eta_bridge/utils"
  8. "fmt"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. // GetIndexFromJiaYue 获取嘉悦指标信息
  14. func GetIndexFromJiaYue(indexCode string, sourceArr []string) (data *response.IndexResp, err error) {
  15. defer func() {
  16. if err != nil {
  17. global.LOG.Info("GetIndexFromJiaYue Err: " + err.Error())
  18. go alarm_msg.SendAlarmMsg("GetIndexFromJiaYue Err: "+err.Error(), 3)
  19. return
  20. }
  21. }()
  22. indexCond := ``
  23. indexPars := make([]interface{}, 0)
  24. // 指标存在无编码情况, 尝试转换indexCode为int查自增ID
  25. indexId, e := strconv.Atoi(indexCode)
  26. if e == nil && indexId > 0 {
  27. indexCond = ` (ID = :1 OR SOURCE_CODE = :1)`
  28. indexPars = append(indexPars, indexId, indexCode)
  29. } else {
  30. indexCond = ` SOURCE_CODE = :1`
  31. indexPars = append(indexPars, indexCode)
  32. }
  33. if len(sourceArr) > 0 {
  34. indexCond += ` AND SOURCE_TYPE IN (:1)`
  35. indexPars = append(indexPars, sourceArr)
  36. }
  37. indexes, e := jiayue.GetDictIndex(indexCond, indexPars, "")
  38. if e != nil {
  39. err = fmt.Errorf("GetDictIndex err: %s", e.Error())
  40. return
  41. }
  42. if len(indexes) <= 0 {
  43. global.LOG.Info(indexCode + "指标信息不存在")
  44. return
  45. }
  46. index := indexes[0]
  47. if index.Id <= 0 {
  48. err = fmt.Errorf("指标信息有误")
  49. return
  50. }
  51. var (
  52. indexData []jiayue.DictData
  53. dictMenu []jiayue.DictCategory
  54. )
  55. data = FormatItem2Resp(index, indexData, dictMenu)
  56. return
  57. }
  58. // GetIndexAndDataFromJiaYue 获取指标和数据
  59. func GetIndexAndDataFromJiaYue(indexCode, startDate, endDate string, sourceArr []string) (data *response.IndexResp, err error) {
  60. defer func() {
  61. if err != nil {
  62. global.LOG.Info("GetIndexAndDataFromJiaYue Err: " + err.Error())
  63. go alarm_msg.SendAlarmMsg("GetIndexAndDataFromJiaYue Err: "+err.Error(), 3)
  64. return
  65. }
  66. }()
  67. indexCond := ``
  68. indexPars := make([]interface{}, 0)
  69. // 指标存在无编码情况, 尝试转换indexCode为int查自增ID
  70. indexId, e := strconv.Atoi(indexCode)
  71. if e == nil && indexId > 0 {
  72. indexCond = ` (ID = :1 OR SOURCE_CODE = :1)`
  73. indexPars = append(indexPars, indexId, indexCode)
  74. } else {
  75. indexCond = ` SOURCE_CODE = :1`
  76. indexPars = append(indexPars, indexCode)
  77. }
  78. if len(sourceArr) > 0 {
  79. indexCond += ` AND SOURCE_TYPE IN (:1)`
  80. indexPars = append(indexPars, sourceArr)
  81. }
  82. indexes, e := jiayue.GetDictIndex(indexCond, indexPars, "")
  83. if e != nil {
  84. err = fmt.Errorf("GetDictIndex err: %s", e.Error())
  85. return
  86. }
  87. if len(indexes) <= 0 {
  88. global.LOG.Info(indexCode + "指标信息不存在")
  89. return
  90. }
  91. index := indexes[0]
  92. // 获取指标数据
  93. if index.Id <= 0 {
  94. err = fmt.Errorf("指标信息有误")
  95. return
  96. }
  97. if index.TableName == "" {
  98. err = fmt.Errorf("指标信息数据表名为空")
  99. return
  100. }
  101. dataCond := " INDEX_ID = :1"
  102. dataPars := make([]interface{}, 0)
  103. dataPars = append(dataPars, index.Id)
  104. if startDate != "" {
  105. dataCond += " AND INDEX_DATE >= TO_DATE (:1, 'yyyy-mm-dd')"
  106. dataPars = append(dataPars, startDate)
  107. }
  108. if endDate != "" {
  109. dataCond += " AND INDEX_DATE <= TO_DATE (:1, 'yyyy-mm-dd')"
  110. dataPars = append(dataPars, endDate)
  111. }
  112. indexData, e := jiayue.GetDictData(index.TableName, dataCond, dataPars)
  113. if e != nil {
  114. err = fmt.Errorf("GetDictData err: %s", e.Error())
  115. return
  116. }
  117. var dictMenu []jiayue.DictCategory
  118. data = FormatItem2Resp(index, indexData, dictMenu)
  119. return
  120. }
  121. // GetPageIndexesFromJiaYue 分页获取指标数据
  122. func GetPageIndexesFromJiaYue(pageIndex, pageSize int, sourceArr []string, keyword, frequency string, sortField, sortRule int) (total int, result []jiayue.DictIndex, err error) {
  123. defer func() {
  124. if err != nil {
  125. global.LOG.Info("GetPageIndexesFromJiaYue Err: " + err.Error())
  126. go alarm_msg.SendAlarmMsg("GetPageIndexesFromJiaYue Err: "+err.Error(), 3)
  127. return
  128. }
  129. }()
  130. indexCond := ``
  131. indexPars := make([]interface{}, 0)
  132. // 筛选项
  133. if len(sourceArr) > 0 {
  134. indexCond += ` SOURCE_TYPE IN (:1)`
  135. indexPars = append(indexPars, sourceArr)
  136. }
  137. keyword = strings.TrimSpace(keyword)
  138. if keyword != "" {
  139. kw := fmt.Sprint("%", keyword, "%")
  140. indexCond += ` AND (ID LIKE :1 OR CODE LIKE :1 OR NAME LIKE :1)`
  141. indexPars = append(indexPars, kw, kw, kw)
  142. }
  143. if frequency != "" {
  144. indexCond += ` AND FREQUENCY = :1`
  145. indexPars = append(indexPars, frequency)
  146. }
  147. // 总记录数
  148. t, e := jiayue.GetDictIndexCount(indexCond, indexPars)
  149. if e != nil {
  150. err = fmt.Errorf("GetDictIndexCount err: %s", e.Error())
  151. return
  152. }
  153. total = t
  154. // 列表数据
  155. indexes, e := jiayue.GetDictPageIndex(indexCond, indexPars, pageIndex, pageSize, sortField, sortRule)
  156. if e != nil {
  157. err = fmt.Errorf("GetDictPageIndex err: %s", e.Error())
  158. return
  159. }
  160. result = indexes
  161. return
  162. }
  163. // GetNewIndexAndDataFromJiaYue 获取就近新增的指标和数据
  164. func GetNewIndexAndDataFromJiaYue() (indexList []*response.IndexResp, err error) {
  165. defer func() {
  166. if err != nil {
  167. global.LOG.Info("GetIndexAndDataFromJiaYue Err: " + err.Error())
  168. go alarm_msg.SendAlarmMsg("GetIndexAndDataFromJiaYue Err: "+err.Error(), 3)
  169. return
  170. }
  171. }()
  172. indexCond := ``
  173. indexPars := make([]interface{}, 0)
  174. // TODO:查询两个小时之前的数据(待定)
  175. //timeBefore := time.Now().Local().Add(-2 * time.Hour)
  176. //indexCond += ` CREATE_TIME <= :1 `
  177. //indexPars = append(indexPars, timeBefore.Format(utils.FormatDateTime))
  178. // TODO:测试
  179. indexCond += ` UPDATE_TIME <= :1 `
  180. indexPars = append(indexPars, time.Date(2023, 11, 3, 17, 0, 0, 0, time.Local).Format(utils.FormatDateTime))
  181. sourceArr := []string{"webisite", "website", "website_gf"}
  182. if len(sourceArr) > 0 {
  183. indexCond += ` AND SOURCE_TYPE IN (:1)`
  184. indexPars = append(indexPars, sourceArr)
  185. }
  186. indexes, e := jiayue.GetDictIndex(indexCond, indexPars, "CREATE_TIME ASC")
  187. if e != nil {
  188. err = fmt.Errorf("GetDictIndex err: %s", e.Error())
  189. return
  190. }
  191. if len(indexes) <= 0 {
  192. global.LOG.Info("无新指标需要同步")
  193. return
  194. }
  195. // 每个指标对应的数据表不定, 所以这里还是用循环去查
  196. indexList = make([]*response.IndexResp, 0)
  197. for _, v := range indexes {
  198. // 指标数据
  199. dataCond := " INDEX_ID = :1"
  200. dataPars := make([]interface{}, 0)
  201. dataPars = append(dataPars, v.Id)
  202. indexData, e := jiayue.GetDictData(v.TableName, dataCond, dataPars)
  203. if e != nil {
  204. err = fmt.Errorf("GetDictData err: %s", e.Error())
  205. return
  206. }
  207. // 指标目录
  208. menuCond := ` R.INDEX_ID = :1`
  209. menuPars := make([]interface{}, 0)
  210. menuPars = append(menuPars, v.Id)
  211. menus, e := jiayue.GetDictCategory(menuCond, menuPars, "")
  212. if e != nil {
  213. err = fmt.Errorf("GetDictCategory err: %s", e.Error())
  214. return
  215. }
  216. item := FormatItem2Resp(v, indexData, menus)
  217. indexList = append(indexList, item)
  218. }
  219. return
  220. }
  221. // FormatItem2Resp 格式化指标响应体
  222. func FormatItem2Resp(item jiayue.DictIndex, dictData []jiayue.DictData, dictMenu []jiayue.DictCategory) (res *response.IndexResp) {
  223. res = new(response.IndexResp)
  224. res.Id = item.Id
  225. res.IndexCode = item.Code
  226. res.IndexName = item.Name
  227. res.Unit = item.Unit
  228. res.Frequency = item.Frequency
  229. res.LastDate = item.DateLast
  230. res.LastUpdateTime = item.TimeLastUpdate
  231. res.Status = item.Status
  232. if len(dictData) > 0 {
  233. for _, d := range dictData {
  234. res.IndexData = append(res.IndexData, response.IndexData{
  235. Val: d.IndexValue,
  236. DataTime: d.IndexDate,
  237. UpdateTime: d.UpdateTime,
  238. })
  239. }
  240. }
  241. if len(dictMenu) > 0 {
  242. firstMenu := dictMenu[0]
  243. res.MenuData.Id = firstMenu.Id
  244. res.MenuData.Type = firstMenu.Type
  245. res.MenuData.Code = firstMenu.Code
  246. res.MenuData.Icon = firstMenu.Icon
  247. res.MenuData.Sort = firstMenu.Sorting
  248. res.MenuData.ParentId = firstMenu.ParentId
  249. res.MenuData.ParentName = firstMenu.ParentName
  250. res.MenuData.Path = firstMenu.Path
  251. }
  252. return
  253. }