eta_service.go 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta/eta_mini_crm_ht/utils"
  6. httpClient "eta/eta_mini_crm_ht/utils/http"
  7. "fmt"
  8. "github.com/rdlucklib/rdluck_tools/paging"
  9. "io"
  10. "strings"
  11. "time"
  12. )
  13. const (
  14. SourceListUrl = "/v1/edb/business/edb/source/list"
  15. DataListUrl = "/v1/edb/business/edb/list"
  16. DataDetailUrl = "/v1/edb/business/edb/data/list"
  17. DeleteIndexesUrl = "/v1/edb/business/edb/del"
  18. )
  19. //type IndexInfo struct {
  20. // IndexCode string `json:"indexCode"`
  21. // IndexName string `json:"indexName"`
  22. // Frequency string `json:"frequency"`
  23. // SourceName string `json:"sourceName"`
  24. // LatestDataDate string `json:"latestDataDate"`
  25. // LastPushTime string `json:"lastPushTime"`
  26. // Remark string `json:"remark"`
  27. // Unit string `json:"unit"`
  28. // DataList []interface{} `json:"dataList"`
  29. //}
  30. type ETAResponse struct {
  31. Ret int
  32. Msg string
  33. ErrMsg string
  34. ErrCode string
  35. Data json.RawMessage
  36. }
  37. func createETARequest() (client *httpClient.HttpClient, err error) {
  38. client = httpClient.DefaultClient()
  39. signHeader, signErr := utils.GenerateSignatureAndHeaders()
  40. if signErr != nil {
  41. err = signErr
  42. utils.FileLog.Error("创建eta请求接口失败,生成签名失败:%v", signErr)
  43. return
  44. }
  45. structMap, err := client.StructToMap(signHeader)
  46. if err != nil {
  47. utils.FileLog.Error("创建eta请求接口失败,生成签名请求头失败:%v", err)
  48. return
  49. }
  50. client.AddHeader(structMap)
  51. return
  52. }
  53. func GetDataList(request IndexDataListRequest) (baseFromBusinessIndexDataResp *BaseFromBusinessIndexDataResp, err error) {
  54. if utils.ETA_ADDRESS == "" {
  55. err = errors.New("未配置ETA_API地址")
  56. return
  57. }
  58. url := fmt.Sprintf("%s%s?%s", utils.ETA_ADDRESS, DataDetailUrl, request.ToString())
  59. client, err := createETARequest()
  60. if err != nil {
  61. utils.FileLog.Error("创建eta请求接口失败:%v", err)
  62. return
  63. }
  64. resp, err := client.Get(url)
  65. if err != nil {
  66. utils.FileLog.Error("获取来源列表信息失败", err.Error())
  67. return
  68. }
  69. defer func(Body io.ReadCloser) {
  70. closeErr := Body.Close()
  71. if closeErr != nil {
  72. utils.FileLog.Error("关闭Response失败:%v", closeErr)
  73. }
  74. }(resp.Body)
  75. body, _ := io.ReadAll(resp.Body)
  76. var htRes ETAResponse
  77. err = json.Unmarshal(body, &htRes)
  78. if err != nil {
  79. utils.FileLog.Error("解析应答信息失败:%v", err)
  80. return
  81. }
  82. if htRes.Ret == 200 {
  83. err = json.Unmarshal(htRes.Data, &baseFromBusinessIndexDataResp)
  84. } else {
  85. err = errors.New(htRes.ErrMsg)
  86. }
  87. return
  88. }
  89. func GetSourceList() (businessSourceList []*EdbBusinessSource, err error) {
  90. if utils.ETA_ADDRESS == "" {
  91. err = errors.New("未配置ETA_API地址")
  92. return
  93. }
  94. url := fmt.Sprintf("%s%s", utils.ETA_ADDRESS, SourceListUrl)
  95. client, err := createETARequest()
  96. if err != nil {
  97. utils.FileLog.Error("创建eta请求接口失败:%v", err)
  98. return
  99. }
  100. resp, err := client.Get(url)
  101. if err != nil {
  102. utils.FileLog.Error("获取来源列表信息失败", err.Error())
  103. return
  104. }
  105. defer func(Body io.ReadCloser) {
  106. closeErr := Body.Close()
  107. if closeErr != nil {
  108. utils.FileLog.Error("关闭Response失败:%v", closeErr)
  109. }
  110. }(resp.Body)
  111. body, _ := io.ReadAll(resp.Body)
  112. var htRes ETAResponse
  113. err = json.Unmarshal(body, &htRes)
  114. if err != nil {
  115. utils.FileLog.Error("解析应答信息失败:%v", err)
  116. return
  117. }
  118. if htRes.Ret == 200 {
  119. err = json.Unmarshal(htRes.Data, &businessSourceList)
  120. } else {
  121. err = errors.New(htRes.ErrMsg)
  122. }
  123. if err == nil {
  124. var filterList []*EdbBusinessSource
  125. for _, v := range businessSourceList {
  126. if strings.HasPrefix(v.SourceName, "一期-") {
  127. filterList = append(filterList, v)
  128. }
  129. }
  130. businessSourceList = filterList
  131. }
  132. return
  133. }
  134. type IndexListRequest struct {
  135. PageSize int
  136. CurrentIndex int
  137. SourceName string
  138. Frequency string
  139. SortColumn string
  140. SortOrder string
  141. KeyWord string
  142. SysSource string
  143. }
  144. type IndexDataListRequest struct {
  145. PageSize int
  146. CurrentIndex int
  147. IndexCode string
  148. }
  149. func (ilr *IndexListRequest) ToString() string {
  150. return fmt.Sprintf("PageSize=%d&CurrentIndex=%d&SortColumn=%s&SortOrder=%s&SourceName=%s&KeyWord=%s&Frequency=%s&SysSource=%s",
  151. ilr.PageSize, ilr.CurrentIndex, ilr.SortColumn, ilr.SortOrder, ilr.SourceName, ilr.KeyWord, ilr.Frequency, ilr.SysSource)
  152. }
  153. func (ilr *IndexDataListRequest) ToString() string {
  154. return fmt.Sprintf("PageSize=%d&CurrentIndex=%d&IndexCode=%s",
  155. ilr.PageSize, ilr.CurrentIndex, ilr.IndexCode)
  156. }
  157. func GetIndexList() (list []string, err error) {
  158. indexReq := IndexListRequest{
  159. PageSize: 500,
  160. CurrentIndex: 1,
  161. SysSource: "ht_mini_crm",
  162. }
  163. for {
  164. resp, fetchErr := GetList(indexReq)
  165. if fetchErr != nil {
  166. utils.FileLog.Error("获取指标列表信息失败", fetchErr.Error())
  167. err = errors.New("获取指标列表信息失败:" + fetchErr.Error())
  168. return
  169. }
  170. for _, v := range resp.List {
  171. list = append(list, v.IndexCode)
  172. }
  173. if indexReq.CurrentIndex*indexReq.PageSize >= resp.Paging.Totals {
  174. return
  175. }
  176. indexReq.CurrentIndex += 1
  177. }
  178. }
  179. func GetList(indexRequest IndexListRequest) (businessIndexResp *BaseFromBusinessIndexResp, err error) {
  180. if utils.ETA_ADDRESS == "" {
  181. err = errors.New("未配置ETA_API地址")
  182. return
  183. }
  184. url := fmt.Sprintf("%s%s?%s", utils.ETA_ADDRESS, DataListUrl, indexRequest.ToString())
  185. client, err := createETARequest()
  186. if err != nil {
  187. utils.FileLog.Error("创建eta请求接口失败:%v", err)
  188. return
  189. }
  190. resp, err := client.Get(url)
  191. if err != nil {
  192. utils.FileLog.Error("获取指标列表信息失败", err.Error())
  193. return
  194. }
  195. defer func(Body io.ReadCloser) {
  196. closeErr := Body.Close()
  197. if closeErr != nil {
  198. utils.FileLog.Error("关闭Response失败:%v", closeErr)
  199. }
  200. }(resp.Body)
  201. body, _ := io.ReadAll(resp.Body)
  202. var htRes ETAResponse
  203. err = json.Unmarshal(body, &htRes)
  204. if err != nil {
  205. utils.FileLog.Error("解析应答信息失败:%v", err)
  206. return
  207. }
  208. if htRes.Ret == 200 {
  209. err = json.Unmarshal(htRes.Data, &businessIndexResp)
  210. } else {
  211. err = errors.New(htRes.ErrMsg)
  212. }
  213. return
  214. }
  215. type EdbBusinessSource struct {
  216. EdbBusinessSourceId int64 `orm:"column(edb_business_source_id);pk"`
  217. SourceName string `description:"来源名称"` // 来源名称
  218. CreateTime time.Time `description:"创建时间"` // 创建时间
  219. }
  220. type BaseFromBusinessIndexItem struct {
  221. IndexCode string `description:"指标编码"`
  222. IndexName string `description:"指标名称"`
  223. Unit string `description:"单位"`
  224. Frequency string `description:"频度"`
  225. SourceName string `description:"数据来源名称"`
  226. StartDate time.Time `description:"指标开始时间"`
  227. EndDate time.Time `description:"指标最新时间"`
  228. CreateTime time.Time `description:"入库时间"`
  229. }
  230. type BaseFromBusinessIndexDataItem struct {
  231. ID string
  232. EdbDataId int `orm:"column(edb_data_id);pk"`
  233. IndexCode string
  234. DataTime string
  235. Value float64
  236. }
  237. type BaseFromBusinessIndexResp struct {
  238. Paging *paging.PagingItem
  239. List []*BaseFromBusinessIndexItem
  240. LastUpdateTime string
  241. }
  242. type BaseFromBusinessIndexDataResp struct {
  243. Paging *paging.PagingItem
  244. List []*BaseFromBusinessIndexDataItem
  245. LastUpdateTime string
  246. }
  247. type DelBusinessIndexResp struct {
  248. IsDeleteEdbCodeList []string `description:"已经删除了的指标编码"`
  249. NoDeleteEdbCodeList []string `description:"未删除的指标编码"`
  250. }
  251. type DelBusinessIndexReq struct {
  252. IndexCodeList []string `description:"已经删除了的指标编码"`
  253. }
  254. func DeleteIndexes(indexCodes []string) (deleteBusinessIndexResp *DelBusinessIndexResp, err error) {
  255. if utils.ETA_ADDRESS == "" {
  256. err = errors.New("未配置ETA_API地址")
  257. return
  258. }
  259. url := fmt.Sprintf("%s%s", utils.ETA_ADDRESS, DeleteIndexesUrl)
  260. client, err := createETARequest()
  261. if err != nil {
  262. utils.FileLog.Error("创建eta请求接口失败:%v", err)
  263. return
  264. }
  265. resp, err := client.Post(url, &DelBusinessIndexReq{
  266. IndexCodeList: indexCodes,
  267. })
  268. if err != nil {
  269. utils.FileLog.Error("获取来源列表信息失败", err.Error())
  270. return
  271. }
  272. defer func(Body io.ReadCloser) {
  273. closeErr := Body.Close()
  274. if closeErr != nil {
  275. utils.FileLog.Error("关闭Response失败:%v", closeErr)
  276. }
  277. }(resp.Body)
  278. body, _ := io.ReadAll(resp.Body)
  279. var htRes ETAResponse
  280. err = json.Unmarshal(body, &htRes)
  281. if err != nil {
  282. utils.FileLog.Error("解析应答信息失败:%v", err)
  283. return
  284. }
  285. if htRes.Ret == 200 {
  286. err = json.Unmarshal(htRes.Data, &deleteBusinessIndexResp)
  287. } else {
  288. err = errors.New(htRes.ErrMsg)
  289. }
  290. return
  291. }