chart_info.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645
  1. package chart
  2. import (
  3. "fmt"
  4. "hongze/hongze_yb/global"
  5. chartEdbMappingModel "hongze/hongze_yb/models/tables/chart_edb_mapping"
  6. chartInfoModel "hongze/hongze_yb/models/tables/chart_info"
  7. company2 "hongze/hongze_yb/models/tables/company"
  8. edbDataModel "hongze/hongze_yb/models/tables/edb_data"
  9. edbInfoModel "hongze/hongze_yb/models/tables/edb_info"
  10. "hongze/hongze_yb/models/tables/my_chart_classify"
  11. "hongze/hongze_yb/models/tables/yb_chart_daily_visit_log"
  12. "hongze/hongze_yb/models/tables/yb_chart_visit_log"
  13. "hongze/hongze_yb/services/user"
  14. "hongze/hongze_yb/utils"
  15. "sort"
  16. "strconv"
  17. "strings"
  18. "time"
  19. )
  20. // ModifyChartInfoAndMapping 修改图表信息
  21. func ModifyChartInfoAndMapping(edbInfoIdStr string, req *chartInfoModel.SaveChartInfoReq, chartType int) (err error) {
  22. // 开启事务
  23. tx := global.MYSQL["data"].Begin()
  24. defer func() {
  25. if err != nil {
  26. tx.Rollback()
  27. } else {
  28. tx.Commit()
  29. }
  30. }()
  31. // 更新图表信息
  32. if chartType == 1 {
  33. sql := ` UPDATE chart_info
  34. SET
  35. edb_info_ids = ?,
  36. modify_time = NOW(),
  37. date_type = ?,
  38. start_date = ?,
  39. end_date = ?,
  40. left_min = ?,
  41. left_max = ?,
  42. right_min = ?,
  43. right_max = ?
  44. WHERE chart_info_id = ?`
  45. err = tx.Exec(sql, edbInfoIdStr, req.DateType, req.StartDate, req.EndDate, req.LeftMin, req.LeftMax, req.RightMin, req.RightMax, req.ChartInfoId).Error
  46. } else {
  47. sql := ` UPDATE chart_info
  48. SET
  49. edb_info_ids = ?,
  50. modify_time = NOW(),
  51. calendar = ?,
  52. season_start_date = ?,
  53. season_end_date = ?,
  54. left_min = ?,
  55. left_max = ?,
  56. right_min = ?,
  57. right_max = ?
  58. WHERE chart_info_id = ?`
  59. err = tx.Exec(sql, edbInfoIdStr, req.Calendar, req.SeasonStartDate, req.SeasonEndDate, req.LeftMin, req.LeftMax, req.RightMin, req.RightMax, req.ChartInfoId).Error
  60. }
  61. if err != nil {
  62. fmt.Println("UPDATE chart_info Err:", err.Error())
  63. return
  64. }
  65. var edbInfoIdArr []string
  66. mapList := make([]*chartEdbMappingModel.ChartEdbMapping, 0)
  67. for _, v := range req.ChartEdbInfoList {
  68. edbInfoIdArr = append(edbInfoIdArr, strconv.Itoa(v.EdbInfoId))
  69. var count int
  70. csql := ` SELECT COUNT(1) AS count FROM chart_edb_mapping WHERE chart_info_id = ? AND edb_info_id = ? `
  71. err = tx.Raw(csql, req.ChartInfoId, v.EdbInfoId).Scan(&count).Error
  72. if err != nil {
  73. fmt.Println("QueryRow Err:", err.Error())
  74. return err
  75. }
  76. if count > 0 {
  77. // 更新指标
  78. msql := `UPDATE chart_edb_mapping
  79. SET
  80. modify_time = NOW(),
  81. max_data = ?,
  82. min_data = ?,
  83. is_order = ?,
  84. is_axis = ?,
  85. edb_info_type = ?,
  86. lead_value = ?,
  87. lead_unit = ?,
  88. chart_style = ?,
  89. chart_color = ?,
  90. chart_width = ?
  91. WHERE chart_info_id =? AND edb_info_id=? `
  92. err = tx.Exec(msql, v.MaxData, v.MinData, v.IsOrder, v.IsAxis, v.EdbInfoType, v.LeadValue, v.LeadUnit, v.ChartStyle, v.ChartColor, v.ChartWidth, req.ChartInfoId, v.EdbInfoId).Error
  93. if err != nil {
  94. fmt.Println("chart_edb_mapping Err:" + err.Error())
  95. return err
  96. }
  97. } else {
  98. mapItem := new(chartEdbMappingModel.ChartEdbMapping)
  99. mapItem.ChartInfoId = req.ChartInfoId
  100. mapItem.EdbInfoId = v.EdbInfoId
  101. mapItem.CreateTime = time.Now()
  102. mapItem.ModifyTime = time.Now()
  103. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  104. mapItem.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + timestamp)
  105. mapItem.MaxData = v.MaxData
  106. mapItem.MinData = v.MinData
  107. mapItem.IsOrder = 0
  108. if v.IsOrder {
  109. mapItem.IsOrder = 1
  110. }
  111. mapItem.IsAxis = v.IsAxis
  112. mapItem.EdbInfoType = v.EdbInfoType
  113. mapItem.LeadValue = v.LeadValue
  114. mapItem.LeadUnit = v.LeadUnit
  115. mapItem.ChartStyle = v.ChartStyle
  116. mapItem.ChartColor = v.ChartColor
  117. mapItem.ChartWidth = v.ChartWidth
  118. mapList = append(mapList, mapItem)
  119. }
  120. }
  121. // 批量新增指标
  122. if len(mapList) > 0 {
  123. err = tx.Create(mapList).Error
  124. if err != nil {
  125. fmt.Println("AddChartEdbMapping Err:" + err.Error())
  126. return err
  127. }
  128. }
  129. // 清除原图表指标
  130. if len(edbInfoIdArr) > 0 {
  131. edbInfoIdStr := strings.Join(edbInfoIdArr, ",")
  132. if edbInfoIdStr != "" {
  133. dsql := `DELETE FROM chart_edb_mapping WHERE chart_info_id=? AND edb_info_id NOT IN(` + edbInfoIdStr + `)`
  134. err = tx.Exec(dsql, req.ChartInfoId).Error
  135. if err != nil {
  136. fmt.Println("delete err:" + err.Error())
  137. return err
  138. }
  139. }
  140. }
  141. return
  142. }
  143. // RefreshChartInfo 刷新图表
  144. func RefreshChartInfo(chartInfoId int) (err error) {
  145. var errMsg string
  146. defer func() {
  147. if err != nil {
  148. //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "ChartInfoRefresh:"+errMsg, utils.EmailSendToUsers)
  149. fmt.Println("ChartInfoRefresh Err:" + errMsg)
  150. }
  151. }()
  152. // 获取需要刷新的指标
  153. baseEdbInfoArr, calculateInfoArr, err := GetChartInfoRefreshData(chartInfoId)
  154. if err != nil {
  155. errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
  156. return
  157. }
  158. newBaseEdbInfoArr := make([]*edbInfoModel.EdbInfo, 0)
  159. baseMap := make(map[int]*edbInfoModel.EdbInfo)
  160. for _, bv := range baseEdbInfoArr {
  161. if _, ok := baseMap[bv.EdbInfoId]; !ok {
  162. newBaseEdbInfoArr = append(newBaseEdbInfoArr, bv)
  163. }
  164. baseMap[bv.EdbInfoId] = bv
  165. }
  166. fmt.Println("calculateInfoArr:", len(calculateInfoArr))
  167. newCalculateInfoArr := make([]*edbInfoModel.EdbInfo, 0)
  168. calculateMap := make(map[int]*edbInfoModel.EdbInfo)
  169. var calculateArr []int
  170. for _, bv := range calculateInfoArr {
  171. if _, ok := calculateMap[bv.EdbInfoId]; !ok {
  172. newCalculateInfoArr = append(newCalculateInfoArr, bv)
  173. calculateArr = append(calculateArr, bv.EdbInfoId)
  174. }
  175. calculateMap[bv.EdbInfoId] = bv
  176. }
  177. sort.Ints(calculateArr)
  178. var startDate string
  179. for _, bv := range newBaseEdbInfoArr {
  180. source := bv.Source
  181. edbInfoId := bv.EdbInfoId
  182. edbCode := bv.EdbCode
  183. startDate = bv.StartDate.Format(utils.FormatDate)
  184. sTime, err := time.Parse(utils.FormatDate, bv.EndDate.Format(utils.FormatDate))
  185. if err != nil {
  186. return err
  187. }
  188. startDate = sTime.Format(utils.FormatDate)
  189. fmt.Println("source:", source)
  190. if source == utils.DATA_SOURCE_THS {
  191. endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
  192. fmt.Println("DO:RefreshEdbDataByThs")
  193. err = RefreshEdbDataByThs(edbInfoId, edbCode, startDate, endDate)
  194. if err != nil {
  195. errMsg = "RefreshEdbDataByThs Err:" + err.Error()
  196. }
  197. } else if source == utils.DATA_SOURCE_WIND {
  198. endDate := time.Now().Format(utils.FormatDate)
  199. fmt.Println("DO:RefreshEdbDataByWind")
  200. err = RefreshEdbDataByWind(edbInfoId, edbCode, startDate, endDate)
  201. if err != nil {
  202. errMsg = "RefreshEdbDataByWind Err:" + err.Error()
  203. }
  204. } else if source == utils.DATA_SOURCE_PB {
  205. startDate := sTime.Format(utils.FormatDateUnSpace)
  206. endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDateUnSpace)
  207. fmt.Println("DO:RefreshEdbDataByPb")
  208. err = RefreshEdbDataByPb(edbInfoId, edbCode, startDate, endDate)
  209. if err != nil {
  210. errMsg = "RefreshEdbDataByPb Err:" + err.Error()
  211. }
  212. } else if source == utils.DATA_SOURCE_MANUAL {
  213. fmt.Println("DO:RefreshAllEdbDataByManual:" + edbCode)
  214. err = RefreshAllEdbDataByManual(edbInfoId, bv.Source, edbCode)
  215. if err != nil {
  216. errMsg = "RefreshEdbDataByManual Err:" + err.Error()
  217. }
  218. } else if source == utils.DATA_SOURCE_LZ {
  219. endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
  220. fmt.Println("DO:RefreshEdbDataByLz")
  221. err = RefreshEdbDataByLz(edbInfoId, edbCode, startDate, endDate)
  222. if err != nil {
  223. errMsg = "RefreshEdbDataByLz Err:" + err.Error()
  224. }
  225. } else if source == utils.DATA_SOURCE_YS {
  226. endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
  227. fmt.Println("DO:RefreshAllEdbDataByYs")
  228. err = RefreshAllEdbDataByYs(edbInfoId, source, edbCode, startDate, endDate)
  229. if err != nil {
  230. errMsg = "RefreshEdbDataByYs Err:" + err.Error()
  231. }
  232. } else if source == utils.DATA_SOURCE_GL {
  233. endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
  234. fmt.Println("DO:RefreshEdbDataByGl")
  235. err = RefreshEdbDataByGl(edbInfoId, edbCode, startDate, endDate)
  236. if err != nil {
  237. errMsg = "RefreshEdbDataByGl Err:" + err.Error()
  238. }
  239. } else if source == utils.DATA_SOURCE_LT {
  240. endDate := time.Now().Format(utils.FormatDate)
  241. fmt.Println("DO:RefreshAllEdbDataByLt")
  242. err = RefreshAllEdbDataByLt(edbInfoId, source, edbCode, startDate, endDate)
  243. if err != nil {
  244. errMsg = "RefreshAllEdbDataByLT Err:" + err.Error()
  245. }
  246. } else if source == utils.DATA_SOURCE_ZZ {
  247. endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
  248. fmt.Println("DO:RefreshEdbDataByZz")
  249. err = RefreshEdbDataByZz(edbInfoId, edbCode, startDate, endDate)
  250. if err != nil {
  251. errMsg = "RefreshAllEdbDataByZz Err:" + err.Error()
  252. }
  253. } else if source == utils.DATA_SOURCE_DL {
  254. endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
  255. fmt.Println("DO:RefreshEdbDataByDl")
  256. err = RefreshEdbDataByDl(edbInfoId, edbCode, startDate, endDate)
  257. if err != nil {
  258. errMsg = "RefreshAllEdbDataByDl Err:" + err.Error()
  259. }
  260. } else if source == utils.DATA_SOURCE_SH {
  261. endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
  262. fmt.Println("DO:RefreshEdbDataBySh")
  263. err = RefreshEdbDataBySh(edbInfoId, edbCode, startDate, endDate)
  264. if err != nil {
  265. errMsg = "RefreshAllEdbDataBySh Err:" + err.Error()
  266. }
  267. } else if source == utils.DATA_SOURCE_CFFEX {
  268. endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
  269. fmt.Println("DO:RefreshEdbDataByCffex")
  270. err = RefreshEdbDataByCffex(edbInfoId, edbCode, startDate, endDate)
  271. if err != nil {
  272. errMsg = "RefreshAllEdbDataByCffex Err:" + err.Error()
  273. }
  274. } else if source == utils.DATA_SOURCE_SHFE {
  275. endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
  276. fmt.Println("DO:RefreshEdbDataByShfe")
  277. err = RefreshEdbDataByShfe(edbInfoId, edbCode, startDate, endDate)
  278. if err != nil {
  279. errMsg = "RefreshAllEdbDataByShfe Err:" + err.Error()
  280. }
  281. } else if source == utils.DATA_SOURCE_GIE {
  282. endDate := time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDate)
  283. fmt.Println("DO:RefreshEdbDataByGie")
  284. err = RefreshEdbDataByGie(edbInfoId, edbCode, startDate, endDate)
  285. if err != nil {
  286. errMsg = "RefreshEdbDataByGie Err:" + err.Error()
  287. }
  288. }
  289. maxAndMinItem, err := edbDataModel.GetEdbInfoMaxAndMinInfo(source, edbCode)
  290. if err != nil {
  291. return err
  292. }
  293. if maxAndMinItem != nil {
  294. err = edbDataModel.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
  295. if err != nil {
  296. return err
  297. }
  298. }
  299. }
  300. endDate := "" //计算指标不限制日期
  301. //刷新相关计算指标
  302. for _, v := range calculateArr {
  303. edbInfo := calculateMap[v]
  304. if edbInfo == nil {
  305. return err
  306. }
  307. edbInfoId := edbInfo.EdbInfoId
  308. source := edbInfo.Source
  309. edbCode := edbInfo.EdbCode
  310. if source == utils.DATA_SOURCE_CALCULATE {
  311. startDate = edbInfo.StartDate.Format(utils.FormatDate)
  312. sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate.Format(utils.FormatDate))
  313. if err != nil {
  314. return err
  315. }
  316. startDate = sTime.Format(utils.FormatDate)
  317. var edbInfoIdBytes []string
  318. calculateMap, err := edbDataModel.GetEdbInfoCalculateDetail(edbInfoId, edbInfo.Source)
  319. if err != nil {
  320. errMsg = "GetEdbInfoCalculateDetail Err:" + err.Error()
  321. return err
  322. }
  323. var formulaStr string
  324. edbInfoList := make([]*edbInfoModel.EdbInfo, 0)
  325. for _, v := range calculateMap {
  326. formulaStr += v.FromTag + ","
  327. edbInfoIdBytes = append(edbInfoIdBytes, v.FromTag)
  328. edbInfo, _ := edbInfoModel.GetEdbInfoById(v.FromEdbInfoId)
  329. edbInfoList = append(edbInfoList, edbInfo)
  330. }
  331. fmt.Println("DO:RefreshAllCalculate")
  332. err = RefreshAllCalculate(edbInfoList, int(edbInfoId), source, edbInfo.EdbCode, edbInfo.CalculateFormula, startDate, endDate, edbInfoIdBytes)
  333. if err != nil {
  334. errMsg = "RefreshCalculate Err:" + err.Error()
  335. return err
  336. }
  337. } else if source == utils.DATA_SOURCE_CALCULATE_LJZZY { //刷新累计值转月值
  338. fmt.Println("DO:GetEdbInfoCalculateLjzzyDetail")
  339. calculateLjzzy, err := edbDataModel.GetEdbInfoCalculateLjzzyDetail(edbInfoId)
  340. if err != nil {
  341. errMsg = "GetEdbInfoCalculateLjzzyDetail Err:" + err.Error()
  342. return err
  343. }
  344. fromEdbInfo, err := edbInfoModel.GetEdbInfoById(calculateLjzzy.FromEdbInfoId)
  345. if err != nil {
  346. errMsg = "GetEdbInfoById Err:" + err.Error()
  347. return err
  348. }
  349. startDate = edbInfo.StartDate.Format(utils.FormatDate)
  350. endDate = time.Now().Format(utils.FormatDate)
  351. fmt.Println("DO:RefreshAllCalculateLjzzy")
  352. err = RefreshAllCalculateLjzzy(edbInfoId, source, fromEdbInfo, calculateLjzzy.EdbCode, startDate, endDate)
  353. if err != nil {
  354. errMsg = "RefreshAllCalculateLjzzy Err:" + err.Error()
  355. return err
  356. }
  357. } else if source == utils.DATA_SOURCE_CALCULATE_TBZ { //刷新同比值
  358. calculateTbz, err := edbDataModel.GetEdbInfoCalculateTbzDetail(edbInfoId)
  359. if err != nil {
  360. errMsg = "GetEdbInfoCalculateTbzDetail Err:" + err.Error()
  361. return err
  362. }
  363. fromEdbInfo, err := edbInfoModel.GetEdbInfoById(calculateTbz.FromEdbInfoId)
  364. if err != nil {
  365. errMsg = "GetEdbInfoById Err:" + err.Error()
  366. return err
  367. }
  368. startDate = edbInfo.StartDate.Format(utils.FormatDate)
  369. endDate = time.Now().Format(utils.FormatDate)
  370. fmt.Println("DO:RefreshAllCalculateTbz")
  371. err = RefreshAllCalculateTbz(edbInfoId, source, fromEdbInfo, calculateTbz.EdbCode, startDate, endDate)
  372. if err != nil {
  373. errMsg = "RefreshAllCalculateTbz Err:" + err.Error()
  374. return err
  375. }
  376. } else if source == utils.DATA_SOURCE_CALCULATE_TCZ { //同差值
  377. calculateTcz, err := edbDataModel.GetEdbInfoCalculateTczDetail(edbInfoId)
  378. if err != nil {
  379. errMsg = "GetEdbInfoCalculateTczDetail Err:" + err.Error()
  380. return err
  381. }
  382. fromEdbInfo, err := edbInfoModel.GetEdbInfoById(calculateTcz.FromEdbInfoId)
  383. if err != nil {
  384. errMsg = "GetEdbInfoById Err:" + err.Error()
  385. return err
  386. }
  387. startDate = edbInfo.StartDate.Format(utils.FormatDate)
  388. endDate = time.Now().Format(utils.FormatDate)
  389. fmt.Println("DO:RefreshAllCalculateTcz")
  390. err = RefreshAllCalculateTcz(edbInfoId, source, fromEdbInfo, calculateTcz.EdbCode, startDate, endDate)
  391. if err != nil {
  392. errMsg = "RefreshCalculateTcz Err:" + err.Error()
  393. return err
  394. }
  395. } else if source == utils.DATA_SOURCE_CALCULATE_NSZYDPJJS { //N数值移动平均计算
  396. calculateNszydpjjs, err := edbDataModel.GetEdbInfoCalculateNszydpjjsDetail(edbInfoId)
  397. if err != nil {
  398. errMsg = "GetEdbInfoCalculateNszydpjjsDetail Err:" + err.Error()
  399. return err
  400. }
  401. fromEdbInfo, err := edbInfoModel.GetEdbInfoById(calculateNszydpjjs.FromEdbInfoId)
  402. if err != nil {
  403. errMsg = "GetEdbInfoById Err:" + err.Error()
  404. return err
  405. }
  406. formulaInt, _ := strconv.Atoi(edbInfo.CalculateFormula)
  407. startDate = edbInfo.StartDate.Format(utils.FormatDate)
  408. fmt.Println("DO:RefreshAllCalculateNszydpjjs")
  409. err = RefreshAllCalculateNszydpjjs(edbInfoId, edbInfo.Source, formulaInt, fromEdbInfo, calculateNszydpjjs.EdbCode, startDate)
  410. if err != nil {
  411. errMsg = "RefreshCalculateNszydpjjs Err:" + err.Error()
  412. return err
  413. }
  414. } else if source == utils.DATA_SOURCE_CALCULATE_HBZ { //刷新环比值
  415. calculateTbz, err := edbDataModel.GetEdbInfoCalculateHbzDetail(edbInfoId)
  416. if err != nil {
  417. errMsg = "GetEdbInfoCalculateHbzDetail Err:" + err.Error()
  418. return err
  419. }
  420. fromEdbInfo, err := edbInfoModel.GetEdbInfoById(calculateTbz.FromEdbInfoId)
  421. if err != nil {
  422. errMsg = "GetEdbInfoById Err:" + err.Error()
  423. return err
  424. }
  425. startDate = edbInfo.StartDate.Format(utils.FormatDate)
  426. endDate = time.Now().Format(utils.FormatDate)
  427. formulaInt, _ := strconv.Atoi(edbInfo.CalculateFormula)
  428. fmt.Println("DO:RefreshAllCalculateHbz")
  429. err = RefreshAllCalculateHbz(edbInfoId, source, fromEdbInfo, calculateTbz.EdbCode, startDate, endDate, formulaInt)
  430. if err != nil {
  431. errMsg = "RefreshAllCalculateHbz Err:" + err.Error()
  432. return err
  433. }
  434. } else if source == utils.DATA_SOURCE_CALCULATE_HCZ { //刷新环差值
  435. calculateTbz, err := edbDataModel.GetEdbInfoCalculateHczDetail(edbInfoId)
  436. if err != nil {
  437. errMsg = "GetEdbInfoCalculateHczDetail Err:" + err.Error()
  438. return err
  439. }
  440. fromEdbInfo, err := edbInfoModel.GetEdbInfoById(calculateTbz.FromEdbInfoId)
  441. if err != nil {
  442. errMsg = "GetEdbInfoById Err:" + err.Error()
  443. return err
  444. }
  445. startDate = edbInfo.StartDate.Format(utils.FormatDate)
  446. endDate = time.Now().Format(utils.FormatDate)
  447. formulaInt, _ := strconv.Atoi(edbInfo.CalculateFormula)
  448. fmt.Println("DO:RefreshAllCalculateHcz")
  449. err = RefreshAllCalculateHcz(edbInfoId, source, fromEdbInfo, calculateTbz.EdbCode, startDate, endDate, formulaInt)
  450. if err != nil {
  451. errMsg = "RefreshAllCalculateHcz Err:" + err.Error()
  452. return err
  453. }
  454. } else if source == utils.DATA_SOURCE_CALCULATE_BP { //刷新变频
  455. calculateTbz, err := edbDataModel.GetEdbInfoCalculateBpDetail(edbInfoId)
  456. if err != nil {
  457. errMsg = "GetEdbInfoCalculateTbzDetail Err:" + err.Error()
  458. return err
  459. }
  460. fromEdbInfo, err := edbInfoModel.GetEdbInfoById(calculateTbz.FromEdbInfoId)
  461. if err != nil {
  462. errMsg = "GetEdbInfoById Err:" + err.Error()
  463. return err
  464. }
  465. startDate = edbInfo.StartDate.Format(utils.FormatDate)
  466. endDate = time.Now().Format(utils.FormatDate)
  467. fmt.Println("DO:RefreshAllCalculateBp")
  468. err = RefreshAllCalculateBp(edbInfoId, source, fromEdbInfo, calculateTbz.EdbCode, startDate, endDate)
  469. if err != nil {
  470. errMsg = "RefreshAllCalculateBp Err:" + err.Error()
  471. return err
  472. }
  473. } else if source == utils.DATA_SOURCE_CALCULATE_ZJPJ { //刷新直接拼接数据
  474. fmt.Println("DO:RefreshAllCalculateZjpj")
  475. err = RefreshAllCalculateZjpj(edbInfo)
  476. if err != nil {
  477. errMsg = "RefreshAllCalculateZjpj Err:" + err.Error()
  478. return err
  479. }
  480. } else if source == utils.DATA_SOURCE_CALCULATE_LJZTBPJ { //刷新累计值同比拼接数据
  481. fmt.Println("DO:RefreshAllCalculateLjztbpj")
  482. err = RefreshAllCalculateLjztbpj(edbInfo)
  483. if err != nil {
  484. errMsg = "RefreshAllCalculateLjztbpj Err:" + err.Error()
  485. return err
  486. }
  487. }
  488. maxAndMinItem, err := edbDataModel.GetEdbInfoMaxAndMinInfo(source, edbCode)
  489. if err != nil {
  490. return err
  491. }
  492. if maxAndMinItem != nil {
  493. err = edbDataModel.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
  494. if err != nil {
  495. return err
  496. }
  497. }
  498. fmt.Println("end calculateArr:", v, time.Now())
  499. }
  500. return
  501. }
  502. // GetChartInfoRefreshData 获取需要刷新的指标
  503. func GetChartInfoRefreshData(chartInfoId int) (baseEdbInfoArr, calculateInfoArr []*edbInfoModel.EdbInfo, err error) {
  504. sql := ` SELECT b.* FROM chart_edb_mapping AS a
  505. INNER JOIN edb_info AS b ON a.edb_info_id=b.edb_info_id
  506. WHERE a.chart_info_id=? `
  507. edbInfoList := make([]*edbInfoModel.EdbInfo, 0)
  508. err = global.MYSQL["data"].Raw(sql, chartInfoId).Scan(&edbInfoList).Error
  509. if err != nil {
  510. return
  511. }
  512. for _, v := range edbInfoList {
  513. fmt.Println(v.EdbInfoId, v.EdbType)
  514. if v.EdbType == 1 {
  515. baseEdbInfoArr = append(baseEdbInfoArr, v)
  516. } else {
  517. calculateInfoArr = append(calculateInfoArr, v)
  518. newBaseEdbInfoArr, newCalculateInfoArr, err := GetChartRefreshEdbInfo(v.EdbInfoId, v.Source, 0)
  519. if err != nil {
  520. return baseEdbInfoArr, calculateInfoArr, err
  521. }
  522. baseEdbInfoArr = append(baseEdbInfoArr, newBaseEdbInfoArr...)
  523. calculateInfoArr = append(calculateInfoArr, newCalculateInfoArr...)
  524. }
  525. }
  526. return
  527. }
  528. // GetChartRefreshEdbInfo
  529. func GetChartRefreshEdbInfo(edbInfoId, source, n int) (baseEdbInfoArr, calculateInfoArr []*edbInfoModel.EdbInfo, err error) {
  530. calculateList, err := GetEdbInfoCalculateMap(edbInfoId, source)
  531. if err != nil && err != utils.ErrNoRow {
  532. return
  533. }
  534. n++
  535. for _, item := range calculateList {
  536. fmt.Println(item.EdbInfoId)
  537. if item.EdbType == 1 {
  538. baseEdbInfoArr = append(baseEdbInfoArr, item)
  539. } else {
  540. calculateInfoArr = append(calculateInfoArr, item)
  541. if n > 10 {
  542. return
  543. }
  544. newBaseEdbInfoArr, newCalculateInfoArr, _ := GetChartRefreshEdbInfo(item.EdbInfoId, item.Source, n)
  545. baseEdbInfoArr = append(baseEdbInfoArr, newBaseEdbInfoArr...)
  546. calculateInfoArr = append(calculateInfoArr, newCalculateInfoArr...)
  547. }
  548. }
  549. return
  550. }
  551. func GetEdbInfoCalculateMap(edbInfoId, source int) (list []*edbInfoModel.EdbInfo, err error) {
  552. sql := ` SELECT b.* FROM edb_info_calculate_mapping AS a
  553. INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
  554. WHERE a.edb_info_id=? ORDER BY sort ASC `
  555. err = global.MYSQL["data"].Exec(sql, edbInfoId).Error
  556. return
  557. }
  558. // SaveChartVisitLog 保存图表访问记录
  559. func SaveChartVisitLog(userInfo user.UserInfo, chartInfo *chartInfoModel.ChartInfoView, myChartClassifyId int) (err error) {
  560. userId := int(userInfo.UserID)
  561. companyId := int(userInfo.CompanyID)
  562. chartInfoId := chartInfo.ChartInfoId
  563. // 访问记录
  564. visitLog := new(yb_chart_visit_log.YbChartVisitLog)
  565. visitLog.CompanyId = companyId
  566. companyInfo, err := company2.GetByCompanyId(userInfo.CompanyID)
  567. if err == nil {
  568. visitLog.CompanyName = companyInfo.CompanyName
  569. }
  570. visitLog.UserId = userId
  571. visitLog.RealName = userInfo.RealName
  572. visitLog.Mobile = userInfo.Mobile
  573. visitLog.Email = userInfo.Email
  574. visitLog.ChartInfoId = chartInfoId
  575. visitLog.ChartName = chartInfo.ChartName
  576. visitLog.CreateTime = time.Now().Local()
  577. visitLog.Create()
  578. // 每日访问记录,用户/天/图仅记录一次
  579. if myChartClassifyId > 0 {
  580. // 今日是否已访问
  581. nowTime := time.Now().Local()
  582. startTime := time.Date(nowTime.Year(), nowTime.Month(), nowTime.Day(), 0, 0, 0, 0, time.Local)
  583. endTime := time.Date(nowTime.Year(), nowTime.Month(), nowTime.Day(), 23, 59, 59, 0, time.Local)
  584. _, tmpErr := yb_chart_daily_visit_log.GetTodayVisitLog(userId, chartInfoId, myChartClassifyId, startTime, endTime)
  585. if tmpErr == nil {
  586. return
  587. }
  588. myChartClassify, tmpErr := my_chart_classify.GetClassifyById(myChartClassifyId)
  589. if tmpErr != nil {
  590. return
  591. }
  592. dailyLog := new(yb_chart_daily_visit_log.YbChartDailyVisitLog)
  593. dailyLog.CompanyId = companyId
  594. if companyInfo != nil {
  595. dailyLog.CompanyName = companyInfo.CompanyName
  596. }
  597. dailyLog.UserId = userId
  598. dailyLog.RealName = userInfo.RealName
  599. dailyLog.Mobile = userInfo.Mobile
  600. dailyLog.Email = userInfo.Email
  601. dailyLog.ChartInfoId = chartInfoId
  602. dailyLog.ChartName = chartInfo.ChartName
  603. dailyLog.MyChartClassifyId = myChartClassifyId
  604. dailyLog.MyChartClassifyName = myChartClassify.MyChartClassifyName
  605. dailyLog.CreateTime = time.Now().Local()
  606. dailyLog.Create()
  607. }
  608. return
  609. }