balance_table.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. package excel
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models/data_manage"
  5. excelModel "eta/eta_api/models/data_manage/excel"
  6. "eta/eta_api/models/data_manage/excel/request"
  7. "eta/eta_api/models/system"
  8. "eta/eta_api/services/data"
  9. "eta/eta_api/utils"
  10. "fmt"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. // AddBalanceTableChart 添加平衡表图表
  16. func AddBalanceTableChart(req request.AddBalanceTableChartReq, sysUser *system.Admin) (chartInfo *data_manage.ChartInfo, err error, errMsg string, isSendEmail bool) {
  17. // 获取表格信息
  18. excelInfo, err := excelModel.GetExcelInfoById(req.ExcelInfoId)
  19. if err != nil {
  20. errMsg = "找不到该EXCEL"
  21. err = fmt.Errorf("找不到该EXCEL!%s", err.Error())
  22. return
  23. }
  24. if excelInfo.Source != utils.BALANCE_TABLE {
  25. errMsg = "EXCEL类型错误!"
  26. err = fmt.Errorf("EXCEL类型错误!")
  27. return
  28. }
  29. if len(req.ChartEdbInfoList) == 0 {
  30. errMsg = "图表数据不能为空!"
  31. err = fmt.Errorf("图表数据不能为空!%s", err.Error())
  32. return
  33. }
  34. chartEdbList := make([]*excelModel.AddChartEdbAndDataItem, 0)
  35. for _, chartEdb := range req.ChartEdbInfoList {
  36. excelEdb := new(excelModel.ExcelChartEdb)
  37. excelEdb.EdbName = chartEdb.EdbName
  38. randStr := utils.GetRandDigit(4)
  39. excelEdb.EdbCode = `T` + time.Now().Format("060102150405") + "_" + randStr
  40. excelEdb.ExcelInfoId = excelInfo.ExcelInfoId
  41. excelEdb.DateSequence = chartEdb.DateSequenceStr
  42. excelEdb.DataSequence = chartEdb.DataSequenceStr
  43. excelEdb.SysUserId = sysUser.AdminId
  44. excelEdb.SysUserRealName = sysUser.RealName
  45. excelEdb.MaxData = chartEdb.MaxData
  46. excelEdb.MinData = chartEdb.MinData
  47. excelEdb.IsOrder = chartEdb.IsOrder
  48. excelEdb.IsAxis = chartEdb.IsAxis
  49. excelEdb.FromTag = chartEdb.FromTag
  50. excelEdb.EdbInfoType = chartEdb.EdbInfoType
  51. excelEdb.LeadValue = chartEdb.LeadValue
  52. excelEdb.LeadUnit = chartEdb.LeadUnit
  53. var dateList []string
  54. var dataList []float64
  55. if excelInfo.BalanceType == 1 {
  56. // 如果是静态表,则直接使用前端传输的数据落到数据库里
  57. dateList, dataList, err, errMsg = HandleEdbSequenceVal(chartEdb.DateSequenceVal, chartEdb.DataSequenceVal)
  58. if err != nil {
  59. errMsg = "时间序列或数据序列异常!"
  60. err = fmt.Errorf("时间序列或数据序列异常!%s", err.Error())
  61. return
  62. }
  63. }
  64. // 处理日期列表和值列表
  65. addItem := &excelModel.AddChartEdbAndDataItem{
  66. ChartEdb: excelEdb,
  67. DateList: dateList,
  68. ValList: dataList,
  69. }
  70. chartEdbList = append(chartEdbList, addItem)
  71. }
  72. // todo 处理图表
  73. chartInfo, err, errMsg, isSendEmail = addBalanceTableChart(req, sysUser.AdminId, sysUser.RealName)
  74. if err != nil {
  75. errMsg = "新增图表失败!"
  76. err = fmt.Errorf("新增图表失败!%s, %s", errMsg, err.Error())
  77. return
  78. }
  79. obj := new(excelModel.ExcelChartEdb)
  80. err = obj.AddChartEdbAndData(chartEdbList, chartInfo)
  81. if err != nil {
  82. errMsg = "新增图表失败!"
  83. err = fmt.Errorf("新增图表数据失败!%s", err.Error())
  84. return
  85. }
  86. return
  87. }
  88. func addBalanceTableChart(req request.AddBalanceTableChartReq, sysUserId int, sysUserRealName string) (chartInfo *data_manage.ChartInfo, err error, errMsg string, isSendEmail bool) {
  89. isSendEmail = true // 默认错误的时候要发送邮件
  90. req.ChartName = strings.Trim(req.ChartName, " ")
  91. if req.ChartName == "" {
  92. errMsg = "请填写图表名称!"
  93. err = fmt.Errorf(errMsg)
  94. isSendEmail = false
  95. return
  96. }
  97. chartType := req.ChartType
  98. extraConfig := req.ExtraConfig
  99. // 季节性图表额外配置信息
  100. var seasonExtraConfig string
  101. if len(req.ChartEdbInfoList) <= 0 {
  102. errMsg = "请选择指标!"
  103. err = fmt.Errorf(errMsg)
  104. return
  105. }
  106. if chartType == 2 {
  107. // 处理季节性图表横轴配置
  108. {
  109. if req.SeasonExtraConfig.XEndDate != "" {
  110. if req.SeasonExtraConfig.XStartDate > req.SeasonExtraConfig.XEndDate && req.SeasonExtraConfig.JumpYear != 1 {
  111. errMsg = "季节性图表配置信息异常:横坐标日期配置错误"
  112. err = fmt.Errorf("季节性图表配置信息异常: 横坐标日期配置错误")
  113. return
  114. }
  115. seasonExtra, tErr := json.Marshal(req.SeasonExtraConfig)
  116. if tErr != nil {
  117. errMsg = "季节性图表配置信息异常"
  118. err = fmt.Errorf("季节性图表配置信息异常,Err:" + tErr.Error())
  119. return
  120. }
  121. seasonExtraConfig = string(seasonExtra)
  122. }
  123. }
  124. }
  125. // 图表额外配置
  126. extraConfig, err, errMsg = data.HandleExtraConfig(chartType, extraConfig)
  127. if err != nil {
  128. if errMsg == `` {
  129. errMsg = "指标异常!"
  130. }
  131. err = fmt.Errorf("指标异常!Err:" + err.Error())
  132. return
  133. }
  134. //判断图表是否存在
  135. var condition string
  136. var pars []interface{}
  137. // 图表名称在不同图分类下不允许重复 需求调整时间:2022年11月07日09:47:07
  138. condition += " AND chart_classify_id=0 "
  139. condition += " AND chart_name=? AND source = ? "
  140. pars = append(pars, req.ChartName, utils.CHART_SOURCE_BALANCE_EXCEL)
  141. count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
  142. if err != nil {
  143. errMsg = "判断图表名称是否存在失败"
  144. err = fmt.Errorf("判断图表名称是否存在失败,Err:" + err.Error())
  145. return
  146. }
  147. if count > 0 {
  148. errMsg = "图表已存在,请重新填写"
  149. err = fmt.Errorf("判断图表名称是否存在失败")
  150. isSendEmail = false
  151. return
  152. }
  153. // todo 判断是否是禁用的图表
  154. // disableVal := data.CheckIsDisableChart(edbInfoIdArr)
  155. chartInfo = new(data_manage.ChartInfo)
  156. chartInfo.ChartName = req.ChartName
  157. //chartInfo.EdbInfoIds = edbInfoIdStr
  158. //chartInfo.ChartClassifyId = req.ChartClassifyId
  159. chartInfo.SysUserId = sysUserId
  160. chartInfo.SysUserRealName = sysUserRealName
  161. chartInfo.CreateTime = time.Now()
  162. chartInfo.ModifyTime = time.Now()
  163. chartInfo.IsSetName = 0
  164. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  165. chartInfo.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + timestamp)
  166. // todo 判断是否需要重新计算用户的start_date
  167. chartInfo.DateType = 3
  168. if chartType == 0 {
  169. chartType = 1
  170. }
  171. chartInfo.ChartType = chartType
  172. calendar := req.Calendar
  173. if calendar == "" {
  174. calendar = "公历"
  175. }
  176. chartInfo.Calendar = calendar
  177. /* chartInfo.StartDate = req.StartDate
  178. chartInfo.EndDate = req.EndDate
  179. chartInfo.SeasonStartDate = req.StartDate
  180. chartInfo.SeasonEndDate = req.EndDate*/
  181. chartInfo.LeftMin = req.LeftMin
  182. chartInfo.LeftMax = req.LeftMax
  183. chartInfo.RightMin = req.RightMin
  184. chartInfo.RightMax = req.RightMax
  185. chartInfo.Right2Min = req.Right2Min
  186. chartInfo.Right2Max = req.Right2Max
  187. chartInfo.MinMaxSave = req.MinMaxSave
  188. //chartInfo.Disabled = disableVal
  189. //chartInfo.BarConfig = barChartConf
  190. chartInfo.ExtraConfig = extraConfig
  191. chartInfo.SeasonExtraConfig = seasonExtraConfig
  192. chartInfo.StartYear = req.StartYear
  193. chartInfo.Source = utils.CHART_SOURCE_BALANCE_EXCEL
  194. // chartInfo.ChartThemeId = req.ChartThemeId
  195. chartInfo.SourcesFrom = req.SourcesFrom
  196. /* chartInfo.Instructions = req.Instructions
  197. chartInfo.MarkersLines = req.MarkersLines
  198. chartInfo.MarkersAreas = req.MarkersAreas
  199. chartInfo.Unit = req.Unit
  200. chartInfo.UnitEn = req.UnitEn*/
  201. newId, err := data_manage.AddChartInfo(chartInfo)
  202. if err != nil {
  203. errMsg = `保存失败`
  204. err = fmt.Errorf("保存失败,Err:" + err.Error())
  205. return
  206. }
  207. chartInfo.ChartInfoId = int(newId)
  208. //添加es数据
  209. //go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
  210. return
  211. }