eta_forum_hub.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. package eta_forum
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models/data_manage"
  5. "eta/eta_api/models/data_manage/chart_theme"
  6. "eta/eta_api/models/system"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. )
  10. type UploadChartToForumReq struct {
  11. ChartInfoId int `description:"图表ID"`
  12. Description string `description:"逻辑简述"`
  13. }
  14. type UpdateChartToForumReq struct {
  15. ChartInfoId int `description:"图表ID"`
  16. }
  17. type ChartSaveLibReq struct {
  18. ChartInfo *data_manage.ChartInfo
  19. Description string `description:"逻辑简述"`
  20. EdbInfoList []*data_manage.EdbInfo
  21. ChartThemeList []*chart_theme.ChartTheme
  22. EdbInfoDataList []*AddEdbDataReq
  23. ChartEdbMapping []*data_manage.ChartEdbMapping
  24. EdbInfoCalculateMapping []*data_manage.EdbInfoCalculateMapping
  25. }
  26. type ChartSaveLibResp struct {
  27. Ret int
  28. Msg string
  29. ErrMsg string
  30. ErrCode string
  31. Data *data_manage.AddChartInfoResp
  32. Success bool `description:"true 执行成功,false 执行失败"`
  33. IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
  34. IsAddLog bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
  35. }
  36. type AddEdbDataReq struct {
  37. EdbCode string
  38. EdbType int
  39. DataList []*data_manage.EdbDataBase
  40. }
  41. type DeleteChartReq struct {
  42. ChartInfoId int `description:"图表id"`
  43. }
  44. // UploadChart 上传图表接口
  45. func UploadChart(chartInfoId int, description string) (err error, errMsg string) {
  46. // 查询图表信息
  47. chartInfo, err := data_manage.GetChartInfoById(chartInfoId)
  48. if err != nil {
  49. if err.Error() == utils.ErrNoRow() {
  50. errMsg = "图表不存在"
  51. err = fmt.Errorf(errMsg)
  52. return
  53. }
  54. errMsg = "获取图表信息失败"
  55. err = fmt.Errorf("获取图表信息失败,Err:" + err.Error())
  56. return
  57. }
  58. if chartInfo.ForumChartInfoId > 0 {
  59. errMsg = "该图表已上传至社区,无法再次上传"
  60. err = fmt.Errorf(errMsg)
  61. return
  62. }
  63. //查询图表主题
  64. //查询图表指标
  65. //获取原图表关联的指标信息列表
  66. chartMappingList, err := data_manage.GetChartMappingList(chartInfoId)
  67. if err != nil {
  68. errMsg = "获取图表关联的指标信息失败"
  69. err = fmt.Errorf("获取图表关联的指标信息失败,Err:" + err.Error())
  70. return
  71. }
  72. edbIds := make([]int, 0)
  73. for _, v := range chartMappingList {
  74. edbIds = append(edbIds, v.EdbInfoId)
  75. }
  76. var (
  77. edbInfoList []*data_manage.EdbInfo
  78. edbMappingList []*data_manage.EdbInfoCalculateMapping
  79. edbInfoDataList []*AddEdbDataReq
  80. )
  81. //查询指标详情
  82. edbInfoList, edbMappingList, edbInfoDataList, err = GetEdbListByEdbInfoId(edbIds)
  83. if err != nil {
  84. errMsg = "获取指标详情失败"
  85. err = fmt.Errorf("获取指标详情失败,Err:" + err.Error())
  86. return
  87. }
  88. req := new(ChartSaveLibReq)
  89. req.ChartInfo = chartInfo
  90. req.ChartEdbMapping = chartMappingList
  91. req.EdbInfoList = edbInfoList
  92. req.EdbInfoDataList = edbInfoDataList
  93. req.EdbInfoCalculateMapping = edbMappingList
  94. req.Description = description
  95. // 添加计算指标
  96. reqJson, err := json.Marshal(req)
  97. if err != nil {
  98. errMsg = "参数解析异常"
  99. err = fmt.Errorf("参数解析异常,Err:" + err.Error())
  100. return
  101. }
  102. respItem, err := ChartSaveLib(string(reqJson))
  103. if err != nil {
  104. errMsg = "上传失败"
  105. err = fmt.Errorf("上传失败,Err:" + err.Error())
  106. return
  107. }
  108. if respItem.Ret != 200 {
  109. errMsg = "上传失败"
  110. err = fmt.Errorf(respItem.ErrMsg)
  111. return
  112. }
  113. if respItem.Data != nil && respItem.Data.ChartInfoId != 0 {
  114. // 更新社区返回的图表ID
  115. err = data_manage.SetForumChartInfoId(chartInfoId, respItem.Data.ChartInfoId)
  116. if err != nil {
  117. errMsg = "更新图表ID失败"
  118. err = fmt.Errorf("更新图表ID失败,Err:" + err.Error())
  119. return
  120. }
  121. }
  122. return
  123. }
  124. // UpdateChart 更新社区里的图表接口
  125. func UpdateChart(chartInfoId int) (err error, errMsg string) {
  126. // 查询图表信息
  127. chartInfo, err := data_manage.GetChartInfoById(chartInfoId)
  128. if err != nil {
  129. if err.Error() == utils.ErrNoRow() {
  130. errMsg = "图表不存在"
  131. err = fmt.Errorf(errMsg)
  132. return
  133. }
  134. errMsg = "获取图表信息失败"
  135. err = fmt.Errorf("获取图表信息失败,Err:" + err.Error())
  136. return
  137. }
  138. if chartInfo.ForumChartInfoId <= 0 {
  139. errMsg = "该图表未上传至社区"
  140. err = fmt.Errorf(errMsg)
  141. return
  142. }
  143. //查询图表主题
  144. //查询图表指标
  145. //获取原图表关联的指标信息列表
  146. chartMappingList, err := data_manage.GetChartMappingList(chartInfoId)
  147. if err != nil {
  148. errMsg = "获取图表关联的指标信息失败"
  149. err = fmt.Errorf("获取图表关联的指标信息失败,Err:" + err.Error())
  150. return
  151. }
  152. edbIds := make([]int, 0)
  153. for _, v := range chartMappingList {
  154. edbIds = append(edbIds, v.EdbInfoId)
  155. }
  156. var (
  157. edbInfoList []*data_manage.EdbInfo
  158. edbMappingList []*data_manage.EdbInfoCalculateMapping
  159. edbInfoDataList []*AddEdbDataReq
  160. )
  161. //查询指标详情
  162. edbInfoList, edbMappingList, edbInfoDataList, err = GetEdbListByEdbInfoId(edbIds)
  163. if err != nil {
  164. errMsg = "获取指标详情失败"
  165. err = fmt.Errorf("获取指标详情失败,Err:" + err.Error())
  166. return
  167. }
  168. req := new(ChartSaveLibReq)
  169. req.ChartInfo = chartInfo
  170. req.ChartInfo.ChartInfoId = chartInfo.ForumChartInfoId
  171. req.ChartEdbMapping = chartMappingList
  172. req.EdbInfoList = edbInfoList
  173. req.EdbInfoDataList = edbInfoDataList
  174. req.EdbInfoCalculateMapping = edbMappingList
  175. // 添加计算指标
  176. reqJson, err := json.Marshal(req)
  177. if err != nil {
  178. errMsg = "参数解析异常"
  179. err = fmt.Errorf("参数解析异常,Err:" + err.Error())
  180. return
  181. }
  182. respItem, err := ChartUpdateLib(string(reqJson))
  183. if err != nil {
  184. errMsg = "更新失败"
  185. err = fmt.Errorf("上传失败,Err:" + err.Error())
  186. return
  187. }
  188. if respItem.Ret != 200 {
  189. errMsg = "更新失败"
  190. err = fmt.Errorf(respItem.ErrMsg)
  191. return
  192. }
  193. return
  194. }
  195. func GetEdbListByEdbInfoId(edbInfoIds []int) (edbInfoList []*data_manage.EdbInfo, edbMappingList []*data_manage.EdbInfoCalculateMapping, edbInfoDataList []*AddEdbDataReq, err error) {
  196. //查询指标信息
  197. //查询指标映射
  198. //查询所有指标数据
  199. //查询这个指标相关的mapping信息放到数组里,
  200. //将得到的指标ID信息放到数组里
  201. hasFindMap := make(map[int]struct{})
  202. edbInfoIdMap := make(map[int]struct{})
  203. edbMappingList = make([]*data_manage.EdbInfoCalculateMapping, 0)
  204. edbMappingMap := make(map[int]struct{})
  205. for _, edbInfoId := range edbInfoIds {
  206. edbMappingList, err = traceEdbInfoByEdbInfoId(edbInfoId, hasFindMap, edbInfoIdMap, edbMappingList, edbMappingMap)
  207. if err != nil {
  208. return
  209. }
  210. }
  211. // 指标信息map
  212. edbInfoIdList := make([]int, 0)
  213. for k, _ := range edbInfoIdMap {
  214. edbInfoIdList = append(edbInfoIdList, k)
  215. }
  216. edbInfoList, err = data_manage.GetEdbInfoByIdList(edbInfoIdList)
  217. if err != nil {
  218. err = fmt.Errorf("traceEdbInfoByEdbInfoId GetEdbInfoByIdList err: %s", err.Error())
  219. return
  220. }
  221. for _, v := range edbInfoList {
  222. dataList, e := data_manage.GetEdbDataBaseByEdbCode(v.EdbInfoId, v.Source, v.SubSource)
  223. if e != nil {
  224. err = fmt.Errorf("查询指标数据失败 Err: %s", e.Error())
  225. return
  226. }
  227. tmp := new(AddEdbDataReq)
  228. tmp.EdbCode = v.EdbCode
  229. tmp.EdbType = v.EdbType
  230. tmp.DataList = dataList
  231. edbInfoDataList = append(edbInfoDataList, tmp)
  232. }
  233. return
  234. }
  235. // traceEdbInfoByEdbInfoId 指标追溯
  236. func traceEdbInfoByEdbInfoId(edbInfoId int, hasFindMap map[int]struct{}, edbInfoIdMap map[int]struct{}, edbMappingList []*data_manage.EdbInfoCalculateMapping, edbMappingMap map[int]struct{}) (newEdbMappingList []*data_manage.EdbInfoCalculateMapping, err error) {
  237. newEdbMappingList = edbMappingList
  238. _, ok := hasFindMap[edbInfoId]
  239. if ok {
  240. return
  241. }
  242. if _, ok1 := edbInfoIdMap[edbInfoId]; !ok1 {
  243. edbInfoIdMap[edbInfoId] = struct{}{}
  244. }
  245. edbInfoMappingList, e := data_manage.GetEdbInfoCalculateMappingListByEdbInfoId(edbInfoId)
  246. if e != nil {
  247. err = fmt.Errorf("GetEdbInfoCalculateMappingListByEdbInfoId err: %s", e.Error())
  248. return
  249. }
  250. if len(edbInfoMappingList) > 0 {
  251. fromEdbInfoIdList := make([]int, 0)
  252. for _, v := range edbInfoMappingList {
  253. fromEdbInfoIdList = append(fromEdbInfoIdList, v.FromEdbInfoId)
  254. if _, ok1 := edbInfoIdMap[v.FromEdbInfoId]; !ok1 {
  255. edbInfoIdMap[v.FromEdbInfoId] = struct{}{}
  256. }
  257. if _, ok2 := edbMappingMap[v.EdbInfoCalculateMappingId]; !ok2 {
  258. edbMappingMap[v.EdbInfoCalculateMappingId] = struct{}{}
  259. tmp := &data_manage.EdbInfoCalculateMapping{
  260. EdbInfoCalculateMappingId: v.EdbInfoCalculateMappingId,
  261. EdbInfoId: v.EdbInfoId,
  262. Source: v.Source,
  263. SourceName: v.SourceName,
  264. EdbCode: v.EdbCode,
  265. FromEdbInfoId: v.FromEdbInfoId,
  266. FromEdbCode: v.FromEdbCode,
  267. FromEdbName: v.FromEdbName,
  268. FromSource: v.FromSource,
  269. FromSourceName: v.FromSourceName,
  270. FromTag: v.FromTag,
  271. Sort: v.Sort,
  272. CreateTime: v.CreateTime,
  273. ModifyTime: v.ModifyTime,
  274. }
  275. newEdbMappingList = append(newEdbMappingList, tmp)
  276. }
  277. if edbInfoId != v.FromEdbInfoId && (v.FromEdbType == 2 || v.FromEdbInfoType == 1) {
  278. // 查过了就不查了
  279. if _, ok2 := hasFindMap[v.FromEdbInfoId]; !ok2 {
  280. newEdbMappingList, e = traceEdbInfoByEdbInfoId(v.FromEdbInfoId, hasFindMap, edbInfoIdMap, newEdbMappingList, edbMappingMap)
  281. if e != nil {
  282. err = fmt.Errorf("traceEdbInfoByEdbInfoId err: %s", e.Error())
  283. return
  284. }
  285. }
  286. }
  287. hasFindMap[v.FromEdbInfoId] = struct{}{}
  288. }
  289. }
  290. hasFindMap[edbInfoId] = struct{}{}
  291. return
  292. }
  293. // DeleteChart 上传图表接口
  294. func DeleteChart(chartInfoId int) (err error, errMsg string) {
  295. // 查询图表信息
  296. chartInfo, err := data_manage.GetChartInfoById(chartInfoId)
  297. if err != nil {
  298. if err.Error() == utils.ErrNoRow() {
  299. errMsg = "图表不存在"
  300. err = fmt.Errorf(errMsg)
  301. return
  302. }
  303. errMsg = "获取图表信息失败"
  304. err = fmt.Errorf("获取图表信息失败,Err:" + err.Error())
  305. return
  306. }
  307. if chartInfo.ForumChartInfoId <= 0 {
  308. errMsg = "该图表未上传至社区,无需撤回"
  309. err = fmt.Errorf(errMsg)
  310. return
  311. }
  312. req := new(DeleteChartReq)
  313. req.ChartInfoId = chartInfo.ForumChartInfoId
  314. // 添加计算指标
  315. reqJson, err := json.Marshal(req)
  316. if err != nil {
  317. errMsg = "参数解析异常"
  318. err = fmt.Errorf("参数解析异常,Err:" + err.Error())
  319. return
  320. }
  321. respItem, err := ChartDeleteLib(string(reqJson))
  322. if err != nil {
  323. errMsg = "撤回失败"
  324. err = fmt.Errorf("撤回失败,Err:" + err.Error())
  325. return
  326. }
  327. if respItem.Ret != 200 {
  328. errMsg = "撤回失败"
  329. err = fmt.Errorf(respItem.ErrMsg)
  330. return
  331. }
  332. // 更新社区返回的图表ID
  333. err = data_manage.SetForumChartInfoId(chartInfoId, 0)
  334. if err != nil {
  335. errMsg = "撤回失败"
  336. err = fmt.Errorf("更新图表ID失败,Err:" + err.Error())
  337. return
  338. }
  339. return
  340. }
  341. type AdminSaveReq struct {
  342. *system.Admin
  343. BusinessCode string `description:"商家编码"`
  344. }
  345. // 上传管理员信息
  346. func AdminSave(adminId int) (err error) {
  347. if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
  348. return
  349. }
  350. //查询用户信息
  351. adminInfo, err := system.GetSysAdminById(adminId)
  352. if err != nil {
  353. if err.Error() == utils.ErrNoRow() {
  354. err = fmt.Errorf("用户不存在")
  355. return
  356. }
  357. err = fmt.Errorf("获取用户信息失败,Err:" + err.Error())
  358. return
  359. }
  360. var req AdminSaveReq
  361. req.Admin = adminInfo
  362. req.BusinessCode = utils.BusinessCode
  363. reqJson, err := json.Marshal(req)
  364. if err != nil {
  365. err = fmt.Errorf("参数解析异常,Err:" + err.Error())
  366. return
  367. }
  368. respItem, err := AdminSaveLib(string(reqJson))
  369. if err != nil {
  370. err = fmt.Errorf("上传管理员信息失败,Err:" + err.Error())
  371. return
  372. }
  373. if respItem.Ret != 200 {
  374. err = fmt.Errorf("上传管理员信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
  375. return
  376. }
  377. return
  378. }
  379. type AdminDeleteReq struct {
  380. AdminName string
  381. BusinessCode string `description:"商家编码"`
  382. }
  383. // 上传管理员信息
  384. func AdminDelete(adminName string) (err error) {
  385. if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
  386. return
  387. }
  388. var req AdminDeleteReq
  389. req.AdminName = adminName
  390. req.BusinessCode = utils.BusinessCode
  391. reqJson, err := json.Marshal(req)
  392. if err != nil {
  393. err = fmt.Errorf("参数解析异常,Err:" + err.Error())
  394. return
  395. }
  396. respItem, err := AdminDeleteLib(string(reqJson))
  397. if err != nil {
  398. err = fmt.Errorf("删除管理员信息失败,Err:" + err.Error())
  399. return
  400. }
  401. if respItem.Ret != 200 {
  402. err = fmt.Errorf("删除管理员信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
  403. return
  404. }
  405. return
  406. }