소스 검색

清洗方法

zhengkun 8 달 전
부모
커밋
c0b2e804c4
4개의 변경된 파일70개의 추가작업 그리고 3개의 파일을 삭제
  1. 66 0
      clean/c_time.go
  2. 1 3
      extract/extension.go
  3. 1 0
      go.mod
  4. 2 0
      go.sum

+ 66 - 0
clean/c_time.go

@@ -2,13 +2,79 @@ package clean
 
 import (
 	"data_ai/ul"
+	"github.com/shopspring/decimal"
+	qu "jygit.jydev.jianyu360.cn/data_processing/common_utils"
+	"regexp"
+	"strings"
 	"time"
 )
 
+var numReg = regexp.MustCompile("[0-9.]+")
+
+// 清洗时间
 func CleanTime(st string) int64 {
 	if st == "" {
 		return 0
 	}
+	//YYYY-MM-DD HH:MM:SS
 	t, _ := time.ParseInLocation(ul.TimeLayout, st, time.Local)
 	return t.Unix()
 }
+
+// 清洗折扣率
+func CleanDiscount(str string) float64 {
+	/*
+		上浮率:20%
+		下浮率:20%
+		折扣率:20%
+	*/
+	if biddiscount := RateToFloat(str); biddiscount > 0.0 {
+		baseCount := 1.0
+		num1 := decimal.NewFromFloat(baseCount)
+		num2 := decimal.NewFromFloat(biddiscount)
+		if strings.Contains(str, "上浮") {
+			decimalValue := num1.Add(num2)
+			res, _ := decimalValue.Float64()
+			return res
+		} else if strings.Contains(str, "下浮") {
+			decimalValue := num1.Sub(num2)
+			res, _ := decimalValue.Float64()
+			return res
+		} else {
+			return biddiscount
+		}
+	}
+	return 0.0
+}
+
+// 转换系数
+func RateToFloat(str string) float64 {
+	if num0 := qu.Float64All(numReg.FindString(str)); num0 > 0.0 {
+		num1 := decimal.NewFromFloat(100.0)
+		num2 := decimal.NewFromFloat(num0)
+		if strings.Contains(str, "%") || strings.Contains(str, "%") {
+			decimalValue := num2.Div(num1)
+			res, _ := decimalValue.Float64()
+			if res < 1.0 {
+				return res
+			} else {
+				return 0.0
+			}
+		} else {
+			if num0 < 1.0 {
+				return num0
+			} else if num0 == 1 {
+				return 0.0
+			} else {
+				decimalValue := num2.Div(num1)
+				res, _ := decimalValue.Float64()
+				if res < 1.0 {
+					return res
+				} else {
+					return 0.0
+				}
+			}
+		}
+	}
+	return 0.0
+}

+ 1 - 3
extract/extension.go

@@ -138,8 +138,7 @@ func MergeInfo(infos []map[string]interface{}) map[string]interface{} {
 
 // 强制逻辑判断数据
 func ForcedLogicDecideInfo(f_data map[string]interface{}) {
-	//原则大模型
-	//多单位不能一致
+	//多单位不能一致,原则大模型
 	s_buyer := qu.ObjToString(f_data["s_buyer"])
 	s_winner := qu.ObjToString(f_data["s_winner"])
 	if s_buyer == s_winner && s_buyer != "" {
@@ -160,5 +159,4 @@ func ForcedLogicDecideInfo(f_data map[string]interface{}) {
 			f_data["s_agency"] = ""
 		}
 	}
-
 }

+ 1 - 0
go.mod

@@ -59,6 +59,7 @@ require (
 	github.com/sagikazarmark/locafero v0.4.0 // indirect
 	github.com/sagikazarmark/slog-shim v0.1.0 // indirect
 	github.com/shabbyrobe/xmlwriter v0.0.0-20200208144257-9fca06d00ffa // indirect
+	github.com/shopspring/decimal v1.4.0 // indirect
 	github.com/sirupsen/logrus v1.9.3 // indirect
 	github.com/sourcegraph/conc v0.3.0 // indirect
 	github.com/spf13/afero v1.11.0 // indirect

+ 2 - 0
go.sum

@@ -182,6 +182,8 @@ github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAm
 github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
 github.com/shabbyrobe/xmlwriter v0.0.0-20200208144257-9fca06d00ffa h1:2cO3RojjYl3hVTbEvJVqrMaFmORhL6O06qdW42toftk=
 github.com/shabbyrobe/xmlwriter v0.0.0-20200208144257-9fca06d00ffa/go.mod h1:Yjr3bdWaVWyME1kha7X0jsz3k2DgXNa1Pj3XGyUAbx8=
+github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
+github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
 github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
 github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=