|
@@ -1,286 +0,0 @@
|
|
|
-package data_manage
|
|
|
-
|
|
|
-import (
|
|
|
- "errors"
|
|
|
- "eta/eta_api/utils"
|
|
|
- "github.com/beego/beego/v2/client/orm"
|
|
|
- "time"
|
|
|
-)
|
|
|
-
|
|
|
-// EditCalculateZjpj 编辑直接拼接数据
|
|
|
-func EditCalculateZjpj(req *EdbInfoCalculateBatchEditReq, nowEdbInfo, firstEdbInfo, secondEdbInfo *EdbInfo) (edbInfoId int, err error) {
|
|
|
- edbInfoId = req.EdbInfoId
|
|
|
- o := orm.NewOrmUsingDB("data")
|
|
|
- to, err := o.Begin()
|
|
|
- if err != nil {
|
|
|
- return
|
|
|
- }
|
|
|
- defer func() {
|
|
|
- if err != nil {
|
|
|
- _ = to.Rollback()
|
|
|
- } else {
|
|
|
- _ = to.Commit()
|
|
|
- }
|
|
|
- }()
|
|
|
-
|
|
|
- //修改指标信息
|
|
|
- sql := ` UPDATE edb_info SET
|
|
|
- edb_name =?,
|
|
|
- edb_name_source=?,
|
|
|
- frequency = ?,
|
|
|
- unit = ?,
|
|
|
- classify_id = ?,
|
|
|
- calculate_formula=?,
|
|
|
- modify_time = NOW()
|
|
|
- WHERE edb_info_id = ? `
|
|
|
- _, err = to.Raw(sql, req.EdbName, req.EdbName, req.Frequency, req.Unit, req.ClassifyId, req.Formula, edbInfoId).Exec()
|
|
|
- if err != nil {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- var existCondition string
|
|
|
- var existPars []interface{}
|
|
|
- existCondition += " AND edb_info_id=? "
|
|
|
- existPars = append(existPars, edbInfoId)
|
|
|
-
|
|
|
- //查询出所有的关联指标
|
|
|
- existList, err := GetEdbInfoCalculateListByCondition(existCondition, existPars)
|
|
|
- if err != nil {
|
|
|
- err = errors.New("判断指标是否改变失败,Err:" + err.Error())
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- var existItemA, existItemB *EdbInfoCalculateMapping
|
|
|
- for _, existItem := range existList {
|
|
|
- if existItem.FromTag == "A" {
|
|
|
- existItemA = existItem
|
|
|
- } else if existItem.FromTag == "B" {
|
|
|
- existItemB = existItem
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- addDataList := make([]*EdbDataCalculateZjpj, 0)
|
|
|
- firstDataList := make([]*EdbInfoSearchData, 0)
|
|
|
- secondDataList := make([]*EdbInfoSearchData, 0)
|
|
|
-
|
|
|
- //如果 之前的拼接日期 与 现在的拼接日期 不一致的话,需要做以下处理
|
|
|
- nowFormulaDate, _ := time.ParseInLocation(utils.FormatDate, nowEdbInfo.CalculateFormula, time.Local)
|
|
|
- reqFormulaDate, _ := time.ParseInLocation(utils.FormatDate, req.Formula, time.Local)
|
|
|
-
|
|
|
- //如果前后选择的日期不一致,那么需要删除一部分数据
|
|
|
- if nowEdbInfo.CalculateFormula != req.Formula {
|
|
|
- var startDate, endDate time.Time
|
|
|
- //如果当前选择的日期 小于 之前选择的日期
|
|
|
- if reqFormulaDate.Before(nowFormulaDate) {
|
|
|
- startDate = reqFormulaDate
|
|
|
- endDate = nowFormulaDate
|
|
|
- } else { //如果当前选择的日期 大于 之前选择的日期
|
|
|
- startDate = nowFormulaDate
|
|
|
- endDate = reqFormulaDate
|
|
|
- }
|
|
|
- //删除 之前日期 与 当前日期 之间的指标数据
|
|
|
- sql = ` DELETE FROM edb_data_calculate_zjpj WHERE edb_info_id = ? and data_time >= ? and data_time < ?`
|
|
|
- _, err = to.Raw(sql, edbInfoId, startDate, endDate).Exec()
|
|
|
- if err != nil {
|
|
|
- err = errors.New("删除 之前日期 与 当前日期 之间的指标数据失败,Err:" + err.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
- //第一个指标数据
|
|
|
- {
|
|
|
- var condition string
|
|
|
- var pars []interface{}
|
|
|
- if existItemA.FromEdbInfoId != firstEdbInfo.EdbInfoId {
|
|
|
- //删除之前的A指标关联关系
|
|
|
- sql = ` DELETE FROM edb_info_calculate_mapping WHERE edb_info_id = ? and from_edb_info_id = ?`
|
|
|
- _, err = to.Raw(sql, edbInfoId, existItemA.FromEdbInfoId).Exec()
|
|
|
- if err != nil {
|
|
|
- err = errors.New("删除拼接日期之前的指标关联关系失败,Err:" + err.Error())
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- //删除之前所有的A指标数据
|
|
|
- sql = ` DELETE FROM edb_data_calculate_zjpj WHERE edb_info_id = ? and data_time < ?`
|
|
|
- _, err = to.Raw(sql, edbInfoId, req.Formula).Exec()
|
|
|
- if err != nil {
|
|
|
- err = errors.New("删除拼接日期之前的数据失败,Err:" + err.Error())
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- //获取第一个指标的数据列表
|
|
|
- condition += " AND data_time < ? AND edb_info_id=? "
|
|
|
- pars = append(pars, req.Formula, firstEdbInfo.EdbInfoId)
|
|
|
-
|
|
|
- tmpFirstDataList, tmpErr := GetEdbDataListAll(condition, pars, firstEdbInfo.Source, firstEdbInfo.SubSource, 0)
|
|
|
- if tmpErr != nil {
|
|
|
- return edbInfoId, tmpErr
|
|
|
- }
|
|
|
- firstDataList = tmpFirstDataList
|
|
|
-
|
|
|
- //添加新的指标关系
|
|
|
- {
|
|
|
- calculateMappingItem := new(EdbInfoCalculateMapping)
|
|
|
- calculateMappingItem.CreateTime = time.Now()
|
|
|
- calculateMappingItem.ModifyTime = time.Now()
|
|
|
- calculateMappingItem.Sort = 1
|
|
|
- calculateMappingItem.EdbCode = nowEdbInfo.EdbCode
|
|
|
- calculateMappingItem.EdbInfoId = edbInfoId
|
|
|
- calculateMappingItem.FromEdbInfoId = firstEdbInfo.EdbInfoId
|
|
|
- calculateMappingItem.FromEdbCode = firstEdbInfo.EdbCode
|
|
|
- calculateMappingItem.FromEdbName = firstEdbInfo.EdbName
|
|
|
- calculateMappingItem.FromSource = firstEdbInfo.Source
|
|
|
- calculateMappingItem.FromSourceName = firstEdbInfo.SourceName
|
|
|
- calculateMappingItem.FromTag = "A"
|
|
|
- calculateMappingItem.Source = nowEdbInfo.Source
|
|
|
- calculateMappingItem.SourceName = nowEdbInfo.SourceName
|
|
|
- _, err = to.Insert(calculateMappingItem)
|
|
|
- if err != nil {
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- if req.Formula != nowEdbInfo.CalculateFormula {
|
|
|
- //获取第一个指标的数据列表
|
|
|
- condition += " AND data_time >= ? AND data_time < ? AND edb_info_id=? "
|
|
|
- pars = append(pars, nowFormulaDate, reqFormulaDate, firstEdbInfo.EdbInfoId)
|
|
|
-
|
|
|
- tmpFirstDataList, tmpErr := GetEdbDataListAll(condition, pars, firstEdbInfo.Source, firstEdbInfo.SubSource, 0)
|
|
|
- if tmpErr != nil {
|
|
|
- return edbInfoId, tmpErr
|
|
|
- }
|
|
|
- firstDataList = tmpFirstDataList
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //待插入数据
|
|
|
- for _, v := range firstDataList {
|
|
|
- //时间戳
|
|
|
- currentDate, _ := time.Parse(utils.FormatDate, v.DataTime)
|
|
|
- timestamp := currentDate.UnixNano() / 1e6
|
|
|
-
|
|
|
- edbDataZjpj := &EdbDataCalculateZjpj{
|
|
|
- EdbInfoId: edbInfoId,
|
|
|
- EdbCode: nowEdbInfo.EdbCode,
|
|
|
- DataTime: v.DataTime,
|
|
|
- Value: v.Value,
|
|
|
- Status: 1,
|
|
|
- CreateTime: time.Now(),
|
|
|
- ModifyTime: time.Now(),
|
|
|
- DataTimestamp: timestamp,
|
|
|
- }
|
|
|
- addDataList = append(addDataList, edbDataZjpj)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //第二个指标数据
|
|
|
- {
|
|
|
- var condition string
|
|
|
- var pars []interface{}
|
|
|
-
|
|
|
- if existItemB.FromEdbInfoId != secondEdbInfo.EdbInfoId {
|
|
|
- //删除之前的B指标关联关系
|
|
|
- sql = ` DELETE FROM edb_info_calculate_mapping WHERE edb_info_id = ? and from_edb_info_id = ?`
|
|
|
- _, err = to.Raw(sql, edbInfoId, existItemB.FromEdbInfoId).Exec()
|
|
|
- if err != nil {
|
|
|
- err = errors.New("删除拼接日期之后的指标关联关系失败,Err:" + err.Error())
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- //删除历史拼接日期之前所有的B指标数据
|
|
|
- sql = ` DELETE FROM edb_data_calculate_zjpj WHERE edb_info_id = ? and data_time >= ?`
|
|
|
- _, err = to.Raw(sql, edbInfoId, nowEdbInfo.CalculateFormula).Exec()
|
|
|
- if err != nil {
|
|
|
- err = errors.New("删除历史拼接日期之后的数据失败,Err:" + err.Error())
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- //第二个指标的数据列表
|
|
|
- condition = " AND data_time >= ? AND edb_info_id=? "
|
|
|
- pars = append(pars, reqFormulaDate, secondEdbInfo.EdbInfoId)
|
|
|
- tmpSecondDataList, tmpErr := GetEdbDataListAll(condition, pars, secondEdbInfo.Source, secondEdbInfo.SubSource, 0)
|
|
|
- if tmpErr != nil {
|
|
|
- return edbInfoId, tmpErr
|
|
|
- }
|
|
|
- secondDataList = tmpSecondDataList
|
|
|
-
|
|
|
- //添加新的指标关系
|
|
|
- {
|
|
|
- calculateMappingItem := new(EdbInfoCalculateMapping)
|
|
|
- calculateMappingItem.CreateTime = time.Now()
|
|
|
- calculateMappingItem.ModifyTime = time.Now()
|
|
|
- calculateMappingItem.Sort = 1
|
|
|
- calculateMappingItem.EdbCode = nowEdbInfo.EdbCode
|
|
|
- calculateMappingItem.EdbInfoId = edbInfoId
|
|
|
- calculateMappingItem.FromEdbInfoId = secondEdbInfo.EdbInfoId
|
|
|
- calculateMappingItem.FromEdbCode = secondEdbInfo.EdbCode
|
|
|
- calculateMappingItem.FromEdbName = secondEdbInfo.EdbName
|
|
|
- calculateMappingItem.FromSource = secondEdbInfo.Source
|
|
|
- calculateMappingItem.FromSourceName = secondEdbInfo.SourceName
|
|
|
- calculateMappingItem.FromTag = "B"
|
|
|
- calculateMappingItem.Source = nowEdbInfo.Source
|
|
|
- calculateMappingItem.SourceName = nowEdbInfo.SourceName
|
|
|
- _, err = to.Insert(calculateMappingItem)
|
|
|
- if err != nil {
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- if req.Formula != nowEdbInfo.CalculateFormula {
|
|
|
- //获取第二个指标的数据列表
|
|
|
- condition += " AND data_time >= ? AND data_time < ? AND edb_info_id=? "
|
|
|
- pars = append(pars, reqFormulaDate, nowFormulaDate, secondEdbInfo.EdbInfoId)
|
|
|
-
|
|
|
- tmpSecondDataList, tmpErr := GetEdbDataListAll(condition, pars, secondEdbInfo.Source, secondEdbInfo.SubSource, 0)
|
|
|
- if tmpErr != nil {
|
|
|
- return edbInfoId, tmpErr
|
|
|
- }
|
|
|
- secondDataList = tmpSecondDataList
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //待插入数据
|
|
|
- for _, v := range secondDataList {
|
|
|
- //时间戳
|
|
|
- currentDate, _ := time.Parse(utils.FormatDate, v.DataTime)
|
|
|
- timestamp := currentDate.UnixNano() / 1e6
|
|
|
-
|
|
|
- edbDataZjpj := &EdbDataCalculateZjpj{
|
|
|
- EdbInfoId: edbInfoId,
|
|
|
- EdbCode: nowEdbInfo.EdbCode,
|
|
|
- DataTime: v.DataTime,
|
|
|
- Value: v.Value,
|
|
|
- Status: 1,
|
|
|
- CreateTime: time.Now(),
|
|
|
- ModifyTime: time.Now(),
|
|
|
- DataTimestamp: timestamp,
|
|
|
- }
|
|
|
- addDataList = append(addDataList, edbDataZjpj)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //数据入库
|
|
|
- tmpAddDataList := make([]*EdbDataCalculateZjpj, 0)
|
|
|
- for _, v := range addDataList {
|
|
|
- tmpAddDataList = append(tmpAddDataList, v)
|
|
|
-
|
|
|
- if len(tmpAddDataList) >= 200 {
|
|
|
- _, tmpErr := to.InsertMulti(len(tmpAddDataList), tmpAddDataList)
|
|
|
- if tmpErr != nil {
|
|
|
- err = tmpErr
|
|
|
- return
|
|
|
- }
|
|
|
- //重新初始化需要加入的数据切片
|
|
|
- tmpAddDataList = make([]*EdbDataCalculateZjpj, 0)
|
|
|
- }
|
|
|
- }
|
|
|
- //最后如果还有需要新增的数据,那么就统一入库
|
|
|
- if len(tmpAddDataList) > 0 {
|
|
|
- _, tmpErr := to.InsertMulti(len(tmpAddDataList), tmpAddDataList)
|
|
|
- if tmpErr != nil {
|
|
|
- err = tmpErr
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return
|
|
|
-}
|