f
This commit is contained in:
@@ -7,7 +7,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/infrastructure/external/westdex"
|
"tyapi-server/internal/infrastructure/external/zhicha"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ProcessIVYZ81NCRequest IVYZ81NC API处理方法
|
// ProcessIVYZ81NCRequest IVYZ81NC API处理方法
|
||||||
@@ -21,45 +21,75 @@ func ProcessIVYZ81NCRequest(ctx context.Context, params []byte, deps *processors
|
|||||||
return nil, errors.Join(processors.ErrInvalidParam, err)
|
return nil, errors.Join(processors.ErrInvalidParam, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
encryptedName, err := deps.WestDexService.Encrypt(paramsDto.Name)
|
encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Join(processors.ErrSystem, err)
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
encryptedIDCard, err := deps.WestDexService.Encrypt(paramsDto.IDCard)
|
encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Join(processors.ErrSystem, err)
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
reqData := map[string]interface{}{
|
reqData := map[string]interface{}{
|
||||||
"data": map[string]interface{}{
|
"name": encryptedName,
|
||||||
"name": encryptedName,
|
"idCard": encryptedIDCard,
|
||||||
"idcard": encryptedIDCard,
|
"authorized": "1", // 默认值
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const maxRetries = 5
|
respData, err := deps.ZhichaService.CallAPI(ctx, "ZCI029", reqData)
|
||||||
var respBytes []byte
|
if err != nil {
|
||||||
|
if errors.Is(err, zhicha.ErrDatasource) {
|
||||||
for attempt := 0; attempt <= maxRetries; attempt++ {
|
return nil, errors.Join(processors.ErrDatasource, err)
|
||||||
var err error
|
} else {
|
||||||
respBytes, err = deps.WestDexService.CallAPI(ctx, "G09XM02", reqData)
|
|
||||||
if err == nil {
|
|
||||||
return respBytes, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果不是数据源异常,直接返回错误
|
|
||||||
if !errors.Is(err, westdex.ErrDatasource) {
|
|
||||||
return nil, errors.Join(processors.ErrSystem, err)
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果是最后一次尝试,返回错误
|
|
||||||
if attempt == maxRetries {
|
|
||||||
return nil, errors.Join(processors.ErrDatasource, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 立即重试,不等待
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return respBytes, nil
|
// 解析响应数据,期望格式为 {"state": "1"}
|
||||||
|
var stateResp struct {
|
||||||
|
State string `json:"state"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将 respData 转换为 JSON 字节再解析
|
||||||
|
respDataBytes, err := json.Marshal(respData)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := json.Unmarshal(respDataBytes, &stateResp); err != nil {
|
||||||
|
return nil, errors.Join(processors.ErrSystem, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据 state 值转换为 81nc 格式
|
||||||
|
var opType, opTypeDesc string
|
||||||
|
switch stateResp.State {
|
||||||
|
case "1": // 已婚
|
||||||
|
opType = "IA"
|
||||||
|
opTypeDesc = "结婚"
|
||||||
|
case "2": // 未婚/未在民政局登记
|
||||||
|
opType = "INR"
|
||||||
|
opTypeDesc = "匹配不成功"
|
||||||
|
case "3": // 离异
|
||||||
|
opType = "IB"
|
||||||
|
opTypeDesc = "离婚"
|
||||||
|
default:
|
||||||
|
opType = "INR"
|
||||||
|
opTypeDesc = "匹配不成功"
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建 81nc 格式响应
|
||||||
|
result := map[string]interface{}{
|
||||||
|
"code": "0",
|
||||||
|
"data": map[string]interface{}{
|
||||||
|
"op_date": "",
|
||||||
|
"op_type": opType,
|
||||||
|
"op_type_desc": opTypeDesc,
|
||||||
|
},
|
||||||
|
"message": "成功",
|
||||||
|
"seqNo": "",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回 81nc 格式响应
|
||||||
|
return json.Marshal(result)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user