eia_steo.go 23 KB

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