增加微信通知功能

This commit is contained in:
2026-09-16 18:06:18 +08:00
parent b48688cbab
commit f386899625
23 changed files with 3539 additions and 18 deletions
+5
View File
@@ -159,6 +159,11 @@ func Init(_ string) {
// 平台端推广佣金(docs/sql/create_platform_commission.sql)
new(PlatformCommissionRule),
new(PlatformCommissionOrder),
// 微信公众号(服务号)绑定与推送(docs/sql/create_platform_wechat_mp.sql)
new(WechatMpConfig),
new(WechatMpFollower),
new(WechatMpVerifyCode),
)
// 创建全局 Ormer
+85
View File
@@ -0,0 +1,85 @@
package models
import "time"
// =============================================================
// 微信公众号(服务号)绑定与推送(表结构见 docs/sql/create_platform_wechat_mp.sql)
// 1. 配置:AppID / AppSecret / Token / EncodingAESKey(敏感字段加密存储)
// 2. 粉丝:关注/取关事件沉淀,可绑定平台用户或租户用户,认证后定向推送
// 3. 验证码:扫码关注 → 公众号被动回复验证码 → 平台核销完成绑定
// =============================================================
// 绑定对象类型
const (
WechatBindTypePlatformUser = "platform_user" // 平台用户(yz_system_admin_user)
WechatBindTypeTenantUser = "tenant_user" // 租户用户(yz_system_tenant_user)
)
// 验证码状态
const (
WechatVerifyStatusWaiting = 0 // 待扫码
WechatVerifyStatusScanned = 1 // 已扫码待核销
WechatVerifyStatusUsed = 2 // 已核销
WechatVerifyStatusExpired = 3 // 已过期
)
// WechatMpConfig 微信公众号(服务号)配置 yz_platform_wechat_mp_config(单行)
type WechatMpConfig struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
AppID string `orm:"column(app_id);size(64)" json:"app_id"`
AppSecret string `orm:"column(app_secret);size(512)" json:"-"` // 加密存储,不回显
Token string `orm:"column(token);size(128)" json:"token"`
AESKey string `orm:"column(aes_key);size(512)" json:"-"` // 加密存储,不回显
EncryptMode string `orm:"column(encrypt_mode);size(16)" json:"encrypt_mode"` // plain / compatible / safe
TemplateID string `orm:"column(template_id);size(128)" json:"template_id"`
Verified int8 `orm:"column(verified);default(0)" json:"verified"`
Enabled int8 `orm:"column(enabled);default(0)" json:"enabled"`
Remark string `orm:"column(remark);size(255)" json:"remark"`
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
}
func (m *WechatMpConfig) TableName() string { return "yz_platform_wechat_mp_config" }
// WechatMpFollower 微信公众号关注用户(粉丝) yz_platform_wechat_mp_follower
type WechatMpFollower struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
OpenID string `orm:"column(openid);size(64)" json:"openid"`
UnionID string `orm:"column(unionid);size(64)" json:"unionid"`
Nickname string `orm:"column(nickname);size(128)" json:"nickname"`
Avatar string `orm:"column(avatar);size(512)" json:"avatar"`
Sex int8 `orm:"column(sex);default(0)" json:"sex"`
City string `orm:"column(city);size(64)" json:"city"`
Province string `orm:"column(province);size(64)" json:"province"`
Country string `orm:"column(country);size(64)" json:"country"`
Subscribe int8 `orm:"column(subscribe);default(1)" json:"subscribe"`
SubscribeTime *time.Time `orm:"column(subscribe_time);type(datetime);null" json:"subscribe_time"`
UnsubscribeTime *time.Time `orm:"column(unsubscribe_time);type(datetime);null" json:"unsubscribe_time"`
BindType string `orm:"column(bind_type);size(32)" json:"bind_type"`
BindID uint64 `orm:"column(bind_id)" json:"bind_id"`
BindTid uint64 `orm:"column(bind_tid)" json:"bind_tid"`
BindTime *time.Time `orm:"column(bind_time);type(datetime);null" json:"bind_time"`
Remark string `orm:"column(remark);size(255)" json:"remark"`
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
}
func (m *WechatMpFollower) TableName() string { return "yz_platform_wechat_mp_follower" }
// WechatMpVerifyCode 公众号关注取码/绑定验证码 yz_platform_wechat_mp_verify_code
type WechatMpVerifyCode struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
Scene string `orm:"column(scene);size(64)" json:"scene"`
Code string `orm:"column(code);size(8)" json:"code"`
OpenID string `orm:"column(openid);size(64)" json:"openid"`
Status int8 `orm:"column(status);default(0)" json:"status"`
BindType string `orm:"column(bind_type);size(32)" json:"bind_type"`
BindID uint64 `orm:"column(bind_id)" json:"bind_id"`
BindTid uint64 `orm:"column(bind_tid)" json:"bind_tid"`
ExpireAt *time.Time `orm:"column(expire_at);type(datetime);null" json:"expire_at"`
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
}
func (m *WechatMpVerifyCode) TableName() string { return "yz_platform_wechat_mp_verify_code" }