excel_chart_edb.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. package excel
  2. import (
  3. "eta/eta_api/models/data_manage"
  4. "eta/eta_api/utils"
  5. "fmt"
  6. "github.com/beego/beego/v2/client/orm"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. type ExcelChartEdb struct {
  12. ExcelChartEdbId int `orm:"column(excel_chart_edb_id);pk"`
  13. ExcelInfoId int `description:"表格id"`
  14. ChartInfoId int `description:"图表id"`
  15. EdbCode string `description:"指标编码"`
  16. EdbName string `description:"指标名称"`
  17. DateSequence string `description:"日期序列选区"`
  18. DataSequence string `description:"数据序列选区"`
  19. SysUserId int `description:"创建人"`
  20. SysUserRealName string `description:"创建人姓名"`
  21. MaxData float64 `description:"上限"`
  22. MinData float64 `description:"下限"`
  23. IsOrder bool `description:"true:正序,false:逆序"`
  24. IsAxis int `description:"true:左轴,false:右轴"`
  25. EdbInfoType int `description:"true:标准指标,false:领先指标"`
  26. LeadValue int `description:"领先值"`
  27. LeadUnit string `description:"领先单位"`
  28. FromTag string `description:"标签"`
  29. ModifyTime time.Time `description:"修改时间"`
  30. CreateTime time.Time `description:"创建时间"`
  31. }
  32. type ExcelChartEdbView struct {
  33. ExcelChartEdbId int
  34. ExcelInfoId int `description:"表格id"`
  35. ChartInfoId int `description:"图表id"`
  36. EdbCode string `description:"指标编码"`
  37. EdbName string `description:"指标名称"`
  38. DateSequenceStr string `description:"日期序列选区"`
  39. DataSequenceStr string `description:"数据序列选区"`
  40. /*MaxData float64 `description:"上限"`
  41. MinData float64 `description:"下限"`
  42. IsOrder bool `description:"true:正序,false:逆序"`
  43. IsAxis int `description:"true:左轴,false:右轴"`
  44. EdbInfoType int `description:"true:标准指标,false:领先指标"`
  45. LeadValue int `description:"领先值"`
  46. LeadUnit string `description:"领先单位"`*/
  47. FromTag string `description:"标签"`
  48. }
  49. type BalanceTableChart struct {
  50. ChartInfoId int `description:"图表id,新增时传0"`
  51. ChartName string `description:"图表名称"`
  52. ChartType int `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图"`
  53. Calendar string `description:"公历/农历"`
  54. LeftMin string `description:"图表左侧最小值"`
  55. LeftMax string `description:"图表左侧最大值"`
  56. RightMin string `description:"图表右侧最小值"`
  57. RightMax string `description:"图表右侧最大值"`
  58. Right2Min string `description:"图表右侧2最小值"`
  59. Right2Max string `description:"图表右侧2最大值"`
  60. MinMaxSave int `description:"是否手动保存过上下限:0-否;1-是"`
  61. ExtraConfig string `description:"图表额外配置信息,json字符串"`
  62. ChartImage string `description:"封面图" json:"-"`
  63. SeasonExtraConfig string `description:"季节性图表中的配置,json数据"`
  64. SourcesFrom string `description:"图表来源"`
  65. // ChartEdbInfoList []ExcelChartEdbView
  66. }
  67. func (e *ExcelChartEdb) TableName() string {
  68. return "excel_chart_edb"
  69. }
  70. // 新增
  71. func (e *ExcelChartEdb) Add() (err error) {
  72. o := orm.NewOrmUsingDB("data")
  73. _, err = o.Insert(e)
  74. return
  75. }
  76. // 修改
  77. func (e *ExcelChartEdb) Update(cols []string) (err error) {
  78. o := orm.NewOrmUsingDB("data")
  79. _, err = o.Update(e, cols...)
  80. return
  81. }
  82. // 删除
  83. func (e *ExcelChartEdb) Delete() (err error) {
  84. o := orm.NewOrmUsingDB("data")
  85. _, err = o.Delete(e)
  86. return
  87. }
  88. type AddChartEdbAndDataItem struct {
  89. ChartEdb *ExcelChartEdb
  90. DateList []string `description:"日期列表"`
  91. ValList []float64 `description:"数据列表"`
  92. }
  93. // 同时添加指标和指标数据
  94. func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chartInfo *data_manage.ChartInfo, deleteEdbIds []int) (err error) {
  95. o, err := orm.NewOrmUsingDB("data").Begin()
  96. if err != nil {
  97. return
  98. }
  99. defer func() {
  100. if err != nil {
  101. _ = o.Rollback()
  102. } else {
  103. _ = o.Commit()
  104. }
  105. }()
  106. // 先删除原先的绑定的指标
  107. if len(deleteEdbIds) > 0 && chartInfo.ChartInfoId > 0 {
  108. sql := `DELETE FROM excel_chart_edb WHERE excel_chart_info_id = ? AND excel_chart_edb_id in (` + utils.GetOrmInReplace(len(deleteEdbIds)) + `)`
  109. _, err = o.Raw(sql, chartInfo.ChartInfoId, deleteEdbIds).Exec()
  110. if err != nil {
  111. err = fmt.Errorf("删除原先的指标失败:%v", err)
  112. return
  113. }
  114. }
  115. // 图表指标信息入库
  116. updateIds := make([]int, 0)
  117. var edbInfoIdArrStr []string
  118. for _, item := range list {
  119. err = addChartEdbAndData(o, item.ChartEdb, item.DateList, item.ValList)
  120. if err != nil {
  121. return
  122. }
  123. updateIds = append(updateIds, item.ChartEdb.ExcelChartEdbId)
  124. edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(item.ChartEdb.ExcelChartEdbId))
  125. }
  126. //新增图表
  127. chartInfoId := chartInfo.ChartInfoId
  128. if chartInfo.ChartInfoId <= 0 {
  129. lastId, e := o.Insert(chartInfo)
  130. if e != nil {
  131. err = fmt.Errorf("新增图表失败,AddChartEdbAndData: %v", e)
  132. return
  133. }
  134. chartInfoId = int(lastId)
  135. } else {
  136. _, err = o.Update(chartInfo)
  137. if err != nil {
  138. err = fmt.Errorf("更新图表失败,AddChartEdbAndData: %v", e)
  139. return
  140. }
  141. }
  142. //更新图表id
  143. sql := `update excel_chart_edb set chart_info_id = ? where excel_chart_edb_id in (` + utils.GetOrmInReplace(len(updateIds)) + `)`
  144. _, err = o.Raw(sql, chartInfoId, updateIds).Exec()
  145. if len(edbInfoIdArrStr) > 0 {
  146. edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
  147. //更新图表关联的指标id
  148. sql = `update chart_info set edb_info_ids = ? where chart_info_id = ?`
  149. _, err = o.Raw(sql, edbInfoIdStr, chartInfoId).Exec()
  150. }
  151. return
  152. }
  153. func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dateList []string, valList []float64) (err error) {
  154. // 图表指标信息入库
  155. excelChartEdbId := chartEdb.ExcelChartEdbId
  156. if chartEdb.ExcelChartEdbId <= 0 {
  157. lastId, e := o.Insert(chartEdb)
  158. if e != nil {
  159. err = fmt.Errorf("新增指标失败,addChartEdbAndData: %v", e)
  160. return
  161. }
  162. excelChartEdbId = int(lastId)
  163. } else {
  164. _, e := o.Update(chartEdb)
  165. if e != nil {
  166. err = fmt.Errorf("更新指标失败,addChartEdbAndData: %v", e)
  167. return
  168. }
  169. //如果有数据则删除所有的数据
  170. sql := `delete from excel_chart_data where excel_chart_edb_id = ?`
  171. _, err = o.Raw(sql, excelChartEdbId).Exec()
  172. if err != nil {
  173. return
  174. }
  175. }
  176. chartEdb.ExcelChartEdbId = excelChartEdbId
  177. // 图表指标数据入库
  178. addList := make([]*ExcelChartData, 0)
  179. if len(dateList) > 0 && len(valList) > 0 {
  180. for k, v := range dateList {
  181. chartData := &ExcelChartData{
  182. ExcelInfoId: chartEdb.ExcelInfoId,
  183. ExcelChartEdbId: chartEdb.ExcelChartEdbId,
  184. DataTime: v,
  185. Value: valList[k],
  186. ModifyTime: time.Now(),
  187. CreateTime: time.Now(),
  188. }
  189. //时间戳
  190. currentDate, er := time.Parse(utils.FormatDate, v)
  191. if er != nil {
  192. err = fmt.Errorf("时间格式化失败 err:%v", er)
  193. return
  194. }
  195. timestamp := currentDate.UnixNano() / 1e6
  196. chartData.DataTimestamp = timestamp
  197. addList = append(addList, chartData)
  198. // data信息入库
  199. if len(addList) > 1000 {
  200. _, err = o.InsertMulti(len(addList), len(addList))
  201. if err != nil {
  202. return
  203. }
  204. addList = addList[:0]
  205. }
  206. }
  207. }
  208. // data信息入库
  209. if len(addList) > 0 {
  210. _, err = o.InsertMulti(len(addList), len(addList))
  211. if err != nil {
  212. return
  213. }
  214. }
  215. return
  216. }
  217. func GetExcelChartEdbMappingByExcelInfoId(excelInfoId int) (list []*ExcelChartEdb, err error) {
  218. o := orm.NewOrmUsingDB("data")
  219. sql := ` SELECT *
  220. FROM excel_chart_edb
  221. WHERE excel_info_id=?
  222. ORDER BY excel_chart_edb_id ASC `
  223. _, err = o.Raw(sql, excelInfoId).QueryRows(&list)
  224. return
  225. }
  226. func GetExcelChartEdbById(id int) (item *ExcelChartEdb, err error) {
  227. o := orm.NewOrmUsingDB("data")
  228. sql := ` SELECT * FROM excel_chart_edb WHERE excel_chart_edb_id=? `
  229. err = o.Raw(sql, id).QueryRow(&item)
  230. return
  231. }
  232. func GetExcelChartEdbMappingByChartInfoId(chartInfoId int) (list []*ExcelChartEdb, err error) {
  233. o := orm.NewOrmUsingDB("data")
  234. sql := ` SELECT *
  235. FROM excel_chart_edb
  236. WHERE chart_info_id=?
  237. ORDER BY excel_chart_edb_id ASC `
  238. _, err = o.Raw(sql, chartInfoId).QueryRows(&list)
  239. return
  240. }