package handlers import ( "context" "lone-services/pkg/utils" "lone-services/pkg/wecom/message" "lone-services/services/wecom/internal/dao" "lone-services/services/wecom/internal/logic/message/builder" msgutil "lone-services/services/wecom/internal/logic/message/utils" jsoniter "github.com/json-iterator/go" ) type AddressNotifyFirstHandler struct{} func (h AddressNotifyFirstHandler) Build(ctx context.Context, job dao.WeComJob) ([]*message.SendRequest, error) { change, err := msgutil.GetLatestReviewChange(job.BizType, int64(job.BizId)) if err != nil { return nil, err } content := msgutil.BuildContent( struct{ Key, Value string }{"门店名称", getTypeNameFromContent(msgutil.DiffContent(change))}, struct{ Key, Value string }{"提醒消息", "您有一个地址需要审核"}, ) card := builder.TextCardParams{ ToUser: utils.GetConfigString("wecom.address_notify_second_ids"), Desc: "地址通知", Title: "地址审核通知", Content: content, } req, err := builder.TextCard(card) if err != nil { return nil, err } return []*message.SendRequest{req}, nil } func getTypeNameFromContent(content string) string { if content == utils.StringEmpty { return utils.StringEmpty } var data struct { Old map[string]any `json:"old"` New map[string]any `json:"new"` } if err := jsoniter.Unmarshal([]byte(content), &data); err != nil { return utils.StringEmpty } if v, ok := data.New["type_name"].(string); ok && v != utils.StringEmpty { return v } if v, ok := data.Old["type_name"].(string); ok && v != utils.StringEmpty { return v } return utils.StringEmpty }