base_from_business.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. package models
  2. import (
  3. "eta/eta_index_lib/global"
  4. "eta/eta_index_lib/models/mgo"
  5. "eta/eta_index_lib/utils"
  6. "fmt"
  7. "go.mongodb.org/mongo-driver/bson"
  8. "time"
  9. )
  10. // BaseFromBusinessIndex
  11. // @Description: 外部指标(商家系统)表
  12. type BaseFromBusinessIndex struct {
  13. BaseFromBusinessIndexId int64 `gorm:"column:base_from_business_index_id;primaryKey"`
  14. //BaseFromBusinessIndexId int64 `orm:"column(base_from_business_index_id);pk"`
  15. IndexCode string `description:"指标编码"`
  16. IndexName string `description:"指标名称"`
  17. Unit string `description:"单位"`
  18. Frequency string `description:"频度"`
  19. Source int `description:"数据来源"`
  20. SourceName string `description:"数据来源名称"`
  21. StartDate time.Time `description:"开始日期"`
  22. EndDate time.Time `description:"结束日期"`
  23. Remark string `description:"备注字段"`
  24. BaseModifyTime time.Time `description:"基础信息(名称,单位,频度)变更时间"`
  25. DataUpdateTime time.Time `description:"最近一次数据发生变化的时间"`
  26. CreateTime time.Time `description:"创建时间"`
  27. ModifyTime time.Time `description:"修改时间"`
  28. }
  29. // BaseFromBusinessIndexResp
  30. // @Description: 外部指标(商家系统)表
  31. type BaseFromBusinessIndexResp struct {
  32. IndexCode string `description:"指标编码"`
  33. IndexName string `description:"指标名称"`
  34. Unit string `description:"单位"`
  35. Frequency string `description:"频度"`
  36. SourceName string `description:"数据来源名称"`
  37. }
  38. // EdbBusinessSource
  39. // @Description: 自有数据(商家)指标来源
  40. type EdbBusinessSource struct {
  41. EdbBusinessSourceId int64 `gorm:"column:edb_business_source_id;primaryKey"`
  42. //EdbBusinessSourceId int64 `orm:"column(edb_business_source_id);pk"`
  43. SourceName string `description:"来源名称"` // 来源名称
  44. CreateTime time.Time `description:"创建时间"` // 创建时间
  45. }
  46. // AddBusinessIndexReq
  47. // @Description: 添加外部指标(商家)请求
  48. type AddBusinessIndexReq struct {
  49. IndexCode string `description:"指标编码"`
  50. IndexName string `description:"指标名称"`
  51. Unit string `description:"单位"`
  52. Frequency string `description:"频度"`
  53. SourceName string `description:"数据来源名称"`
  54. Remark string `description:"备注字段"`
  55. DataList []AddBusinessDataReq `description:"指标数据"`
  56. }
  57. // AddBusinessDataReq
  58. // @Description: 外部指标(商家系统)数据
  59. type AddBusinessDataReq struct {
  60. Value float64 `description:"值"`
  61. Date string `description:"日期"`
  62. }
  63. // DelBusinessIndexReq
  64. // @Description: 删除外部指标(商家)请求
  65. type DelBusinessIndexReq struct {
  66. IndexCodeList []string `description:"指标编码"`
  67. }
  68. // DelBusinessIndexDataReq
  69. // @Description: 删除外部指标(商家)明细数据请求
  70. type DelBusinessIndexDataReq struct {
  71. IndexCode string `description:"指标编码"`
  72. StartDate string `description:"开始日期"`
  73. EndDate string `description:"结束日期"`
  74. }
  75. // GetIndexItem
  76. // @Description: 根据指标编码获取自有数据指标
  77. // @author: Roc
  78. // @receiver m
  79. // @datetime 2024-05-31 16:29:30
  80. // @param indexCode string
  81. // @return item *BaseFromBusinessIndex
  82. // @return err error
  83. func (m *BaseFromBusinessIndex) GetIndexItem(indexCode string) (item *BaseFromBusinessIndex, err error) {
  84. //o := orm.NewOrm()
  85. sql := `SELECT * FROM base_from_business_index WHERE index_code = ? `
  86. //err = o.Raw(sql, indexCode).QueryRow(&item)
  87. err = global.DEFAULT_DB.Raw(sql, indexCode).First(&item).Error
  88. return
  89. }
  90. // GetIndexItemList
  91. // @Description: 根据指标编码列表获取自有数据指标列表
  92. // @author: Roc
  93. // @receiver m
  94. // @datetime 2024-05-31 16:29:12
  95. // @param indexCodeList []string
  96. // @return items []*BaseFromBusinessIndex
  97. // @return err error
  98. func (m *BaseFromBusinessIndex) GetIndexItemList(indexCodeList []string) (items []*BaseFromBusinessIndex, err error) {
  99. num := len(indexCodeList)
  100. if num <= 0 {
  101. return
  102. }
  103. //o := orm.NewOrm()
  104. //sql := `SELECT * FROM base_from_business_index WHERE index_code in (` + utils.GetOrmInReplace(num) + `) `
  105. sql := `SELECT * FROM base_from_business_index WHERE index_code in ? `
  106. err = global.DEFAULT_DB.Raw(sql, indexCodeList).Find(&items).Error
  107. //_, err = o.Raw(sql, indexCodeList).QueryRows(&items)
  108. return
  109. }
  110. // DelIndexItemList
  111. // @Description: 根据指标编码列表删除自有数据指标
  112. // @author: Roc
  113. // @receiver m
  114. // @datetime 2024-05-31 16:36:52
  115. // @param indexCodeList []string
  116. // @return err error
  117. func (m *BaseFromBusinessIndex) DelIndexItemList(indexCodeList []string) (err error) {
  118. num := len(indexCodeList)
  119. if num <= 0 {
  120. return
  121. }
  122. //o := orm.NewOrm()
  123. //sql := `DELETE FROM base_from_business_index WHERE index_code in (` + utils.GetOrmInReplace(num) + `) `
  124. sql := `DELETE FROM base_from_business_index WHERE index_code in ? `
  125. err = global.DEFAULT_DB.Exec(sql, indexCodeList).Error
  126. //_, err = o.Raw(sql, indexCodeList).Exec()
  127. return
  128. }
  129. // GetMaxId
  130. // @Description: 获取自有数据库中的最大id
  131. // @author: Roc
  132. // @receiver m
  133. // @datetime 2024-05-31 13:11:34
  134. // @return maxId int
  135. // @return err error
  136. func (m *BaseFromBusinessIndex) GetMaxId() (maxId int, err error) {
  137. //o := orm.NewOrm()
  138. sql := `SELECT COALESCE(MAX(base_from_business_index_id), 0) as id FROM base_from_business_index limit 1`
  139. err = global.DEFAULT_DB.Raw(sql).Scan(&maxId).Error
  140. //err = o.Raw(sql).QueryRow(&maxId)
  141. return
  142. }
  143. // Add 新增
  144. func (m *BaseFromBusinessIndex) Add() (err error) {
  145. //o := orm.NewOrm()
  146. //lastId, err := o.Insert(m)
  147. //if err != nil {
  148. // return
  149. //}
  150. //m.BaseFromBusinessIndexId = lastId
  151. err = global.DEFAULT_DB.Create(&m).Error
  152. return
  153. }
  154. func (m *BaseFromBusinessIndex) Update(cols []string) (err error) {
  155. //o := orm.NewOrm()
  156. //_, err = o.Update(m, cols...)
  157. err = global.DEFAULT_DB.Model(&m).Select(cols).Updates(&m).Error
  158. return
  159. }
  160. func (m *BaseFromBusinessIndex) Del() (err error) {
  161. //o := orm.NewOrm()
  162. //_, err = o.Delete(m)
  163. err = global.DEFAULT_DB.Delete(&m).Error
  164. return
  165. }
  166. func (m *BaseFromBusinessIndex) UpdateIndex(item *BaseFromBusinessIndex, updateCols []string) (err error) {
  167. if item == nil {
  168. return
  169. }
  170. if len(updateCols) == 0 {
  171. return
  172. }
  173. //o := orm.NewOrm()
  174. //_, err = o.Update(item, updateCols...)
  175. err = global.DEFAULT_DB.Model(&item).Select(updateCols).Updates(&item).Error
  176. return
  177. }
  178. // GetEdbBusinessSourceItem
  179. // @Description: 根据来源名称获取来源信息
  180. // @author: Roc
  181. // @receiver m
  182. // @datetime 2024-04-25 18:09:03
  183. // @param sourceName string
  184. // @return item *EdbBusinessSource
  185. // @return err error
  186. func (m *EdbBusinessSource) GetEdbBusinessSourceItem(sourceName string) (item *EdbBusinessSource, err error) {
  187. //o := orm.NewOrm()
  188. sql := `SELECT * FROM edb_business_source WHERE source_name = ? `
  189. //err = o.Raw(sql, sourceName).QueryRow(&item)
  190. err = global.DEFAULT_DB.Raw(sql, sourceName).First(&item).Error
  191. return
  192. }
  193. // Add 新增
  194. func (m *EdbBusinessSource) Add() (err error) {
  195. ////o := orm.NewOrm()
  196. //lastId, err := o.Insert(m)
  197. //if err != nil {
  198. // return
  199. //}
  200. //m.EdbBusinessSourceId = lastId
  201. err = global.DEFAULT_DB.Create(&m).Error
  202. return
  203. }
  204. // GetEdbInfoMaxAndMinInfo
  205. // @Description: 获取指标的最新数据记录信息
  206. // @author: Roc
  207. // @receiver m
  208. // @datetime 2024-07-02 14:50:50
  209. // @param edbCode string
  210. // @return item *EdbInfoMaxAndMinInfo
  211. // @return err error
  212. func (m BaseFromBusinessIndex) GetEdbInfoMaxAndMinInfo(edbCode string) (item *EdbInfoMaxAndMinInfo, err error) {
  213. if utils.UseMongo {
  214. return m.getEdbInfoMaxAndMinInfoByMongo(edbCode)
  215. } else {
  216. return m.getEdbInfoMaxAndMinInfoByMysql(edbCode)
  217. }
  218. return
  219. }
  220. // getEdbInfoMaxAndMinInfoByMongo
  221. // @Description: 获取指标的最新数据记录信息(从mongo中获取)
  222. // @author: Roc
  223. // @receiver m
  224. // @datetime 2024-07-02 14:41:20
  225. // @param edbCode string
  226. // @return item *EdbInfoMaxAndMinInfo
  227. // @return err error
  228. func (m BaseFromBusinessIndex) getEdbInfoMaxAndMinInfoByMongo(edbCode string) (item *EdbInfoMaxAndMinInfo, err error) {
  229. mogDataObj := new(mgo.BaseFromBusinessData)
  230. pipeline := []bson.M{
  231. {"$match": bson.M{"index_code": edbCode}},
  232. {"$group": bson.M{
  233. "_id": nil,
  234. "min_date": bson.M{"$min": "$data_time"},
  235. "max_date": bson.M{"$max": "$data_time"},
  236. "min_value": bson.M{"$min": "$value"},
  237. "max_value": bson.M{"$max": "$value"},
  238. }},
  239. {"$project": bson.M{"_id": 0}}, // 可选,如果不需要_id字段
  240. }
  241. result, err := mogDataObj.GetEdbInfoMaxAndMinInfo(pipeline)
  242. if err != nil {
  243. fmt.Println("BaseFromBusinessIndex GetEdbInfoMaxAndMinInfo Err:" + err.Error())
  244. return
  245. }
  246. if !result.MaxDate.IsZero() {
  247. whereQuery := bson.M{"index_code": edbCode, "data_time": result.MaxDate}
  248. selectParam := bson.D{{"value", 1}, {"_id", 0}}
  249. latestValue, tmpErr := mogDataObj.GetLatestValue(whereQuery, selectParam)
  250. if tmpErr != nil {
  251. err = tmpErr
  252. return
  253. }
  254. result.LatestValue = latestValue.Value
  255. result.EndValue = latestValue.Value
  256. }
  257. item = &EdbInfoMaxAndMinInfo{
  258. MinDate: result.MinDate.Format(utils.FormatDate),
  259. MaxDate: result.MaxDate.Format(utils.FormatDate),
  260. MinValue: result.MinValue,
  261. MaxValue: result.MaxValue,
  262. LatestValue: result.LatestValue,
  263. LatestDate: result.LatestDate.Format(utils.FormatDate),
  264. EndValue: result.EndValue,
  265. }
  266. return
  267. }
  268. // getEdbInfoMaxAndMinInfoByMysql
  269. // @Description: 获取指标的最新数据记录信息(从mysql中获取)
  270. // @author: Roc
  271. // @receiver m
  272. // @datetime 2024-07-02 14:49:58
  273. // @param edbCode string
  274. // @return item *EdbInfoMaxAndMinInfo
  275. // @return err error
  276. func (m BaseFromBusinessIndex) getEdbInfoMaxAndMinInfoByMysql(edbCode string) (item *EdbInfoMaxAndMinInfo, err error) {
  277. dataObj := BaseFromBusinessData{}
  278. result, err := dataObj.GetEdbInfoMaxAndMinInfo(edbCode)
  279. if err != nil {
  280. return
  281. }
  282. item = &EdbInfoMaxAndMinInfo{
  283. MinDate: result.MinDate,
  284. MaxDate: result.MaxDate,
  285. MinValue: result.MinValue,
  286. MaxValue: result.MaxValue,
  287. LatestValue: result.LatestValue,
  288. LatestDate: result.LatestDate,
  289. EndValue: result.EndValue,
  290. }
  291. return
  292. }
  293. // ModifyIndexMaxAndMinInfo
  294. // @Description: 修改最大值和最小值信息
  295. // @author: Roc
  296. // @receiver m
  297. // @datetime 2024-05-06 14:07:46
  298. // @param indexCode string
  299. // @param item *EdbInfoMaxAndMinInfo
  300. // @param isIndexUpdateOrAdd bool
  301. // @return err error
  302. func (m *BaseFromBusinessIndex) ModifyIndexMaxAndMinInfo(indexCode string, item *EdbInfoMaxAndMinInfo, isIndexUpdateOrAdd bool) (err error) {
  303. //o := orm.NewOrm()
  304. sql := ` UPDATE base_from_business_index SET start_date=?,end_date=?,latest_value=?,modify_time=NOW() `
  305. if isIndexUpdateOrAdd {
  306. sql += `,data_update_time=NOW() `
  307. }
  308. sql += ` WHERE index_code=?`
  309. //_, err = o.Raw(sql, item.MinDate, item.MaxDate, item.LatestValue, indexCode).Exec()
  310. err = global.DEFAULT_DB.Exec(sql, item.MinDate, item.MaxDate, item.LatestValue, indexCode).Error
  311. return
  312. }