Bladeren bron

fix:修复指标编码重复的问题,如果超过10次重复,那就报错异常

Roc 9 maanden geleden
bovenliggende
commit
fd0c2b3b76

+ 6 - 2
controllers/base_from_calculate.go

@@ -511,8 +511,12 @@ func (this *CalculateController) BatchSave() {
 	}
 
 	//生成指标编码
-	randStr := utils.GetRandDigit(4)
-	edbCode := `C` + time.Now().Format("060102") + randStr
+	edbCode, err := utils.GenerateEdbCode(1)
+	if err != nil {
+		br.Msg = "指标生成失败"
+		br.ErrMsg = "指标编码生成失败,Err:" + err.Error()
+		return
+	}
 	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
 	uniqueCode := utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
 

+ 6 - 2
controllers/base_from_predict_calculate.go

@@ -591,8 +591,12 @@ func (this *PredictCalculateController) CalculateBatchSave() {
 	}
 
 	//生成指标编码
-	randStr := utils.GetRandDigit(4)
-	edbCode := `C` + time.Now().Format("060102") + randStr
+	edbCode, err := utils.GenerateEdbCode(1)
+	if err != nil {
+		br.Msg = "指标生成失败"
+		br.ErrMsg = "指标编码生成失败,Err:" + err.Error()
+		return
+	}
 	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
 	uniqueCode := utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
 

+ 7 - 2
controllers/base_from_python.go

@@ -154,8 +154,13 @@ func (this *PythonController) Add() {
 		return
 	}
 	//指标code生成
-	randStr := utils.GetRandDigit(4)
-	edbCode := `C` + time.Now().Format("060102") + randStr
+	//生成指标编码
+	edbCode, err := utils.GenerateEdbCode(1)
+	if err != nil {
+		br.Msg = "指标生成失败"
+		br.ErrMsg = "指标编码生成失败,Err:" + err.Error()
+		return
+	}
 
 	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
 	uniqueCode := utils.MD5(utils.DATA_PREFIX + "_" + timestamp)

+ 6 - 2
models/base_from_adjust.go

@@ -48,8 +48,12 @@ func SaveAdjustEdb(req SaveAdjustEdbReq) (edbInfo *EdbInfo, err error, errMsg st
 	var edbCode string
 	if req.EdbInfoId <= 0 {
 		//指标code生成
-		randStr := utils.GetRandDigit(4)
-		edbCode = `C` + time.Now().Format("060102") + randStr
+		//生成指标编码
+		edbCode, err = utils.GenerateEdbCode(1)
+		if err != nil {
+			err = errors.New("指标编码生成失败,Err:" + err.Error())
+			return
+		}
 
 		timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
 		uniqueCode := utils.MD5(utils.DATA_PREFIX + "_" + timestamp)

+ 14 - 5
services/base_from_calculate.go

@@ -160,8 +160,13 @@ func EdbCalculateBatchSave(req models.EdbInfoCalculateBatchSaveReq, lang string)
 	}
 
 	//生成指标编码
-	randStr := utils.GetRandDigit(4)
-	edbCode := `C` + time.Now().Format("060102") + randStr
+	edbCode, err := utils.GenerateEdbCode(1)
+	if err != nil {
+		errMsg = "指标编码生成失败:Err:" + err.Error()
+		err = fmt.Errorf("指标生成失败")
+		return
+	}
+
 	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
 	uniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
 
@@ -984,9 +989,13 @@ func EdbCalculateAdd(req models.EdbInfoCalculateSaveReq, lang string) (edbInfo *
 			return
 		}
 	}
-
-	randStr := utils.GetRandDigit(4)
-	edbCode := `C` + time.Now().Format("060102") + randStr
+	//生成指标编码
+	edbCode, err := utils.GenerateEdbCode(1)
+	if err != nil {
+		errMsg = "生成计算指标失败,AddEdbInfo Err:" + err.Error()
+		err = fmt.Errorf("指标编码生成失败,Err:" + err.Error())
+		return
+	}
 	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
 	uniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
 

+ 38 - 6
utils/common.go

@@ -7,6 +7,7 @@ import (
 	"encoding/base64"
 	"encoding/hex"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"github.com/shopspring/decimal"
 	"image"
@@ -1117,13 +1118,13 @@ func GetFrequencyEndDay(currDate time.Time, frequency string) (endDate time.Time
 // 小于0,代表右侧是高频(例:左侧:周度,右侧:日度)
 func CheckFrequency(leftFrequency, rightFrequency string) int {
 	frequencyMap := map[string]int{
-		"年度":  0,
+		"年度":   0,
 		"半年度": 1,
-		"季度":  2,
-		"月度":  3,
-		"旬度":  4,
-		"周度":  5,
-		"日度":  6,
+		"季度":   2,
+		"月度":   3,
+		"旬度":   4,
+		"周度":   5,
+		"日度":   6,
 	}
 
 	return frequencyMap[leftFrequency] - frequencyMap[rightFrequency]
@@ -1256,3 +1257,34 @@ func DateConvMysqlConvMongo(dateCon string) string {
 	}
 	return cond
 }
+
+// GenerateEdbCodeMap 当前已经生成的指标编码map(暂时不做定时数据清理了,因为数据不大,我们至少每个月会重启一次,所以暂时不做定时数据清理)
+var GenerateEdbCodeMap = map[string]bool{}
+
+// GenerateEdbCode
+// @Description:  生成指标编码
+// @author: Roc
+// @datetime 2024-06-05 09:49:53
+// @param num int
+// @return edbCode string
+// @return err error
+func GenerateEdbCode(num int) (edbCode string, err error) {
+	if num >= 10 {
+		err = errors.New("指标编码生成失败,请重新生成")
+		return
+	}
+
+	// 4位随机数
+	randStr := GetRandDigit(4)
+	// 年月日时分秒+4位随机数
+	edbCode = `C` + time.Now().Format(FormatShortDateTimeUnSpace) + randStr
+
+	if _, ok := GenerateEdbCodeMap[edbCode]; ok {
+		num++
+		edbCode, err = GenerateEdbCode(num)
+	}
+
+	GenerateEdbCodeMap[edbCode] = true
+
+	return
+}