edb_data_quarter.go 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  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. utils.FileLog.Info(addSql)
  189. //_, err = to.Raw(addSql).Exec()
  190. err = to.Exec(addSql).Error
  191. fmt.Println("err:", err)
  192. if err != nil {
  193. return err
  194. }
  195. }
  196. return
  197. }
  198. // 指标季度数据计算(公历转农历)
  199. func AddCalculateQuarterV4(dataList []*EdbDataList) (result *EdbDataResult, err error) {
  200. var errMsg string
  201. defer func() {
  202. if errMsg != "" {
  203. fmt.Println("errMsg:", errMsg)
  204. }
  205. }()
  206. endDate := dataList[len(dataList)-1].DataTime
  207. endDateForm, err := time.Parse(utils.FormatDate, endDate)
  208. if err != nil {
  209. return result, err
  210. }
  211. thisMonth := int(endDateForm.Month())
  212. result = new(EdbDataResult)
  213. var yearArr []int
  214. yearMap := make(map[int]int)
  215. var cureentDate time.Time
  216. if thisMonth < 11 {
  217. for k, v := range dataList {
  218. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  219. if err != nil {
  220. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  221. return result, err
  222. }
  223. if k == len(dataList)-1 {
  224. cureentDate = dateTime
  225. }
  226. year := dateTime.Year()
  227. if _, ok := yearMap[year]; !ok {
  228. yearArr = append(yearArr, year)
  229. }
  230. yearMap[year] = year
  231. }
  232. } else {
  233. for k, v := range dataList {
  234. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  235. if err != nil {
  236. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  237. return result, err
  238. }
  239. if k == len(dataList)-1 {
  240. cureentDate = dateTime
  241. }
  242. year := dateTime.Year() + 1
  243. if _, ok := yearMap[year]; !ok {
  244. yearArr = append(yearArr, year)
  245. }
  246. yearMap[year] = year
  247. }
  248. }
  249. //排序
  250. fmt.Println("yearArr:", yearArr)
  251. thisYear := cureentDate.Year()
  252. //thisMonth := int(cureentDate.Month())
  253. fmt.Println("thisMonth:", thisMonth)
  254. for ky, vy := range yearArr {
  255. fmt.Println("line 432:", ky, vy, thisYear, thisMonth)
  256. if thisMonth < 11 {
  257. currentYearCjnl := strconv.Itoa(thisYear) + "-01-01" //当前年份春节农历
  258. currentYearCjgl := solarlunar.LunarToSolar(currentYearCjnl, false) //当前年份春节公历
  259. currentYearCjglDate, err := time.Parse(utils.FormatDate, currentYearCjgl)
  260. if err != nil {
  261. errMsg = "生成当前春节失败,Err:" + err.Error()
  262. return result, err
  263. }
  264. preYear := vy
  265. preYearCjnl := strconv.Itoa(preYear) + "-01-01" //之前年份春节农历
  266. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  267. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  268. if err != nil {
  269. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  270. return result, err
  271. }
  272. day := currentYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  273. fmt.Println("day:", day, currentYearCjglDate, preYearCjglDate)
  274. items := new(EdbDataItems)
  275. items.BetweenDay = int(day) //公历日期换算成农历,需要减除的天数
  276. items.Year = preYear
  277. for _, v := range dataList {
  278. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  279. if err != nil {
  280. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  281. return result, err
  282. }
  283. newDate := dateTime.AddDate(0, 0, int(day))
  284. selectDateStr := strconv.Itoa(thisYear) + "-11" + "-30"
  285. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  286. if newDate.Before(selectDate) || newDate == selectDate {
  287. timestamp := newDate.UnixNano() / 1e6
  288. item := new(EdbDataList)
  289. item.DataTime = newDate.Format(utils.FormatDate)
  290. item.EdbInfoId = v.EdbInfoId
  291. item.Value = v.Value
  292. item.EdbDataId = v.EdbDataId
  293. item.DataTimestamp = timestamp
  294. items.Items = append(items.Items, item)
  295. }
  296. }
  297. result.List = append(result.List, items)
  298. } else {
  299. nextYear := thisYear + 1
  300. nextYearCjnl := strconv.Itoa(nextYear) + "-01-01" //当前年份春节农历
  301. nextYearCjgl := solarlunar.LunarToSolar(nextYearCjnl, false) //当前年份春节公历
  302. nextYearCjglDate, err := time.Parse(utils.FormatDate, nextYearCjgl)
  303. if err != nil {
  304. errMsg = "生成当前春节失败,Err:" + err.Error()
  305. return result, err
  306. }
  307. preYear := vy
  308. preYearCjnl := strconv.Itoa(preYear) + "-01-01" //之前年份春节农历
  309. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  310. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  311. if err != nil {
  312. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  313. return result, err
  314. }
  315. day := nextYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  316. fmt.Println("day:", day, nextYearCjglDate, preYearCjglDate)
  317. items := new(EdbDataItems)
  318. items.BetweenDay = int(day) //公历日期换算成农历,需要减除的天数
  319. items.Year = preYear - 1
  320. fmt.Println("preYear:", preYear, "ky:", ky, "yearArrLen:", len(yearArr))
  321. if ky+1 < len(yearArr) {
  322. for _, v := range dataList {
  323. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  324. if err != nil {
  325. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  326. return result, err
  327. }
  328. newDate := dateTime.AddDate(0, 0, int(day))
  329. selectDateStr := strconv.Itoa(nextYear) + "-05" + "-31"
  330. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  331. if newDate.Before(selectDate) || newDate == selectDate {
  332. timestamp := newDate.UnixNano() / 1e6
  333. item := new(EdbDataList)
  334. item.DataTime = newDate.Format(utils.FormatDate)
  335. item.EdbInfoId = v.EdbInfoId
  336. item.Value = v.Value
  337. item.EdbDataId = v.EdbDataId
  338. item.DataTimestamp = timestamp
  339. items.Items = append(items.Items, item)
  340. }
  341. }
  342. result.List = append(result.List, items)
  343. } else {
  344. for _, v := range dataList {
  345. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  346. if err != nil {
  347. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  348. return result, err
  349. }
  350. timestamp := dateTime.UnixNano() / 1e6
  351. item := new(EdbDataList)
  352. item.DataTime = dateTime.Format(utils.FormatDate)
  353. item.EdbInfoId = v.EdbInfoId
  354. item.Value = v.Value
  355. item.EdbDataId = v.EdbDataId
  356. item.DataTimestamp = timestamp
  357. items.Items = append(items.Items, item)
  358. }
  359. result.List = append(result.List, items)
  360. }
  361. }
  362. }
  363. return
  364. }
  365. // AddCalculateQuarterV6 指标季度数据计算(季节性图表)
  366. func AddCalculateQuarterV6(dataList []*EdbDataList) (result *EdbDataResult, err error) {
  367. var errMsg string
  368. defer func() {
  369. if errMsg != "" {
  370. fmt.Println("errMsg:", errMsg)
  371. }
  372. }()
  373. endDate := dataList[len(dataList)-1].DataTime
  374. endDateForm, err := time.Parse(utils.FormatDate, endDate)
  375. if err != nil {
  376. return result, err
  377. }
  378. thisMonth := int(endDateForm.Month())
  379. result = new(EdbDataResult)
  380. var yearArr []int
  381. yearMap := make(map[int]int)
  382. var cureentDate time.Time
  383. if thisMonth < 11 {
  384. for k, v := range dataList {
  385. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  386. if err != nil {
  387. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  388. return result, err
  389. }
  390. if k == len(dataList)-1 {
  391. cureentDate = dateTime
  392. }
  393. year := dateTime.Year()
  394. if _, ok := yearMap[year]; !ok {
  395. yearArr = append(yearArr, year)
  396. }
  397. yearMap[year] = year
  398. }
  399. } else {
  400. for k, v := range dataList {
  401. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  402. if err != nil {
  403. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  404. return result, err
  405. }
  406. if k == len(dataList)-1 {
  407. cureentDate = dateTime
  408. }
  409. year := dateTime.Year() + 1
  410. if _, ok := yearMap[year]; !ok {
  411. yearArr = append(yearArr, year)
  412. }
  413. yearMap[year] = year
  414. }
  415. }
  416. //排序
  417. fmt.Println("yearArr:", yearArr)
  418. thisYear := cureentDate.Year()
  419. //thisMonth := int(cureentDate.Month())
  420. fmt.Println("thisMonth:", thisMonth)
  421. for ky, vy := range yearArr {
  422. fmt.Printf("line 432:ky:%d, vy:%d, thisYear:%d, thisMonth:%d", ky, vy, thisYear, thisMonth)
  423. fmt.Println("")
  424. if thisMonth < 11 {
  425. currentYearCjnl := strconv.Itoa(thisYear) + "-01-01" //当前年份春节农历
  426. currentYearCjgl := solarlunar.LunarToSolar(currentYearCjnl, false) //当前年份春节公历
  427. currentYearCjglDate, err := time.Parse(utils.FormatDate, currentYearCjgl)
  428. if err != nil {
  429. errMsg = "生成当前春节失败,Err:" + err.Error()
  430. return result, err
  431. }
  432. preYear := vy
  433. preYearCjnl := strconv.Itoa(preYear) + "-01-01" //之前年份春节农历
  434. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  435. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  436. if err != nil {
  437. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  438. return result, err
  439. }
  440. day := currentYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  441. fmt.Println("day:", day, currentYearCjglDate, preYearCjglDate)
  442. items := new(EdbDataItems)
  443. items.BetweenDay = int(day) //公历日期换算成农历,需要减除的天数
  444. items.Year = preYear
  445. for _, v := range dataList {
  446. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  447. if err != nil {
  448. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  449. return result, err
  450. }
  451. newDate := dateTime.AddDate(0, 0, int(day))
  452. timestamp := newDate.UnixNano() / 1e6
  453. item := new(EdbDataList)
  454. item.DataTime = newDate.Format(utils.FormatDate)
  455. item.EdbInfoId = v.EdbInfoId
  456. item.Value = v.Value
  457. item.EdbDataId = v.EdbDataId
  458. item.DataTimestamp = timestamp
  459. items.Items = append(items.Items, item)
  460. }
  461. result.List = append(result.List, items)
  462. } else {
  463. nextYear := thisYear + 1
  464. nextYearCjnl := strconv.Itoa(nextYear) + "-01-01" //当前年份春节农历
  465. nextYearCjgl := solarlunar.LunarToSolar(nextYearCjnl, false) //当前年份春节公历
  466. nextYearCjglDate, err := time.Parse(utils.FormatDate, nextYearCjgl)
  467. if err != nil {
  468. errMsg = "生成当前春节失败,Err:" + err.Error()
  469. return result, err
  470. }
  471. preYear := vy
  472. preYearCjnl := strconv.Itoa(preYear) + "-01-01" //之前年份春节农历
  473. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  474. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  475. if err != nil {
  476. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  477. return result, err
  478. }
  479. day := nextYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  480. fmt.Println("day:", day, nextYearCjglDate, preYearCjglDate)
  481. items := new(EdbDataItems)
  482. items.BetweenDay = int(day) //公历日期换算成农历,需要减除的天数
  483. items.Year = preYear
  484. fmt.Println("preYear:", preYear, "ky:", ky, "yearArrLen:", len(yearArr))
  485. //if ky+1 < len(yearArr) {
  486. for _, v := range dataList {
  487. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  488. if err != nil {
  489. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  490. return result, err
  491. }
  492. newDate := dateTime.AddDate(0, 0, int(day))
  493. timestamp := newDate.UnixNano() / 1e6
  494. item := new(EdbDataList)
  495. item.DataTime = newDate.Format(utils.FormatDate)
  496. item.EdbInfoId = v.EdbInfoId
  497. item.Value = v.Value
  498. item.EdbDataId = v.EdbDataId
  499. item.DataTimestamp = timestamp
  500. items.Items = append(items.Items, item)
  501. }
  502. result.List = append(result.List, items)
  503. /*} else {
  504. for _, v := range dataList {
  505. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  506. if err != nil {
  507. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  508. return result, err
  509. }
  510. timestamp := dateTime.UnixNano() / 1e6
  511. item := new(EdbDataList)
  512. item.DataTime = dateTime.Format(utils.FormatDate)
  513. item.EdbInfoId = v.EdbInfoId
  514. item.Value = v.Value
  515. item.EdbDataId = v.EdbDataId
  516. item.DataTimestamp = timestamp
  517. items.Items = append(items.Items, item)
  518. }
  519. result.List = append(result.List, items)
  520. }*/
  521. }
  522. }
  523. return
  524. }
  525. // AddCalculateQuarterV4ByUniqueCode 指标季度数据计算(公历转农历)
  526. func AddCalculateQuarterV4ByUniqueCode(dataList []*EdbDataListByUniqueCode) (result *EdbDataResult, err error) {
  527. var errMsg string
  528. defer func() {
  529. if errMsg != "" {
  530. fmt.Println("errMsg:", errMsg)
  531. }
  532. }()
  533. endDate := dataList[len(dataList)-1].DataTime
  534. endDateForm, err := time.Parse(utils.FormatDate, endDate)
  535. if err != nil {
  536. return result, err
  537. }
  538. thisMonth := int(endDateForm.Month())
  539. result = new(EdbDataResult)
  540. var yearArr []int
  541. yearMap := make(map[int]int)
  542. var cureentDate time.Time
  543. if thisMonth < 11 {
  544. for k, v := range dataList {
  545. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  546. if err != nil {
  547. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  548. return result, err
  549. }
  550. if k == len(dataList)-1 {
  551. cureentDate = dateTime
  552. }
  553. year := dateTime.Year()
  554. if _, ok := yearMap[year]; !ok {
  555. yearArr = append(yearArr, year)
  556. }
  557. yearMap[year] = year
  558. }
  559. } else {
  560. for k, v := range dataList {
  561. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  562. if err != nil {
  563. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  564. return result, err
  565. }
  566. if k == len(dataList)-1 {
  567. cureentDate = dateTime
  568. }
  569. year := dateTime.Year() + 1
  570. if _, ok := yearMap[year]; !ok {
  571. yearArr = append(yearArr, year)
  572. }
  573. yearMap[year] = year
  574. }
  575. }
  576. //排序
  577. fmt.Println("yearArr:", yearArr)
  578. thisYear := cureentDate.Year()
  579. //thisMonth := int(cureentDate.Month())
  580. fmt.Println("thisMonth:", thisMonth)
  581. for ky, vy := range yearArr {
  582. fmt.Println("line 432:", ky, vy, thisYear, thisMonth)
  583. if thisMonth < 11 {
  584. currentYearCjnl := strconv.Itoa(thisYear) + "-01-01" //当前年份春节农历
  585. currentYearCjgl := solarlunar.LunarToSolar(currentYearCjnl, false) //当前年份春节公历
  586. currentYearCjglDate, err := time.Parse(utils.FormatDate, currentYearCjgl)
  587. if err != nil {
  588. errMsg = "生成当前春节失败,Err:" + err.Error()
  589. return result, err
  590. }
  591. preYear := vy
  592. preYearCjnl := strconv.Itoa(preYear) + "-01-01" //之前年份春节农历
  593. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  594. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  595. if err != nil {
  596. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  597. return result, err
  598. }
  599. day := currentYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  600. items := new(EdbDataItems)
  601. items.Year = preYear
  602. for _, v := range dataList {
  603. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  604. if err != nil {
  605. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  606. return result, err
  607. }
  608. newDate := dateTime.AddDate(0, 0, int(day))
  609. selectDateStr := strconv.Itoa(thisYear) + "-11" + "-30"
  610. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  611. if newDate.Before(selectDate) || newDate == selectDate {
  612. timestamp := newDate.UnixNano() / 1e6
  613. item := new(EdbDataList)
  614. item.DataTime = newDate.Format(utils.FormatDate)
  615. item.EdbInfoId = v.EdbInfoId
  616. item.Value = v.Value
  617. item.EdbDataId = v.EdbDataId
  618. item.DataTimestamp = timestamp
  619. items.Items = append(items.Items, item)
  620. }
  621. }
  622. result.List = append(result.List, items)
  623. } else {
  624. nextYear := thisYear + 1
  625. nextYearCjnl := strconv.Itoa(nextYear) + "-01-01" //当前年份春节农历
  626. nextYearCjgl := solarlunar.LunarToSolar(nextYearCjnl, false) //当前年份春节公历
  627. nextYearCjglDate, err := time.Parse(utils.FormatDate, nextYearCjgl)
  628. if err != nil {
  629. errMsg = "生成当前春节失败,Err:" + err.Error()
  630. return result, err
  631. }
  632. preYear := vy
  633. preYearCjnl := strconv.Itoa(preYear) + "-01-01" //之前年份春节农历
  634. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  635. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  636. if err != nil {
  637. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  638. return result, err
  639. }
  640. day := nextYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  641. fmt.Println("day:", day, nextYearCjglDate, preYearCjglDate)
  642. items := new(EdbDataItems)
  643. items.Year = preYear - 1
  644. fmt.Println("preYear:", preYear, "ky:", ky, "yearArrLen:", len(yearArr))
  645. if ky+1 < len(yearArr) {
  646. for _, v := range dataList {
  647. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  648. if err != nil {
  649. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  650. return result, err
  651. }
  652. newDate := dateTime.AddDate(0, 0, int(day))
  653. selectDateStr := strconv.Itoa(nextYear) + "-05" + "-31"
  654. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  655. if newDate.Before(selectDate) || newDate == selectDate {
  656. timestamp := newDate.UnixNano() / 1e6
  657. item := new(EdbDataList)
  658. item.DataTime = newDate.Format(utils.FormatDate)
  659. item.EdbInfoId = v.EdbInfoId
  660. item.Value = v.Value
  661. item.EdbDataId = v.EdbDataId
  662. item.DataTimestamp = timestamp
  663. items.Items = append(items.Items, item)
  664. }
  665. }
  666. result.List = append(result.List, items)
  667. } else {
  668. for _, v := range dataList {
  669. dateTime, err := time.Parse(utils.FormatDate, v.DataTime)
  670. if err != nil {
  671. errMsg = "time.Parse Err:" + err.Error() + ";DataTime:" + v.DataTime
  672. return result, err
  673. }
  674. timestamp := dateTime.UnixNano() / 1e6
  675. item := new(EdbDataList)
  676. item.DataTime = dateTime.Format(utils.FormatDate)
  677. item.EdbInfoId = v.EdbInfoId
  678. item.Value = v.Value
  679. item.EdbDataId = v.EdbDataId
  680. item.DataTimestamp = timestamp
  681. items.Items = append(items.Items, item)
  682. }
  683. result.List = append(result.List, items)
  684. }
  685. }
  686. }
  687. return
  688. }
  689. type HzTestEdbdataResult struct {
  690. List []*HzTestEdbdataItems
  691. }
  692. type HzTestEdbdataItems struct {
  693. Items []*HzTestEdbdata
  694. }
  695. type HzTestEdbdata struct {
  696. TtradeCode string `orm:"column(TRADE_CODE)"`
  697. Dt time.Time `orm:"column(DT)"`
  698. Close float64 `orm:"column(CLOSE)"`
  699. ModifyTime time.Time `orm:"column(modify_time)"`
  700. DataTimestamp int64
  701. }
  702. func GetHzTestEdbdata() (list []*HzTestEdbdata, err error) {
  703. //o := orm.NewOrm()
  704. sql := ` SELECT * FROM hz_test_edbdata WHERE TRADE_CODE=? ORDER BY DT DESC `
  705. //_, err = o.Raw(sql, "ST_0000577845").QueryRows(&list)
  706. err = global.DEFAULT_DB.Raw(sql, "ST_0000577845").Find(&list).Error
  707. return
  708. }
  709. type EdbDataItems struct {
  710. Items []*EdbDataList
  711. Year int
  712. BetweenDay int `json:"-" description:"公历与农历之间相差的天数"`
  713. CuttingDataTimestamp int64 `description:"切割的时间戳"`
  714. }
  715. type EdbDataResult struct {
  716. List []*EdbDataItems
  717. }
  718. func AddCalculateQuarterV5(dataList []*EdbDataList) (result *EdbDataResult, err error) {
  719. var errMsg string
  720. defer func() {
  721. if errMsg != "" {
  722. fmt.Println("errMsg:", errMsg)
  723. }
  724. }()
  725. result = new(EdbDataResult)
  726. thisYear := time.Now().Year()
  727. endDate := dataList[len(dataList)-1].DataTime
  728. endDateForm, err := time.Parse(utils.FormatDate, endDate)
  729. if err != nil {
  730. return result, err
  731. }
  732. thisMonth := int(endDateForm.Month())
  733. fmt.Println(thisMonth)
  734. for i := 4; i > 0; i-- {
  735. if thisMonth < 11 {
  736. nextYear := thisYear
  737. nextYearCjnl := strconv.Itoa(nextYear) + "-01-01" //当前年份春节农历
  738. nextYearCjgl := solarlunar.LunarToSolar(nextYearCjnl, false) //当前年份春节公历
  739. nextYearCjglDate, err := time.Parse(utils.FormatDate, nextYearCjgl)
  740. if err != nil {
  741. errMsg = "生成当前春节失败,Err:" + err.Error()
  742. return result, err
  743. }
  744. preYearCjnl := strconv.Itoa(nextYear-i) + "-01-01" //之前年份春节农历
  745. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  746. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  747. if err != nil {
  748. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  749. return result, err
  750. }
  751. day := nextYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  752. items := new(EdbDataItems)
  753. for _, v := range dataList {
  754. dataDate := v.DataTime
  755. dataDateForm, err := time.Parse(utils.FormatDate, dataDate)
  756. if err != nil {
  757. return result, err
  758. }
  759. newDate := dataDateForm.AddDate(0, 0, int(day))
  760. selectDateStr := strconv.Itoa(nextYear) + "-11" + "-30"
  761. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  762. if newDate.Before(selectDate) {
  763. timestamp := newDate.UnixNano() / 1e6
  764. item := new(EdbDataList)
  765. item.DataTime = newDate.Format(utils.FormatDate)
  766. item.EdbInfoId = v.EdbInfoId
  767. item.Value = v.Value
  768. item.EdbDataId = v.EdbDataId
  769. item.DataTimestamp = timestamp
  770. items.Items = append(items.Items, item)
  771. }
  772. }
  773. fmt.Println(nextYear, "年春节阳历", nextYearCjgl)
  774. fmt.Println(i, "年前春节", preYearCjnl)
  775. fmt.Println(i, "年前春节阳历", preYearCjgl)
  776. fmt.Println("与", nextYear, "年春节相差天数", day, "____________")
  777. result.List = append(result.List, items)
  778. } else {
  779. nextYear := thisYear + 1
  780. nextYearCjnl := strconv.Itoa(nextYear) + "-01-01" //当前年份春节农历
  781. nextYearCjgl := solarlunar.LunarToSolar(nextYearCjnl, false) //当前年份春节公历
  782. nextYearCjglDate, err := time.Parse(utils.FormatDate, nextYearCjgl)
  783. if err != nil {
  784. errMsg = "生成当前春节失败,Err:" + err.Error()
  785. return result, err
  786. }
  787. preYearCjnl := strconv.Itoa(nextYear-i) + "-01-01" //之前年份春节农历
  788. preYearCjgl := solarlunar.LunarToSolar(preYearCjnl, false) //之前年份春节公历
  789. preYearCjglDate, err := time.Parse(utils.FormatDate, preYearCjgl)
  790. if err != nil {
  791. errMsg = "生成历史年份春节失败,Err:" + err.Error()
  792. return result, err
  793. }
  794. day := nextYearCjglDate.Sub(preYearCjglDate).Hours() / float64(24)
  795. items := new(EdbDataItems)
  796. for _, v := range dataList {
  797. dataDate := v.DataTime
  798. dataDateForm, err := time.Parse(utils.FormatDate, dataDate)
  799. if err != nil {
  800. return result, err
  801. }
  802. newDate := dataDateForm.AddDate(0, 0, int(day))
  803. selectDateStr := strconv.Itoa(nextYear) + "-05" + "-31"
  804. selectDate, _ := time.Parse(utils.FormatDate, selectDateStr)
  805. if newDate.Before(selectDate) {
  806. timestamp := newDate.UnixNano() / 1e6
  807. item := new(EdbDataList)
  808. item.DataTime = newDate.Format(utils.FormatDate)
  809. item.EdbInfoId = v.EdbInfoId
  810. item.Value = v.Value
  811. item.EdbDataId = v.EdbDataId
  812. item.DataTimestamp = timestamp
  813. items.Items = append(items.Items, item)
  814. }
  815. }
  816. fmt.Println(nextYear, "年春节阳历", nextYearCjgl)
  817. fmt.Println(i, "年前春节", preYearCjnl)
  818. fmt.Println(i, "年前春节阳历", preYearCjgl)
  819. fmt.Println("与", nextYear, "年春节相差天数", day, "____________")
  820. result.List = append(result.List, items)
  821. }
  822. }
  823. //合并第五组数据
  824. items := new(EdbDataItems)
  825. for _, v := range dataList {
  826. dataDate := v.DataTime
  827. dataDateForm, err := time.Parse(utils.FormatDate, dataDate)
  828. if err != nil {
  829. return result, err
  830. }
  831. timestamp := dataDateForm.UnixNano() / 1e6
  832. item := new(EdbDataList)
  833. item.DataTime = v.DataTime
  834. item.EdbInfoId = v.EdbInfoId
  835. item.Value = v.Value
  836. item.EdbDataId = v.EdbDataId
  837. item.DataTimestamp = timestamp
  838. items.Items = append(items.Items, item)
  839. }
  840. result.List = append(result.List, items)
  841. return
  842. }