refactor: Update AFTN message parsing logic

This commit is contained in:
windyboy
2024-07-20 22:21:12 +08:00
parent 6f69a56168
commit 2b83d9b785
8 changed files with 190 additions and 796 deletions
-81
View File
@@ -1,81 +0,0 @@
package domain
import (
"caatsm/pkg/utils"
"fmt"
"time"
)
// AFTN 定义AFTN报文的结构
type AFTN struct {
Header Header `json:"header"` // 报文头部信息
PriorityAndSender PriorityAndSender `json:"priority_and_sender"` // 优先级和发送地址信息
TimeAndReceiver TimeAndReceiver `json:"time_and_receiver"` // 时间和接收地址信息
Body string `json:"body"` // 报文内容
ReceivedTime time.Time `json:"received_time"` // 收报时间,表示电报接收到的时间
Category string `json:"category"`
BodyData interface{} `json:"body_data"`
}
// Header 定义AFTN报文的报头
type Header struct {
StartSignal string `json:"start_signal"` // 启动信号,表示报文的开始,通常为固定值
SendID string `json:"send_id"` // 发送编号,用于唯一标识报文
SendTime string `json:"send_time"` // 发送时间,格式为DDHHMM
}
// 示例:
// Header{
// StartSignal: "ZCZC",
// SendID: "TMQ2611",
// SendTime: "151524",
// }
// PriorityAndSender 定义优先级和发送地址
type PriorityAndSender struct {
Priority string `json:"priority"` // 优先级
Sender string `json:"sender"` // 发报地址
}
// 示例:
// PriorityAndSender{
// Priority: "FF",
// Sender: "ZBTJZPZX",
// }
// TimeAndReceiver 定义时间和接收地址
type TimeAndReceiver struct {
Time string `json:"time"` // 时间
Receiver string `json:"receiver"` // 收报地址
}
// 示例:
// TimeAndReceiver{
// Time: "151524",
// Receiver: "ZGGGZPZX",
// }
// Origin 定义AFTN报文的来源
type Origin struct {
OriginCode string `json:"origin_code"` // 发报地址代码
FiledTime time.Time `json:"filed_time"` // 签发时间,表示电报生成的时间
}
func (h *Header) Validate() error {
// Validate SendTime format (e.g., DDHHMM)
if len(h.SendTime) != 6 {
err := "invalid send_time format"
utils.Logger.Error(err)
return fmt.Errorf(err)
}
return nil
}
func (a *AFTN) Validate() error {
if err := a.Header.Validate(); err != nil {
return err
}
// Add more validation as needed
return nil
}
-52
View File
@@ -1,52 +0,0 @@
package domain
import (
"encoding/json"
"time"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("AFTN", func() {
var original AFTN
BeforeEach(func() {
original = AFTN{
Header: Header{
StartSignal: "ZCZC",
SendID: "TMQ2611",
SendTime: "151524",
},
PriorityAndSender: PriorityAndSender{
Priority: "FF",
Sender: "ZBTJZPZX",
},
TimeAndReceiver: TimeAndReceiver{
Time: "151524",
Receiver: "ZGGGZPZX",
},
Body: "Test message",
ReceivedTime: time.Now(),
Category: "Test",
BodyData: nil,
}
})
Describe("Marshalling and Unmarshalling", func() {
It("should marshal and unmarshal correctly", func() {
data, err := json.Marshal(original)
Expect(err).NotTo(HaveOccurred())
var unmarshalled AFTN
err = json.Unmarshal(data, &unmarshalled)
Expect(err).NotTo(HaveOccurred())
Expect(unmarshalled.Header).To(Equal(original.Header))
Expect(unmarshalled.PriorityAndSender).To(Equal(original.PriorityAndSender))
Expect(unmarshalled.TimeAndReceiver).To(Equal(original.TimeAndReceiver))
Expect(unmarshalled.Body).To(Equal(original.Body))
Expect(unmarshalled.Category).To(Equal(original.Category))
})
})
})
+8
View File
@@ -1,5 +1,7 @@
package domain
import "time"
/*
ZCZC TMQ1324 150631
FF ZBTJZPZX
@@ -24,5 +26,11 @@ type ParsedMessage struct {
SecondaryAddresses []string // Additional recipient addresses
Originator string // Sender of the message
OriginatorDateTime string // Date and time when the originator sent the message
Category string // Category of the message
BodyAndFooter string
BodyData interface{}
ReceivedAt time.Time
ParsedAt time.Time
DispatchedAt time.Time
NeedDispatch bool
}