edb_info_calculate_zjpj.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686
  1. package data_manage
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_chart_lib/utils"
  6. "github.com/rdlucklib/rdluck_tools/orm"
  7. "strings"
  8. "time"
  9. )
  10. // AddCalculateZjpj 新增直接拼接数据
  11. func AddCalculateZjpj(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdbInfo *EdbInfo, edbCode, uniqueCode string, sysUserId int, sysUserRealName string) (edbInfoId int, err error) {
  12. fmt.Println("AddCalculateZjpj")
  13. o := orm.NewOrm()
  14. o.Using("data")
  15. o.Begin()
  16. defer func() {
  17. if err != nil {
  18. fmt.Println("AddCalculateZjpj,Err:" + err.Error())
  19. o.Rollback()
  20. } else {
  21. o.Commit()
  22. }
  23. }()
  24. var edbInfo *EdbInfo
  25. if req.EdbInfoId <= 0 {
  26. edbInfo = &EdbInfo{
  27. SourceName: "直接拼接",
  28. Source: utils.DATA_SOURCE_CALCULATE_ZJPJ,
  29. EdbCode: edbCode,
  30. EdbName: req.EdbName,
  31. EdbNameSource: req.EdbName,
  32. Frequency: req.Frequency,
  33. Unit: req.Unit,
  34. StartDate: firstEdbInfo.StartDate,
  35. EndDate: firstEdbInfo.EndDate,
  36. ClassifyId: req.ClassifyId,
  37. SysUserId: sysUserId,
  38. SysUserRealName: sysUserRealName,
  39. UniqueCode: uniqueCode,
  40. CreateTime: time.Now(),
  41. ModifyTime: time.Now(),
  42. CalculateFormula: req.Formula,
  43. EdbType: 2,
  44. }
  45. newEdbInfoId, err := o.Insert(edbInfo)
  46. if err != nil {
  47. return edbInfoId, err
  48. }
  49. edbInfoId = int(newEdbInfoId)
  50. } else {
  51. edbInfoId = req.EdbInfoId
  52. //查询
  53. tmpEdbInfo, tmpErr := GetEdbInfoById(edbInfoId)
  54. if tmpErr != nil {
  55. err = tmpErr
  56. return
  57. }
  58. tmpEdbInfo.EdbName = req.EdbName
  59. tmpEdbInfo.ClassifyId = req.ClassifyId
  60. tmpEdbInfo.Frequency = req.Frequency
  61. tmpEdbInfo.Unit = req.Unit
  62. tmpEdbInfo.CalculateFormula = req.Formula
  63. edbInfo = tmpEdbInfo
  64. //删除指标数据
  65. dataTableName := GetEdbDataTableName(utils.DATA_SOURCE_CALCULATE_ZJPJ)
  66. fmt.Println("dataTableName:" + dataTableName)
  67. deleteSql := ` DELETE FROM %s WHERE edb_info_id=? `
  68. deleteSql = fmt.Sprintf(deleteSql, dataTableName)
  69. _, err = o.Raw(deleteSql, req.EdbInfoId).Exec()
  70. if err != nil {
  71. return 0, err
  72. }
  73. //删除指标关系
  74. sql := ` DELETE FROM edb_info_calculate_mapping WHERE edb_info_id=? `
  75. _, err = o.Raw(sql, edbInfoId).Exec()
  76. }
  77. //关联关系
  78. //第一个指标
  79. {
  80. calculateMappingItem := new(EdbInfoCalculateMapping)
  81. calculateMappingItem.CreateTime = time.Now()
  82. calculateMappingItem.ModifyTime = time.Now()
  83. calculateMappingItem.Sort = 1
  84. calculateMappingItem.EdbCode = edbCode
  85. calculateMappingItem.EdbInfoId = edbInfoId
  86. calculateMappingItem.FromEdbInfoId = firstEdbInfo.EdbInfoId
  87. calculateMappingItem.FromEdbCode = firstEdbInfo.EdbCode
  88. calculateMappingItem.FromEdbName = firstEdbInfo.EdbName
  89. calculateMappingItem.FromSource = firstEdbInfo.Source
  90. calculateMappingItem.FromSourceName = firstEdbInfo.SourceName
  91. calculateMappingItem.FromTag = "A"
  92. calculateMappingItem.Source = edbInfo.Source
  93. calculateMappingItem.SourceName = edbInfo.SourceName
  94. go o.Insert(calculateMappingItem)
  95. }
  96. //第二个指标
  97. {
  98. calculateMappingItem := new(EdbInfoCalculateMapping)
  99. calculateMappingItem.CreateTime = time.Now()
  100. calculateMappingItem.ModifyTime = time.Now()
  101. calculateMappingItem.Sort = 1
  102. calculateMappingItem.EdbCode = edbCode
  103. calculateMappingItem.EdbInfoId = edbInfoId
  104. calculateMappingItem.FromEdbInfoId = secondEdbInfo.EdbInfoId
  105. calculateMappingItem.FromEdbCode = secondEdbInfo.EdbCode
  106. calculateMappingItem.FromEdbName = secondEdbInfo.EdbName
  107. calculateMappingItem.FromSource = secondEdbInfo.Source
  108. calculateMappingItem.FromSourceName = secondEdbInfo.SourceName
  109. calculateMappingItem.FromTag = "B"
  110. calculateMappingItem.Source = edbInfo.Source
  111. calculateMappingItem.SourceName = edbInfo.SourceName
  112. go o.Insert(calculateMappingItem)
  113. }
  114. addDataList := make([]*EdbDataCalculateZjpj, 0)
  115. //拼接数据
  116. //第一个指标
  117. {
  118. var condition string
  119. var pars []interface{}
  120. condition += " AND data_time < ? AND edb_info_id=? "
  121. pars = append(pars, req.Formula, firstEdbInfo.EdbInfoId)
  122. //第一个指标的数据列表
  123. firstDataList, tmpErr := GetEdbDataListAll(condition, pars, firstEdbInfo.Source, 0)
  124. if tmpErr != nil {
  125. return edbInfoId, tmpErr
  126. }
  127. for _, v := range firstDataList {
  128. //时间戳
  129. currentDate, _ := time.Parse(utils.FormatDate, v.DataTime)
  130. timestamp := currentDate.UnixNano() / 1e6
  131. edbDataZjpj := &EdbDataCalculateZjpj{
  132. EdbInfoId: edbInfoId,
  133. EdbCode: edbInfo.EdbCode,
  134. DataTime: v.DataTime,
  135. Value: v.Value,
  136. Status: 1,
  137. CreateTime: time.Now(),
  138. ModifyTime: time.Now(),
  139. DataTimestamp: timestamp,
  140. }
  141. addDataList = append(addDataList, edbDataZjpj)
  142. if len(addDataList) >= 200 {
  143. _, tmpErr := o.InsertMulti(len(addDataList), addDataList)
  144. if tmpErr != nil {
  145. err = tmpErr
  146. return
  147. }
  148. //重新初始化需要加入的数据切片
  149. addDataList = make([]*EdbDataCalculateZjpj, 0)
  150. }
  151. }
  152. }
  153. //第二个指标
  154. {
  155. var condition string
  156. var pars []interface{}
  157. condition += " AND data_time >= ? AND edb_info_id = ? "
  158. pars = append(pars, req.Formula, secondEdbInfo.EdbInfoId)
  159. //第二个指标的数据列表
  160. secondDataList, tmpErr := GetEdbDataListAll(condition, pars, secondEdbInfo.Source, 0)
  161. if tmpErr != nil {
  162. return edbInfoId, tmpErr
  163. }
  164. for _, v := range secondDataList {
  165. //时间戳
  166. currentDate, _ := time.Parse(utils.FormatDate, v.DataTime)
  167. timestamp := currentDate.UnixNano() / 1e6
  168. edbDataZjpj := &EdbDataCalculateZjpj{
  169. EdbInfoId: edbInfoId,
  170. EdbCode: edbInfo.EdbCode,
  171. DataTime: v.DataTime,
  172. Value: v.Value,
  173. Status: 1,
  174. CreateTime: time.Now(),
  175. ModifyTime: time.Now(),
  176. DataTimestamp: timestamp,
  177. }
  178. addDataList = append(addDataList, edbDataZjpj)
  179. if len(addDataList) >= 200 {
  180. _, tmpErr := o.InsertMulti(len(addDataList), addDataList)
  181. if tmpErr != nil {
  182. err = tmpErr
  183. return
  184. }
  185. //重新初始化需要加入的数据切片
  186. addDataList = make([]*EdbDataCalculateZjpj, 0)
  187. }
  188. }
  189. }
  190. //将剩余的数据入库
  191. if len(addDataList) > 0 {
  192. _, tmpErr := o.InsertMulti(len(addDataList), addDataList)
  193. if tmpErr != nil {
  194. err = tmpErr
  195. return
  196. }
  197. }
  198. return
  199. }
  200. // EditCalculateZjpj 编辑直接拼接数据
  201. func EditCalculateZjpj(req *EdbInfoCalculateBatchEditReq, nowEdbInfo, firstEdbInfo, secondEdbInfo *EdbInfo) (edbInfoId int, err error) {
  202. edbInfoId = req.EdbInfoId
  203. o := orm.NewOrm()
  204. o.Using("data")
  205. o.Begin()
  206. defer func() {
  207. if err != nil {
  208. o.Rollback()
  209. } else {
  210. o.Commit()
  211. }
  212. }()
  213. //修改指标信息
  214. sql := ` UPDATE edb_info SET
  215. edb_name =?,
  216. edb_name_source=?,
  217. frequency = ?,
  218. unit = ?,
  219. classify_id = ?,
  220. calculate_formula=?,
  221. modify_time = NOW()
  222. WHERE edb_info_id = ? `
  223. _, err = o.Raw(sql, req.EdbName, req.EdbName, req.Frequency, req.Unit, req.ClassifyId, req.Formula, edbInfoId).Exec()
  224. if err != nil {
  225. return
  226. }
  227. var existCondition string
  228. var existPars []interface{}
  229. existCondition += " AND edb_info_id=? "
  230. existPars = append(existPars, edbInfoId)
  231. //查询出所有的关联指标
  232. existList, err := GetEdbInfoCalculateListByCondition(existCondition, existPars)
  233. if err != nil {
  234. err = errors.New("判断指标是否改变失败,Err:" + err.Error())
  235. return
  236. }
  237. var existItemA, existItemB *EdbInfoCalculateMapping
  238. for _, existItem := range existList {
  239. if existItem.FromTag == "A" {
  240. existItemA = existItem
  241. } else if existItem.FromTag == "B" {
  242. existItemB = existItem
  243. }
  244. }
  245. addDataList := make([]*EdbDataCalculateZjpj, 0)
  246. firstDataList := make([]*EdbInfoSearchData, 0)
  247. secondDataList := make([]*EdbInfoSearchData, 0)
  248. //如果 之前的拼接日期 与 现在的拼接日期 不一致的话,需要做以下处理
  249. nowFormulaDate, _ := time.ParseInLocation(utils.FormatDate, nowEdbInfo.CalculateFormula, time.Local)
  250. reqFormulaDate, _ := time.ParseInLocation(utils.FormatDate, req.Formula, time.Local)
  251. //如果前后选择的日期不一致,那么需要删除一部分数据
  252. if nowEdbInfo.CalculateFormula != req.Formula {
  253. var startDate, endDate time.Time
  254. //如果当前选择的日期 小于 之前选择的日期
  255. if reqFormulaDate.Before(nowFormulaDate) {
  256. startDate = reqFormulaDate
  257. endDate = nowFormulaDate
  258. } else { //如果当前选择的日期 大于 之前选择的日期
  259. startDate = nowFormulaDate
  260. endDate = reqFormulaDate
  261. }
  262. //删除 之前日期 与 当前日期 之间的指标数据
  263. sql = ` DELETE FROM edb_data_calculate_zjpj WHERE edb_info_id = ? and data_time >= ? and data_time < ?`
  264. _, err = o.Raw(sql, edbInfoId, startDate, endDate).Exec()
  265. if err != nil {
  266. err = errors.New("删除 之前日期 与 当前日期 之间的指标数据失败,Err:" + err.Error())
  267. return
  268. }
  269. }
  270. //第一个指标数据
  271. {
  272. var condition string
  273. var pars []interface{}
  274. if existItemA.FromEdbInfoId != firstEdbInfo.EdbInfoId {
  275. //删除之前的A指标关联关系
  276. sql = ` DELETE FROM edb_info_calculate_mapping WHERE edb_info_id = ? and from_edb_info_id = ?`
  277. _, err = o.Raw(sql, edbInfoId, existItemA.FromEdbInfoId).Exec()
  278. if err != nil {
  279. err = errors.New("删除拼接日期之前的指标关联关系失败,Err:" + err.Error())
  280. return
  281. }
  282. //删除之前所有的A指标数据
  283. sql = ` DELETE FROM edb_data_calculate_zjpj WHERE edb_info_id = ? and data_time < ?`
  284. _, err = o.Raw(sql, edbInfoId, req.Formula).Exec()
  285. if err != nil {
  286. err = errors.New("删除拼接日期之前的数据失败,Err:" + err.Error())
  287. return
  288. }
  289. //获取第一个指标的数据列表
  290. condition += " AND data_time < ? AND edb_info_id=? "
  291. pars = append(pars, req.Formula, firstEdbInfo.EdbInfoId)
  292. tmpFirstDataList, tmpErr := GetEdbDataListAll(condition, pars, firstEdbInfo.Source, 0)
  293. if tmpErr != nil {
  294. return edbInfoId, tmpErr
  295. }
  296. firstDataList = tmpFirstDataList
  297. //添加新的指标关系
  298. {
  299. calculateMappingItem := new(EdbInfoCalculateMapping)
  300. calculateMappingItem.CreateTime = time.Now()
  301. calculateMappingItem.ModifyTime = time.Now()
  302. calculateMappingItem.Sort = 1
  303. calculateMappingItem.EdbCode = nowEdbInfo.EdbCode
  304. calculateMappingItem.EdbInfoId = edbInfoId
  305. calculateMappingItem.FromEdbInfoId = firstEdbInfo.EdbInfoId
  306. calculateMappingItem.FromEdbCode = firstEdbInfo.EdbCode
  307. calculateMappingItem.FromEdbName = firstEdbInfo.EdbName
  308. calculateMappingItem.FromSource = firstEdbInfo.Source
  309. calculateMappingItem.FromSourceName = firstEdbInfo.SourceName
  310. calculateMappingItem.FromTag = "A"
  311. calculateMappingItem.Source = nowEdbInfo.Source
  312. calculateMappingItem.SourceName = nowEdbInfo.SourceName
  313. go o.Insert(calculateMappingItem)
  314. }
  315. } else {
  316. if req.Formula != nowEdbInfo.CalculateFormula {
  317. //获取第一个指标的数据列表
  318. condition += " AND data_time >= ? AND data_time < ? AND edb_info_id=? "
  319. pars = append(pars, nowFormulaDate, reqFormulaDate, firstEdbInfo.EdbInfoId)
  320. tmpFirstDataList, tmpErr := GetEdbDataListAll(condition, pars, firstEdbInfo.Source, 0)
  321. if tmpErr != nil {
  322. return edbInfoId, tmpErr
  323. }
  324. firstDataList = tmpFirstDataList
  325. }
  326. }
  327. //待插入数据
  328. for _, v := range firstDataList {
  329. //时间戳
  330. currentDate, _ := time.Parse(utils.FormatDate, v.DataTime)
  331. timestamp := currentDate.UnixNano() / 1e6
  332. edbDataZjpj := &EdbDataCalculateZjpj{
  333. EdbInfoId: edbInfoId,
  334. EdbCode: nowEdbInfo.EdbCode,
  335. DataTime: v.DataTime,
  336. Value: v.Value,
  337. Status: 1,
  338. CreateTime: time.Now(),
  339. ModifyTime: time.Now(),
  340. DataTimestamp: timestamp,
  341. }
  342. addDataList = append(addDataList, edbDataZjpj)
  343. }
  344. }
  345. //第二个指标数据
  346. {
  347. var condition string
  348. var pars []interface{}
  349. if existItemB.FromEdbInfoId != secondEdbInfo.EdbInfoId {
  350. //删除之前的B指标关联关系
  351. sql = ` DELETE FROM edb_info_calculate_mapping WHERE edb_info_id = ? and from_edb_info_id = ?`
  352. _, err = o.Raw(sql, edbInfoId, existItemB.FromEdbInfoId).Exec()
  353. if err != nil {
  354. err = errors.New("删除拼接日期之后的指标关联关系失败,Err:" + err.Error())
  355. return
  356. }
  357. //删除历史拼接日期之前所有的B指标数据
  358. sql = ` DELETE FROM edb_data_calculate_zjpj WHERE edb_info_id = ? and data_time >= ?`
  359. _, err = o.Raw(sql, edbInfoId, nowEdbInfo.CalculateFormula).Exec()
  360. if err != nil {
  361. err = errors.New("删除历史拼接日期之后的数据失败,Err:" + err.Error())
  362. return
  363. }
  364. //第二个指标的数据列表
  365. condition = " AND data_time >= ? AND edb_info_id=? "
  366. pars = append(pars, reqFormulaDate, secondEdbInfo.EdbInfoId)
  367. tmpSecondDataList, tmpErr := GetEdbDataListAll(condition, pars, secondEdbInfo.Source, 0)
  368. if tmpErr != nil {
  369. return edbInfoId, tmpErr
  370. }
  371. secondDataList = tmpSecondDataList
  372. //添加新的指标关系
  373. {
  374. calculateMappingItem := new(EdbInfoCalculateMapping)
  375. calculateMappingItem.CreateTime = time.Now()
  376. calculateMappingItem.ModifyTime = time.Now()
  377. calculateMappingItem.Sort = 1
  378. calculateMappingItem.EdbCode = nowEdbInfo.EdbCode
  379. calculateMappingItem.EdbInfoId = edbInfoId
  380. calculateMappingItem.FromEdbInfoId = secondEdbInfo.EdbInfoId
  381. calculateMappingItem.FromEdbCode = secondEdbInfo.EdbCode
  382. calculateMappingItem.FromEdbName = secondEdbInfo.EdbName
  383. calculateMappingItem.FromSource = secondEdbInfo.Source
  384. calculateMappingItem.FromSourceName = secondEdbInfo.SourceName
  385. calculateMappingItem.FromTag = "B"
  386. calculateMappingItem.Source = nowEdbInfo.Source
  387. calculateMappingItem.SourceName = nowEdbInfo.SourceName
  388. go o.Insert(calculateMappingItem)
  389. }
  390. } else {
  391. if req.Formula != nowEdbInfo.CalculateFormula {
  392. //获取第二个指标的数据列表
  393. condition += " AND data_time >= ? AND data_time < ? AND edb_info_id=? "
  394. pars = append(pars, reqFormulaDate, nowFormulaDate, secondEdbInfo.EdbInfoId)
  395. tmpSecondDataList, tmpErr := GetEdbDataListAll(condition, pars, secondEdbInfo.Source, 0)
  396. if tmpErr != nil {
  397. return edbInfoId, tmpErr
  398. }
  399. secondDataList = tmpSecondDataList
  400. }
  401. }
  402. //待插入数据
  403. for _, v := range secondDataList {
  404. //时间戳
  405. currentDate, _ := time.Parse(utils.FormatDate, v.DataTime)
  406. timestamp := currentDate.UnixNano() / 1e6
  407. edbDataZjpj := &EdbDataCalculateZjpj{
  408. EdbInfoId: edbInfoId,
  409. EdbCode: nowEdbInfo.EdbCode,
  410. DataTime: v.DataTime,
  411. Value: v.Value,
  412. Status: 1,
  413. CreateTime: time.Now(),
  414. ModifyTime: time.Now(),
  415. DataTimestamp: timestamp,
  416. }
  417. addDataList = append(addDataList, edbDataZjpj)
  418. }
  419. }
  420. //数据入库
  421. tmpAddDataList := make([]*EdbDataCalculateZjpj, 0)
  422. for _, v := range addDataList {
  423. tmpAddDataList = append(tmpAddDataList, v)
  424. if len(tmpAddDataList) >= 200 {
  425. _, tmpErr := o.InsertMulti(len(tmpAddDataList), tmpAddDataList)
  426. if tmpErr != nil {
  427. err = tmpErr
  428. return
  429. }
  430. //重新初始化需要加入的数据切片
  431. tmpAddDataList = make([]*EdbDataCalculateZjpj, 0)
  432. }
  433. }
  434. //最后如果还有需要新增的数据,那么就统一入库
  435. if len(tmpAddDataList) > 0 {
  436. _, tmpErr := o.InsertMulti(len(tmpAddDataList), tmpAddDataList)
  437. if tmpErr != nil {
  438. err = tmpErr
  439. return
  440. }
  441. }
  442. return
  443. }
  444. // RefreshAllCalculateZjpj 刷新所有 直接拼接 数据
  445. func RefreshAllCalculateZjpj(edbInfo *EdbInfo) (err error) {
  446. o := orm.NewOrm()
  447. o.Using("data")
  448. o.Begin()
  449. defer func() {
  450. if err != nil {
  451. o.Rollback()
  452. } else {
  453. o.Commit()
  454. }
  455. }()
  456. //查询当前指标现有的数据
  457. var condition string
  458. var pars []interface{}
  459. condition += " AND edb_info_id=? "
  460. pars = append(pars, edbInfo.EdbInfoId)
  461. dataList, err := GetAllEdbDataCalculateZjpjByEdbInfoId(edbInfo.EdbInfoId)
  462. if err != nil {
  463. return err
  464. }
  465. var dateArr []string
  466. dataMap := make(map[string]*EdbDataCalculateZjpj)
  467. removeDataTimeMap := make(map[string]int) //需要移除的日期数据
  468. for _, v := range dataList {
  469. dateArr = append(dateArr, v.DataTime)
  470. dataMap[v.DataTime] = v
  471. removeDataTimeMap[v.DataTime] = 1
  472. }
  473. //查询关联指标信息
  474. var existCondition string
  475. var existPars []interface{}
  476. existCondition += " AND edb_info_id=? "
  477. existPars = append(existPars, edbInfo.EdbInfoId)
  478. existList, err := GetEdbInfoCalculateListByCondition(existCondition, existPars)
  479. if err != nil {
  480. err = errors.New("判断指标是否改变失败,Err:" + err.Error())
  481. return
  482. }
  483. var existItemA, existItemB *EdbInfoCalculateMapping
  484. for _, existItem := range existList {
  485. if existItem.FromTag == "A" {
  486. existItemA = existItem
  487. } else if existItem.FromTag == "B" {
  488. existItemB = existItem
  489. }
  490. }
  491. addDataList := make([]*EdbDataCalculateZjpj, 0)
  492. //第一个指标
  493. {
  494. var condition string
  495. var pars []interface{}
  496. condition += " AND data_time < ? AND edb_info_id=? "
  497. pars = append(pars, edbInfo.CalculateFormula, existItemA.FromEdbInfoId)
  498. //第一个指标的数据列表
  499. firstDataList, tmpErr := GetEdbDataListAll(condition, pars, existItemA.FromSource, 0)
  500. if tmpErr != nil {
  501. return tmpErr
  502. }
  503. for _, v := range firstDataList {
  504. //校验待删除日期数据里面是否存在该元素,如果存在的话,那么移除该元素
  505. if _, ok := removeDataTimeMap[v.DataTime]; ok {
  506. delete(removeDataTimeMap, v.DataTime)
  507. }
  508. //时间戳
  509. if edbData, ok := dataMap[v.DataTime]; ok {
  510. if edbData.Value != v.Value {
  511. //更新指标数据
  512. edbData.Value = v.Value
  513. o.Update(edbData, "Value")
  514. }
  515. } else {
  516. //时间戳
  517. currentDate, _ := time.Parse(utils.FormatDate, v.DataTime)
  518. timestamp := currentDate.UnixNano() / 1e6
  519. edbDataZjpj := &EdbDataCalculateZjpj{
  520. EdbInfoId: edbInfo.EdbInfoId,
  521. EdbCode: edbInfo.EdbCode,
  522. DataTime: v.DataTime,
  523. Value: v.Value,
  524. Status: 1,
  525. CreateTime: time.Now(),
  526. ModifyTime: time.Now(),
  527. DataTimestamp: timestamp,
  528. }
  529. addDataList = append(addDataList, edbDataZjpj)
  530. }
  531. }
  532. }
  533. //第二个指标
  534. {
  535. condition = ``
  536. pars = make([]interface{}, 0)
  537. condition += " AND data_time >= ? AND edb_info_id = ? "
  538. pars = append(pars, edbInfo.CalculateFormula, existItemB.FromEdbInfoId)
  539. //第二个指标的数据列表
  540. secondDataList, tmpErr := GetEdbDataListAll(condition, pars, existItemB.FromSource, 0)
  541. if tmpErr != nil {
  542. return tmpErr
  543. }
  544. for _, v := range secondDataList {
  545. //校验待删除日期数据里面是否存在该元素,如果存在的话,那么移除该元素
  546. if _, ok := removeDataTimeMap[v.DataTime]; ok {
  547. delete(removeDataTimeMap, v.DataTime)
  548. }
  549. if edbData, ok := dataMap[v.DataTime]; ok {
  550. if edbData.Value != v.Value {
  551. //更新指标数据
  552. edbData.Value = v.Value
  553. edbData.ModifyTime = time.Now()
  554. _, tmpErr := o.Update(edbData, "Value", "ModifyTime")
  555. if tmpErr != nil {
  556. fmt.Println("tmpErr:", tmpErr)
  557. }
  558. }
  559. } else {
  560. //时间戳
  561. currentDate, _ := time.Parse(utils.FormatDate, v.DataTime)
  562. timestamp := currentDate.UnixNano() / 1e6
  563. edbDataZjpj := &EdbDataCalculateZjpj{
  564. EdbInfoId: edbInfo.EdbInfoId,
  565. EdbCode: edbInfo.EdbCode,
  566. DataTime: v.DataTime,
  567. Value: v.Value,
  568. Status: 1,
  569. CreateTime: time.Now(),
  570. ModifyTime: time.Now(),
  571. DataTimestamp: timestamp,
  572. }
  573. addDataList = append(addDataList, edbDataZjpj)
  574. }
  575. }
  576. }
  577. //删除已经不存在的累计同比拼接指标数据(由于同比值当日的数据删除了)
  578. {
  579. removeDateList := make([]string, 0)
  580. for dateTime := range removeDataTimeMap {
  581. removeDateList = append(removeDateList, dateTime)
  582. }
  583. if len(removeDateList) > 0 {
  584. removeDateStr := strings.Join(removeDateList, `","`)
  585. removeDateStr = `"` + removeDateStr + `"`
  586. //如果拼接指标变更了,那么需要删除所有的指标数据
  587. tableName := GetEdbDataTableName(edbInfo.Source)
  588. sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
  589. _, err = o.Raw(sql, edbInfo.EdbInfoId).Exec()
  590. if err != nil {
  591. err = errors.New("删除不存在的直接拼接指标数据失败,Err:" + err.Error())
  592. return
  593. }
  594. }
  595. }
  596. //数据入库
  597. tmpAddDataList := make([]*EdbDataCalculateZjpj, 0)
  598. for _, v := range addDataList {
  599. tmpAddDataList = append(tmpAddDataList, v)
  600. if len(tmpAddDataList) >= 200 {
  601. _, tmpErr := o.InsertMulti(len(tmpAddDataList), tmpAddDataList)
  602. if tmpErr != nil {
  603. err = tmpErr
  604. return
  605. }
  606. //重新初始化需要加入的数据切片
  607. tmpAddDataList = make([]*EdbDataCalculateZjpj, 0)
  608. }
  609. }
  610. //最后如果还有需要新增的数据,那么就统一入库
  611. if len(tmpAddDataList) > 0 {
  612. _, tmpErr := o.InsertMulti(len(tmpAddDataList), tmpAddDataList)
  613. if tmpErr != nil {
  614. err = tmpErr
  615. return
  616. }
  617. }
  618. return
  619. }