edb_data_quarter.go 23 KB

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