Bläddra i källkod

计算指标,预测计算指标刷新,删除不存在的日期

xyxie 6 månader sedan
förälder
incheckning
257acb9500

+ 24 - 1
models/edb_data_calculate_hbz.go

@@ -235,8 +235,10 @@ func refreshAllCalculateHbz(to orm.TxOrmer, edbInfoId, source, subSource int, fr
 		return err
 	}
 	existDataMap := make(map[string]string)
+	removeDateMap := make(map[string]bool) //需要移除的日期
 	for _, v := range existDataList {
 		existDataMap[v.DataTime] = v.Value
+		removeDateMap[v.DataTime] = true
 	}
 	addSql := ` INSERT INTO edb_data_calculate_hbz(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
 	var isAdd bool
@@ -251,13 +253,15 @@ func refreshAllCalculateHbz(to orm.TxOrmer, edbInfoId, source, subSource int, fr
 			preItem := dataList[j]
 			if currentItem != nil && preItem != nil {
 				existKey := edbCode + currentItem.DataTime
-
+				// 有计算出来值,那么就从待删除指标中移除
 				if _, ok := existMap[existKey]; !ok {
 					currentDate, _ := time.ParseInLocation(utils.FormatDate, currentItem.DataTime, time.Local)
 					timestamp := currentDate.UnixNano() / 1e6
 					timestampStr := fmt.Sprintf("%d", timestamp)
 					val := HbzDiv(currentItem.Value, preItem.Value)
 					if val != "" {
+						// 有计算出来值,那么就从待删除指标中移除
+						delete(removeDateMap, currentItem.DataTime)
 						if existVal, findOk := existDataMap[currentItem.DataTime]; !findOk {
 							addSql += GetAddSql(edbInfoIdStr, edbCode, currentItem.DataTime, timestampStr, val)
 							isAdd = true
@@ -279,6 +283,25 @@ func refreshAllCalculateHbz(to orm.TxOrmer, edbInfoId, source, subSource int, fr
 			}
 		}
 	}
+
+	if len(removeDateMap) > 0 {
+		removeDateList := make([]string, 0) //需要移除的日期
+		for k := range removeDateMap {
+			removeDateList = append(removeDateList, k)
+		}
+		removeDateStr := strings.Join(removeDateList, `","`)
+		removeDateStr = `"` + removeDateStr + `"`
+		//如果拼接指标变更了,那么需要删除所有的指标数据
+		tableName := GetEdbDataTableName(source, subSource)
+		sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
+
+		_, err = to.Raw(sql, edbInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
+			return
+		}
+	}
+
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = to.Raw(addSql).Exec()

+ 22 - 0
models/edb_data_calculate_ljzzj.go

@@ -288,8 +288,10 @@ func (obj Ljzzj) refresh(to orm.TxOrmer, edbInfoId, source, subSource int, fromE
 		return err
 	}
 	dataMap := make(map[string]string)
+	removeDateMap := make(map[string]bool) //需要移除的日期
 	for _, v := range existDataList {
 		dataMap[v.DataTime] = v.Value
+		removeDateMap[v.DataTime] = true
 	}
 	existDataMap := make(map[string]string)
 	for yk, yv := range yearMap {
@@ -362,6 +364,7 @@ func (obj Ljzzj) refresh(to orm.TxOrmer, edbInfoId, source, subSource int, fromE
 				}
 			}
 			if date != "" {
+				delete(removeDateMap, date)
 				tmpSql, newAdd, tmpErr := obj.calculate(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, to)
 				if !isAdd {
 					isAdd = newAdd
@@ -373,6 +376,25 @@ func (obj Ljzzj) refresh(to orm.TxOrmer, edbInfoId, source, subSource int, fromE
 			}
 		}
 	}
+
+	if len(removeDateMap) > 0 {
+		removeDateList := make([]string, 0) //需要移除的日期
+		for k := range removeDateMap {
+			removeDateList = append(removeDateList, k)
+		}
+		removeDateStr := strings.Join(removeDateList, `","`)
+		removeDateStr = `"` + removeDateStr + `"`
+		//如果拼接指标变更了,那么需要删除所有的指标数据
+		tableName := GetEdbDataTableName(source, subSource)
+		sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
+
+		_, err = to.Raw(sql, edbInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
+			return
+		}
+	}
+
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = to.Raw(addSql).Exec()

+ 22 - 0
models/edb_data_calculate_ljzzy.go

@@ -257,8 +257,10 @@ func refreshAllCalculateLjzzy(to orm.TxOrmer, edbInfoId, source, subSource int,
 		return err
 	}
 	dataMap := make(map[string]string)
+	removeDateMap := make(map[string]bool) //需要移除的日期
 	for _, v := range existDataList {
 		dataMap[v.DataTime] = v.Value
+		removeDateMap[v.DataTime] = true
 	}
 	existDataMap := make(map[string]string)
 	for yk, yv := range yearMap {
@@ -352,6 +354,7 @@ func refreshAllCalculateLjzzy(to orm.TxOrmer, edbInfoId, source, subSource int,
 				//		}
 				//	}
 				//}
+				delete(removeDateMap, date)
 				tmpSql, newAdd, tmpErr := calculateLjzzy(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, to)
 				if !isAdd {
 					isAdd = newAdd
@@ -363,6 +366,25 @@ func refreshAllCalculateLjzzy(to orm.TxOrmer, edbInfoId, source, subSource int,
 			}
 		}
 	}
+
+	if len(removeDateMap) > 0 {
+		removeDateList := make([]string, 0) //需要移除的日期
+		for k := range removeDateMap {
+			removeDateList = append(removeDateList, k)
+		}
+		removeDateStr := strings.Join(removeDateList, `","`)
+		removeDateStr = `"` + removeDateStr + `"`
+		//如果拼接指标变更了,那么需要删除所有的指标数据
+		tableName := GetEdbDataTableName(source, subSource)
+		sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
+
+		_, err = to.Raw(sql, edbInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
+			return
+		}
+	}
+
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = to.Raw(addSql).Exec()

+ 22 - 0
models/edb_data_calculate_rjz.go

@@ -236,8 +236,10 @@ func refreshAllCalculateRjz(to orm.TxOrmer, edbInfoId, source int, fromEdbInfo *
 		return err
 	}
 	existDataMap := make(map[string]string)
+	removeDateMap := make(map[string]bool) //需要移除的日期
 	for _, v := range existDataList {
 		existDataMap[v.DataTime] = v.Value
+		removeDateMap[v.DataTime] = true
 	}
 	fmt.Println("existDataMap:", existDataMap)
 	addSql := ` INSERT INTO edb_data_calculate_rjz(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
@@ -251,6 +253,7 @@ func refreshAllCalculateRjz(to orm.TxOrmer, edbInfoId, source int, fromEdbInfo *
 			if err != nil {
 				return err
 			}
+			delete(removeDateMap, av)
 			//根据频度计算需要均分的天数
 			days := GetRjzFrequencyDays(currentDate, fromEdbInfo.Frequency)
 			val := rjzDiv(currentItem.Value, days)
@@ -277,6 +280,25 @@ func refreshAllCalculateRjz(to orm.TxOrmer, edbInfoId, source int, fromEdbInfo *
 			}
 		}
 	}
