base_from_smm.go 20 KB

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