base_from_business_data.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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. // BaseFromBusinessData
  13. // @Description: 外部数据集合
  14. type BaseFromBusinessData struct {
  15. ID primitive.ObjectID `json:"_id" bson:"_id,omitempty"` // 文档id
  16. //ID string `json:"_id" bson:"_id" ` // 文档id
  17. BaseFromBusinessIndexId int64 `json:"base_from_business_index_id" bson:"base_from_business_index_id"` // 指标id
  18. IndexCode string `json:"index_code" bson:"index_code"` // 指标编码
  19. DataTime time.Time `json:"data_time" bson:"data_time"` // 数据日期
  20. Value float64 `json:"value" bson:"value"` // 数据值
  21. CreateTime time.Time `json:"create_time" bson:"create_time"` // 创建时间
  22. ModifyTime time.Time `json:"modify_time" bson:"modify_time"` // 修改时间
  23. }
  24. // CollectionName
  25. // @Description: 获取集合名称
  26. // @author: Roc
  27. // @receiver m
  28. // @datetime 2024-04-26 13:41:36
  29. // @return string
  30. func (m *BaseFromBusinessData) CollectionName() string {
  31. return "base_from_business_data"
  32. }
  33. // DataBaseName
  34. // @Description: 获取数据库名称
  35. // @author: Roc
  36. // @receiver m
  37. // @datetime 2024-04-26 13:41:33
  38. // @return string
  39. func (m *BaseFromBusinessData) DataBaseName() string {
  40. return utils.MgoDataDbName
  41. }
  42. // GetCollection
  43. // @Description: 获取mongodb集合的句柄
  44. // @author: Roc
  45. // @receiver m
  46. // @datetime 2024-04-26 13:41:33
  47. // @return string
  48. func (m *BaseFromBusinessData) GetCollection() *qmgo.Collection {
  49. db := utils.MgoDataCli.Database(m.DataBaseName())
  50. return db.Collection(m.CollectionName())
  51. }
  52. // GetAllDataList
  53. // @Description: 根据条件获取所有数据
  54. // @author: Roc
  55. // @receiver m
  56. // @datetime 2024-04-26 13:42:19
  57. // @param whereParams interface{}
  58. // @return result []BaseFromBusinessData
  59. // @return err error
  60. func (m *BaseFromBusinessData) GetAllDataList(whereParams interface{}) (result []*BaseFromBusinessData, err error) {
  61. if utils.MgoDataCli == nil {
  62. err = errors.New("mongodb连接失败")
  63. return
  64. }
  65. db := utils.MgoDataCli.Database(m.DataBaseName())
  66. coll := db.Collection(m.CollectionName())
  67. ctx := context.TODO()
  68. if err != nil {
  69. fmt.Println("MgoGetColl Err:", err.Error())
  70. return
  71. }
  72. err = coll.Find(ctx, whereParams).All(&result)
  73. if err != nil {
  74. return
  75. }
  76. for _, v := range result {
  77. v.DataTime = v.DataTime.In(time.Local)
  78. v.CreateTime = v.CreateTime.In(time.Local)
  79. v.ModifyTime = v.ModifyTime.In(time.Local)
  80. }
  81. return
  82. }
  83. // BatchInsertData
  84. // @Description: 批量写入数据
  85. // @author: Roc
  86. // @receiver m
  87. // @datetime 2024-04-26 14:22:18
  88. // @param dataList interface{}
  89. // @return err error
  90. func (m *BaseFromBusinessData) BatchInsertData(dataList interface{}) (err error) {
  91. db := utils.MgoDataCli.Database(m.DataBaseName())
  92. coll := db.Collection(m.CollectionName())
  93. ctx := context.TODO()
  94. _, err = coll.InsertMany(ctx, dataList)
  95. if err != nil {
  96. fmt.Println("BatchInsertData:Err:" + err.Error())
  97. return
  98. }
  99. return
  100. }
  101. // UpdateDataByColl
  102. // @Description: 单条数据修改
  103. // @author: Roc
  104. // @receiver m
  105. // @datetime 2024-04-26 15:01:51
  106. // @param whereParams interface{}
  107. // @param updateParams interface{}
  108. // @return err error
  109. func (m *BaseFromBusinessData) UpdateDataByColl(coll *qmgo.Collection, whereParams, updateParams interface{}) (err error) {
  110. ctx := context.TODO()
  111. err = coll.UpdateOne(ctx, whereParams, updateParams)
  112. if err != nil {
  113. fmt.Println("UpdateDataByColl:Err:" + err.Error())
  114. return
  115. }
  116. return
  117. }
  118. // UpdateData
  119. // @Description: 单条数据修改
  120. // @author: Roc
  121. // @receiver m
  122. // @datetime 2024-04-26 15:01:51
  123. // @param whereParams interface{}
  124. // @param updateParams interface{}
  125. // @return err error
  126. func (m *BaseFromBusinessData) UpdateData(whereParams, updateParams interface{}) (err error) {
  127. db := utils.MgoDataCli.Database(m.DataBaseName())
  128. coll := db.Collection(m.CollectionName())
  129. ctx := context.TODO()
  130. err = coll.UpdateOne(ctx, whereParams, updateParams)
  131. if err != nil {
  132. fmt.Println("UpdateData:Err:" + err.Error())
  133. return
  134. }
  135. return
  136. }
  137. // HandleData
  138. // @Description: 事务处理数据
  139. // @author: Roc
  140. // @receiver m
  141. // @datetime 2024-04-30 10:40:20
  142. // @param addDataList []BaseAddFromBusinessData
  143. // @param updateDataList []BaseFromBusinessData
  144. // @return result interface{}
  145. // @return err error
  146. func (m *BaseFromBusinessData) HandleData(addDataList, updateDataList []BaseFromBusinessData) (result interface{}, err error) {
  147. ctx := context.TODO()
  148. callback := func(sessCtx context.Context) (interface{}, error) {
  149. // 重要:确保事务中的每一个操作,都使用传入的sessCtx参数
  150. db := utils.MgoDataCli.Database(m.DataBaseName())
  151. coll := db.Collection(m.CollectionName())
  152. // 插入数据
  153. if len(addDataList) > 0 {
  154. _, err = coll.InsertMany(sessCtx, addDataList)
  155. if err != nil {
  156. return nil, err
  157. }
  158. }
  159. // 修改
  160. if len(updateDataList) > 0 {
  161. for _, v := range updateDataList {
  162. err = coll.UpdateOne(ctx, bson.M{"_id": v.ID}, bson.M{"$set": bson.M{"value": v.Value, "modify_time": v.ModifyTime}})
  163. if err != nil {
  164. fmt.Println("BatchInsertData:Err:" + err.Error())
  165. return nil, err
  166. }
  167. }
  168. }
  169. return nil, nil
  170. }
  171. result, err = utils.MgoDataCli.DoTransaction(ctx, callback)
  172. return
  173. }
  174. // GetEdbInfoMaxAndMinInfo
  175. // @Description: 获取当前指标的最大最小值
  176. // @author: Roc
  177. // @receiver m
  178. // @datetime 2024-04-30 17:15:39
  179. // @param whereParams interface{}
  180. // @return result EdbInfoMaxAndMinInfo
  181. // @return err error
  182. func (m *BaseFromBusinessData) GetEdbInfoMaxAndMinInfo(whereParams interface{}) (result EdbInfoMaxAndMinInfo, err error) {
  183. if utils.MgoDataCli == nil {
  184. err = errors.New("mongodb连接失败")
  185. return
  186. }
  187. db := utils.MgoDataCli.Database(m.DataBaseName())
  188. coll := db.Collection(m.CollectionName())
  189. ctx := context.TODO()
  190. if err != nil {
  191. fmt.Println("MgoGetColl Err:", err.Error())
  192. return
  193. }
  194. err = coll.Aggregate(ctx, whereParams).One(&result)
  195. if err != nil {
  196. return
  197. }
  198. result.MinDate = result.MinDate.In(time.Local)
  199. result.MaxDate = result.MaxDate.In(time.Local)
  200. result.LatestDate = result.LatestDate.In(time.Local)
  201. return
  202. }
  203. // GetLatestValue
  204. // @Description: 获取当前指标的最新数据记录
  205. // @author: Roc
  206. // @receiver m
  207. // @datetime 2024-04-30 17:16:15
  208. // @param whereParams interface{}
  209. // @param selectParam interface{}
  210. // @return latestValue LatestValue
  211. // @return err error
  212. func (m *BaseFromBusinessData) GetLatestValue(whereParams, selectParam interface{}) (latestValue LatestValue, err error) {
  213. if utils.MgoDataCli == nil {
  214. err = errors.New("mongodb连接失败")
  215. return
  216. }
  217. db := utils.MgoDataCli.Database(m.DataBaseName())
  218. coll := db.Collection(m.CollectionName())
  219. ctx := context.TODO()
  220. if err != nil {
  221. fmt.Println("MgoGetColl Err:", err.Error())
  222. return
  223. }
  224. //var result interface{}
  225. //err = coll.Find(ctx, whereParams).Select(selectParam).One(&result)
  226. err = coll.Find(ctx, whereParams).Select(selectParam).One(&latestValue)
  227. return
  228. }