eia_steo.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869
  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/system"
  7. "eta/eta_api/services/data"
  8. "eta/eta_api/services/data_stat"
  9. etaTrialService "eta/eta_api/services/eta_trial"
  10. "eta/eta_api/utils"
  11. "fmt"
  12. "os"
  13. "path/filepath"
  14. "strconv"
  15. "strings"
  16. "time"
  17. "github.com/rdlucklib/rdluck_tools/paging"
  18. "github.com/tealeg/xlsx"
  19. )
  20. // EiaSteoClassify
  21. // @Title EiaSteo数据分类
  22. // @Description EiaSteo数据分类接口
  23. // @Success 200 {object} data_manage.LzClassify
  24. // @router /eia_steo/classify [get]
  25. func (this *EdbInfoController) EiaSteoClassify() {
  26. br := new(models.BaseResponse).Init()
  27. defer func() {
  28. this.Data["json"] = br
  29. this.ServeJSON()
  30. }()
  31. sysUser := this.SysUser
  32. if sysUser == nil {
  33. br.Msg = "请登录"
  34. br.ErrMsg = "请登录,SysUser Is Empty"
  35. br.Ret = 408
  36. return
  37. }
  38. classifyList, err := data_manage.GetEiaSteoClassifyList()
  39. if err != nil {
  40. br.Msg = "获取分类失败"
  41. br.ErrMsg = "获取分类失败,Err:" + err.Error()
  42. return
  43. }
  44. childClassifyMap := make(map[int][]*data_manage.BaseFromEiaSteoClassifyView)
  45. rootList := make([]*data_manage.BaseFromEiaSteoClassifyView, 0)
  46. for _, v := range classifyList {
  47. if v.Level == 1 {
  48. rootList = append(rootList, v)
  49. } else {
  50. childClassifyMap[v.ParentId] = append(childClassifyMap[v.ParentId], v)
  51. }
  52. }
  53. for _, v := range rootList {
  54. if existItems, ok := childClassifyMap[v.BaseFromEiaSteoClassifyId]; ok {
  55. v.Child = existItems
  56. }
  57. }
  58. br.Ret = 200
  59. br.Success = true
  60. br.Msg = "获取成功"
  61. br.Data = rootList
  62. }
  63. // EiaSteoData
  64. // @Title 获取EiaSteo数据
  65. // @Description 获取EiaSteo数据接口
  66. // @Param BaseFromEiaSteoClassifyId query int true "指标分类id"
  67. // @Param IndexCode query string true "指标code"
  68. // @Param IsExport query bool false "是否导出excel,默认是false"
  69. // @Param PageSize query int true "每页数据条数"
  70. // @Param CurrentIndex query int true "当前页页码,从1开始"
  71. // @Success 200 {object} data_manage.LzFrequency
  72. // @router /eia_steo/data [get]
  73. func (this *EdbInfoController) EiaSteoData() {
  74. br := new(models.BaseResponse).Init()
  75. defer func() {
  76. this.Data["json"] = br
  77. this.ServeJSON()
  78. }()
  79. sysUser := this.SysUser
  80. if sysUser == nil {
  81. br.Msg = "请登录"
  82. br.ErrMsg = "请登录,SysUser Is Empty"
  83. br.Ret = 408
  84. return
  85. }
  86. pageSize, _ := this.GetInt("PageSize")
  87. currentIndex, _ := this.GetInt("CurrentIndex")
  88. var startSize int
  89. //是否导出报表
  90. isExport, _ := this.GetBool("IsExport")
  91. if isExport {
  92. pageSize = 10000
  93. currentIndex = 1
  94. }
  95. if pageSize <= 0 {
  96. pageSize = utils.PageSize20
  97. }
  98. if currentIndex <= 0 {
  99. currentIndex = 1
  100. }
  101. startSize = utils.StartIndex(currentIndex, pageSize)
  102. var condition string
  103. var pars []interface{}
  104. indexCode := this.GetString("IndexCode")
  105. if indexCode != "" {
  106. condition += ` AND index_code = ? `
  107. pars = append(pars, utils.TrimStr(indexCode))
  108. }
  109. classifyId, _ := this.GetInt("BaseFromEiaSteoClassifyId")
  110. if classifyId > 0 {
  111. classifyList, err := data.GetClassifyALLById(classifyId)
  112. if err != nil {
  113. br.Msg = "获取数据失败"
  114. br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
  115. return
  116. }
  117. var classifyIds []int
  118. for _, v := range classifyList {
  119. classifyIds = append(classifyIds, v.BaseFromEiaSteoClassifyId)
  120. }
  121. condition += ` AND base_from_eia_steo_classify_id IN (` + utils.GetOrmInReplace(len(classifyIds)) + `) `
  122. pars = append(pars, classifyIds)
  123. }
  124. //获取指标
  125. indexList, err := data_manage.GetEiaSteoIndexList(condition, pars)
  126. if err != nil {
  127. br.Msg = "获取数据失败"
  128. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  129. return
  130. }
  131. resultList := make([]data_manage.EiaSteoIndexListResp, 0)
  132. for _, v := range indexList {
  133. indexName := v.IndexName
  134. if indexName == `` {
  135. indexName = v.IndexNameOriginal
  136. }
  137. product := data_manage.EiaSteoIndexListResp{
  138. BaseFromEiaSteoIndexId: v.BaseFromEiaSteoIndexId,
  139. BaseFromEiaSteoClassifyId: v.BaseFromEiaSteoClassifyId,
  140. IndexCode: v.IndexCode,
  141. IndexName: indexName,
  142. //IndexNameOriginal: v.IndexNameOriginal,
  143. Unit: v.Unit,
  144. Frequency: v.Frequency,
  145. StartDate: v.StartDate.Format(utils.FormatDate),
  146. EndDate: v.EndDate.Format(utils.FormatDate),
  147. ModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
  148. CreateTime: v.CreateTime.Format(utils.FormatDateTime),
  149. //Paging: tmpPaging,
  150. //DataList: nil,
  151. }
  152. total, err := data_manage.GetEiaSteoIndexDataCount(v.IndexCode)
  153. page := paging.GetPaging(currentIndex, pageSize, total)
  154. dataList, err := data_manage.GetEiaSteoIndexDataList(v.IndexCode, startSize, pageSize)
  155. if err != nil {
  156. br.Msg = "获取数据失败"
  157. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  158. return
  159. }
  160. if dataList == nil {
  161. dataList = make([]*data_manage.BaseFromEiaSteoDataItem, 0)
  162. }
  163. product.DataList = dataList
  164. product.Paging = page
  165. resultList = append(resultList, product)
  166. }
  167. //导出excel
  168. if isExport {
  169. EiaSteoDataExport(this, resultList, br)
  170. return
  171. }
  172. br.Ret = 200
  173. br.Success = true
  174. br.Msg = "获取成功"
  175. br.Data = resultList
  176. }
  177. // EiaSteoSearchList
  178. // @Title EiaSteo模糊搜索
  179. // @Description EiaSteo模糊搜索
  180. // @Param Keyword query string ture "关键字搜索"
  181. // @Success 200 {object} models.BaseResponse
  182. // @router /eia_steo/search_list [get]
  183. func (this *EdbInfoController) EiaSteoSearchList() {
  184. br := new(models.BaseResponse).Init()
  185. defer func() {
  186. this.Data["json"] = br
  187. this.ServeJSON()
  188. }()
  189. sysUser := this.SysUser
  190. if sysUser == nil {
  191. br.Msg = "请重新登录"
  192. return
  193. }
  194. //关键字
  195. keyword := this.GetString("Keyword")
  196. list, err := data_manage.GetEiaSteoItemList(utils.TrimStr(keyword))
  197. if err != nil {
  198. br.ErrMsg = "获取失败,Err:" + err.Error()
  199. br.Msg = "获取失败"
  200. return
  201. }
  202. br.Ret = 200
  203. br.Success = true
  204. br.Msg = "获取成功"
  205. br.Data = list
  206. }
  207. // EiaSteoDataExport 表格导出
  208. func EiaSteoDataExport(this *EdbInfoController, list []data_manage.EiaSteoIndexListResp, br *models.BaseResponse) {
  209. sysUser := this.SysUser
  210. if sysUser == nil {
  211. br.Msg = "请重新登录"
  212. return
  213. }
  214. dir, _ := os.Executable()
  215. exPath := filepath.Dir(dir)
  216. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  217. xlsxFile := xlsx.NewFile()
  218. sheet, err := xlsxFile.AddSheet("数据报表")
  219. //获取指标数据
  220. rowSecName := sheet.AddRow()
  221. celSecName := rowSecName.AddCell()
  222. celSecName.SetValue("指标名称")
  223. rowUnit := sheet.AddRow()
  224. celUnit := rowUnit.AddCell()
  225. celUnit.SetValue("单位")
  226. rowModifyDate := sheet.AddRow()
  227. rowModifyCell := rowModifyDate.AddCell()
  228. rowModifyCell.SetValue("更新时间")
  229. dataMap := make(map[string]map[string]*data_manage.BaseFromEiaSteoDataItem)
  230. var indexCodeList []string
  231. for _, v := range list {
  232. cellSenName := rowSecName.AddCell()
  233. cellSenName.SetValue(v.IndexName)
  234. celUnit := rowUnit.AddCell()
  235. celUnit.SetValue(v.Unit)
  236. rowModifyCell := rowModifyDate.AddCell()
  237. rowModifyCell.SetValue(v.ModifyTime)
  238. indexCodeList = append(indexCodeList, v.IndexCode)
  239. dataMap[v.IndexCode] = make(map[string]*data_manage.BaseFromEiaSteoDataItem)
  240. for _, item := range v.DataList {
  241. dataMap[item.IndexCode][item.DataTime] = item
  242. }
  243. }
  244. dateList, err := data_manage.GetEiaSteoDateList(indexCodeList)
  245. if err != nil {
  246. br.Msg = "获取数据失败"
  247. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  248. return
  249. }
  250. for _, n := range dateList {
  251. dateStr := n.DataTime //当前日期
  252. rowData := sheet.AddRow()
  253. celDate := rowData.AddCell()
  254. celDate.SetValue(dateStr)
  255. for _, m := range list {
  256. celData := rowData.AddCell()
  257. if dataMap[m.IndexCode][dateStr] != nil {
  258. celData.SetValue(dataMap[m.IndexCode][dateStr].Value)
  259. }
  260. }
  261. }
  262. err = xlsxFile.Save(downLoadnFilePath)
  263. if err != nil {
  264. //有指标无数据时先导出一遍空表
  265. sheet, err := xlsxFile.AddSheet("无数据")
  266. if err != nil {
  267. br.Msg = "新增Sheet失败"
  268. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  269. return
  270. }
  271. rowSecName := sheet.AddRow()
  272. celSecName := rowSecName.AddCell()
  273. celSecName.SetValue("")
  274. err = xlsxFile.Save(downLoadnFilePath)
  275. if err != nil {
  276. br.Msg = "保存文件失败"
  277. br.ErrMsg = "保存文件失败"
  278. return
  279. }
  280. }
  281. fileName := `EiaSteo数据`
  282. fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称
  283. this.Ctx.Output.Download(downLoadnFilePath, fileName)
  284. defer func() {
  285. os.Remove(downLoadnFilePath)
  286. }()
  287. br.Ret = 200
  288. br.Success = true
  289. br.Msg = "success"
  290. }
  291. // EiaSteoBatchSearch
  292. // @Title EiaSteo批量操作查询接口
  293. // @Description EiaSteo批量操作查询接口
  294. // @Param BaseFromEiaSteoClassifyIds query string true "分类id"
  295. // @Param Keyword query string true "名称关键词"
  296. // @Success 200 {object} data_manage.LzFrequency
  297. // @router /eia_steo/batch_search [get]
  298. func (this *EdbInfoController) EiaSteoBatchSearch() {
  299. br := new(models.BaseResponse).Init()
  300. defer func() {
  301. this.Data["json"] = br
  302. this.ServeJSON()
  303. }()
  304. sysUser := this.SysUser
  305. if sysUser == nil {
  306. br.Msg = "请登录"
  307. br.ErrMsg = "请登录,SysUser Is Empty"
  308. br.Ret = 408
  309. return
  310. }
  311. classifyIdStr := this.GetString("BaseFromEiaSteoClassifyIds")
  312. var condition string
  313. var pars []interface{}
  314. classifyIds := strings.Split(classifyIdStr, ",")
  315. if len(classifyIds) > 0 && classifyIds[0] != `` {
  316. condition += " AND base_from_eia_steo_classify_id IN (" + utils.GetOrmInReplace(len(classifyIds)) + " ) "
  317. pars = append(pars, classifyIds)
  318. }
  319. keyword := this.GetString("Keyword")
  320. if keyword != `` {
  321. condition += " AND (index_name like ? OR index_code like ?) "
  322. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  323. }
  324. if classifyIdStr == `` && keyword == `` {
  325. var list = make([]*data_manage.BaseFromEiaSteoIndex, 0)
  326. br.Ret = 200
  327. br.Success = true
  328. br.Msg = "获取成功"
  329. br.Data = list
  330. return
  331. }
  332. list, err := data_manage.GetEiaSteoIndexList(condition, pars)
  333. if err != nil {
  334. br.Msg = "获取失败"
  335. br.ErrMsg = "获取失败,Err:" + err.Error()
  336. return
  337. }
  338. br.Ret = 200
  339. br.Success = true
  340. br.Msg = "获取成功"
  341. br.Data = list
  342. }
  343. // AddCheck
  344. // @Title 新增校验
  345. // @Description 新增校验
  346. // @Param request body request.BusinessDataBatchAddCheckReq true "type json string"
  347. // @Success 200 string "操作成功"
  348. // @router /eia_steo/edb_info/add_check [post]
  349. func (c *EdbInfoController) EiaSteoAddCheck() {
  350. br := new(models.BaseResponse).Init()
  351. defer func() {
  352. if br.ErrMsg == "" {
  353. br.IsSendEmail = false
  354. }
  355. c.Data["json"] = br
  356. c.ServeJSON()
  357. }()
  358. sysUser := c.SysUser
  359. if sysUser == nil {
  360. br.Msg = "请登录"
  361. br.ErrMsg = "请登录,SysUser Is Empty"
  362. br.Ret = 408
  363. return
  364. }
  365. var req data_manage.EiaSteoDataBatchAddCheckReq
  366. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  367. br.Msg = "参数解析异常!"
  368. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  369. return
  370. }
  371. codeMax := 30
  372. codeLen := len(req.IndexCodes)
  373. if codeLen == 0 {
  374. br.Msg = "请选择指标"
  375. return
  376. }
  377. if codeLen > codeMax {
  378. br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
  379. return
  380. }
  381. // 获取指标库已有指标
  382. existsEdb, e := data_manage.GetEdbCodesBySource(utils.DATA_SOURCE_EIA_STEO)
  383. if e != nil {
  384. br.Msg = "获取失败"
  385. br.ErrMsg = "获取自有数据已添加的指标失败, Err: " + e.Error()
  386. return
  387. }
  388. existMap := make(map[string]*data_manage.EdbInfo)
  389. for _, v := range existsEdb {
  390. existMap[v.EdbCode] = v
  391. }
  392. // 查询选中的指标
  393. cond := fmt.Sprintf(` AND index_code IN (%s) `, utils.GetOrmInReplace(len(req.IndexCodes)))
  394. pars := make([]interface{}, 0)
  395. pars = append(pars, req.IndexCodes)
  396. list, err := data_manage.GetEiaSteoIndexList(cond, pars)
  397. if err != nil {
  398. br.Msg = "获取失败"
  399. br.ErrMsg = "获取eiaSteo原始指标列表失败, Err: " + err.Error()
  400. return
  401. }
  402. resp := make([]*data_manage.BaseFromEiaSteoIndexItem, 0)
  403. for _, v := range list {
  404. if edbInfo, ok := existMap[v.IndexCode]; ok {
  405. resp = append(resp, &data_manage.BaseFromEiaSteoIndexItem{
  406. BaseFromEiaSteoIndexId: v.BaseFromEiaSteoIndexId,
  407. BaseFromEiaSteoClassifyId: v.BaseFromEiaSteoClassifyId,
  408. IndexCode: v.IndexCode,
  409. IndexName: v.IndexName,
  410. EdbInfoId: edbInfo.EdbInfoId,
  411. EdbUniqueCode: edbInfo.UniqueCode,
  412. EdbClassifyId: edbInfo.ClassifyId,
  413. EdbExist: 1,
  414. })
  415. } else {
  416. resp = append(resp, &data_manage.BaseFromEiaSteoIndexItem{
  417. BaseFromEiaSteoIndexId: v.BaseFromEiaSteoIndexId,
  418. BaseFromEiaSteoClassifyId: v.BaseFromEiaSteoClassifyId,
  419. IndexCode: v.IndexCode,
  420. IndexName: v.IndexName,
  421. EdbInfoId: 0,
  422. EdbUniqueCode: "",
  423. EdbClassifyId: 0,
  424. EdbExist: 0,
  425. })
  426. }
  427. }
  428. br.Data = resp
  429. br.Msg = "校验成功"
  430. br.Ret = 200
  431. br.Success = true
  432. }
  433. // EiaSteoNameCheck
  434. // @Title 重名校验
  435. // @Description 批量新增
  436. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  437. // @Success 200 string "操作成功"
  438. // @router /eia_steo/name_check [post]
  439. func (c *EdbInfoController) EiaSteoNameCheck() {
  440. br := new(models.BaseResponse).Init()
  441. defer func() {
  442. if br.ErrMsg == "" {
  443. br.IsSendEmail = false
  444. }
  445. c.Data["json"] = br
  446. c.ServeJSON()
  447. }()
  448. sysUser := c.SysUser
  449. if sysUser == nil {
  450. br.Msg = "请登录"
  451. br.ErrMsg = "请登录,SysUser Is Empty"
  452. br.Ret = 408
  453. return
  454. }
  455. var req []*data_manage.NameCheckEdbInfoReq
  456. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  457. br.Msg = "参数解析异常!"
  458. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  459. return
  460. }
  461. if len(req) == 0 {
  462. br.Msg = "请选择指标"
  463. return
  464. }
  465. codeMax := 30
  466. codeLen := len(req)
  467. if codeLen > codeMax {
  468. br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
  469. return
  470. }
  471. type NameCheckResult struct {
  472. EdbCode string
  473. EdbName string
  474. Exist bool
  475. }
  476. indexNames := make([]string, 0)
  477. resp := make([]*NameCheckResult, 0)
  478. for _, v := range req {
  479. v.EdbCode = strings.TrimSpace(v.EdbCode)
  480. if v.EdbCode == "" {
  481. br.Msg = "指标ID不可为空"
  482. return
  483. }
  484. v.EdbName = strings.TrimSpace(v.EdbName)
  485. if v.EdbName == "" {
  486. br.Msg = "请输入指标名称"
  487. return
  488. }
  489. indexNames = append(indexNames, v.EdbName)
  490. resp = append(resp, &NameCheckResult{
  491. EdbCode: v.EdbCode,
  492. EdbName: v.EdbName,
  493. })
  494. dataItems, err := data_manage.GetEdbDataAllByEdbCode(v.EdbCode, utils.DATA_SOURCE_EIA_STEO, 0, utils.EDB_DATA_LIMIT)
  495. if err != nil && err.Error() != utils.ErrNoRow() {
  496. br.Msg = "获取失败"
  497. br.ErrMsg = "获取钢联已存在信息失败,Err:" + err.Error()
  498. return
  499. }
  500. if len(dataItems) <= 0 {
  501. respItem, err := data.AddEdbData(utils.DATA_SOURCE_EIA_STEO, v.EdbCode, v.Frequency)
  502. if err != nil {
  503. br.Msg = "获取失败"
  504. br.ErrMsg = "获取失败,Err:" + err.Error()
  505. return
  506. }
  507. if respItem.Ret != 200 {
  508. br.Msg = "未搜索到该指标"
  509. br.ErrMsg = respItem.ErrMsg + ";EdbCode:" + v.EdbCode
  510. return
  511. }
  512. }
  513. }
  514. // 重名校验
  515. edbList, e := data_manage.GetEdbInfoByNameArr(indexNames, utils.EDB_INFO_TYPE)
  516. if e != nil {
  517. br.Msg = "操作失败"
  518. br.ErrMsg = "获取重名指标失败, Err: " + e.Error()
  519. return
  520. }
  521. nameExists := make(map[string]bool)
  522. for _, v := range edbList {
  523. nameExists[v.EdbName] = true
  524. }
  525. if len(nameExists) > 0 {
  526. for _, v := range resp {
  527. v.Exist = nameExists[v.EdbName]
  528. }
  529. }
  530. br.Data = resp
  531. br.Msg = "校验成功"
  532. br.Ret = 200
  533. br.Success = true
  534. }
  535. // EiaSteoBatchAdd
  536. // @Title eiaSteo批量新增
  537. // @Description eiaSteo批量新增
  538. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  539. // @Success 200 string "操作成功"
  540. // @router /eia_steo/batch_add [post]
  541. func (this *EdbInfoController) EiaSteoBatchAdd() {
  542. br := new(models.BaseResponse).Init()
  543. defer func() {
  544. if br.ErrMsg == "" {
  545. br.IsSendEmail = false
  546. }
  547. this.Data["json"] = br
  548. this.ServeJSON()
  549. }()
  550. sysUser := this.SysUser
  551. if sysUser == nil {
  552. br.Msg = "请登录"
  553. br.ErrMsg = "请登录,SysUser Is Empty"
  554. br.Ret = 408
  555. return
  556. }
  557. deleteCache := true
  558. cacheKey := "CACHE_EDB_INFO_BATCH_ADD_EIA_STEO_" + strconv.Itoa(sysUser.AdminId)
  559. defer func() {
  560. if deleteCache {
  561. _ = utils.Rc.Delete(cacheKey)
  562. }
  563. }()
  564. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  565. deleteCache = false
  566. br.Msg = "系统处理中,请稍后重试!"
  567. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  568. return
  569. }
  570. var req []*data_manage.AddEdbInfoReq
  571. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  572. br.Msg = "参数解析异常!"
  573. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  574. return
  575. }
  576. if len(req) == 0 {
  577. br.Msg = "请选择指标"
  578. return
  579. }
  580. if len(req) > 30 {
  581. br.Msg = "批量添加指标数量不得超过30个"
  582. return
  583. }
  584. for _, v := range req {
  585. v.EdbCode = strings.TrimSpace(v.EdbCode)
  586. if v.EdbCode == "" {
  587. br.Msg = "指标ID不可为空"
  588. return
  589. }
  590. v.EdbName = strings.TrimSpace(v.EdbName)
  591. if v.EdbName == "" {
  592. br.Msg = "请输入指标名称"
  593. return
  594. }
  595. v.Frequency = strings.TrimSpace(v.Frequency)
  596. if v.Frequency == "" {
  597. br.Msg = "请选择频度"
  598. return
  599. }
  600. v.Unit = strings.TrimSpace(v.Unit)
  601. if v.Unit == "" {
  602. br.Msg = "请输入单位"
  603. return
  604. }
  605. if v.ClassifyId <= 0 {
  606. br.Msg = "请选择分类"
  607. return
  608. }
  609. }
  610. // 限定同一时间最多批量新增30个指标
  611. for _, v := range req {
  612. var r data.EiaSteoIndexSource2EdbReq
  613. r.EdbCode = v.EdbCode
  614. r.EdbName = v.EdbName
  615. r.Frequency = v.Frequency
  616. r.Unit = v.Unit
  617. r.ClassifyId = v.ClassifyId
  618. r.AdminId = sysUser.AdminId
  619. r.AdminRealName = sysUser.RealName
  620. edbInfo, e, errMsg, skip := data.EiaSteoIndexSource2Edb(r, this.Lang)
  621. if e != nil {
  622. br.Msg = "操作失败"
  623. if errMsg != "" {
  624. br.Msg = errMsg
  625. }
  626. br.ErrMsg = e.Error()
  627. return
  628. }
  629. if skip {
  630. continue
  631. }
  632. // 试用平台更新用户累计新增指标数
  633. if utils.BusinessCode == utils.BusinessCodeSandbox {
  634. go func() {
  635. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  636. if e != nil {
  637. tips := fmt.Sprintf("试用平台更新用户累计新增指标数-获取用户失败, Err: " + e.Error())
  638. utils.FileLog.Info(tips)
  639. return
  640. }
  641. if adminItem.DepartmentName != "ETA试用客户" {
  642. return
  643. }
  644. var ur etaTrialService.EtaTrialUserReq
  645. ur.Mobile = adminItem.Mobile
  646. _, _ = etaTrialService.UpdateUserIndexNum(ur)
  647. }()
  648. }
  649. // 新增操作日志
  650. {
  651. edbLog := new(data_manage.EdbInfoLog)
  652. edbLog.EdbInfoId = edbInfo.EdbInfoId
  653. edbLog.SourceName = edbInfo.SourceName
  654. edbLog.Source = edbInfo.Source
  655. edbLog.EdbCode = edbInfo.EdbCode
  656. edbLog.EdbName = edbInfo.EdbName
  657. edbLog.ClassifyId = edbInfo.ClassifyId
  658. edbLog.SysUserId = sysUser.AdminId
  659. edbLog.SysUserRealName = sysUser.RealName
  660. edbLog.CreateTime = time.Now()
  661. edbLog.Content = string(this.Ctx.Input.RequestBody)
  662. edbLog.Status = "新增指标"
  663. edbLog.Method = this.Ctx.Input.URI()
  664. go data_manage.AddEdbInfoLog(edbLog)
  665. }
  666. }
  667. br.Msg = "操作成功"
  668. br.Ret = 200
  669. br.Success = true
  670. br.IsAddLog = true
  671. }
  672. // EiaSteoAdd
  673. // @Title 新增eiaSteo指标接口
  674. // @Description 新增eiaSteo指标接口
  675. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  676. // @Success Ret=200 保存成功
  677. // @router /eia_steo/edb_info/add [post]
  678. func (this *EdbInfoController) EiaSteoAdd() {
  679. br := new(models.BaseResponse).Init()
  680. defer func() {
  681. this.Data["json"] = br
  682. this.ServeJSON()
  683. }()
  684. sysUser := this.SysUser
  685. if sysUser == nil {
  686. br.Msg = "请登录"
  687. br.ErrMsg = "请登录,SysUser Is Empty"
  688. br.Ret = 408
  689. return
  690. }
  691. deleteCache := true
  692. cacheKey := "CACHE_EDB_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  693. defer func() {
  694. if deleteCache {
  695. utils.Rc.Delete(cacheKey)
  696. }
  697. }()
  698. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  699. deleteCache = false
  700. br.Msg = "系统处理中,请稍后重试!"
  701. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  702. return
  703. }
  704. var req data_manage.AddEdbInfoReq
  705. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  706. if err != nil {
  707. br.Msg = "参数解析异常!"
  708. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  709. return
  710. }
  711. req.EdbName = strings.Trim(req.EdbName, " ")
  712. req.EdbCode = strings.Trim(req.EdbCode, " ")
  713. if req.EdbCode == "" {
  714. br.Msg = "指标ID不能为空"
  715. return
  716. }
  717. if req.EdbName == "" {
  718. br.Msg = "指标名称不能为空"
  719. return
  720. }
  721. if req.Frequency == "" {
  722. br.Msg = "频率不能为空"
  723. return
  724. }
  725. if req.Unit == "" {
  726. br.Msg = "单位不能为空"
  727. return
  728. }
  729. if req.ClassifyId <= 0 {
  730. br.Msg = "请选择分类"
  731. return
  732. }
  733. tmpInfo, err := data_manage.GetBaseFromEiaSteoIndexByCode(req.EdbCode)
  734. if err != nil {
  735. if err.Error() != utils.ErrNoRow() {
  736. br.Msg = "获取失败"
  737. br.ErrMsg = "获取失败,Err:" + err.Error()
  738. return
  739. }
  740. }
  741. var source int
  742. if tmpInfo != nil {
  743. source = utils.DATA_SOURCE_EIA_STEO
  744. } else {
  745. br.Msg = "指标不存在"
  746. return
  747. }
  748. // 指标入库
  749. edbInfo, err, errMsg, isSendEmail := data.EdbInfoAdd(source, utils.DATA_SUB_SOURCE_EDB, req.ClassifyId, req.EdbCode, req.EdbName, req.Frequency, req.Unit, req.StartDate, req.EndDate, sysUser.AdminId, sysUser.RealName, this.Lang)
  750. if err != nil {
  751. br.Msg = "保存失败"
  752. if errMsg != `` {
  753. br.Msg = errMsg
  754. }
  755. br.ErrMsg = err.Error()
  756. br.IsSendEmail = isSendEmail
  757. return
  758. }
  759. // 试用平台更新用户累计新增指标数
  760. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  761. if e != nil {
  762. br.Msg = "操作失败"
  763. br.ErrMsg = "获取系统用户数据失败,Err:" + e.Error()
  764. return
  765. }
  766. if utils.BusinessCode == utils.BusinessCodeSandbox && adminItem.DepartmentName == "ETA试用客户" {
  767. go func() {
  768. var r etaTrialService.EtaTrialUserReq
  769. r.Mobile = adminItem.Mobile
  770. _, _ = etaTrialService.UpdateUserIndexNum(r)
  771. }()
  772. }
  773. //新增操作日志
  774. {
  775. // 添加钢联指标更新日志
  776. if edbInfo.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  777. go data_stat.AddEdbInfoUpdateLog(edbInfo.EdbInfoId, 1, "", sysUser, 2)
  778. }
  779. edbLog := new(data_manage.EdbInfoLog)
  780. edbLog.EdbInfoId = edbInfo.EdbInfoId
  781. edbLog.SourceName = edbInfo.SourceName
  782. edbLog.Source = edbInfo.Source
  783. edbLog.EdbCode = edbInfo.EdbCode
  784. edbLog.EdbName = edbInfo.EdbName
  785. edbLog.ClassifyId = edbInfo.ClassifyId
  786. edbLog.SysUserId = sysUser.AdminId
  787. edbLog.SysUserRealName = sysUser.RealName
  788. edbLog.CreateTime = time.Now()
  789. edbLog.Content = string(this.Ctx.Input.RequestBody)
  790. edbLog.Status = "新增指标"
  791. edbLog.Method = this.Ctx.Input.URI()
  792. go data_manage.AddEdbInfoLog(edbLog)
  793. }
  794. // 更新es
  795. go data.AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
  796. resp := new(data_manage.AddEdbInfoResp)
  797. resp.EdbInfoId = edbInfo.EdbInfoId
  798. resp.UniqueCode = edbInfo.UniqueCode
  799. resp.ClassifyId = edbInfo.ClassifyId
  800. br.Ret = 200
  801. br.Success = true
  802. br.Msg = "保存成功"
  803. br.Data = resp
  804. br.IsAddLog = true
  805. }