gn.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719
  1. package eta_bridge
  2. import (
  3. "context"
  4. "encoding/json"
  5. "eta_gn/eta_task/models/data_manage"
  6. "eta_gn/eta_task/services/alarm_msg"
  7. "eta_gn/eta_task/services/data"
  8. "eta_gn/eta_task/utils"
  9. "fmt"
  10. "github.com/rdlucklib/rdluck_tools/paging"
  11. "io/ioutil"
  12. "net/url"
  13. "strconv"
  14. "strings"
  15. "sync"
  16. "time"
  17. )
  18. // 同步指标信息锁
  19. var lockSyncGnIndex sync.Mutex
  20. const GnEdbListUri = `/index_data/gn/edb/list` // 国能指标列表接口
  21. // CurrLevelParentClassifyMap 当前层级分类map
  22. var CurrLevelParentClassifyMap map[int64]map[int64]map[string]CurrClassify
  23. // CurrEdbInfoMap 当前库里已有的指标map
  24. var CurrEdbInfoMap map[string]*data_manage.EdbInfo
  25. type CurrClassify struct {
  26. ClassifyId int64
  27. ParentId int64
  28. ClassifyName string
  29. }
  30. // SyncGnIndex
  31. // @Description: 定时同步指标信息
  32. // @author: Roc
  33. // @datetime 2024-03-07 17:39:34
  34. // @param cont context.Context
  35. // @return err error
  36. func SyncGnIndex(cont context.Context) (err error) {
  37. fmt.Println("开始同步指标")
  38. lockSyncGnIndex.Lock()
  39. errMsgList := make([]string, 0)
  40. defer func() {
  41. if err != nil {
  42. tips := "SyncGnIndex-定时同步国能的指标信息到ETA失败, ErrMsg:\n" + err.Error()
  43. utils.FileLog.Info(tips)
  44. go alarm_msg.SendAlarmMsg(tips, 3)
  45. }
  46. if len(errMsgList) > 0 {
  47. tips := "SyncGnIndex-定时同步国能的指标信息到ETA失败, ErrMsg:\n" + strings.Join(errMsgList, "\n")
  48. utils.FileLog.Info(tips)
  49. go alarm_msg.SendAlarmMsg(tips, 3)
  50. }
  51. lockSyncGnIndex.Unlock()
  52. }()
  53. initCurrEdbInfoMap()
  54. initCurrLevelParentClassifyMap()
  55. var lastUpdateTimeStr string // 上一次更新的时间
  56. err, errMsgList = syncGnIndex(1, utils.SyncCrmIndexNum, lastUpdateTimeStr)
  57. // 下面的用完整体注释掉就行
  58. //indexIds, e := LoadGnTempIndexIds()
  59. //if e != nil {
  60. // err = fmt.Errorf("读取IDs配置文件失败, %v", e)
  61. // return
  62. //}
  63. //if len(indexIds) == 0 {
  64. // fmt.Println("IndexIds为空")
  65. // return
  66. //}
  67. //for _, v := range indexIds {
  68. // strId := strconv.Itoa(v)
  69. // fmt.Printf("正在同步IndexId: %s\n", strId)
  70. // err, errMsgList = syncGnIndexV2(1, 1, lastUpdateTimeStr, strId)
  71. // if err != nil {
  72. // errMsg := strings.Join(errMsgList, "\n")
  73. // fmt.Printf("IndexId: %s, 同步失败, ErrMsg: %s", strId, errMsg)
  74. // continue
  75. // }
  76. //}
  77. return
  78. }
  79. // initCurrLevelParentClassifyMap
  80. // @Description: 初始化当前层级分类map
  81. func initCurrLevelParentClassifyMap() {
  82. var condition string
  83. var pars []interface{}
  84. // 普通指标分类
  85. condition = " AND classify_type = ? "
  86. pars = append(pars, 0)
  87. classifyList, err := data_manage.GetAllEdbClassifyListByCondition(condition, pars)
  88. if err != nil {
  89. utils.FileLog.Error("获取分类列表数据失败:" + err.Error())
  90. return
  91. }
  92. // 清空缓存
  93. CurrLevelParentClassifyMap = make(map[int64]map[int64]map[string]CurrClassify)
  94. for _, v := range classifyList {
  95. currParentClassifyMap, ok := CurrLevelParentClassifyMap[v.Level]
  96. if !ok {
  97. currParentClassifyMap = make(map[int64]map[string]CurrClassify)
  98. }
  99. currClassifyMap, ok := currParentClassifyMap[v.ParentID]
  100. if !ok {
  101. currClassifyMap = make(map[string]CurrClassify)
  102. }
  103. classifyName := strings.TrimSpace(v.ClassifyName)
  104. currClassifyMap[classifyName] = CurrClassify{
  105. ClassifyId: v.ClassifyID,
  106. ParentId: v.ParentID,
  107. ClassifyName: classifyName,
  108. }
  109. currParentClassifyMap[v.ParentID] = currClassifyMap
  110. CurrLevelParentClassifyMap[v.Level] = currParentClassifyMap
  111. }
  112. }
  113. // initCurrEdbInfoMap
  114. // @Description: 初始化当前指标map
  115. func initCurrEdbInfoMap() {
  116. // 获取指标列表
  117. edbInfoList, err := data_manage.GetAllBaseEdbInfo()
  118. if err != nil {
  119. utils.FileLog.Error("获取指标列表数据失败:" + err.Error())
  120. return
  121. }
  122. // 清空缓存
  123. CurrEdbInfoMap = make(map[string]*data_manage.EdbInfo)
  124. for _, v := range edbInfoList {
  125. CurrEdbInfoMap[v.OriginalEdbCode] = v
  126. }
  127. }
  128. // EtaBridgeGnIndexListResp
  129. // @Description: 指标列表返回数据
  130. type EtaBridgeGnIndexListResp struct {
  131. Code int `json:"code" description:"状态码"`
  132. Msg string `json:"msg" description:"提示信息"`
  133. Data IndexListResp `json:"data" description:"返回数据"`
  134. }
  135. // IndexListResp
  136. // @Description: 指标列表数据
  137. type IndexListResp struct {
  138. Paging paging.PagingItem `description:"分页数据"`
  139. List []IndexInfo
  140. }
  141. // IndexInfo
  142. // @Description: 指标信息
  143. type IndexInfo struct {
  144. ClassifyNameOne string `description:"一级目录"`
  145. ClassifyNameTwo string `description:"二级目录"`
  146. ClassifyNameThree string `description:"三级目录"`
  147. DataIndexCode string `description:"数据节点指标编码"`
  148. SourceEdbCode string `description:"数据源指标原始编码"`
  149. EdbName string `description:"指标名称"`
  150. Frequency string `description:"频度"`
  151. Unit string `description:"单位"`
  152. SourceName string `description:"来源"`
  153. }
  154. // BridgeGnIndexParams
  155. // @Description: 桥接服务-获取国能指标数据入参
  156. type BridgeGnIndexParams struct {
  157. LastModifyTime string `json:"last_modify_time" description:"最近一次更新时间"`
  158. PageIndex int `json:"page_index" description:"当前页码"`
  159. PageSize int `json:"page_size" description:"每页数量"`
  160. IndexId string `json:"index_id" description:"指标ID,不为空时表示只取该指标"`
  161. }
  162. // syncCrmIndex
  163. // @Description: 开始同步CRM指标信息
  164. // @author: Roc
  165. // @datetime 2024-05-17 15:55:11
  166. // @param assetPkgCd string
  167. // @param currIndex int
  168. // @param pageSize int
  169. // @param lastUpdateTimeStr string
  170. // @return err error
  171. // @return errMsgList []string
  172. func syncGnIndex(currIndex, pageSize int, baseLastUpdateTimeStr string) (err error, errMsgList []string) {
  173. fmt.Println("开始第", currIndex, "页的更新")
  174. errMsgList = make([]string, 0)
  175. lastUpdateTimeStr := baseLastUpdateTimeStr
  176. if lastUpdateTimeStr != `` {
  177. lastUpdateTimeStr = url.QueryEscape(lastUpdateTimeStr)
  178. }
  179. params := BridgeGnIndexParams{
  180. LastModifyTime: lastUpdateTimeStr,
  181. PageIndex: currIndex,
  182. PageSize: pageSize,
  183. }
  184. bResult, err, _ := HttpEtaBridgePost(utils.SyncIndexPath, params)
  185. if err != nil {
  186. return
  187. }
  188. var result EtaBridgeGnIndexListResp
  189. err = json.Unmarshal(bResult, &result)
  190. if err != nil {
  191. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", err.Error(), string(bResult))
  192. utils.FileLog.Info("桥接服务get请求失败:\n" + string(bResult))
  193. return
  194. }
  195. //totalPage := result.Data.Paging.Pages
  196. // 处理指标信息
  197. for _, v := range result.Data.List {
  198. tmpErr := handleIndex(v)
  199. if tmpErr != nil {
  200. errMsgList = append(errMsgList, tmpErr.Error())
  201. }
  202. }
  203. fmt.Println(currIndex, "是否已结束:", result.Data.Paging.IsEnd)
  204. // 如果还有下一页,那么就继续请求下一页
  205. if !result.Data.Paging.IsEnd {
  206. _, tmpErrMsgList := syncGnIndex(currIndex+1, utils.SyncCrmIndexNum, baseLastUpdateTimeStr)
  207. errMsgList = append(errMsgList, tmpErrMsgList...)
  208. }
  209. return
  210. }
  211. // handleIndex
  212. // @Description: 指标处理
  213. // @param index
  214. // @return err
  215. func handleIndex(index IndexInfo) (err error) {
  216. // 处理分类(如果不存在就创建)
  217. _, _, thirdClassifyId, err := handleClassify(index)
  218. if err != nil {
  219. return
  220. }
  221. // 处理指标(如果不存在就创建)
  222. err = handleEdbInfo(index, thirdClassifyId)
  223. return
  224. }
  225. // handleClassify
  226. // @Description: 分类处理
  227. // @param index
  228. // @return firstClassifyId
  229. // @return secondClassifyId
  230. // @return thirdClassifyId
  231. // @return err
  232. func handleClassify(index IndexInfo) (firstClassifyId, secondClassifyId, thirdClassifyId int64, err error) {
  233. firstClassifyName := strings.TrimSpace(index.ClassifyNameOne)
  234. secondClassifyName := strings.TrimSpace(index.ClassifyNameTwo)
  235. thirdClassifyName := strings.TrimSpace(index.ClassifyNameThree)
  236. var oneLevel, twoLevel, threeLevel int64
  237. oneLevel = 1
  238. twoLevel = 2
  239. threeLevel = 3
  240. // 一级分类
  241. {
  242. var parentId int64
  243. parentId = 0
  244. classifyName := firstClassifyName
  245. level := oneLevel
  246. // 获取层级下的父级分类map
  247. currParentClassifyMap, ok := CurrLevelParentClassifyMap[level]
  248. if !ok {
  249. currParentClassifyMap = make(map[int64]map[string]CurrClassify)
  250. }
  251. // 获取父级id下的分类列表
  252. currClassifyListMap, ok := currParentClassifyMap[parentId]
  253. if !ok {
  254. currClassifyListMap = make(map[string]CurrClassify)
  255. }
  256. // 根据分类名称获取分类
  257. currClassify, ok := currClassifyListMap[classifyName]
  258. if !ok {
  259. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  260. classifyInfo := &data_manage.EdbClassify{
  261. //ClassifyId: 0,
  262. ClassifyType: 0,
  263. ClassifyName: classifyName,
  264. ClassifyNameEn: classifyName,
  265. ParentID: parentId,
  266. RootID: 0,
  267. HasData: 0,
  268. CreateTime: time.Now(),
  269. ModifyTime: time.Now(),
  270. SysUserID: 0,
  271. SysUserRealName: "",
  272. Level: level,
  273. UniqueCode: utils.MD5(fmt.Sprint(parentId, "_", utils.DATA_PREFIX+"_"+timestamp)),
  274. Sort: 0,
  275. }
  276. err = data_manage.AddEdbClassify(classifyInfo)
  277. if err != nil {
  278. return
  279. }
  280. classifyInfo.RootID = classifyInfo.ClassifyID
  281. err = classifyInfo.Update([]string{"root_id"})
  282. if err != nil {
  283. return
  284. }
  285. currClassify = CurrClassify{
  286. ClassifyId: classifyInfo.ClassifyID,
  287. ParentId: classifyInfo.ParentID,
  288. ClassifyName: classifyInfo.ClassifyName,
  289. }
  290. currClassifyListMap[classifyName] = currClassify
  291. currParentClassifyMap[parentId] = currClassifyListMap
  292. CurrLevelParentClassifyMap[level] = currParentClassifyMap
  293. }
  294. firstClassifyId = currClassify.ClassifyId
  295. }
  296. // 二级分类
  297. {
  298. parentId := firstClassifyId
  299. classifyName := secondClassifyName
  300. level := twoLevel
  301. // 获取层级下的父级分类map
  302. currParentClassifyMap, ok := CurrLevelParentClassifyMap[level]
  303. if !ok {
  304. currParentClassifyMap = make(map[int64]map[string]CurrClassify)
  305. }
  306. // 获取父级id下的分类列表
  307. currClassifyListMap, ok := currParentClassifyMap[parentId]
  308. if !ok {
  309. currClassifyListMap = make(map[string]CurrClassify)
  310. }
  311. // 根据分类名称获取分类
  312. currClassify, ok := currClassifyListMap[classifyName]
  313. if !ok {
  314. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  315. classifyInfo := &data_manage.EdbClassify{
  316. //ClassifyId: 0,
  317. ClassifyType: 0,
  318. ClassifyName: classifyName,
  319. ClassifyNameEn: classifyName,
  320. ParentID: parentId,
  321. RootID: firstClassifyId,
  322. HasData: 0,
  323. CreateTime: time.Now(),
  324. ModifyTime: time.Now(),
  325. SysUserID: 0,
  326. SysUserRealName: "",
  327. Level: level,
  328. UniqueCode: utils.MD5(fmt.Sprint(parentId, "_", utils.DATA_PREFIX+"_"+timestamp)),
  329. Sort: 0,
  330. }
  331. err = data_manage.AddEdbClassify(classifyInfo)
  332. if err != nil {
  333. return
  334. }
  335. currClassify = CurrClassify{
  336. ClassifyId: classifyInfo.ClassifyID,
  337. ParentId: classifyInfo.ParentID,
  338. ClassifyName: classifyInfo.ClassifyName,
  339. }
  340. currClassifyListMap[classifyName] = currClassify
  341. currParentClassifyMap[parentId] = currClassifyListMap
  342. CurrLevelParentClassifyMap[level] = currParentClassifyMap
  343. }
  344. secondClassifyId = currClassify.ClassifyId
  345. }
  346. // 三级分类
  347. {
  348. parentId := secondClassifyId
  349. classifyName := thirdClassifyName
  350. level := threeLevel
  351. // 获取层级下的父级分类map
  352. currParentClassifyMap, ok := CurrLevelParentClassifyMap[level]
  353. if !ok {
  354. currParentClassifyMap = make(map[int64]map[string]CurrClassify)
  355. }
  356. // 获取父级id下的分类列表
  357. currClassifyListMap, ok := currParentClassifyMap[parentId]
  358. if !ok {
  359. currClassifyListMap = make(map[string]CurrClassify)
  360. }
  361. // 根据分类名称获取分类
  362. currClassify, ok := currClassifyListMap[classifyName]
  363. if !ok {
  364. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  365. classifyInfo := &data_manage.EdbClassify{
  366. //ClassifyId: 0,
  367. ClassifyType: 0,
  368. ClassifyName: classifyName,
  369. ClassifyNameEn: classifyName,
  370. ParentID: parentId,
  371. RootID: firstClassifyId,
  372. HasData: 1,
  373. CreateTime: time.Now(),
  374. ModifyTime: time.Now(),
  375. SysUserID: 0,
  376. SysUserRealName: "",
  377. Level: level,
  378. UniqueCode: utils.MD5(fmt.Sprint(parentId, "_", utils.DATA_PREFIX+"_"+timestamp)),
  379. Sort: 0,
  380. }
  381. err = data_manage.AddEdbClassify(classifyInfo)
  382. if err != nil {
  383. return
  384. }
  385. currClassify = CurrClassify{
  386. ClassifyId: classifyInfo.ClassifyID,
  387. ParentId: classifyInfo.ParentID,
  388. ClassifyName: classifyInfo.ClassifyName,
  389. }
  390. currClassifyListMap[classifyName] = currClassify
  391. currParentClassifyMap[parentId] = currClassifyListMap
  392. CurrLevelParentClassifyMap[level] = currParentClassifyMap
  393. }
  394. thirdClassifyId = currClassify.ClassifyId
  395. }
  396. return
  397. }
  398. // handleEdbInfo
  399. // @Description: 处理指标
  400. // @param index
  401. // @param thirdClassifyId
  402. // @return err
  403. func handleEdbInfo(index IndexInfo, thirdClassifyId int64) (err error) {
  404. edbInfo, ok := CurrEdbInfoMap[index.DataIndexCode]
  405. frequency := Frequency(strings.TrimSpace(index.Frequency))
  406. unit := strings.TrimSpace(index.Unit)
  407. sourceName, sourceId, err := GetSource(strings.TrimSpace(index.SourceName))
  408. if err != nil {
  409. return
  410. }
  411. if !ok {
  412. endDate := time.Date(1900, 1, 1, 0, 0, 0, 0, time.Local)
  413. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  414. edbInfo = &data_manage.EdbInfo{
  415. EdbInfoId: 0,
  416. EdbInfoType: utils.EDB_INFO_TYPE,
  417. SourceName: sourceName,
  418. Source: sourceId,
  419. EdbCode: index.SourceEdbCode,
  420. EdbName: index.EdbName,
  421. EdbNameEn: index.EdbName,
  422. EdbNameSource: index.EdbName,
  423. Frequency: frequency,
  424. Unit: unit,
  425. UnitEn: unit,
  426. StartDate: endDate,
  427. EndDate: endDate,
  428. ClassifyId: int(thirdClassifyId),
  429. SysUserId: 0,
  430. SysUserRealName: "",
  431. UniqueCode: utils.MD5(fmt.Sprint(index.SourceEdbCode, "_", utils.DATA_PREFIX+"_"+timestamp)),
  432. CreateTime: time.Now(),
  433. ModifyTime: time.Now(),
  434. BaseModifyTime: time.Now(),
  435. MinValue: 0,
  436. MaxValue: 0,
  437. CalculateFormula: "",
  438. EdbType: utils.EdbTypeBase,
  439. Sort: 0,
  440. LatestDate: "",
  441. LatestValue: 0,
  442. EndValue: 0,
  443. MoveType: 0,
  444. MoveFrequency: "",
  445. NoUpdate: 0,
  446. ServerUrl: "",
  447. ChartImage: "", // 缩略图
  448. Calendar: "",
  449. DataDateType: "",
  450. ManualSave: 0,
  451. EmptyType: 0,
  452. MaxEmptyType: 0,
  453. TerminalCode: "",
  454. DataUpdateTime: "",
  455. ErDataUpdateDate: "",
  456. SourceIndexName: index.EdbName,
  457. SubSource: 0,
  458. SubSourceName: "",
  459. IndicatorCode: "",
  460. StockCode: "",
  461. Extra: "",
  462. IsJoinPermission: 0,
  463. OriginalEdbCode: index.DataIndexCode,
  464. }
  465. err = data_manage.AddEdbInfo(edbInfo)
  466. if err != nil {
  467. return
  468. }
  469. CurrEdbInfoMap[index.DataIndexCode] = edbInfo
  470. // TODO 刷新指标明细数据
  471. fmt.Println(data.RefreshEdbData(edbInfo.EdbInfoId, edbInfo.Source, edbInfo.SubSource, edbInfo.EdbCode, edbInfo.EndDate.Format(utils.FormatDate)))
  472. return
  473. }
  474. updateCols := make([]string, 0)
  475. if edbInfo.EdbNameEn == edbInfo.EdbName && edbInfo.EdbName != index.EdbName {
  476. edbInfo.EdbNameEn = index.EdbName
  477. updateCols = append(updateCols, "edb_name_en")
  478. }
  479. if edbInfo.EdbName != index.EdbName {
  480. edbInfo.EdbName = index.EdbName
  481. updateCols = append(updateCols, "edb_name")
  482. }
  483. if edbInfo.Frequency != index.Frequency {
  484. edbInfo.Frequency = index.Frequency
  485. updateCols = append(updateCols, "frequency")
  486. }
  487. if edbInfo.UnitEn == edbInfo.Unit && edbInfo.Unit != unit {
  488. edbInfo.UnitEn = unit
  489. updateCols = append(updateCols, "unit_en")
  490. }
  491. if edbInfo.Unit != unit {
  492. edbInfo.Unit = unit
  493. updateCols = append(updateCols, "unit")
  494. }
  495. if edbInfo.ClassifyId != int(thirdClassifyId) {
  496. edbInfo.ClassifyId = int(thirdClassifyId)
  497. updateCols = append(updateCols, "classify_id")
  498. }
  499. if len(updateCols) > 0 {
  500. err = edbInfo.Update(updateCols)
  501. }
  502. return
  503. }
  504. // Frequency
  505. // @Description: 获取频度
  506. // @param unit
  507. // @return string
  508. func Frequency(unit string) string {
  509. switch unit {
  510. case "半月度":
  511. unit = `周度`
  512. case "不定期":
  513. unit = `日度`
  514. case `日度`, `周度`, `旬度`, `月度`, `季度`, `半年度`, `年度`:
  515. default:
  516. unit = ``
  517. }
  518. return unit
  519. }
  520. // GetSource
  521. // @Description: 获取来源
  522. // @param sourceName
  523. // @return gnSourceName
  524. // @return source
  525. // @return err
  526. func GetSource(sourceName string) (gnSourceName string, source int, err error) {
  527. gnSourceName = sourceName
  528. var tableNameSuffix, indexNamePrefix string
  529. tableNamePrefix := "edb_data_gn_"
  530. switch sourceName {
  531. case "CCTD":
  532. tableNameSuffix = "cctd"
  533. case "mysteel":
  534. tableNameSuffix = "mysteel"
  535. case "wind":
  536. tableNameSuffix = "wind"
  537. case "卓创":
  538. tableNameSuffix = "sci"
  539. case "CCI":
  540. tableNameSuffix = "cci"
  541. //return
  542. default:
  543. if strings.Contains(sourceName, "国能购销辅助决策系统") {
  544. gnSourceName = `国能购销辅助决策系统`
  545. tableNameSuffix = "purchase_sales"
  546. } else if strings.Contains(sourceName, "国能市场分析平台") {
  547. gnSourceName = `国能市场分析平台`
  548. tableNameSuffix = "market_analysis"
  549. } else {
  550. // TODO 自动生成表名(暂时以时间作为表名后缀,如果客户提前告知了,那么可以直接先建data表,以及edb_source表写入新的source)
  551. tableNameSuffix = fmt.Sprint(time.Now().Format(utils.FormatDateTimeUnSpace))
  552. }
  553. }
  554. sourceItem := data_manage.GetEdbSourceBySourceName(gnSourceName)
  555. // 如果找不到,说明是
  556. if sourceItem == nil {
  557. indexNamePrefix = strings.ToUpper(tableNameSuffix)
  558. sourceItem = &data_manage.EdbSource{
  559. EdbSourceId: 0,
  560. SourceName: gnSourceName,
  561. TableName: tableNamePrefix + tableNameSuffix,
  562. EdbAddMethod: "gn_index/add",
  563. EdbRefreshMethod: "gn_index/refresh",
  564. IsBase: 1,
  565. FromBridge: 1,
  566. BridgeFlag: "bridge_gn",
  567. SourceExtend: gnSourceName,
  568. EdbCodeRequired: 1,
  569. IndexTableName: "",
  570. SourceNameEn: gnSourceName,
  571. }
  572. err = data_manage.AddEdbSource(sourceItem, indexNamePrefix)
  573. if err != nil {
  574. return
  575. }
  576. }
  577. source = sourceItem.EdbSourceId
  578. return
  579. }
  580. func syncGnIndexV2(currIndex, pageSize int, baseLastUpdateTimeStr string, indexId string) (err error, errMsgList []string) {
  581. fmt.Println("开始第", currIndex, "页的更新")
  582. errMsgList = make([]string, 0)
  583. lastUpdateTimeStr := baseLastUpdateTimeStr
  584. if lastUpdateTimeStr != `` {
  585. lastUpdateTimeStr = url.QueryEscape(lastUpdateTimeStr)
  586. }
  587. params := BridgeGnIndexParams{
  588. LastModifyTime: lastUpdateTimeStr,
  589. PageIndex: currIndex,
  590. PageSize: pageSize,
  591. IndexId: indexId,
  592. }
  593. bResult, err, _ := HttpEtaBridgePost(utils.SyncIndexPath, params)
  594. if err != nil {
  595. return
  596. }
  597. var result EtaBridgeGnIndexListResp
  598. err = json.Unmarshal(bResult, &result)
  599. if err != nil {
  600. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", err.Error(), string(bResult))
  601. utils.FileLog.Info("桥接服务get请求失败:\n" + string(bResult))
  602. return
  603. }
  604. //totalPage := result.Data.Paging.Pages
  605. // 处理指标信息
  606. for _, v := range result.Data.List {
  607. tmpErr := handleIndex(v)
  608. if tmpErr != nil {
  609. errMsgList = append(errMsgList, tmpErr.Error())
  610. }
  611. }
  612. fmt.Println(currIndex, "是否已结束:", result.Data.Paging.IsEnd)
  613. // 如果还有下一页,那么就继续请求下一页
  614. //if !result.Data.Paging.IsEnd {
  615. // _, tmpErrMsgList := syncGnIndex(currIndex+1, utils.SyncCrmIndexNum, baseLastUpdateTimeStr)
  616. // errMsgList = append(errMsgList, tmpErrMsgList...)
  617. //}
  618. return
  619. }
  620. func LoadGnTempIndexIds() (indexIds []int, err error) {
  621. filePath := "./static/gn_index_ids.json"
  622. b, e := ioutil.ReadFile(filePath)
  623. if e != nil {
  624. err = fmt.Errorf("读取配置失败, err: %v", e)
  625. return
  626. }
  627. if e = json.Unmarshal(b, &indexIds); e != nil {
  628. err = fmt.Errorf("解析配置失败, err: %v", e)
  629. return
  630. }
  631. return
  632. }