edb_data_quarter.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/beego/beego/v2/client/orm"
  6. "hongze/hongze_chart_lib/utils"
  7. "sort"
  8. "strconv"
  9. "strings"
  10. "time"
  11. "github.com/nosixtools/solarlunar"
  12. )
  13. func GetEdbDataQuarterCount(edbInfoId int) (count int, err error) {
  14. o := orm.NewOrmUsingDB("data")
  15. hsql := `SELECT COUNT(1) AS count FROM edb_data_quarter WHERE edb_info_id=? `
  16. err = o.Raw(hsql, edbInfoId).QueryRow(&count)
  17. return
  18. }
  19. //指标季度数据计算
  20. func AddCalculateQuarter(edbInfoId, source int, edbCode string) (err error) {
  21. o := orm.NewOrmUsingDB("data")
  22. o.Begin()
  23. defer func() {
  24. if err != nil {
  25. fmt.Println("Err:", err)
  26. o.Rollback()
  27. } else {
  28. o.Commit()
  29. }
  30. }()
  31. edbInfoIdStr := strconv.Itoa(edbInfoId)
  32. fmt.Println(edbInfoIdStr)
  33. //计算数据
  34. var condition string
  35. var pars []interface{}
  36. condition += " AND edb_info_id=? "
  37. pars = append(pars, edbInfoId)
  38. dataList, err := GetEdbDataListAll(condition, pars, source, 0)
  39. if err != nil {
  40. return err
  41. }
  42. var yearArr []int
  43. yearMap := make(map[int]int)
  44. dataMap := make(map[string]*EdbInfoSearchData)
  45. for _, v := range dataList {
  46. //日其中获取年
  47. itemDate, err := time.Parse(utils.FormatDate, v.DataTime)
  48. if err != nil {
  49. return err
  50. }
  51. year := itemDate.Year()
  52. if _, ok := yearMap[year]; !ok {
  53. yearArr = append(yearArr, year)
  54. yearMap[year] = year
  55. }
  56. dataMap[v.DataTime] = v
  57. }
  58. sort.Sort(sort.Reverse(sort.IntSlice(yearArr)))
  59. addSql := ` INSERT INTO edb_data_quarter(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
  60. var isAdd bool
  61. //yearLen := len(yearArr)
  62. fmt.Println(yearArr)
  63. for _, yv := range yearArr {
  64. currentYear := yv
  65. hsql := `SELECT * FROM holiday WHERE year=? `
  66. currentHolidayObj := new(Holiday)
  67. err = o.Raw(hsql, currentYear).QueryRow(&currentHolidayObj)
  68. if err != nil {
  69. fmt.Println("get holiday err:" + err.Error())
  70. return err
  71. }
  72. cjDate := currentHolidayObj.HolidayDate
  73. fmt.Println("year:", yv, "cjDate:", cjDate)
  74. //utils.FileLog.Info("cjDate:", cjDate)
  75. existMap := make(map[string]string)
  76. for i := 1; i <= 70; i++ {
  77. preDate := cjDate.Format(utils.FormatDate)
  78. fmt.Println("year:", yv, "preDate:", preDate, "i:", i)
  79. if findItem, ok := dataMap[preDate]; ok {
  80. timestamp := currentHolidayObj.HolidayDate.UnixNano() / 1e6
  81. timestampStr := fmt.Sprintf("%d", timestamp)
  82. if _, exist := existMap[preDate]; !exist {
  83. valStr := utils.SubFloatToString(findItem.Value, 4)
  84. addSql += GetAddSql(edbInfoIdStr, edbCode, preDate, timestampStr, valStr)
  85. isAdd = true
  86. }
  87. }
  88. cjDate = cjDate.AddDate(0, 0, -1)
  89. }
  90. cjDate = currentHolidayObj.HolidayDate
  91. for i := 1; i <= 70; i++ {
  92. nextDate := cjDate.Format(utils.FormatDate)
  93. fmt.Println("year:", yv, "nextDate:", nextDate, "i:", i)
  94. if findItem, ok := dataMap[nextDate]; ok {
  95. timestamp := currentHolidayObj.HolidayDate.UnixNano() / 1e6
  96. timestampStr := fmt.Sprintf("%d", timestamp)
  97. if _, exist := existMap[nextDate]; !exist {
  98. valStr := utils.SubFloatToString(findItem.Value, 4)
  99. addSql += GetAddSql(edbInfoIdStr, edbCode, nextDate, timestampStr, valStr)
  100. isAdd = true
  101. }
  102. }
  103. cjDate = cjDate.AddDate(0, 0, +1)
  104. }
  105. //nextIndex := yk + 1
  106. //if nextIndex < yearLen {
  107. // nextYear := yearArr[nextIndex]
  108. // fmt.Println("year:", currentYear, nextYear)
  109. // nextHolidayObj := new(Holiday)
  110. // hsql := `SELECT * FROM holiday WHERE year=? `
  111. // err = o.Raw(hsql, nextYear).QueryRow(&nextHolidayObj)
  112. // if err != nil {
  113. // return err
  114. // }
  115. // nextHolidayStr := nextHolidayObj.HolidayDate.Format(utils.FormatDate)
  116. // currentHolidayStr := currentHolidayObj.HolidayDate.Format(utils.FormatDate)
  117. //
  118. // if findItem, ok := dataMap[nextHolidayStr]; ok {
  119. // timestamp := currentHolidayObj.HolidayDate.UnixNano() / 1e6
  120. // timestampStr := fmt.Sprintf("%d", timestamp)
  121. // addSql += GetAddSql(edbInfoIdStr, edbCode, currentHolidayStr, timestampStr, findItem.Value)
  122. // isAdd = true
  123. // }
  124. //
  125. // nextMinDate := strconv.Itoa(nextYear) + "-01-01"
  126. // nextMaxDate := strconv.Itoa(nextYear) + "-12-31"
  127. // currentMinDate := strconv.Itoa(currentYear) + "-01-01"
  128. // currentMaxDate := strconv.Itoa(currentYear) + "-12-31"
  129. //
  130. // i := 0
  131. // for {
  132. // i--
  133. // nextHolidayFormat := nextHolidayObj.HolidayDate.AddDate(0, 0, i)
  134. // currentHolidayFormat := currentHolidayObj.HolidayDate.AddDate(0, 0, i)
  135. //
  136. // nextHolidayStr := nextHolidayFormat.Format(utils.FormatDate)
  137. // currentHolidayStr := currentHolidayFormat.Format(utils.FormatDate)
  138. //
  139. // fmt.Println("currentHolidayStr:", currentHolidayStr, nextHolidayStr)
  140. // if findItem, ok := dataMap[nextHolidayStr]; ok {
  141. // timestamp := currentHolidayFormat.UnixNano() / 1e6
  142. // timestampStr := fmt.Sprintf("%d", timestamp)
  143. // addSql += GetAddSql(edbInfoIdStr, edbCode, currentHolidayStr, timestampStr, findItem.Value)
  144. // isAdd = true
  145. // }
  146. // //fmt.Println("nextHolidayStr:", nextHolidayStr,nextMinDate)
  147. // if nextHolidayStr == nextMinDate || currentHolidayStr == currentMinDate {
  148. // fmt.Println("min跳出循环:" + nextMinDate)
  149. // break
  150. // }
  151. // }
  152. //
  153. // n := 0
  154. // for {
  155. // n++
  156. // nextHolidayFormat := nextHolidayObj.HolidayDate.AddDate(0, 0, n)
  157. // currentHolidayFormat := currentHolidayObj.HolidayDate.AddDate(0, 0, n)
  158. //
  159. // nextHolidayStr := nextHolidayFormat.Format(utils.FormatDate)
  160. // currentHolidayStr := currentHolidayFormat.Format(utils.FormatDate)
  161. //
  162. // fmt.Println("currentHolidayStr:", currentHolidayStr, nextHolidayStr)
  163. //
  164. // if findItem, ok := dataMap[nextHolidayStr]; ok {
  165. // timestamp := currentHolidayFormat.UnixNano() / 1e6
  166. // timestampStr := fmt.Sprintf("%d", timestamp)
  167. //
  168. // addSql += GetAddSql(edbInfoIdStr, edbCode, currentHolidayStr, timestampStr, findItem.Value)
  169. // isAdd = true
  170. // }
  171. //
  172. // //fmt.Println("nextHolidayStr:", nextHolidayStr,nextMaxDate)
  173. // if nextHolidayStr == nextMaxDate || currentHolidayStr == currentMaxDate {
  174. // fmt.Println("max跳出循环:" + nextMaxDate)
  175. // break
  176. // }
  177. // }
  178. //}
  179. }
  180. fmt.Println("isAdd", isAdd)
  181. if isAdd {
  182. addSql = strings.TrimRight(addSql, ",")
  183. utils.FileLog.Info(addSql)
  184. _, err = o.Raw(addSql).Exec()
  185. fmt.Println("err:", err)
  186. if err != nil {
  187. return err
  188. }
  189. }
  190. return
  191. }
  192. //指标季度数据计算(公历转农历)
  193. func AddCalculateQuarterV2(edbInfoId, source int, edbCode string) (err error) {
  194. o := orm.NewOrmUsingDB("data")
  195. o.Begin()
  196. defer func() {
  197. if err != nil {
  198. fmt.Println("Err:", err)
  199. o.Rollback()
  200. } else {
  201. o.Commit()
  202. }
  203. }()
  204. edbInfoIdStr := strconv.Itoa(edbInfoId)
  205. fmt.Println(edbInfoIdStr)
  206. //计算数据
  207. var condition string
  208. var pars []interface{}
  209. condition += " AND edb_info_id=? "
  210. pars = append(pars, edbInfoId)
  211. dataList, err := GetEdbDataListAll(condition, pars, source, 0)
  212. if err != nil {
  213. return err
  214. }
  215. var yearArr []int
  216. yearMap := make(map[int]int)
  217. dataMap := make(map[string]*EdbInfoSearchData)
  218. for _, v := range dataList {
  219. //日其中获取年
  220. itemDate, err := time.Parse(utils.FormatDate, v.DataTime)
  221. if err != nil {
  222. return err
  223. }
  224. year := itemDate.Year()
  225. if _, ok := yearMap[year]; !ok {
  226. yearArr = append(yearArr, year)
  227. yearMap[year] = year
  228. }
  229. dataMap[v.DataTime] = v
  230. }
  231. sort.Sort(sort.Reverse(sort.IntSlice(yearArr)))
  232. addSql := ` INSERT INTO edb_data_quarter(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
  233. var isAdd bool
  234. //yearLen := len(yearArr)
  235. fmt.Println(yearArr)
  236. for _, yv := range yearArr {
  237. fmt.Println(yv)
  238. }
  239. fmt.Println("isAdd", isAdd)
  240. if isAdd {
  241. addSql = strings.TrimRight(addSql, ",")
  242. utils.FileLog.Info(addSql)
  243. _, err = o.Raw(addSql).Exec()
  244. fmt.Println("err:", err)
  245. if err != nil {
  246. return err
  247. }
  248. }
  249. return
  250. }
  251. //指标季度数据计算(公历转农历)
  252. func AddCalculateQuarterV3(edbInfoId, source int, edbCode string, list []*EdbDataList) (err error) {
  253. var errMsg string
  254. defer func() {
  255. if errMsg != "" {
  256. fmt.Println("errMsg:", errMsg)
  257. }
  258. }()
  259. lunarDate := "2017-01-01" //农历
  260. fmt.Println(solarlunar.LunarToSolar(lunarDate, false))
  261. dataList, err := GetHzTestEdbdata()
  262. var yearArr []int
  263. yearMap := make(map[int]int)
  264. var cureentDate time.Time
  265. for k, v := range dataList {
  266. if k == 0 {
  267. cureentDate = v.Dt
  268. }
  269. year := v.Dt.Year()
  270. if _, ok := yearMap[year]; !ok {
  271. yearArr = append(yearArr, year)
  272. }
  273. yearMap[year] = year
  274. }
  275. //排序
  276. fmt.Println(yearArr)
  277. thisYear := cureentDate.Year()
  278. thisMonth := int(cureentDate.Month())
  279. sort.Ints(yearArr)
  280. fmt.Println("thisYear:", thisYear)
  281. result := new(HzTestEdbdataResult)
  282. for ky, vy := range yearArr {
  283. if thisMonth < 11 {
  284. currentYearCjnl := strconv.Itoa(thisYear) + "-01-01" //当前年份春节农历
  285. currentYearCjgl := solarlunar.LunarToSolar(currentYearCjnl, false) //当前年份春节公历
  286. currentYearCjglDate, err := time.Parse(utils.FormatDate, currentYearCjgl)
  287. if err != nil {
  288. errMsg = "生成当前春节失败,Err:" + err.Error()
  289. return err
  290. }
  291. fmt.Println(ky, vy)
  292. preYear := vy
  293. preYearCjnl := strconv.Itoa(preYear) + "-01-01" //之前年份春节农历
  294. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  295. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  296. if err != nil {
  297. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  298. return err
  299. }
  300. day := currentYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  301. fmt.Println("day:", day)
  302. items := new(HzTestEdbdataItems)
  303. dataLen := len(dataList)
  304. for i := dataLen - 1; i >= 0; i-- {
  305. v := dataList[i]
  306. newDate := v.Dt.AddDate(0, 0, int(day))
  307. selectDateStr := strconv.Itoa(thisYear) + "-11" + "-30"
  308. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  309. if newDate.Before(selectDate) {
  310. item := new(HzTestEdbdata)
  311. item.TtradeCode = v.TtradeCode
  312. item.Dt = newDate
  313. item.Close = v.Close
  314. timestamp := item.Dt.UnixNano() / 1e6
  315. item.DataTimestamp = timestamp
  316. items.Items = append(items.Items, item)
  317. }
  318. }
  319. result.List = append(result.List, items)
  320. } else {
  321. fmt.Println(ky, vy)
  322. nextYear := thisYear + 1
  323. nextYearCjnl := strconv.Itoa(nextYear) + "-01-01" //当前年份春节农历
  324. nextYearCjgl := solarlunar.LunarToSolar(nextYearCjnl, false) //当前年份春节公历
  325. nextYearCjglDate, err := time.Parse(utils.FormatDate, nextYearCjgl)
  326. if err != nil {
  327. errMsg = "生成当前春节失败,Err:" + err.Error()
  328. return err
  329. }
  330. preYear := vy
  331. preYearCjnl := strconv.Itoa(preYear) + "-01-01" //之前年份春节农历
  332. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  333. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  334. if err != nil {
  335. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  336. return err
  337. }
  338. day := nextYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  339. fmt.Println("day:", day)
  340. items := new(HzTestEdbdataItems)
  341. dataLen := len(dataList)
  342. for i := dataLen - 1; i >= 0; i-- {
  343. v := dataList[i]
  344. newDate := v.Dt.AddDate(0, 0, int(day))
  345. selectDateStr := strconv.Itoa(nextYear) + "-05" + "-31"
  346. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  347. if newDate.Before(selectDate) {
  348. item := new(HzTestEdbdata)
  349. item.TtradeCode = v.TtradeCode
  350. item.Dt = newDate
  351. item.Close = v.Close
  352. timestamp := item.Dt.UnixNano() / 1e6
  353. item.DataTimestamp = timestamp
  354. items.Items = append(items.Items, item)
  355. }
  356. }
  357. result.List = append(result.List, items)
  358. }
  359. }
  360. resultJson, err := json.Marshal(result)
  361. utils.FileLog.Info(string(resultJson))
  362. return
  363. }
  364. //指标季度数据计算(公历转农历)
  365. func AddCalculateQuarterV4(dataList []*EdbDataList) (result *EdbDataResult, err error) {
  366. var errMsg string
  367. defer func() {
  368. if errMsg != "" {
  369. fmt.Println("errMsg:", errMsg)
  370. }
  371. }()
  372. endDate := dataList[len(dataList)-1].DataTime
  373. endDateForm, err := time.Parse(utils.FormatDate, endDate)
  374. if err != nil {
  375. return result, err
  376. }
  377. thisMonth := int(endDateForm.Month())
  378. result = new(EdbDataResult)
  379. var yearArr []int
  380. yearMap := make(map[int]int)
  381. var cureentDate time.Time
  382. if thisMonth < 11 {
  383. for k, v := range dataList {
  384. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  385. if err != nil {
  386. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  387. return result, err
  388. }
  389. if k == len(dataList)-1 {
  390. cureentDate = dateTime
  391. }
  392. year := dateTime.Year()
  393. if _, ok := yearMap[year]; !ok {
  394. yearArr = append(yearArr, year)
  395. }
  396. yearMap[year] = year
  397. }
  398. } else {
  399. for k, v := range dataList {
  400. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  401. if err != nil {
  402. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  403. return result, err
  404. }
  405. if k == len(dataList)-1 {
  406. cureentDate = dateTime
  407. }
  408. year := dateTime.Year() + 1
  409. if _, ok := yearMap[year]; !ok {
  410. yearArr = append(yearArr, year)
  411. }
  412. yearMap[year] = year
  413. }
  414. }
  415. //排序
  416. fmt.Println("yearArr:", yearArr)
  417. thisYear := cureentDate.Year()
  418. //thisMonth := int(cureentDate.Month())
  419. fmt.Println("thisMonth:", thisMonth)
  420. for ky, vy := range yearArr {
  421. fmt.Println("line 432:", ky, vy, thisYear, thisMonth)
  422. if thisMonth < 11 {
  423. currentYearCjnl := strconv.Itoa(thisYear) + "-01-01" //当前年份春节农历
  424. currentYearCjgl := solarlunar.LunarToSolar(currentYearCjnl, false) //当前年份春节公历
  425. currentYearCjglDate, err := time.Parse(utils.FormatDate, currentYearCjgl)
  426. if err != nil {
  427. errMsg = "生成当前春节失败,Err:" + err.Error()
  428. return result, err
  429. }
  430. preYear := vy
  431. preYearCjnl := strconv.Itoa(preYear) + "-01-01" //之前年份春节农历
  432. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  433. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  434. if err != nil {
  435. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  436. return result, err
  437. }
  438. day := currentYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  439. items := new(EdbDataItems)
  440. items.Year = preYear
  441. for _, v := range dataList {
  442. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  443. if err != nil {
  444. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  445. return result, err
  446. }
  447. newDate := dateTime.AddDate(0, 0, int(day))
  448. selectDateStr := strconv.Itoa(thisYear) + "-11" + "-30"
  449. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  450. if newDate.Before(selectDate) || newDate == selectDate {
  451. timestamp := newDate.UnixNano() / 1e6
  452. item := new(EdbDataList)
  453. item.DataTime = newDate.Format(utils.FormatDate)
  454. item.EdbInfoId = v.EdbInfoId
  455. item.Value = v.Value
  456. item.EdbDataId = v.EdbDataId
  457. item.DataTimestamp = timestamp
  458. items.Items = append(items.Items, item)
  459. }
  460. }
  461. result.List = append(result.List, items)
  462. } else {
  463. nextYear := thisYear + 1
  464. nextYearCjnl := strconv.Itoa(nextYear) + "-01-01" //当前年份春节农历
  465. nextYearCjgl := solarlunar.LunarToSolar(nextYearCjnl, false) //当前年份春节公历
  466. nextYearCjglDate, err := time.Parse(utils.FormatDate, nextYearCjgl)
  467. if err != nil {
  468. errMsg = "生成当前春节失败,Err:" + err.Error()
  469. return result, err
  470. }
  471. preYear := vy
  472. preYearCjnl := strconv.Itoa(preYear) + "-01-01" //之前年份春节农历
  473. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  474. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  475. if err != nil {
  476. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  477. return result, err
  478. }
  479. day := nextYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  480. fmt.Println("day:", day, nextYearCjglDate, preYearCjglDate)
  481. items := new(EdbDataItems)
  482. items.Year = preYear - 1
  483. fmt.Println("preYear:", preYear, "ky:", ky, "yearArrLen:", len(yearArr))
  484. if ky+1 < len(yearArr) {
  485. for _, v := range dataList {
  486. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  487. if err != nil {
  488. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  489. return result, err
  490. }
  491. newDate := dateTime.AddDate(0, 0, int(day))
  492. selectDateStr := strconv.Itoa(nextYear) + "-05" + "-31"
  493. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  494. if newDate.Before(selectDate) || newDate == selectDate {
  495. timestamp := newDate.UnixNano() / 1e6
  496. item := new(EdbDataList)
  497. item.DataTime = newDate.Format(utils.FormatDate)
  498. item.EdbInfoId = v.EdbInfoId
  499. item.Value = v.Value
  500. item.EdbDataId = v.EdbDataId
  501. item.DataTimestamp = timestamp
  502. items.Items = append(items.Items, item)
  503. }
  504. }
  505. result.List = append(result.List, items)
  506. } else {
  507. for _, v := range dataList {
  508. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  509. if err != nil {
  510. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  511. return result, err
  512. }
  513. timestamp := dateTime.UnixNano() / 1e6
  514. item := new(EdbDataList)
  515. item.DataTime = dateTime.Format(utils.FormatDate)
  516. item.EdbInfoId = v.EdbInfoId
  517. item.Value = v.Value
  518. item.EdbDataId = v.EdbDataId
  519. item.DataTimestamp = timestamp
  520. items.Items = append(items.Items, item)
  521. }
  522. result.List = append(result.List, items)
  523. }
  524. }
  525. }
  526. return
  527. }
  528. type HzTestEdbdataResult struct {
  529. List []*HzTestEdbdataItems
  530. }
  531. type HzTestEdbdataItems struct {
  532. Items []*HzTestEdbdata
  533. }
  534. type HzTestEdbdata struct {
  535. TtradeCode string `orm:"column(TRADE_CODE)"`
  536. Dt time.Time `orm:"column(DT)"`
  537. Close float64 `orm:"column(CLOSE)"`
  538. ModifyTime time.Time `orm:"column(modify_time)"`
  539. DataTimestamp int64
  540. }
  541. func GetHzTestEdbdata() (list []*HzTestEdbdata, err error) {
  542. o := orm.NewOrm()
  543. sql := ` SELECT * FROM hz_test_edbdata WHERE TRADE_CODE=? ORDER BY DT DESC `
  544. _, err = o.Raw(sql, "ST_0000577845").QueryRows(&list)
  545. return
  546. }
  547. type EdbDataItems struct {
  548. Items []*EdbDataList
  549. Year int
  550. }
  551. type EdbDataResult struct {
  552. List []*EdbDataItems
  553. }
  554. func AddCalculateQuarterV5(dataList []*EdbDataList) (result *EdbDataResult, err error) {
  555. var errMsg string
  556. defer func() {
  557. if errMsg != "" {
  558. fmt.Println("errMsg:", errMsg)
  559. }
  560. }()
  561. result = new(EdbDataResult)
  562. thisYear := time.Now().Year()
  563. endDate := dataList[len(dataList)-1].DataTime
  564. endDateForm, err := time.Parse(utils.FormatDate, endDate)
  565. if err != nil {
  566. return result, err
  567. }
  568. thisMonth := int(endDateForm.Month())
  569. fmt.Println(thisMonth)
  570. for i := 4; i > 0; i-- {
  571. if thisMonth < 11 {
  572. nextYear := thisYear
  573. nextYearCjnl := strconv.Itoa(nextYear) + "-01-01" //当前年份春节农历
  574. nextYearCjgl := solarlunar.LunarToSolar(nextYearCjnl, false) //当前年份春节公历
  575. nextYearCjglDate, err := time.Parse(utils.FormatDate, nextYearCjgl)
  576. if err != nil {
  577. errMsg = "生成当前春节失败,Err:" + err.Error()
  578. return result, err
  579. }
  580. preYearCjnl := strconv.Itoa(nextYear-i) + "-01-01" //之前年份春节农历
  581. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  582. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  583. if err != nil {
  584. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  585. return result, err
  586. }
  587. day := nextYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  588. items := new(EdbDataItems)
  589. for _, v := range dataList {
  590. dataDate := v.DataTime
  591. dataDateForm, err := time.Parse(utils.FormatDate, dataDate)
  592. if err != nil {
  593. return result, err
  594. }
  595. newDate := dataDateForm.AddDate(0, 0, int(day))
  596. selectDateStr := strconv.Itoa(nextYear) + "-11" + "-30"
  597. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  598. if newDate.Before(selectDate) {
  599. timestamp := newDate.UnixNano() / 1e6
  600. item := new(EdbDataList)
  601. item.DataTime = newDate.Format(utils.FormatDate)
  602. item.EdbInfoId = v.EdbInfoId
  603. item.Value = v.Value
  604. item.EdbDataId = v.EdbDataId
  605. item.DataTimestamp = timestamp
  606. items.Items = append(items.Items, item)
  607. }
  608. }
  609. fmt.Println(nextYear, "年春节阳历", nextYearCjgl)
  610. fmt.Println(i, "年前春节", preYearCjnl)
  611. fmt.Println(i, "年前春节阳历", preYearCjgl)
  612. fmt.Println("与", nextYear, "年春节相差天数", day, "____________")
  613. result.List = append(result.List, items)
  614. } else {
  615. nextYear := thisYear + 1
  616. nextYearCjnl := strconv.Itoa(nextYear) + "-01-01" //当前年份春节农历
  617. nextYearCjgl := solarlunar.LunarToSolar(nextYearCjnl, false) //当前年份春节公历
  618. nextYearCjglDate, err := time.Parse(utils.FormatDate, nextYearCjgl)
  619. if err != nil {
  620. errMsg = "生成当前春节失败,Err:" + err.Error()
  621. return result, err
  622. }
  623. preYearCjnl := strconv.Itoa(nextYear-i) + "-01-01" //之前年份春节农历
  624. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  625. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  626. if err != nil {
  627. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  628. return result, err
  629. }
  630. day := nextYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  631. items := new(EdbDataItems)
  632. for _, v := range dataList {
  633. dataDate := v.DataTime
  634. dataDateForm, err := time.Parse(utils.FormatDate, dataDate)
  635. if err != nil {
  636. return result, err
  637. }
  638. newDate := dataDateForm.AddDate(0, 0, int(day))
  639. selectDateStr := strconv.Itoa(nextYear) + "-05" + "-31"
  640. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  641. if newDate.Before(selectDate) {
  642. timestamp := newDate.UnixNano() / 1e6
  643. item := new(EdbDataList)
  644. item.DataTime = newDate.Format(utils.FormatDate)
  645. item.EdbInfoId = v.EdbInfoId
  646. item.Value = v.Value
  647. item.EdbDataId = v.EdbDataId
  648. item.DataTimestamp = timestamp
  649. items.Items = append(items.Items, item)
  650. }
  651. }
  652. fmt.Println(nextYear, "年春节阳历", nextYearCjgl)
  653. fmt.Println(i, "年前春节", preYearCjnl)
  654. fmt.Println(i, "年前春节阳历", preYearCjgl)
  655. fmt.Println("与", nextYear, "年春节相差天数", day, "____________")
  656. result.List = append(result.List, items)
  657. }
  658. }
  659. //合并第五组数据
  660. items := new(EdbDataItems)
  661. for _, v := range dataList {
  662. dataDate := v.DataTime
  663. dataDateForm, err := time.Parse(utils.FormatDate, dataDate)
  664. if err != nil {
  665. return result, err
  666. }
  667. timestamp := dataDateForm.UnixNano() / 1e6
  668. item := new(EdbDataList)
  669. item.DataTime = v.DataTime
  670. item.EdbInfoId = v.EdbInfoId
  671. item.Value = v.Value
  672. item.EdbDataId = v.EdbDataId
  673. item.DataTimestamp = timestamp
  674. items.Items = append(items.Items, item)
  675. }
  676. result.List = append(result.List, items)
  677. return
  678. }