bloomberg_data.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/data_manage"
  7. "eta/eta_api/models/system"
  8. "eta/eta_api/services/data"
  9. etaTrialService "eta/eta_api/services/eta_trial"
  10. "eta/eta_api/utils"
  11. "fmt"
  12. "strconv"
  13. "strings"
  14. "time"
  15. "github.com/rdlucklib/rdluck_tools/paging"
  16. )
  17. // BloombergDataController 彭博数据源
  18. type BloombergDataController struct {
  19. controllers.BaseAuthController
  20. }
  21. // List
  22. // @Title 指标列表
  23. // @Description 指标列表
  24. // @Param PageSize query int false "每页数据量"
  25. // @Param CurrentIndex query int false "页码"
  26. // @Param Frequency query string false "频度"
  27. // @Param Keywords query string false "指标ID/指标名称"
  28. // @Param ListAll query bool false "列表全选"
  29. // @Param SortField query int false "排序字段: 0-默认; 1-开始时间; 2-最新时间; 3-更新时间"
  30. // @Param SortRule query int false "排序方式: 0-默认; 1-正序; 2-倒序"
  31. // @Success 200 {object} data_manage.BloombergSourceListResp
  32. // @router /bloomberg_source/list [get]
  33. func (this *BloombergDataController) List() {
  34. br := new(models.BaseResponse).Init()
  35. defer func() {
  36. if br.ErrMsg == "" {
  37. br.IsSendEmail = false
  38. }
  39. this.Data["json"] = br
  40. this.ServeJSON()
  41. }()
  42. sysUser := this.SysUser
  43. if sysUser == nil {
  44. br.Msg = "请登录"
  45. br.ErrMsg = "请登录,SysUser Is Empty"
  46. br.Ret = 408
  47. return
  48. }
  49. params := new(data_manage.BloombergSourceListReq)
  50. if e := this.ParseForm(params); e != nil {
  51. br.Msg = "获取失败"
  52. br.ErrMsg = "参数解析失败, Err: " + e.Error()
  53. return
  54. }
  55. cond := ``
  56. pars := make([]interface{}, 0)
  57. // 筛选项
  58. {
  59. params.Keywords = strings.TrimSpace(params.Keywords)
  60. if params.Keywords != "" {
  61. // 空格分词搜
  62. indexCodeCol := data_manage.BaseFromBloombergIndexCols.IndexCode
  63. indexNameCol := data_manage.BaseFromBloombergIndexCols.IndexName
  64. keywordArr := strings.Split(params.Keywords, " ")
  65. if len(keywordArr) > 1 {
  66. sliceArr := make([]string, 0)
  67. sliceArr = append(sliceArr, fmt.Sprintf(` %s LIKE ? OR %s LIKE ? `, indexCodeCol, indexNameCol))
  68. pars = utils.GetLikeKeywordPars(pars, params.Keywords, 2)
  69. for _, v := range keywordArr {
  70. if v == ` ` || v == `` {
  71. continue
  72. }
  73. sliceArr = append(sliceArr, fmt.Sprintf(` %s LIKE ? OR %s LIKE ? `, indexCodeCol, indexNameCol))
  74. pars = utils.GetLikeKeywordPars(pars, v, 2)
  75. }
  76. cond += ` AND (` + strings.Join(sliceArr, " OR ") + `)`
  77. } else {
  78. cond += fmt.Sprintf(` AND (%s LIKE ? OR %s LIKE ?)`, indexCodeCol, indexNameCol)
  79. pars = utils.GetLikeKeywordPars(pars, params.Keywords, 2)
  80. }
  81. }
  82. if params.Frequency != "" {
  83. cond += fmt.Sprintf(` AND %s = ?`, data_manage.BaseFromBloombergIndexCols.Frequency)
  84. pars = append(pars, params.Frequency)
  85. }
  86. }
  87. // 分页列表
  88. bloombergOb := new(data_manage.BaseFromBloombergIndex)
  89. total, e := bloombergOb.GetCountByCondition(cond, pars)
  90. if e != nil {
  91. br.Msg = "获取失败"
  92. br.ErrMsg = "获取Bloomberg原始指标列表总数失败, Err: " + e.Error()
  93. return
  94. }
  95. var startSize int
  96. if params.PageSize <= 0 {
  97. params.PageSize = utils.PageSize20
  98. }
  99. if params.CurrentIndex <= 0 {
  100. params.CurrentIndex = 1
  101. }
  102. startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
  103. // 排序, 默认创建时间倒序
  104. orderFields := map[int]string{
  105. 0: data_manage.BaseFromBloombergIndexCols.CreateTime, 1: data_manage.BaseFromBloombergIndexCols.StartDate,
  106. 2: data_manage.BaseFromBloombergIndexCols.EndDate, 3: data_manage.BaseFromBloombergIndexCols.ModifyTime,
  107. }
  108. orderType := map[int]string{0: "DESC", 1: "ASC", 2: "DESC"}
  109. orderRule := fmt.Sprintf("%s %s", orderFields[params.SortField], orderType[params.SortRule])
  110. // 列表
  111. edbList := make([]*data_manage.BaseFromBloombergIndex, 0)
  112. if params.ListAll {
  113. list, e := bloombergOb.GetItemsByCondition(cond, pars, []string{}, orderRule, 0)
  114. if e != nil {
  115. br.Msg = "获取失败"
  116. br.ErrMsg = "获取Bloomberg原始指标列表失败, Err: " + e.Error()
  117. return
  118. }
  119. edbList = list
  120. } else {
  121. list, e := bloombergOb.GetPageItemsByCondition(cond, pars, []string{}, orderRule, startSize, params.PageSize)
  122. if e != nil {
  123. br.Msg = "获取失败"
  124. br.ErrMsg = "获取Bloomberg原始指标分页列表失败, Err: " + e.Error()
  125. return
  126. }
  127. edbList = list
  128. }
  129. // 获取指标库已有指标
  130. existsEdb, e := data_manage.GetEdbCodesBySource(utils.DATA_SOURCE_BLOOMBERG)
  131. if e != nil {
  132. br.Msg = "获取失败"
  133. br.ErrMsg = "获取Bloomberg已添加的指标失败, Err: " + e.Error()
  134. return
  135. }
  136. existMap := make(map[string]*data_manage.EdbInfo)
  137. for _, v := range existsEdb {
  138. existMap[v.EdbCode] = v
  139. }
  140. respList := make([]*data_manage.BaseFromBloombergIndexItem, 0)
  141. for _, v := range edbList {
  142. t := data_manage.FormatBaseFromBloombergIndex2Item(v)
  143. ed := existMap[v.IndexCode]
  144. if ed != nil {
  145. t.EdbExist = 1
  146. t.EdbInfoId = ed.EdbInfoId
  147. t.EdbUniqueCode = ed.UniqueCode
  148. t.EdbClassifyId = ed.ClassifyId
  149. }
  150. respList = append(respList, t)
  151. }
  152. page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
  153. dataResp := new(data_manage.BloombergSourceListResp)
  154. dataResp.Paging = page
  155. dataResp.List = respList
  156. br.Data = dataResp
  157. br.Ret = 200
  158. br.Success = true
  159. br.Msg = "获取成功"
  160. }
  161. // BatchAdd
  162. // @Title 批量新增
  163. // @Description 批量新增
  164. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  165. // @Success 200 string "操作成功"
  166. // @router /bloomberg_source/batch_add [post]
  167. func (this *BloombergDataController) BatchAdd() {
  168. br := new(models.BaseResponse).Init()
  169. defer func() {
  170. if br.ErrMsg == "" {
  171. br.IsSendEmail = false
  172. }
  173. this.Data["json"] = br
  174. this.ServeJSON()
  175. }()
  176. sysUser := this.SysUser
  177. if sysUser == nil {
  178. br.Msg = "请登录"
  179. br.ErrMsg = "请登录,SysUser Is Empty"
  180. br.Ret = 408
  181. return
  182. }
  183. deleteCache := true
  184. cacheKey := "CACHE_EDB_INFO_BATCH_ADD_BLOOMBERG_" + strconv.Itoa(sysUser.AdminId)
  185. defer func() {
  186. if deleteCache {
  187. _ = utils.Rc.Delete(cacheKey)
  188. }
  189. }()
  190. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  191. deleteCache = false
  192. br.Msg = "系统处理中,请稍后重试!"
  193. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  194. return
  195. }
  196. var req []*data_manage.AddEdbInfoReq
  197. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  198. br.Msg = "参数解析异常!"
  199. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  200. return
  201. }
  202. if len(req) == 0 {
  203. br.Msg = "请选择指标"
  204. return
  205. }
  206. if len(req) > 30 {
  207. br.Msg = "批量添加指标数量不得超过30个"
  208. return
  209. }
  210. indexNames := make([]string, 0)
  211. for _, v := range req {
  212. v.EdbCode = strings.TrimSpace(v.EdbCode)
  213. if v.EdbCode == "" {
  214. br.Msg = "指标ID不可为空"
  215. return
  216. }
  217. v.EdbName = strings.TrimSpace(v.EdbName)
  218. if v.EdbName == "" {
  219. br.Msg = "请输入指标名称"
  220. return
  221. }
  222. indexNames = append(indexNames, v.EdbName)
  223. v.Frequency = strings.TrimSpace(v.Frequency)
  224. if v.Frequency == "" {
  225. br.Msg = "请选择频度"
  226. return
  227. }
  228. v.Unit = strings.TrimSpace(v.Unit)
  229. if v.Unit == "" {
  230. br.Msg = "请输入单位"
  231. return
  232. }
  233. if v.ClassifyId <= 0 {
  234. br.Msg = "请选择分类"
  235. return
  236. }
  237. }
  238. // 限定同一时间最多批量新增30个指标
  239. for _, v := range req {
  240. var r data.BloombergIndexSource2EdbReq
  241. r.EdbCode = v.EdbCode
  242. r.EdbName = v.EdbName
  243. r.Frequency = v.Frequency
  244. r.Unit = v.Unit
  245. r.ClassifyId = v.ClassifyId
  246. r.AdminId = sysUser.AdminId
  247. r.AdminRealName = sysUser.RealName
  248. edbInfo, e, errMsg, skip := data.BloombergIndexSource2Edb(r, this.Lang)
  249. if e != nil {
  250. br.Msg = "操作失败"
  251. if errMsg != "" {
  252. br.Msg = errMsg
  253. }
  254. br.ErrMsg = e.Error()
  255. return
  256. }
  257. if skip {
  258. continue
  259. }
  260. // 试用平台更新用户累计新增指标数
  261. if utils.BusinessCode == utils.BusinessCodeSandbox {
  262. go func() {
  263. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  264. if e != nil {
  265. tips := fmt.Sprintf("试用平台更新用户累计新增指标数-获取用户失败, Err: " + e.Error())
  266. utils.FileLog.Info(tips)
  267. return
  268. }
  269. if adminItem.DepartmentName != "ETA试用客户" {
  270. return
  271. }
  272. var ur etaTrialService.EtaTrialUserReq
  273. ur.Mobile = adminItem.Mobile
  274. _, _ = etaTrialService.UpdateUserIndexNum(ur)
  275. }()
  276. }
  277. // 新增操作日志
  278. {
  279. edbLog := new(data_manage.EdbInfoLog)
  280. edbLog.EdbInfoId = edbInfo.EdbInfoId
  281. edbLog.SourceName = edbInfo.SourceName
  282. edbLog.Source = edbInfo.Source
  283. edbLog.EdbCode = edbInfo.EdbCode
  284. edbLog.EdbName = edbInfo.EdbName
  285. edbLog.ClassifyId = edbInfo.ClassifyId
  286. edbLog.SysUserId = sysUser.AdminId
  287. edbLog.SysUserRealName = sysUser.RealName
  288. edbLog.CreateTime = time.Now()
  289. edbLog.Content = string(this.Ctx.Input.RequestBody)
  290. edbLog.Status = "新增指标"
  291. edbLog.Method = this.Ctx.Input.URI()
  292. go data_manage.AddEdbInfoLog(edbLog)
  293. }
  294. }
  295. br.Msg = "操作成功"
  296. br.Ret = 200
  297. br.Success = true
  298. br.IsAddLog = true
  299. }
  300. // NameCheck
  301. // @Title 重名校验
  302. // @Description 批量新增
  303. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  304. // @Success 200 string "操作成功"
  305. // @router /bloomberg_source/name_check [post]
  306. func (this *BloombergDataController) NameCheck() {
  307. br := new(models.BaseResponse).Init()
  308. defer func() {
  309. if br.ErrMsg == "" {
  310. br.IsSendEmail = false
  311. }
  312. this.Data["json"] = br
  313. this.ServeJSON()
  314. }()
  315. sysUser := this.SysUser
  316. if sysUser == nil {
  317. br.Msg = "请登录"
  318. br.ErrMsg = "请登录,SysUser Is Empty"
  319. br.Ret = 408
  320. return
  321. }
  322. var req []*data_manage.AddEdbInfoReq
  323. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  324. br.Msg = "参数解析异常!"
  325. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  326. return
  327. }
  328. if len(req) == 0 {
  329. br.Msg = "请选择指标"
  330. return
  331. }
  332. type NameCheckResult struct {
  333. EdbCode string
  334. EdbName string
  335. Exist bool
  336. }
  337. indexNames := make([]string, 0)
  338. resp := make([]*NameCheckResult, 0)
  339. for _, v := range req {
  340. v.EdbCode = strings.TrimSpace(v.EdbCode)
  341. if v.EdbCode == "" {
  342. br.Msg = "指标ID不可为空"
  343. return
  344. }
  345. v.EdbName = strings.TrimSpace(v.EdbName)
  346. if v.EdbName == "" {
  347. br.Msg = "请输入指标名称"
  348. return
  349. }
  350. indexNames = append(indexNames, v.EdbName)
  351. resp = append(resp, &NameCheckResult{
  352. EdbCode: v.EdbCode,
  353. EdbName: v.EdbName,
  354. })
  355. }
  356. // 重名校验
  357. edbList, e := data_manage.GetEdbInfoByNameArr(indexNames, utils.EDB_INFO_TYPE)
  358. if e != nil {
  359. br.Msg = "操作失败"
  360. br.ErrMsg = "获取重名指标失败, Err: " + e.Error()
  361. return
  362. }
  363. nameExists := make(map[string]bool)
  364. for _, v := range edbList {
  365. nameExists[v.EdbName] = true
  366. }
  367. if len(nameExists) > 0 {
  368. for _, v := range resp {
  369. v.Exist = nameExists[v.EdbName]
  370. }
  371. }
  372. br.Data = resp
  373. br.Msg = "操作成功"
  374. br.Ret = 200
  375. br.Success = true
  376. }
  377. // AddCheck
  378. // @Title 新增校验
  379. // @Description 新增校验
  380. // @Param request body data_manage.BloombergSourceBatchAddCheckReq true "type json string"
  381. // @Success 200 string "操作成功"
  382. // @router /bloomberg_source/add_check [post]
  383. func (this *BloombergDataController) AddCheck() {
  384. br := new(models.BaseResponse).Init()
  385. defer func() {
  386. if br.ErrMsg == "" {
  387. br.IsSendEmail = false
  388. }
  389. this.Data["json"] = br
  390. this.ServeJSON()
  391. }()
  392. sysUser := this.SysUser
  393. if sysUser == nil {
  394. br.Msg = "请登录"
  395. br.ErrMsg = "请登录,SysUser Is Empty"
  396. br.Ret = 408
  397. return
  398. }
  399. var req *data_manage.BloombergSourceBatchAddCheckReq
  400. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  401. br.Msg = "参数解析异常!"
  402. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  403. return
  404. }
  405. codeMax := 30
  406. codeLen := len(req.IndexCodes)
  407. // 排序, 默认创建时间倒序
  408. orderFields := map[int]string{
  409. 0: data_manage.BaseFromBloombergIndexCols.CreateTime, 1: data_manage.BaseFromBloombergIndexCols.StartDate,
  410. 2: data_manage.BaseFromBloombergIndexCols.EndDate, 3: data_manage.BaseFromBloombergIndexCols.ModifyTime,
  411. }
  412. orderType := map[int]string{0: "DESC", 1: "ASC", 2: "DESC"}
  413. orderRule := fmt.Sprintf("%s %s", orderFields[req.SortField], orderType[req.SortRule])
  414. // 获取指标库已有指标
  415. existsEdb, e := data_manage.GetEdbCodesBySource(utils.DATA_SOURCE_BLOOMBERG)
  416. if e != nil {
  417. br.Msg = "获取失败"
  418. br.ErrMsg = "获取Bloomberg已添加的指标失败, Err: " + e.Error()
  419. return
  420. }
  421. existMap := make(map[string]*data_manage.EdbInfo)
  422. for _, v := range existsEdb {
  423. existMap[v.EdbCode] = v
  424. }
  425. // 非全选-不需要频率等筛选条件
  426. bloombergOb := new(data_manage.BaseFromBloombergIndex)
  427. if !req.ListAll {
  428. if codeLen == 0 {
  429. br.Msg = "请选择指标"
  430. return
  431. }
  432. if codeLen > codeMax {
  433. br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
  434. return
  435. }
  436. // 查询选中的指标
  437. cond := fmt.Sprintf(` AND %s IN (%s)`, data_manage.BaseFromBloombergIndexCols.IndexCode, utils.GetOrmInReplace(codeLen))
  438. pars := make([]interface{}, 0)
  439. pars = append(pars, req.IndexCodes)
  440. list, e := bloombergOb.GetItemsByCondition(cond, pars, []string{}, orderRule, 0)
  441. if e != nil {
  442. br.Msg = "获取失败"
  443. br.ErrMsg = "获取Bloomberg原始指标列表失败, Err: " + e.Error()
  444. return
  445. }
  446. resp := make([]*data_manage.BaseFromBloombergIndexItem, 0)
  447. for _, v := range list {
  448. t := data_manage.FormatBaseFromBloombergIndex2Item(v)
  449. ed := existMap[v.IndexCode]
  450. if ed != nil {
  451. t.EdbExist = 1
  452. t.EdbInfoId = ed.EdbInfoId
  453. t.EdbUniqueCode = ed.UniqueCode
  454. t.EdbClassifyId = ed.ClassifyId
  455. }
  456. resp = append(resp, t)
  457. }
  458. br.Data = resp
  459. br.Msg = "校验成功"
  460. br.Ret = 200
  461. br.Success = true
  462. return
  463. }
  464. // 全选-需要频率等筛选条件
  465. cond := ``
  466. pars := make([]interface{}, 0)
  467. // 筛选项
  468. req.Keywords = strings.TrimSpace(req.Keywords)
  469. if req.Keywords != "" {
  470. // 空格分词搜
  471. indexCodeCol := data_manage.BaseFromBloombergIndexCols.IndexCode
  472. indexNameCol := data_manage.BaseFromBloombergIndexCols.IndexName
  473. keywordArr := strings.Split(req.Keywords, " ")
  474. if len(keywordArr) > 1 {
  475. sliceArr := make([]string, 0)
  476. sliceArr = append(sliceArr, fmt.Sprintf(` %s LIKE ? OR %s LIKE ? `, indexCodeCol, indexNameCol))
  477. pars = utils.GetLikeKeywordPars(pars, req.Keywords, 2)
  478. for _, v := range keywordArr {
  479. if v == ` ` || v == `` {
  480. continue
  481. }
  482. sliceArr = append(sliceArr, fmt.Sprintf(` %s LIKE ? OR %s LIKE ? `, indexCodeCol, indexNameCol))
  483. pars = utils.GetLikeKeywordPars(pars, v, 2)
  484. }
  485. cond += ` AND (` + strings.Join(sliceArr, " OR ") + `)`
  486. } else {
  487. cond += fmt.Sprintf(` AND (%s LIKE ? OR %s LIKE ?)`, indexCodeCol, indexNameCol)
  488. pars = utils.GetLikeKeywordPars(pars, req.Keywords, 2)
  489. }
  490. }
  491. if req.Frequency != "" {
  492. cond += fmt.Sprintf(` AND %s = ?`, data_manage.BaseFromBloombergIndexCols.Frequency)
  493. pars = append(pars, req.Frequency)
  494. }
  495. // 排除对应指标
  496. if codeLen > 0 {
  497. cond += fmt.Sprintf(` AND %s NOT IN (%s)`, data_manage.BaseFromBloombergIndexCols.IndexCode, utils.GetOrmInReplace(codeLen))
  498. pars = append(pars, req.IndexCodes)
  499. }
  500. // 查询max+1个指标
  501. list, e := bloombergOb.GetItemsByCondition(cond, pars, []string{}, orderRule, codeMax+1)
  502. if e != nil {
  503. br.Msg = "获取失败"
  504. br.ErrMsg = "获取Bloomberg原始指标列表失败, Err: " + e.Error()
  505. return
  506. }
  507. if len(list) > codeMax {
  508. br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
  509. return
  510. }
  511. resp := make([]*data_manage.BaseFromBloombergIndexItem, 0)
  512. for _, v := range list {
  513. t := data_manage.FormatBaseFromBloombergIndex2Item(v)
  514. ed := existMap[v.IndexCode]
  515. if ed != nil {
  516. t.EdbExist = 1
  517. t.EdbInfoId = ed.EdbInfoId
  518. t.EdbUniqueCode = ed.UniqueCode
  519. t.EdbClassifyId = ed.ClassifyId
  520. }
  521. resp = append(resp, t)
  522. }
  523. br.Data = resp
  524. br.Msg = "校验成功"
  525. br.Ret = 200
  526. br.Success = true
  527. }
  528. // EdbInfoAdd
  529. // @Title 加入到指标库
  530. // @Description 加入到指标库
  531. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  532. // @Success 200 string "操作成功"
  533. // @router /bloomberg_source/edb_add [post]
  534. func (this *BloombergDataController) EdbInfoAdd() {
  535. br := new(models.BaseResponse).Init()
  536. defer func() {
  537. this.Data["json"] = br
  538. this.ServeJSON()
  539. }()
  540. sysUser := this.SysUser
  541. if sysUser == nil {
  542. br.Msg = "请登录"
  543. br.ErrMsg = "请登录,SysUser Is Empty"
  544. br.Ret = 408
  545. return
  546. }
  547. deleteCache := true
  548. cacheKey := "CACHE_EDB_INFO_SINGLE_ADD_BLOOMBERG_" + strconv.Itoa(sysUser.AdminId)
  549. defer func() {
  550. if deleteCache {
  551. _ = utils.Rc.Delete(cacheKey)
  552. }
  553. }()
  554. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  555. deleteCache = false
  556. br.Msg = "系统处理中,请稍后重试!"
  557. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  558. return
  559. }
  560. req := new(data_manage.AddEdbInfoReq)
  561. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  562. br.Msg = "参数解析异常!"
  563. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  564. return
  565. }
  566. if req.EdbCode == "" {
  567. br.Msg = "指标ID不可为空"
  568. return
  569. }
  570. req.EdbName = strings.TrimSpace(req.EdbName)
  571. if req.EdbName == "" {
  572. br.Msg = "请输入指标名称"
  573. return
  574. }
  575. req.Frequency = strings.TrimSpace(req.Frequency)
  576. if req.Frequency == "" {
  577. br.Msg = "请选择频度"
  578. return
  579. }
  580. req.Unit = strings.TrimSpace(req.Unit)
  581. if req.Unit == "" {
  582. br.Msg = "请输入单位"
  583. return
  584. }
  585. if req.ClassifyId <= 0 {
  586. br.Msg = "请选择分类"
  587. return
  588. }
  589. // 新增指标
  590. var r data.BloombergIndexSource2EdbReq
  591. r.EdbCode = req.EdbCode
  592. r.EdbName = req.EdbName
  593. r.Frequency = req.Frequency
  594. r.Unit = req.Unit
  595. r.ClassifyId = req.ClassifyId
  596. r.AdminId = this.SysUser.AdminId
  597. r.AdminRealName = this.SysUser.RealName
  598. edbInfo, e, errMsg, skip := data.BloombergIndexSource2Edb(r, this.Lang)
  599. if e != nil {
  600. br.Msg = "操作失败"
  601. if errMsg != "" {
  602. br.Msg = errMsg
  603. }
  604. br.ErrMsg = e.Error()
  605. return
  606. }
  607. if skip {
  608. br.Msg = "指标已存在"
  609. return
  610. }
  611. // 试用平台更新用户累计新增指标数
  612. if utils.BusinessCode == utils.BusinessCodeSandbox {
  613. go func() {
  614. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  615. if e != nil {
  616. tips := fmt.Sprintf("试用平台更新用户累计新增指标数-获取用户失败, Err: " + e.Error())
  617. utils.FileLog.Info(tips)
  618. return
  619. }
  620. if adminItem.DepartmentName != "ETA试用客户" {
  621. return
  622. }
  623. var ur etaTrialService.EtaTrialUserReq
  624. ur.Mobile = adminItem.Mobile
  625. _, _ = etaTrialService.UpdateUserIndexNum(ur)
  626. }()
  627. }
  628. // 新增操作日志
  629. {
  630. edbLog := new(data_manage.EdbInfoLog)
  631. edbLog.EdbInfoId = edbInfo.EdbInfoId
  632. edbLog.SourceName = edbInfo.SourceName
  633. edbLog.Source = edbInfo.Source
  634. edbLog.EdbCode = edbInfo.EdbCode
  635. edbLog.EdbName = edbInfo.EdbName
  636. edbLog.ClassifyId = edbInfo.ClassifyId
  637. edbLog.SysUserId = sysUser.AdminId
  638. edbLog.SysUserRealName = sysUser.RealName
  639. edbLog.CreateTime = time.Now()
  640. edbLog.Content = string(this.Ctx.Input.RequestBody)
  641. edbLog.Status = "新增指标"
  642. edbLog.Method = this.Ctx.Input.URI()
  643. go data_manage.AddEdbInfoLog(edbLog)
  644. }
  645. br.Msg = "操作成功"
  646. br.Ret = 200
  647. br.Success = true
  648. br.IsAddLog = true
  649. }