eia_steo.go 23 KB

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