This commit is contained in:
2025-11-12 23:44:53 +08:00
parent 3745a3768f
commit f00cee7410

View File

@@ -298,17 +298,24 @@ type targetReport struct {
// reportSummary 对应 target.json 中 reportSummary 节点
type reportSummary struct {
RuleValidation summaryItem `json:"ruleValidation"`
AntiFraudScore summaryItem `json:"antiFraudScore"`
AntiFraudRule summaryItem `json:"antiFraudRule"`
AbnormalRulesHit abnormalHit `json:"abnormalRulesHit"`
RuleValidation summaryRuleValidation `json:"ruleValidation"`
AntiFraudScore summaryAntiFraudScore `json:"antiFraudScore"`
AntiFraudRule summaryAntiFraudRule `json:"antiFraudRule"`
AbnormalRulesHit abnormalHit `json:"abnormalRulesHit"`
}
// summaryItem 统一描述包含 code/result/level 的子项
type summaryItem struct {
type summaryRuleValidation struct {
Code string `json:"code,omitempty"`
Result string `json:"result,omitempty"`
Level string `json:"level,omitempty"`
}
type summaryAntiFraudScore struct {
Level string `json:"level,omitempty"`
}
type summaryAntiFraudRule struct {
Level string `json:"level,omitempty"`
Code string `json:"code,omitempty"`
}
// abnormalHit 表示异常规则汇总
@@ -336,17 +343,62 @@ type verificationItem struct {
// riskIdentification 对应 target.json 中 riskIdentification 节点
type riskIdentification struct {
Title string `json:"title"`
CaseAnnouncements announcementSection `json:"caseAnnouncements"`
EnforcementAnnouncements announcementSection `json:"enforcementAnnouncements"`
DishonestAnnouncements announcementSection `json:"dishonestAnnouncements"`
HighConsumptionRestrictionAnn announcementSection `json:"highConsumptionRestrictionAnnouncements"`
Title string `json:"title"`
CaseAnnouncements caseAnnouncementSection `json:"caseAnnouncements"`
EnforcementAnnouncements enforcementAnnouncementSection `json:"enforcementAnnouncements"`
DishonestAnnouncements dishonestAnnouncementSection `json:"dishonestAnnouncements"`
HighConsumptionRestrictionAnn highRestrictionAnnouncementSection `json:"highConsumptionRestrictionAnnouncements"`
}
// announcementSection 统一封装列表标题与记录
type announcementSection struct {
Title string `json:"title"`
Records []map[string]string `json:"records"`
type caseAnnouncementSection struct {
Title string `json:"title"`
Records []caseAnnouncementRecord `json:"records"`
}
type caseAnnouncementRecord struct {
CaseNumber string `json:"caseNumber"`
CaseType string `json:"caseType"`
FilingDate string `json:"filingDate"`
Authority string `json:"authority"`
}
type enforcementAnnouncementSection struct {
Title string `json:"title"`
Records []enforcementAnnouncementRecord `json:"records"`
}
type enforcementAnnouncementRecord struct {
CaseNumber string `json:"caseNumber"`
TargetAmount string `json:"targetAmount"`
FilingDate string `json:"filingDate"`
Court string `json:"court"`
Status string `json:"status"`
}
type dishonestAnnouncementSection struct {
Title string `json:"title"`
Records []dishonestAnnouncementRecord `json:"records"`
}
type dishonestAnnouncementRecord struct {
DishonestPerson string `json:"dishonestPerson"`
IdCard string `json:"idCard"`
Court string `json:"court"`
FilingDate string `json:"filingDate"`
PerformanceStatus string `json:"performanceStatus"`
}
type highRestrictionAnnouncementSection struct {
Title string `json:"title"`
Records []highRestrictionAnnouncementRecord `json:"records"`
}
type highRestrictionAnnouncementRecord struct {
RestrictedPerson string `json:"restrictedPerson"`
IdCard string `json:"idCard"`
Court string `json:"court"`
StartDate string `json:"startDate"`
Measure string `json:"measure"`
}
// creditAssessment 对应 target.json 中 creditAssessment 节点
@@ -482,16 +534,16 @@ func buildReportSummary(ctx *sourceContext) reportSummary {
const strategyCode = "STR0042314/贷前-经营性租赁全量策略"
summary := reportSummary{
RuleValidation: summaryItem{
RuleValidation: summaryRuleValidation{
Code: strategyCode,
Result: "未命中",
},
AntiFraudScore: summaryItem{
AntiFraudScore: summaryAntiFraudScore{
Level: "未命中",
},
AntiFraudRule: summaryItem{
Code: strategyCode,
AntiFraudRule: summaryAntiFraudRule{
Level: "未命中",
Code: strategyCode,
},
AbnormalRulesHit: abnormalHit{
Count: 0,
@@ -637,21 +689,21 @@ func buildBasicInfo(ctx *sourceContext) reportBasicInfo {
func buildRiskIdentification(ctx *sourceContext) riskIdentification {
identification := riskIdentification{
Title: "风险识别产品",
CaseAnnouncements: announcementSection{
CaseAnnouncements: caseAnnouncementSection{
Title: "涉案公告列表",
Records: []map[string]string{},
Records: make([]caseAnnouncementRecord, 0),
},
EnforcementAnnouncements: announcementSection{
EnforcementAnnouncements: enforcementAnnouncementSection{
Title: "执行公告列表",
Records: []map[string]string{},
Records: make([]enforcementAnnouncementRecord, 0),
},
DishonestAnnouncements: announcementSection{
DishonestAnnouncements: dishonestAnnouncementSection{
Title: "失信公告列表",
Records: []map[string]string{},
Records: make([]dishonestAnnouncementRecord, 0),
},
HighConsumptionRestrictionAnn: announcementSection{
HighConsumptionRestrictionAnn: highRestrictionAnnouncementSection{
Title: "限高公告列表",
Records: []map[string]string{},
Records: make([]highRestrictionAnnouncementRecord, 0),
},
}
@@ -667,7 +719,7 @@ func buildRiskIdentification(ctx *sourceContext) riskIdentification {
baseID = ctx.BaseData.BaseInfo.IdCard
}
caseRecords := make([]map[string]string, 0)
caseRecords := make([]caseAnnouncementRecord, 0)
caseRecords = append(caseRecords, convertCaseAnnouncements(stat.Civil.Cases, "民事案件")...)
caseRecords = append(caseRecords, convertCaseAnnouncements(stat.Criminal.Cases, "刑事案件")...)
caseRecords = append(caseRecords, convertCaseAnnouncements(stat.Administrative.Cases, "行政案件")...)
@@ -1431,21 +1483,18 @@ func pickFirstFloat(contents map[string]string, keys ...string) float64 {
}
// convertCaseAnnouncements 转换各类案件记录为 target 所需的涉案公告结构
func convertCaseAnnouncements(cases []judicialCase, defaultType string) []map[string]string {
if len(cases) == 0 {
return nil
}
records := make([]map[string]string, 0, len(cases))
func convertCaseAnnouncements(cases []judicialCase, defaultType string) []caseAnnouncementRecord {
records := make([]caseAnnouncementRecord, 0, len(cases))
for _, c := range cases {
caseType := defaultType
if caseType == "" {
caseType = caseTypeName(c.CaseType)
}
record := map[string]string{
"caseNumber": c.CaseNumber,
"authority": c.Court,
"filingDate": c.FilingDate,
"caseType": caseType,
record := caseAnnouncementRecord{
CaseNumber: c.CaseNumber,
Authority: c.Court,
FilingDate: c.FilingDate,
CaseType: caseType,
}
records = append(records, record)
}
@@ -1453,18 +1502,15 @@ func convertCaseAnnouncements(cases []judicialCase, defaultType string) []map[st
}
// convertEnforcementAnnouncements 转换执行案件数据为执行公告列表
func convertEnforcementAnnouncements(cases []judicialCase) []map[string]string {
if len(cases) == 0 {
return nil
}
records := make([]map[string]string, 0, len(cases))
func convertEnforcementAnnouncements(cases []judicialCase) []enforcementAnnouncementRecord {
records := make([]enforcementAnnouncementRecord, 0, len(cases))
for _, c := range cases {
record := map[string]string{
"caseNumber": c.CaseNumber,
"targetAmount": formatCurrencyYuan(c.ApplyAmount),
"filingDate": c.FilingDate,
"court": c.Court,
"status": defaultIfEmpty(c.CaseStatus, "-"),
record := enforcementAnnouncementRecord{
CaseNumber: c.CaseNumber,
TargetAmount: formatCurrencyYuan(c.ApplyAmount),
FilingDate: c.FilingDate,
Court: c.Court,
Status: defaultIfEmpty(c.CaseStatus, "-"),
}
records = append(records, record)
}
@@ -1472,18 +1518,15 @@ func convertEnforcementAnnouncements(cases []judicialCase) []map[string]string {
}
// convertDishonestAnnouncements 将失信记录转为失信公告列表
func convertDishonestAnnouncements(items []breachCase, name, id string) []map[string]string {
if len(items) == 0 {
return nil
}
records := make([]map[string]string, 0, len(items))
func convertDishonestAnnouncements(items []breachCase, name, id string) []dishonestAnnouncementRecord {
records := make([]dishonestAnnouncementRecord, 0, len(items))
for _, item := range items {
record := map[string]string{
"dishonestPerson": name,
"idCard": id,
"court": item.ExecutiveCourt,
"filingDate": defaultIfEmpty(item.FileDate, item.IssueDate),
"performanceStatus": defaultIfEmpty(item.FulfillStatus, "-"),
record := dishonestAnnouncementRecord{
DishonestPerson: name,
IdCard: id,
Court: item.ExecutiveCourt,
FilingDate: defaultIfEmpty(item.FileDate, item.IssueDate),
PerformanceStatus: defaultIfEmpty(item.FulfillStatus, "-"),
}
records = append(records, record)
}
@@ -1491,18 +1534,15 @@ func convertDishonestAnnouncements(items []breachCase, name, id string) []map[st
}
// convertConsumptionRestrictions 将限高记录转为限高公告列表
func convertConsumptionRestrictions(items []consumptionRestriction, name, id string) []map[string]string {
if len(items) == 0 {
return nil
}
records := make([]map[string]string, 0, len(items))
func convertConsumptionRestrictions(items []consumptionRestriction, name, id string) []highRestrictionAnnouncementRecord {
records := make([]highRestrictionAnnouncementRecord, 0, len(items))
for _, item := range items {
record := map[string]string{
"restrictedPerson": name,
"idCard": id,
"court": item.ExecutiveCourt,
"startDate": item.IssueDate,
"measure": "限制高消费",
record := highRestrictionAnnouncementRecord{
RestrictedPerson: name,
IdCard: id,
Court: item.ExecutiveCourt,
StartDate: item.IssueDate,
Measure: "限制高消费",
}
records = append(records, record)
}