base_from_business.go 11 KB

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