123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- package clean
- import (
- "github.com/shopspring/decimal"
- qu "jygit.jydev.jianyu360.cn/data_processing/common_utils"
- "regexp"
- "strings"
- )
- 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) string {
- if st == "" || st == "无" {
- return ""
- }
- st = strings.ReplaceAll(st, ":", ":")
- ymd, hms := convertYMD(st), convertHMS(st)
- if ymd == "" {
- return ""
- }
- st = ymd + " " + hms
- return st
- //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
- }
|