custom_analysis_edb.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  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. br.IsAddLog = false //数据量太大了,不写入日志吧
  203. }
  204. // EditEdb
  205. // @Title 编辑指标接口
  206. // @Description 编辑指标接口
  207. // @Param request body request.EditEdb true "type json string"
  208. // @Success 200 {object} data_manage.AddEdbInfoResp
  209. // @router /edb/edit [post]
  210. func (c *CustomAnalysisController) EditEdb() {
  211. br := new(models.BaseResponse).Init()
  212. defer func() {
  213. c.Data["json"] = br
  214. c.ServeJSON()
  215. }()
  216. sysUser := c.SysUser
  217. if sysUser == nil {
  218. br.Msg = "请登录"
  219. br.ErrMsg = "请登录,SysUser Is Empty"
  220. br.Ret = 408
  221. return
  222. }
  223. deleteCache := true
  224. cacheKey := "CACHE_EXCEL_TABLE_INFO_ADD_EDB_" + strconv.Itoa(sysUser.AdminId)
  225. defer func() {
  226. if deleteCache {
  227. _ = utils.Rc.Delete(cacheKey)
  228. }
  229. }()
  230. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  231. deleteCache = false
  232. br.Msg = "系统处理中,请稍后重试!"
  233. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  234. return
  235. }
  236. var req request.EditEdb
  237. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  238. if err != nil {
  239. br.Msg = "参数解析异常!"
  240. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  241. return
  242. }
  243. req.EdbName = strings.Trim(req.EdbName, " ")
  244. if req.EdbName == "" {
  245. br.Msg = "请填写指标名称!"
  246. br.IsSendEmail = false
  247. return
  248. }
  249. if req.ExcelInfoId <= 0 {
  250. br.Msg = "请选择excel!"
  251. br.IsSendEmail = false
  252. return
  253. }
  254. if req.EdbInfoId <= 0 {
  255. br.Msg = "请选择指标!"
  256. br.IsSendEmail = false
  257. return
  258. }
  259. if req.ClassifyId <= 0 {
  260. br.Msg = "请选择指标分类!"
  261. br.IsSendEmail = false
  262. return
  263. }
  264. excelInfo, err := excelModel.GetExcelInfoById(req.ExcelInfoId)
  265. if err != nil {
  266. br.Msg = "找不到该EXCEL!"
  267. br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
  268. return
  269. }
  270. if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
  271. br.Msg = "EXCEL异常!"
  272. br.IsSendEmail = false
  273. return
  274. }
  275. edbInfo, err := data_manage.GetEdbInfoById(req.EdbInfoId)
  276. if err != nil {
  277. if err.Error() == utils.ErrNoRow() {
  278. br.Msg = "指标已被删除,请刷新页面"
  279. br.ErrMsg = "指标已被删除,请刷新页面:Err:" + err.Error()
  280. return
  281. }
  282. br.Msg = "获取指标信息失败"
  283. br.ErrMsg = "获取指标信息失败:Err:" + err.Error()
  284. return
  285. }
  286. //excel.GetCustomAnalysisExcelData(excelInfo)
  287. dateList, dataList, err, errMsg := excel.HandleEdbSequenceVal(req.DateSequenceVal, req.DataSequenceVal)
  288. if err != nil {
  289. br.Msg = "时间序列或数据序列异常!"
  290. if errMsg != `` {
  291. br.Msg = errMsg
  292. }
  293. br.ErrMsg = "时间序列或数据序列处理异常!err:" + err.Error()
  294. return
  295. }
  296. type CustomAnalysisData struct {
  297. ExcelInfoId int `description:"excel的id"`
  298. DateList []string
  299. DataList []float64
  300. }
  301. type Formula struct {
  302. DateSequenceStr string `description:"日期序列"`
  303. DataSequenceStr string `description:"数据序列"`
  304. }
  305. formulaByte, err := json.Marshal(Formula{
  306. DateSequenceStr: req.DateSequenceStr,
  307. DataSequenceStr: req.DataSequenceStr,
  308. })
  309. if err != nil {
  310. br.Msg = "时间序列或数据序列配置异常!"
  311. br.ErrMsg = "json序列化时间序列或数据序列异常!err:" + err.Error()
  312. return
  313. }
  314. // 构造请求
  315. req2 := &data_manage.EdbInfoCalculateBatchEditReqByEdbLib{
  316. EdbInfoId: req.EdbInfoId,
  317. EdbName: req.EdbName,
  318. Frequency: req.Frequency,
  319. Unit: req.Unit,
  320. ClassifyId: req.ClassifyId,
  321. Formula: string(formulaByte), //公式
  322. Source: utils.DATA_SOURCE_CALCULATE_ZDYFX,
  323. Data: CustomAnalysisData{
  324. ExcelInfoId: req.ExcelInfoId,
  325. DateList: dateList,
  326. DataList: dataList,
  327. },
  328. }
  329. // 调用指标库去更新
  330. reqJson, err := json.Marshal(req2)
  331. if err != nil {
  332. br.Msg = "参数解析异常!"
  333. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  334. return
  335. }
  336. respItem, err := data.BatchEditEdbCalculateData(string(reqJson))
  337. if err != nil {
  338. br.Msg = "编辑失败"
  339. br.ErrMsg = "编辑失败,Err:" + err.Error()
  340. return
  341. }
  342. if respItem.Ret != 200 {
  343. br.Msg = respItem.Msg
  344. br.ErrMsg = respItem.ErrMsg
  345. return
  346. }
  347. resp := respItem.Data
  348. //添加es
  349. data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
  350. // 修改关联的预测指标基础信息
  351. go data.ModifyPredictEdbBaseInfoBySourceEdb(edbInfo)
  352. br.Ret = 200
  353. br.Success = true
  354. br.Msg = "保存成功"
  355. br.Data = resp
  356. br.IsAddLog = false //数据量太大了,不写入日志吧
  357. }
  358. //func init() {
  359. // excelInfo, err := excelModel.GetExcelInfoById(160)
  360. // if err != nil {
  361. // fmt.Println("查找excel失败:", err)
  362. // return
  363. // }
  364. // _, err, _ = excel.GenerateExcelCustomAnalysisExcel(excelInfo)
  365. // if err != nil {
  366. // fmt.Println("生成excel失败:", err)
  367. // return
  368. // }
  369. //}