package main import ( "fmt" "log" "reflect" "strconv" "strings" "time" "unicode/utf8" "go.mongodb.org/mongo-driver/bson/primitive" "gopkg.in/mgo.v2/bson" util "jygit.jydev.jianyu360.cn/data_processing/common_utils" "jygit.jydev.jianyu360.cn/data_processing/common_utils/redis" ) // @Description 字段验证、处理 // @Author J 2022/10/8 17:16 func verifyF(f string, v interface{}, tmp1 interface{}) (interface{}, bool) { tmp := tmp1.(map[string]interface{}) stype := util.ObjToString(tmp["stype"]) vt := reflect.TypeOf(v).String() if strings.Contains(vt, stype) { switch stype { case "string": v1 := util.ObjToString(v) lens := util.IntAll(tmp["length"]) if tmp["intercept"].(bool) { if utf8.RuneCountInString(v1) > lens { return string(([]rune(v1))[:lens]), true } else { return v1, false } } else { if utf8.RuneCountInString(v1) > lens { return "", true } else { return v1, false } } case "float": v1 := util.Float64All(v) min := util.Float64All(tmp["mix"]) max := util.Float64All(tmp["max"]) if min != 0 && v1 < min { return nil, true } if max != 0 && v1 >= max { return nil, true } dm := util.IntAll(tmp["decimal"]) //小数点位数 v2, err := util.FormatFloat(v1, dm) if err != nil { return nil, true } return v2, false default: break } } return nil, true } func IsMarkInterfaceArr(t interface{}) []string { sub_list := []string{} if list_3, ok_3 := t.([]string); ok_3 { sub_list = list_3 return sub_list } if list_1, ok_1 := t.(primitive.A); ok_1 { sub_list = util.ObjArrToStringArr(list_1) } else { if list_2, ok_2 := t.([]interface{}); ok_2 { sub_list = util.ObjArrToStringArr(list_2) } } return sub_list } func IsMarkInterfaceMap(t interface{}) []map[string]interface{} { p_list := []map[string]interface{}{} if yl_list_1, ok_1 := t.(primitive.A); ok_1 { p_list = util.ObjArrToMapArr(yl_list_1) } else { if yl_list_2, ok_2 := t.([]interface{}); ok_2 { p_list = util.ObjArrToMapArr(yl_list_2) } } return p_list } //获取企业的nameId //GetRedisKey 获取entname的key func GetRedisKey(name string) string { return fmt.Sprintf("nameId_%s", name) } // func GetNameId(name string) string { nameId := redis.GetStr("other", GetRedisKey(name)) if nameId != "" { return nameId } info := MysqlTool.FindOne("dws_f_ent_baseinfo", map[string]interface{}{"name": name}, "name_id", "") if info != nil && (*info)["name_id"] != nil { name_id := util.ObjToString((*info)["name_id"]) //存储redis redis.Put("other", GetRedisKey(name), name_id, 600) return name_id } else { return "" } } func GetNameIdByCompanyId(comapnyId string) string { info := MysqlTool.FindOne("dws_f_ent_baseinfo", map[string]interface{}{"company_id": comapnyId}, "name_id", "") if info != nil && (*info)["name_id"] != nil { return util.ObjToString((*info)["name_id"]) } else { return "" } } // 转换时间 func TransferDateTimeInfo(tmp map[string]interface{}, info *map[string]interface{}, keys []string) { for _, v := range keys { if t := util.Int64All(tmp[v]); t > 0 { key := "d_" + v (*info)[key] = util.FormatDateByInt64(&t, util.Date_Full_Layout) } } } // 转换金额费用 func TransferMoneyRateInfo(tmp map[string]interface{}, info *map[string]interface{}, keys []string, maxs []float64) { for k, v := range keys { key := "f_" + v if value, b := CleanFloat64(util.Float64All(tmp[v]), maxs[k]); tmp[v] != nil && b { (*info)[key] = value } } } // 通用长度清洗 func CleanLength(name string, l int) string { if l == -1 { return name } new_name := name if utf8.RuneCountInString(name) > l { new_name = string(([]rune(new_name))[:l]) } return new_name } // 通用浮点清洗 func CleanFloat64(value float64, max float64) (float64, bool) { if value <= max { return value, true } return float64(0), false } func GetObjectId() { sid := bson.NewObjectIdWithTime(time.Unix(1700537100, 0)) eid := bson.NewObjectIdWithTime(time.Unix(1700580300, 0)) log.Println(sid) log.Println(eid) return } //判断是否varchar类型超过字符串 func VarcharCheck(str string, length int) bool { return utf8.RuneCountInString(str) > length } //获取每天0点数据 func GetCurTimePiInfo() (string, string) { now := time.Now() start := time.Date(now.Year(), now.Month(), now.Day()-1, 0, 0, 0, 0, time.Local).Unix() end := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).Unix() gteid := strconv.FormatInt(start, 16) + "0000000000000000" ltid := strconv.FormatInt(end, 16) + "0000000000000000" log.Println("curtime:", gteid, ltid, "==", start, end) return gteid, ltid }