custom_analysis_edb.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. package excel
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models"
  5. "eta/eta_api/models/data_manage"
  6. excelModel "eta/eta_api/models/data_manage/excel"
  7. "eta/eta_api/models/data_manage/excel/request"
  8. "eta/eta_api/services/data"
  9. "eta/eta_api/services/data/excel"
  10. "eta/eta_api/utils"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. // EdbList
  16. // @Title 指标列表
  17. // @Description 指标列表
  18. // @Param ExcelInfoId query int true "excel的id"
  19. // @Success 200 {object} []excel.ExcelEdbMappingItem
  20. // @router /edb/list [get]
  21. func (c *CustomAnalysisController) EdbList() {
  22. br := new(models.BaseResponse).Init()
  23. defer func() {
  24. c.Data["json"] = br
  25. c.ServeJSON()
  26. }()
  27. excelInfoId, _ := c.GetInt("ExcelInfoId")
  28. if excelInfoId <= 0 {
  29. br.Msg = "请选择excel"
  30. br.IsSendEmail = false
  31. return
  32. }
  33. // 获取excel表详情
  34. excelInfo, err := excelModel.GetExcelInfoById(excelInfoId)
  35. if err != nil {
  36. br.Msg = "找不到该EXCEL!"
  37. br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
  38. return
  39. }
  40. if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
  41. br.Msg = "EXCEL异常!"
  42. br.IsSendEmail = false
  43. return
  44. }
  45. list, err := excelModel.GetAllExcelEdbMappingItemByExcelInfoId(excelInfo.ExcelInfoId)
  46. if err != nil {
  47. br.Msg = "获取失败"
  48. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  49. return
  50. }
  51. for k, v := range list {
  52. var tmpCalculateFormula excelModel.CalculateFormula
  53. err = json.Unmarshal([]byte(v.CalculateFormula), &tmpCalculateFormula)
  54. if err != nil {
  55. br.Msg = "获取失败"
  56. br.ErrMsg = "公式转换失败,Err:" + err.Error()
  57. return
  58. }
  59. v.DateSequenceStr = tmpCalculateFormula.DateSequenceStr
  60. v.DataSequenceStr = tmpCalculateFormula.DataSequenceStr
  61. list[k] = v
  62. }
  63. br.Ret = 200
  64. br.Success = true
  65. br.Msg = "获取成功"
  66. br.Data = list
  67. }
  68. // AddEdb
  69. // @Title 新增指标接口
  70. // @Description 新增指标接口
  71. // @Param request body request.AddEdb true "type json string"
  72. // @Success 200 {object} data_manage.AddEdbInfoResp
  73. // @router /edb/add [post]
  74. func (c *CustomAnalysisController) AddEdb() {
  75. br := new(models.BaseResponse).Init()
  76. defer func() {
  77. c.Data["json"] = br
  78. c.ServeJSON()
  79. }()
  80. sysUser := c.SysUser
  81. if sysUser == nil {
  82. br.Msg = "请登录"
  83. br.ErrMsg = "请登录,SysUser Is Empty"
  84. br.Ret = 408
  85. return
  86. }
  87. deleteCache := true
  88. cacheKey := "CACHE_EXCEL_TABLE_INFO_ADD_EDB_" + strconv.Itoa(sysUser.AdminId)
  89. defer func() {
  90. if deleteCache {
  91. _ = utils.Rc.Delete(cacheKey)
  92. }
  93. }()
  94. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  95. deleteCache = false
  96. br.Msg = "系统处理中,请稍后重试!"
  97. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  98. return
  99. }
  100. var req request.AddEdb
  101. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  102. if err != nil {
  103. br.Msg = "参数解析异常!"
  104. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  105. return
  106. }
  107. req.EdbName = strings.Trim(req.EdbName, " ")
  108. if req.EdbName == "" {
  109. br.Msg = "请填写指标名称!"
  110. br.IsSendEmail = false
  111. return
  112. }
  113. if req.ExcelInfoId <= 0 {
  114. br.Msg = "请选择excel!"
  115. br.IsSendEmail = false
  116. return
  117. }
  118. if req.ClassifyId <= 0 {
  119. br.Msg = "请选择指标分类!"
  120. br.IsSendEmail = false
  121. return
  122. }
  123. excelInfo, err := excelModel.GetExcelInfoById(req.ExcelInfoId)
  124. if err != nil {
  125. br.Msg = "找不到该EXCEL!"
  126. br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
  127. return
  128. }
  129. if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
  130. br.Msg = "EXCEL异常!"
  131. br.IsSendEmail = false
  132. return
  133. }
  134. //excel.GetCustomAnalysisExcelData(excelInfo)
  135. dateList, dataList, err, errMsg := excel.HandleEdbSequenceVal(req.DateSequenceVal, req.DataSequenceVal)
  136. if err != nil {
  137. br.Msg = "时间序列或数据序列异常!"
  138. if errMsg != `` {
  139. br.Msg = errMsg
  140. }
  141. br.ErrMsg = "时间序列或数据序列处理异常!err:" + err.Error()
  142. return
  143. }
  144. type CustomAnalysisData struct {
  145. ExcelInfoId int `description:"excel的id"`
  146. DateList []string
  147. DataList []float64
  148. }
  149. type Formula struct {
  150. DateSequenceStr string `description:"日期序列"`
  151. DataSequenceStr string `description:"数据序列"`
  152. }
  153. formulaByte, err := json.Marshal(Formula{
  154. DateSequenceStr: req.DateSequenceStr,
  155. DataSequenceStr: req.DataSequenceStr,
  156. })
  157. if err != nil {
  158. br.Msg = "时间序列或数据序列配置异常!"
  159. br.ErrMsg = "json序列化时间序列或数据序列异常!err:" + err.Error()
  160. return
  161. }
  162. req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
  163. AdminId: sysUser.AdminId,
  164. AdminName: sysUser.RealName,
  165. EdbName: req.EdbName,
  166. Frequency: req.Frequency,
  167. Unit: req.Unit,
  168. ClassifyId: req.ClassifyId,
  169. Formula: string(formulaByte), //公式
  170. Source: utils.DATA_SOURCE_CALCULATE_ZDYFX,
  171. Data: CustomAnalysisData{
  172. ExcelInfoId: req.ExcelInfoId,
  173. DateList: dateList,
  174. DataList: dataList,
  175. },
  176. }
  177. // 调用指标库去更新
  178. reqJson, err := json.Marshal(req2)
  179. if err != nil {
  180. br.Msg = "参数解析异常!"
  181. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  182. return
  183. }
  184. respItem, err := data.BatchSaveEdbCalculateData(string(reqJson))
  185. if err != nil {
  186. br.Msg = "新增失败"
  187. br.ErrMsg = "新增失败,Err:" + err.Error()
  188. return
  189. }
  190. if respItem.Ret != 200 {
  191. br.Msg = respItem.Msg
  192. br.ErrMsg = respItem.ErrMsg
  193. return
  194. }
  195. resp := respItem.Data
  196. //添加es
  197. data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
  198. br.Ret = 200
  199. br.Success = true
  200. br.Msg = "保存成功"
  201. br.Data = resp
  202. }
  203. // EditEdb
  204. // @Title 编辑指标接口
  205. // @Description 编辑指标接口
  206. // @Param request body request.EditEdb true "type json string"
  207. // @Success 200 {object} data_manage.AddEdbInfoResp
  208. // @router /edb/edit [post]
  209. func (c *CustomAnalysisController) EditEdb() {
  210. br := new(models.BaseResponse).Init()
  211. defer func() {
  212. c.Data["json"] = br
  213. c.ServeJSON()
  214. }()
  215. sysUser := c.SysUser
  216. if sysUser == nil {
  217. br.Msg = "请登录"
  218. br.ErrMsg = "请登录,SysUser Is Empty"
  219. br.Ret = 408
  220. return
  221. }
  222. deleteCache := true
  223. cacheKey := "CACHE_EXCEL_TABLE_INFO_ADD_EDB_" + strconv.Itoa(sysUser.AdminId)
  224. defer func() {
  225. if deleteCache {
  226. _ = utils.Rc.Delete(cacheKey)
  227. }
  228. }()
  229. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  230. deleteCache = false
  231. br.Msg = "系统处理中,请稍后重试!"
  232. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  233. return
  234. }
  235. var req request.EditEdb
  236. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  237. if err != nil {
  238. br.Msg = "参数解析异常!"
  239. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  240. return
  241. }
  242. req.EdbName = strings.Trim(req.EdbName, " ")
  243. if req.EdbName == "" {
  244. br.Msg = "请填写指标名称!"
  245. br.IsSendEmail = false
  246. return
  247. }
  248. if req.ExcelInfoId <= 0 {
  249. br.Msg = "请选择excel!"
  250. br.IsSendEmail = false
  251. return
  252. }
  253. if req.EdbInfoId <= 0 {
  254. br.Msg = "请选择指标!"
  255. br.IsSendEmail = false
  256. return
  257. }
  258. if req.ClassifyId <= 0 {
  259. br.Msg = "请选择指标分类!"
  260. br.IsSendEmail = false
  261. return
  262. }
  263. excelInfo, err := excelModel.GetExcelInfoById(req.ExcelInfoId)
  264. if err != nil {
  265. br.Msg = "找不到该EXCEL!"
  266. br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
  267. return
  268. }
  269. if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
  270. br.Msg = "EXCEL异常!"
  271. br.IsSendEmail = false
  272. return
  273. }
  274. edbInfo, err := data_manage.GetEdbInfoById(req.EdbInfoId)
  275. if err != nil {
  276. if err.Error() == utils.ErrNoRow() {
  277. br.Msg = "指标已被删除,请刷新页面"
  278. br.ErrMsg = "指标已被删除,请刷新页面:Err:" + err.Error()
  279. return
  280. }
  281. br.Msg = "获取指标信息失败"
  282. br.ErrMsg = "获取指标信息失败:Err:" + err.Error()
  283. return
  284. }
  285. //excel.GetCustomAnalysisExcelData(excelInfo)
  286. dateList, dataList, err, errMsg := excel.HandleEdbSequenceVal(req.DateSequenceVal, req.DataSequenceVal)
  287. if err != nil {
  288. br.Msg = "时间序列或数据序列异常!"
  289. if errMsg != `` {
  290. br.Msg = errMsg
  291. }
  292. br.ErrMsg = "时间序列或数据序列处理异常!err:" + err.Error()
  293. return
  294. }
  295. type CustomAnalysisData struct {
  296. ExcelInfoId int `description:"excel的id"`
  297. DateList []string
  298. DataList []float64
  299. }
  300. type Formula struct {
  301. DateSequenceStr string `description:"日期序列"`
  302. DataSequenceStr string `description:"数据序列"`
  303. }
  304. formulaByte, err := json.Marshal(Formula{
  305. DateSequenceStr: req.DateSequenceStr,
  306. DataSequenceStr: req.DataSequenceStr,
  307. })
  308. if err != nil {
  309. br.Msg = "时间序列或数据序列配置异常!"
  310. br.ErrMsg = "json序列化时间序列或数据序列异常!err:" + err.Error()
  311. return
  312. }
  313. // 构造请求
  314. req2 := &data_manage.EdbInfoCalculateBatchEditReqByEdbLib{
  315. EdbInfoId: req.EdbInfoId,
  316. EdbName: req.EdbName,
  317. Frequency: req.Frequency,
  318. Unit: req.Unit,
  319. ClassifyId: req.ClassifyId,
  320. Formula: string(formulaByte), //公式
  321. Source: utils.DATA_SOURCE_CALCULATE_ZDYFX,
  322. Data: CustomAnalysisData{
  323. ExcelInfoId: req.ExcelInfoId,
  324. DateList: dateList,
  325. DataList: dataList,
  326. },
  327. }
  328. // 调用指标库去更新
  329. reqJson, err := json.Marshal(req2)
  330. if err != nil {
  331. br.Msg = "参数解析异常!"
  332. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  333. return
  334. }
  335. respItem, err := data.BatchEditEdbCalculateData(string(reqJson))
  336. if err != nil {
  337. br.Msg = "编辑失败"
  338. br.ErrMsg = "编辑失败,Err:" + err.Error()
  339. return
  340. }
  341. if respItem.Ret != 200 {
  342. br.Msg = respItem.Msg
  343. br.ErrMsg = respItem.ErrMsg
  344. return
  345. }
  346. resp := respItem.Data
  347. //添加es
  348. data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
  349. // 修改关联的预测指标基础信息
  350. go data.ModifyPredictEdbBaseInfoBySourceEdb(edbInfo)
  351. br.Ret = 200
  352. br.Success = true
  353. br.Msg = "保存成功"
  354. br.Data = resp
  355. }
  356. // EdbRefresh
  357. // @Title 指标列表
  358. // @Description 指标列表
  359. // @Param ExcelInfoId query int true "excel的id"
  360. // @Success 200 {object} []excel.ExcelEdbMappingItem
  361. // @router /edb/refresh [get]
  362. func (c *CustomAnalysisController) EdbRefresh() {
  363. br := new(models.BaseResponse).Init()
  364. defer func() {
  365. c.Data["json"] = br
  366. c.ServeJSON()
  367. }()
  368. excelInfoId, _ := c.GetInt("ExcelInfoId")
  369. if excelInfoId <= 0 {
  370. br.Msg = "请选择excel"
  371. br.IsSendEmail = false
  372. return
  373. }
  374. cacheKey := "CACHE_EXCEL_EDB_REFRESH_" + strconv.Itoa(c.SysUser.AdminId)
  375. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  376. br.Msg = "系统处理中,请稍后重试!"
  377. br.ErrMsg = "系统处理中,请稍后重试!" + c.SysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  378. return
  379. }
  380. defer func() {
  381. _ = utils.Rc.Delete(cacheKey)
  382. }()
  383. // 获取excel表详情
  384. excelInfo, err := excelModel.GetExcelInfoById(excelInfoId)
  385. if err != nil {
  386. br.Msg = "找不到该EXCEL!"
  387. br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
  388. return
  389. }
  390. if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
  391. br.Msg = "EXCEL异常!"
  392. br.IsSendEmail = false
  393. return
  394. }
  395. err, errMsg, isSendEmail := excel.Refresh(excelInfo)
  396. if err != nil {
  397. br.Msg = "刷新失败"
  398. if errMsg != `` {
  399. br.Msg = errMsg
  400. }
  401. br.ErrMsg = "刷新失败,Err:" + err.Error()
  402. br.IsSendEmail = isSendEmail
  403. return
  404. }
  405. br.Ret = 200
  406. br.Success = true
  407. br.Msg = "刷新成功"
  408. }
  409. //func init() {
  410. // excelInfo, err := excelModel.GetExcelInfoById(160)
  411. // if err != nil {
  412. // fmt.Println("查找excel失败:", err)
  413. // return
  414. // }
  415. // _, err, _ = excel.GenerateExcelCustomAnalysisExcel(excelInfo)
  416. // if err != nil {
  417. // fmt.Println("生成excel失败:", err)
  418. // return
  419. // }
  420. //}