refactor: Update AFTN message parsing logic
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -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))
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user