edb_data_calculate_zjpj.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. package models
  2. import (
  3. "fmt"
  4. "github.com/beego/beego/v2/client/orm"
  5. "hongze/hongze_edb_lib/utils"
  6. "time"
  7. )
  8. // EdbDataCalculateZjpj 直接拼接数据结构体
  9. type EdbDataCalculateZjpj struct {
  10. EdbDataId int `orm:"column(edb_data_id);pk"`
  11. EdbInfoId int
  12. EdbCode string
  13. DataTime string
  14. Value float64
  15. Status int
  16. CreateTime time.Time
  17. ModifyTime time.Time
  18. DataTimestamp int64
  19. }
  20. // AddCalculateZjpj 新增直接拼接数据
  21. func AddCalculateZjpj(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdbInfo *EdbInfo, edbCode, uniqueCode string, sysUserId int, sysUserRealName string) (edbInfoId int, err error) {
  22. o := orm.NewOrm()
  23. to, err := o.Begin()
  24. if err != nil {
  25. return
  26. }
  27. defer func() {
  28. if err != nil {
  29. fmt.Println("AddCalculateZjpj,Err:" + err.Error())
  30. _ = to.Rollback()
  31. } else {
  32. _ = to.Commit()
  33. }
  34. }()
  35. var edbInfo *EdbInfo
  36. if req.EdbInfoId <= 0 {
  37. edbInfo = &EdbInfo{
  38. SourceName: "直接拼接",
  39. Source: utils.DATA_SOURCE_CALCULATE_ZJPJ,
  40. EdbCode: edbCode,
  41. EdbName: req.EdbName,
  42. EdbNameSource: req.EdbName,
  43. Frequency: req.Frequency,
  44. Unit: req.Unit,
  45. StartDate: firstEdbInfo.StartDate,
  46. EndDate: firstEdbInfo.EndDate,
  47. ClassifyId: req.ClassifyId,
  48. SysUserId: sysUserId,
  49. SysUserRealName: sysUserRealName,
  50. UniqueCode: uniqueCode,
  51. CreateTime: time.Now(),
  52. ModifyTime: time.Now(),
  53. CalculateFormula: req.Formula,
  54. EdbType: 2,
  55. }
  56. newEdbInfoId, err := to.Insert(edbInfo)
  57. if err != nil {
  58. return edbInfoId, err
  59. }
  60. edbInfoId = int(newEdbInfoId)
  61. } else {
  62. edbInfoId = req.EdbInfoId
  63. //查询
  64. tmpEdbInfo, tmpErr := GetEdbInfoById(edbInfoId)
  65. if tmpErr != nil {
  66. err = tmpErr
  67. return
  68. }
  69. tmpEdbInfo.EdbName = req.EdbName
  70. tmpEdbInfo.ClassifyId = req.ClassifyId
  71. tmpEdbInfo.Frequency = req.Frequency
  72. tmpEdbInfo.Unit = req.Unit
  73. tmpEdbInfo.CalculateFormula = req.Formula
  74. edbInfo = tmpEdbInfo
  75. //删除指标数据
  76. dataTableName := GetEdbDataTableName(utils.DATA_SOURCE_CALCULATE_ZJPJ)
  77. fmt.Println("dataTableName:" + dataTableName)
  78. deleteSql := ` DELETE FROM %s WHERE edb_info_id=? `
  79. deleteSql = fmt.Sprintf(deleteSql, dataTableName)
  80. _, err = to.Raw(deleteSql, req.EdbInfoId).Exec()
  81. if err != nil {
  82. return 0, err
  83. }
  84. //删除指标关系
  85. sql := ` DELETE FROM edb_info_calculate_mapping WHERE edb_info_id=? `
  86. _, err = to.Raw(sql, edbInfoId).Exec()
  87. }
  88. //关联关系
  89. //第一个指标
  90. {
  91. calculateMappingItem := new(EdbInfoCalculateMapping)
  92. calculateMappingItem.CreateTime = time.Now()
  93. calculateMappingItem.ModifyTime = time.Now()
  94. calculateMappingItem.Sort = 1
  95. calculateMappingItem.EdbCode = edbCode
  96. calculateMappingItem.EdbInfoId = edbInfoId
  97. calculateMappingItem.FromEdbInfoId = firstEdbInfo.EdbInfoId
  98. calculateMappingItem.FromEdbCode = firstEdbInfo.EdbCode
  99. calculateMappingItem.FromEdbName = firstEdbInfo.EdbName
  100. calculateMappingItem.FromSource = firstEdbInfo.Source
  101. calculateMappingItem.FromSourceName = firstEdbInfo.SourceName
  102. calculateMappingItem.FromTag = "A"
  103. calculateMappingItem.Source = edbInfo.Source
  104. calculateMappingItem.SourceName = edbInfo.SourceName
  105. _, err = to.Insert(calculateMappingItem)
  106. if err != nil {
  107. return
  108. }
  109. }
  110. //第二个指标
  111. {
  112. calculateMappingItem := new(EdbInfoCalculateMapping)
  113. calculateMappingItem.CreateTime = time.Now()
  114. calculateMappingItem.ModifyTime = time.Now()
  115. calculateMappingItem.Sort = 1
  116. calculateMappingItem.EdbCode = edbCode
  117. calculateMappingItem.EdbInfoId = edbInfoId
  118. calculateMappingItem.FromEdbInfoId = secondEdbInfo.EdbInfoId
  119. calculateMappingItem.FromEdbCode = secondEdbInfo.EdbCode
  120. calculateMappingItem.FromEdbName = secondEdbInfo.EdbName
  121. calculateMappingItem.FromSource = secondEdbInfo.Source
  122. calculateMappingItem.FromSourceName = secondEdbInfo.SourceName
  123. calculateMappingItem.FromTag = "B"
  124. calculateMappingItem.Source = edbInfo.Source
  125. calculateMappingItem.SourceName = edbInfo.SourceName
  126. _, err = to.Insert(calculateMappingItem)
  127. if err != nil {
  128. return
  129. }
  130. }
  131. addDataList := make([]*EdbDataCalculateZjpj, 0)
  132. //拼接数据
  133. //第一个指标
  134. {
  135. var condition string
  136. var pars []interface{}
  137. condition += " AND data_time < ? AND edb_info_id=? "
  138. pars = append(pars, req.Formula, firstEdbInfo.EdbInfoId)
  139. //第一个指标的数据列表
  140. firstDataList, tmpErr := GetEdbDataListAll(condition, pars, firstEdbInfo.Source, 0)
  141. if tmpErr != nil {
  142. return edbInfoId, tmpErr
  143. }
  144. for _, v := range firstDataList {
  145. //时间戳
  146. currentDate, _ := time.Parse(utils.FormatDate, v.DataTime)
  147. timestamp := currentDate.UnixNano() / 1e6
  148. edbDataZjpj := &EdbDataCalculateZjpj{
  149. EdbInfoId: edbInfoId,
  150. EdbCode: edbInfo.EdbCode,
  151. DataTime: v.DataTime,
  152. Value: v.Value,
  153. Status: 1,
  154. CreateTime: time.Now(),
  155. ModifyTime: time.Now(),
  156. DataTimestamp: timestamp,
  157. }
  158. addDataList = append(addDataList, edbDataZjpj)
  159. if len(addDataList) >= 200 {
  160. _, tmpErr := to.InsertMulti(len(addDataList), addDataList)
  161. if tmpErr != nil {
  162. err = tmpErr
  163. return
  164. }
  165. //重新初始化需要加入的数据切片
  166. addDataList = make([]*EdbDataCalculateZjpj, 0)
  167. }
  168. }
  169. }
  170. //第二个指标
  171. {
  172. var condition string
  173. var pars []interface{}
  174. condition += " AND data_time >= ? AND edb_info_id = ? "
  175. pars = append(pars, req.Formula, secondEdbInfo.EdbInfoId)
  176. //第二个指标的数据列表
  177. secondDataList, tmpErr := GetEdbDataListAll(condition, pars, secondEdbInfo.Source, 0)
  178. if tmpErr != nil {
  179. return edbInfoId, tmpErr
  180. }
  181. for _, v := range secondDataList {
  182. //时间戳
  183. currentDate, _ := time.Parse(utils.FormatDate, v.DataTime)
  184. timestamp := currentDate.UnixNano() / 1e6
  185. edbDataZjpj := &EdbDataCalculateZjpj{
  186. EdbInfoId: edbInfoId,
  187. EdbCode: edbInfo.EdbCode,
  188. DataTime: v.DataTime,
  189. Value: v.Value,
  190. Status: 1,
  191. CreateTime: time.Now(),
  192. ModifyTime: time.Now(),
  193. DataTimestamp: timestamp,
  194. }
  195. addDataList = append(addDataList, edbDataZjpj)
  196. if len(addDataList) >= 200 {
  197. _, tmpErr := to.InsertMulti(len(addDataList), addDataList)
  198. if tmpErr != nil {
  199. err = tmpErr
  200. return
  201. }
  202. //重新初始化需要加入的数据切片
  203. addDataList = make([]*EdbDataCalculateZjpj, 0)
  204. }
  205. }
  206. }
  207. //将剩余的数据入库
  208. if len(addDataList) > 0 {
  209. _, tmpErr := to.InsertMulti(len(addDataList), addDataList)
  210. if tmpErr != nil {
  211. err = tmpErr
  212. return
  213. }
  214. }
  215. return
  216. }