diff --git a/internal/domains/api/services/processors/dwbg/dwbg8b4d_processor.go b/internal/domains/api/services/processors/dwbg/dwbg8b4d_processor.go index 3cb9dc9..e19183e 100644 --- a/internal/domains/api/services/processors/dwbg/dwbg8b4d_processor.go +++ b/internal/domains/api/services/processors/dwbg/dwbg8b4d_processor.go @@ -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 } } } diff --git a/internal/infrastructure/external/zhicha/zhicha_test.go b/internal/infrastructure/external/zhicha/zhicha_test.go index 6d58eb2..3ca5e50 100644 --- a/internal/infrastructure/external/zhicha/zhicha_test.go +++ b/internal/infrastructure/external/zhicha/zhicha_test.go @@ -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) } }