xingzai vor 1 Jahr
Ursprung
Commit
9cef6601a5
2 geänderte Dateien mit 124 neuen und 34 gelöschten Zeilen
  1. 123 33
      controllers/company_user.go
  2. 1 1
      services/aliyun.go

+ 123 - 33
controllers/company_user.go

@@ -1945,7 +1945,16 @@ func (this *CompanyUserController) EditUser() {
 		}
 	}
 	//if wxUser.BusinessCardUrl != req.BusinessCardUrl && utils.RunMode == "release" {
+
 	if wxUser.BusinessCardUrl != req.BusinessCardUrl {
+		// 获取图片识别客户名称的配置
+		crmConfig, err := company.GetConfigDetailByCode("card_recognition_company_name")
+		if err != nil {
+			br.Msg = "获取配置失败"
+			br.ErrMsg = "获取配置失败"
+			br.IsSendEmail = false
+			return
+		}
 		// 获取图片识别手机号的配置
 		crmConfig2, err := company.GetConfigDetailByCode("card_recognition_tel")
 		if err != nil {
@@ -1954,45 +1963,85 @@ func (this *CompanyUserController) EditUser() {
 			br.IsSendEmail = false
 			return
 		}
+
+		//companyName := wxUser.CompanyName
+		//if companyName == "" {
+		companyInfo, err := company.GetCompanyById(req.CompanyId)
+		if err != nil {
+			br.Msg = "查找客户失败"
+			br.ErrMsg = "查找客户失败,err:" + err.Error()
+			return
+		}
+		companyName := companyInfo.CompanyName
+		//}
+		companyName = utils.TrimStr(companyName)
+		tmpCompanyNameList, err := elastic.Analyze(companyName)
+		if err != nil {
+			br.Msg = "添加失败"
+			br.ErrMsg = "客户名称分词失败,Err:" + err.Error()
+			return
+		}
+		//公司名称切片
+		analyzeNameList := []string{companyName}
+		for _, v := range tmpCompanyNameList {
+			if v == "" {
+				continue
+			}
+			ignoreStrs := []string{"", "有限", "投资", "资本", "管理", "贸易", "资产", "公司", "股份", "集团", "有限公司"}
+			if !strings.Contains(strings.Join(ignoreStrs, ","), v) && utf8.RuneCount([]byte(v)) > 1 {
+				//不在上面的过滤字里面,且切出来的字符大于1位
+				analyzeNameList = append(analyzeNameList, v)
+			}
+		}
+
+		//名片识别出来的客户名称切片
+		companyNameSlice := make([]string, 0)
 		card, err := services.GetBusinessCard(req.BusinessCardUrl)
 		if err != nil {
 			br.Msg = "名片识别失败"
 			br.ErrMsg = "名片识别失败,Err:" + err.Error()
 			return
 		}
-		if card.Errno != 0 {
-			br.Msg = "您上传了非名片图片,请重新上传"
-			br.ErrMsg = "名片识别失败,ErrMsg:" + card.ErrorMsg + ";errCode:" + strconv.Itoa(card.Errno)
-			return
-		}
+		//if card.Errno != 0 {
+		//	br.Msg = "您上传了非名片图片,请重新上传"
+		//	br.ErrMsg = "名片识别失败,ErrMsg:" + card.ErrorMsg + ";errCode:" + strconv.Itoa(card.Errno)
+		//	return
+		//}
 		//var mobileStr string
 		//for _, v := range card.WordsResult {
 		//	mobileStr += v.Words + ","
 		//}
-		mobileStr := strings.Join(card.WordsResult.MOBILE, ",")
 		isFlag := false
-		//if req.MobileOne != "" {
-		//	if strings.Contains(mobileStr, req.MobileOne) {
-		//		isFlag = true
-		//	} else {
-		//		isFlag = false
-		//	}
-		//}
-		//if isFlag == false && req.MobileTwo != "" {
-		//	if strings.Contains(mobileStr, req.MobileTwo) {
-		//		isFlag = true
-		//	} else {
-		//		isFlag = false
-		//	}
-		//}
-		if req.MobileOne != "" && strings.Contains(mobileStr, req.MobileOne) {
-			isFlag = true
-		}
-		if req.MobileTwo != "" && strings.Contains(mobileStr, req.MobileTwo) {
-			isFlag = true
+		if len(card.WordsResult.MOBILE) > 0 {
+			mobileStr := strings.Join(card.WordsResult.MOBILE, ",")
+			//if req.MobileOne != "" {
+			//	if strings.Contains(mobileStr, req.MobileOne) || mobileStr == "" {
+			//		isFlag = true
+			//	} else {
+			//		isFlag = false
+			//	}
+			//}
+			//
+			//if isFlag == false && req.MobileTwo != "" {
+			//	if strings.Contains(mobileStr, req.MobileTwo) {
+			//		isFlag = true
+			//	} else {
+			//		isFlag = false
+			//	}
+			//}
+			if req.MobileOne != "" && strings.Contains(mobileStr, req.MobileOne) {
+				isFlag = true
+			}
+			if req.MobileTwo != "" && strings.Contains(mobileStr, req.MobileTwo) {
+				isFlag = true
+			}
+			//如果百度识别出来了客户名称,那么将识别出来的客户名称添加到待校验客户名称切片中
+			if len(card.WordsResult.COMPANY) > 0 && card.WordsResult.COMPANY[0] != "" {
+				companyNameSlice = card.WordsResult.COMPANY
+			}
 		}
-
-		if !isFlag {
+		//如果百度未识别出来手机号或者公司名称,那么进行阿里识别
+		if !isFlag || (len(companyNameSlice) == 0 && crmConfig.ConfigValue == "true") {
 			//阿里云识别
 			aliyunResult, errMsg, err := services.AliyunOcrBusinessCard(req.BusinessCardUrl)
 			if err != nil {
@@ -2009,21 +2058,62 @@ func (this *CompanyUserController) EditUser() {
 				br.Msg = errMsg
 				return
 			}
-
-			mobileStr := strings.Join(aliyunResult.TelCell, ",")
-			if req.MobileOne != "" {
-				if strings.Contains(mobileStr, req.MobileOne) {
-					isFlag = true
+			//如果百度没有识别出来手机号,那么还需要阿里识别出来的手机号校验下
+			if !isFlag {
+				if len(aliyunResult.TelCell) > 0 {
+					mobileStr := strings.Join(aliyunResult.TelCell, ",")
+					if req.MobileOne != "" {
+						if strings.Contains(mobileStr, req.MobileOne) {
+							isFlag = true
+						} else {
+							isFlag = false
+						}
+					}
 				} else {
-					isFlag = false
+					isFlag = true
 				}
 			}
+			//如果阿里云识别出来了客户名称,那么将识别出来的客户名称添加到待校验客户名称切片中
+			if len(aliyunResult.Company) > 0 {
+				companyNameSlice = append(companyNameSlice, aliyunResult.Company...)
+			}
 		}
 
 		if !isFlag && crmConfig2.ConfigValue == "true" {
 			br.Msg = "名片手机号与所填手机号不匹配,请重新填写"
+			br.IsSendEmail = false
 			return
 		}
+
+		//校验识别出来的名片名称与传入的客户名称是否一致
+		if len(companyNameSlice) > 0 && crmConfig.ConfigValue == "true" {
+			isCompanyNameFlag := false //是否成功匹配客户名称
+			//遍历识别出来的客户名称,然后与系统的客户名称做匹配(识别出来的名称包含系统名称的话,那么标记成功匹配)
+			for _, tmpCompanyName := range companyNameSlice {
+				//空串不处理
+				if companyName == "" {
+					continue
+				}
+				for _, analyzeName := range analyzeNameList {
+					//如果分词出来的公司名称正好在识别出来的公司名称里面,那么就认为校验通过了
+					if strings.Contains(tmpCompanyName, analyzeName) {
+						isCompanyNameFlag = true
+						break
+					}
+				}
+
+				if isCompanyNameFlag {
+					break
+				}
+
+			}
+			//如果没有匹配到客户名称,那么就返回报错
+			if !isCompanyNameFlag {
+				br.Msg = "名片中客户名称不一致"
+				br.IsSendEmail = false
+				return
+			}
+		}
 	}
 
 	//UPDATE  wx_user

+ 1 - 1
services/aliyun.go

@@ -27,7 +27,7 @@ const (
 
 var (
 	//文档 https://market.aliyun.com/apimarket/detail/cmapi013591?spm=5176.product-detail.detail.4.6d4f3dcaS0qPFI&endpoint=a3dd145f3865492ba6f02d0c09dd00a1
-	AliyunOcrBusinessCardCode = "6985365523f847c196e8e2222eaba550" // 阿里云OCR名片识别的code
+	AliyunOcrBusinessCardCode = "voampGGl0yGNx5xA1sZdmZlV2EiBct2P" // 阿里云OCR名片识别的code
 )
 
 type OcrItem struct {