base_from_smm.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. package models
  2. import (
  3. "eta/eta_index_lib/global"
  4. "eta/eta_index_lib/utils"
  5. "fmt"
  6. "gorm.io/gorm"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. type BaseFromSmmData struct {
  12. SmmDataId int `gorm:"column:smm_data_id;primaryKey"`
  13. //SmmDataId int `orm:"column(smm_data_id);pk"`
  14. BaseFromSmmIndexId int
  15. IndexCode string
  16. DataTime string
  17. Value string
  18. CreateTime time.Time
  19. ModifyTime time.Time
  20. DataTimestamp int64
  21. }
  22. func (e *BaseFromSmmData) AfterFind(db *gorm.DB) (err error) {
  23. e.DataTime = utils.GormDateStrToDateStr(e.DataTime)
  24. return
  25. }
  26. func (s *BaseFromSmmData) Update(cols []string) (err error) {
  27. //o := orm.NewOrm()
  28. //_, err = o.Update(s, cols...)
  29. err = global.DEFAULT_DB.Model(&s).Select(cols).Updates(&s).Error
  30. return
  31. }
  32. func AddBaseFromSmmData(item []*BaseFromSmmData) (err error) {
  33. //o := orm.NewOrm()
  34. //_, err = o.InsertMulti(500, item)
  35. err = global.DEFAULT_DB.CreateInBatches(item, utils.MultiAddNum).Error
  36. return
  37. }
  38. func GetBaseFromSmmDataByCondition(condition string, pars []interface{}) (list []*BaseFromSmmData, err error) {
  39. //o := orm.NewOrm()
  40. sql := `SELECT * FROM base_from_smm_data WHERE 1=1 `
  41. if condition != "" {
  42. sql += condition
  43. }
  44. //_, err = o.Raw(sql, pars).QueryRows(&list)
  45. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&list).Error
  46. return
  47. }
  48. func UpdateBaseFromSmmDataListByIndexCode(items []*BaseFromSmmData) (err error) {
  49. //o := orm.NewOrm()
  50. to := global.DEFAULT_DB.Begin()
  51. defer func() {
  52. if err != nil {
  53. _ = to.Rollback()
  54. } else {
  55. _ = to.Commit()
  56. }
  57. }()
  58. sql := `UPDATE base_from_smm_data SET value=? WHERE index_code=? AND data_time=? `
  59. for _, item := range items {
  60. err = to.Exec(sql, item.Value, item.IndexCode, item.DataTime).Error
  61. if err != nil {
  62. return
  63. }
  64. }
  65. //stmt, err := o.Raw(sql).Prepare()
  66. //if err != nil {
  67. // return
  68. //}
  69. //defer stmt.Close()
  70. //for _, item := range items {
  71. // _, err = stmt.Exec(item.Value, item.IndexCode, item.DataTime)
  72. // if err != nil {
  73. // return
  74. // }
  75. //}
  76. return
  77. }
  78. func GetBaseFromSmmDataByIds(smmDataIds []int) (list []*BaseFromSmmData, err error) {
  79. if len(smmDataIds) == 0 {
  80. return
  81. }
  82. //o := orm.NewOrm()
  83. //sql := `SELECT * FROM base_from_smm_data WHERE 1=1 AND base_from_smm_index_id in (` + utils.GetOrmInReplace(len(smmDataIds)) + `)`
  84. sql := `SELECT * FROM base_from_smm_data WHERE 1=1 AND base_from_smm_index_id in ?`
  85. //_, err = o.Raw(sql, smmDataIds).QueryRows(&list)
  86. err = global.DEFAULT_DB.Raw(sql, smmDataIds).Find(&list).Error
  87. return
  88. }
  89. func GetBaseFromSmmDataByCodeAndDate(indexCode string, dataTime string) (item *BaseFromSmmData, err error) {
  90. //o := orm.NewOrm()
  91. sql := `SELECT * FROM base_from_smm_data WHERE 1=1 AND index_code=? AND data_time=? `
  92. //err = o.Raw(sql, indexCode, dataTime).QueryRow(&item)
  93. err = global.DEFAULT_DB.Raw(sql, indexCode, dataTime).First(&item).Error
  94. return
  95. }
  96. // 新增有色指标数据
  97. func AddEdbDataFromSmm(edbCode string, smmBaseDataAll []*BaseFromSmmData) (err error) {
  98. //o := orm.NewOrm()
  99. var isAdd bool
  100. addSql := ` INSERT INTO edb_data_ys(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  101. existMap := make(map[string]string)
  102. for _, sv := range smmBaseDataAll {
  103. eDate := sv.DataTime
  104. dataTime, err := time.ParseInLocation(utils.FormatDate, eDate, time.Local)
  105. if err != nil {
  106. return err
  107. }
  108. timestamp := dataTime.UnixNano() / 1e6
  109. timeStr := fmt.Sprintf("%d", timestamp)
  110. if _, ok := existMap[eDate]; !ok {
  111. addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.Value)
  112. isAdd = true
  113. }
  114. existMap[eDate] = sv.Value
  115. }
  116. if isAdd {
  117. addSql = strings.TrimRight(addSql, ",")
  118. utils.FileLog.Info("addSql:" + addSql)
  119. //_, err = o.Raw(addSql).Exec()
  120. err = global.DEFAULT_DB.Exec(addSql).Error
  121. if err != nil {
  122. return err
  123. }
  124. }
  125. return
  126. }
  127. // RefreshEdbDataFromSmm 刷新有色指标数据
  128. func RefreshEdbDataFromSmm(edbInfoId int, edbCode, startDate string) (err error) {
  129. source := utils.DATA_SOURCE_YS
  130. subSource := utils.DATA_SUB_SOURCE_EDB
  131. //o := orm.NewOrm()
  132. if err != nil {
  133. return
  134. }
  135. edbInfoIdStr := strconv.Itoa(edbInfoId)
  136. //计算数据
  137. var condition string
  138. var pars []interface{}
  139. if edbCode != "" {
  140. condition += " AND index_code=? "
  141. pars = append(pars, edbCode)
  142. }
  143. if startDate != "" {
  144. condition += " AND data_time>=? "
  145. pars = append(pars, startDate)
  146. }
  147. smmDataList, err := GetBaseFromSmmDataByCondition(condition, pars)
  148. if err != nil {
  149. return
  150. }
  151. // 真实数据的最大日期 , 插入规则配置的日期
  152. var realDataMaxDate, edbDataInsertConfigDate time.Time
  153. var edbDataInsertConfig *EdbDataInsertConfig
  154. var isFindConfigDateRealData bool //是否找到配置日期的实际数据的值
  155. {
  156. edbDataInsertConfig, err = GetEdbDataInsertConfigByEdbId(edbInfoId)
  157. if err != nil && !utils.IsErrNoRow(err) {
  158. return
  159. }
  160. if edbDataInsertConfig != nil {
  161. edbDataInsertConfigDate = edbDataInsertConfig.Date
  162. }
  163. }
  164. var existCondition string
  165. var existPars []interface{}
  166. existCondition += " AND edb_info_id=? "
  167. existPars = append(existPars, edbInfoId)
  168. if startDate != "" {
  169. existCondition += " AND data_time>=? "
  170. existPars = append(existPars, startDate)
  171. }
  172. existList, err := GetEdbDataByCondition(source, subSource, existCondition, existPars)
  173. if err != nil {
  174. return err
  175. }
  176. existMap := make(map[string]*EdbInfoSearchData)
  177. for _, v := range existList {
  178. existMap[v.DataTime] = v
  179. }
  180. addSql := ` INSERT INTO edb_data_ys(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  181. var isAdd bool
  182. for _, v := range smmDataList {
  183. item := v
  184. eDate := item.DataTime
  185. dataTime, err := time.ParseInLocation(utils.FormatDate, eDate, time.Local)
  186. if err != nil {
  187. return err
  188. }
  189. if findItem, ok := existMap[v.DataTime]; !ok {
  190. sValue := item.Value
  191. timestamp := dataTime.UnixNano() / 1e6
  192. timeStr := fmt.Sprintf("%d", timestamp)
  193. addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, sValue)
  194. isAdd = true
  195. } else {
  196. if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != item.Value {
  197. err = ModifyEdbDataById(source, subSource, findItem.EdbDataId, item.Value)
  198. if err != nil {
  199. return err
  200. }
  201. }
  202. }
  203. // 下面代码主要目的是处理掉手动插入的数据判断
  204. {
  205. if realDataMaxDate.IsZero() || dataTime.After(realDataMaxDate) {
  206. realDataMaxDate = dataTime
  207. }
  208. if edbDataInsertConfigDate.IsZero() || dataTime.Equal(edbDataInsertConfigDate) {
  209. isFindConfigDateRealData = true
  210. }
  211. }
  212. }
  213. // 处理手工数据补充的配置
  214. HandleConfigInsertEdbData(realDataMaxDate, edbDataInsertConfig, edbInfoId, source, subSource, existMap, isFindConfigDateRealData)
  215. if isAdd {
  216. addSql = strings.TrimRight(addSql, ",")
  217. err = global.DEFAULT_DB.Exec(addSql).Error
  218. //_, err = o.Raw(addSql).Exec()
  219. if err != nil {
  220. fmt.Println("RefreshEdbDataFromSmm add Err", err.Error())
  221. return
  222. }
  223. }
  224. return
  225. }
  226. type BaseFromSmmIndex struct {
  227. BaseFromSmmIndexId int64 `gorm:"column:base_from_smm_index_id;primaryKey"`
  228. //BaseFromSmmIndexId int64 `orm:"column(base_from_smm_index_id);pk"`
  229. ClassifyId int
  230. Interface string
  231. Name string
  232. IndexCode string
  233. IndexName string
  234. Type1 string `orm:"column(type_1)"`
  235. Type2 string `orm:"column(type_2)"`
  236. Type3 string `orm:"column(type_3)"`
  237. Frequency string
  238. Unit string
  239. ApiStartTime string
  240. ApiUpdateTime string
  241. StartTime string
  242. FinishTime string
  243. BaseFileName string
  244. RenameFileName string
  245. StartDate string
  246. EndDate string
  247. TerminalCode string `description:"编码"`
  248. CreateTime time.Time
  249. ModifyTime time.Time
  250. DataState string
  251. ReleaseTime string
  252. }
  253. func (e *BaseFromSmmIndex) AfterFind(db *gorm.DB) (err error) {
  254. e.ApiStartTime = utils.GormDateStrToDateTimeStr(e.ApiStartTime)
  255. e.ApiUpdateTime = utils.GormDateStrToDateTimeStr(e.ApiUpdateTime)
  256. e.StartTime = utils.GormDateStrToDateTimeStr(e.StartTime)
  257. e.FinishTime = utils.GormDateStrToDateTimeStr(e.FinishTime)
  258. return
  259. }
  260. func (d *BaseFromSmmIndex) AddBaseFromSmmIndex() (lastId int64, err error) {
  261. //o := orm.NewOrm()
  262. //lastId, err = o.Insert(d)
  263. err = global.DEFAULT_DB.Create(&d).Error
  264. if err != nil {
  265. return
  266. }
  267. lastId = d.BaseFromSmmIndexId
  268. return
  269. }
  270. func (d *BaseFromSmmIndex) GetSmmIndexItem(indexCode string) (item *BaseFromSmmIndex, err error) {
  271. //o := orm.NewOrm()
  272. sql := ` SELECT * FROM base_from_smm_index WHERE index_code=? `
  273. //fmt.Println(sql, indexCode)
  274. //err = o.Raw(sql, indexCode).QueryRow(&item)
  275. err = global.DEFAULT_DB.Raw(sql, indexCode).First(&item).Error
  276. return
  277. }
  278. // Add 新增
  279. func (m *BaseFromSmmIndex) Add() (err error) {
  280. //o := orm.NewOrm()
  281. //_, err = o.Insert(m)
  282. err = global.DEFAULT_DB.Create(&m).Error
  283. return
  284. }
  285. func GetBaseFromSmmDataBySmmCode(smmCode string) (list []*BaseFromSmmData, err error) {
  286. //o := orm.NewOrm()
  287. sql := ` SELECT * FROM base_from_smm_data WHERE index_code=? `
  288. //_, err = o.Raw(sql, smmCode).QueryRows(&list)
  289. err = global.DEFAULT_DB.Raw(sql, smmCode).Find(&list).Error
  290. return
  291. }
  292. func ModifySmmIndexSort(baseFromSmmIndexId int64) (err error) {
  293. //o := orm.NewOrm()
  294. sql := ` UPDATE base_from_smm_index SET sort=? WHERE base_from_smm_index_id=? `
  295. //_, err = o.Raw(sql, baseFromSmmIndexId, baseFromSmmIndexId).Exec()
  296. err = global.DEFAULT_DB.Exec(sql, baseFromSmmIndexId, baseFromSmmIndexId).Error
  297. return
  298. }
  299. func GetSmmIndexInfoMaxAndMinInfo(indexCode string) (item *EdbInfoMaxAndMinInfo, err error) {
  300. //o := orm.NewOrm()
  301. sql := ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date,MIN(value) AS min_value,MAX(value) AS max_value FROM base_from_smm_data WHERE index_code=? `
  302. //err = o.Raw(sql, indexCode).QueryRow(&item)
  303. err = global.DEFAULT_DB.Raw(sql, indexCode).First(&item).Error
  304. if err != nil {
  305. return
  306. }
  307. // 获取最新值
  308. var latest_value float64
  309. sql = ` SELECT value AS latest_value FROM base_from_smm_data WHERE index_code=? ORDER BY data_time DESC LIMIT 1 `
  310. //err = o.Raw(sql, indexCode).QueryRow(&latest_value)
  311. err = global.DEFAULT_DB.Raw(sql, indexCode).Scan(&latest_value).Error
  312. if err != nil {
  313. return
  314. }
  315. item.LatestValue = latest_value
  316. return
  317. }
  318. func ModifySmmIndexMaxAndMinInfo(indexCode string, item *EdbInfoMaxAndMinInfo) (err error) {
  319. //o := orm.NewOrm()
  320. sql := ` UPDATE base_from_smm_index SET start_date=?,end_date=?,end_value=?,modify_time=NOW() WHERE index_code=? `
  321. //_, err = o.Raw(sql, item.MinDate, item.MaxDate, item.LatestValue, indexCode).Exec()
  322. err = global.DEFAULT_DB.Exec(sql, item.MinDate, item.MaxDate, item.LatestValue, indexCode).Error
  323. return
  324. }
  325. // HandleSmmExcelDataReq SMM的excel数据
  326. type HandleSmmExcelDataReq struct {
  327. BaseFilePath string
  328. RenameFilePath string
  329. IndexName string
  330. Source string
  331. IndexCode string
  332. Unit string
  333. Frequency string
  334. ExcelDataMap map[string]string
  335. TerminalCode string `description:"编码"`
  336. }
  337. // MultiUpdateBaseFromSmmDataValue 批量更新SMM指标数据
  338. func MultiUpdateBaseFromSmmDataValue(items []*BaseFromSmmData) (err error) {
  339. if len(items) == 0 {
  340. return
  341. }
  342. //o := orm.NewOrm()
  343. to := global.DEFAULT_DB.Begin()
  344. defer func() {
  345. if err != nil {
  346. _ = to.Rollback()
  347. } else {
  348. _ = to.Commit()
  349. }
  350. }()
  351. sql := `UPDATE base_from_smm_data SET value = ?, modify_time = NOW() WHERE index_code = ? AND data_time = ? LIMIT 1`
  352. for _, v := range items {
  353. if v.IndexCode == "" || v.DataTime == "" {
  354. continue
  355. }
  356. //_, err = o.Raw(sql, v.Value, v.IndexCode, v.DataTime).Exec()
  357. err = to.Exec(sql, v.Value, v.IndexCode, v.DataTime).Error
  358. if err != nil {
  359. return
  360. }
  361. }
  362. //p, err := o.Raw(sql).Prepare()
  363. //if err != nil {
  364. // return
  365. //}
  366. //defer func() {
  367. // _ = p.Close()
  368. //}()
  369. //for _, v := range items {
  370. // if v.IndexCode == "" || v.DataTime == "" {
  371. // continue
  372. // }
  373. // _, err = p.Exec(v.Value, v.IndexCode, v.DataTime)
  374. // if err != nil {
  375. // return
  376. // }
  377. //}
  378. return
  379. }
  380. type AddSmmIndexToDataSourceResp struct {
  381. EdbCode string `description:"指标编码"`
  382. ClassifyId int `description:"指标分类"`
  383. SysUserId int `description:"操作人id"`
  384. SysUserRealName string `description:"操作人真实名称"`
  385. }
  386. func (m *BaseFromSmmIndex) GetIndexItem(indexCode string) (item *BaseFromSmmIndex, err error) {
  387. //o := orm.NewOrm()
  388. sql := `SELECT * FROM base_from_smm_index WHERE index_code = ? `
  389. //err = o.Raw(sql, indexCode).QueryRow(&item)
  390. err = global.DEFAULT_DB.Raw(sql, indexCode).First(&item).Error
  391. return
  392. }
  393. // 修改
  394. func (m *BaseFromSmmIndex) Update(updateParams, whereParam map[string]interface{}) (err error) {
  395. //to := orm.NewOrm()
  396. tx := global.DEFAULT_DB.Model(&BaseFromSmmIndex{})
  397. //ptrStructOrTableName := "base_from_smm_index"
  398. //qs := to.QueryTable(ptrStructOrTableName)
  399. //for expr, exprV := range whereParam {
  400. // qs = qs.Filter(expr, exprV)
  401. //}
  402. for expr, exprV := range whereParam {
  403. tx = tx.Where(expr, exprV)
  404. }
  405. //_, err = qs.Update(updateParams)
  406. // 执行更新操作
  407. result := tx.Updates(updateParams)
  408. if result.Error != nil {
  409. err = fmt.Errorf("update err: %s", result.Error.Error())
  410. return
  411. }
  412. return
  413. }
  414. // BridgeZhongJiIndexDataParams 桥接服务-获取中基指标数据入参
  415. type BridgeZhongJiIndexDataParams struct {
  416. EdbCode string `json:"edb_code" form:"edb_code" description:"指标编码"`
  417. }
  418. type BridgeZhongJiIndexListParams struct {
  419. Page int `json:"page" form:"page" description:"页码"`
  420. PageSize int `json:"page_size" form:"page_size" description:"每页指标个数,每页不能超过500条,超过会固定为500"`
  421. }
  422. type BaseFromSmmDataList struct {
  423. Data []*BaseFromSmmData
  424. IndexCode string
  425. }
  426. type UpdateRule struct {
  427. RuleDesc string `json:"rule_desc"`
  428. Notice string `json:"notice"`
  429. ReleaseTime string `json:"release_time"`
  430. RuleInfo UpdateRuleInfo `json:"rule_info"`
  431. }
  432. type UpdateRuleInfo struct {
  433. UpdCal string `json:"upd_cal"`
  434. UpdCalUnit string `json:"upd_cal_unit"`
  435. PeriodOffset int `json:"period_offset"`
  436. UpdCount int `json:"upd_count"`
  437. }
  438. type DataItem struct {
  439. QuotaID string `json:"quota_id"`
  440. QuotaName string `json:"quota_name"`
  441. Mark string `json:"mark"`
  442. Unit string `json:"unit"`
  443. ValueType string `json:"value_type"`
  444. Source string `json:"source"`
  445. ListOrder int `json:"list_order"`
  446. DataStart string `json:"data_start"`
  447. DataEnd string `json:"data_end"`
  448. Frequency string `json:"frequency"`
  449. Precision int `json:"precision"`
  450. TypeCode string `json:"type_code"`
  451. TypeName string `json:"type_name"`
  452. TypeCodeAll string `json:"type_code_all"`
  453. TypeAll string `json:"type_all"`
  454. Tags string `json:"tags"`
  455. AuthStart string `json:"auth_start"`
  456. AuthFinish string `json:"auth_finish"`
  457. AuthLang string `json:"auth_lang"`
  458. AuthModule string `json:"auth_module"`
  459. DataDur string `json:"data_dur"`
  460. Spec string `json:"spec"`
  461. Area string `json:"area"`
  462. DataState string `json:"data_state"`
  463. UpdateRule UpdateRule `json:"update_rule"`
  464. }
  465. type ListData struct {
  466. Total int `json:"total"`
  467. CurrentPage int `json:"current_page"`
  468. PageSize int `json:"page_size"`
  469. PageCount int `json:"page_count"`
  470. Data []DataItem `json:"data"`
  471. }
  472. type SmmIndexListResponse struct {
  473. Code int `json:"code"`
  474. Msg string `json:"msg"`
  475. Data ListData `json:"data"`
  476. }
  477. type SmmListResp struct {
  478. Code int `json:"code"`
  479. Msg string `json:"msg"`
  480. Data SmmIndexListResponse `json:"data"`
  481. }
  482. func AddBaseFromSmmIndex(list []*BaseFromSmmIndex) (lastId int64, err error) {
  483. //o := orm.NewOrm()
  484. //_, err = o.InsertMulti(len(list), list)
  485. err = global.DEFAULT_DB.CreateInBatches(list, len(list)).Error
  486. return
  487. }
  488. // BridgeZhongJiIndexLatestDataParams 桥接服务-获取中基更新指标数据入参
  489. type BridgeZhongJiIndexLatestDataParams struct {
  490. EdbCode string `json:"edb_code" form:"edb_code" description:"指标编码"`
  491. LastTime int64 `json:"last_time" form:"last_time" description:"上次更新时间戳(秒)"`
  492. }
  493. func GetBaseFromSmmIndex() (list []*BaseFromSmmIndex, err error) {
  494. //o := orm.NewOrm()
  495. sql := ` SELECT * FROM base_from_smm_index`
  496. //_, err = o.Raw(sql).QueryRows(&list)
  497. err = global.DEFAULT_DB.Raw(sql).Find(&list).Error
  498. return
  499. }
  500. func ModifyBaseFromSmmIndex(item *BaseFromSmmIndex) (err error) {
  501. //o := orm.NewOrm()
  502. sql := ` UPDATE base_from_smm_index SET end_date = ?, modify_time=NOW(), data_state= ? `
  503. //_, err = o.Raw(sql, item.EndDate, item.DataState).Exec()
  504. err = global.DEFAULT_DB.Exec(sql, item.EndDate, item.DataState).Error
  505. return
  506. }
  507. func (m *BaseFromSmmIndex) UpdateCols(cols []string) (err error) {
  508. //o := orm.NewOrm()
  509. //_, err = o.Update(m, cols...)
  510. err = global.DEFAULT_DB.Model(&m).Select(cols).Updates(&m).Error
  511. return
  512. }
  513. func ModifyBaseFromSmmIndexDate(item *BaseFromSmmIndex) (err error) {
  514. //o := orm.NewOrm()
  515. sql := ` UPDATE base_from_smm_index SET end_date = ?, modify_time=NOW(), data_state= ? WHERE base_from_smm_index_id=?`
  516. //_, err = o.Raw(sql, item.EndDate, item.DataState, item.BaseFromSmmIndexId).Exec()
  517. err = global.DEFAULT_DB.Exec(sql, item.EndDate, item.DataState, item.BaseFromSmmIndexId).Error
  518. return
  519. }
  520. type SmmLatestDataResponse struct {
  521. Code int `json:"code"`
  522. Msg string `json:"msg"`
  523. Data SmmLatestResp `json:"data"`
  524. }
  525. type SmmLatestResp struct {
  526. Code int `json:"code"`
  527. Msg string `json:"msg"`
  528. Data SmmLatestData `json:"data"`
  529. }
  530. type SmmLatestData struct {
  531. DataLen int `json:"data_len"`
  532. DataList []Datum `json:"data_list"`
  533. }
  534. type Datum struct {
  535. QuotaID string `json:"quota_id"`
  536. Date string `json:"date"`
  537. Value string `json:"value"`
  538. Mark string `json:"mark"`
  539. Create string `json:"create"`
  540. Update string `json:"update"`
  541. }
  542. // RefreshEdbDataFromSmmToEdb 刷新有色指标数据
  543. func RefreshEdbDataFromSmmToEdb(edbInfoId int, edbCode, startDate string, smmDataList []*BaseFromSmmData) (err error) {
  544. source := utils.DATA_SOURCE_YS
  545. subSource := utils.DATA_SUB_SOURCE_EDB
  546. //o := orm.NewOrm()
  547. if err != nil {
  548. return
  549. }
  550. edbInfoIdStr := strconv.Itoa(edbInfoId)
  551. //计算数据
  552. var condition string
  553. var pars []interface{}
  554. if edbCode != "" {
  555. condition += " AND index_code=? "
  556. pars = append(pars, edbCode)
  557. }
  558. if startDate != "" {
  559. condition += " AND data_time>=? "
  560. pars = append(pars, startDate)
  561. }
  562. // 真实数据的最大日期 , 插入规则配置的日期
  563. var realDataMaxDate, edbDataInsertConfigDate time.Time
  564. var edbDataInsertConfig *EdbDataInsertConfig
  565. var isFindConfigDateRealData bool //是否找到配置日期的实际数据的值
  566. {
  567. edbDataInsertConfig, err = GetEdbDataInsertConfigByEdbId(edbInfoId)
  568. if err != nil && !utils.IsErrNoRow(err) {
  569. return
  570. }
  571. if edbDataInsertConfig != nil {
  572. edbDataInsertConfigDate = edbDataInsertConfig.Date
  573. }
  574. }
  575. var existCondition string
  576. var existPars []interface{}
  577. existCondition += " AND edb_info_id=? "
  578. existPars = append(existPars, edbInfoId)
  579. if startDate != "" {
  580. existCondition += " AND data_time>=? "
  581. existPars = append(existPars, startDate)
  582. }
  583. existList, err := GetEdbDataByCondition(source, subSource, existCondition, existPars)
  584. if err != nil {
  585. return err
  586. }
  587. existMap := make(map[string]*EdbInfoSearchData)
  588. for _, v := range existList {
  589. existMap[v.DataTime] = v
  590. }
  591. addSql := ` INSERT INTO edb_data_ys(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  592. var isAdd bool
  593. for _, v := range smmDataList {
  594. item := v
  595. eDate := item.DataTime
  596. dataTime, err := time.ParseInLocation(utils.FormatDate, eDate, time.Local)
  597. if err != nil {
  598. return err
  599. }
  600. if findItem, ok := existMap[v.DataTime]; !ok {
  601. sValue := item.Value
  602. timestamp := dataTime.UnixNano() / 1e6
  603. timeStr := fmt.Sprintf("%d", timestamp)
  604. addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, sValue)
  605. isAdd = true
  606. } else {
  607. if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != item.Value {
  608. err = ModifyEdbDataById(source, subSource, findItem.EdbDataId, item.Value)
  609. if err != nil {
  610. return err
  611. }
  612. }
  613. }
  614. // 下面代码主要目的是处理掉手动插入的数据判断
  615. {
  616. if realDataMaxDate.IsZero() || dataTime.After(realDataMaxDate) {
  617. realDataMaxDate = dataTime
  618. }
  619. if edbDataInsertConfigDate.IsZero() || dataTime.Equal(edbDataInsertConfigDate) {
  620. isFindConfigDateRealData = true
  621. }
  622. }
  623. }
  624. // 处理手工数据补充的配置
  625. HandleConfigInsertEdbData(realDataMaxDate, edbDataInsertConfig, edbInfoId, source, subSource, existMap, isFindConfigDateRealData)
  626. if isAdd {
  627. addSql = strings.TrimRight(addSql, ",")
  628. //_, err = o.Raw(addSql).Exec()
  629. err = global.DEFAULT_DB.Exec(addSql).Error
  630. if err != nil {
  631. fmt.Println("RefreshEdbDataFromSmm add Err", err.Error())
  632. return
  633. }
  634. }
  635. return
  636. }
  637. type BaseFromSmmRecord struct {
  638. BaseFromSmmRecordId int64 `orm:"column(base_from_smm_record_id);pk"`
  639. BaseFromSmmIndexId int64
  640. OldIndexName string `description:"原始名称"`
  641. NewIndexName string `description:"新的名称"`
  642. CreateTime time.Time `description:"记录创建时间"`
  643. Timestamp int64 `description:"记录创建时间戳"`
  644. }
  645. func AddBaseFromSmmRecord(item *BaseFromSmmRecord) (err error) {
  646. //o := orm.NewOrm()
  647. //_, err = o.Insert(item)
  648. err = global.DEFAULT_DB.Create(&item).Error
  649. return
  650. }