edb_info_calculate_bp.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586
  1. package data_manage
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/beego/beego/v2/client/orm"
  6. "github.com/shopspring/decimal"
  7. "hongze/hongze_chart_lib/utils"
  8. "strconv"
  9. "strings"
  10. "time"
  11. )
  12. type EdbInfoCalculateBp struct {
  13. EdbInfoCalculateBpId int `orm:"column(edb_info_calculate_bp_id);pk"`
  14. EdbInfoId int `description:"指标id"`
  15. EdbCode string `description:"指标编码"`
  16. FromEdbInfoId int `description:"计算指标id"`
  17. FromEdbCode string `description:"计算指标编码"`
  18. FromEdbName string `description:"计算指标名称"`
  19. FromSource int `description:"计算指标来源"`
  20. FromSourceName string `description:"计算指标来源名称"`
  21. FromTag string `description:"来源指标标签"`
  22. Sort int `description:"计算指标名称排序"`
  23. CreateTime time.Time `description:"创建时间"`
  24. ModifyTime time.Time `description:"修改时间"`
  25. }
  26. //变频
  27. func AddCalculateBp(req *EdbInfoCalculateBatchSaveReq, fromEdbInfo *EdbInfo, edbCode, uniqueCode string, sysUserId int, sysUserRealName string) (edbInfoId int, err error) {
  28. fmt.Println("AddCalculateBp")
  29. o := orm.NewOrmUsingDB("data")
  30. o.Begin()
  31. defer func() {
  32. if err != nil {
  33. fmt.Println("AddCalculateBp,Err:" + err.Error())
  34. o.Rollback()
  35. } else {
  36. o.Commit()
  37. }
  38. }()
  39. if req.EdbInfoId <= 0 {
  40. edbInfo := new(EdbInfo)
  41. edbInfo.Source = utils.DATA_SOURCE_CALCULATE_BP
  42. edbInfo.SourceName = "变频"
  43. edbInfo.EdbCode = edbCode
  44. edbInfo.EdbName = req.EdbName
  45. edbInfo.EdbNameSource = req.EdbName
  46. edbInfo.Frequency = req.Frequency
  47. edbInfo.Unit = req.Unit
  48. edbInfo.ClassifyId = req.ClassifyId
  49. edbInfo.SysUserId = sysUserId
  50. edbInfo.SysUserRealName = sysUserRealName
  51. edbInfo.CreateTime = time.Now()
  52. edbInfo.ModifyTime = time.Now()
  53. edbInfo.UniqueCode = uniqueCode
  54. edbInfo.CalculateFormula = req.Formula
  55. edbInfo.EdbType = 2
  56. newEdbInfoId, err := o.Insert(edbInfo)
  57. if err != nil {
  58. return edbInfoId, err
  59. }
  60. edbInfoId = int(newEdbInfoId)
  61. //关联关系
  62. {
  63. calculateMappingItem := new(EdbInfoCalculateMapping)
  64. calculateMappingItem.CreateTime = time.Now()
  65. calculateMappingItem.ModifyTime = time.Now()
  66. calculateMappingItem.Sort = 1
  67. calculateMappingItem.EdbCode = edbCode
  68. calculateMappingItem.EdbInfoId = edbInfoId
  69. calculateMappingItem.FromEdbInfoId = fromEdbInfo.EdbInfoId
  70. calculateMappingItem.FromEdbCode = fromEdbInfo.EdbCode
  71. calculateMappingItem.FromEdbName = fromEdbInfo.EdbName
  72. calculateMappingItem.FromSource = fromEdbInfo.Source
  73. calculateMappingItem.FromSourceName = fromEdbInfo.SourceName
  74. calculateMappingItem.FromTag = ""
  75. calculateMappingItem.Source = edbInfo.Source
  76. calculateMappingItem.SourceName = edbInfo.SourceName
  77. go o.Insert(calculateMappingItem)
  78. }
  79. } else {
  80. edbInfoId = req.EdbInfoId
  81. dataTableName := GetEdbDataTableName(utils.DATA_SOURCE_CALCULATE_BP)
  82. fmt.Println("dataTableName:" + dataTableName)
  83. deleteSql := ` DELETE FROM %s WHERE edb_info_id=? `
  84. deleteSql = fmt.Sprintf(deleteSql, dataTableName)
  85. _, err = o.Raw(deleteSql, req.EdbInfoId).Exec()
  86. if err != nil {
  87. return 0, err
  88. }
  89. }
  90. edbInfoIdStr := strconv.Itoa(edbInfoId)
  91. fmt.Println("edbInfoIdStr:" + edbInfoIdStr)
  92. //计算数据
  93. var condition string
  94. var pars []interface{}
  95. condition += " AND edb_info_id=? "
  96. if req.EdbInfoId <= 0 {
  97. pars = append(pars, req.FromEdbInfoId)
  98. } else {
  99. pars = append(pars, fromEdbInfo.EdbInfoId)
  100. }
  101. dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 0)
  102. if err != nil {
  103. return edbInfoId, err
  104. }
  105. addSql := ` INSERT INTO edb_data_calculate_bp(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
  106. var isAdd bool
  107. existMap := make(map[string]string)
  108. dataLen := len(dataList)
  109. fmt.Println("dataLen:", dataLen)
  110. for i := 0; i < dataLen; i++ {
  111. //当期
  112. currentItem := dataList[i]
  113. currentDate, _ := time.Parse(utils.FormatDate, currentItem.DataTime)
  114. var day int
  115. var preItem *EdbInfoSearchData
  116. var preDate time.Time
  117. if i == 0 {
  118. day = int(time.Now().Sub(currentDate).Hours() / float64(24))
  119. preDate = time.Now()
  120. } else {
  121. j := i - 1
  122. if j < dataLen {
  123. preItem = dataList[j]
  124. preDate, _ = time.Parse(utils.FormatDate, preItem.DataTime)
  125. day = int(preDate.Sub(currentDate).Hours() / float64(24))
  126. utils.FileLog.Info("preItem.DataTime:" + preItem.DataTime + ";currentItem.DataTime" + currentItem.DataTime)
  127. }
  128. }
  129. for k := 0; k <= day; k++ {
  130. needDay := preDate.AddDate(0, 0, -k)
  131. needDayStr := needDay.Format(utils.FormatDate)
  132. existKey := edbCode + needDayStr
  133. if _, ok := existMap[existKey]; !ok {
  134. timestamp := needDay.UnixNano() / 1e6
  135. timestampStr := fmt.Sprintf("%d", timestamp)
  136. valStr := decimal.NewFromFloat(currentItem.Value).String()
  137. addSql += GetAddSql(edbInfoIdStr, edbCode, needDayStr, timestampStr, valStr)
  138. isAdd = true
  139. }
  140. existMap[existKey] = needDayStr
  141. }
  142. existKey := edbCode + currentItem.DataTime
  143. if _, ok := existMap[existKey]; !ok {
  144. currentDate, _ := time.Parse(utils.FormatDate, currentItem.DataTime)
  145. timestamp := currentDate.UnixNano() / 1e6
  146. timestampStr := fmt.Sprintf("%d", timestamp)
  147. valStr := decimal.NewFromFloat(currentItem.Value).String()
  148. addSql += GetAddSql(edbInfoIdStr, edbCode, currentItem.DataTime, timestampStr, valStr)
  149. isAdd = true
  150. }
  151. existMap[existKey] = currentItem.DataTime
  152. }
  153. if isAdd {
  154. addSql = strings.TrimRight(addSql, ",")
  155. _, err = o.Raw(addSql).Exec()
  156. if err != nil {
  157. return edbInfoId, err
  158. }
  159. }
  160. return
  161. }
  162. //环比值
  163. func EditCalculateBp(req *EdbInfoCalculateBatchEditReq, fromEdbInfo *EdbInfo, edbCode string) (edbInfoId int, err error) {
  164. edbInfoId = req.EdbInfoId
  165. o := orm.NewOrmUsingDB("data")
  166. o.Begin()
  167. defer func() {
  168. if err != nil {
  169. o.Rollback()
  170. } else {
  171. o.Commit()
  172. }
  173. }()
  174. //修改指标信息
  175. sql := ` UPDATE edb_info
  176. SET
  177. edb_name =?,
  178. edb_name_source=?,
  179. frequency = ?,
  180. unit = ?,
  181. classify_id = ?,
  182. modify_time = NOW()
  183. WHERE edb_info_id = ? `
  184. _, err = o.Raw(sql, req.EdbName, req.EdbName, req.Frequency, req.Unit, req.ClassifyId, edbInfoId).Exec()
  185. if err != nil {
  186. return
  187. }
  188. var existCondition string
  189. var existPars []interface{}
  190. existCondition += " AND edb_info_id=? "
  191. existPars = append(existPars, edbInfoId)
  192. existCondition += " AND from_edb_info_id=? "
  193. existPars = append(existPars, req.FromEdbInfoId)
  194. //判断计算指标是否被更换
  195. count, err := GetEdbInfoCalculateCountByCondition(req.Source, existCondition, existPars)
  196. if err != nil {
  197. err = errors.New("判断指标是否改变失败,Err:" + err.Error())
  198. return
  199. }
  200. if count <= 0 {
  201. //删除指标关联计算指标
  202. //sql := ` DELETE FROM edb_info_calculate_bp WHERE edb_info_id = ? `
  203. //_, err = o.Raw(sql, edbInfoId).Exec()
  204. //if err != nil {
  205. // return
  206. //}
  207. //calculateItem := new(EdbInfoCalculateHbz)
  208. //calculateItem.CreateTime = time.Now()
  209. //calculateItem.ModifyTime = time.Now()
  210. //calculateItem.Sort = 1
  211. //calculateItem.EdbCode = edbCode
  212. //calculateItem.EdbInfoId = edbInfoId
  213. //calculateItem.FromEdbInfoId = fromEdbInfo.EdbInfoId
  214. //calculateItem.FromEdbCode = fromEdbInfo.EdbCode
  215. //calculateItem.FromEdbName = fromEdbInfo.EdbName
  216. //calculateItem.FromSource = fromEdbInfo.Source
  217. //calculateItem.FromSourceName = fromEdbInfo.SourceName
  218. //
  219. //_, err = o.Insert(calculateItem)
  220. //if err != nil {
  221. // return
  222. //}
  223. //删除,计算指标关联的,基础指标的关联关系
  224. sql = ` DELETE FROM edb_info_calculate_mapping WHERE edb_info_id = ? `
  225. _, err = o.Raw(sql, edbInfoId).Exec()
  226. if err != nil {
  227. err = errors.New("删除计算指标关联关系失败,Err:" + err.Error())
  228. return
  229. }
  230. //清空原有数据
  231. sql = ` DELETE FROM edb_data_calculate_bp WHERE edb_info_id = ? `
  232. _, err = o.Raw(sql, edbInfoId).Exec()
  233. if err != nil {
  234. return edbInfoId, err
  235. }
  236. //关联关系
  237. {
  238. calculateMappingItem := new(EdbInfoCalculateMapping)
  239. calculateMappingItem.CreateTime = time.Now()
  240. calculateMappingItem.ModifyTime = time.Now()
  241. calculateMappingItem.Sort = 1
  242. calculateMappingItem.EdbCode = edbCode
  243. calculateMappingItem.EdbInfoId = edbInfoId
  244. calculateMappingItem.FromEdbInfoId = fromEdbInfo.EdbInfoId
  245. calculateMappingItem.FromEdbCode = fromEdbInfo.EdbCode
  246. calculateMappingItem.FromEdbName = fromEdbInfo.EdbName
  247. calculateMappingItem.FromSource = fromEdbInfo.Source
  248. calculateMappingItem.FromSourceName = fromEdbInfo.SourceName
  249. calculateMappingItem.FromTag = ""
  250. calculateMappingItem.Source = utils.DATA_SOURCE_CALCULATE_BP
  251. calculateMappingItem.SourceName = "变频"
  252. o.Insert(calculateMappingItem)
  253. }
  254. edbInfoIdStr := strconv.Itoa(edbInfoId)
  255. fmt.Println("edbInfoIdStr:" + edbInfoIdStr)
  256. //计算数据
  257. var condition string
  258. var pars []interface{}
  259. condition += " AND edb_info_id=? "
  260. pars = append(pars, req.FromEdbInfoId)
  261. fmt.Println("EdbInfoId:", req.FromEdbInfoId)
  262. dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 0)
  263. if err != nil {
  264. return edbInfoId, err
  265. }
  266. addSql := ` INSERT INTO edb_data_calculate_bp(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
  267. var isAdd bool
  268. existMap := make(map[string]string)
  269. dataLen := len(dataList)
  270. for i := 0; i < dataLen; i++ {
  271. //当期
  272. currentItem := dataList[i]
  273. currentDate, _ := time.Parse(utils.FormatDate, currentItem.DataTime)
  274. var day int
  275. var preItem *EdbInfoSearchData
  276. var preDate time.Time
  277. if i == 0 {
  278. day = int(time.Now().Sub(currentDate).Hours() / float64(24))
  279. preDate = time.Now()
  280. } else {
  281. j := i + 1
  282. if j < dataLen {
  283. preItem = dataList[j]
  284. preDate, _ = time.Parse(utils.FormatDate, preItem.DataTime)
  285. day = int(currentDate.Sub(preDate).Hours() / float64(24))
  286. }
  287. }
  288. for k := 0; k <= day; k++ {
  289. needDay := preDate.AddDate(0, 0, -k)
  290. needDayStr := needDay.Format(utils.FormatDate)
  291. existKey := edbCode + needDayStr
  292. if _, ok := existMap[existKey]; !ok {
  293. timestamp := needDay.UnixNano() / 1e6
  294. timestampStr := fmt.Sprintf("%d", timestamp)
  295. valStr := decimal.NewFromFloat(currentItem.Value).String()
  296. addSql += GetAddSql(edbInfoIdStr, edbCode, needDayStr, timestampStr, valStr)
  297. }
  298. existMap[existKey] = needDayStr
  299. }
  300. existKey := edbCode + currentItem.DataTime
  301. if _, ok := existMap[existKey]; !ok {
  302. currentDate, _ := time.Parse(utils.FormatDate, currentItem.DataTime)
  303. timestamp := currentDate.UnixNano() / 1e6
  304. timestampStr := fmt.Sprintf("%d", timestamp)
  305. valStr := decimal.NewFromFloat(currentItem.Value).String()
  306. addSql += GetAddSql(edbInfoIdStr, edbCode, currentItem.DataTime, timestampStr, valStr)
  307. }
  308. existMap[existKey] = currentItem.DataTime
  309. }
  310. if isAdd {
  311. addSql = strings.TrimRight(addSql, ",")
  312. _, err = o.Raw(addSql).Exec()
  313. if err != nil {
  314. return edbInfoId, err
  315. }
  316. }
  317. }
  318. return
  319. }
  320. //变频
  321. func RefreshCalculateBp(edbInfoId int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
  322. o := orm.NewOrmUsingDB("data")
  323. o.Begin()
  324. defer func() {
  325. if err != nil {
  326. o.Rollback()
  327. } else {
  328. o.Commit()
  329. }
  330. }()
  331. if err != nil {
  332. return
  333. }
  334. edbInfoIdStr := strconv.Itoa(edbInfoId)
  335. //计算数据
  336. //计算数据
  337. var condition string
  338. var pars []interface{}
  339. condition += " AND edb_info_id=? "
  340. pars = append(pars, fromEdbInfo.EdbInfoId)
  341. if startDate != "" {
  342. condition += " AND data_time>=? "
  343. pars = append(pars, startDate)
  344. }
  345. if endDate != "" {
  346. condition += " AND data_time<=? "
  347. pars = append(pars, endDate)
  348. }
  349. dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 0)
  350. if err != nil {
  351. return err
  352. }
  353. existMap := make(map[string]string)
  354. dataLen := len(dataList)
  355. addSql := ` INSERT INTO edb_data_calculate_bp(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
  356. var isAdd bool
  357. for i := 0; i < dataLen; i++ {
  358. //当期
  359. currentItem := dataList[i]
  360. currentDate, _ := time.Parse(utils.FormatDate, currentItem.DataTime)
  361. var day int
  362. var preItem *EdbInfoSearchData
  363. var preDate time.Time
  364. if i == 0 {
  365. day = int(time.Now().Sub(currentDate).Hours() / float64(24))
  366. preDate = time.Now()
  367. } else {
  368. j := i + 1
  369. if j < dataLen {
  370. preItem = dataList[j]
  371. preDate, _ = time.Parse(utils.FormatDate, preItem.DataTime)
  372. day = int(currentDate.Sub(preDate).Hours() / float64(24))
  373. }
  374. }
  375. for k := 0; k <= day; k++ {
  376. needDay := preDate.AddDate(0, 0, -k)
  377. needDayStr := needDay.Format(utils.FormatDate)
  378. existKey := edbCode + needDayStr
  379. if _, ok := existMap[existKey]; !ok {
  380. timestamp := needDay.UnixNano() / 1e6
  381. timestampStr := fmt.Sprintf("%d", timestamp)
  382. valStr := decimal.NewFromFloat(currentItem.Value).String()
  383. addSql += GetAddSql(edbInfoIdStr, edbCode, needDayStr, timestampStr, valStr)
  384. }
  385. existMap[existKey] = needDayStr
  386. }
  387. existKey := edbCode + currentItem.DataTime
  388. if _, ok := existMap[existKey]; !ok {
  389. currentDate, _ := time.Parse(utils.FormatDate, currentItem.DataTime)
  390. timestamp := currentDate.UnixNano() / 1e6
  391. timestampStr := fmt.Sprintf("%d", timestamp)
  392. valStr := decimal.NewFromFloat(currentItem.Value).String()
  393. addSql += GetAddSql(edbInfoIdStr, edbCode, currentItem.DataTime, timestampStr, valStr)
  394. }
  395. existMap[existKey] = currentItem.DataTime
  396. }
  397. if isAdd {
  398. addSql = strings.TrimRight(addSql, ",")
  399. _, err = o.Raw(addSql).Exec()
  400. if err != nil {
  401. return err
  402. }
  403. }
  404. return
  405. }
  406. type EdbInfoCalculateBpDetail struct {
  407. EdbInfoCalculateBpId int `orm:"column(edb_info_calculate_bp_id);pk"`
  408. EdbInfoId int `description:"指标id"`
  409. EdbCode string `description:"指标编码"`
  410. FromEdbInfoId int `description:"计算指标id"`
  411. FromEdbCode string `description:"计算指标编码"`
  412. FromEdbName string `description:"计算指标名称"`
  413. FromSource int `description:"计算指标来源"`
  414. FromSourceName string `description:"计算指标来源名称"`
  415. FromTag string `description:"来源指标标签"`
  416. Sort int `description:"计算指标名称排序"`
  417. CreateTime time.Time `description:"创建时间"`
  418. ModifyTime time.Time `description:"修改时间"`
  419. StartDate string `description:"开始日期"`
  420. EndDate string `description:"结束日期"`
  421. }
  422. func GetEdbInfoCalculateBpDetail(edbInfoId int) (item *EdbInfoCalculateTbzDetail, err error) {
  423. o := orm.NewOrmUsingDB("data")
  424. sql := ` SELECT a.*,b.start_date,b.end_date FROM edb_info_calculate_mapping AS a
  425. INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
  426. WHERE a.edb_info_id=? `
  427. err = o.Raw(sql, edbInfoId).QueryRow(&item)
  428. return
  429. }
  430. //刷新所有变频数据
  431. func RefreshAllCalculateBp(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
  432. o := orm.NewOrmUsingDB("data")
  433. o.Begin()
  434. defer func() {
  435. if err != nil {
  436. o.Rollback()
  437. } else {
  438. o.Commit()
  439. }
  440. }()
  441. if err != nil {
  442. return
  443. }
  444. edbInfoIdStr := strconv.Itoa(edbInfoId)
  445. //计算数据
  446. //计算数据
  447. var condition string
  448. var pars []interface{}
  449. condition += " AND edb_info_id=? "
  450. pars = append(pars, fromEdbInfo.EdbInfoId)
  451. if startDate != "" {
  452. condition += " AND data_time>=? "
  453. pars = append(pars, startDate)
  454. }
  455. if endDate != "" {
  456. condition += " AND data_time<=? "
  457. pars = append(pars, endDate)
  458. }
  459. dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 0)
  460. if err != nil {
  461. return err
  462. }
  463. var dateArr []string
  464. dataMap := make(map[string]*EdbInfoSearchData)
  465. for _, v := range dataList {
  466. dateArr = append(dateArr, v.DataTime)
  467. dataMap[v.DataTime] = v
  468. }
  469. fmt.Println("source:", source)
  470. //获取指标所有数据
  471. existDataList := make([]*EdbDataBase, 0)
  472. dataTableName := GetEdbDataTableName(source)
  473. fmt.Println("dataTableName:", dataTableName)
  474. sql := `SELECT * FROM %s WHERE edb_info_id=? `
  475. sql = fmt.Sprintf(sql, dataTableName)
  476. _, err = o.Raw(sql, edbInfoId).QueryRows(&existDataList)
  477. if err != nil {
  478. return err
  479. }
  480. existDataMap := make(map[string]string)
  481. for _, v := range existDataList {
  482. existDataMap[v.DataTime] = v.Value
  483. }
  484. fmt.Println("existDataMap:", existDataMap)
  485. addSql := ` INSERT INTO edb_data_calculate_bp(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
  486. var isAdd bool
  487. existMap := make(map[string]string)
  488. dataLen := len(dataList)
  489. for i := 0; i < dataLen; i++ {
  490. //当期
  491. currentItem := dataList[i]
  492. currentDate, _ := time.Parse(utils.FormatDate, currentItem.DataTime)
  493. var day int
  494. var preItem *EdbInfoSearchData
  495. var preDate time.Time
  496. if i == 0 {
  497. day = int(time.Now().Sub(currentDate).Hours() / float64(24))
  498. preDate = time.Now()
  499. } else {
  500. j := i + 1
  501. if j < dataLen {
  502. preItem = dataList[j]
  503. preDate, _ = time.Parse(utils.FormatDate, preItem.DataTime)
  504. day = int(currentDate.Sub(preDate).Hours() / float64(24))
  505. }
  506. }
  507. for k := 0; k <= day; k++ {
  508. needDay := preDate.AddDate(0, 0, -k)
  509. needDayStr := needDay.Format(utils.FormatDate)
  510. existKey := edbCode + needDayStr
  511. if _, ok := existMap[existKey]; !ok {
  512. timestamp := needDay.UnixNano() / 1e6
  513. timestampStr := fmt.Sprintf("%d", timestamp)
  514. valStr := decimal.NewFromFloat(currentItem.Value).String()
  515. if existVal, ok := existDataMap[needDayStr]; !ok {
  516. addSql += GetAddSql(edbInfoIdStr, edbCode, needDayStr, timestampStr, valStr)
  517. } else {
  518. if existVal != valStr {
  519. sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
  520. sql = fmt.Sprintf(sql, dataTableName)
  521. _, err = o.Raw(sql, valStr, edbInfoId, needDay).Exec()
  522. if err != nil {
  523. return err
  524. }
  525. }
  526. }
  527. }
  528. existMap[existKey] = needDayStr
  529. }
  530. existKey := edbCode + currentItem.DataTime
  531. if _, ok := existMap[existKey]; !ok {
  532. currentDate, _ := time.Parse(utils.FormatDate, currentItem.DataTime)
  533. timestamp := currentDate.UnixNano() / 1e6
  534. timestampStr := fmt.Sprintf("%d", timestamp)
  535. valStr := decimal.NewFromFloat(currentItem.Value).String()
  536. if existVal, ok := existDataMap[currentItem.DataTime]; !ok {
  537. addSql += GetAddSql(edbInfoIdStr, edbCode, currentItem.DataTime, timestampStr, valStr)
  538. } else {
  539. if existVal != valStr {
  540. sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
  541. sql = fmt.Sprintf(sql, dataTableName)
  542. _, err = o.Raw(sql, valStr, edbInfoId, currentItem.DataTime).Exec()
  543. if err != nil {
  544. return err
  545. }
  546. }
  547. }
  548. }
  549. existMap[existKey] = currentItem.DataTime
  550. }
  551. if isAdd {
  552. addSql = strings.TrimRight(addSql, ",")
  553. _, err = o.Raw(addSql).Exec()
  554. if err != nil {
  555. return err
  556. }
  557. }
  558. return
  559. }