chart_info.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. package line_feature
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "hongze/hongze_ETA_mobile_api/controllers"
  7. "hongze/hongze_ETA_mobile_api/models"
  8. "hongze/hongze_ETA_mobile_api/models/data_manage"
  9. "hongze/hongze_ETA_mobile_api/models/data_manage/line_feature/request"
  10. "hongze/hongze_ETA_mobile_api/services/data"
  11. lineFeatureServ "hongze/hongze_ETA_mobile_api/services/data/line_feature"
  12. "hongze/hongze_ETA_mobile_api/utils"
  13. "strconv"
  14. "strings"
  15. "time"
  16. )
  17. // LineFeaturesChartInfoController 统计特征图表管理
  18. type LineFeaturesChartInfoController struct {
  19. controllers.BaseAuthController
  20. }
  21. // Refresh
  22. // @Title 图表刷新接口
  23. // @Description 图表刷新接口
  24. // @Param ChartInfoId query int true "图表id"
  25. // @Param UniqueCode query string true "唯一code"
  26. // @Success Ret=200 刷新成功
  27. // @router /chart_info/refresh [get]
  28. func (this *LineFeaturesChartInfoController) Refresh() {
  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. chartInfoId, _ := this.GetInt("ChartInfoId")
  42. uniqueCode := this.GetString("UniqueCode")
  43. if chartInfoId <= 0 && uniqueCode == `` {
  44. br.Msg = "参数错误"
  45. br.ErrMsg = "参数错误:chartInfoId:" + strconv.Itoa(chartInfoId) + ",UniqueCode:" + uniqueCode
  46. return
  47. }
  48. var chartInfo *data_manage.ChartInfo
  49. var err error
  50. if chartInfoId > 0 {
  51. chartInfo, err = data_manage.GetChartInfoById(chartInfoId)
  52. } else {
  53. chartInfo, err = data_manage.GetChartInfoByUniqueCode(uniqueCode)
  54. }
  55. if err != nil {
  56. if err.Error() == utils.ErrNoRow() {
  57. br.Msg = "图表已被删除,无需刷新"
  58. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  59. return
  60. }
  61. br.Msg = "刷新失败"
  62. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  63. return
  64. }
  65. // 刷新图表的指标信息
  66. err = data.ChartInfoRefreshV2(chartInfo.ChartInfoId)
  67. //清除图表缓存
  68. {
  69. key := utils.HZ_CHART_LIB_DETAIL + chartInfo.UniqueCode
  70. _ = utils.Rc.Delete(key)
  71. }
  72. br.Ret = 200
  73. br.Success = true
  74. br.Msg = "刷新成功"
  75. }
  76. // Copy
  77. // @Title 复制并新增图表接口
  78. // @Description 复制并新增图表接口
  79. // @Param request body data_manage.CopyAddChartInfoReq true "type json string"
  80. // @Success 200 {object} data_manage.AddChartInfoResp
  81. // @router /chart_info/copy [post]
  82. func (this *LineFeaturesChartInfoController) Copy() {
  83. br := new(models.BaseResponse).Init()
  84. defer func() {
  85. this.Data["json"] = br
  86. this.ServeJSON()
  87. }()
  88. sysUser := this.SysUser
  89. if sysUser == nil {
  90. br.Msg = "请登录"
  91. br.ErrMsg = "请登录,SysUser Is Empty"
  92. br.Ret = 408
  93. return
  94. }
  95. deleteCache := true
  96. cacheKey := "CACHE_CHART_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
  97. defer func() {
  98. if deleteCache {
  99. utils.Rc.Delete(cacheKey)
  100. }
  101. }()
  102. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  103. deleteCache = false
  104. br.Msg = "系统处理中,请稍后重试!"
  105. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  106. return
  107. }
  108. var req data_manage.CopyAddChartInfoReq
  109. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  110. if err != nil {
  111. br.Msg = "参数解析异常!"
  112. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  113. return
  114. }
  115. // 获取原图表信息
  116. oldChartInfo, err := data_manage.GetChartInfoById(req.ChartInfoId)
  117. if err != nil {
  118. br.Msg = "获取原图表信息失败"
  119. br.ErrMsg = "获取原图表信息失败,Err:" + err.Error()
  120. return
  121. }
  122. if !utils.InArrayByInt([]int{utils.CHART_SOURCE_LINE_FEATURE_STANDARD_DEVIATION, utils.CHART_SOURCE_LINE_FEATURE_PERCENTILE, utils.CHART_SOURCE_LINE_FEATURE_FREQUENCY}, oldChartInfo.Source) {
  123. br.Msg = `错误的图表类型`
  124. br.IsSendEmail = false
  125. return
  126. }
  127. multipleGraphConfigChartMapping, err := data_manage.GetMultipleGraphConfigChartMappingByChartId(oldChartInfo.ChartInfoId)
  128. if err != nil && err.Error() != utils.ErrNoRow() {
  129. br.Msg = `保存失败`
  130. br.ErrMsg = "获取配置与图表的关联关系失败,ERR:" + err.Error()
  131. return
  132. }
  133. // 获取图表关联指标
  134. edbMappingList, err := data_manage.GetChartEdbMappingList(oldChartInfo.ChartInfoId)
  135. if err != nil {
  136. br.Msg = "获取失败"
  137. br.ErrMsg = "获取图表关联指标信息失败,Err:" + err.Error()
  138. return
  139. }
  140. if len(edbMappingList) != 1 {
  141. br.Msg = "获取失败"
  142. br.ErrMsg = fmt.Sprint("获取图表关联指标信息异常,数量:", len(edbMappingList))
  143. return
  144. }
  145. edbInfoMapping := edbMappingList[0]
  146. // 批量设置图
  147. chartInfo, err, errMsg, isSendEmail := lineFeatureServ.CopyChartInfo(multipleGraphConfigChartMapping.MultipleGraphConfigId, multipleGraphConfigChartMapping.Source, req.ChartClassifyId, req.ChartName, edbInfoMapping, oldChartInfo, sysUser)
  148. if err != nil {
  149. br.Msg = "复制失败"
  150. if errMsg != `` {
  151. br.Msg = errMsg
  152. }
  153. br.ErrMsg = "复制失败,ERR:" + err.Error()
  154. br.IsSendEmail = isSendEmail
  155. return
  156. }
  157. resp := data_manage.AddChartInfoResp{
  158. ChartInfoId: chartInfo.ChartInfoId,
  159. UniqueCode: chartInfo.UniqueCode,
  160. ChartType: chartInfo.ChartType,
  161. }
  162. //新增操作日志
  163. {
  164. chartLog := new(data_manage.ChartInfoLog)
  165. chartLog.ChartInfoId = chartInfo.ChartInfoId
  166. chartLog.ChartName = chartInfo.ChartName
  167. chartLog.ChartClassifyId = chartInfo.ChartClassifyId
  168. chartLog.SysUserId = sysUser.AdminId
  169. chartLog.SysUserRealName = sysUser.RealName
  170. chartLog.UniqueCode = chartInfo.UniqueCode
  171. chartLog.CreateTime = time.Now()
  172. chartLog.Content = string(this.Ctx.Input.RequestBody)
  173. chartLog.Status = "新增统计特征图表"
  174. chartLog.Method = this.Ctx.Input.URI()
  175. go data_manage.AddChartInfoLog(chartLog)
  176. }
  177. br.Ret = 200
  178. br.Data = resp
  179. br.Success = true
  180. br.Msg = "保存成功"
  181. br.IsAddLog = true
  182. }
  183. // EnInfoEdit
  184. // @Title 编辑图表英文信息接口
  185. // @Description 编辑图表英文信息接口
  186. // @Param request body data_manage.EditChartEnInfoReq true "type json string"
  187. // @Success Ret=200 编辑成功
  188. // @router /chart_info/en/edit [post]
  189. func (this *LineFeaturesChartInfoController) EnInfoEdit() {
  190. br := new(models.BaseResponse).Init()
  191. defer func() {
  192. this.Data["json"] = br
  193. this.ServeJSON()
  194. }()
  195. sysUser := this.SysUser
  196. if sysUser == nil {
  197. br.Msg = "请登录"
  198. br.ErrMsg = "请登录,SysUser Is Empty"
  199. br.Ret = 408
  200. return
  201. }
  202. var req request.EditChartEnInfoReq
  203. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  204. if err != nil {
  205. br.Msg = "参数解析异常!"
  206. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  207. return
  208. }
  209. req.ChartNameEn = strings.Trim(req.ChartNameEn, " ")
  210. if req.ChartInfoId <= 0 {
  211. br.Msg = "请选择图表"
  212. return
  213. }
  214. if req.ChartNameEn == "" {
  215. br.Msg = "请输入英文图表名称"
  216. return
  217. }
  218. //判断指标名称是否存在
  219. chartItem, err := data_manage.GetChartInfoById(req.ChartInfoId)
  220. if err != nil {
  221. if err.Error() == utils.ErrNoRow() {
  222. br.Msg = "图表已被删除,请刷新页面"
  223. br.ErrMsg = "图表已被删除,请刷新页面"
  224. return
  225. }
  226. br.Msg = "获取图表信息失败"
  227. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  228. return
  229. }
  230. // 校验名称是否有重复
  231. {
  232. var condition string
  233. var pars []interface{}
  234. condition += " AND chart_info_id <> ? AND chart_name_en = ? AND source in (?,?,?)"
  235. pars = append(pars, req.ChartInfoId, req.ChartNameEn, utils.CHART_SOURCE_LINE_FEATURE_STANDARD_DEVIATION, utils.CHART_SOURCE_LINE_FEATURE_PERCENTILE, utils.CHART_SOURCE_LINE_FEATURE_FREQUENCY)
  236. existItem, err := data_manage.GetChartInfoByCondition(condition, pars)
  237. if err != nil {
  238. if err.Error() != utils.ErrNoRow() {
  239. br.Msg = "判断英文图表名称是否存在失败"
  240. br.ErrMsg = "判断英文图表名称是否存在失败,Err:" + err.Error()
  241. return
  242. }
  243. }
  244. if err == nil && existItem.ChartInfoId > 0 {
  245. br.Msg = existItem.ChartName + ":" + req.ChartNameEn + "图表名称已存在"
  246. return
  247. }
  248. }
  249. chartItem.ChartNameEn = req.ChartNameEn
  250. chartItem.ModifyTime = time.Now().Local()
  251. if e := chartItem.Update([]string{"ChartNameEn", "ModifyTime"}); e != nil {
  252. br.Msg = "操作失败"
  253. br.ErrMsg = "更新图表信息失败, Err: " + e.Error()
  254. return
  255. }
  256. //添加es数据
  257. go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
  258. //修改my eta es数据
  259. go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
  260. //指标 修改es信息
  261. //go data.AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
  262. //新增操作日志
  263. {
  264. chartLog := new(data_manage.ChartInfoLog)
  265. chartLog.ChartName = chartItem.ChartName
  266. chartLog.ChartInfoId = req.ChartInfoId
  267. chartLog.ChartClassifyId = chartItem.ChartClassifyId
  268. chartLog.SysUserId = sysUser.AdminId
  269. chartLog.SysUserRealName = sysUser.RealName
  270. chartLog.UniqueCode = chartItem.UniqueCode
  271. chartLog.CreateTime = time.Now()
  272. chartLog.Content = string(this.Ctx.Input.RequestBody)
  273. chartLog.Status = "编辑统计特征图表英文信息"
  274. chartLog.Method = this.Ctx.Input.URL()
  275. go data_manage.AddChartInfoLog(chartLog)
  276. }
  277. // 清除缓存
  278. if utils.Re == nil && utils.Rc != nil {
  279. _ = utils.Rc.Delete(utils.HZ_CHART_LIB_DETAIL + chartItem.UniqueCode) //图表分享链接缓存
  280. _ = utils.Rc.Delete(data.GetChartInfoDataKey(req.ChartInfoId))
  281. }
  282. br.Ret = 200
  283. br.Success = true
  284. br.Msg = "编辑成功"
  285. br.IsAddLog = true
  286. }
  287. // SearchByEs
  288. // @Title 图表模糊搜索(从es获取)
  289. // @Description 图表模糊搜索(从es获取)
  290. // @Param Keyword query string true "图表名称"
  291. // @Param IsShowMe query bool true "是否只看我的,true、false"
  292. // @Param Source query int true "来源,3:统计特征,4:滚动统计特征,默认0:全部"
  293. // @Success 200 {object} data_manage.ChartInfo
  294. // @router /chart_info/search_by_es [get]
  295. func (this *LineFeaturesChartInfoController) SearchByEs() {
  296. br := new(models.BaseResponse).Init()
  297. defer func() {
  298. this.Data["json"] = br
  299. this.ServeJSON()
  300. }()
  301. sysUser := this.SysUser
  302. if sysUser == nil {
  303. br.Msg = "请登录"
  304. br.ErrMsg = "请登录,SysUser Is Empty"
  305. br.Ret = 408
  306. return
  307. }
  308. pageSize, _ := this.GetInt("PageSize")
  309. currentIndex, _ := this.GetInt("CurrentIndex")
  310. var startSize int
  311. if pageSize <= 0 {
  312. pageSize = utils.PageSize20
  313. }
  314. if currentIndex <= 0 {
  315. currentIndex = 1
  316. }
  317. startSize = paging.StartIndex(currentIndex, pageSize)
  318. keyword := this.GetString("Keyword")
  319. //只看我的
  320. isShowMe, _ := this.GetBool("IsShowMe")
  321. showSysId := 0
  322. if isShowMe {
  323. showSysId = sysUser.AdminId
  324. }
  325. sourceList := []int{utils.CHART_SOURCE_LINE_FEATURE_STANDARD_DEVIATION, utils.CHART_SOURCE_LINE_FEATURE_PERCENTILE, utils.CHART_SOURCE_LINE_FEATURE_FREQUENCY}
  326. var searchList []*data_manage.ChartInfo
  327. var total int64
  328. var err error
  329. // 获取当前账号的不可见指标
  330. noPermissionChartIdList := make([]int, 0)
  331. {
  332. obj := data_manage.EdbInfoNoPermissionAdmin{}
  333. confList, err := obj.GetAllChartListByAdminId(this.SysUser.AdminId)
  334. if err != nil && err.Error() != utils.ErrNoRow() {
  335. br.Msg = "获取失败"
  336. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  337. return
  338. }
  339. for _, v := range confList {
  340. noPermissionChartIdList = append(noPermissionChartIdList, v.ChartInfoId)
  341. }
  342. }
  343. if keyword != "" {
  344. searchList, total, err = data.EsSearchChartInfo(keyword, showSysId, sourceList, noPermissionChartIdList, startSize, pageSize)
  345. } else {
  346. total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, sourceList, noPermissionChartIdList)
  347. if err != nil && err.Error() != utils.ErrNoRow() {
  348. br.Msg = "获取失败"
  349. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  350. return
  351. }
  352. }
  353. finalList := make([]*data_manage.ChartInfoMore, 0)
  354. if len(searchList) > 0 {
  355. chartInfoIds := ""
  356. chartEdbMap := make(map[int][]*data_manage.ChartEdbInfoMapping)
  357. for _, v := range searchList {
  358. chartInfoIds += strconv.Itoa(v.ChartInfoId) + ","
  359. }
  360. if chartInfoIds != "" {
  361. chartInfoIds = strings.Trim(chartInfoIds, ",")
  362. //判断是否需要展示英文标识
  363. edbList, e := data_manage.GetChartEdbMappingListByChartInfoIds(chartInfoIds)
  364. if e != nil {
  365. br.Msg = "获取失败"
  366. br.ErrMsg = "获取图表,指标信息失败,Err:" + e.Error()
  367. return
  368. }
  369. for _, v := range edbList {
  370. chartEdbMap[v.ChartInfoId] = append(chartEdbMap[v.ChartInfoId], v)
  371. }
  372. }
  373. for _, v := range searchList {
  374. tmp := new(data_manage.ChartInfoMore)
  375. tmp.ChartInfo = *v
  376. //判断是否需要展示英文标识
  377. if _, ok := chartEdbMap[v.ChartInfoId]; ok {
  378. tmp.IsEnChart = data.CheckIsEnChart(v.ChartNameEn, []*data_manage.ChartEdbInfoMapping{}, v.Source, v.ChartType)
  379. }
  380. finalList = append(finalList, tmp)
  381. }
  382. }
  383. //新增搜索词记录
  384. {
  385. searchKeyword := new(data_manage.SearchKeyword)
  386. searchKeyword.KeyWord = keyword
  387. searchKeyword.CreateTime = time.Now()
  388. go data_manage.AddSearchKeyword(searchKeyword)
  389. }
  390. page := paging.GetPaging(currentIndex, pageSize, int(total))
  391. resp := data_manage.ChartInfoListByEsResp{
  392. Paging: page,
  393. List: finalList,
  394. }
  395. br.Ret = 200
  396. br.Success = true
  397. br.Msg = "获取成功"
  398. br.Data = resp
  399. }