fix: 导出SMSC添加result code和result cause列

This commit is contained in:
TsMask
2025-09-28 18:10:35 +08:00
parent 0d0f10eda7
commit bc55dfb9d5
11 changed files with 121 additions and 39 deletions

View File

@@ -434,13 +434,14 @@ func (s BackupExportCDRProcessor) exportSMSC(query neDataModel.CDREventSMSCQuery
"Service Type",
"Caller",
"Called",
"Result",
"Result Code",
"Result Cause",
"Time",
"Tenant Name", // for multi-tenancy
},
}
// 读取字典数据 CDR 原因码
dictCDRCauseCode := s.sysDictService.SelectDictDataByType("cdr_cause_code")
dictCDRSMSCCauseCode := s.sysDictService.SelectDictDataByType("cdr_cause_smsc")
for _, row := range rows {
// 解析 JSON 字符串为 map
var cdrJSON map[string]interface{}
@@ -470,19 +471,20 @@ func (s BackupExportCDRProcessor) exportSMSC(query neDataModel.CDREventSMSCQuery
caller = v.(string)
}
// 呼叫结果 0失败1成功
callResult := "Fail"
callResult := "FAILED"
if v, ok := cdrJSON["result"]; ok && v != nil {
resultVal := parse.Number(v)
if resultVal == 1 {
callResult = "Success"
callResult = "SUCCESS"
}
}
// 结果原因
if v, ok := cdrJSON["cause"]; ok && v != nil && callResult == "Fail" {
callCause := "UNKNOW ERROR"
if v, ok := cdrJSON["cause"]; ok && v != nil {
cause := fmt.Sprint(v)
for _, v := range dictCDRCauseCode {
for _, v := range dictCDRSMSCCauseCode {
if cause == v.DictValue {
callResult = fmt.Sprintf("%s, %s", callResult, i18n.TKey(language, v.DictLabel))
callCause = i18n.TKey(language, v.DictLabel)
break
}
}
@@ -505,6 +507,7 @@ func (s BackupExportCDRProcessor) exportSMSC(query neDataModel.CDREventSMSCQuery
caller,
called,
callResult,
callCause,
timeStr,
row.TenantName,
})
@@ -525,12 +528,13 @@ func (s BackupExportCDRProcessor) exportSMSC(query neDataModel.CDREventSMSCQuery
"D1": "Service Type",
"E1": "Caller",
"F1": "Called",
"G1": "Result",
"H1": "Time",
"I1": "Tenant Name", // for multi-tenancy
"G1": "Result Code",
"H1": "Result Cause",
"I1": "Time",
"J1": "Tenant Name", // for multi-tenancy
}
// 读取字典数据 CDR 原因码
dictCDRCauseCode := s.sysDictService.SelectDictDataByType("cdr_cause_code")
// dictCDRCauseCode := s.sysDictService.SelectDictDataByType("cdr_cause_code")
// 从第二行开始的数据
dataCells := make([]map[string]any, 0)
for i, row := range rows {
@@ -563,23 +567,25 @@ func (s BackupExportCDRProcessor) exportSMSC(query neDataModel.CDREventSMSCQuery
caller = v.(string)
}
// 呼叫结果 0失败1成功
callResult := "Fail"
callResult := "500 Internal Server Error"
callCause := "Unknown Error"
if v, ok := cdrJSON["result"]; ok && v != nil {
resultVal := parse.Number(v)
if resultVal == 1 {
callResult = "Success"
callResult = "200 OK"
callCause = "Normal Send"
}
}
// 结果原因
if v, ok := cdrJSON["cause"]; ok && v != nil && callResult == "Fail" {
cause := fmt.Sprint(v)
for _, v := range dictCDRCauseCode {
if cause == v.DictValue {
callResult = fmt.Sprintf("%s, %s", callResult, i18n.TKey(language, v.DictLabel))
break
}
}
}
// if v, ok := cdrJSON["cause"]; ok && v != nil && callResult == "Fail" {
// cause := fmt.Sprint(v)
// for _, v := range dictCDRCauseCode {
// if cause == v.DictValue {
// callResult = fmt.Sprintf("%s, %s", callResult, i18n.TKey(language, v.DictLabel))
// break
// }
// }
// }
// 取时间
timeStr := ""
if v, ok := cdrJSON["updateTime"]; ok && v != nil {
@@ -598,8 +604,9 @@ func (s BackupExportCDRProcessor) exportSMSC(query neDataModel.CDREventSMSCQuery
"E" + idx: caller,
"F" + idx: called,
"G" + idx: callResult,
"H" + idx: timeStr,
"I" + idx: row.TenantName,
"H" + idx: callCause,
"I" + idx: timeStr,
"J" + idx: row.TenantName,
})
}
// 导出数据表格

View File

@@ -169,7 +169,7 @@ func (s *IMSController) CDRExport(c *gin.Context) {
"G1": "Duration",
"H1": "Result Code",
"I1": "Result Cause",
"J1": "MOS Average",
"J1": "MOS",
"K1": "Call Connection Time",
"L1": "Call Start Time",
"M1": "Hangup Time",
@@ -286,9 +286,9 @@ func (s *IMSController) CDRExport(c *gin.Context) {
"F" + idx: called,
"G" + idx: duration,
"H" + idx: callResult,
"I" + idx: mosAverage,
"J" + idx: callConnectionTime,
"K" + idx: callCause,
"I" + idx: callCause,
"J" + idx: mosAverage,
"K" + idx: callConnectionTime,
"L" + idx: seizureTimeStr,
"M" + idx: releaseTimeStr,
"N" + idx: tenantName,

View File

@@ -160,12 +160,13 @@ func (s *SMSCController) CDRExport(c *gin.Context) {
"C1": "Service Type",
"D1": "Caller",
"E1": "Called",
"F1": "Result",
"G1": "Time",
"H1": "Tenant Name", // for multi-tenancy
"F1": "Result Code",
"G1": "Result Cause",
"H1": "Time",
"I1": "Tenant Name", // for multi-tenancy
}
// 读取字典数据 CDR 原因码
dictCDRCauseCode := sysService.NewSysDictData.SelectDictDataByType("cdr_cause_code")
dictCDRSMSCCauseCode := sysService.NewSysDictData.SelectDictDataByType("cdr_cause_smsc")
// 从第二行开始的数据
dataCells := make([]map[string]any, 0)
for i, row := range rows {
@@ -198,19 +199,20 @@ func (s *SMSCController) CDRExport(c *gin.Context) {
caller = v.(string)
}
// 呼叫结果 0失败1成功
callResult := "Fail"
callResult := "FAILED"
if v, ok := cdrJSON["result"]; ok && v != nil {
resultVal := parse.Number(v)
if resultVal == 1 {
callResult = "Success"
callResult = "SUCCESS"
}
}
// 结果原因
if v, ok := cdrJSON["cause"]; ok && v != nil && callResult == "Fail" {
callCause := "Unknown Error"
if v, ok := cdrJSON["cause"]; ok && v != nil {
cause := fmt.Sprint(v)
for _, v := range dictCDRCauseCode {
for _, v := range dictCDRSMSCCauseCode {
if cause == v.DictValue {
callResult = fmt.Sprintf("%s, %s", callResult, i18n.TKey(language, v.DictLabel))
callCause = i18n.TKey(language, v.DictLabel)
break
}
}
@@ -234,8 +236,9 @@ func (s *SMSCController) CDRExport(c *gin.Context) {
"D" + idx: caller,
"E" + idx: called,
"F" + idx: callResult,
"G" + idx: timeStr,
"H" + idx: tenantName,
"G" + idx: callCause,
"H" + idx: timeStr,
"I" + idx: tenantName,
})
}