+
+	if len(removeDateMap) > 0 {
+		removeDateList := make([]string, 0) //需要移除的日期
+		for k := range removeDateMap {
+			removeDateList = append(removeDateList, k)
+		}
+		removeDateStr := strings.Join(removeDateList, `","`)
+		removeDateStr = `"` + removeDateStr + `"`
+		//如果拼接指标变更了,那么需要删除所有的指标数据
+		tableName := GetEdbDataTableName(source, utils.DATA_SUB_SOURCE_EDB)
+		sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
+
+		_, err = to.Raw(sql, edbInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
+			return
+		}
+	}
+
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = to.Raw(addSql).Exec()

+ 21 - 0
models/edb_data_calculate_tcz.go

@@ -236,8 +236,10 @@ func refreshAllCalculateTcz(to orm.TxOrmer, edbInfoId, source, subSource int, fr
 		return err
 	}
 	existDataMap := make(map[string]string)
+	removeDateMap := make(map[string]bool) //需要移除的日期
 	for _, v := range existDataList {
 		existDataMap[v.DataTime] = v.Value
+		removeDateMap[v.DataTime] = true
 	}
 
 	addSql := ` INSERT INTO edb_data_calculate_tcz(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
@@ -245,6 +247,7 @@ func refreshAllCalculateTcz(to orm.TxOrmer, edbInfoId, source, subSource int, fr
 	existAddDataMap := make(map[string]string)
 	for _, av := range dateArr {
 		currentItem := dataMap[av]
+		delete(removeDateMap, av)
 		if currentItem != nil {
 			//当前日期
 			currentDate, err := time.ParseInLocation(utils.FormatDate, av, time.Local)
@@ -428,6 +431,24 @@ func refreshAllCalculateTcz(to orm.TxOrmer, edbInfoId, source, subSource int, fr
 			}
 		}
 	}
+	if len(removeDateMap) > 0 {
+		removeDateList := make([]string, 0) //需要移除的日期
+		for k := range removeDateMap {
+			removeDateList = append(removeDateList, k)
+		}
+		removeDateStr := strings.Join(removeDateList, `","`)
+		removeDateStr = `"` + removeDateStr + `"`
+		//如果拼接指标变更了,那么需要删除所有的指标数据
+		tableName := GetEdbDataTableName(source, subSource)
+		sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
+
+		_, err = to.Raw(sql, edbInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
+			return
+		}
+	}
+
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = to.Raw(addSql).Exec()

+ 21 - 1
models/predict_edb_data_calculate_hbz.go

@@ -211,8 +211,10 @@ func refreshAllPredictCalculateHbz(to orm.TxOrmer, edbInfoId, source, subSource
 		return
 	}
 	existDataMap := make(map[string]string)
+	removeDateMap := make(map[string]bool) //需要移除的日期
 	for _, v := range existDataList {
 		existDataMap[v.DataTime] = v.Value
+		removeDateMap[v.DataTime] = true
 	}
 	addSql := ` INSERT INTO edb_data_predict_calculate_hbz(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
 	var isAdd bool
@@ -227,13 +229,14 @@ func refreshAllPredictCalculateHbz(to orm.TxOrmer, edbInfoId, source, subSource
 			preItem := dataList[j]
 			if currentItem != nil && preItem != nil {
 				existKey := edbCode + currentItem.DataTime
-
 				if _, ok := existMap[existKey]; !ok {
 					currentDate, _ := time.ParseInLocation(utils.FormatDate, currentItem.DataTime, time.Local)
 					timestamp := currentDate.UnixNano() / 1e6
 					timestampStr := fmt.Sprintf("%d", timestamp)
 					val := HbzDiv(currentItem.Value, preItem.Value)
 					if val != "" {
+						// 有计算出来值,那么就从待删除指标中移除
+						delete(removeDateMap, currentItem.DataTime)
 						if fromEdbInfo.LatestDate == currentItem.DataTime {
 							latestValueDecimal, tmpErr := decimal.NewFromString(val)
 							if tmpErr != nil {
@@ -267,6 +270,23 @@ func refreshAllPredictCalculateHbz(to orm.TxOrmer, edbInfoId, source, subSource
 			}
 		}
 	}
+	if len(removeDateMap) > 0 {
+		removeDateList := make([]string, 0) //需要移除的日期
+		for k := range removeDateMap {
+			removeDateList = append(removeDateList, k)
+		}
+		removeDateStr := strings.Join(removeDateList, `","`)
+		removeDateStr = `"` + removeDateStr + `"`
+		//如果拼接指标变更了,那么需要删除所有的指标数据
+		tableName := GetEdbDataTableName(source, subSource)
+		sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
+
+		_, err = to.Raw(sql, edbInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
+			return
+		}
+	}
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = to.Raw(addSql).Exec()

+ 23 - 1
models/predict_edb_data_calculate_ljzzj.go

@@ -287,8 +287,10 @@ func (obj PredictLjzzj) refresh(to orm.TxOrmer, edbInfoId, source, subSource int
 		return
 	}
 	dataMap := make(map[string]string)
+	removeDateMap := make(map[string]bool) //需要移除的日期
 	for _, v := range existDataList {
 		dataMap[v.DataTime] = v.Value
+		removeDateMap[v.DataTime] = true
 	}
 	existDataMap := make(map[string]string)
 	for yk, yv := range yearMap {
@@ -331,7 +333,8 @@ func (obj PredictLjzzj) refresh(to orm.TxOrmer, edbInfoId, source, subSource int
 								a := decimal.NewFromFloat(dataTwoItem.Value)
 								b := decimal.NewFromFloat(2.0)
 								val, _ = a.Div(b).Float64()
-
+								// 有计算出来值,那么就从待删除指标中移除
+								delete(removeDateMap, date)
 								tmpSql, newAdd, tmpErr := obj.calculate(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, to)
 								if !isAdd {
 									isAdd = newAdd
@@ -362,6 +365,8 @@ func (obj PredictLjzzj) refresh(to orm.TxOrmer, edbInfoId, source, subSource int
 				}
 			}
 			if date != "" {
+				// 有计算出来值,那么就从待删除指标中移除
+				delete(removeDateMap, date)
 				tmpSql, newAdd, tmpErr := obj.calculate(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, to)
 				if !isAdd {
 					isAdd = newAdd
@@ -374,6 +379,23 @@ func (obj PredictLjzzj) refresh(to orm.TxOrmer, edbInfoId, source, subSource int
 			}
 		}
 	}
+	if len(removeDateMap) > 0 {
+		removeDateList := make([]string, 0) //需要移除的日期
+		for k := range removeDateMap {
+			removeDateList = append(removeDateList, k)
+		}
+		removeDateStr := strings.Join(removeDateList, `","`)
+		removeDateStr = `"` + removeDateStr + `"`
+		//如果拼接指标变更了,那么需要删除所有的指标数据
+		tableName := GetEdbDataTableName(source, subSource)
+		sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
+
+		_, err = to.Raw(sql, edbInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
+			return
+		}
+	}
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = to.Raw(addSql).Exec()

+ 21 - 0
models/predict_edb_data_calculate_ljzzy.go

@@ -225,8 +225,10 @@ func refreshAllPredictCalculateLjzzy(to orm.TxOrmer, edbInfoId, source, subSourc
 		return
 	}
 	dataMap := make(map[string]string)
+	removeDateMap := make(map[string]bool) //需要移除的日期
 	for _, v := range existDataList {
 		dataMap[v.DataTime] = v.Value
+		removeDateMap[v.DataTime] = true
 	}
 	existDataMap := make(map[string]string)
 
@@ -270,6 +272,7 @@ func refreshAllPredictCalculateLjzzy(to orm.TxOrmer, edbInfoId, source, subSourc
 								a := decimal.NewFromFloat(dataTwoItem.Value)
 								b := decimal.NewFromFloat(2.0)
 								val, _ = a.Div(b).Float64()
+								delete(removeDateMap, date)
 								tmpSql, newAdd, tmpErr := calculateLjzzy(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, to)
 								if !isAdd {
 									isAdd = newAdd
@@ -321,6 +324,7 @@ func refreshAllPredictCalculateLjzzy(to orm.TxOrmer, edbInfoId, source, subSourc
 				//		}
 				//	}
 				//}
+				delete(removeDateMap, date)
 				tmpSql, newAdd, tmpErr := calculateLjzzy(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, to)
 				if !isAdd {
 					isAdd = newAdd
@@ -333,6 +337,23 @@ func refreshAllPredictCalculateLjzzy(to orm.TxOrmer, edbInfoId, source, subSourc
 			}
 		}
 	}
+	if len(removeDateMap) > 0 {
+		removeDateList := make([]string, 0) //需要移除的日期
+		for k := range removeDateMap {
+			removeDateList = append(removeDateList, k)
+		}
+		removeDateStr := strings.Join(removeDateList, `","`)
+		removeDateStr = `"` + removeDateStr + `"`
+		//如果拼接指标变更了,那么需要删除所有的指标数据
+		tableName := GetEdbDataTableName(source, subSource)
+		sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
+
+		_, err = to.Raw(sql, edbInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
+			return
+		}
+	}
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = to.Raw(addSql).Exec()

+ 20 - 0
models/predict_edb_data_calculate_tcz.go

@@ -402,8 +402,10 @@ func RefreshAllPredictCalculateTcz(edbInfoId, source, subSource int, fromEdbInfo
 		return
 	}
 	existDataMap := make(map[string]string)
+	removeDateMap := make(map[string]bool) //需要移除的日期
 	for _, v := range existDataList {
 		existDataMap[v.DataTime] = v.Value
+		removeDateMap[v.DataTime] = true
 	}
 
 	addSql := ` INSERT INTO edb_data_predict_calculate_tcz(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
@@ -412,6 +414,7 @@ func RefreshAllPredictCalculateTcz(edbInfoId, source, subSource int, fromEdbInfo
 	for _, av := range dateArr {
 		currentItem := dataMap[av]
 		if currentItem != nil {
+			delete(removeDateMap, av)
 			//当前日期
 			currentDate, tmpErr := time.ParseInLocation(utils.FormatDate, av, time.Local)
 			if tmpErr != nil {
@@ -674,6 +677,23 @@ func RefreshAllPredictCalculateTcz(edbInfoId, source, subSource int, fromEdbInfo
 			}
 		}
 	}
+	if len(removeDateMap) > 0 {
+		removeDateList := make([]string, 0) //需要移除的日期
+		for k := range removeDateMap {
+			removeDateList = append(removeDateList, k)
+		}
+		removeDateStr := strings.Join(removeDateList, `","`)
+		removeDateStr = `"` + removeDateStr + `"`
+		//如果拼接指标变更了,那么需要删除所有的指标数据
+		tableName := GetEdbDataTableName(source, subSource)
+		sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
+
+		_, err = to.Raw(sql, edbInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
+			return
+		}
+	}
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = o.Raw(addSql).Exec()