usda_fas_data.go 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243
  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 BaseFromUsdaFasController struct {
  21. controllers.BaseAuthController
  22. }
  23. // UsdaFasClassify
  24. // @Title 美国农业部数据分类
  25. // @Description 美国农业部数据分类接口
  26. // @Success 200 {object} data_manage.BaseFromUsdaFasClassify
  27. // @router /usda_fas/classify [get]
  28. func (this *BaseFromUsdaFasController) UsdaFasClassify() {
  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.GetAllBaseFromUsdaFasClassify()
  42. if err != nil && err.Error() != utils.ErrNoRow() {
  43. br.Msg = "获取失败"
  44. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  45. return
  46. }
  47. //组装一级分类
  48. rootMap := make(map[int][]*data_manage.BaseFromUsdaFasClassifyItems)
  49. list := make([]*data_manage.BaseFromUsdaFasClassifyItems, 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.BaseFromUsdaFasClassifyItems, 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.BaseFromUsdaFasClassifyResp
  73. ret.List = list
  74. br.Ret = 200
  75. br.Success = true
  76. br.Msg = "获取成功"
  77. br.Data = ret
  78. }
  79. // UsdaFasIndexData
  80. // @Title 获取美国农业部数据
  81. // @Description 获取美国农业部数据接口
  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 /usda_fas/index/data [get]
  87. func (this *BaseFromUsdaFasController) UsdaFasIndexData() {
  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. classifyInfo, err := data_manage.GetBaseFromUsdaFasClassifyById(classifyId)
  123. if err != nil {
  124. if err.Error() == utils.ErrNoRow() {
  125. br.Msg = "分类不存在"
  126. return
  127. }
  128. br.Msg = "获取分类信息失败"
  129. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  130. return
  131. }
  132. if classifyInfo.Level == 2 || classifyInfo.ParentId > 0 {
  133. condition += ` AND classify_id=? `
  134. pars = append(pars, classifyId)
  135. } else if classifyInfo.Level == 1 {
  136. childClassify, err := data_manage.GetBaseFromUsdaFasClassifyByParentId(classifyId)
  137. if err != nil {
  138. br.Msg = "获取分类信息失败"
  139. br.ErrMsg = "获取子分类信息失败,Err:" + err.Error()
  140. return
  141. }
  142. var classifyList []int
  143. for _, v := range childClassify {
  144. classifyList = append(classifyList, v.ClassifyId)
  145. }
  146. condition += ` AND classify_id IN (` + utils.GetOrmInReplace(len(classifyList)) + `) `
  147. pars = append(pars, classifyList)
  148. }
  149. }
  150. if frequency != "" {
  151. condition += ` AND frequency=? `
  152. pars = append(pars, frequency)
  153. }
  154. UsdaFasList, err := data_manage.GetUsdaFasIndex(condition, pars)
  155. if err != nil {
  156. br.Msg = "获取数据失败"
  157. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  158. return
  159. }
  160. edbCodeList := make([]string, 0)
  161. for _, v := range UsdaFasList {
  162. edbCodeList = append(edbCodeList, v.IndexCode)
  163. }
  164. edbInfoMap := make(map[string]*data_manage.EdbInfo)
  165. dataMap := make(map[string][]*data_manage.BaseFromUsdaFasData)
  166. if len(edbCodeList) > 0 {
  167. edbInfoList, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_USDA_FAS, edbCodeList)
  168. if err != nil {
  169. br.Msg = "获取数据源失败"
  170. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  171. return
  172. }
  173. for _, v := range edbInfoList {
  174. edbInfoMap[v.EdbCode] = v
  175. }
  176. // 首先对分类下的指标按照日期进行分页,再针对日期,进行排序
  177. dataTimes, err := data_manage.GetUsdaFasIndexDataTimePageByCodes(edbCodeList, startSize, pageSize)
  178. if err != nil {
  179. br.Msg = "获取数据失败"
  180. br.ErrMsg = "获取指标数据日期信息失败,Err:" + err.Error()
  181. return
  182. }
  183. if len(dataTimes) > 0 {
  184. startDate := dataTimes[len(dataTimes)-1]
  185. endDate := dataTimes[0]
  186. // 把截止日往后加1天
  187. endDateT, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
  188. endDate = endDateT.AddDate(0, 0, 1).Format(utils.FormatDate)
  189. dataList, e := data_manage.GetUsdaFasIndexDataByDataTime(edbCodeList, startDate, endDate)
  190. if e != nil {
  191. br.Msg = "获取数据失败"
  192. br.ErrMsg = "获取指标数据失败,Err:" + e.Error()
  193. return
  194. }
  195. //将数据按照指标进行分类
  196. for _, v := range dataList {
  197. dataMap[v.IndexCode] = append(dataMap[v.IndexCode], v)
  198. }
  199. }
  200. }
  201. total, err := data_manage.GetUsdaFasIndexDataTimePageCount(edbCodeList)
  202. if err != nil {
  203. br.Msg = "获取数据失败"
  204. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  205. return
  206. }
  207. page := paging.GetPaging(currentIndex, pageSize, total)
  208. resultList := make([]*data_manage.BaseFromUsdaFasIndexList, 0)
  209. for _, v := range UsdaFasList {
  210. product := new(data_manage.BaseFromUsdaFasIndexList)
  211. product.BaseFromUsdaFasIndexId = v.BaseFromUsdaFasIndexId
  212. product.Unit = v.Unit
  213. product.IndexCode = v.IndexCode
  214. product.IndexName = v.IndexName
  215. product.Frequency = v.Frequency
  216. product.ModifyTime = v.ModifyTime
  217. if edb, ok := edbInfoMap[v.IndexCode]; ok {
  218. product.EdbInfoId = edb.EdbInfoId
  219. product.EdbExist = 1
  220. }
  221. /*total, err := data_manage.GetUsdaFasIndexDataCount(v.IndexCode)
  222. if err != nil {
  223. br.Msg = "获取数据失败"
  224. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  225. return
  226. }
  227. page := paging.GetPaging(currentIndex, pageSize, total)
  228. dataList, err := data_manage.GetUsdaFasIndexData(v.IndexCode, startSize, pageSize)
  229. if err != nil {
  230. br.Msg = "获取数据失败"
  231. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  232. return
  233. }*/
  234. dataListTmp, ok := dataMap[v.IndexCode]
  235. if !ok {
  236. dataListTmp = make([]*data_manage.BaseFromUsdaFasData, 0)
  237. }
  238. product.DataList = dataListTmp
  239. product.Paging = page
  240. resultList = append(resultList, product)
  241. }
  242. br.Ret = 200
  243. br.Success = true
  244. br.Msg = "获取成功"
  245. br.Data = resultList
  246. }
  247. // UsdaFasSearchList
  248. // @Title UsdaFas模糊搜索
  249. // @Description UsdaFas模糊搜索
  250. // @Param Keyword query string ture "关键字搜索"
  251. // @Success 200 {object} models.BaseResponse
  252. // @router /usda_fas/search_list [get]
  253. func (this *BaseFromUsdaFasController) UsdaFasSearchList() {
  254. br := new(models.BaseResponse).Init()
  255. defer func() {
  256. this.Data["json"] = br
  257. this.ServeJSON()
  258. }()
  259. sysUser := this.SysUser
  260. if sysUser == nil {
  261. br.Msg = "请重新登录"
  262. return
  263. }
  264. list := make([]*data_manage.BaseFromUsdaFasIndexSearchItem, 0)
  265. var err error
  266. //关键字
  267. keyword := this.GetString("Keyword")
  268. if keyword != "" {
  269. keyWordArr := strings.Split(keyword, " ")
  270. if len(keyWordArr) > 0 {
  271. condition := ""
  272. for _, v := range keyWordArr {
  273. condition += ` AND CONCAT(index_name,index_code) LIKE '%` + v + `%'`
  274. }
  275. list, err = data_manage.GetUsdaFasItemList(condition)
  276. if err != nil {
  277. br.ErrMsg = "获取失败,Err:" + err.Error()
  278. br.Msg = "获取失败"
  279. return
  280. }
  281. }
  282. } else {
  283. // todo es 模糊搜索
  284. list, err = data_manage.GetUsdaFasItemList("")
  285. if err != nil {
  286. br.ErrMsg = "获取失败,Err:" + err.Error()
  287. br.Msg = "获取失败"
  288. return
  289. }
  290. }
  291. classifyIds := make([]int, 0)
  292. for _, v := range list {
  293. classifyIds = append(classifyIds, v.ClassifyId)
  294. }
  295. classifyList, err := data_manage.GetBaseFromUsdaFasClassifyByIds(classifyIds)
  296. if err != nil {
  297. br.Msg = "搜索失败"
  298. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  299. return
  300. }
  301. classifyMap := make(map[int]int)
  302. for _, v := range classifyList {
  303. classifyMap[v.ClassifyId] = v.ParentId
  304. }
  305. for _, v := range list {
  306. v.ParentClassifyId = classifyMap[v.ClassifyId]
  307. }
  308. br.Ret = 200
  309. br.Success = true
  310. br.Msg = "获取成功"
  311. br.Data = list
  312. }
  313. // UsdaFasSingleData
  314. // @Title 获取UsdaFas数据
  315. // @Description 获取UsdaFas单条数据接口
  316. // @Param IndexCode query string true "指标唯一编码"
  317. // @Success 200 {object} models.BaseResponse
  318. // @router /usda_fas/single_data [get]
  319. func (this *BaseFromUsdaFasController) UsdaFasSingleData() {
  320. br := new(models.BaseResponse).Init()
  321. defer func() {
  322. this.Data["json"] = br
  323. this.ServeJSON()
  324. }()
  325. sysUser := this.SysUser
  326. if sysUser == nil {
  327. br.Msg = "请登录"
  328. br.ErrMsg = "请登录,SysUser Is Empty"
  329. br.Ret = 408
  330. return
  331. }
  332. indexCode := this.GetString("IndexCode")
  333. indexInfo, err := data_manage.GetBaseFromUsdaFasIndexByIndexCode(indexCode)
  334. if err != nil {
  335. br.Msg = "获取指标信息失败"
  336. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  337. return
  338. }
  339. dataTmpList, err := data_manage.GetUsdaFasIndexDataByCode(indexCode)
  340. if err != nil {
  341. br.Msg = "获取数据失败"
  342. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  343. return
  344. }
  345. edbInfo, err := data_manage.GetEdbInfoByEdbCode(utils.DATA_SOURCE_USDA_FAS, indexCode)
  346. if err != nil && err.Error() != utils.ErrNoRow() {
  347. br.Msg = "获取数据源失败"
  348. br.ErrMsg = "获取数据源失败,Err:" + err.Error()
  349. return
  350. }
  351. var ret data_manage.UsdaFasSingleDataResp
  352. var dataList []*data_manage.UsdaFasSingleData
  353. if edbInfo != nil {
  354. ret.EdbInfoId = edbInfo.EdbInfoId
  355. ret.EdbExist = 1
  356. }
  357. ret.ClassifyId = indexInfo.ClassifyId
  358. ret.BaseFromUsdaFasIndexId = indexInfo.BaseFromUsdaFasIndexId
  359. ret.IndexCode = indexInfo.IndexCode
  360. ret.IndexName = indexInfo.IndexName
  361. ret.Frequency = indexInfo.Frequency
  362. ret.CreateTime = indexInfo.CreateTime.Format(utils.FormatDateTime)
  363. ret.ModifyTime = indexInfo.ModifyTime.Format(utils.FormatDateTime)
  364. ret.Unit = indexInfo.Unit
  365. for _, v := range dataTmpList {
  366. tmp := &data_manage.UsdaFasSingleData{
  367. Value: v.Value,
  368. DataTime: v.DataTime,
  369. }
  370. dataList = append(dataList, tmp)
  371. }
  372. ret.Data = dataList
  373. br.Ret = 200
  374. br.Success = true
  375. br.Msg = "获取成功"
  376. br.Data = ret
  377. }
  378. // UsdaFasIndexList
  379. // @Title 美国农业部指标列表
  380. // @Description 美国农业部指标列表
  381. // @Param ClassifyId query int true "分类id"
  382. // @Success 200 {object} data_manage.BaseFromMysteelChemicalIndexResp
  383. // @router /usda_fas/classify/index/list [get]
  384. func (this *BaseFromUsdaFasController) UsdaFasIndexList() {
  385. br := new(models.BaseResponse).Init()
  386. defer func() {
  387. this.Data["json"] = br
  388. this.ServeJSON()
  389. }()
  390. classifyId, _ := this.GetInt("ClassifyId", 0)
  391. indexList, err := data_manage.GetUsdaFasIndexByClassifyId(classifyId)
  392. if err != nil && err.Error() != utils.ErrNoRow() {
  393. br.Msg = "获取失败"
  394. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  395. return
  396. }
  397. var ret data_manage.BaseFromUsdaFasClassifyResp
  398. list := make([]*data_manage.BaseFromUsdaFasClassifyItems, 0)
  399. for _, v := range indexList {
  400. classify := new(data_manage.BaseFromUsdaFasClassifyItems)
  401. classify.ClassifyId = classifyId
  402. classify.BaseFromUsdaFasIndexId = v.BaseFromUsdaFasIndexId
  403. classify.IndexCode = v.IndexCode
  404. classify.ClassifyName = v.IndexName
  405. classify.UniqueCode = fmt.Sprintf("%d_%d", classifyId, v.BaseFromUsdaFasIndexId)
  406. list = append(list, classify)
  407. }
  408. ret.List = list
  409. br.Ret = 200
  410. br.Success = true
  411. br.Msg = "获取成功"
  412. br.Data = ret
  413. }
  414. // UsdaFasBatchSearch
  415. // @Title 美国农业部指标查询
  416. // @Description 美国农业部指标查询
  417. // @Param ClassifyIds query string true "分类id, 多个分类用英文"
  418. // @Param Keyword query string true "关键词, 指标ID/指标名称"
  419. // @Success 200 {object} data_manage.LzFrequency
  420. // @router /usda_fas/batch_search [get]
  421. func (this *BaseFromUsdaFasController) UsdaFasBatchSearch() {
  422. br := new(models.BaseResponse).Init()
  423. defer func() {
  424. this.Data["json"] = br
  425. this.ServeJSON()
  426. }()
  427. sysUser := this.SysUser
  428. if sysUser == nil {
  429. br.Msg = "请登录"
  430. br.ErrMsg = "请登录,SysUser Is Empty"
  431. br.Ret = 408
  432. return
  433. }
  434. classifyIdStr := this.GetString("ClassifyIds")
  435. pageSize, _ := this.GetInt("PageSize")
  436. currentIndex, _ := this.GetInt("CurrentIndex")
  437. var startSize int
  438. if pageSize <= 0 {
  439. pageSize = utils.PageSize20
  440. }
  441. if currentIndex <= 0 {
  442. currentIndex = 1
  443. }
  444. startSize = utils.StartIndex(currentIndex, pageSize)
  445. resp := data_manage.BaseFromUsdaFasIndexSearchList{}
  446. total := 0
  447. page := paging.GetPaging(currentIndex, pageSize, total)
  448. var list = make([]*data_manage.BaseFromUsdaFasIndexList, 0)
  449. var condition string
  450. var pars []interface{}
  451. classifyIds := strings.Split(classifyIdStr, ",")
  452. if len(classifyIds) > 0 && classifyIds[0] != `` {
  453. condition += " AND classify_id IN (" + utils.GetOrmInReplace(len(classifyIds)) + " ) "
  454. pars = append(pars, classifyIds)
  455. }
  456. keyword := this.GetString("Keyword")
  457. if keyword != `` {
  458. condition += " AND (index_name like ? OR index_code like ?) "
  459. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  460. }
  461. frequencies := this.GetString("Frequencies")
  462. if frequencies != "" {
  463. frequencyList := strings.Split(frequencies, ",")
  464. condition += " AND frequency IN (" + utils.GetOrmInReplace(len(frequencyList)) + " ) "
  465. pars = append(pars, frequencyList)
  466. }
  467. if classifyIdStr == `` && keyword == `` && frequencies == `` {
  468. resp.Paging = page
  469. resp.List = list
  470. br.Ret = 200
  471. br.Success = true
  472. br.Msg = "获取成功"
  473. br.Data = resp
  474. return
  475. }
  476. list, err := data_manage.GetUsdaFasIndexPage(condition, pars, startSize, pageSize)
  477. if err != nil {
  478. br.Msg = "获取失败"
  479. br.ErrMsg = "获取失败,Err:" + err.Error()
  480. return
  481. }
  482. total, err = data_manage.GetUsdaFasIndexPageCount(condition, pars)
  483. if err != nil {
  484. br.Msg = "获取数据失败"
  485. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  486. return
  487. }
  488. page = paging.GetPaging(currentIndex, pageSize, total)
  489. resp.Paging = page
  490. resp.List = list
  491. br.Ret = 200
  492. br.Success = true
  493. br.Msg = "获取成功"
  494. br.Data = resp
  495. }
  496. // UsdaFasBatchAdd
  497. // @Title 美国农业部批量新增
  498. // @Description 美国农业部批量新增
  499. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  500. // @Success 200 string "操作成功"
  501. // @router /usda_fas/batch_add [post]
  502. func (this *BaseFromUsdaFasController) UsdaFasBatchAdd() {
  503. br := new(models.BaseResponse).Init()
  504. defer func() {
  505. if br.ErrMsg == "" {
  506. br.IsSendEmail = false
  507. }
  508. this.Data["json"] = br
  509. this.ServeJSON()
  510. }()
  511. sysUser := this.SysUser
  512. if sysUser == nil {
  513. br.Msg = "请登录"
  514. br.ErrMsg = "请登录,SysUser Is Empty"
  515. br.Ret = 408
  516. return
  517. }
  518. deleteCache := true
  519. cacheKey := "CACHE_EDB_INFO_BATCH_ADD_UsdaFas_" + strconv.Itoa(sysUser.AdminId)
  520. defer func() {
  521. if deleteCache {
  522. _ = utils.Rc.Delete(cacheKey)
  523. }
  524. }()
  525. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  526. deleteCache = false
  527. br.Msg = "系统处理中,请稍后重试!"
  528. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  529. return
  530. }
  531. var req []*data_manage.AddEdbInfoReq
  532. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  533. br.Msg = "参数解析异常!"
  534. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  535. return
  536. }
  537. if len(req) == 0 {
  538. br.Msg = "请选择指标"
  539. return
  540. }
  541. if len(req) > 30 {
  542. br.Msg = "批量添加指标数量不得超过30个"
  543. return
  544. }
  545. for _, v := range req {
  546. v.EdbCode = strings.TrimSpace(v.EdbCode)
  547. if v.EdbCode == "" {
  548. br.Msg = "指标ID不可为空"
  549. return
  550. }
  551. v.EdbName = strings.TrimSpace(v.EdbName)
  552. if v.EdbName == "" {
  553. br.Msg = "请输入指标名称"
  554. return
  555. }
  556. v.Frequency = strings.TrimSpace(v.Frequency)
  557. if v.Frequency == "" {
  558. br.Msg = "请选择频度"
  559. return
  560. }
  561. v.Unit = strings.TrimSpace(v.Unit)
  562. if v.Unit == "" {
  563. br.Msg = "请输入单位"
  564. return
  565. }
  566. if v.ClassifyId <= 0 {
  567. br.Msg = "请选择分类"
  568. return
  569. }
  570. }
  571. // 限定同一时间最多批量新增30个指标
  572. for _, v := range req {
  573. var r data_manage.UsdaFasIndexSource2EdbReq
  574. r.EdbCode = v.EdbCode
  575. r.EdbName = v.EdbName
  576. r.Frequency = v.Frequency
  577. r.Unit = v.Unit
  578. r.ClassifyId = v.ClassifyId
  579. r.AdminId = sysUser.AdminId
  580. r.AdminRealName = sysUser.RealName
  581. edbInfo, e, errMsg, skip := data.UsdaFasIndexSource2Edb(r, this.Lang)
  582. if e != nil {
  583. br.Msg = "操作失败"
  584. if errMsg != "" {
  585. br.Msg = errMsg
  586. }
  587. br.ErrMsg = e.Error()
  588. return
  589. }
  590. if skip {
  591. continue
  592. }
  593. // 试用平台更新用户累计新增指标数
  594. if utils.BusinessCode == utils.BusinessCodeSandbox {
  595. go func() {
  596. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  597. if e != nil {
  598. tips := fmt.Sprintf("试用平台更新用户累计新增指标数-获取用户失败, Err: " + e.Error())
  599. utils.FileLog.Info(tips)
  600. return
  601. }
  602. if adminItem.DepartmentName != "ETA试用客户" {
  603. return
  604. }
  605. var ur etaTrialService.EtaTrialUserReq
  606. ur.Mobile = adminItem.Mobile
  607. _, _ = etaTrialService.UpdateUserIndexNum(ur)
  608. }()
  609. }
  610. // 新增操作日志
  611. {
  612. edbLog := new(data_manage.EdbInfoLog)
  613. edbLog.EdbInfoId = edbInfo.EdbInfoId
  614. edbLog.SourceName = edbInfo.SourceName
  615. edbLog.Source = edbInfo.Source
  616. edbLog.EdbCode = edbInfo.EdbCode
  617. edbLog.EdbName = edbInfo.EdbName
  618. edbLog.ClassifyId = edbInfo.ClassifyId
  619. edbLog.SysUserId = sysUser.AdminId
  620. edbLog.SysUserRealName = sysUser.RealName
  621. edbLog.CreateTime = time.Now()
  622. edbLog.Content = string(this.Ctx.Input.RequestBody)
  623. edbLog.Status = "新增指标"
  624. edbLog.Method = this.Ctx.Input.URI()
  625. go data_manage.AddEdbInfoLog(edbLog)
  626. }
  627. }
  628. br.Msg = "操作成功"
  629. br.Ret = 200
  630. br.Success = true
  631. br.IsAddLog = true
  632. }
  633. // UsdaFasNameCheck
  634. // @Title 加入指标库的重名检测
  635. // @Description 加入指标库的重名检测
  636. // @Param ClassifyIds query string true "分类id, 多个分类用英文"
  637. // @Param Keyword query string true "关键词, 指标ID/指标名称"
  638. // @Success 200 {object} NameCheckResult
  639. // @router /usda_fas/edb_info/name_check [post]
  640. func (this *BaseFromUsdaFasController) UsdaFasNameCheck() {
  641. br := new(models.BaseResponse).Init()
  642. defer func() {
  643. if br.ErrMsg == "" {
  644. br.IsSendEmail = false
  645. }
  646. this.Data["json"] = br
  647. this.ServeJSON()
  648. }()
  649. sysUser := this.SysUser
  650. if sysUser == nil {
  651. br.Msg = "请登录"
  652. br.ErrMsg = "请登录,SysUser Is Empty"
  653. br.Ret = 408
  654. return
  655. }
  656. var req []*data_manage.NameCheckEdbInfoReq
  657. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  658. br.Msg = "参数解析异常!"
  659. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  660. return
  661. }
  662. if len(req) == 0 {
  663. br.Msg = "请选择指标"
  664. return
  665. }
  666. codeMax := 30
  667. codeLen := len(req)
  668. if codeLen > codeMax {
  669. br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
  670. return
  671. }
  672. indexNames := make([]string, 0)
  673. resp := make([]*data_manage.EdbNameCheckResult, 0)
  674. for _, v := range req {
  675. v.EdbCode = strings.TrimSpace(v.EdbCode)
  676. if v.EdbCode == "" {
  677. br.Msg = "指标ID不可为空"
  678. return
  679. }
  680. v.EdbName = strings.TrimSpace(v.EdbName)
  681. if v.EdbName == "" {
  682. br.Msg = "请输入指标名称"
  683. return
  684. }
  685. indexNames = append(indexNames, v.EdbName)
  686. resp = append(resp, &data_manage.EdbNameCheckResult{
  687. EdbCode: v.EdbCode,
  688. EdbName: v.EdbName,
  689. })
  690. dataItems, err := data_manage.GetEdbDataAllByEdbCode(v.EdbCode, utils.DATA_SOURCE_USDA_FAS, 0, utils.EDB_DATA_LIMIT)
  691. if err != nil && err.Error() != utils.ErrNoRow() {
  692. br.Msg = "获取失败"
  693. br.ErrMsg = "获取钢联已存在信息失败,Err:" + err.Error()
  694. return
  695. }
  696. if len(dataItems) <= 0 {
  697. respItem, err := data.AddEdbData(utils.DATA_SOURCE_USDA_FAS, v.EdbCode, v.Frequency)
  698. if err != nil {
  699. br.Msg = "获取失败"
  700. br.ErrMsg = "获取失败,Err:" + err.Error()
  701. return
  702. }
  703. if respItem.Ret != 200 {
  704. br.Msg = "未搜索到该指标"
  705. br.ErrMsg = respItem.ErrMsg + ";EdbCode:" + v.EdbCode
  706. return
  707. }
  708. }
  709. }
  710. // 重名校验
  711. edbList, e := data_manage.GetEdbInfoByNameArr(indexNames, utils.EDB_INFO_TYPE)
  712. if e != nil {
  713. br.Msg = "操作失败"
  714. br.ErrMsg = "获取重名指标失败, Err: " + e.Error()
  715. return
  716. }
  717. nameExists := make(map[string]bool)
  718. for _, v := range edbList {
  719. nameExists[v.EdbName] = true
  720. }
  721. if len(nameExists) > 0 {
  722. for _, v := range resp {
  723. v.Exist = nameExists[v.EdbName]
  724. }
  725. }
  726. br.Data = resp
  727. br.Msg = "校验成功"
  728. br.Ret = 200
  729. br.Success = true
  730. }
  731. // UsdaFasAddCheck
  732. // @Title 加入指标库指标Id检测
  733. // @Description 加入指标库指标Id检测
  734. // @Param request body request.BatchAddCheckReq true "type json string"
  735. // @Success 200 string "操作成功"
  736. // @router /usda_fas/edb_info/add_check [post]
  737. func (c *BaseFromUsdaFasController) UsdaFasAddCheck() {
  738. br := new(models.BaseResponse).Init()
  739. defer func() {
  740. if br.ErrMsg == "" {
  741. br.IsSendEmail = false
  742. }
  743. c.Data["json"] = br
  744. c.ServeJSON()
  745. }()
  746. sysUser := c.SysUser
  747. if sysUser == nil {
  748. br.Msg = "请登录"
  749. br.ErrMsg = "请登录,SysUser Is Empty"
  750. br.Ret = 408
  751. return
  752. }
  753. var req data_manage.BatchAddCheckReq
  754. if e := json.Unmarshal(c.Ctx.Input.RequestBody, &req); e != nil {
  755. br.Msg = "参数解析异常!"
  756. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  757. return
  758. }
  759. codeMax := 30
  760. codeLen := len(req.IndexCodes)
  761. // 获取指标库已有指标
  762. existsEdb, e := data_manage.GetEdbCodesBySource(utils.DATA_SOURCE_USDA_FAS)
  763. if e != nil {
  764. br.Msg = "获取失败"
  765. br.ErrMsg = "获取自有数据已添加的指标失败, Err: " + e.Error()
  766. return
  767. }
  768. existMap := make(map[string]*data_manage.EdbInfo)
  769. for _, v := range existsEdb {
  770. existMap[v.EdbCode] = v
  771. }
  772. if codeLen == 0 {
  773. br.Msg = "请选择指标"
  774. return
  775. }
  776. if codeLen > codeMax {
  777. br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
  778. return
  779. }
  780. // 查询选中的指标
  781. cond := fmt.Sprintf(` AND index_code IN (%s)`, utils.GetOrmInReplace(codeLen))
  782. pars := make([]interface{}, 0)
  783. pars = append(pars, req.IndexCodes)
  784. list, err := data_manage.GetUsdaFasIndex(cond, pars)
  785. if err != nil {
  786. br.Msg = "获取失败"
  787. br.ErrMsg = "获取钢联已存在信息失败,Err:" + err.Error()
  788. return
  789. }
  790. if len(list) > codeMax {
  791. br.Msg = fmt.Sprintf("最多只能选择%d个指标", codeMax)
  792. return
  793. }
  794. resp := make([]*data_manage.BaseFromUsdaFasIndexList, 0)
  795. for _, v := range list {
  796. if edb, ok := existMap[v.IndexCode]; ok {
  797. v.EdbInfoId = edb.EdbInfoId
  798. v.EdbClassifyId = edb.ClassifyId
  799. v.EdbUniqueCode = edb.UniqueCode
  800. v.EdbExist = 1
  801. }
  802. resp = append(resp, v)
  803. }
  804. br.Data = resp
  805. br.Msg = "校验成功"
  806. br.Ret = 200
  807. br.Success = true
  808. }
  809. // UsdaFasEdbInfoAdd
  810. // @Title 新增指标接口
  811. // @Description 新增指标接口
  812. // @Param request body data_manage.AddEdbInfoReq true "type json string"
  813. // @Success Ret=200 保存成功
  814. // @router /usda_fas/edb_info/add [post]
  815. func (this *BaseFromUsdaFasController) UsdaFasEdbInfoAdd() {
  816. br := new(models.BaseResponse).Init()
  817. defer func() {
  818. this.Data["json"] = br
  819. this.ServeJSON()
  820. }()
  821. sysUser := this.SysUser
  822. if sysUser == nil {
  823. br.Msg = "请登录"
  824. br.ErrMsg = "请登录,SysUser Is Empty"
  825. br.Ret = 408
  826. return
  827. }
  828. deleteCache := true
  829. cacheKey := "CACHE_EDB_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  830. defer func() {
  831. if deleteCache {
  832. utils.Rc.Delete(cacheKey)
  833. }
  834. }()
  835. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  836. deleteCache = false
  837. br.Msg = "系统处理中,请稍后重试!"
  838. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  839. return
  840. }
  841. var req data_manage.AddEdbInfoReq
  842. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  843. if err != nil {
  844. br.Msg = "参数解析异常!"
  845. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  846. return
  847. }
  848. req.EdbName = strings.Trim(req.EdbName, " ")
  849. req.EdbCode = strings.Trim(req.EdbCode, " ")
  850. if req.EdbCode == "" {
  851. br.Msg = "指标ID不能为空"
  852. return
  853. }
  854. if req.EdbName == "" {
  855. br.Msg = "指标名称不能为空"
  856. return
  857. }
  858. if req.Frequency == "" {
  859. br.Msg = "频率不能为空"
  860. return
  861. }
  862. if req.Unit == "" {
  863. br.Msg = "单位不能为空"
  864. return
  865. }
  866. if req.ClassifyId <= 0 {
  867. br.Msg = "请选择分类"
  868. return
  869. }
  870. count, err := data_manage.GetUsdaFasIndexDataCount(req.EdbCode)
  871. if err != nil {
  872. br.Msg = "获取失败"
  873. br.ErrMsg = "获取失败,Err:" + err.Error()
  874. return
  875. }
  876. if count == 0 {
  877. br.Msg = "指标不存在"
  878. }
  879. // 指标入库
  880. edbInfo, err, errMsg, isSendEmail := data.EdbInfoAdd(utils.DATA_SOURCE_USDA_FAS, 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)
  881. if err != nil {
  882. br.Msg = "保存失败"
  883. if errMsg != `` {
  884. br.Msg = errMsg
  885. }
  886. br.ErrMsg = err.Error()
  887. br.IsSendEmail = isSendEmail
  888. return
  889. }
  890. // 试用平台更新用户累计新增指标数
  891. adminItem, e := system.GetSysAdminById(sysUser.AdminId)
  892. if e != nil {
  893. br.Msg = "操作失败"
  894. br.ErrMsg = "获取系统用户数据失败,Err:" + e.Error()
  895. return
  896. }
  897. if utils.BusinessCode == utils.BusinessCodeSandbox && adminItem.DepartmentName == "ETA试用客户" {
  898. go func() {
  899. var r etaTrialService.EtaTrialUserReq
  900. r.Mobile = adminItem.Mobile
  901. _, _ = etaTrialService.UpdateUserIndexNum(r)
  902. }()
  903. }
  904. //新增操作日志
  905. {
  906. edbLog := new(data_manage.EdbInfoLog)
  907. edbLog.EdbInfoId = edbInfo.EdbInfoId
  908. edbLog.SourceName = edbInfo.SourceName
  909. edbLog.Source = edbInfo.Source
  910. edbLog.EdbCode = edbInfo.EdbCode
  911. edbLog.EdbName = edbInfo.EdbName
  912. edbLog.ClassifyId = edbInfo.ClassifyId
  913. edbLog.SysUserId = sysUser.AdminId
  914. edbLog.SysUserRealName = sysUser.RealName
  915. edbLog.CreateTime = time.Now()
  916. edbLog.Content = string(this.Ctx.Input.RequestBody)
  917. edbLog.Status = "新增指标"
  918. edbLog.Method = this.Ctx.Input.URI()
  919. go data_manage.AddEdbInfoLog(edbLog)
  920. }
  921. // 更新es
  922. go data.AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
  923. resp := new(data_manage.AddEdbInfoResp)
  924. resp.EdbInfoId = edbInfo.EdbInfoId
  925. resp.UniqueCode = edbInfo.UniqueCode
  926. br.Ret = 200
  927. br.Success = true
  928. br.Msg = "保存成功"
  929. br.Data = resp
  930. br.IsAddLog = true
  931. }
  932. // ExportUsdaFasList
  933. // @Title 导出美国农业部数据
  934. // @Description 导出美国农业部数据
  935. // @Param ClassifyId query int true "关键字搜索"
  936. // @Param IndexCode query string true "指标编码"
  937. // @Success 200 导出成功
  938. // @router /usda_fas/export [get]
  939. func (this *BaseFromUsdaFasController) ExportUsdaFasList() {
  940. br := new(models.BaseResponse).Init()
  941. defer func() {
  942. this.Data["json"] = br
  943. this.ServeJSON()
  944. }()
  945. sysUser := this.SysUser
  946. if sysUser == nil {
  947. br.Msg = "请重新登录"
  948. return
  949. }
  950. classifyId, _ := this.GetInt("ClassifyId")
  951. indexCode := this.GetString("IndexCode")
  952. if classifyId < 0 {
  953. br.Msg = "请选择分类"
  954. return
  955. }
  956. dir, _ := os.Executable()
  957. exPath := filepath.Dir(dir)
  958. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  959. xlsxFile := xlsx.NewFile()
  960. var condition string
  961. var pars []interface{}
  962. var classifyName string
  963. if classifyId > 0 {
  964. classifyInfo, err := data_manage.GetBaseFromUsdaFasClassifyById(classifyId)
  965. if err != nil {
  966. if err.Error() == utils.ErrNoRow() {
  967. br.Msg = "分类不存在"
  968. return
  969. }
  970. br.Msg = "下载失败"
  971. br.ErrMsg = "获取分类失败,Err:" + err.Error()
  972. return
  973. }
  974. classifyName = classifyInfo.ClassifyName
  975. childClassify, err := data_manage.GetBaseFromUsdaFasClassifyByParentId(classifyId)
  976. if err != nil {
  977. br.Msg = "下载失败"
  978. br.ErrMsg = "获取分类失败,Err:" + err.Error()
  979. return
  980. }
  981. if len(childClassify) > 0 {
  982. condition += `AND classify_id IN (` + utils.GetOrmInReplace(len(childClassify)) + `)`
  983. for _, child := range childClassify {
  984. pars = append(pars, child.ClassifyId)
  985. }
  986. } else {
  987. condition += ` AND classify_id=?`
  988. pars = append(pars, classifyId)
  989. }
  990. } else {
  991. condition += ` AND classify_id=?`
  992. pars = append(pars, classifyId)
  993. }
  994. if indexCode != "" {
  995. condition += ` AND index_code=? `
  996. pars = append(pars, indexCode)
  997. }
  998. indexList, err := data_manage.GetUsdaFasIndex(condition, pars)
  999. if err != nil {
  1000. fmt.Println("获取数据失败,Err:" + err.Error())
  1001. return
  1002. }
  1003. if len(indexList) <= 0 {
  1004. fmt.Println("indexList 为空")
  1005. br.Ret = 200
  1006. br.Success = true
  1007. br.Msg = "success"
  1008. return
  1009. }
  1010. indexCodeList := make([]string, 0)
  1011. frequenciesMap := make(map[string][]*data_manage.BaseFromUsdaFasIndexList)
  1012. for _, v := range indexList {
  1013. indexCodeList = append(indexCodeList, v.IndexCode)
  1014. frequenciesMap[v.Frequency] = append(frequenciesMap[v.Frequency], v)
  1015. }
  1016. dataListMap := make(map[string][]*data_manage.BaseFromUsdaFasData)
  1017. if len(indexList) > 0 {
  1018. allDataList, e := data_manage.GetUsdaFasIndexDataByCodes(indexCodeList)
  1019. if e != nil {
  1020. br.Msg = "获取数据失败"
  1021. br.ErrMsg = "获取数据失败,Err:" + e.Error()
  1022. return
  1023. }
  1024. for _, v := range allDataList {
  1025. dataListMap[v.IndexCode] = append(dataListMap[v.IndexCode], v)
  1026. }
  1027. }
  1028. // 按照频率分组排序
  1029. frequencies := []string{
  1030. "日度", "周度", "旬度", "月度", "季度", "半年度", "年度",
  1031. }
  1032. for _, frequency := range frequencies {
  1033. //获取指标
  1034. indexCodeList, ok := frequenciesMap[frequency]
  1035. if !ok {
  1036. continue
  1037. }
  1038. if len(indexCodeList) <= 0 {
  1039. fmt.Printf("sheet:%s, 不存在指标", frequency)
  1040. return
  1041. }
  1042. var sheetName string
  1043. switch frequency {
  1044. case "日度":
  1045. sheetName = "日度(Daily)"
  1046. case "周度":
  1047. sheetName = "周度(Weekly)"
  1048. case "旬度":
  1049. sheetName = "旬度(ten-day)"
  1050. case "月度":
  1051. sheetName = "月度(Monthly)"
  1052. case "季度":
  1053. sheetName = "季度(Quarterly)"
  1054. case "半年度":
  1055. sheetName = "半年度(Semi-annual)"
  1056. case "年度":
  1057. sheetName = "年度(Annual)"
  1058. default:
  1059. sheetName = "其他数据"
  1060. }
  1061. sheetNew, err := xlsxFile.AddSheet(sheetName)
  1062. if err != nil {
  1063. fmt.Println("新增Sheet失败", err.Error())
  1064. return
  1065. }
  1066. secNameRow := sheetNew.AddRow()
  1067. frequencyRow := sheetNew.AddRow()
  1068. unitRow := sheetNew.AddRow()
  1069. lastModifyDateRow := sheetNew.AddRow()
  1070. var indexIdList []int
  1071. for _, idx := range frequenciesMap[frequency] {
  1072. indexIdList = append(indexIdList, idx.BaseFromUsdaFasIndexId)
  1073. }
  1074. dataTimeList, err := data_manage.GetUsdaFasDataDataTimeByIndexId(indexIdList)
  1075. if err != nil {
  1076. fmt.Println("获取数据时间失败", err.Error())
  1077. return
  1078. }
  1079. // 添加excel左侧指标日期
  1080. setRowIndex := 4
  1081. for rk, dv := range dataTimeList {
  1082. rowIndex := setRowIndex + rk
  1083. row := sheetNew.Row(rowIndex)
  1084. displayDate, _ := time.Parse(utils.FormatDate, dv)
  1085. displayDateCell := row.AddCell()
  1086. style := new(xlsx.Style)
  1087. style.ApplyAlignment = true
  1088. style.Alignment.WrapText = true
  1089. displayDateCell.SetStyle(style)
  1090. displayDateCell.SetDate(displayDate)
  1091. }
  1092. for k, icl := range indexCodeList {
  1093. // 获取数据
  1094. dataList, ok := dataListMap[icl.IndexCode]
  1095. if !ok {
  1096. continue
  1097. }
  1098. if k == 0 {
  1099. secNameRow.AddCell().SetValue("指标名称/Metric Name")
  1100. frequencyRow.AddCell().SetValue("频度/Frequency")
  1101. unitRow.AddCell().SetValue("单位/Unit")
  1102. lastModifyDateRow.AddCell().SetValue("更新时间/Update Time")
  1103. min := k * 3
  1104. sheetNew.SetColWidth(min, min, 15)
  1105. }
  1106. if len(dataList) == 0 {
  1107. continue
  1108. }
  1109. secNameRow.AddCell().SetValue(icl.IndexName)
  1110. frequencyRow.AddCell().SetValue(icl.Frequency)
  1111. unitRow.AddCell().SetValue(icl.Unit)
  1112. timeDate, err := time.Parse(utils.FormatDateTime, dataList[0].ModifyTime)
  1113. if err != nil {
  1114. continue
  1115. }
  1116. lastModifyDateRow.AddCell().SetValue(timeDate.Format(utils.FormatDate))
  1117. dataInfoMap := make(map[string]*data_manage.BaseFromUsdaFasData)
  1118. for _, v := range dataList {
  1119. dataInfoMap[v.DataTime] = v
  1120. }
  1121. for rk, dtv := range dataTimeList {
  1122. rowIndex := setRowIndex + rk
  1123. row := sheetNew.Row(rowIndex)
  1124. displayDateCell := row.AddCell()
  1125. tmpData, ok := dataInfoMap[dtv]
  1126. if ok {
  1127. displayDateCell.SetValue(tmpData.Value)
  1128. }
  1129. }
  1130. }
  1131. }
  1132. err = xlsxFile.Save(downLoadnFilePath)
  1133. if err != nil {
  1134. //有指标无数据时先导出一遍空表
  1135. sheet, err := xlsxFile.AddSheet("无数据")
  1136. if err != nil {
  1137. br.Msg = "新增Sheet失败"
  1138. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1139. return
  1140. }
  1141. rowSecName := sheet.AddRow()
  1142. celSecName := rowSecName.AddCell()
  1143. celSecName.SetValue("")
  1144. err = xlsxFile.Save(downLoadnFilePath)
  1145. if err != nil {
  1146. br.Msg = "保存文件失败"
  1147. br.ErrMsg = "保存文件失败"
  1148. return
  1149. }
  1150. }
  1151. fileName := classifyName
  1152. if indexCode != "" && len(indexList) == 1 {
  1153. fileName = indexList[0].IndexName
  1154. }
  1155. fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称
  1156. this.Ctx.Output.Download(downLoadnFilePath, fileName)
  1157. defer func() {
  1158. os.Remove(downLoadnFilePath)
  1159. }()
  1160. br.Ret = 200
  1161. br.Success = true
  1162. br.Msg = "success"
  1163. }