123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- 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
- }
- }
- }
|