custom_analysis_edb.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  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. "fmt"
  12. "strconv"
  13. "strings"
  14. "time"
  15. )
  16. // EdbList
  17. // @Title 指标列表
  18. // @Description 指标列表
  19. // @Param ExcelInfoId query int true "excel的id"
  20. // @Success 200 {object} []excel.ExcelEdbMappingItem
  21. // @router /edb/list [get]
  22. func (c *CustomAnalysisController) EdbList() {
  23. br := new(models.BaseResponse).Init()
  24. defer func() {
  25. c.Data["json"] = br
  26. c.ServeJSON()
  27. }()
  28. excelInfoId, _ := c.GetInt("ExcelInfoId")
  29. if excelInfoId <= 0 {
  30. br.Msg = "请选择excel"
  31. br.IsSendEmail = false
  32. return
  33. }
  34. // 获取excel表详情
  35. excelInfo, err := excelModel.GetExcelInfoById(excelInfoId)
  36. if err != nil {
  37. br.Msg = "找不到该EXCEL!"
  38. br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
  39. return
  40. }
  41. if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
  42. br.Msg = "EXCEL异常!"
  43. br.IsSendEmail = false
  44. return
  45. }
  46. list, err := excelModel.GetAllExcelEdbMappingItemByExcelInfoId(excelInfo.ExcelInfoId)
  47. if err != nil {
  48. br.Msg = "获取失败"
  49. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  50. return
  51. }
  52. for k, v := range list {
  53. var tmpCalculateFormula excelModel.CalculateFormula
  54. err = json.Unmarshal([]byte(v.CalculateFormula), &tmpCalculateFormula)
  55. if err != nil {
  56. br.Msg = "获取失败"
  57. br.ErrMsg = "公式转换失败,Err:" + err.Error()
  58. return
  59. }
  60. v.DateSequenceStr = tmpCalculateFormula.DateSequenceStr
  61. v.DataSequenceStr = tmpCalculateFormula.DataSequenceStr
  62. list[k] = v
  63. }
  64. br.Ret = 200
  65. br.Success = true
  66. br.Msg = "获取成功"
  67. br.Data = list
  68. }
  69. // AddEdb
  70. // @Title 新增指标接口
  71. // @Description 新增指标接口
  72. // @Param request body request.AddEdb true "type json string"
  73. // @Success 200 {object} data_manage.AddEdbInfoResp
  74. // @router /edb/add [post]
  75. func (c *CustomAnalysisController) AddEdb() {
  76. br := new(models.BaseResponse).Init()
  77. defer func() {
  78. c.Data["json"] = br
  79. c.ServeJSON()
  80. }()
  81. sysUser := c.SysUser
  82. if sysUser == nil {
  83. br.Msg = "请登录"
  84. br.ErrMsg = "请登录,SysUser Is Empty"
  85. br.Ret = 408
  86. return
  87. }
  88. deleteCache := true
  89. cacheKey := "CACHE_EXCEL_TABLE_INFO_ADD_EDB_" + strconv.Itoa(sysUser.AdminId)
  90. defer func() {
  91. if deleteCache {
  92. _ = utils.Rc.Delete(cacheKey)
  93. }
  94. }()
  95. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  96. deleteCache = false
  97. br.Msg = "系统处理中,请稍后重试!"
  98. br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(c.Ctx.Input.RequestBody)
  99. return
  100. }
  101. var req request.AddEdb
  102. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  103. if err != nil {
  104. br.Msg = "参数解析异常!"
  105. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  106. return
  107. }
  108. req.EdbName = strings.Trim(req.EdbName, " ")
  109. if req.EdbName == "" {
  110. br.Msg = "请填写指标名称!"
  111. br.IsSendEmail = false
  112. return
  113. }
  114. if req.ExcelInfoId <= 0 {
  115. br.Msg = "请选择excel!"
  116. br.IsSendEmail = false
  117. return
  118. }
  119. if req.ClassifyId <= 0 {
  120. br.Msg = "请选择指标分类!"
  121. br.IsSendEmail = false
  122. return
  123. }
  124. excelInfo, err := excelModel.GetExcelInfoById(req.ExcelInfoId)
  125. if err != nil {
  126. br.Msg = "找不到该EXCEL!"
  127. br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
  128. return
  129. }
  130. if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
  131. br.Msg = "EXCEL异常!"
  132. br.IsSendEmail = false
  133. return
  134. }
  135. //excel.GetCustomAnalysisExcelData(excelInfo)
  136. dateList, dataList, err, errMsg := excel.HandleEdbSequenceVal(req.DateSequenceVal, req.DataSequenceVal)
  137. if err != nil {
  138. br.Msg = "时间序列或数据序列异常!"
  139. if errMsg != `` {
  140. br.Msg = errMsg
  141. }
  142. br.ErrMsg = "时间序列或数据序列处理异常!err:" + err.Error()
  143. return
  144. }
  145. type CustomAnalysisData struct {
  146. ExcelInfoId int `description:"excel的id"`
  147. DateList []string
  148. DataList []float64
  149. }
  150. type Formula struct {
  151. DateSequenceStr string `description:"日期序列"`
  152. DataSequenceStr string `description:"数据序列"`
  153. }
  154. formulaByte, err := json.Marshal(Formula{
  155. DateSequenceStr: req.DateSequenceStr,
  156. DataSequenceStr: req.DataSequenceStr,
  157. })
  158. if err != nil {
  159. br.Msg = "时间序列或数据序列配置异常!"
  160. br.ErrMsg = "json序列化时间序列或数据序列异常!err:" + err.Error()
  161. return
  162. }
  163. req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
  164. AdminId: sysUser.AdminId,
  165. AdminName: sysUser.RealName,
  166. EdbName: req.EdbName,
  167. Frequency: req.Frequency,
  168. Unit: req.Unit,
  169. ClassifyId: req.ClassifyId,
  170. Formula: string(formulaByte), //公式
  171. Source: utils.DATA_SOURCE_CALCULATE_ZDYFX,
  172. Data: CustomAnalysisData{
  173. ExcelInfoId: req.ExcelInfoId,
  174. DateList: dateList,
  175. DataList: dataList,
  176. },
  177. }
  178. // 调用指标库去更新
  179. reqJson, err := json.Marshal(req2)
  180. if err != nil {
  181. br.Msg = "参数解析异常!"
  182. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  183. return
  184. }
  185. respItem, err := data.BatchSaveEdbCalculateData(string(reqJson))
  186. if err != nil {
  187. br.Msg = "新增失败"
  188. br.ErrMsg = "新增失败,Err:" + err.Error()
  189. return
  190. }
  191. if respItem.Ret != 200 {
  192. br.Msg = respItem.Msg
  193. br.ErrMsg = respItem.ErrMsg
  194. return
  195. }
  196. resp := respItem.Data
  197. //添加es
  198. data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
  199. br.Ret = 200
  200. br.Success = true
  201. br.Msg = "保存成功"
  202. br.Data = resp
  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. }
  357. // EdbRefresh
  358. // @Title 指标列表
  359. // @Description 指标列表
  360. // @Param ExcelInfoId query int true "excel的id"
  361. // @Success 200 {object} []excel.ExcelEdbMappingItem
  362. // @router /edb/refresh [get]
  363. func (c *CustomAnalysisController) EdbRefresh() {
  364. br := new(models.BaseResponse).Init()
  365. defer func() {
  366. c.Data["json"] = br
  367. c.ServeJSON()
  368. }()
  369. excelInfoId, _ := c.GetInt("ExcelInfoId")
  370. if excelInfoId <= 0 {
  371. br.Msg = "请选择excel"
  372. br.IsSendEmail = false
  373. return
  374. }
  375. // 获取excel表详情
  376. excelInfo, err := excelModel.GetExcelInfoById(excelInfoId)
  377. if err != nil {
  378. br.Msg = "找不到该EXCEL!"
  379. br.ErrMsg = "找不到该EXCEL!err:" + err.Error()
  380. return
  381. }
  382. if excelInfo.Source != utils.CUSTOM_ANALYSIS_TABLE {
  383. br.Msg = "EXCEL异常!"
  384. br.IsSendEmail = false
  385. return
  386. }
  387. excel.Refresh(excelInfo)
  388. br.Ret = 200
  389. br.Success = true
  390. br.Msg = "刷新成功"
  391. }
  392. func init() {
  393. //str := `Sheet1!$A$1:$A$1331`
  394. //str := `Sheet1!$A$1:$A$1331`
  395. //str := `Sheet1!$A$1:$BF$1`
  396. //str := `Sheet1!$A:$A`
  397. //str := `Sheet1!$1:$1`
  398. //fmt.Println(str)
  399. //fmt.Println(excel.GetSheetStr(str))
  400. excelInfo, err := excelModel.GetExcelInfoById(164)
  401. if err != nil {
  402. fmt.Println(err)
  403. return
  404. }
  405. err, errMsg, _ := excel.Refresh(excelInfo)
  406. fmt.Println(err)
  407. fmt.Println(errMsg)
  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. //}