f
This commit is contained in:
@@ -54,10 +54,8 @@ func calcSinanRisk(report map[string]interface{}, apiData map[string]interface{}
|
||||
riskList["groupFraud"] = 1
|
||||
}
|
||||
|
||||
if flxgdea9 := asMap(getMapValue(apiData, "FLXGDEA9")); flxgdea9 != nil {
|
||||
if industryBlacklistHit(xypString(flxgdea9, "level")) {
|
||||
riskList["industryBlacklist"] = 1
|
||||
}
|
||||
if level := flxgdea9Level(apiData); industryBlacklistHit(level) {
|
||||
riskList["industryBlacklist"] = 1
|
||||
}
|
||||
|
||||
riskList["highRiskArea"] = 0
|
||||
@@ -102,10 +100,8 @@ func calcSinanRisk(report map[string]interface{}, apiData map[string]interface{}
|
||||
riskPoint["limitCasesFlag"] = 1
|
||||
}
|
||||
|
||||
if flxgdea9 := asMap(getMapValue(apiData, "FLXGDEA9")); flxgdea9 != nil {
|
||||
if securityLevelHit(xypString(flxgdea9, "level")) {
|
||||
riskPoint["securityRisk"] = 1
|
||||
}
|
||||
if securityLevelHit(flxgdea9Level(apiData)) {
|
||||
riskPoint["securityRisk"] = 1
|
||||
}
|
||||
|
||||
if antiFraudHit(asMap(getMapValue(apiData, "FLXG8B4D"))) {
|
||||
|
||||
@@ -184,11 +184,7 @@ func buildSinanAntiFraudInfo(apiData map[string]interface{}) map[string]interfac
|
||||
|
||||
func buildSinanSecurityInfo(apiData map[string]interface{}) map[string]interface{} {
|
||||
info := emptySecurityInfo()
|
||||
flxg := asMap(getMapValue(apiData, "FLXGDEA9"))
|
||||
if flxg == nil {
|
||||
return info
|
||||
}
|
||||
level := xypString(flxg, "level")
|
||||
level := flxgdea9Level(apiData)
|
||||
if level == "" || level == "0" {
|
||||
return info
|
||||
}
|
||||
@@ -511,10 +507,6 @@ func jrzq1d09Map(apiData map[string]interface{}) map[string]interface{} {
|
||||
return asMap(getMapValue(apiData, "JRZQ1D09"))
|
||||
}
|
||||
|
||||
func flxg7e8fMap(apiData map[string]interface{}) map[string]interface{} {
|
||||
return asMap(getMapValue(apiData, "FLXG7E8F"))
|
||||
}
|
||||
|
||||
func maxTotMons(jrzq map[string]interface{}) int {
|
||||
maxVal := 0
|
||||
for _, period := range []string{"m6", "m12"} {
|
||||
|
||||
@@ -2,6 +2,8 @@ package dwbg
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@@ -327,6 +329,106 @@ func TestBuildJudicialLeaseReportWithCases(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestT2SampleJudicialAndSecurityMapping(t *testing.T) {
|
||||
base := filepath.Join("..", "..", "..", "..", "..", "..", "..", "司南报告")
|
||||
load := func(name string) map[string]interface{} {
|
||||
b, err := os.ReadFile(filepath.Join(base, name))
|
||||
if err != nil {
|
||||
t.Fatalf("read %s: %v", name, err)
|
||||
}
|
||||
var m map[string]interface{}
|
||||
if err := json.Unmarshal(b, &m); err != nil {
|
||||
t.Fatalf("unmarshal %s: %v", name, err)
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
params := dto.DWBG6A2CReq{
|
||||
Name: "何志勇",
|
||||
IDCard: "45212719910201152X",
|
||||
MobileNo: "18277111590",
|
||||
}
|
||||
apiData := map[string]interface{}{
|
||||
"FLXG7E8F": load("t2-1.json"),
|
||||
"FLXGDEA9": load("t2-2.json"),
|
||||
}
|
||||
report := transformToSinanReport(apiData, params, zap.NewNop())
|
||||
|
||||
jlr := report["judicialLeaseReport"].(map[string]interface{})
|
||||
courtInfo := jlr["courtInfo"].(map[string]interface{})
|
||||
if courtInfo["criminalCasesCount"] != 4 {
|
||||
t.Fatalf("criminalCasesCount = %v, want 4", courtInfo["criminalCasesCount"])
|
||||
}
|
||||
newMult := courtInfo["newMultCourtInfo"].(map[string]interface{})
|
||||
criminalCases, ok := newMult["criminalCases"].([]interface{})
|
||||
if !ok || len(criminalCases) != 4 {
|
||||
t.Fatalf("criminalCases = %v, want 4 items", newMult["criminalCases"])
|
||||
}
|
||||
overview := jlr["caseOverviewInfo"].(map[string]interface{})
|
||||
if overview["beigaoTotalCasesCounts"] != 2 {
|
||||
t.Fatalf("beigaoTotalCasesCounts = %v, want 2", overview["beigaoTotalCasesCounts"])
|
||||
}
|
||||
if overview["leastCaseTime"] != "2019(2)" {
|
||||
t.Fatalf("leastCaseTime = %v, want 2019(2)", overview["leastCaseTime"])
|
||||
}
|
||||
|
||||
security := report["securityInfo"].(map[string]interface{})
|
||||
if security["escape"] != 1 || security["icase"] != 1 {
|
||||
t.Fatalf("securityInfo A => %+v", security)
|
||||
}
|
||||
if security["ikey"] != 1 {
|
||||
t.Fatalf("securityInfo D5 => ikey=%v", security["ikey"])
|
||||
}
|
||||
|
||||
riskPoint := report["riskPoint"].(map[string]interface{})
|
||||
if riskPoint["judicialRisk"] != 1 || riskPoint["legalCasesFlag"] != 1 {
|
||||
t.Fatalf("riskPoint judicial flags = %+v", riskPoint)
|
||||
}
|
||||
if riskPoint["securityRisk"] != 1 {
|
||||
t.Fatalf("securityRisk = %v, want 1", riskPoint["securityRisk"])
|
||||
}
|
||||
}
|
||||
|
||||
func TestT2SampleWithDataWrapper(t *testing.T) {
|
||||
base := filepath.Join("..", "..", "..", "..", "..", "..", "..", "司南报告")
|
||||
load := func(name string) map[string]interface{} {
|
||||
b, err := os.ReadFile(filepath.Join(base, name))
|
||||
if err != nil {
|
||||
t.Fatalf("read %s: %v", name, err)
|
||||
}
|
||||
var m map[string]interface{}
|
||||
if err := json.Unmarshal(b, &m); err != nil {
|
||||
t.Fatalf("unmarshal %s: %v", name, err)
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
params := dto.DWBG6A2CReq{
|
||||
Name: "何志勇",
|
||||
IDCard: "45212719910201152X",
|
||||
MobileNo: "18277111590",
|
||||
}
|
||||
apiData := map[string]interface{}{
|
||||
"FLXG7E8F": map[string]interface{}{"data": load("t2-1.json")},
|
||||
"FLXGDEA9": map[string]interface{}{"data": load("t2-2.json")},
|
||||
}
|
||||
report := transformToSinanReport(apiData, params, zap.NewNop())
|
||||
|
||||
jlr := report["judicialLeaseReport"].(map[string]interface{})
|
||||
courtInfo := jlr["courtInfo"].(map[string]interface{})
|
||||
if courtInfo["criminalCasesCount"] != 4 {
|
||||
t.Fatalf("wrapped criminalCasesCount = %v, want 4", courtInfo["criminalCasesCount"])
|
||||
}
|
||||
security := report["securityInfo"].(map[string]interface{})
|
||||
if security["escape"] != 1 || security["ikey"] != 1 {
|
||||
t.Fatalf("wrapped securityInfo = %+v", security)
|
||||
}
|
||||
riskList := report["riskList"].(map[string]interface{})
|
||||
if riskList["industryBlacklist"] != 1 {
|
||||
t.Fatalf("wrapped industryBlacklist = %v, want 1", riskList["industryBlacklist"])
|
||||
}
|
||||
}
|
||||
|
||||
func TestM1PlusCountCaps(t *testing.T) {
|
||||
apiData := map[string]interface{}{
|
||||
"JRZQ5E9F": map[string]interface{}{
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
package dwbg
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
|
||||
"tyapi-server/internal/domains/api/services/processors/flxg"
|
||||
)
|
||||
|
||||
// unwrapSinanSubAPIMap 解包子接口响应中常见的 data / result 嵌套层。
|
||||
func unwrapSinanSubAPIMap(m map[string]interface{}) map[string]interface{} {
|
||||
if m == nil {
|
||||
return nil
|
||||
}
|
||||
if data := asMap(m["data"]); data != nil {
|
||||
return unwrapSinanSubAPIMap(data)
|
||||
}
|
||||
if result := asMap(m["result"]); result != nil && shouldUnwrapResult(m) {
|
||||
return unwrapSinanSubAPIMap(result)
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
func shouldUnwrapResult(m map[string]interface{}) bool {
|
||||
for _, key := range []string{"level", "riskCode", "judicial_data", "lawsuitStat", "breachCaseList", "consumptionRestrictionList"} {
|
||||
if _, ok := m[key]; ok {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func subAPIPayload(val interface{}) map[string]interface{} {
|
||||
m := asMap(val)
|
||||
if m == nil {
|
||||
if s, ok := val.(string); ok {
|
||||
s = strings.TrimSpace(s)
|
||||
if s != "" && (strings.HasPrefix(s, "{") || strings.HasPrefix(s, "[")) {
|
||||
var parsed map[string]interface{}
|
||||
if json.Unmarshal([]byte(s), &parsed) == nil {
|
||||
m = parsed
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if m == nil {
|
||||
return nil
|
||||
}
|
||||
return unwrapSinanSubAPIMap(m)
|
||||
}
|
||||
|
||||
func flxg7e8fMap(apiData map[string]interface{}) map[string]interface{} {
|
||||
payload := subAPIPayload(getMapValue(apiData, "FLXG7E8F"))
|
||||
if payload == nil {
|
||||
return nil
|
||||
}
|
||||
if jd := asMap(payload["judicial_data"]); jd != nil {
|
||||
return map[string]interface{}{"judicial_data": jd}
|
||||
}
|
||||
if asMap(payload["lawsuitStat"]) != nil || payload["breachCaseList"] != nil || payload["consumptionRestrictionList"] != nil {
|
||||
return map[string]interface{}{"judicial_data": payload}
|
||||
}
|
||||
return payload
|
||||
}
|
||||
|
||||
func flxgdea9Map(apiData map[string]interface{}) map[string]interface{} {
|
||||
return subAPIPayload(getMapValue(apiData, "FLXGDEA9"))
|
||||
}
|
||||
|
||||
func flxgdea9Level(apiData map[string]interface{}) string {
|
||||
payload := flxgdea9Map(apiData)
|
||||
if payload == nil {
|
||||
return ""
|
||||
}
|
||||
level := strings.TrimSpace(flxg.LevelFromPayload(payload))
|
||||
if level == "0" {
|
||||
return ""
|
||||
}
|
||||
return level
|
||||
}
|
||||
Reference in New Issue
Block a user