package tool import ( "data_ai/ul" qu "jygit.jydev.jianyu360.cn/data_processing/common_utils" "regexp" "strings" "unicode/utf8" ) var ruleReg1 = regexp.MustCompile("^(中部|西部)管道公司$") var ruleReg2 = regexp.MustCompile("^(东北|华南|华北|华中|苏北)[分]?公司$") var ruleReg3 = regexp.MustCompile("([分]?公司)$") // 补充规则大全··· func getReplenishRules(tmp map[string]interface{}, update map[string]interface{}) { for _, v := range ul.ReplensihRules { rule_name := qu.ObjToString(v["rule"]) switch rule_name { case "补充前缀地域": RuleInfo1(tmp, update, v) case "省市映射规则": RuleInfo2(tmp, update, v) case "省市前缀规则": RuleInfo2(tmp, update, v) case "单位全称映射": RuleInfo3(tmp, update, v) case "地域修正规则": RuleInfo4(tmp, update, v) case "省级简称拼接": RuleInfo5(tmp, update, v) case "市级全称拼接": RuleInfo5(tmp, update, v) default: } } } // 核对采购单位 func RuleInfo1(tmp map[string]interface{}, update map[string]interface{}, info map[string]interface{}) { if qu.ObjToString(tmp["buyer"]) != "" || qu.ObjToString(update["buyer"]) != "" { return } site := qu.ObjToString(tmp["site"]) if qu.ObjToString(info[site]) != site { return } area := qu.ObjToString(tmp["area"]) if qu.ObjToString(update["area"]) != "" && qu.ObjToString(update["area"]) != "全国" { area = qu.ObjToString(update["area"]) } buyer := qu.ObjToString(info["buyer"]) if buyer == "" { return } //是否补前缀 prefix := qu.IntAll(info["prefix"]) if prefix == 1 { if area == "" || area == "全国" { update["buyer"] = buyer } else { if area == "内蒙古" { update["buyer"] = buyer + area + "自治区" + "分公司" } else { update["buyer"] = buyer + area + "分公司" } } } else { update["buyer"] = buyer } } // 采购单位补充 func RuleInfo2(tmp map[string]interface{}, update map[string]interface{}, info map[string]interface{}) { area := qu.ObjToString(tmp["area"]) city := qu.ObjToString(tmp["city"]) buyer := qu.ObjToString(tmp["buyer"]) if utf8.RuneCountInString(buyer) != 3 { //简称长度··· return } if u_area := qu.ObjToString(update["area"]); u_area != "" { area = u_area } if u_city := qu.ObjToString(update["city"]); u_city != "" { city = u_city } if u_buyer := qu.ObjToString(update["buyer"]); u_buyer != "" { buyer = u_buyer } rule := qu.ObjToString(info["rule"]) name := qu.ObjToString(info["name"]) if rule == "省市映射规则" { key := area + "-" + city + "-" + buyer if key == name { if s_name := qu.ObjToString(info["s_name"]); s_name != "" { update["buyer"] = s_name } } } if rule == "省市前缀规则" { if buyer == name { if city != "" { update["buyer"] = city + buyer } else if area != "" && area != "全国" { update["buyer"] = area + buyer } else { } } } } // 采购单位映射逻辑 func RuleInfo3(tmp map[string]interface{}, update map[string]interface{}, info map[string]interface{}) { buyer := qu.ObjToString(tmp["buyer"]) if u_buyer := qu.ObjToString(update["buyer"]); u_buyer != "" { buyer = u_buyer } site := qu.ObjToString(tmp["site"]) if site == qu.ObjToString(info["site"]) && buyer == qu.ObjToString(info["buyer"]) { if name := qu.ObjToString(info["name"]); name != "" { update["buyer"] = name } } } // 双向验证地域 func RuleInfo4(tmp map[string]interface{}, update map[string]interface{}, info map[string]interface{}) { flash_key := qu.ObjToString(update["area"]) + "-" + qu.ObjToString(update["city"]) rule_key := qu.ObjToString(tmp["area"]) + "-" + qu.ObjToString(tmp["city"]) + "-" + qu.ObjToString(tmp["district"]) flash := qu.ObjToString(info["s_name"]) rule := qu.ObjToString(info["name"]) if flash_key == flash && rule_key == rule { delete(update, "area") delete(update, "city") delete(update, "district") } } func RuleInfo5(tmp map[string]interface{}, update map[string]interface{}, info map[string]interface{}) { buyer := qu.ObjToString(tmp["buyer"]) if u_buyer := qu.ObjToString(update["buyer"]); u_buyer != "" { buyer = u_buyer } site := qu.ObjToString(tmp["site"]) name := qu.ObjToString(info["name"]) if buyer == "" || site != qu.ObjToString(info["site"]) { return } //规则名字··· rule := qu.ObjToString(info["rule"]) prefix := qu.IntAll(info["prefix"]) if rule == "省级简称拼接" { if ruleReg1.MatchString(buyer) || ruleReg2.MatchString(buyer) { update["buyer"] = name + buyer return } if suffix := ruleReg3.FindString(buyer); suffix != "" { str := strings.TrimSuffix(buyer, suffix) if ul.S_ProvinceDict[str] != nil { update["buyer"] = name + buyer return } } } if rule == "市级全称拼接" { if suffix := ruleReg3.FindString(buyer); suffix != "" { str := strings.TrimSuffix(buyer, suffix) if ul.S_CityDict[str] != nil { if citys := ul.S_CityDict[str]; len(citys) == 1 { if prefix == 1 { update["buyer"] = name + citys[0].P_Name + "有限公司" + buyer } else { update["buyer"] = name + buyer } return } } else { str = str + "市" if ul.S_CityDict[str] != nil { if citys := ul.S_CityDict[str]; len(citys) == 1 { if prefix == 1 { update["buyer"] = name + citys[0].P_Name + "有限公司" + buyer } else { update["buyer"] = name + buyer } return } } } } } } /******************************************* ******************************************* ******************************************* ******************************************* *******************************************/ // 校验金额与折扣率··· func getVerifyBidDiscount(tmp map[string]interface{}, update map[string]interface{}) bool { bidamount, biddiscount := qu.Float64All(tmp["bidamount"]), qu.Float64All(tmp["biddiscount"]) if f1 := qu.Float64All(update["bidamount"]); f1 > 0 { bidamount = f1 } if f2 := qu.Float64All(update["biddiscount"]); f2 > 0 { biddiscount = f2 } if biddiscount > 0 && bidamount > 0 && bidamount == biddiscount { //删除金额 delete(update, "bidamount") if qu.Float64All(tmp["bidamount"]) > 0 { return true } } return false } // 最终单位选取校验 func getTheBestUnit(tmp map[string]interface{}, update_info map[string]interface{}) { buyer := qu.ObjToString(update_info["buyer"]) s_winner := qu.ObjToString(update_info["s_winner"]) agency := qu.ObjToString(update_info["agency"]) if buyer == "" { buyer = qu.ObjToString(tmp["buyer"]) } if s_winner == "" { s_winner = qu.ObjToString(tmp["s_winner"]) } if agency == "" { agency = qu.ObjToString(tmp["agency"]) } if buyer == s_winner && buyer != "" { if strings.Contains(buyer, "公司") { update_info["buyer"] = "" } else { update_info["s_winner"] = "" update_info["winner"] = "" } } if agency != "" { if agency == buyer || agency == s_winner { update_info["agency"] = "" } } } // 可续计数法修正 func getScientificNotation(tmp map[string]interface{}, update map[string]interface{}) { subtype := qu.ObjToString(tmp["subtype"]) bidamount := qu.Float64All(tmp["bidamount"]) budget := qu.Float64All(tmp["budget"]) if u_s := qu.ObjToString(update["subtype"]); u_s != "" { subtype = u_s } if u_b := qu.Float64All(update["bidamount"]); u_b > 0.0 { bidamount = u_b } if u_t := qu.Float64All(update["budget"]); u_t > 0.0 { budget = u_t } e_bidamount := qu.Float64All(tmp["e_bidamount"]) if e_bidamount <= 0.0 { return } //用科学计数法的金额-替换中标金额 if subtype == "合同" || subtype == "中标" || subtype == "成交" || subtype == "单一" { if bidamount > 0.0 && bidamount < 50.0 { update["bidamount"] = e_bidamount } } else { if budget > 0.0 && budget < 50.0 { update["budget"] = e_bidamount } } }