From 4bd6f517284eafff4150f23af792283ef05ac6fb Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Mon, 20 Apr 2026 18:45:34 +0800 Subject: [PATCH] f --- .../processors/flxg/flxg7e8f_processor.go | 223 ++++++++++++++++-- 1 file changed, 209 insertions(+), 14 deletions(-) diff --git a/internal/domains/api/services/processors/flxg/flxg7e8f_processor.go b/internal/domains/api/services/processors/flxg/flxg7e8f_processor.go index 9f215ad..6ec2e6b 100644 --- a/internal/domains/api/services/processors/flxg/flxg7e8f_processor.go +++ b/internal/domains/api/services/processors/flxg/flxg7e8f_processor.go @@ -7,7 +7,7 @@ import ( "tyapi-server/internal/domains/api/dto" "tyapi-server/internal/domains/api/services/processors" - "tyapi-server/internal/infrastructure/external/xingwei" + "tyapi-server/internal/infrastructure/external/zhicha" ) // ProcessFLXG7E8FRequest FLXG7E8F API处理方法 - 个人司法数据查询 @@ -23,27 +23,222 @@ func ProcessFLXG7E8FRequest(ctx context.Context, params []byte, deps *processors if paramsDto.IDCard == "350681198611130611" || paramsDto.IDCard == "622301200006250550" || paramsDto.IDCard == "320682198910134998" || paramsDto.IDCard == "640102198708020925" || paramsDto.IDCard == "420624197310234034" || paramsDto.IDCard == "350104198501184416" || paramsDto.IDCard == "410521198606018056" || paramsDto.IDCard == "410482198504029333" { return nil, errors.Join(processors.ErrNotFound, errors.New("查询为空")) } - // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 - reqData := map[string]interface{}{ - "name": paramsDto.Name, - "idCardNum": paramsDto.IDCard, - "phoneNumber": paramsDto.MobileNo, + + encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) } - // 调用行为数据API,使用指定的project_id - projectID := "CDJ-1101695378264092672" - respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard) if err != nil { - if errors.Is(err, xingwei.ErrNotFound) { - return nil, errors.Join(processors.ErrNotFound, err) - } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrSystem, err) + } + + reqData := map[string]interface{}{ + "name": encryptedName, + "idCard": encryptedIDCard, + "authorized": "1", + } + + respData, err := deps.ZhichaService.CallAPI(ctx, "ZCI006", reqData) + if err != nil { + if errors.Is(err, zhicha.ErrDatasource) { return nil, errors.Join(processors.ErrDatasource, err) - } else if errors.Is(err, xingwei.ErrSystem) { - return nil, errors.Join(processors.ErrSystem, err) } else { return nil, errors.Join(processors.ErrSystem, err) } } + respMap, ok := respData.(map[string]interface{}) + if !ok { + return nil, errors.Join(processors.ErrSystem, errors.New("响应格式错误")) + } + + result := map[string]interface{}{ + "judicial_data": mapFLXG5A3BToJudicialData(respMap), + } + + respBytes, err := json.Marshal(result) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + return respBytes, nil } + +func mapFLXG5A3BToJudicialData(resp map[string]interface{}) map[string]interface{} { + judicialData := map[string]interface{}{ + "consumptionRestrictionList": mapXgbzxrToConsumptionRestriction(asSlice(resp["xgbzxr"])), + "breachCaseList": mapSxbzxrToBreachCaseList(asSlice(resp["sxbzxr"])), + "lawsuitStat": normalizeLawsuitStat(asMap(resp["entout"])), + } + + return judicialData +} + +func mapXgbzxrToConsumptionRestriction(items []interface{}) []map[string]interface{} { + result := make([]map[string]interface{}, 0, len(items)) + for _, item := range items { + m := asMap(item) + if len(m) == 0 { + continue + } + + result = append(result, map[string]interface{}{ + "caseNumber": m["ah"], + "id": m["id"], + "issueDate": m["fbrq"], + "executiveCourt": m["zxfy"], + "fileDate": m["larq"], + }) + } + return result +} + +func mapSxbzxrToBreachCaseList(items []interface{}) []map[string]interface{} { + result := make([]map[string]interface{}, 0, len(items)) + for _, item := range items { + m := asMap(item) + if len(m) == 0 { + continue + } + + result = append(result, map[string]interface{}{ + "caseNumber": m["ah"], + "issueDate": m["fbrq"], + "id": m["id"], + "fileDate": m["larq"], + "fulfillStatus": m["lxqk"], + "estimatedJudgementAmount": m["pjje_gj"], + "province": m["sf"], + "sex": m["xb"], + "concreteDetails": m["xwqx"], + "obligation": m["yw"], + "executiveCourt": m["zxfy"], + "enforcementBasisOrganization": m["zxyjdw"], + "enforcementBasisNumber": m["zxyjwh"], + }) + } + return result +} + +func normalizeLawsuitStat(entout map[string]interface{}) map[string]interface{} { + lawsuitStat := defaultLawsuitStat() + for k, v := range entout { + switch k { + case "cases_tree": + lawsuitStat[k] = normalizeCasesTree(asMap(v)) + case "count": + lawsuitStat[k] = normalizeCount(asMap(v)) + case "preservation", "administrative", "civil", "implement", "criminal", "bankrupt": + lawsuitStat[k] = normalizeCaseSection(asMap(v)) + default: + lawsuitStat[k] = v + } + } + return lawsuitStat +} + +func defaultLawsuitStat() map[string]interface{} { + return map[string]interface{}{ + "crc": 0, + "cases_tree": normalizeCasesTree(map[string]interface{}{}), + "count": normalizeCount(map[string]interface{}{}), + "preservation": normalizeCaseSection(map[string]interface{}{}), + "administrative": normalizeCaseSection(map[string]interface{}{}), + "civil": normalizeCaseSection(map[string]interface{}{}), + "implement": normalizeCaseSection(map[string]interface{}{}), + "criminal": normalizeCaseSection(map[string]interface{}{}), + "bankrupt": normalizeCaseSection(map[string]interface{}{}), + } +} + +func normalizeCasesTree(src map[string]interface{}) map[string]interface{} { + dst := map[string]interface{}{ + "administrative": []interface{}{}, + "criminal": []interface{}{}, + "civil": []interface{}{}, + } + for _, key := range []string{"administrative", "criminal", "civil"} { + if v, ok := src[key]; ok { + dst[key] = asSlice(v) + } + } + return dst +} + +func normalizeCaseSection(src map[string]interface{}) map[string]interface{} { + dst := map[string]interface{}{ + "cases": []interface{}{}, + "count": normalizeCount(map[string]interface{}{}), + } + if v, ok := src["cases"]; ok { + dst["cases"] = asSlice(v) + } + if v, ok := src["count"]; ok { + dst["count"] = normalizeCount(asMap(v)) + } + return dst +} + +func normalizeCount(src map[string]interface{}) map[string]interface{} { + dst := map[string]interface{}{ + "money_yuangao": 0, + "area_stat": "", + "count_jie_beigao": 0, + "count_total": 0, + "money_wei_yuangao": 0, + "count_wei_total": 0, + "money_wei_beigao": 0, + "count_other": 0, + "money_beigao": 0, + "count_yuangao": 0, + "money_jie_other": 0, + "money_total": 0, + "money_wei_total": 0, + "count_wei_yuangao": 0, + "ay_stat": "", + "count_beigao": 0, + "money_jie_yuangao": 0, + "jafs_stat": "", + "money_jie_beigao": 0, + "count_wei_beigao": 0, + "count_jie_other": 0, + "count_jie_total": 0, + "count_wei_other": 0, + "money_other": 0, + "count_jie_yuangao": 0, + "money_jie_total": 0, + "money_wei_other": 0, + "money_wei_percent": 0, + "larq_stat": "", + } + for k, v := range src { + dst[k] = v + } + return dst +} + +func asMap(v interface{}) map[string]interface{} { + if v == nil { + return map[string]interface{}{} + } + + if m, ok := v.(map[string]interface{}); ok { + return m + } + + return map[string]interface{}{} +} + +func asSlice(v interface{}) []interface{} { + if v == nil { + return []interface{}{} + } + + if s, ok := v.([]interface{}); ok { + return s + } + + return []interface{}{} +}