123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- package main
- import (
- "fmt"
- qu "qfw/util"
- "regexp"
- "strings"
- )
- var cityEndReg *regexp.Regexp = regexp.MustCompile("(区|县|市)$")
- func getCheckDataCity(tmp map[string]interface{},update_check *map[string]interface{}) {
- area := qu.ObjToString(tmp["area"])
- city := qu.ObjToString(tmp["city"])
- district := qu.ObjToString(tmp["district"])
- buyer := qu.ObjToString(tmp["buyer"])
- if(district!="" && city!="" && area!="" && area!="全国") || buyer=="" {
- //标准城市-校验
- rdata := standardCheckCity(area,city,district)
- if len(rdata)>0 {
- umap:=updateLogging(tmp,rdata,"标准信息")
- copyUpdateData(umap,update_check)
- }
- return
- }
- rdata := cityMarshal(tmp) //企业表-补城市
- if len(rdata) > 0 {
- new_area,new_city,new_district := area,city,district
- if rdata["area"]!="" {
- new_area = qu.ObjToString(rdata["area"])
- }
- if rdata["city"]!="" {
- new_city = qu.ObjToString(rdata["city"])
- }
- if rdata["district"]!="" {
- new_district = qu.ObjToString(rdata["district"])
- }
- umap:=updateLogging(tmp,rdata,"企业信息")
- n_rdata := standardCheckCity(new_area,new_city,new_district)
- if len(n_rdata)>0 {
- for rk, rv := range n_rdata {
- umap[rk] = rv
- umap["modifycheck"].(map[string]interface{})[rk] = fmt.Sprintf("企业标准信息~%s~%s",qu.ObjToString(tmp[rk]),rv)
- }
- }
- copyUpdateData(umap,update_check)
- }else {
- n_rdata := standardCheckCity(area,city,district)
- if len(n_rdata)>0 {
- umap:=updateLogging(tmp,n_rdata,"标准信息")
- copyUpdateData(umap,update_check)
- }
- }
- }
- //企业表校验
- func cityMarshal(data map[string]interface{}) map[string]string {
- buyer := qu.ObjToString(data["buyer"])
- bidarea := qu.ObjToString(data["area"])
- bidcity := qu.ObjToString(data["city"])
- biddistrict := qu.ObjToString(data["district"])
- rdata := make(map[string]string)
- query_name := map[string]interface{}{
- "company_name":buyer,
- }
- tmp := qy_mgo.FindOne(qy_coll_name, query_name)
- if tmp == nil || len(tmp)<2 {
- return rdata
- }
- company_code := fmt.Sprint(tmp["company_code"])
- if len(company_code) > 5 {
- province_city_district:= qy_mgo.FindOne("address", map[string]interface{}{
- "code":company_code[:6],
- })
- remarks := fmt.Sprint((province_city_district)["Remarks"])
- if remarks == "" || remarks == "废除" || remarks == "已作废" {
- } else if province_city_district != nil {
- codeprovince := qu.ObjToString((province_city_district)["province"])
- codecity := qu.ObjToString((province_city_district)["city"])
- codedistrict := qu.ObjToString((province_city_district)["district"])
- if bidarea == "" || bidarea == "全国" {
- if codeprovince != "" {
- rdata["area"] = codeprovince
- if codecity != "" && codecity != codeprovince {
- rdata["city"] = codecity
- if codedistrict != "" && codedistrict != codecity {
- rdata["district"] = codedistrict
- }
- }
- }
- } else if bidcity == "" && codecity != "" && bidarea == codeprovince {
- if codecity != bidarea {
- rdata["city"] = codecity
- if codedistrict != "" && codecity != codedistrict {
- rdata["district"] = codedistrict
- }
- }
- } else if biddistrict == "" && codedistrict != "" && bidarea == codeprovince && codecity == bidcity {
- rdata["district"] = codedistrict
- }
- return rdata
- }
- }
- entprovince := qu.ObjToString(tmp["company_area"])
- //entprovince = strings.TrimRight(entprovince, "省")
- //entprovince = strings.TrimRight(entprovince, "市")
- entcity := qu.ObjToString(tmp["company_city"])
- entdistrict := qu.ObjToString(tmp["company_district"])
- //新增特殊处理-港澳台数据
- if bidarea == "" || bidarea=="香港" || bidarea=="澳门" || bidarea=="台湾" || bidarea == "全国" {
- if entprovince != "" {
- rdata["area"] = entprovince
- if entcity != "" && entcity != entprovince {
- rdata["city"] = entcity
- if entdistrict != "" && entdistrict != entcity {
- rdata["district"] = entdistrict
- }
- }
- }
- } else if bidcity == "" && entcity != "" && entprovince == bidarea {
- rdata["city"] = entcity
- if entdistrict != "" && entcity != entdistrict {
- rdata["district"] = entdistrict
- }
- } else if biddistrict == "" && entdistrict != "" && entprovince == bidarea && bidcity == entcity {
- rdata["district"] = entdistrict
- }
- return rdata
- }
- //标准校验
- func standardCheckCity(area string,city string,district string) map[string]string{
- rdata := make(map[string]string,0)
- if area=="香港"||area=="澳门"||area=="台湾" || (area=="全国"&&(city==""||district=="")) {
- return rdata
- }
- //第一步:区校验
- if district!="" {
- districtArr := DistrictDict[district]
- if districtArr==nil {//涉及了 个别别名相关的数据
- trim_arr := aliasDataDistrict(district)//拆分后缀
- if len(trim_arr)>0 {
- for _,alias_district := range trim_arr {
- alias_districtArr := DistrictDict[alias_district]
- for _,v:=range alias_districtArr{
- if city == v.C_Name && area == v.P_Name {
- rdata["district"] = alias_district
- return rdata
- }
- }
- }
- }
- rdata["district"] = ""
- }else {
- isTrue := false
- for _,v:=range districtArr{
- if city == v.C_Name && area == v.P_Name {
- isTrue = true
- break
- }
- }
- if isTrue { //完全匹配
- return rdata
- }else { //未完全匹配
- if len(districtArr)==1 {
- rdata["area"] = districtArr[0].P_Name
- rdata["city"] = districtArr[0].C_Name
- rdata["district"] = districtArr[0].D_Name
- return rdata
- }else {
- rdata["district"] = ""
- }
- }
- }
- }
- //第二步:区校验-失败 市-校验
- if city != "" {
- cityArr := CityDict[city]
- if cityArr==nil {
- //把市当成区,匹配三级 - 存在优化空间- city:郑州 别名
- districtArr := DistrictDict[city]
- for _,v:=range districtArr{
- if city == v.C_Name && area == v.P_Name {
- rdata["area"] = districtArr[0].P_Name
- rdata["city"] = districtArr[0].C_Name
- rdata["district"] = districtArr[0].D_Name
- return rdata
- }
- }
- rdata["city"] = ""
- }else {
- isTrue := false
- for _,v:=range cityArr{
- if area == v.P_Name {
- isTrue = true
- break
- }
- }
- if isTrue { //完全匹配
- return rdata
- }else { //未完全匹配
- if len(cityArr)==1 {
- rdata["area"] = cityArr[0].P_Name
- rdata["city"] = cityArr[0].C_Name
- rdata["district"] = ""
- return rdata
- }else {
- rdata["city"] = ""
- }
- }
- }
- }
- //第三步:省份校验
- if ProvinceDict[area]==nil {
- rdata["area"] = "全国"
- rdata["city"] = ""
- rdata["district"] = ""
- }
- return rdata
- }
- //更新日志
- func updateLogging(tmp map[string]interface{},rdata map[string]string,desc string) map[string]interface{} {
- umap := make(map[string]interface{})
- if tmp["modifycheck"] == nil {
- umap["modifycheck"] = make(map[string]interface{})
- } else {
- umap["modifycheck"] = tmp["modifycheck"]
- }
- for rk, rv := range rdata {
- umap[rk] = rv
- umap["modifycheck"].(map[string]interface{})[rk] = fmt.Sprintf("%s~%s~%s",desc,qu.ObjToString(tmp[rk]),rv)
- }
- return umap
- }
- func copyUpdateData(tmp map[string]interface{},update_check *map[string]interface{}) {
- for k,v := range tmp {
- (*update_check)[k] = v
- }
- }
- //拆分三级县
- func aliasDataDistrict(district string) []string {
- arr :=[]string{}
- if cityEndReg.MatchString(district) {
- str := cityEndReg.FindString(district)
- strings.TrimRight(district, str)
- if str=="县"{
- arr = append(arr,fmt.Sprintf("%s区",strings.TrimRight(district, str)))
- arr = append(arr,fmt.Sprintf("%s市",strings.TrimRight(district, str)))
- }else if str=="区"{
- arr = append(arr,fmt.Sprintf("%s县",strings.TrimRight(district, str)))
- arr = append(arr,fmt.Sprintf("%s市",strings.TrimRight(district, str)))
- } else if str=="市"{
- arr = append(arr,fmt.Sprintf("%s县",strings.TrimRight(district, str)))
- arr = append(arr,fmt.Sprintf("%s区",strings.TrimRight(district, str)))
- }else {
- }
- }else { //未找到 district- 区县市 例: district : 金水
- arr = append(arr,fmt.Sprintf("%s区",district))
- arr = append(arr,fmt.Sprintf("%s县",district))
- arr = append(arr,fmt.Sprintf("%s市",district))
- }
- return arr
- }
|