gpr_risk_data.go 28 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/data_manage"
  7. "eta/eta_api/models/system"
  8. "eta/eta_api/services/data"
  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. type BaseFromGprRiskController struct {
  21. controllers.BaseAuthController
  22. }
  23. // GprRiskClassify
  24. // @Title GPR地缘风险指数数据分类
  25. // @Description GPR地缘风险指数数据分类接口
  26. // @Success 200 {object} data_manage.BaseFromGprRiskClassify
  27. // @router /gpr_risk/classify [get]
  28. func (this *BaseFromGprRiskController) GprRiskClassify() {
  29. br := new(models.BaseResponse).Init()
  30. defer func() {
  31. this.Data["json"] = br
  32. this.ServeJSON()
  33. }()
  34. sysUser := this.SysUser
  35. if sysUser == nil {
  36. br.Msg = "请登录"
  37. br.ErrMsg = "请登录,SysUser Is Empty"
  38. br.Ret = 408
  39. return
  40. }
  41. classifyAll, err := data_manage.GetAllBaseFromGprRiskClassify()
  42. if err != nil && !utils.IsErrNoRow(err) {
  43. br.Msg = "获取失败"
  44. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  45. return
  46. }
  47. //组装一级分类
  48. rootMap := make(map[int][]*data_manage.BaseFromGprRiskClassifyItems)
  49. list := make([]*data_manage.BaseFromGprRiskClassifyItems, 0)
  50. for _, classify := range classifyAll {
  51. classify.UniqueCode = strconv.Itoa(classify.ClassifyId)
  52. if classify.ParentId == 0 {
  53. if _, ok := rootMap[classify.ClassifyId]; !ok {
  54. rootMap[classify.ClassifyId] = make([]*data_manage.BaseFromGprRiskClassifyItems, 0)
  55. list = append(list, classify)
  56. }
  57. } else {
  58. child, ok := rootMap[classify.ParentId]
  59. if ok {
  60. child = append(child, classify)
  61. rootMap[classify.ParentId] = child
  62. }
  63. }
  64. }
  65. for k, v := range list {
  66. child, ok := rootMap[v.ClassifyId]
  67. if ok {
  68. list[k].Children = child
  69. }
  70. }
  71. //组装二级分类
  72. var ret data_manage.BaseFromGprRiskClassifyResp
  73. ret.List = list
  74. br.Ret = 200
  75. br.Success = true
  76. br.Msg = "获取成功"
  77. br.Data = ret
  78. }
  79. // GprRiskIndexData
  80. // @Title 获取GPR地缘风险指数数据
  81. // @Description 获取GPR地缘风险指数数据接口
  82. // @Param PageSize query int true "每页数据条数"
  83. // @Param CurrentIndex query int true "当前页页码,从1开始"
  84. // @Param ClassifyId query string true "分类id"
  85. // @Success 200 {object} data_manage.LzFrequency
  86. // @router /gpr_risk/index/data [get]
  87. func (this *BaseFromGprRiskController) GprRiskIndexData() {
  88. br := new(models.BaseResponse).Init()
  89. defer func() {
  90. this.Data["json"] = br
  91. this.ServeJSON()
  92. }()
  93. sysUser := this.SysUser
  94. if sysUser == nil {
  95. br.Msg = "请登录"
  96. br.ErrMsg = "请登录,SysUser Is Empty"
  97. br.Ret = 408
  98. return
  99. }
  100. pageSize, _ := this.GetInt("PageSize")
  101. currentIndex, _ := this.GetInt("CurrentIndex")
  102. var startSize int
  103. if pageSize <= 0 {
  104. pageSize = utils.PageSize20
  105. }
  106. if currentIndex <= 0 {
  107. currentIndex = 1
  108. }
  109. startSize = utils.StartIndex(currentIndex, pageSize)
  110. classifyId, _ := this.GetInt("ClassifyId")
  111. if classifyId < 0 {
  112. br.Msg = "请选择分类"
  113. br.ErrMsg = "请选择分类"
  114. return
  115. }
  116. // 增加频度请求入参
  117. frequency := this.GetString("Frequency")
  118. //获取指标
  119. var condition string
  120. var pars []interface{}
  121. if classifyId > 0 {
  122. condition += ` AND classify_id=? `
  123. pars = append(pars, classifyId)
  124. }
  125. if frequency != "" {
  126. condition += ` AND frequency=? `
  127. pars = append(pars, frequency)
  128. }
  129. GprRiskList, err := data_manage.GetGprRiskIndex(condition, pars)
  130. if err != nil {
  131. br.Msg = "获取数据失败"
  132. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  133. return
  134. }
  135. edbCodeList := make([]string, 0)
  136. for _, v := range GprRiskList {
  137. edbCodeList = append(edbCodeList, v.IndexCode)
  138. }
  139. edbInfoMap := make(map[string]*data_manage.EdbInfo)
  140. dataMap := make(map[string][]*data_manage.BaseFromGprRiskData)
  141. total := 0
  142. if len(edbCodeList) > 0 {
  143. edbInfoList, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_GPR_RISK, edbCodeList)
  144. if err != nil {
  145. br.Msg = "获取数据源失败"
  146. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  147. return
  148. }
  149. for _, v := range edbInfoList {
  150. edbInfoMap[v.EdbCode] = v
  151. }
  152. // 首先对分类下的指标按照日期进行分页,再针对日期,进行排序
  153. dataTimes, err := data_manage.GetGprRiskIndexDataTimePageByCodes(edbCodeList, startSize, pageSize)
  154. if err != nil {
  155. br.Msg = "获取数据失败"
  156. br.ErrMsg = "获取指标数据日期信息失败,Err:" + err.Error()
  157. return
  158. }
  159. if len(dataTimes) > 0 {
  160. startDate := utils.GormDateStrToDateStr(dataTimes[len(dataTimes)-1])
  161. endDate := utils.GormDateStrToDateStr(dataTimes[0])
  162. // 把截止日往后加1天
  163. endDateT, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  164. endDate = endDateT.AddDate(0, 0, 1).Format(utils.FormatDate)
  165. dataList, e := data_manage.GetGprRiskIndexDataByDataTime(edbCodeList, startDate, endDate)
  166. if e != nil {
  167. br.Msg = "获取数据失败"
  168. br.ErrMsg = "获取指标数据失败,Err:" + e.Error()
  169. return
  170. }
  171. //将数据按照指标进行分类
  172. for _, v := range dataList {
  173. dataMap[v.IndexCode] = append(dataMap[v.IndexCode], v)
  174. }
  175. }
  176. total, err = data_manage.GetGprRiskIndexDataTimePageCount(edbCodeList)
  177. if err != nil {
  178. br.Msg = "获取数据失败"
  179. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  180. return
  181. }
  182. }
  183. page := paging.GetPaging(currentIndex, pageSize, total)
  184. resultList := make([]*data_manage.BaseFromGprRiskIndexList, 0)
  185. for _, v := range GprRiskList {
  186. product := new(data_manage.BaseFromGprRiskIndexList)
  187. product.BaseFromGprRiskIndexId = v.BaseFromGprRiskIndexId
  188. product.Unit = v.Unit
  189. product.IndexCode = v.IndexCode
  190. product.IndexName = v.IndexName
  191. product.Frequency = v.Frequency
  192. product.ModifyTime = v.ModifyTime
  193. product.ClassifyId = v.ClassifyId
  194. if edb, ok := edbInfoMap[v.IndexCode]; ok {
  195. product.EdbInfoId = edb.EdbInfoId
  196. product.EdbExist = 1
  197. }
  198. dataListTmp, ok := dataMap[v.IndexCode]
  199. if !ok {
  200. dataListTmp = make([]*data_manage.BaseFromGprRiskData, 0)
  201. }
  202. product.DataList = dataListTmp
  203. product.Paging = page
  204. resultList = append(resultList, product)
  205. }
  206. br.Ret = 200
  207. br.Success = true
  208. br.Msg = "获取成功"
  209. br.Data = resultList
  210. }
  211. // GprRiskSearchList
  212. // @Title GprRisk模糊搜索
  213. // @Description GprRisk模糊搜索
  214. // @Param Keyword query string ture "关键字搜索"
  215. // @Success 200 {object} models.BaseResponse
  216. // @router /gpr_risk/search_list [get]
  217. func (this *BaseFromGprRiskController) GprRiskSearchList() {
  218. br := new(models.BaseResponse).Init()
  219. defer func() {
  220. this.Data["json"] = br
  221. this.ServeJSON()
  222. }()
  223. sysUser := this.SysUser
  224. if sysUser == nil {
  225. br.Msg = "请重新登录"
  226. return
  227. }
  228. list := make([]*data_manage.BaseFromGprRiskIndexSearchItem, 0)
  229. var err error
  230. //关键字
  231. keyword := this.GetString("Keyword")
  232. if keyword != "" {
  233. keyWordArr := strings.Split(keyword, " ")
  234. if len(keyWordArr) > 0 {
  235. var condition string
  236. var pars []interface{}
  237. for _, v := range keyWordArr {
  238. likeKey := `%` + v + `%`
  239. condition += ` AND CONCAT(index_name,index_code) LIKE ? `
  240. pars = append(pars, likeKey)
  241. }
  242. list, err = data_manage.GetGprRiskItemList(condition, pars)
  243. if err != nil {
  244. br.ErrMsg = "获取失败,Err:" + err.Error()
  245. br.Msg = "获取失败"
  246. return
  247. }
  248. }
  249. } else {
  250. var condition string
  251. var pars []interface{}
  252. list, err = data_manage.GetGprRiskItemList(condition, pars)
  253. if err != nil {
  254. br.ErrMsg = "获取失败,Err:" + err.Error()
  255. br.Msg = "获取失败"
  256. return
  257. }
  258. }
  259. classifyIds := make([]int, 0)
  260. for _, v := range list {
  261. classifyIds = append(classifyIds, v.ClassifyId)
  262. }
  263. classifyList, err := data_manage.GetBaseFromGprRiskClassifyByIds(classifyIds)
  264. if err != nil {
  265. br.Msg = "搜索失败"
  266. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  267. return
  268. }
  269. classifyMap := make(map[int]int)
  270. for _, v := range classifyList {
  271. classifyMap[v.ClassifyId] = v.ParentId
  272. }
  273. for _, v := range list {
  274. v.ParentClassifyId = classifyMap[v.ClassifyId]
  275. }
  276. br.Ret = 200
  277. br.Success = true
  278. br.Msg = "获取成功"
  279. br.Data = list
  280. }
  281. // GprRiskSingleData
  282. // @Title 获取GprRisk数据
  283. // @Description 获取GprRisk单条数据接口
  284. // @Param IndexCode query string true "指标唯一编码"
  285. // @Success 200 {object} models.BaseResponse
  286. // @router /gpr_risk/single_data [get]
  287. func (this *BaseFromGprRiskController) GprRiskSingleData() {
  288. br := new(models.BaseResponse).Init()
  289. defer func() {
  290. this.Data["json"] = br
  291. this.ServeJSON()
  292. }()
  293. sysUser := this.SysUser
  294. if sysUser == nil {
  295. br.Msg = "请登录"
  296. br.ErrMsg = "请登录,SysUser Is Empty"
  297. br.Ret = 408
  298. return
  299. }
  300. indexCode := this.GetString("IndexCode")
  301. pageSize, _ := this.GetInt("PageSize")
  302. currentIndex, _ := this.GetInt("CurrentIndex")
  303. var total int64
  304. page := paging.GetPaging(currentIndex, pageSize, int(total))
  305. var startSize int
  306. if pageSize <= 0 {
  307. pageSize = utils.PageSize20
  308. }
  309. if currentIndex <= 0 {
  310. currentIndex = 1
  311. }
  312. startSize = paging.StartIndex(currentIndex, pageSize)
  313. indexInfo, err := data_manage.GetBaseFromGprRiskIndexByIndexCode(indexCode)
  314. if err != nil {
  315. br.Msg = "获取指标信息失败"
  316. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  317. return
  318. }
  319. total, err = data_manage.GetGprRiskIndexDataTotalByCode(indexCode)
  320. if err != nil {
  321. br.Msg = "获取数据失败"
  322. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  323. return
  324. }
  325. page = paging.GetPaging(currentIndex, pageSize, int(total))
  326. dataTmpList, err := data_manage.GetGprRiskIndexDataByCode(indexCode, startSize, pageSize)
  327. if err != nil {
  328. br.Msg = "获取数据失败"
  329. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  330. return
  331. }
  332. edbInfo, err := data_manage.GetEdbInfoByEdbCode(utils.DATA_SOURCE_GPR_RISK, indexCode)
  333. if err != nil && !utils.IsErrNoRow(err) {
  334. br.Msg = "获取数据源失败"
  335. br.ErrMsg = "获取数据源失败,Err:" + err.Error()
  336. return
  337. }
  338. var ret data_manage.GprRiskSingleDataResp
  339. var dataList []*data_manage.GprRiskSingleData
  340. if edbInfo != nil {
  341. ret.EdbInfoId = edbInfo.EdbInfoId
  342. ret.EdbExist = 1
  343. }
  344. ret.ClassifyId = indexInfo.ClassifyId
  345. ret.BaseFromGprRiskIndexId = indexInfo.BaseFromGprRiskIndexId
  346. ret.IndexCode = indexInfo.IndexCode
  347. ret.IndexName = indexInfo.IndexName
  348. ret.Frequency = indexInfo.Frequency
  349. ret.CreateTime = indexInfo.CreateTime.Format(utils.FormatDateTime)
  350. ret.ModifyTime = indexInfo.ModifyTime.Format(utils.FormatDateTime)
  351. ret.Unit = indexInfo.Unit
  352. for _, v := range dataTmpList {
  353. tmp := &data_manage.GprRiskSingleData{
  354. Value: v.Value,
  355. DataTime: v.DataTime,
  356. }
  357. dataList = append(dataList, tmp)
  358. }
  359. ret.Data = dataList
  360. ret.Paging = page
  361. br.Ret = 200
  362. br.Success = true
  363. br.Msg = "获取成功"
  364. br.Data = ret
  365. }
  366. // GprRiskIndexList
  367. // @Title GPR地缘风险指数指标列表
  368. // @Description GPR地缘风险指数指标列表
  369. // @Param ClassifyId query int true "分类id"
  370. // @Success 200 {object} data_manage.BaseFromGprRiskClassifyResp
  371. // @router /gpr_risk/classify/index/list [get]
  372. func (this *BaseFromGprRiskController) GprRiskIndexList() {
  373. br := new(models.BaseResponse).Init()
  374. defer func() {
  375. this.Data["json"] = br
  376. this.ServeJSON()
  377. }()
  378. classifyId, _ := this.GetInt("ClassifyId", 0)
  379. indexList, err := data_manage.GetGprRiskIndexByClassifyId(classifyId)
  380. if err != nil && !utils.IsErrNoRow(err) {
  381. br.Msg = "获取失败"
  382. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  383. return
  384. }
  385. var ret data_manage.BaseFromGprRiskClassifyResp
  386. list := make([]*data_manage.BaseFromGprRiskClassifyItems, 0)
  387. for _, v := range indexList {
  388. classify := new(data_manage.BaseFromGprRiskClassifyItems)
  389. classify.ClassifyId = classifyId
  390. classify.BaseFromGprRiskIndexId = v.BaseFromGprRiskIndexId
  391. classify.IndexCode = v.IndexCode
  392. classify.ClassifyName = v.IndexName
  393. classify.UniqueCode = fmt.Sprintf("%d_%d", classifyId, v.BaseFromGprRiskIndexId)
  394. list = append(list, classify)
  395. }
  396. ret.List = list
  397. br.Ret = 200
  398. br.Success = true
  399. br.Msg = "获取成功"
  400. br.Data = ret
  401. }
  402. // GprRiskNameCheck
  403. // @Title 加入指标库的重名检测
  404. // @Description 加入指标库的重名检测
  405. // @Param ClassifyIds query string true "分类id, 多个分类用英文"
  406. // @Param Keyword query string true "关键词, 指标ID/指标名称"
  407. // @Success 200 {object} NameCheckResult
  408. // @router /gpr_risk/edb_info/name_check [post]
  409. func (this *BaseFromGprRiskController) GprRiskNameCheck() {
  410. br := new(models.BaseResponse).Init()
  411. defer func() {
  412. if br.ErrMsg == "" {
  413. br.IsSendEmail = false
  414. }
  415. this.Data["json"] = br
  416. this.ServeJSON()
  417. }()
  418. sysUser := this.SysUser
  419. if sysUser == nil {
  420. br.Msg = "请登录"
  421. br.ErrMsg = "请登录,SysUser Is Empty"
  422. br.Ret = 408
  423. return
  424. }
  425. var req []*data_manage.NameCheckEdbInfoReq
  426. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  427. br.Msg = "参数解析异常!"
  428. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  429. return
  430. }
  431. if len(req) == 0 {
  432. br.Msg = "请选择指标"
  433. return
  434. }
  435. codeMaxT := 30
  436. codeLen := len(req)
  437. if codeLen > codeMaxT {
  438. br.Msg = "批量添加指标数量不得超过30个"
  439. return
  440. }
  441. indexNames := make([]string, 0)
  442. resp := make([]*data_manage.EdbNameCheckResult, 0)
  443. for _, v := range req {
  444. v.EdbCode = strings.TrimSpace(v.EdbCode)
  445. if v.EdbCode == "" {
  446. br.Msg = "指标ID不可为空"
  447. return
  448. }
  449. v.EdbName = strings.TrimSpace(v.EdbName)
  450. if v.EdbName == "" {
  451. br.Msg = "请输入指标名称"
  452. return
  453. }
  454. indexNames = append(indexNames, v.EdbName)
  455. resp = append(resp, &data_manage.EdbNameCheckResult{
  456. EdbCode: v.EdbCode,
  457. EdbName: v.EdbName,
  458. })
  459. dataItems, err := data_manage.GetEdbDataAllByEdbCode(v.EdbCode, utils.DATA_SOURCE_GPR_RISK, 0, utils.EDB_DATA_LIMIT)
  460. if err != nil && !utils.IsErrNoRow(err) {
  461. br.Msg = "获取失败"
  462. br.ErrMsg = "获取钢联已存在信息失败,Err:" + err.Error()
  463. return
  464. }
  465. if len(dataItems) <= 0 {
  466. respItem, err := data.AddEdbData(utils.DATA_SOURCE_GPR_RISK, v.EdbCode, v.Frequency)
  467. if err != nil {
  468. br.Msg = "获取失败"
  469. br.ErrMsg = "获取失败,Err:" + err.Error()
  470. return
  471. }
  472. if respItem.Ret != 200 {
  473. br.Msg = "未搜索到该指标"
  474. br.ErrMsg = respItem.ErrMsg + ";EdbCode:" + v.EdbCode
  475. return
  476. }
  477. }
  478. }
  479. // 重名校验
  480. edbList, e := data_manage.GetEdbInfoByNameArr(indexNames, utils.EDB_INFO_TYPE)
  481. if e != nil {
  482. br.Msg = "操作失败"
  483. br.ErrMsg = "获取重名指标失败, Err: " + e.Error()
  484. return
  485. }
  486. nameExists := make(map[string]bool)
  487. for _, v := range edbList {
  488. nameExists[v.EdbName] = true
  489. }
  490. if len(nameExists) > 0 {
  491. for _, v := range resp {
  492. v.Exist = nameExists[v.EdbName]
  493. }
  494. }
  495. br.Data = resp
  496. br.Msg = "校验成功"
  497. br.Ret = 200
  498. br.Success = true
  499. }
  500. // GprRiskAddCheck
  501. // @Title 加入指标库指标Id检测
  502. // @Description 加入指标库指标Id检测
  503. // @Param request body request.BatchAddCheckReq true "type json string"
  504. // @Success 200 string "操作成功"
  505. // @router /gpr_risk/edb_info/add_check [post]
  506. func (c *BaseFromGprRiskController) GprRiskAddCheck() {
  507. br := new(models.BaseResponse).Init()
  508. defer func() {
  509. if br.ErrMsg == "" {
  510. br.IsSendEmail = false
  511. }
  512. c.Data["json"] = br
  513. c.ServeJSON()
  514. }()
  515. sysUser := c.SysUser
  516. if sysUser == nil {
  517. br.Msg = "请登录"
  518. br.ErrMsg = "请登录,SysUser Is Empty"
  519. br.Ret = 408
  520. return
  521. }
  522. var req data_manage.BatchAddCheckReq
  523. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  524. br.Msg = "参数解析异常!"
  525. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  526. return
  527. }
  528. codeMaxT := 30
  529. codeLen := len(req.IndexCodes)
  530. // 获取指标库已有指标
  531. existsEdb, e := data_manage.GetEdbCodesBySource(utils.DATA_SOURCE_GPR_RISK)
  532. if e != nil {
  533. br.Msg = "获取失败"
  534. br.ErrMsg = "获取自有数据已添加的指标失败, Err: " + e.Error()
  535. return
  536. }
  537. existMap := make(map[string]*data_manage.EdbInfo)
  538. for _, v := range existsEdb {
  539. existMap[v.EdbCode] = v
  540. }
  541. if codeLen == 0 {
  542. br.Msg = "请选择指标"
  543. return
  544. }
  545. if codeLen > codeMaxT {
  546. br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMaxT)
  547. return
  548. }
  549. // 查询选中的指标
  550. cond := fmt.Sprintf(` AND index_code IN (%s)`, utils.GetOrmInReplace(codeLen))
  551. pars := make([]interface{}, 0)
  552. pars = append(pars, req.IndexCodes)
  553. list, err := data_manage.GetGprRiskIndex(cond, pars)
  554. if err != nil {
  555. br.Msg = "获取失败"
  556. br.ErrMsg = "获取钢联已存在信息失败,Err:" + err.Error()
  557. return
  558. }
  559. if len(list) > codeMaxT {
  560. br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMaxT)
  561. return
  562. }
  563. resp := make([]*data_manage.BaseFromGprRiskIndexList, 0)
  564. for _, v := range list {
  565. if edb, ok := existMap[v.IndexCode]; ok {
  566. v.EdbInfoId = edb.EdbInfoId
  567. v.EdbClassifyId = edb.ClassifyId
  568. v.EdbUniqueCode = edb.UniqueCode
  569. v.EdbExist = 1
  570. }
  571. resp = append(resp, v)
  572. }
  573. br.Data = resp
  574. br.Msg = "校验成功"
  575. br.Ret = 200
  576. br.Success = true
  577. }
  578. // GprRiskEdbInfoAdd
  579. // @Title 新增指标接口
  580. // @Description 新增指标接口
  581. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  582. // @Success Ret=200 保存成功
  583. // @router /gpr_risk/edb_info/add [post]
  584. func (this *BaseFromGprRiskController) GprRiskEdbInfoAdd() {
  585. br := new(models.BaseResponse).Init()
  586. defer func() {
  587. this.Data["json"] = br
  588. this.ServeJSON()
  589. }()
  590. sysUser := this.SysUser
  591. if sysUser == nil {
  592. br.Msg = "请登录"
  593. br.ErrMsg = "请登录,SysUser Is Empty"
  594. br.Ret = 408
  595. return
  596. }
  597. deleteCache := true
  598. cacheKey := "CACHE_EDB_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  599. defer func() {
  600. if deleteCache {
  601. utils.Rc.Delete(cacheKey)
  602. }
  603. }()
  604. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  605. deleteCache = false
  606. br.Msg = "系统处理中,请稍后重试!"
  607. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  608. return
  609. }
  610. var req data_manage.AddEdbInfoReq
  611. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  612. if err != nil {
  613. br.Msg = "参数解析异常!"
  614. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  615. return
  616. }
  617. req.EdbName = strings.Trim(req.EdbName, " ")
  618. req.EdbCode = strings.Trim(req.EdbCode, " ")
  619. if req.EdbCode == "" {
  620. br.Msg = "指标ID不能为空"
  621. return
  622. }
  623. if req.EdbName == "" {
  624. br.Msg = "指标名称不能为空"
  625. return
  626. }
  627. if req.Frequency == "" {
  628. br.Msg = "频率不能为空"
  629. return
  630. }
  631. if req.Unit == "" {
  632. br.Msg = "单位不能为空"
  633. return
  634. }
  635. if req.ClassifyId <= 0 {
  636. br.Msg = "请选择分类"
  637. return
  638. }
  639. count, err := data_manage.GetGprRiskIndexDataCount(req.EdbCode)
  640. if err != nil {
  641. br.Msg = "获取失败"
  642. br.ErrMsg = "获取失败,Err:" + err.Error()
  643. return
  644. }
  645. if count == 0 {
  646. br.Msg = "指标不存在"
  647. }
  648. // 指标入库
  649. edbInfo, err, errMsg, isSendEmail := data.EdbInfoAdd(utils.DATA_SOURCE_GPR_RISK, 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)
  650. if err != nil {
  651. br.Msg = "保存失败"
  652. if errMsg != `` {
  653. br.Msg = errMsg
  654. }
  655. br.ErrMsg = err.Error()
  656. br.IsSendEmail = isSendEmail
  657. return
  658. }
  659. // 试用平台更新用户累计新增指标数
  660. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  661. if e != nil {
  662. br.Msg = "操作失败"
  663. br.ErrMsg = "获取系统用户数据失败,Err:" + e.Error()
  664. return
  665. }
  666. if utils.BusinessCode == utils.BusinessCodeSandbox && adminItem.DepartmentName == "ETA试用客户" {
  667. go func() {
  668. var r etaTrialService.EtaTrialUserReq
  669. r.Mobile = adminItem.Mobile
  670. _, _ = etaTrialService.UpdateUserIndexNum(r)
  671. }()
  672. }
  673. //新增操作日志
  674. {
  675. edbLog := new(data_manage.EdbInfoLog)
  676. edbLog.EdbInfoId = edbInfo.EdbInfoId
  677. edbLog.SourceName = edbInfo.SourceName
  678. edbLog.Source = edbInfo.Source
  679. edbLog.EdbCode = edbInfo.EdbCode
  680. edbLog.EdbName = edbInfo.EdbName
  681. edbLog.ClassifyId = edbInfo.ClassifyId
  682. edbLog.SysUserId = sysUser.AdminId
  683. edbLog.SysUserRealName = sysUser.RealName
  684. edbLog.CreateTime = time.Now()
  685. edbLog.Content = string(this.Ctx.Input.RequestBody)
  686. edbLog.Status = "新增指标"
  687. edbLog.Method = this.Ctx.Input.URI()
  688. go data_manage.AddEdbInfoLog(edbLog)
  689. }
  690. // 更新es
  691. go data.AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
  692. resp := new(data_manage.AddEdbInfoResp)
  693. resp.EdbInfoId = edbInfo.EdbInfoId
  694. resp.UniqueCode = edbInfo.UniqueCode
  695. br.Ret = 200
  696. br.Success = true
  697. br.Msg = "保存成功"
  698. br.Data = resp
  699. br.IsAddLog = true
  700. }
  701. // ExportGprRiskList
  702. // @Title 导出GPR地缘风险指数数据
  703. // @Description 导出GPR地缘风险指数数据
  704. // @Param ClassifyId query int true "关键字搜索"
  705. // @Param IndexCode query string true "指标编码"
  706. // @Success 200 导出成功
  707. // @router /gpr_risk/export [get]
  708. func (this *BaseFromGprRiskController) ExportGprRiskList() {
  709. br := new(models.BaseResponse).Init()
  710. defer func() {
  711. this.Data["json"] = br
  712. this.ServeJSON()
  713. }()
  714. sysUser := this.SysUser
  715. if sysUser == nil {
  716. br.Msg = "请重新登录"
  717. return
  718. }
  719. classifyId, _ := this.GetInt("ClassifyId")
  720. indexCode := this.GetString("IndexCode")
  721. if classifyId <= 0 && indexCode == "" {
  722. br.Msg = "请选择分类或者指标"
  723. return
  724. }
  725. dir, _ := os.Executable()
  726. exPath := filepath.Dir(dir)
  727. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  728. xlsxFile := xlsx.NewFile()
  729. var condition string
  730. var pars []interface{}
  731. var classifyName string
  732. if classifyId > 0 {
  733. classifyInfo, err := data_manage.GetBaseFromGprRiskClassifyById(classifyId)
  734. if err != nil {
  735. if utils.IsErrNoRow(err) {
  736. br.Msg = "分类不存在"
  737. return
  738. }
  739. br.Msg = "下载失败"
  740. br.ErrMsg = "获取分类失败,Err:" + err.Error()
  741. return
  742. }
  743. classifyName = classifyInfo.ClassifyName
  744. childClassify, err := data_manage.GetBaseFromGprRiskClassifyByParentId(classifyId)
  745. if err != nil {
  746. br.Msg = "下载失败"
  747. br.ErrMsg = "获取分类失败,Err:" + err.Error()
  748. return
  749. }
  750. if len(childClassify) > 0 {
  751. condition += `AND classify_id IN (` + utils.GetOrmInReplace(len(childClassify)) + `)`
  752. for _, child := range childClassify {
  753. pars = append(pars, child.ClassifyId)
  754. }
  755. } else {
  756. condition += ` AND classify_id=?`
  757. pars = append(pars, classifyId)
  758. }
  759. }
  760. if indexCode != "" {
  761. condition += ` AND index_code=? `
  762. pars = append(pars, indexCode)
  763. }
  764. indexList, err := data_manage.GetGprRiskIndex(condition, pars)
  765. if err != nil {
  766. br.Msg = "下载失败"
  767. br.ErrMsg = "获取指标失败,Err:" + err.Error()
  768. fmt.Println("获取数据失败,Err:" + err.Error())
  769. return
  770. }
  771. if len(indexList) <= 0 {
  772. fmt.Println("indexList 为空")
  773. br.Ret = 200
  774. br.Success = true
  775. br.Msg = "success"
  776. return
  777. }
  778. codeList := make([]string, 0)
  779. frequenciesMap := make(map[string][]*data_manage.BaseFromGprRiskIndexList)
  780. for _, v := range indexList {
  781. codeList = append(codeList, v.IndexCode)
  782. frequenciesMap[v.Frequency] = append(frequenciesMap[v.Frequency], v)
  783. }
  784. dataListMap := make(map[string][]*data_manage.BaseFromGprRiskData)
  785. if len(indexList) > 0 {
  786. allDataList, e := data_manage.GetGprRiskIndexDataByCodes(codeList)
  787. if e != nil {
  788. br.Msg = "获取数据失败"
  789. br.ErrMsg = "获取数据失败,Err:" + e.Error()
  790. return
  791. }
  792. for _, v := range allDataList {
  793. dataListMap[v.IndexCode] = append(dataListMap[v.IndexCode], v)
  794. }
  795. }
  796. // 按照频率分组排序
  797. frequencies := []string{
  798. "日度", "周度", "旬度", "月度", "季度", "半年度", "年度",
  799. }
  800. for _, frequency := range frequencies {
  801. //获取指标
  802. indexCodeList, ok := frequenciesMap[frequency]
  803. if !ok {
  804. continue
  805. }
  806. if len(indexCodeList) <= 0 {
  807. fmt.Printf("sheet:%s, 不存在指标", frequency)
  808. return
  809. }
  810. var sheetName string
  811. switch frequency {
  812. case "日度":
  813. sheetName = "日度(Daily)"
  814. case "周度":
  815. sheetName = "周度(Weekly)"
  816. case "旬度":
  817. sheetName = "旬度(ten-day)"
  818. case "月度":
  819. sheetName = "月度(Monthly)"
  820. case "季度":
  821. sheetName = "季度(Quarterly)"
  822. case "半年度":
  823. sheetName = "半年度(Semi-annual)"
  824. case "年度":
  825. sheetName = "年度(Annual)"
  826. default:
  827. sheetName = "其他数据"
  828. }
  829. sheetNew, err := xlsxFile.AddSheet(sheetName)
  830. if err != nil {
  831. fmt.Println("新增Sheet失败", err.Error())
  832. return
  833. }
  834. secNameRow := sheetNew.AddRow()
  835. frequencyRow := sheetNew.AddRow()
  836. unitRow := sheetNew.AddRow()
  837. lastModifyDateRow := sheetNew.AddRow()
  838. var indexIdList []int
  839. for _, idx := range frequenciesMap[frequency] {
  840. indexIdList = append(indexIdList, idx.BaseFromGprRiskIndexId)
  841. }
  842. dataTimeList, err := data_manage.GetGprRiskDataDataTimeByIndexId(indexIdList)
  843. if err != nil {
  844. br.Msg = "下载失败"
  845. br.ErrMsg = "获取数据时间失败,Err:" + err.Error()
  846. fmt.Println("获取数据时间失败", err.Error())
  847. return
  848. }
  849. // 添加excel左侧指标日期
  850. setRowIndex := 4
  851. for rk, dv := range dataTimeList {
  852. rowIndex := setRowIndex + rk
  853. row := sheetNew.Row(rowIndex)
  854. displayDate, _ := time.Parse(utils.FormatDate, dv)
  855. displayDateCell := row.AddCell()
  856. style := new(xlsx.Style)
  857. style.ApplyAlignment = true
  858. style.Alignment.WrapText = true
  859. displayDateCell.SetStyle(style)
  860. displayDateCell.SetDate(displayDate)
  861. }
  862. for k, icl := range indexCodeList {
  863. // 获取数据
  864. dataList, ok := dataListMap[icl.IndexCode]
  865. if !ok {
  866. continue
  867. }
  868. if k == 0 {
  869. secNameRow.AddCell().SetValue("指标名称/Metric Name")
  870. frequencyRow.AddCell().SetValue("频度/Frequency")
  871. unitRow.AddCell().SetValue("单位/Unit")
  872. lastModifyDateRow.AddCell().SetValue("更新时间/Update Time")
  873. min := k * 3
  874. sheetNew.SetColWidth(min, min, 15)
  875. }
  876. if len(dataList) == 0 {
  877. continue
  878. }
  879. secNameRow.AddCell().SetValue(icl.IndexName)
  880. frequencyRow.AddCell().SetValue(icl.Frequency)
  881. unitRow.AddCell().SetValue(icl.Unit)
  882. timeDate, err := time.Parse(utils.FormatDateTime, dataList[0].ModifyTime)
  883. if err != nil {
  884. continue
  885. }
  886. lastModifyDateRow.AddCell().SetValue(timeDate.Format(utils.FormatDate))
  887. dataInfoMap := make(map[string]*data_manage.BaseFromGprRiskData)
  888. for _, v := range dataList {
  889. dataInfoMap[v.DataTime] = v
  890. }
  891. for rk, dtv := range dataTimeList {
  892. rowIndex := setRowIndex + rk
  893. row := sheetNew.Row(rowIndex)
  894. displayDateCell := row.AddCell()
  895. tmpData, ok := dataInfoMap[dtv]
  896. if ok {
  897. displayDateCell.SetValue(tmpData.Value)
  898. }
  899. }
  900. }
  901. }
  902. err = xlsxFile.Save(downLoadnFilePath)
  903. if err != nil {
  904. //有指标无数据时先导出一遍空表
  905. sheet, err := xlsxFile.AddSheet("无数据")
  906. if err != nil {
  907. br.Msg = "新增Sheet失败"
  908. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  909. return
  910. }
  911. rowSecName := sheet.AddRow()
  912. celSecName := rowSecName.AddCell()
  913. celSecName.SetValue("")
  914. e := xlsxFile.Save(downLoadnFilePath)
  915. if e != nil {
  916. br.Msg = "保存文件失败"
  917. br.ErrMsg = "保存文件失败"
  918. return
  919. }
  920. }
  921. fileName := classifyName
  922. if indexCode != "" && len(indexList) == 1 {
  923. fileName = indexList[0].IndexName
  924. }
  925. fileName = strings.Replace(fileName, ": ", "_", -1)
  926. fileName = strings.Replace(fileName, ", ", "_", -1)
  927. fileName = strings.Replace(fileName, " ", "_", -1)
  928. fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称
  929. fmt.Println(fileName)
  930. this.Ctx.Output.Download(downLoadnFilePath, fileName)
  931. defer func() {
  932. os.Remove(downLoadnFilePath)
  933. }()
  934. br.Ret = 200
  935. br.Success = true
  936. br.Msg = "success"
  937. }
  938. // GetFrequency
  939. // @Title GPR地缘风险指数数据频度
  940. // @Description GPR地缘风险指数数据频度接口
  941. // @Param ClassifyId query string true "分类Id"
  942. // @Success 200 {object} data_manage.LzFrequency
  943. // @router /gpr_risk/frequency [get]
  944. func (this *BaseFromGprRiskController) GetFrequency() {
  945. br := new(models.BaseResponse).Init()
  946. defer func() {
  947. this.Data["json"] = br
  948. this.ServeJSON()
  949. }()
  950. sysUser := this.SysUser
  951. if sysUser == nil {
  952. br.Msg = "请登录"
  953. br.ErrMsg = "请登录,SysUser Is Empty"
  954. br.Ret = 408
  955. return
  956. }
  957. classifyId, _ := this.GetInt("ClassifyId")
  958. if classifyId < 0 {
  959. br.Msg = "请选择分类"
  960. br.ErrMsg = "请选择分类"
  961. return
  962. }
  963. frequencyList, err := data_manage.GetGprRiskFrequencyByClassifyId(classifyId)
  964. if err != nil {
  965. br.Msg = "获取频度失败"
  966. br.ErrMsg = "获取频度失败,Err:" + err.Error()
  967. return
  968. }
  969. br.Ret = 200
  970. br.Success = true
  971. br.Msg = "获取成功"
  972. br.Data = frequencyList
  973. }