chart_info.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604
  1. package services
  2. import (
  3. "context"
  4. "encoding/json"
  5. "eta/eta_forum_task/models"
  6. "eta/eta_forum_task/services/alarm_msg"
  7. "eta/eta_forum_task/services/eta_forum"
  8. "eta/eta_forum_task/utils"
  9. "fmt"
  10. "strconv"
  11. "time"
  12. )
  13. func EtaForumChartUpdate(cont context.Context) (err error) {
  14. err = ChartInfoSaveBatch()
  15. return
  16. }
  17. // UpdateChart 更新社区里的图表接口
  18. func UpdateChart(chartInfoId int) (err error, errMsg string) {
  19. // 设置缓存 防止重复更新
  20. cacheKey := "eta_forum_task:UpdateChart:" + strconv.Itoa(chartInfoId)
  21. if utils.Rc.Get(cacheKey) != nil {
  22. err = fmt.Errorf("系统处理中,请稍后重试!")
  23. return
  24. }
  25. utils.Rc.SetNX(cacheKey, 1, 10*time.Minute)
  26. defer func() {
  27. if err != nil {
  28. go alarm_msg.SendAlarmMsg(fmt.Sprintf("更新图表至社区失败:Err:%v,ErrMsg:%s", err, errMsg), 3)
  29. }
  30. utils.Rc.Delete(cacheKey)
  31. }()
  32. // 查询图表信息
  33. chartInfo, err := models.GetChartInfoById(chartInfoId)
  34. if err != nil {
  35. if err.Error() == utils.ErrNoRow() {
  36. errMsg = "图表不存在"
  37. err = fmt.Errorf(errMsg)
  38. return
  39. }
  40. errMsg = "获取图表信息失败"
  41. err = fmt.Errorf("获取图表信息失败,Err:" + err.Error())
  42. return
  43. }
  44. if chartInfo.ForumChartInfoId <= 0 {
  45. return
  46. }
  47. //查询图表指标
  48. //获取原图表关联的指标信息列表
  49. chartMappingList, err := models.GetChartMappingList(chartInfoId)
  50. if err != nil {
  51. errMsg = "获取图表关联的指标信息失败"
  52. err = fmt.Errorf("获取图表关联的指标信息失败,Err:" + err.Error())
  53. return
  54. }
  55. edbIds := make([]int, 0)
  56. edbInfoStr := ""
  57. for _, v := range chartMappingList {
  58. edbIds = append(edbIds, v.EdbInfoId)
  59. edbInfoStr += strconv.Itoa(v.EdbInfoId) + ","
  60. }
  61. chartSeriesList := make([]*models.ChartSeries, 0)
  62. chartSeriesEdbList := make([]*models.ChartSeriesEdbMapping, 0)
  63. if chartInfo.ChartType == utils.CHART_TYPE_SECTION_COMBINE {
  64. chartSeriesList, err = models.GetChartSeriesByChartInfoId(chartInfoId)
  65. if err != nil {
  66. errMsg = "获取图表关联的系列信息失败"
  67. err = fmt.Errorf("获取图表关联的系列信息失败,Err:" + err.Error())
  68. return
  69. }
  70. chartSeriesEdbList, err = models.GetChartSeriesEdbByChartInfoId(chartInfoId)
  71. if err != nil {
  72. errMsg = "获取图表关联的系列指标信息失败"
  73. err = fmt.Errorf("获取图表关联的系列指标信息失败,Err:" + err.Error())
  74. return
  75. }
  76. }
  77. var (
  78. edbInfoList []*models.EdbInfo
  79. edbMappingList []*models.EdbInfoCalculateMapping
  80. edbInfoDataList []*eta_forum.AddEdbDataReq
  81. )
  82. //查询指标详情
  83. isGetEdbData := false
  84. // 查询投研资源库里的图表和指标绑定关系
  85. oldEdbInfoStr, err := models.GetEdbInfoIdsByChartInfoId(chartInfoId)
  86. if err != nil {
  87. errMsg = "获取投研资源库里的图表和指标绑定关系失败"
  88. err = fmt.Errorf("获取投研资源库里的图表和指标绑定关系失败,Err:" + err.Error())
  89. return
  90. }
  91. if oldEdbInfoStr != edbInfoStr { // 图表更换过指标需要重新获取指标数据
  92. isGetEdbData = true
  93. }
  94. edbInfoList, edbMappingList, edbInfoDataList, err = GetEdbListByEdbInfoId(edbIds, isGetEdbData)
  95. if err != nil {
  96. errMsg = "获取指标详情失败"
  97. err = fmt.Errorf("获取指标详情失败,Err:" + err.Error())
  98. return
  99. }
  100. descriptionList, err, errMsg := getChartDescriptionWithAdminNameByChartInfoId(chartInfoId)
  101. if err != nil {
  102. errMsg = "获取图表简介失败"
  103. err = fmt.Errorf("获取图表简介失败,Err:" + err.Error())
  104. return
  105. }
  106. req := new(eta_forum.ChartSaveLibReq)
  107. req.ChartInfo = chartInfo
  108. req.ChartInfo.ChartInfoId = chartInfo.ForumChartInfoId
  109. req.ChartEdbMapping = chartMappingList
  110. req.EdbInfoList = edbInfoList
  111. req.EdbInfoDataList = edbInfoDataList
  112. req.EdbInfoCalculateMapping = edbMappingList
  113. req.ChartSeries = chartSeriesList
  114. req.ChartSeriesEdbMapping = chartSeriesEdbList
  115. req.Description = descriptionList
  116. // 查询创建者信息
  117. creatorInfo, _ := models.GetSysUserById(chartInfo.SysUserId)
  118. if creatorInfo != nil {
  119. req.CreatorInfo = creatorInfo
  120. }
  121. // 添加计算指标
  122. reqJson, err := json.Marshal(req)
  123. if err != nil {
  124. errMsg = "参数解析异常"
  125. err = fmt.Errorf("参数解析异常,Err:" + err.Error())
  126. return
  127. }
  128. respItem, err := eta_forum.ChartUpdateLib(string(reqJson))
  129. if err != nil {
  130. errMsg = "更新失败"
  131. err = fmt.Errorf("上传失败,Err:" + err.Error())
  132. return
  133. }
  134. if respItem.Ret != 200 {
  135. errMsg = "更新失败"
  136. err = fmt.Errorf(respItem.ErrMsg)
  137. return
  138. }
  139. // 更新投研资源库里的图表和指标绑定关系
  140. if oldEdbInfoStr != edbInfoStr {
  141. err = models.UpdateForumChartEdbMapping(chartInfoId, edbInfoStr)
  142. if err != nil {
  143. errMsg = "更新投研资源库里的图表和指标绑定关系失败"
  144. err = fmt.Errorf("更新投研资源库里的图表和指标绑定关系失败,Err:" + err.Error())
  145. return
  146. }
  147. }
  148. return
  149. }
  150. func GetEdbListByEdbInfoId(edbInfoIds []int, isGetEdbData bool) (edbInfoList []*models.EdbInfo, edbMappingList []*models.EdbInfoCalculateMapping, edbInfoDataList []*eta_forum.AddEdbDataReq, err error) {
  151. //查询指标信息
  152. //查询指标映射
  153. //查询所有指标数据
  154. //查询这个指标相关的mapping信息放到数组里,
  155. //将得到的指标ID信息放到数组里
  156. chartEdbInfoIdMap := make(map[int]struct{}) //只查询图表上直接相关的指标数据
  157. hasFindMap := make(map[int]struct{})
  158. edbInfoIdMap := make(map[int]struct{})
  159. edbMappingList = make([]*models.EdbInfoCalculateMapping, 0)
  160. edbMappingMap := make(map[int]struct{})
  161. for _, edbInfoId := range edbInfoIds {
  162. chartEdbInfoIdMap[edbInfoId] = struct{}{}
  163. edbMappingList, err = traceEdbInfoByEdbInfoId(edbInfoId, hasFindMap, edbInfoIdMap, edbMappingList, edbMappingMap)
  164. if err != nil {
  165. return
  166. }
  167. }
  168. // 指标信息map
  169. edbInfoIdList := make([]int, 0)
  170. for k, _ := range edbInfoIdMap {
  171. edbInfoIdList = append(edbInfoIdList, k)
  172. }
  173. edbInfoList, err = models.GetEdbInfoByIdList(edbInfoIdList)
  174. if err != nil {
  175. err = fmt.Errorf("traceEdbInfoByEdbInfoId GetEdbInfoByIdList err: %s", err.Error())
  176. return
  177. }
  178. if isGetEdbData {
  179. for _, v := range edbInfoList {
  180. if _, ok := chartEdbInfoIdMap[v.EdbInfoId]; !ok {
  181. continue
  182. }
  183. var dataList []*models.EdbDataBase
  184. if v.Source == utils.DATA_SOURCE_BUSINESS && utils.UseMongo {
  185. dataList, err = models.GetEdbDataBaseMongoByEdbInfoId(v.EdbInfoId, v.Source, v.SubSource)
  186. } else if v.Source == utils.DATA_SOURCE_THS && v.SubSource == utils.DATA_SUB_SOURCE_HIGH_FREQUENCY && utils.UseMongo {
  187. dataList, err = models.GetThsHfEdbDataBaseMongoByEdbInfoId(v.EdbInfoId, v.Source, v.SubSource)
  188. } else {
  189. dataList, err = models.GetEdbDataBaseByEdbInfoId(v.EdbInfoId, v.Source, v.SubSource)
  190. }
  191. if err != nil {
  192. err = fmt.Errorf("查询指标数据失败 Err: %s", err.Error())
  193. return
  194. }
  195. tmp := new(eta_forum.AddEdbDataReq)
  196. tmp.EdbInfoId = v.EdbInfoId
  197. tmp.EdbCode = v.EdbCode
  198. tmp.EdbType = v.EdbType
  199. tmp.DataList = dataList
  200. edbInfoDataList = append(edbInfoDataList, tmp)
  201. }
  202. }
  203. return
  204. }
  205. // traceEdbInfoByEdbInfoId 指标追溯
  206. func traceEdbInfoByEdbInfoId(edbInfoId int, hasFindMap map[int]struct{}, edbInfoIdMap map[int]struct{}, edbMappingList []*models.EdbInfoCalculateMapping, edbMappingMap map[int]struct{}) (newEdbMappingList []*models.EdbInfoCalculateMapping, err error) {
  207. newEdbMappingList = edbMappingList
  208. _, ok := hasFindMap[edbInfoId]
  209. if ok {
  210. return
  211. }
  212. if _, ok1 := edbInfoIdMap[edbInfoId]; !ok1 {
  213. edbInfoIdMap[edbInfoId] = struct{}{}
  214. }
  215. edbInfoMappingList, e := models.GetEdbInfoCalculateMappingListByEdbInfoId(edbInfoId)
  216. if e != nil {
  217. err = fmt.Errorf("GetEdbInfoCalculateMappingListByEdbInfoId err: %s", e.Error())
  218. return
  219. }
  220. if len(edbInfoMappingList) > 0 {
  221. fromEdbInfoIdList := make([]int, 0)
  222. for _, v := range edbInfoMappingList {
  223. fromEdbInfoIdList = append(fromEdbInfoIdList, v.FromEdbInfoId)
  224. if _, ok1 := edbInfoIdMap[v.FromEdbInfoId]; !ok1 {
  225. edbInfoIdMap[v.FromEdbInfoId] = struct{}{}
  226. }
  227. if _, ok2 := edbMappingMap[v.EdbInfoCalculateMappingId]; !ok2 {
  228. edbMappingMap[v.EdbInfoCalculateMappingId] = struct{}{}
  229. tmp := &models.EdbInfoCalculateMapping{
  230. EdbInfoCalculateMappingId: v.EdbInfoCalculateMappingId,
  231. EdbInfoId: v.EdbInfoId,
  232. Source: v.Source,
  233. SourceName: v.SourceName,
  234. EdbCode: v.EdbCode,
  235. FromEdbInfoId: v.FromEdbInfoId,
  236. FromEdbCode: v.FromEdbCode,
  237. FromEdbName: v.FromEdbName,
  238. FromSource: v.FromSource,
  239. FromSourceName: v.FromSourceName,
  240. FromTag: v.FromTag,
  241. Sort: v.Sort,
  242. CreateTime: v.CreateTime,
  243. ModifyTime: v.ModifyTime,
  244. }
  245. newEdbMappingList = append(newEdbMappingList, tmp)
  246. }
  247. if edbInfoId != v.FromEdbInfoId && (v.FromEdbType == 2 || v.FromEdbInfoType == 1) {
  248. // 查过了就不查了
  249. if _, ok2 := hasFindMap[v.FromEdbInfoId]; !ok2 {
  250. newEdbMappingList, e = traceEdbInfoByEdbInfoId(v.FromEdbInfoId, hasFindMap, edbInfoIdMap, newEdbMappingList, edbMappingMap)
  251. if e != nil {
  252. err = fmt.Errorf("traceEdbInfoByEdbInfoId err: %s", e.Error())
  253. return
  254. }
  255. }
  256. }
  257. hasFindMap[v.FromEdbInfoId] = struct{}{}
  258. }
  259. }
  260. hasFindMap[edbInfoId] = struct{}{}
  261. return
  262. }
  263. // 批量上传图表分类信息
  264. func ChartInfoSaveBatch() (err error) {
  265. var tmpErr []error
  266. cacheKey := "eta_forum_task:ChartInfoSaveBatchAdmin"
  267. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Minute) {
  268. err = fmt.Errorf("系统处理中,请稍后重试!")
  269. return
  270. }
  271. defer func() {
  272. utils.Rc.Delete(cacheKey)
  273. stack := ""
  274. if err != nil {
  275. stack = fmt.Sprintln(stack + err.Error())
  276. }
  277. if len(tmpErr) > 0 {
  278. for _, v := range tmpErr {
  279. stack = fmt.Sprintln(stack + v.Error())
  280. }
  281. }
  282. if stack != "" {
  283. utils.FileLog.Error("批量上传资源库图表信息失败"+"<br/>"+stack)
  284. go alarm_msg.SendAlarmMsg("批量上传资源库图表信息失败"+"<br/>"+stack, 3)
  285. }
  286. }()
  287. // 已上架的图表都更新,批量更新图表信息
  288. condition := " and source=1 and forum_chart_info_id > 0 and resource_status =1"
  289. // 查询需要更新的图表信息总数
  290. total, err := models.GetChartInfoCountByCondition(condition, []interface{}{})
  291. if err != nil {
  292. return
  293. }
  294. if total > 0 {
  295. // 批量上传图表信息
  296. offset := 0
  297. pageSize := 100
  298. success := 0
  299. // 循环更新100个图表数据
  300. for i := 0; offset < total; i++ {
  301. // 查询需要更新的图表信息
  302. chartInfos, e := models.GetChartInfoListByCondition(condition, []interface{}{}, offset, pageSize)
  303. if e != nil {
  304. err = fmt.Errorf("查询需要更新的图表信息失败: %v", e)
  305. return
  306. }
  307. if len(chartInfos) == 0 {
  308. break
  309. }
  310. // 循环更新图表数据
  311. for _, chartInfo := range chartInfos {
  312. var er error
  313. var msg string
  314. // 更新图表数据
  315. er, msg = UpdateChart(chartInfo.ChartInfoId)
  316. if er != nil {
  317. er = fmt.Errorf("图表ID %d, 更新图表数据失败: %s, %v", chartInfo.ChartInfoId, msg, er)
  318. tmpErr = append(tmpErr, er)
  319. continue
  320. }
  321. success += 1
  322. }
  323. offset += pageSize
  324. }
  325. utils.FileLog.Info("更新图表数据完成, 更新图表数据总数:", success)
  326. }
  327. // 更新指标数据
  328. utils.Rc.LPush(utils.CACHE_KEY_EDB_DATA_UPDATE_LOG, []byte("1"))
  329. sysUser, err := models.GetSysUserByAdminName("admin")
  330. if err != nil {
  331. err = fmt.Errorf("获取系统用户失败,Err:" + err.Error())
  332. return
  333. }
  334. // 获取精选资源分类已经上架的分类
  335. classifyCondition := " AND source=? and is_selected=1 and resource_status=1 "
  336. var classifyPars []interface{}
  337. classifyPars = append(classifyPars, utils.CHART_SOURCE_DEFAULT)
  338. classifyList, err := models.GetChartClassifyListByCondition(classifyCondition, classifyPars)
  339. if err != nil {
  340. return
  341. }
  342. chartClassifyIdList := make([]string, 0)
  343. for _, v := range classifyList {
  344. chartClassifyIdList = append(chartClassifyIdList, strconv.Itoa(v.ChartClassifyId))
  345. }
  346. if len(chartClassifyIdList) == 0 {
  347. return
  348. }
  349. // 批量上传图表信息
  350. condition = " and source=1 and forum_chart_info_id = 0 and chart_classify_id in ("+utils.GetOrmInReplace(len(chartClassifyIdList))+") and resource_status !=2"
  351. // 查询需要更新的图表信息总数
  352. total, err = models.GetChartInfoCountByCondition(condition, []interface{}{chartClassifyIdList})
  353. if err != nil {
  354. return
  355. }
  356. if total == 0 {
  357. return
  358. }
  359. // 批量上传图表信息
  360. offset := 0
  361. pageSize := 100
  362. success := 0
  363. // 计算需要分多少页
  364. pageNum := total / pageSize
  365. if total % pageSize != 0 {
  366. pageNum += 1
  367. }
  368. // 循环更新100个图表数据
  369. for i := 0; i < pageNum; i++ {
  370. // 查询需要更新的图表信息
  371. chartInfos, e := models.GetChartInfoListByCondition(condition, []interface{}{chartClassifyIdList}, offset, pageSize)
  372. if e != nil {
  373. err = fmt.Errorf("查询需要更新的图表信息失败: %v", e)
  374. return
  375. }
  376. if len(chartInfos) == 0 {
  377. break
  378. }
  379. // 循环更新图表数据
  380. for _, chartInfo := range chartInfos {
  381. var er error
  382. var msg string
  383. // 上传图表数据
  384. er, msg = UploadChart(chartInfo.ChartInfoId, "", sysUser)
  385. if er != nil {
  386. er = fmt.Errorf("图表ID %d, 上传图表数据失败: %s, %v", chartInfo.ChartInfoId, msg, er)
  387. tmpErr = append(tmpErr, er)
  388. continue
  389. }
  390. success += 1
  391. }
  392. }
  393. utils.FileLog.Info("上传图表数据完成, 上传图表数据总数:", success)
  394. return
  395. }
  396. // UploadChart 上传图表接口
  397. func UploadChart(chartInfoId int, description string, uploaderInfo *models.Admin) (err error, errMsg string) {
  398. // 设置缓存 防止重复上传
  399. cacheKey := "eta_forum_task:UploadChart:" + strconv.Itoa(chartInfoId)
  400. if utils.Rc.Get(cacheKey) != nil {
  401. err = fmt.Errorf("系统处理中,请稍后重试!")
  402. return
  403. }
  404. utils.Rc.SetNX(cacheKey, 1, 10*time.Minute)
  405. defer func() {
  406. if err != nil {
  407. go alarm_msg.SendAlarmMsg(fmt.Sprintf("上传图表至社区失败:Err:%v,ErrMsg:%s", err, errMsg), 3)
  408. }
  409. utils.Rc.Delete(cacheKey)
  410. }()
  411. // 查询图表信息
  412. chartInfo, err := models.GetChartInfoById(chartInfoId)
  413. if err != nil {
  414. if err.Error() == utils.ErrNoRow() {
  415. errMsg = "图表不存在"
  416. err = fmt.Errorf(errMsg)
  417. return
  418. }
  419. errMsg = "获取图表信息失败"
  420. err = fmt.Errorf("获取图表信息失败,Err:" + err.Error())
  421. return
  422. }
  423. if chartInfo.ForumChartInfoId > 0 {
  424. errMsg = "该图表已上传至社区,无法再次上传"
  425. err = fmt.Errorf(errMsg)
  426. return
  427. }
  428. //查询图表主题
  429. //查询图表指标
  430. //获取原图表关联的指标信息列表
  431. chartMappingList, err := models.GetChartMappingList(chartInfoId)
  432. if err != nil {
  433. errMsg = "获取图表关联的指标信息失败"
  434. err = fmt.Errorf("获取图表关联的指标信息失败,Err:" + err.Error())
  435. return
  436. }
  437. edbIds := make([]int, 0)
  438. edbInfoStr := ""
  439. for _, v := range chartMappingList {
  440. edbIds = append(edbIds, v.EdbInfoId)
  441. edbInfoStr += strconv.Itoa(v.EdbInfoId) + ","
  442. }
  443. chartSeriesList := make([]*models.ChartSeries, 0)
  444. chartSeriesEdbList := make([]*models.ChartSeriesEdbMapping, 0)
  445. if chartInfo.ChartType == utils.CHART_TYPE_SECTION_COMBINE {
  446. chartSeriesList, err = models.GetChartSeriesByChartInfoId(chartInfoId)
  447. if err != nil {
  448. errMsg = "获取图表关联的系列信息失败"
  449. err = fmt.Errorf("获取图表关联的系列信息失败,Err:" + err.Error())
  450. return
  451. }
  452. chartSeriesEdbList, err = models.GetChartSeriesEdbByChartInfoId(chartInfoId)
  453. if err != nil {
  454. errMsg = "获取图表关联的系列指标信息失败"
  455. err = fmt.Errorf("获取图表关联的系列指标信息失败,Err:" + err.Error())
  456. return
  457. }
  458. }
  459. var (
  460. edbInfoList []*models.EdbInfo
  461. edbMappingList []*models.EdbInfoCalculateMapping
  462. edbInfoDataList []*eta_forum.AddEdbDataReq
  463. )
  464. //查询指标详情
  465. edbInfoList, edbMappingList, edbInfoDataList, err = GetEdbListByEdbInfoId(edbIds, true)
  466. if err != nil {
  467. errMsg = "获取指标详情失败"
  468. err = fmt.Errorf("获取指标详情失败,Err:" + err.Error())
  469. return
  470. }
  471. descriptionList, err, errMsg := getChartDescriptionWithAdminNameByChartInfoId(chartInfoId)
  472. if err != nil {
  473. errMsg = "获取图表简介失败"
  474. err = fmt.Errorf("获取图表简介失败,Err:" + err.Error())
  475. return
  476. }
  477. req := new(eta_forum.ChartSaveLibReq)
  478. req.ChartInfo = chartInfo
  479. req.ChartEdbMapping = chartMappingList
  480. req.EdbInfoList = edbInfoList
  481. req.EdbInfoDataList = edbInfoDataList
  482. req.EdbInfoCalculateMapping = edbMappingList
  483. req.Description = descriptionList
  484. req.ChartSeries = chartSeriesList
  485. req.ChartSeriesEdbMapping = chartSeriesEdbList
  486. // 查询创建者信息
  487. creatorInfo, _ := models.GetSysUserById(chartInfo.SysUserId)
  488. if creatorInfo != nil {
  489. req.CreatorInfo = creatorInfo
  490. }
  491. req.UploaderInfo = uploaderInfo
  492. // 添加计算指标
  493. reqJson, err := json.Marshal(req)
  494. if err != nil {
  495. errMsg = "参数解析异常"
  496. err = fmt.Errorf("参数解析异常,Err:" + err.Error())
  497. return
  498. }
  499. respItem, err := eta_forum.ChartSaveLib(string(reqJson))
  500. if err != nil {
  501. errMsg = "上传失败"
  502. err = fmt.Errorf("上传失败,Err:" + err.Error())
  503. return
  504. }
  505. if respItem.Ret != 200 {
  506. errMsg = "上传失败"
  507. err = fmt.Errorf(respItem.ErrMsg)
  508. return
  509. }
  510. if respItem.Data != nil && respItem.Data.ChartInfoId != 0 {
  511. // 更新社区返回的图表ID
  512. err = models.SetForumChartInfoId(chartInfoId, respItem.Data.ChartInfoId, utils.ChartClassifyResourceStatusUp)
  513. if err != nil {
  514. errMsg = "更新图表ID失败"
  515. err = fmt.Errorf("更新图表ID失败,Err:" + err.Error())
  516. return
  517. }
  518. // 新增投研资源库里的图表和指标绑定关系
  519. err = models.AddForumChartEdbMapping(chartInfoId, edbInfoStr)
  520. if err != nil {
  521. errMsg = "新增投研资源库里的图表和指标绑定关系失败"
  522. err = fmt.Errorf("新增投研资源库里的图表和指标绑定关系失败,Err:" + err.Error())
  523. return
  524. }
  525. }
  526. return
  527. }
  528. func getChartDescriptionWithAdminNameByChartInfoId(chartInfoId int) (list []*models.ChartDescriptionReq, err error, errMsg string) {
  529. descriptionList, err := models.GetChartDescriptionByChartInfoId(chartInfoId)
  530. if err != nil {
  531. errMsg = "获取图表简介失败"
  532. err = fmt.Errorf("获取图表简介失败,Err:" + err.Error())
  533. return
  534. }
  535. // 查询创建者信息
  536. adminIdList := make([]int, 0)
  537. for _, v := range descriptionList {
  538. adminIdList = append(adminIdList, v.SysUserId)
  539. }
  540. adminList, err := models.GetAdminListByIdList(adminIdList)
  541. if err != nil {
  542. errMsg = "获取创建者信息失败"
  543. err = fmt.Errorf("获取创建者信息失败,Err:" + err.Error())
  544. return
  545. }
  546. adminMap := make(map[int]string)
  547. for _, v := range adminList {
  548. adminMap[v.AdminId] = v.AdminName
  549. }
  550. for _, v := range descriptionList {
  551. adminName, ok := adminMap[v.SysUserId]
  552. if !ok {
  553. adminName = ""
  554. }
  555. list = append(list, &models.ChartDescriptionReq{
  556. Id: v.Id,
  557. ChartInfoId: v.ChartInfoId,
  558. Description: v.Description,
  559. AdminName: adminName,
  560. SysUserId: v.SysUserId,
  561. SysUserRealName: v.SysUserRealName,
  562. ModifyTime: v.ModifyTime,
  563. CreateTime: v.CreateTime,
  564. })
  565. }
  566. return
  567. }