123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- package main
- import (
- "fmt"
- qu "qfw/util"
- "regexp"
- "strings"
- )
- var cityEndReg *regexp.Regexp = regexp.MustCompile("(区|县|市)$")
- var ErrBuyerReg *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 buyer != "" && ErrBuyerReg.MatchString(buyer) && area == "浙江" {
- (*update_check)["area"] = "四川"
- (*update_check)["city"] = "成都市"
- (*update_check)["district"] = ""
- return
- }
- 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
- }
- if rdata["city"] != "" || rdata["district"] != "" {
- return rdata
- }
- }
- }
- entprovince := qu.ObjToString(tmp["company_area"])
- 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 := S_DistrictDict[district]
- if districtArr == nil { //涉及了 个别别名相关的数据
- trim_arr := aliasDataDistrict(district) //拆分后缀
- if len(trim_arr) > 0 {
- for _, alias_district := range trim_arr {
- alias_districtArr := S_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 := S_CityDict[city]
- if cityArr == nil {
- //把市当成区,匹配三级 - 存在优化空间- city:郑州 别名
- districtArr := S_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 S_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
- }
|