Compare commits
2 Commits
bc6dce21ee
...
6dd392f673
| Author | SHA1 | Date | |
|---|---|---|---|
| 6dd392f673 | |||
| 8d5da9d88e |
@@ -3862,40 +3862,63 @@ func buildLeasingRiskAssessment(apiData map[string]interface{}, log *zap.Logger)
|
||||
assessment[fieldNameNight] = fmt.Sprintf("%s/%s", idNightAllnum, cellNightAllnum)
|
||||
}
|
||||
|
||||
// 判断风险标识:如果有申请记录,设置为高风险
|
||||
hasApplication := false
|
||||
for _, apiPeriod := range periodMap {
|
||||
fieldName := fmt.Sprintf("alc_%s_id_allnum", apiPeriod)
|
||||
// 尝试多种类型:string、int、float64
|
||||
if allnum, ok := jrzq1d09Map[fieldName].(string); ok && allnum != "" && allnum != "0" {
|
||||
hasApplication = true
|
||||
break
|
||||
} else if allnum, ok := jrzq1d09Map[fieldName].(int); ok && allnum > 0 {
|
||||
hasApplication = true
|
||||
break
|
||||
} else if allnum, ok := jrzq1d09Map[fieldName].(float64); ok && allnum > 0 {
|
||||
hasApplication = true
|
||||
break
|
||||
}
|
||||
// 也检查cell字段
|
||||
fieldNameCell := fmt.Sprintf("alc_%s_cell_allnum", apiPeriod)
|
||||
if allnum, ok := jrzq1d09Map[fieldNameCell].(string); ok && allnum != "" && allnum != "0" {
|
||||
hasApplication = true
|
||||
break
|
||||
} else if allnum, ok := jrzq1d09Map[fieldNameCell].(int); ok && allnum > 0 {
|
||||
hasApplication = true
|
||||
break
|
||||
} else if allnum, ok := jrzq1d09Map[fieldNameCell].(float64); ok && allnum > 0 {
|
||||
hasApplication = true
|
||||
break
|
||||
// 仅使用近12月(Last12,对应 m12)的总次数作为判断依据,
|
||||
// 因为近3月等短周期已经被近12月统计包含,避免重复放大
|
||||
totalCount := 0
|
||||
|
||||
idKey12 := "alc_m12_id_allnum"
|
||||
cellKey12 := "alc_m12_cell_allnum"
|
||||
|
||||
// 身份证维度(近12月)
|
||||
if v, ok := jrzq1d09Map[idKey12]; ok {
|
||||
switch vv := v.(type) {
|
||||
case string:
|
||||
if vv != "" && vv != "0" {
|
||||
if parsed, err := strconv.Atoi(vv); err == nil {
|
||||
totalCount += parsed
|
||||
}
|
||||
}
|
||||
case float64:
|
||||
if vv > 0 {
|
||||
totalCount += int(vv)
|
||||
}
|
||||
case int:
|
||||
if vv > 0 {
|
||||
totalCount += vv
|
||||
}
|
||||
}
|
||||
}
|
||||
// 风险标识:如果有申请记录,风险较高;如果没有申请记录,风险较低
|
||||
// 注意:riskFlag的值:0=未查得,1=低风险,2=高风险
|
||||
if hasApplication {
|
||||
assessment["riskFlag"] = 2 // 有申请记录,风险较高
|
||||
|
||||
// 手机号维度(近12月)
|
||||
if v, ok := jrzq1d09Map[cellKey12]; ok {
|
||||
switch vv := v.(type) {
|
||||
case string:
|
||||
if vv != "" && vv != "0" {
|
||||
if parsed, err := strconv.Atoi(vv); err == nil {
|
||||
totalCount += parsed
|
||||
}
|
||||
}
|
||||
case float64:
|
||||
if vv > 0 {
|
||||
totalCount += int(vv)
|
||||
}
|
||||
case int:
|
||||
if vv > 0 {
|
||||
totalCount += vv
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 根据近12月总申请次数设置风险标识:
|
||||
// - totalCount == 0 -> 0 无风险 / 未查得
|
||||
// - 0 < totalCount <= 10 -> 2 低风险(有少量租赁申请)
|
||||
// - totalCount > 10 -> 1 高风险(租赁申请很多)
|
||||
if totalCount == 0 {
|
||||
assessment["riskFlag"] = 0
|
||||
} else if totalCount <= 10 {
|
||||
assessment["riskFlag"] = 2
|
||||
} else {
|
||||
assessment["riskFlag"] = 1 // 无申请记录,风险较低
|
||||
assessment["riskFlag"] = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,20 +84,25 @@ func TestEncryptWithInvalidKey(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDecryptWithInvalidData(t *testing.T) {
|
||||
key := "1234567890abcdef1234567890abcdef"
|
||||
key := "af4ca0098e6a202a5c08c413ebd9fd62"
|
||||
|
||||
// 测试无效的加密数据
|
||||
invalidData := []string{
|
||||
"", // 空数据
|
||||
"invalid_base64", // 无效的Base64
|
||||
"dGVzdA==", // 有效的Base64但不是AES加密数据
|
||||
"ZmJIKRQz6j+IboulkSfq0g==",
|
||||
"qBijvRmmm3bbLEdaCMw2XvHc8SDq3oGh6lD6BwELyhU=",
|
||||
"ITtZBkPMZQ88UTHWJuWjSA==",
|
||||
}
|
||||
|
||||
for _, data := range invalidData {
|
||||
_, err := Decrypt(data, key)
|
||||
decrypted, err := Decrypt(data, key)
|
||||
if err == nil {
|
||||
t.Errorf("使用无效数据 %s 应该返回错误", data)
|
||||
}
|
||||
fmt.Println("data: ", data)
|
||||
fmt.Println("decrypted: ", decrypted)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user