custom_analysis_edb.go 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  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. // AddEdb
  16. // @Title 新增指标接口
  17. // @Description 新增指标接口
  18. // @Param request body request.AddEdb true "type json string"
  19. // @Success 200 {object} data_manage.AddEdbInfoResp
  20. // @router /edb/add [post]
  21. func (c *CustomAnalysisController) AddEdb() {
  22. br := new(models.BaseResponse).Init()
  23. defer func() {
  24. c.Data["json"] = br
  25. c.ServeJSON()
  26. }()
  27. sysUser := c.SysUser
  28. if sysUser == nil {
  29. br.Msg = "请登录"
  30. br.ErrMsg = "请登录,SysUser Is Empty"
  31. br.Ret = 408
  32. return
  33. }
  34. deleteCache := true
  35. cacheKey := "CACHE_EXCEL_TABLE_INFO_ADD_EDB_" + strconv.Itoa(sysUser.AdminId)
  36. defer func() {
  37. if deleteCache {
  38. _ = utils.Rc.Delete(cacheKey)
  39. }
  40. }()
  41. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  42. deleteCache = false
  43. br.Msg = "系统处理中,请稍后重试!"
  44. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  45. return
  46. }
  47. var req request.AddEdb
  48. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  49. if err != nil {
  50. br.Msg = "参数解析异常!"
  51. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  52. return
  53. }
  54. req.EdbName = strings.Trim(req.EdbName, " ")
  55. if req.EdbName == "" {
  56. br.Msg = "请填写指标名称!"
  57. br.IsSendEmail = false
  58. return
  59. }
  60. if req.ExcelInfoId <= 0 {
  61. br.Msg = "请选择excel!"
  62. br.IsSendEmail = false
  63. return
  64. }
  65. if req.ClassifyId <= 0 {
  66. br.Msg = "请选择指标分类!"
  67. br.IsSendEmail = false
  68. return
  69. }
  70. excelInfo, err := excelModel.GetExcelInfoById(req.ExcelInfoId)
  71. if err != nil {
  72. br.Msg = "找不到该EXCEL!"
  73. br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
  74. return
  75. }
  76. if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
  77. br.Msg = "EXCEL异常!"
  78. br.IsSendEmail = false
  79. return
  80. }
  81. //excel.GetCustomAnalysisExcelData(excelInfo)
  82. dateList, dataList, err, errMsg := excel.HandleEdbSequenceVal(req.DateSequenceVal, req.DataSequenceVal)
  83. if err != nil {
  84. br.Msg = "时间序列或数据序列异常!"
  85. if errMsg != `` {
  86. br.Msg = errMsg
  87. }
  88. br.ErrMsg = "时间序列或数据序列处理异常!err:" + err.Error()
  89. return
  90. }
  91. type CustomAnalysisData struct {
  92. ExcelInfoId int `description:"excel的id"`
  93. DateList []string
  94. DataList []float64
  95. }
  96. type Formula struct {
  97. DateSequenceStr string `description:"日期序列"`
  98. DataSequenceStr string `description:"数据序列"`
  99. }
  100. formulaByte, err := json.Marshal(Formula{
  101. DateSequenceStr: req.DateSequenceStr,
  102. DataSequenceStr: req.DataSequenceStr,
  103. })
  104. if err != nil {
  105. br.Msg = "时间序列或数据序列配置异常!"
  106. br.ErrMsg = "json序列化时间序列或数据序列异常!err:" + err.Error()
  107. return
  108. }
  109. req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
  110. AdminId: sysUser.AdminId,
  111. AdminName: sysUser.RealName,
  112. EdbName: req.EdbName,
  113. Frequency: req.Frequency,
  114. Unit: req.Unit,
  115. ClassifyId: req.ClassifyId,
  116. Formula: string(formulaByte), //公式
  117. Source: utils.DATA_SOURCE_CALCULATE_ZDYFX,
  118. Data: CustomAnalysisData{
  119. ExcelInfoId: req.ExcelInfoId,
  120. DateList: dateList,
  121. DataList: dataList,
  122. },
  123. }
  124. // 调用指标库去更新
  125. reqJson, err := json.Marshal(req2)
  126. if err != nil {
  127. br.Msg = "参数解析异常!"
  128. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  129. return
  130. }
  131. respItem, err := data.BatchSaveEdbCalculateData(string(reqJson))
  132. if err != nil {
  133. br.Msg = "新增失败"
  134. br.ErrMsg = "新增失败,Err:" + err.Error()
  135. return
  136. }
  137. if respItem.Ret != 200 {
  138. br.Msg = respItem.Msg
  139. br.ErrMsg = respItem.ErrMsg
  140. return
  141. }
  142. resp := respItem.Data
  143. //添加es
  144. data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
  145. br.Ret = 200
  146. br.Success = true
  147. br.Msg = "保存成功"
  148. br.Data = resp
  149. br.IsAddLog = false //数据量太大了,不写入日志吧
  150. }
  151. // EditEdb
  152. // @Title 编辑指标接口
  153. // @Description 编辑指标接口
  154. // @Param request body request.EditEdb true "type json string"
  155. // @Success 200 {object} data_manage.AddEdbInfoResp
  156. // @router /edb/edit [post]
  157. func (c *CustomAnalysisController) EditEdb() {
  158. br := new(models.BaseResponse).Init()
  159. defer func() {
  160. c.Data["json"] = br
  161. c.ServeJSON()
  162. }()
  163. sysUser := c.SysUser
  164. if sysUser == nil {
  165. br.Msg = "请登录"
  166. br.ErrMsg = "请登录,SysUser Is Empty"
  167. br.Ret = 408
  168. return
  169. }
  170. deleteCache := true
  171. cacheKey := "CACHE_EXCEL_TABLE_INFO_ADD_EDB_" + strconv.Itoa(sysUser.AdminId)
  172. defer func() {
  173. if deleteCache {
  174. _ = utils.Rc.Delete(cacheKey)
  175. }
  176. }()
  177. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  178. deleteCache = false
  179. br.Msg = "系统处理中,请稍后重试!"
  180. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  181. return
  182. }
  183. var req request.EditEdb
  184. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  185. if err != nil {
  186. br.Msg = "参数解析异常!"
  187. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  188. return
  189. }
  190. req.EdbName = strings.Trim(req.EdbName, " ")
  191. if req.EdbName == "" {
  192. br.Msg = "请填写指标名称!"
  193. br.IsSendEmail = false
  194. return
  195. }
  196. if req.ExcelInfoId <= 0 {
  197. br.Msg = "请选择excel!"
  198. br.IsSendEmail = false
  199. return
  200. }
  201. if req.EdbInfoId <= 0 {
  202. br.Msg = "请选择指标!"
  203. br.IsSendEmail = false
  204. return
  205. }
  206. if req.ClassifyId <= 0 {
  207. br.Msg = "请选择指标分类!"
  208. br.IsSendEmail = false
  209. return
  210. }
  211. excelInfo, err := excelModel.GetExcelInfoById(req.ExcelInfoId)
  212. if err != nil {
  213. br.Msg = "找不到该EXCEL!"
  214. br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
  215. return
  216. }
  217. if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
  218. br.Msg = "EXCEL异常!"
  219. br.IsSendEmail = false
  220. return
  221. }
  222. edbInfo, err := data_manage.GetEdbInfoById(req.EdbInfoId)
  223. if err != nil {
  224. if err.Error() == utils.ErrNoRow() {
  225. br.Msg = "指标已被删除,请刷新页面"
  226. br.ErrMsg = "指标已被删除,请刷新页面:Err:" + err.Error()
  227. return
  228. }
  229. br.Msg = "获取指标信息失败"
  230. br.ErrMsg = "获取指标信息失败:Err:" + err.Error()
  231. return
  232. }
  233. //excel.GetCustomAnalysisExcelData(excelInfo)
  234. dateList, dataList, err, errMsg := excel.HandleEdbSequenceVal(req.DateSequenceVal, req.DataSequenceVal)
  235. if err != nil {
  236. br.Msg = "时间序列或数据序列异常!"
  237. if errMsg != `` {
  238. br.Msg = errMsg
  239. }
  240. br.ErrMsg = "时间序列或数据序列处理异常!err:" + err.Error()
  241. return
  242. }
  243. type CustomAnalysisData struct {
  244. ExcelInfoId int `description:"excel的id"`
  245. DateList []string
  246. DataList []float64
  247. }
  248. type Formula struct {
  249. DateSequenceStr string `description:"日期序列"`
  250. DataSequenceStr string `description:"数据序列"`
  251. }
  252. formulaByte, err := json.Marshal(Formula{
  253. DateSequenceStr: req.DateSequenceStr,
  254. DataSequenceStr: req.DataSequenceStr,
  255. })
  256. if err != nil {
  257. br.Msg = "时间序列或数据序列配置异常!"
  258. br.ErrMsg = "json序列化时间序列或数据序列异常!err:" + err.Error()
  259. return
  260. }
  261. // 构造请求
  262. req2 := &data_manage.EdbInfoCalculateBatchEditReqByEdbLib{
  263. EdbInfoId: req.EdbInfoId,
  264. EdbName: req.EdbName,
  265. Frequency: req.Frequency,
  266. Unit: req.Unit,
  267. ClassifyId: req.ClassifyId,
  268. Formula: string(formulaByte), //公式
  269. Source: utils.DATA_SOURCE_CALCULATE_ZDYFX,
  270. Data: CustomAnalysisData{
  271. ExcelInfoId: req.ExcelInfoId,
  272. DateList: dateList,
  273. DataList: dataList,
  274. },
  275. }
  276. // 调用指标库去更新
  277. reqJson, err := json.Marshal(req2)
  278. if err != nil {
  279. br.Msg = "参数解析异常!"
  280. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  281. return
  282. }
  283. respItem, err := data.BatchEditEdbCalculateData(string(reqJson))
  284. if err != nil {
  285. br.Msg = "编辑失败"
  286. br.ErrMsg = "编辑失败,Err:" + err.Error()
  287. return
  288. }
  289. if respItem.Ret != 200 {
  290. br.Msg = respItem.Msg
  291. br.ErrMsg = respItem.ErrMsg
  292. return
  293. }
  294. resp := respItem.Data
  295. //添加es
  296. data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
  297. // 修改关联的预测指标基础信息
  298. go data.ModifyPredictEdbBaseInfoBySourceEdb(edbInfo)
  299. br.Ret = 200
  300. br.Success = true
  301. br.Msg = "保存成功"
  302. br.Data = resp
  303. br.IsAddLog = false //数据量太大了,不写入日志吧
  304. }
  305. //func init() {
  306. // excelInfo, err := excelModel.GetExcelInfoById(160)
  307. // if err != nil {
  308. // fmt.Println("查找excel失败:", err)
  309. // return
  310. // }
  311. // _, err, _ = excel.GenerateExcelCustomAnalysisExcel(excelInfo)
  312. // if err != nil {
  313. // fmt.Println("生成excel失败:", err)
  314. // return
  315. // }
  316. //}