edb_data_quarter.go 29 KB

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