package sys import ( "context" "hotgo/internal/model/input/sysin" "hotgo/internal/service" "github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gtime" ) const imMailboxConfigTable = "im_mailbox_config" type sSysImMailboxConfig struct{} func NewSysImMailboxConfig() *sSysImMailboxConfig { return &sSysImMailboxConfig{} } func init() { service.RegisterSysImMailboxConfig(NewSysImMailboxConfig()) } func (s *sSysImMailboxConfig) Get(ctx context.Context, in *sysin.ImMailboxConfigGetInp) (res *sysin.ImMailboxConfigModel, err error) { if err = in.Filter(ctx); err != nil { return } db, tenant, err := resolveImTenantDB(ctx, in.TenantId) if err != nil { return nil, err } if err = s.ensureDefault(ctx, db); err != nil { return nil, err } if err = s.model(ctx, db).Where("id", 1).Scan(&res); err != nil { return nil, gerror.Wrap(err, "获取IM总经理信箱配置失败,请稍后重试!") } if res != nil { res.TenantId = tenant.Id res.TenantName = tenant.Name } return } func (s *sSysImMailboxConfig) Update(ctx context.Context, in *sysin.ImMailboxConfigUpdateInp) (err error) { if err = in.Filter(ctx); err != nil { return } db, tenant, err := resolveImTenantDB(ctx, in.TenantId) if err != nil { return err } if err = s.ensureDefault(ctx, db); err != nil { return err } requiredFields := `["subject","content"]` if in.RequiredFields != nil && in.RequiredFields.String() != "" && in.RequiredFields.String() != "null" { requiredFields = in.RequiredFields.String() } attachmentPolicy := `{"max_files":5,"purpose":"executive_mailbox"}` if in.AttachmentPolicy != nil && in.AttachmentPolicy.String() != "" && in.AttachmentPolicy.String() != "null" { attachmentPolicy = in.AttachmentPolicy.String() } if _, err = db.Model(imMailboxConfigTable).Safe().Ctx(ctx).Where("id", 1).Data(g.Map{ "enabled": in.Enabled, "allow_anonymous": in.AllowAnonymous, "required_fields": requiredFields, "max_length": in.MaxLength, "attachment_policy": attachmentPolicy, "notice_title": in.NoticeTitle, "notice_content": in.NoticeContent, "notice_updated_at": gtime.Now(), "updated_at": gtime.Now(), }).Update(); err != nil { return gerror.Wrap(err, "更新IM总经理信箱配置失败,请稍后重试!") } _ = writeImAdminAudit(ctx, tenant.Id, "im_mailbox_config_update", "im_mailbox_config", 1, "success", g.Map{"enabled": in.Enabled}) return nil } func (s *sSysImMailboxConfig) model(ctx context.Context, db gdb.DB) *gdb.Model { return db.Model(imMailboxConfigTable).Safe().Ctx(ctx).Fields( "id", "enabled", "allow_anonymous", "CAST(required_fields AS CHAR) required_fields", "max_length", "CAST(attachment_policy AS CHAR) attachment_policy", "notice_title", "notice_content", "notice_updated_at", "updated_at", ) } func (s *sSysImMailboxConfig) ensureDefault(ctx context.Context, db gdb.DB) (err error) { var count int if count, err = db.Model(imMailboxConfigTable).Safe().Ctx(ctx).Where("id", 1).Count(); err != nil { return gerror.Wrap(err, "检查IM总经理信箱默认配置失败,请稍后重试!") } if count > 0 { return nil } _, err = db.Model(imMailboxConfigTable).Safe().Ctx(ctx).Data(g.Map{ "id": 1, "enabled": 1, "allow_anonymous": 1, "required_fields": `["subject","content"]`, "max_length": 5000, "attachment_policy": `{"max_files":5,"purpose":"executive_mailbox"}`, "notice_title": "总经理信箱", "notice_content": "请如实填写诉求,匿名提交将按企业政策保护展示身份。", "notice_updated_at": gtime.Now(), "created_at": gtime.Now(), "updated_at": gtime.Now(), }).Insert() if err != nil { return gerror.Wrap(err, "初始化IM总经理信箱默认配置失败,请稍后重试!") } return nil }