重新启用QYGL3F8E upQYGL6S1B addFXGL5a3b dQYGL8271
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
|||||||
|
|
||||||
"tyapi-server/internal/domains/api/dto"
|
"tyapi-server/internal/domains/api/dto"
|
||||||
"tyapi-server/internal/domains/api/services/processors"
|
"tyapi-server/internal/domains/api/services/processors"
|
||||||
|
"tyapi-server/internal/domains/api/services/processors/flxg"
|
||||||
|
|
||||||
"github.com/tidwall/gjson"
|
"github.com/tidwall/gjson"
|
||||||
)
|
)
|
||||||
@@ -68,8 +69,11 @@ func ProcessQYGL3F8ERequest(ctx context.Context, params []byte, deps *processors
|
|||||||
processCount = maxProcessCount
|
processCount = maxProcessCount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 保存用户输入的身份证号,用于后续查询
|
||||||
|
userIDCard := paramsDto.IDCard
|
||||||
|
|
||||||
// 5. 并发调用其他处理器获取企业详细信息
|
// 5. 并发调用其他处理器获取企业详细信息
|
||||||
enrichedCompanies, err := enrichCompaniesWithDetails(ctx, sortedCompanies[:processCount], deps)
|
enrichedCompanies, err := enrichCompaniesWithDetails(ctx, sortedCompanies[:processCount], userIDCard, deps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Join(processors.ErrSystem, err)
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
}
|
}
|
||||||
@@ -274,7 +278,7 @@ type EnrichedCompanyInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// enrichCompaniesWithDetails 并发调用其他处理器获取企业详细信息
|
// enrichCompaniesWithDetails 并发调用其他处理器获取企业详细信息
|
||||||
func enrichCompaniesWithDetails(ctx context.Context, companies []CompanyInfo, deps *processors.ProcessorDependencies) ([]EnrichedCompanyInfo, error) {
|
func enrichCompaniesWithDetails(ctx context.Context, companies []CompanyInfo, idCard string, deps *processors.ProcessorDependencies) ([]EnrichedCompanyInfo, error) {
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
results := make(chan struct {
|
results := make(chan struct {
|
||||||
index int
|
index int
|
||||||
@@ -282,6 +286,9 @@ func enrichCompaniesWithDetails(ctx context.Context, companies []CompanyInfo, de
|
|||||||
err error
|
err error
|
||||||
}, len(companies))
|
}, len(companies))
|
||||||
|
|
||||||
|
// 保存身份证号变量,用于后续查询
|
||||||
|
userIDCard := idCard
|
||||||
|
|
||||||
// 并发处理每个企业
|
// 并发处理每个企业
|
||||||
for i, company := range companies {
|
for i, company := range companies {
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
@@ -295,6 +302,8 @@ func enrichCompaniesWithDetails(ctx context.Context, companies []CompanyInfo, de
|
|||||||
// 并发调用多个处理器
|
// 并发调用多个处理器
|
||||||
var detailWg sync.WaitGroup
|
var detailWg sync.WaitGroup
|
||||||
|
|
||||||
|
// 调用FLXG7E8F -个人司法诉讼
|
||||||
|
|
||||||
// 调用QYGL5A3C - 对外投资历史
|
// 调用QYGL5A3C - 对外投资历史
|
||||||
detailWg.Add(1)
|
detailWg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
@@ -323,11 +332,11 @@ func enrichCompaniesWithDetails(ctx context.Context, companies []CompanyInfo, de
|
|||||||
enriched.AbnormalInfo = callProcessorSafely(ctx, "QYGL7C1A", comp.CreditCode, deps)
|
enriched.AbnormalInfo = callProcessorSafely(ctx, "QYGL7C1A", comp.CreditCode, deps)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// 调用QYGL8271 - 涉诉信息
|
// 调用FXGL5a3b- 涉诉信息
|
||||||
detailWg.Add(1)
|
detailWg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer detailWg.Done()
|
defer detailWg.Done()
|
||||||
enriched.LawsuitInfo = callQYGL8271Safely(ctx, comp.Name, comp.CreditCode, deps)
|
enriched.LawsuitInfo = callFXGL5a3bSafely(ctx, comp.Name, userIDCard, deps)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// 调用QYGL7D9A - 欠税公告
|
// 调用QYGL7D9A - 欠税公告
|
||||||
@@ -422,13 +431,13 @@ func callProcessorSafely(ctx context.Context, processorType, entCode string, dep
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// callQYGL8271Safely 安全调用QYGL8271处理器
|
// callFXGL5a3bSafely 安全调用FXGL5a3b个人司法涉诉处理器
|
||||||
func callQYGL8271Safely(ctx context.Context, entName, entCode string, deps *processors.ProcessorDependencies) interface{} {
|
func callFXGL5a3bSafely(ctx context.Context, Name string, userIDCard string, deps *processors.ProcessorDependencies) interface{} {
|
||||||
// 构建请求参数
|
|
||||||
params := map[string]interface{}{
|
params := map[string]interface{}{
|
||||||
"ent_name": entName,
|
"name": Name,
|
||||||
"ent_code": entCode,
|
"idCard": userIDCard,
|
||||||
"auth_date": generateAuthDateRange(),
|
"authorized": "1",
|
||||||
}
|
}
|
||||||
|
|
||||||
paramsBytes, err := json.Marshal(params)
|
paramsBytes, err := json.Marshal(params)
|
||||||
@@ -436,23 +445,163 @@ func callQYGL8271Safely(ctx context.Context, entName, entCode string, deps *proc
|
|||||||
return map[string]interface{}{}
|
return map[string]interface{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
response, err := ProcessQYGL8271Request(ctx, paramsBytes, deps)
|
response, err := flxg.ProcessFLXG5A3BRequest(ctx, paramsBytes, deps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// 如果是查询为空错误,返回空对象
|
// 如果是查询为空错误,返回空对象
|
||||||
if errors.Is(err, processors.ErrNotFound) {
|
if errors.Is(err, processors.ErrNotFound) {
|
||||||
return map[string]interface{}{}
|
return map[string]interface{}{
|
||||||
|
"entout": map[string]interface{}{
|
||||||
|
"msg": "没有找到",
|
||||||
|
},
|
||||||
|
"sxbzxr": map[string]interface{}{
|
||||||
|
"msg": "没有找到",
|
||||||
|
},
|
||||||
|
"xgbzxr": map[string]interface{}{
|
||||||
|
"msg": "没有找到",
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 其他错误也返回空对象
|
// 其他错误也返回空对象
|
||||||
return map[string]interface{}{}
|
return map[string]interface{}{
|
||||||
|
"entout": map[string]interface{}{
|
||||||
|
"msg": "没有找到",
|
||||||
|
},
|
||||||
|
"sxbzxr": map[string]interface{}{
|
||||||
|
"msg": "没有找到",
|
||||||
|
},
|
||||||
|
"xgbzxr": map[string]interface{}{
|
||||||
|
"msg": "没有找到",
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解析响应
|
// 解析响应
|
||||||
var result interface{}
|
var result interface{}
|
||||||
if err := json.Unmarshal(response, &result); err != nil {
|
if err := json.Unmarshal(response, &result); err != nil {
|
||||||
return map[string]interface{}{}
|
return map[string]interface{}{
|
||||||
|
"entout": map[string]interface{}{
|
||||||
|
"msg": "没有找到",
|
||||||
|
},
|
||||||
|
"sxbzxr": map[string]interface{}{
|
||||||
|
"msg": "没有找到",
|
||||||
|
},
|
||||||
|
"xgbzxr": map[string]interface{}{
|
||||||
|
"msg": "没有找到",
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
resultBytes, _ := json.Marshal(result)
|
||||||
|
|
||||||
|
// 从 result 中提取 entout 数据(直接从返回数据的 entout 字段,直接存放原始数据)
|
||||||
|
var entoutData map[string]interface{}
|
||||||
|
entoutResult := gjson.GetBytes(resultBytes, "entout")
|
||||||
|
entoutExists := entoutResult.Exists() && entoutResult.Raw != "{}" && entoutResult.Raw != "null"
|
||||||
|
if entoutExists {
|
||||||
|
if err := json.Unmarshal([]byte(entoutResult.Raw), &entoutData); err != nil {
|
||||||
|
entoutExists = false
|
||||||
|
entoutData = map[string]interface{}{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if entoutData == nil {
|
||||||
|
entoutData = map[string]interface{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 从 result 中提取 xgbzxr 数据(直接从返回数据的 xgbzxr 字段,直接存放原始数据)
|
||||||
|
var xgbzxrData []map[string]interface{}
|
||||||
|
xgbzxrArray := gjson.GetBytes(resultBytes, "xgbzxr")
|
||||||
|
if xgbzxrArray.Exists() && xgbzxrArray.IsArray() {
|
||||||
|
for _, item := range xgbzxrArray.Array() {
|
||||||
|
var xgbzxrItem map[string]interface{}
|
||||||
|
if err := json.Unmarshal([]byte(item.Raw), &xgbzxrItem); err == nil {
|
||||||
|
xgbzxrData = append(xgbzxrData, xgbzxrItem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 从 result 中提取 sxbzxr 数据(直接从返回数据的 sxbzxr 字段,直接存放原始数据)
|
||||||
|
var sxbzxrData []map[string]interface{}
|
||||||
|
sxbzxrArray := gjson.GetBytes(resultBytes, "sxbzxr")
|
||||||
|
if sxbzxrArray.Exists() && sxbzxrArray.IsArray() {
|
||||||
|
for _, item := range sxbzxrArray.Array() {
|
||||||
|
var sxbzxrItem map[string]interface{}
|
||||||
|
if err := json.Unmarshal([]byte(item.Raw), &sxbzxrItem); err == nil {
|
||||||
|
sxbzxrData = append(sxbzxrData, sxbzxrItem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将解析后的数据包装成指定格式
|
||||||
|
// 将统计字段(count、crc、cases_tree等)提取到根级别
|
||||||
|
entoutWrapped := map[string]interface{}{
|
||||||
|
"msg": "成功",
|
||||||
|
}
|
||||||
|
if entoutExists {
|
||||||
|
// 定义需要提取到根级别的统计字段
|
||||||
|
statFields := []string{"count", "crc", "cases_tree", "preservation", "administrative", "civil", "criminal", "bankrupt"}
|
||||||
|
|
||||||
|
// 提取统计字段到根级别
|
||||||
|
for _, field := range statFields {
|
||||||
|
if value, exists := entoutData[field]; exists {
|
||||||
|
entoutWrapped[field] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建剩余数据的副本(排除已提取的统计字段)
|
||||||
|
remainingData := make(map[string]interface{})
|
||||||
|
for key, value := range entoutData {
|
||||||
|
isStatField := false
|
||||||
|
for _, statField := range statFields {
|
||||||
|
if key == statField {
|
||||||
|
isStatField = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !isStatField {
|
||||||
|
remainingData[key] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保留 count 兼容旧逻辑(风险判定依赖 entout.data.count)
|
||||||
|
if countVal, ok := entoutData["count"]; ok {
|
||||||
|
remainingData["count"] = countVal
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将剩余数据放入 data 字段
|
||||||
|
entoutWrapped["data"] = remainingData
|
||||||
|
} else {
|
||||||
|
entoutWrapped["msg"] = "没有找到"
|
||||||
|
}
|
||||||
|
|
||||||
|
sxbzxrWrapped := map[string]interface{}{
|
||||||
|
"msg": "成功",
|
||||||
|
}
|
||||||
|
if len(sxbzxrData) == 0 {
|
||||||
|
sxbzxrWrapped["msg"] = "没有找到"
|
||||||
|
} else {
|
||||||
|
sxbzxrWrapped["data"] = map[string]interface{}{
|
||||||
|
"sxbzxr": sxbzxrData,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xgbzxrWrapped := map[string]interface{}{
|
||||||
|
"msg": "成功",
|
||||||
|
}
|
||||||
|
if len(xgbzxrData) == 0 {
|
||||||
|
xgbzxrWrapped["msg"] = "没有找到"
|
||||||
|
} else {
|
||||||
|
xgbzxrWrapped["data"] = map[string]interface{}{
|
||||||
|
"xgbzxr": xgbzxrData,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wrappedResult := map[string]interface{}{
|
||||||
|
"entout": entoutWrapped,
|
||||||
|
"sxbzxr": sxbzxrWrapped,
|
||||||
|
"xgbzxr": xgbzxrWrapped,
|
||||||
|
}
|
||||||
|
|
||||||
|
return wrappedResult
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateAuthDateRange() string {
|
func generateAuthDateRange() string {
|
||||||
|
|||||||
Reference in New Issue
Block a user