edb_data_quarter.go 29 KB

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