Skip to content

Commit 5e24751

Browse files
longyue0521flycash
authored andcommitted
feat(product&marketing): 新增面试服务商品及完成面试服务商品订单后向企业微信群发送通知 (#210)
1 parent 6ba198f commit 5e24751

File tree

11 files changed

+261
-27
lines changed

11 files changed

+261
-27
lines changed

config/config.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ wechat:
1616
appSecretID: abc
1717
appSecretKey: abc
1818

19+
# 企业微信
20+
qywechat:
21+
# 机器人
22+
chatRobot:
23+
webhookURL: "your/webhookURL"
1924

2025
mysql:
2126
dsn: "webook:webook@tcp(mysql8:3306)/webook?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&loc=Local&timeout=1s&readTimeout=3s&writeTimeout=3s"

internal/marketing/internal/event/consumer/order_event_consumer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (c *OrderEventConsumer) Consume(ctx context.Context) error {
7070
}
7171

7272
for _, spu := range evt.SPUs {
73-
if !spu.IsMemberProduct() && !spu.IsProjectProduct() && !spu.IsCodeCategory() {
73+
if !spu.IsMemberProduct() && !spu.IsProjectProduct() && !spu.IsServiceProduct() && !spu.IsCodeCategory() {
7474
return nil
7575
}
7676
}

internal/marketing/internal/event/event.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ func (s SPU) IsProjectProduct() bool {
5959
return s.IsProductCategory() && s.Category1 == "project"
6060
}
6161

62+
func (s SPU) IsServiceProduct() bool {
63+
return s.IsProductCategory() && s.Category1 == "service"
64+
}
65+
6266
type CreditIncreaseEvent struct {
6367
Key string `json:"key"`
6468
Uid int64 `json:"uid"` // 用户A 用户C
@@ -79,3 +83,7 @@ type UserRegistrationEvent struct {
7983
Uid int64 `json:"uid,omitempty"`
8084
InvitationCode string `json:"invitationCode,omitempty"`
8185
}
86+
87+
type QYWechatEvent struct {
88+
Content string `json:"content"`
89+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package producer
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"encoding/json"
7+
"fmt"
8+
"io"
9+
"net/http"
10+
11+
"github.com/ecodeclub/webook/internal/marketing/internal/event"
12+
)
13+
14+
type QYWeiChatEventProducer interface {
15+
Produce(ctx context.Context, evt event.QYWechatEvent) error
16+
}
17+
18+
type POSTFunc func(url, contentType string, body io.Reader) (resp *http.Response, err error)
19+
20+
type qyWeChatEventProducer struct {
21+
url string
22+
postFunc POSTFunc
23+
}
24+
25+
func NewQYWeChatEventProducer(url string, postFunc POSTFunc) QYWeiChatEventProducer {
26+
return &qyWeChatEventProducer{
27+
url: url,
28+
postFunc: postFunc,
29+
}
30+
}
31+
32+
func (q *qyWeChatEventProducer) Produce(_ context.Context, evt event.QYWechatEvent) error {
33+
type Message struct {
34+
MsgType string `json:"msgtype"`
35+
Text event.QYWechatEvent `json:"text"`
36+
}
37+
data, err := json.Marshal(&Message{MsgType: "text", Text: evt})
38+
if err != nil {
39+
return fmt.Errorf("序列化失败: %w", err)
40+
}
41+
resp, err := q.postFunc(q.url, "application/json", bytes.NewBuffer(data))
42+
if err != nil {
43+
return fmt.Errorf("发送请求失败: %w", err)
44+
}
45+
defer func() {
46+
_ = resp.Body.Close()
47+
}()
48+
if resp.StatusCode != http.StatusOK {
49+
return fmt.Errorf("处理请求失败: %d %s", resp.StatusCode, http.StatusText(resp.StatusCode))
50+
}
51+
return nil
52+
}

0 commit comments

Comments
 (0)