edb_info_refresh.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "eta_gn/eta_api/models"
  5. "eta_gn/eta_api/models/data_manage"
  6. "eta_gn/eta_api/models/data_manage/edb_refresh"
  7. "eta_gn/eta_api/models/data_manage/edb_refresh/request"
  8. "eta_gn/eta_api/services/data"
  9. "eta_gn/eta_api/utils"
  10. "fmt"
  11. "github.com/rdlucklib/rdluck_tools/paging"
  12. )
  13. // RefreshSourceList
  14. // @Title 获取指标刷新配置的来源接口
  15. // @Description 获取指标刷新配置的来源接口
  16. // @Success Ret=200 获取成功
  17. // @router /edb_info/refresh/source_list [get]
  18. func (c *EdbInfoController) RefreshSourceList() {
  19. br := new(models.BaseResponse).Init()
  20. defer func() {
  21. c.Data["json"] = br
  22. c.ServeJSON()
  23. }()
  24. item := edb_refresh.EdbRefreshSource{}
  25. tmpList, err := item.GetAllList()
  26. if err != nil {
  27. br.Msg = "获取失败"
  28. br.ErrMsg = "获取刷新数据源失败, Err: " + err.Error()
  29. return
  30. }
  31. list := make([]edb_refresh.EdbRefreshSourceList, 0)
  32. tmpMap := make(map[int]edb_refresh.EdbRefreshSourceList, 0)
  33. for _, v := range tmpList {
  34. tmp, ok := tmpMap[v.Source]
  35. if ok {
  36. continue
  37. }
  38. tmp = edb_refresh.EdbRefreshSourceList{
  39. Source: v.Source,
  40. SourceName: v.SourceName,
  41. SourceNameEn: v.SourceNameEn,
  42. //SubSource: v.SubSource,
  43. //SubSourceName: v.SubSourceName,
  44. Child: make([]edb_refresh.EdbRefreshSourceList, 0),
  45. HasChild: v.HasChild,
  46. }
  47. if v.HasChild == 1 {
  48. for _, v2 := range tmpList {
  49. if v2.Source == v.Source {
  50. tmp.Child = append(tmp.Child, edb_refresh.EdbRefreshSourceList{
  51. Source: v2.Source,
  52. SourceName: v2.SourceName,
  53. SubSource: v2.SubSource,
  54. SubSourceName: v2.SubSourceName,
  55. SourceNameEn: v2.SourceNameEn,
  56. SubSourceNameEn: v2.SubSourceNameEn,
  57. HasChild: 0,
  58. })
  59. }
  60. }
  61. }
  62. tmpMap[v.Source] = tmp
  63. list = append(list, tmp)
  64. }
  65. br.Ret = 200
  66. br.Success = true
  67. br.Msg = "获取成功"
  68. br.Data = list
  69. }
  70. // RefreshClassifyList
  71. // @Title 获取指标分类列表接口
  72. // @Description 获取指标分类列表接口
  73. // @Param Source query int true "来源:1:同花顺,2:wind,3:彭博"
  74. // @Success Ret=200 获取成功
  75. // @router /edb_info/refresh/classify_list [get]
  76. func (c *EdbInfoController) RefreshClassifyList() {
  77. br := new(models.BaseResponse).Init()
  78. defer func() {
  79. c.Data["json"] = br
  80. c.ServeJSON()
  81. }()
  82. source, _ := c.GetInt("Source", utils.DATA_SOURCE_MYSTEEL_CHEMICAL)
  83. list := make([]*edb_refresh.BaseClassifyItems, 0)
  84. switch source {
  85. case utils.DATA_SOURCE_MYSTEEL_CHEMICAL: // 钢联
  86. rootList, err := data_manage.GetBaseFromMysteelChemicalClassifyByParentId(0)
  87. if err != nil && !utils.IsErrNoRow(err) {
  88. br.Msg = "获取失败"
  89. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  90. return
  91. }
  92. classifyAll, err := data_manage.GetAllBaseFromMysteelChemicalClassify()
  93. if err != nil && !utils.IsErrNoRow(err) {
  94. br.Msg = "获取失败"
  95. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  96. return
  97. }
  98. rootChildMap := make(map[int][]*edb_refresh.BaseClassifyItems)
  99. for _, v := range classifyAll {
  100. //tmpList, ok := rootChildMap[v.ParentId]
  101. //if !ok {
  102. // tmpList = make([]data_manage.BaseClassifyItems, 0)
  103. //}
  104. //tmpList = append(tmpList, data_manage.BaseClassifyItems{
  105. // ClassifyId: v.BaseFromMysteelChemicalClassifyId,
  106. // ClassifyName: v.ClassifyName,
  107. // ParentId: v.ParentId,
  108. // UniqueCode: fmt.Sprint(v.BaseFromMysteelChemicalClassifyId),
  109. // Children: nil,
  110. //})
  111. //rootChildMap[v.ParentId] = tmpList
  112. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], &edb_refresh.BaseClassifyItems{
  113. ClassifyId: v.BaseFromMysteelChemicalClassifyId,
  114. ClassifyName: v.ClassifyName,
  115. ParentId: v.ParentId,
  116. UniqueCode: fmt.Sprint(v.BaseFromMysteelChemicalClassifyId),
  117. Children: nil,
  118. })
  119. }
  120. for _, v := range rootList {
  121. tmp := &edb_refresh.BaseClassifyItems{
  122. ClassifyId: v.BaseFromMysteelChemicalClassifyId,
  123. ClassifyName: v.ClassifyName,
  124. ParentId: v.ParentId,
  125. UniqueCode: fmt.Sprint(v.BaseFromMysteelChemicalClassifyId),
  126. Children: nil,
  127. }
  128. if existItems, ok := rootChildMap[v.BaseFromMysteelChemicalClassifyId]; ok {
  129. tmp.Children = existItems
  130. } else {
  131. items := make([]*edb_refresh.BaseClassifyItems, 0)
  132. tmp.Children = items
  133. }
  134. list = append(list, tmp)
  135. }
  136. default:
  137. tmpList, err := data_manage.GetAllEdbClassify()
  138. if err != nil && !utils.IsErrNoRow(err) {
  139. br.Msg = "获取失败"
  140. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  141. return
  142. }
  143. for _, v := range tmpList {
  144. list = append(list, &edb_refresh.BaseClassifyItems{
  145. ClassifyId: v.ClassifyId,
  146. ClassifyName: v.ClassifyName,
  147. ParentId: v.ParentId,
  148. UniqueCode: fmt.Sprint(v.ClassifyId),
  149. Children: nil,
  150. })
  151. }
  152. list = buildTree(list, 0)
  153. //fmt.Println(result)
  154. }
  155. br.Ret = 200
  156. br.Success = true
  157. br.Msg = "获取成功"
  158. br.Data = list
  159. }
  160. // 生成多层级列表的递归函数
  161. func buildTree(items []*edb_refresh.BaseClassifyItems, parentId int) []*edb_refresh.BaseClassifyItems {
  162. var result []*edb_refresh.BaseClassifyItems
  163. // 遍历所有分类项
  164. for i := range items {
  165. // 找到当前节点的子节点
  166. if items[i].ParentId == parentId {
  167. // 递归构建子节点的子节点
  168. items[i].Children = buildTree(items, items[i].ClassifyId)
  169. // 将当前节点添加到结果中
  170. result = append(result, items[i])
  171. }
  172. }
  173. return result
  174. }
  175. // RefreshEdbList
  176. // @Title 获取待配置的指标列表接口
  177. // @Description 获取待配置的指标列表接口
  178. // @Param Source query int true "来源:1:同花顺,2:wind,3:彭博"
  179. // @Param SubSource query int true "来源:0:经济数据库,1:日期序列"
  180. // @Param ClassifyId query string false "分类ID,支持多选,用英文,隔开"
  181. // @Param TerminalCode query string false "终端编码"
  182. // @Param SysUserId query string false "创建人,支持多选,用英文,隔开"
  183. // @Param Frequency query string false "频度,支持多选,用英文,隔开"
  184. // @Param Keyword query string false "关键词"
  185. // @Param SortParam query string false "排序字段参数,用来排序的字段, 枚举值:'data_time':日期"
  186. // @Param SortType query string true "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
  187. // @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
  188. // @router /edb_info/refresh/edb_list [get]
  189. func (c *EdbInfoController) RefreshEdbList() {
  190. br := new(models.BaseResponse).Init()
  191. defer func() {
  192. c.Data["json"] = br
  193. c.ServeJSON()
  194. }()
  195. source, _ := c.GetInt("Source")
  196. subSource, _ := c.GetInt("SubSource")
  197. classifyId := c.GetString("ClassifyId")
  198. terminalCode := c.GetString("TerminalCode")
  199. sysUserId := c.GetString("SysUserId")
  200. frequency := c.GetString("Frequency")
  201. keyword := c.GetString("Keyword")
  202. status := c.GetString("Status")
  203. sortParam := c.GetString("SortParam")
  204. sortType := c.GetString("SortType")
  205. switch sortParam {
  206. case "end_date":
  207. default:
  208. sortParam = " end_date "
  209. }
  210. switch sortType {
  211. case "desc", "asc":
  212. default:
  213. sortType = "desc"
  214. }
  215. pageSize, _ := c.GetInt("PageSize")
  216. currentIndex, _ := c.GetInt("CurrentIndex")
  217. var startSize int
  218. if pageSize <= 0 {
  219. pageSize = utils.PageSize20
  220. }
  221. if currentIndex <= 0 {
  222. currentIndex = 1
  223. }
  224. startSize = utils.StartIndex(currentIndex, pageSize)
  225. total, list, err := data.GetList(source, subSource, classifyId, terminalCode, sysUserId, frequency, keyword, status, startSize, pageSize, sortParam, sortType)
  226. if err != nil && !utils.IsErrNoRow(err) {
  227. br.Msg = "获取失败"
  228. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  229. return
  230. }
  231. page := paging.GetPaging(currentIndex, pageSize, total)
  232. resp := data_manage.RefreshBaseEdbInfoResp{
  233. Paging: page,
  234. List: list,
  235. }
  236. // 刷新时间格式化
  237. list, err, errMsg, isSendEmail := data.HandleRefreshTime(source, subSource, list)
  238. if err != nil {
  239. br.Msg = errMsg
  240. br.ErrMsg = "保存失败,Err:" + err.Error()
  241. br.IsSendEmail = isSendEmail
  242. return
  243. }
  244. br.Ret = 200
  245. br.Success = true
  246. br.Msg = "获取成功"
  247. br.Data = resp
  248. }
  249. // GetEdbRefreshDefaultConfig
  250. // @Title 获取待配置的指标列表接口
  251. // @Description 获取待配置的指标列表接口
  252. // @Param Source query int true "来源:1:同花顺,2:wind,3:彭博"
  253. // @Param SubSource query int true "来源:0:经济数据库,1:日期序列"
  254. // @Param Frequency query string false "频度"
  255. // @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
  256. // @router /edb_info/refresh/default_config [get]
  257. func (c *EdbInfoController) GetEdbRefreshDefaultConfig() {
  258. br := new(models.BaseResponse).Init()
  259. defer func() {
  260. c.Data["json"] = br
  261. c.ServeJSON()
  262. }()
  263. source, _ := c.GetInt("Source")
  264. subSource, _ := c.GetInt("SubSource")
  265. frequency := c.GetString("Frequency")
  266. if source <= 0 {
  267. br.Msg = "来源不能为空"
  268. br.IsSendEmail = false
  269. return
  270. }
  271. // 非有色的来源,频度不能为空
  272. if source != utils.DATA_SOURCE_YS && frequency == `` {
  273. br.Msg = "频度不能为空"
  274. br.IsSendEmail = false
  275. return
  276. }
  277. list, err := edb_refresh.GetListBySourceAndFrequency(source, subSource, frequency)
  278. if err != nil {
  279. br.Msg = "获取失败"
  280. br.ErrMsg = err.Error()
  281. return
  282. }
  283. br.Ret = 200
  284. br.Success = true
  285. br.Msg = "获取成功"
  286. br.Data = list
  287. }
  288. // SaveEdbRefreshDefaultConfig
  289. // @Title 设置默认的指标刷新配置接口
  290. // @Description 设置默认的指标刷新配置接口
  291. // @Param request body data_manage.SaveEdbRefreshDefaultConfigReq true "type json string"
  292. // @Success Ret=200 保存成功
  293. // @router /edb_info/refresh/default_config/save [post]
  294. func (c *EdbInfoController) SaveEdbRefreshDefaultConfig() {
  295. br := new(models.BaseResponse).Init()
  296. defer func() {
  297. c.Data["json"] = br
  298. c.ServeJSON()
  299. }()
  300. var req request.SaveEdbRefreshDefaultConfigReq
  301. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  302. if err != nil {
  303. br.Msg = "参数解析异常!"
  304. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  305. return
  306. }
  307. // 保存
  308. err, errMsg, isSendEmail := data.SaveEdbRefreshDefaultConfig(req.Source, req.SubSource, req.Frequency, req.List)
  309. if err != nil {
  310. br.Msg = errMsg
  311. br.ErrMsg = "保存失败,Err:" + err.Error()
  312. br.IsSendEmail = isSendEmail
  313. return
  314. }
  315. br.Ret = 200
  316. br.Success = true
  317. br.Msg = "保存成功"
  318. }
  319. // SaveEdbRefreshConfig
  320. // @Title 设置指标刷新配置接口
  321. // @Description 设置指标刷新配置接口
  322. // @Param request body data_manage.SaveEdbRefreshConfigReq true "type json string"
  323. // @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
  324. // @router /edb_info/refresh/config/save [post]
  325. func (c *EdbInfoController) SaveEdbRefreshConfig() {
  326. br := new(models.BaseResponse).Init()
  327. defer func() {
  328. c.Data["json"] = br
  329. c.ServeJSON()
  330. }()
  331. var req request.SaveEdbRefreshConfigReq
  332. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  333. if err != nil {
  334. br.Msg = "参数解析异常!"
  335. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  336. return
  337. }
  338. // 保存
  339. err, errMsg, isSendEmail := data.SaveEdbRefreshConfig(req.Source, req.SubSource, req.ClassifyId, req.TerminalCode, req.Frequency, req.Keyword, req.Status, req.SysUserId, req.IsSelectAll, req.List, req.EdbSelectIdList, c.SysUser.AdminId, c.SysUser.RealName)
  340. if err != nil {
  341. br.Msg = errMsg
  342. br.ErrMsg = "保存失败,Err:" + err.Error()
  343. br.IsSendEmail = isSendEmail
  344. return
  345. }
  346. br.Ret = 200
  347. br.Success = true
  348. br.Msg = "保存成功"
  349. }
  350. // SaveEdbRefreshStatus
  351. // @Title 设置指标刷新状态接口
  352. // @Description 设置指标刷新状态接口
  353. // @Param request body data_manage.SaveEdbRefreshStatusReq true "type json string"
  354. // @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
  355. // @router /edb_info/refresh/status/save [post]
  356. func (c *EdbInfoController) SaveEdbRefreshStatus() {
  357. br := new(models.BaseResponse).Init()
  358. defer func() {
  359. c.Data["json"] = br
  360. c.ServeJSON()
  361. }()
  362. var req request.SaveEdbRefreshStatusReq
  363. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  364. if err != nil {
  365. br.Msg = "参数解析异常!"
  366. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  367. return
  368. }
  369. if req.Source <= 0 {
  370. br.Msg = "来源不能为空"
  371. br.IsSendEmail = false
  372. return
  373. }
  374. // todo 批量设置刷新状态修改
  375. edbIdList := make([]int, 0)
  376. edbCodeList := make([]string, 0)
  377. // 指标id列表
  378. if req.IsSelectAll {
  379. // 如果是列表全选
  380. _, edbList, err := data.GetList(req.Source, req.SubSource, req.ClassifyId, req.TerminalCode, req.SysUserId, req.Frequency, req.Keyword, req.Status, 0, 100000, "", "")
  381. if err != nil && !utils.IsErrNoRow(err) {
  382. br.Msg = "获取失败"
  383. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  384. return
  385. }
  386. // 不配置的指标id
  387. notIdMap := make(map[int]int, 0)
  388. for _, v := range req.EdbSelectIdList {
  389. notIdMap[v] = v
  390. }
  391. for _, v := range edbList {
  392. _, ok := notIdMap[v.EdbInfoId]
  393. // 在不配置的指标id列表内的话,那就过滤
  394. if ok {
  395. continue
  396. }
  397. // 加入到待配置的指标列表id
  398. edbIdList = append(edbIdList, v.EdbInfoId)
  399. edbCodeList = append(edbCodeList, v.IndexCode)
  400. }
  401. } else {
  402. edbIdList = req.EdbSelectIdList
  403. }
  404. if len(edbIdList) <= 0 {
  405. br.Msg = "指标不能为空"
  406. br.IsSendEmail = false
  407. return
  408. }
  409. isStop := 0
  410. if req.ModifyStatus == `暂停` {
  411. isStop = 1
  412. }
  413. if len(edbIdList) <= 0 {
  414. br.Msg = "指标不能为空"
  415. br.IsSendEmail = false
  416. return
  417. }
  418. //查询计算指标信息
  419. calculateEdbIdList := make([]int, 0)
  420. if isStop == 1 {
  421. fromEdbIdList := make([]int, 0)
  422. edbList, e := data_manage.GetEdbInfoByIdList(edbIdList)
  423. if e != nil && !utils.IsErrNoRow(e) {
  424. br.Msg = "获取失败"
  425. br.ErrMsg = "获取数据失败,Err:" + e.Error()
  426. return
  427. }
  428. for _, v := range edbList {
  429. if v.EdbInfoType == 0 {
  430. fromEdbIdList = append(fromEdbIdList, v.EdbInfoId)
  431. }
  432. }
  433. hasFind := make(map[int]struct{})
  434. calculateEdbIdList, err = data.GetCalculateEdbByFromEdbInfo(fromEdbIdList, calculateEdbIdList, hasFind)
  435. if err != nil {
  436. br.Msg = "查询计算指标信息失败"
  437. br.ErrMsg = "查询计算指标信息失败,Err:" + err.Error()
  438. return
  439. }
  440. }
  441. switch req.Source {
  442. case utils.DATA_SOURCE_MYSTEEL_CHEMICAL: // 钢联
  443. err = data_manage.ModifyMysteelChemicalUpdateStatus(edbIdList, edbCodeList, isStop)
  444. default:
  445. err = data_manage.ModifyEdbInfoUpdateStatus(edbIdList, isStop, calculateEdbIdList)
  446. }
  447. if err != nil {
  448. br.Msg = `保存失败`
  449. br.ErrMsg = "保存失败,Err:" + err.Error()
  450. return
  451. }
  452. br.Ret = 200
  453. br.Success = true
  454. br.Msg = "保存成功"
  455. }
  456. // SaveEdbRefreshStatusSingle
  457. // @Title 设置单个指标刷新状态接口
  458. // @Description 设置单个指标刷新状态接口
  459. // @Param request body data_manage.SaveEdbRefreshStatusReq true "type json string"
  460. // @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
  461. // @router /edb_info/single_refresh/status/save [post]
  462. func (c *EdbInfoController) SaveEdbRefreshStatusSingle() {
  463. br := new(models.BaseResponse).Init()
  464. defer func() {
  465. c.Data["json"] = br
  466. c.ServeJSON()
  467. }()
  468. var req request.SaveEdbRefreshStatusSingleReq
  469. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  470. if err != nil {
  471. br.Msg = "参数解析异常!"
  472. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  473. return
  474. }
  475. if req.EdbInfoId <= 0 {
  476. br.Msg = "请选择指标"
  477. br.IsSendEmail = false
  478. return
  479. }
  480. // 查询指标
  481. edbInfo, err := data_manage.GetEdbInfoById(req.EdbInfoId)
  482. if err != nil {
  483. if utils.IsErrNoRow(err) {
  484. br.Msg = "指标不存在"
  485. return
  486. }
  487. br.Msg = "查询指标失败"
  488. br.ErrMsg = "查询指标失败,Err:" + err.Error()
  489. return
  490. }
  491. // 查询指标的指标代码
  492. calculateEdbIdList := make([]int, 0)
  493. isStop := 0
  494. if req.ModifyStatus == `暂停` {
  495. isStop = 1
  496. }
  497. if isStop == 1 && edbInfo.EdbInfoType == 0 { //基础指标, 只有在停用的情况下才需要查询计算指标
  498. hasFind := make(map[int]struct{})
  499. calculateEdbIdList, err = data.GetCalculateEdbByFromEdbInfo([]int{edbInfo.EdbInfoId}, calculateEdbIdList, hasFind)
  500. if err != nil {
  501. br.Msg = "查询计算指标信息失败"
  502. br.ErrMsg = "查询计算指标信息失败,Err:" + err.Error()
  503. return
  504. }
  505. }
  506. switch edbInfo.Source {
  507. case utils.DATA_SOURCE_MYSTEEL_CHEMICAL: // 钢联
  508. err = data_manage.ModifyMysteelChemicalUpdateStatusByEdbInfoId(edbInfo.EdbInfoId, isStop, edbInfo.EdbCode, calculateEdbIdList)
  509. default: // wind
  510. err = data_manage.EdbInfoUpdateStatusByEdbInfoId([]int{edbInfo.EdbInfoId}, isStop, calculateEdbIdList)
  511. }
  512. if err != nil {
  513. br.Msg = `保存失败`
  514. br.ErrMsg = "保存失败,Err:" + err.Error()
  515. return
  516. }
  517. br.Ret = 200
  518. br.Success = true
  519. br.Msg = "保存成功"
  520. }
  521. // SaveRelationEdbRefreshStatus
  522. // @Title 批量设置被引用的指标刷新状态接口
  523. // @Description 批量设置被引用的指标刷新状态接口
  524. // @Param request body data_manage.SaveEdbRefreshStatusReq true "type json string"
  525. // @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
  526. // @router /edb_info/relation/refresh/save [post]
  527. func (c *EdbInfoController) SaveRelationEdbRefreshStatus() {
  528. br := new(models.BaseResponse).Init()
  529. defer func() {
  530. c.Data["json"] = br
  531. c.ServeJSON()
  532. }()
  533. var req request.SaveRelationEdbRefreshStatusReq
  534. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  535. if err != nil {
  536. br.Msg = "参数解析异常!"
  537. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  538. return
  539. }
  540. if req.Source <= 0 {
  541. br.Msg = "来源不能为空"
  542. br.IsSendEmail = false
  543. return
  544. }
  545. edbType := 1 //基础指标
  546. switch req.Source {
  547. case utils.DATA_SOURCE_MYSTEEL_CHEMICAL, utils.DATA_SOURCE_WIND: // wind
  548. case -1:
  549. req.Source = 0
  550. edbType = 2
  551. default:
  552. br.Msg = "暂不支持设置其他来源的指标"
  553. return
  554. }
  555. // todo 批量设置刷新状态修改
  556. edbIdList := make([]int, 0)
  557. edbCodeList := make([]string, 0)
  558. // 指标id列表
  559. if req.IsSelectAll {
  560. // 如果是列表全选
  561. _, edbList, err := data.GetEdbRelationList(req.Source, edbType, req.ClassifyId, req.SysUserId, req.Frequency, req.Keyword, req.Status, 0, 100000, "", "")
  562. if err != nil && !utils.IsErrNoRow(err) {
  563. br.Msg = "获取失败"
  564. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  565. return
  566. }
  567. // 不配置的指标id
  568. notIdMap := make(map[int]int, 0)
  569. for _, v := range req.EdbSelectIdList {
  570. notIdMap[v] = v
  571. }
  572. for _, v := range edbList {
  573. _, ok := notIdMap[v.EdbInfoId]
  574. // 在不配置的指标id列表内的话,那就过滤
  575. if ok {
  576. continue
  577. }
  578. // 加入到待配置的指标列表id
  579. edbIdList = append(edbIdList, v.EdbInfoId)
  580. }
  581. } else {
  582. edbIdList = req.EdbSelectIdList
  583. }
  584. if len(edbIdList) <= 0 {
  585. br.Msg = "指标不能为空"
  586. br.IsSendEmail = false
  587. return
  588. }
  589. //查询指标信息
  590. edbList, e := data_manage.GetEdbInfoByIdList(edbIdList)
  591. if e != nil && !utils.IsErrNoRow(e) {
  592. br.Msg = "获取失败"
  593. br.ErrMsg = "获取数据失败,Err:" + e.Error()
  594. return
  595. }
  596. // 如果是钢联化工,那么需要过滤供应商暂停的指标
  597. if req.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  598. // 获取未被供应商暂停的指标
  599. tmpEdbCodeList := make([]string, 0)
  600. for _, v := range edbList {
  601. tmpEdbCodeList = append(tmpEdbCodeList, v.EdbCode)
  602. }
  603. notIsSupplierStopIndexList, e := data_manage.GetNotIsSupplierStopIndexByCodeList(tmpEdbCodeList, 0)
  604. if e != nil {
  605. br.Msg = "获取失败"
  606. br.ErrMsg = "获取数据失败,Err:" + e.Error()
  607. return
  608. }
  609. // 未被供应商暂停的指标编码
  610. notIsSupplierStopIndexCodeList := make([]string, 0)
  611. for _, v := range notIsSupplierStopIndexList {
  612. notIsSupplierStopIndexCodeList = append(notIsSupplierStopIndexCodeList, v.IndexCode)
  613. }
  614. //查询未被供应商暂停的指标信息
  615. edbList, err = data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_MYSTEEL_CHEMICAL, notIsSupplierStopIndexCodeList)
  616. if err != nil {
  617. br.Msg = "获取失败"
  618. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  619. return
  620. }
  621. if len(edbList) <= 0 {
  622. br.Ret = 200
  623. br.Success = true
  624. br.Msg = "保存成功"
  625. return
  626. }
  627. }
  628. fromEdbIdList := make([]int, 0)
  629. for _, v := range edbList {
  630. if req.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  631. edbCodeList = append(edbCodeList, v.EdbCode)
  632. }
  633. if v.EdbInfoType == 0 {
  634. fromEdbIdList = append(fromEdbIdList, v.EdbInfoId)
  635. }
  636. }
  637. isStop := 0
  638. if req.ModifyStatus == `暂停` {
  639. isStop = 1
  640. }
  641. // 查询计算指标ID
  642. // 查询相关的计算指标
  643. calculateEdbIdList := make([]int, 0)
  644. if isStop == 1 {
  645. hasFind := make(map[int]struct{})
  646. calculateEdbIdList, err = data.GetCalculateEdbByFromEdbInfo(fromEdbIdList, calculateEdbIdList, hasFind)
  647. if err != nil {
  648. br.Msg = "查询计算指标信息失败"
  649. br.ErrMsg = "查询计算指标信息失败,Err:" + err.Error()
  650. return
  651. }
  652. }
  653. switch req.Source {
  654. case utils.DATA_SOURCE_MYSTEEL_CHEMICAL: // 钢联化工
  655. err = data_manage.ModifyMysteelChemicalUpdateStatusByEdbInfoIds(edbIdList, isStop, edbCodeList, calculateEdbIdList)
  656. default:
  657. err = data_manage.EdbInfoUpdateStatusByEdbInfoId(edbIdList, isStop, calculateEdbIdList)
  658. }
  659. if err != nil {
  660. br.Msg = `保存失败`
  661. br.ErrMsg = "保存失败,Err:" + err.Error()
  662. return
  663. }
  664. br.Ret = 200
  665. br.Success = true
  666. br.Msg = "保存成功"
  667. }
  668. // GetEdbRefreshEdbConfig
  669. // @Title 获取单个指标的刷新配置列表接口
  670. // @Description 获取单个指标的刷新配置列表接口
  671. // @Param Source query int true "来源:1:同花顺,2:wind,3:彭博"
  672. // @Param SubSource query int true "来源:0:经济数据库,1:日期序列"
  673. // @Param EdbInfoId query int false "指标id"
  674. // @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
  675. // @router /edb_info/refresh/edb_config [get]
  676. func (c *EdbInfoController) GetEdbRefreshEdbConfig() {
  677. br := new(models.BaseResponse).Init()
  678. defer func() {
  679. c.Data["json"] = br
  680. c.ServeJSON()
  681. }()
  682. source, _ := c.GetInt("Source")
  683. subSource, _ := c.GetInt("SubSource")
  684. edbInfoId, _ := c.GetInt("EdbInfoId")
  685. if source <= 0 {
  686. br.Msg = "来源不能为空"
  687. br.IsSendEmail = false
  688. return
  689. }
  690. if edbInfoId <= 0 {
  691. br.Msg = "指标不能为空"
  692. br.IsSendEmail = false
  693. return
  694. }
  695. // 获取指标的刷新配置列表
  696. list, err := edb_refresh.GetEdbRefreshConfigListBySourceAndeEdbInfoId(source, subSource, edbInfoId)
  697. if err != nil {
  698. br.Msg = "获取失败"
  699. br.ErrMsg = err.Error()
  700. return
  701. }
  702. if len(list) > 0 {
  703. br.Ret = 200
  704. br.Success = true
  705. br.Msg = "获取成功"
  706. br.Data = list
  707. return
  708. }
  709. // 如果没有找到该指标的配置,那么就查询默认配置
  710. var frequency string
  711. // 根据类型查找指标的频度信息
  712. switch source {
  713. case utils.DATA_SOURCE_MYSTEEL_CHEMICAL: // 钢联
  714. item, err := data_manage.GetBaseFromMysteelChemicalIndexByIndexId(edbInfoId)
  715. if err != nil {
  716. br.Msg = "获取指标信息失败"
  717. br.ErrMsg = err.Error()
  718. return
  719. }
  720. frequency = item.Frequency
  721. default:
  722. item, err := data_manage.GetEdbInfoById(edbInfoId)
  723. if err != nil {
  724. br.Msg = "获取指标信息失败"
  725. br.ErrMsg = err.Error()
  726. return
  727. }
  728. frequency = item.Frequency
  729. }
  730. if frequency == `` {
  731. br.Msg = "获取的指标频度信息异常"
  732. br.IsSendEmail = false
  733. return
  734. }
  735. tmpList, err := edb_refresh.GetListBySourceAndFrequency(source, subSource, frequency)
  736. if err != nil {
  737. br.Msg = "获取失败"
  738. br.ErrMsg = err.Error()
  739. return
  740. }
  741. list = make([]*edb_refresh.EdbRefreshConfigItem, 0)
  742. for _, v := range tmpList {
  743. list = append(list, &edb_refresh.EdbRefreshConfigItem{
  744. RefreshFrequency: v.RefreshFrequency,
  745. RefreshFrequencyDay: v.RefreshFrequencyDay,
  746. RefreshTime: v.RefreshTime,
  747. RefreshAllData: v.RefreshAllData,
  748. RefreshDataNum: v.RefreshDataNum,
  749. })
  750. }
  751. br.Ret = 200
  752. br.Success = true
  753. br.Msg = "获取成功"
  754. br.Data = list
  755. }