edb_info_refresh.go 24 KB

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