base_from_business_data.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package mgo
  2. import (
  3. "context"
  4. "errors"
  5. "eta/eta_index_lib/utils"
  6. "fmt"
  7. "github.com/qiniu/qmgo"
  8. "go.mongodb.org/mongo-driver/bson"
  9. "go.mongodb.org/mongo-driver/bson/primitive"
  10. "time"
  11. )
  12. // BaseAddFromBusinessData
  13. // @Description: 外部数据基础
  14. type BaseAddFromBusinessData struct {
  15. BaseFromBusinessIndexId int64 `json:"base_from_business_index_id" bson:"base_from_business_index_id"` // 指标id
  16. IndexCode string `json:"index_code" bson:"index_code"` // 指标编码
  17. DataTime string `json:"data_time" bson:"data_time"` // 数据日期
  18. Value float64 `json:"value" bson:"value"` // 数据值
  19. CreateTime time.Time `json:"create_time" bson:"create_time"` // 创建时间
  20. ModifyTime time.Time `json:"modify_time" bson:"modify_time"` // 修改时间
  21. //DataTimestamp int64 `json:"data_timestamp"` // 数据日期时间戳
  22. }
  23. // BaseFromBusinessData
  24. // @Description: 外部数据集合
  25. type BaseFromBusinessData struct {
  26. ID primitive.ObjectID `json:"_id" bson:"_id" ` // 文档id
  27. //ID string `json:"_id" bson:"_id" ` // 文档id
  28. //BaseAddFromBusinessData
  29. BaseFromBusinessIndexId int64 `json:"base_from_business_index_id" bson:"base_from_business_index_id"` // 指标id
  30. IndexCode string `json:"index_code" bson:"index_code"` // 指标编码
  31. DataTime string `json:"data_time" bson:"data_time"` // 数据日期
  32. Value float64 `json:"value" bson:"value"` // 数据值
  33. CreateTime time.Time `json:"create_time" bson:"create_time"` // 创建时间
  34. ModifyTime time.Time `json:"modify_time" bson:"modify_time"` // 修改时间
  35. //DataTimestamp int64 `json:"data_timestamp"` // 数据日期时间戳
  36. }
  37. // CollectionName
  38. // @Description: 获取集合名称
  39. // @author: Roc
  40. // @receiver m
  41. // @datetime 2024-04-26 13:41:36
  42. // @return string
  43. func (m *BaseFromBusinessData) CollectionName() string {
  44. return "base_from_business_data"
  45. }
  46. // DataBaseName
  47. // @Description: 获取数据库名称
  48. // @author: Roc
  49. // @receiver m
  50. // @datetime 2024-04-26 13:41:33
  51. // @return string
  52. func (m *BaseFromBusinessData) DataBaseName() string {
  53. return "hz_data"
  54. }
  55. // GetCollection
  56. // @Description: 获取mongodb集合的句柄
  57. // @author: Roc
  58. // @receiver m
  59. // @datetime 2024-04-26 13:41:33
  60. // @return string
  61. func (m *BaseFromBusinessData) GetCollection() *qmgo.Collection {
  62. db := utils.MgoDataCli.Database(m.DataBaseName())
  63. return db.Collection(m.CollectionName())
  64. }
  65. // GetAllDataList
  66. // @Description: 根据条件获取所有数据
  67. // @author: Roc
  68. // @receiver m
  69. // @datetime 2024-04-26 13:42:19
  70. // @param whereParams interface{}
  71. // @return result []BaseFromBusinessData
  72. // @return err error
  73. func (m *BaseFromBusinessData) GetAllDataList(whereParams interface{}) (result []BaseFromBusinessData, err error) {
  74. if utils.MgoDataCli == nil {
  75. err = errors.New("mongodb连接失败")
  76. return
  77. }
  78. db := utils.MgoDataCli.Database(m.DataBaseName())
  79. coll := db.Collection(m.CollectionName())
  80. ctx := context.TODO()
  81. if err != nil {
  82. fmt.Println("MgoGetColl Err:", err.Error())
  83. return
  84. }
  85. err = coll.Find(ctx, whereParams).All(&result)
  86. return
  87. }
  88. // BatchInsertData
  89. // @Description: 批量写入数据
  90. // @author: Roc
  91. // @receiver m
  92. // @datetime 2024-04-26 14:22:18
  93. // @param dataList interface{}
  94. // @return err error
  95. func (m *BaseFromBusinessData) BatchInsertData(dataList interface{}) (err error) {
  96. db := utils.MgoDataCli.Database(m.DataBaseName())
  97. coll := db.Collection(m.CollectionName())
  98. ctx := context.TODO()
  99. _, err = coll.InsertMany(ctx, dataList)
  100. if err != nil {
  101. fmt.Println("BatchInsertData:Err:" + err.Error())
  102. return
  103. }
  104. return
  105. }
  106. // UpdateDataByColl
  107. // @Description: 单条数据修改
  108. // @author: Roc
  109. // @receiver m
  110. // @datetime 2024-04-26 15:01:51
  111. // @param whereParams interface{}
  112. // @param updateParams interface{}
  113. // @return err error
  114. func (m *BaseFromBusinessData) UpdateDataByColl(coll *qmgo.Collection, whereParams, updateParams interface{}) (err error) {
  115. ctx := context.TODO()
  116. err = coll.UpdateOne(ctx, whereParams, updateParams)
  117. if err != nil {
  118. fmt.Println("UpdateDataByColl:Err:" + err.Error())
  119. return
  120. }
  121. return
  122. }
  123. // UpdateData
  124. // @Description: 单条数据修改
  125. // @author: Roc
  126. // @receiver m
  127. // @datetime 2024-04-26 15:01:51
  128. // @param whereParams interface{}
  129. // @param updateParams interface{}
  130. // @return err error
  131. func (m *BaseFromBusinessData) UpdateData(whereParams, updateParams interface{}) (err error) {
  132. db := utils.MgoDataCli.Database(m.DataBaseName())
  133. coll := db.Collection(m.CollectionName())
  134. ctx := context.TODO()
  135. err = coll.UpdateOne(ctx, whereParams, updateParams)
  136. if err != nil {
  137. fmt.Println("UpdateData:Err:" + err.Error())
  138. return
  139. }
  140. return
  141. }
  142. // UpdateData
  143. // @Description: 单条数据修改
  144. // @author: Roc
  145. // @receiver m
  146. // @datetime 2024-04-26 15:01:51
  147. // @param params interface{}
  148. // @param whereParams interface{}
  149. // @return err error
  150. func (m *BaseFromBusinessData) HandleData(addDataList []BaseAddFromBusinessData, updateDataList []BaseFromBusinessData) (result interface{}, err error) {
  151. ctx := context.TODO()
  152. callback := func(sessCtx context.Context) (interface{}, error) {
  153. // 重要:确保事务中的每一个操作,都使用传入的sessCtx参数
  154. db := utils.MgoDataCli.Database(m.DataBaseName())
  155. coll := db.Collection(m.CollectionName())
  156. // 插入数据
  157. if len(addDataList) > 0 {
  158. _, err = coll.InsertMany(sessCtx, addDataList)
  159. if err != nil {
  160. return nil, err
  161. }
  162. }
  163. // 修改
  164. if len(updateDataList) > 0 {
  165. for _, v := range updateDataList {
  166. err = coll.UpdateOne(ctx, bson.M{"_id": v.ID}, bson.M{"$set": bson.M{"value": v.Value, "modify_time": v.ModifyTime}})
  167. if err != nil {
  168. fmt.Println("BatchInsertData:Err:" + err.Error())
  169. return nil, err
  170. }
  171. }
  172. }
  173. return nil, nil
  174. }
  175. result, err = utils.MgoDataCli.DoTransaction(ctx, callback)
  176. return
  177. }