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.]+") var symbolReg = regexp.MustCompile("[%%﹪!!]") var YMD_Reg1 = regexp.MustCompile("(\\d{4}年\\d{1,2}月\\d{1,2}日)") var YMD_Reg2 = regexp.MustCompile("(\\d{4}[-]\\d{1,2}[-]\\d{1,2})") var HMS_Reg1 = regexp.MustCompile("(\\d{1,2}时\\d{1,2}分\\d{1,2}秒)") var HMS_Reg2 = regexp.MustCompile("(\\d{1,2}[:]\\d{1,2}[:]\\d{1,2})") func fillPrefix(s string) string { if len(s) == 2 { return s } else if len(s) == 1 { return "0" + s } else { return "00" } } // 获取年月日 func convertYMD(ymd string) string { if ymd1 := YMD_Reg1.FindString(ymd); ymd1 != "" { ymd1 = strings.ReplaceAll(ymd1, "年", "-") ymd1 = strings.ReplaceAll(ymd1, "月", "-") ymd1 = strings.ReplaceAll(ymd1, "日", "") if arr := strings.Split(ymd1, "-"); len(arr) == 3 { y, m, d := arr[0], arr[1], arr[2] return y + "-" + fillPrefix(m) + "-" + fillPrefix(d) } else { return "" } } if ymd2 := YMD_Reg2.FindString(ymd); ymd2 != "" { if arr := strings.Split(ymd2, "-"); len(arr) == 3 { y, m, d := arr[0], arr[1], arr[2] return y + "-" + fillPrefix(m) + "-" + fillPrefix(d) } else { return "" } } return "" } // 获取时分秒 func convertHMS(hms string) string { if hms1 := HMS_Reg1.FindString(hms); hms1 != "" { hms1 = strings.ReplaceAll(hms1, "时", ":") hms1 = strings.ReplaceAll(hms1, "分", ":") hms1 = strings.ReplaceAll(hms1, "秒", "") if arr := strings.Split(hms1, ":"); len(arr) == 3 { h, m, s := arr[0], arr[1], arr[2] return fillPrefix(h) + ":" + fillPrefix(m) + ":" + fillPrefix(s) } else { return "00:00:00" } } if hms2 := HMS_Reg2.FindString(hms); hms2 != "" { arr := strings.Split(hms2, ":") h, m, s := "", "", "" if len(arr) == 3 { h, m, s = arr[0], arr[1], arr[2] } else if len(arr) == 2 { h, m, s = arr[0], arr[1], "00" } else { return "00:00:00" } return fillPrefix(h) + ":" + fillPrefix(m) + ":" + fillPrefix(s) } return "00:00:00" } // 清洗时间 func CleanTime(st string) int64 { if st == "" || st == "无" { return 0 } st = strings.ReplaceAll(st, ":", ":") ymd, hms := convertYMD(st), convertHMS(st) if ymd == "" { return 0 } st = ymd + " " + hms t, _ := time.ParseInLocation(ul.TimeLayout, st, time.Local) return t.Unix() } // 清洗折扣率 func CleanDiscount(str string) float64 { str = fieldReg1.ReplaceAllString(str, "") if str == "" || str == "无" { return 0.0 } 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 symbolReg.MatchString(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 }