base_from_smm.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. package models
  2. import (
  3. sql2 "database/sql"
  4. "eta/eta_index_lib/global"
  5. "eta/eta_index_lib/utils"
  6. "fmt"
  7. "gorm.io/gorm"
  8. "strconv"
  9. "strings"
  10. "time"
  11. )
  12. type BaseFromSmmData struct {
  13. SmmDataId int `gorm:"column:smm_data_id;primaryKey"`
  14. //SmmDataId int `orm:"column(smm_data_id);pk"`
  15. BaseFromSmmIndexId int
  16. IndexCode string
  17. DataTime string
  18. Value string
  19. CreateTime time.Time
  20. ModifyTime time.Time
  21. DataTimestamp int64
  22. }
  23. func (e *BaseFromSmmData) AfterFind(db *gorm.DB) (err error) {
  24. e.DataTime = utils.GormDateStrToDateStr(e.DataTime)
  25. return
  26. }
  27. func (s *BaseFromSmmData) Update(cols []string) (err error) {
  28. //o := orm.NewOrm()
  29. //_, err = o.Update(s, cols...)
  30. err = global.DEFAULT_DB.Model(&s).Select(cols).Updates(&s).Error
  31. return
  32. }
  33. func AddBaseFromSmmData(item []*BaseFromSmmData) (err error) {
  34. //o := orm.NewOrm()
  35. //_, err = o.InsertMulti(500, item)
  36. err = global.DEFAULT_DB.CreateInBatches(item, utils.MultiAddNum).Error
  37. return
  38. }
  39. func GetBaseFromSmmDataByCondition(condition string, pars []interface{}) (list []*BaseFromSmmData, err error) {
  40. //o := orm.NewOrm()
  41. sql := `SELECT * FROM base_from_smm_data WHERE 1=1 `
  42. if condition != "" {
  43. sql += condition
  44. }
  45. //_, err = o.Raw(sql, pars).QueryRows(&list)
  46. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&list).Error
  47. return
  48. }
  49. func UpdateBaseFromSmmDataListByIndexCode(items []*BaseFromSmmData) (err error) {
  50. //o := orm.NewOrm()
  51. to := global.DEFAULT_DB.Begin()
  52. defer func() {
  53. if err != nil {
  54. _ = to.Rollback()
  55. } else {
  56. _ = to.Commit()
  57. }
  58. }()
  59. sql := `UPDATE base_from_smm_data SET value=? WHERE index_code=? AND data_time=? `
  60. for _, item := range items {
  61. err = to.Exec(sql, item.Value, item.IndexCode, item.DataTime).Error
  62. if err != nil {
  63. return
  64. }
  65. }
  66. //stmt, err := o.Raw(sql).Prepare()
  67. //if err != nil {
  68. // return
  69. //}
  70. //defer stmt.Close()
  71. //for _, item := range items {
  72. // _, err = stmt.Exec(item.Value, item.IndexCode, item.DataTime)
  73. // if err != nil {
  74. // return
  75. // }
  76. //}
  77. return
  78. }
  79. func GetBaseFromSmmDataByIds(smmDataIds []int) (list []*BaseFromSmmData, err error) {
  80. if len(smmDataIds) == 0 {
  81. return
  82. }
  83. //o := orm.NewOrm()
  84. //sql := `SELECT * FROM base_from_smm_data WHERE 1=1 AND base_from_smm_index_id in (` + utils.GetOrmInReplace(len(smmDataIds)) + `)`
  85. sql := `SELECT * FROM base_from_smm_data WHERE 1=1 AND base_from_smm_index_id in ?`
  86. //_, err = o.Raw(sql, smmDataIds).QueryRows(&list)
  87. err = global.DEFAULT_DB.Raw(sql, smmDataIds).Find(&list).Error
  88. return
  89. }
  90. func GetBaseFromSmmDataByCodeAndDate(indexCode string, dataTime string) (item *BaseFromSmmData, err error) {
  91. //o := orm.NewOrm()
  92. sql := `SELECT * FROM base_from_smm_data WHERE 1=1 AND index_code=? AND data_time=? `
  93. //err = o.Raw(sql, indexCode, dataTime).QueryRow(&item)
  94. err = global.DEFAULT_DB.Raw(sql, indexCode, dataTime).First(&item).Error
  95. return
  96. }
  97. // 新增有色指标数据
  98. func AddEdbDataFromSmm(edbCode string, smmBaseDataAll []*BaseFromSmmData) (err error) {
  99. //o := orm.NewOrm()
  100. var isAdd bool
  101. addSql := ` INSERT INTO edb_data_ys(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  102. existMap := make(map[string]string)
  103. for _, sv := range smmBaseDataAll {
  104. eDate := sv.DataTime
  105. dataTime, err := time.ParseInLocation(utils.FormatDate, eDate, time.Local)
  106. if err != nil {
  107. return err
  108. }
  109. timestamp := dataTime.UnixNano() / 1e6
  110. timeStr := fmt.Sprintf("%d", timestamp)
  111. if _, ok := existMap[eDate]; !ok {
  112. addSql += GetAddSql("0", edbCode, eDate, timeStr, sv.Value)
  113. isAdd = true
  114. }
  115. existMap[eDate] = sv.Value
  116. }
  117. if isAdd {
  118. addSql = strings.TrimRight(addSql, ",")
  119. utils.FileLog.Info("addSql:" + addSql)
  120. //_, err = o.Raw(addSql).Exec()
  121. err = global.DEFAULT_DB.Exec(addSql).Error
  122. if err != nil {
  123. return err
  124. }
  125. }
  126. return
  127. }
  128. // RefreshEdbDataFromSmm 刷新有色指标数据
  129. func RefreshEdbDataFromSmm(edbInfoId int, edbCode, startDate string) (err error) {
  130. source := utils.DATA_SOURCE_YS
  131. subSource := utils.DATA_SUB_SOURCE_EDB
  132. //o := orm.NewOrm()
  133. if err != nil {
  134. return
  135. }
  136. edbInfoIdStr := strconv.Itoa(edbInfoId)
  137. //计算数据
  138. var condition string
  139. var pars []interface{}
  140. if edbCode != "" {
  141. condition += " AND index_code=? "
  142. pars = append(pars, edbCode)
  143. }
  144. if startDate != "" {
  145. condition += " AND data_time>=? "
  146. pars = append(pars, startDate)
  147. }
  148. smmDataList, err := GetBaseFromSmmDataByCondition(condition, pars)
  149. if err != nil {
  150. return
  151. }
  152. // 真实数据的最大日期 , 插入规则配置的日期
  153. var realDataMaxDate, edbDataInsertConfigDate time.Time
  154. var edbDataInsertConfig *EdbDataInsertConfig
  155. var isFindConfigDateRealData bool //是否找到配置日期的实际数据的值
  156. {
  157. edbDataInsertConfig, err = GetEdbDataInsertConfigByEdbId(edbInfoId)
  158. if err != nil && !utils.IsErrNoRow(err) {
  159. return
  160. }
  161. if edbDataInsertConfig != nil {
  162. edbDataInsertConfigDate = edbDataInsertConfig.Date
  163. }
  164. }
  165. var existCondition string
  166. var existPars []interface{}
  167. existCondition += " AND edb_info_id=? "
  168. existPars = append(existPars, edbInfoId)
  169. if startDate != "" {
  170. existCondition += " AND data_time>=? "
  171. existPars = append(existPars, startDate)
  172. }
  173. existList, err := GetEdbDataByCondition(source, subSource, existCondition, existPars)
  174. if err != nil {
  175. return err
  176. }
  177. existMap := make(map[string]*EdbInfoSearchData)
  178. for _, v := range existList {
  179. existMap[v.DataTime] = v
  180. }
  181. addSql := ` INSERT INTO edb_data_ys(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  182. var isAdd bool
  183. for _, v := range smmDataList {
  184. item := v
  185. eDate := item.DataTime
  186. dataTime, err := time.ParseInLocation(utils.FormatDate, eDate, time.Local)
  187. if err != nil {
  188. return err
  189. }
  190. if findItem, ok := existMap[v.DataTime]; !ok {
  191. sValue := item.Value
  192. timestamp := dataTime.UnixNano() / 1e6
  193. timeStr := fmt.Sprintf("%d", timestamp)
  194. addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, sValue)
  195. isAdd = true
  196. } else {
  197. if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != item.Value {
  198. err = ModifyEdbDataById(source, subSource, findItem.EdbDataId, item.Value)
  199. if err != nil {
  200. return err
  201. }
  202. }
  203. }
  204. // 下面代码主要目的是处理掉手动插入的数据判断
  205. {
  206. if realDataMaxDate.IsZero() || dataTime.After(realDataMaxDate) {
  207. realDataMaxDate = dataTime
  208. }
  209. if edbDataInsertConfigDate.IsZero() || dataTime.Equal(edbDataInsertConfigDate) {
  210. isFindConfigDateRealData = true
  211. }
  212. }
  213. }
  214. // 处理手工数据补充的配置
  215. HandleConfigInsertEdbData(realDataMaxDate, edbDataInsertConfig, edbInfoId, source, subSource, existMap, isFindConfigDateRealData)
  216. if isAdd {
  217. addSql = strings.TrimRight(addSql, ",")
  218. err = global.DEFAULT_DB.Exec(addSql).Error
  219. //_, err = o.Raw(addSql).Exec()
  220. if err != nil {
  221. fmt.Println("RefreshEdbDataFromSmm add Err", err.Error())
  222. return
  223. }
  224. }
  225. return
  226. }
  227. type BaseFromSmmIndex struct {
  228. BaseFromSmmIndexId int64 `gorm:"column:base_from_smm_index_id;primaryKey"`
  229. //BaseFromSmmIndexId int64 `orm:"column(base_from_smm_index_id);pk"`
  230. ClassifyId int
  231. Interface string
  232. Name string
  233. IndexCode string
  234. IndexName string
  235. Type1 string `gorm:"column:type_1"`
  236. Type2 string `gorm:"column:type_2"`
  237. Type3 string `gorm:"column:type_3"`
  238. Frequency string
  239. Unit string
  240. ApiStartTime string
  241. ApiUpdateTime string
  242. StartTime string
  243. FinishTime string
  244. BaseFileName string
  245. RenameFileName string
  246. StartDate string
  247. EndDate string
  248. TerminalCode string `description:"编码"`
  249. CreateTime time.Time
  250. ModifyTime time.Time
  251. DataState string
  252. ReleaseTime string
  253. }
  254. func (e *BaseFromSmmIndex) AfterFind(db *gorm.DB) (err error) {
  255. e.ApiStartTime = utils.GormDateStrToDateTimeStr(e.ApiStartTime)
  256. e.ApiUpdateTime = utils.GormDateStrToDateTimeStr(e.ApiUpdateTime)
  257. e.StartTime = utils.GormDateStrToDateTimeStr(e.StartTime)
  258. e.FinishTime = utils.GormDateStrToDateTimeStr(e.FinishTime)
  259. return
  260. }
  261. func (d *BaseFromSmmIndex) AddBaseFromSmmIndex() (lastId int64, err error) {
  262. //o := orm.NewOrm()
  263. //lastId, err = o.Insert(d)
  264. err = global.DEFAULT_DB.Create(&d).Error
  265. if err != nil {
  266. return
  267. }
  268. lastId = d.BaseFromSmmIndexId
  269. return
  270. }
  271. func (d *BaseFromSmmIndex) GetSmmIndexItem(indexCode string) (item *BaseFromSmmIndex, err error) {
  272. //o := orm.NewOrm()
  273. sql := ` SELECT * FROM base_from_smm_index WHERE index_code=? `
  274. //fmt.Println(sql, indexCode)
  275. //err = o.Raw(sql, indexCode).QueryRow(&item)
  276. err = global.DEFAULT_DB.Raw(sql, indexCode).First(&item).Error
  277. return
  278. }
  279. // Add 新增
  280. func (m *BaseFromSmmIndex) Add() (err error) {
  281. //o := orm.NewOrm()
  282. //_, err = o.Insert(m)
  283. err = global.DEFAULT_DB.Create(&m).Error
  284. return
  285. }
  286. func GetBaseFromSmmDataBySmmCode(smmCode string) (list []*BaseFromSmmData, err error) {
  287. //o := orm.NewOrm()
  288. sql := ` SELECT * FROM base_from_smm_data WHERE index_code=? `
  289. //_, err = o.Raw(sql, smmCode).QueryRows(&list)
  290. err = global.DEFAULT_DB.Raw(sql, smmCode).Find(&list).Error
  291. return
  292. }
  293. func ModifySmmIndexSort(baseFromSmmIndexId int64) (err error) {
  294. //o := orm.NewOrm()
  295. sql := ` UPDATE base_from_smm_index SET sort=? WHERE base_from_smm_index_id=? `
  296. //_, err = o.Raw(sql, baseFromSmmIndexId, baseFromSmmIndexId).Exec()
  297. err = global.DEFAULT_DB.Exec(sql, baseFromSmmIndexId, baseFromSmmIndexId).Error
  298. return
  299. }
  300. func GetSmmIndexInfoMaxAndMinInfo(indexCode string) (item *EdbInfoMaxAndMinInfo, err error) {
  301. //o := orm.NewOrm()
  302. 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=? `
  303. //err = o.Raw(sql, indexCode).QueryRow(&item)
  304. err = global.DEFAULT_DB.Raw(sql, indexCode).First(&item).Error
  305. if err != nil {
  306. return
  307. }
  308. // 获取最新值
  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. var latestValueNull sql2.NullFloat64
  312. err = global.DEFAULT_DB.Raw(sql, indexCode).Scan(&latestValueNull).Error
  313. if err == nil && latestValueNull.Valid {
  314. item.LatestValue = latestValueNull.Float64
  315. }
  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 `gorm:"column:base_from_smm_record_id;primaryKey"`
  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. }