修复周星

This commit is contained in:
hy001 2026-04-30 22:18:25 +08:00
parent dc6f15369c
commit 157307a474
3 changed files with 31 additions and 5 deletions

View File

@ -14,7 +14,7 @@ import (
// ProcessGiftEvent 按送礼事件发生时间归属配置,并把积分累加到对应周期实时榜。
func (s *WeekStarService) ProcessGiftEvent(ctx context.Context, event weekStarGiftEvent, rawPayload string) error {
sysOrigin := s.normalizeSysOrigin(event.SysOrigin)
trackID := strings.TrimSpace(event.TrackID)
trackID := strings.TrimSpace(event.TrackID.String())
if trackID == "" || int64(event.SendUserID) <= 0 {
return nil
}
@ -154,7 +154,7 @@ func (e weekStarMessageEventEnvelope) bodyPayload() (string, bool, error) {
}
func (e weekStarGiftEvent) hasBusinessFields() bool {
return strings.TrimSpace(e.TrackID) != "" ||
return strings.TrimSpace(e.TrackID.String()) != "" ||
int64(e.SendUserID) > 0 ||
int64(e.GiftConfig.ID) > 0
}

View File

@ -190,7 +190,7 @@ func TestProcessGiftEventCountsConfiguredNonDefaultSysOrigin(t *testing.T) {
}
err := service.ProcessGiftEvent(ctx, weekStarGiftEvent{
TrackID: "tarab-track-1",
TrackID: flexibleString("tarab-track-1"),
SysOrigin: "TARAB",
SendUserID: flexibleInt64(3001),
Quantity: flexibleInt64(2),
@ -264,7 +264,7 @@ func TestProcessGiftPayloadUnwrapsJavaMessageEventEnvelope(t *testing.T) {
}
body, err := json.Marshal(map[string]any{
"trackId": "2049831533035974657",
"trackId": int64(2049831533035974657),
"sysOrigin": "LIKEI",
"sendUserId": "2042274349343506434",
"quantity": 4,

View File

@ -71,9 +71,35 @@ func (v flexibleInt64) MarshalJSON() ([]byte, error) {
return json.Marshal(strconv.FormatInt(int64(v), 10))
}
// flexibleString 用于兼容 MQ 中字符串和数字混用的幂等 ID 字段。
type flexibleString string
// UnmarshalJSON 把 JSON 字符串或数字统一解析成字符串。
func (v *flexibleString) UnmarshalJSON(data []byte) error {
raw := strings.TrimSpace(string(data))
if raw == "" || raw == "null" {
*v = ""
return nil
}
if strings.HasPrefix(raw, "\"") && strings.HasSuffix(raw, "\"") {
var parsed string
if err := json.Unmarshal(data, &parsed); err != nil {
return err
}
*v = flexibleString(strings.TrimSpace(parsed))
return nil
}
*v = flexibleString(raw)
return nil
}
func (v flexibleString) String() string {
return string(v)
}
// weekStarGiftEvent 表示送礼 MQ 事件的核心字段。
type weekStarGiftEvent struct {
TrackID string `json:"trackId"`
TrackID flexibleString `json:"trackId"`
SysOrigin string `json:"sysOrigin"`
SendUserID flexibleInt64 `json:"sendUserId"`
Quantity flexibleInt64 `json:"quantity"`