edb_data_calculate_ljzzy.go 18 KB

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