custom_analysis_edb.go 10 KB

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