feat: 新增IM联系我们字典配置,优化用户搜索与邀请绑定功能
1. 优化IM用户列表搜索逻辑,支持长数字用户ID精确匹配 2. 修复前端雪花ID精度丢失问题,改用字符串传输用户ID 3. 新增邀请码批量绑定用户功能,支持搜索绑定指定用户 4. 新增字典配置接口,新增联系我们字典SQL脚本 5. 完善字典数据变更事件推送,优化弹窗关闭与页面刷新逻辑
This commit is contained in:
@@ -13,6 +13,7 @@ import (
|
||||
"hotgo/internal/library/dict"
|
||||
"hotgo/internal/model/input/sysin"
|
||||
"hotgo/internal/service"
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
@@ -30,6 +31,7 @@ func init() {
|
||||
|
||||
// Delete 删除
|
||||
func (s *sSysDictData) Delete(ctx context.Context, in *sysin.DictDataDeleteInp) error {
|
||||
oldTypes := s.getTypesByIds(ctx, in.Id)
|
||||
if count, err := dao.SysDictData.Ctx(ctx).WherePri(in.Id).Where(dao.SysDictData.Columns().Type, consts.ImInternalSecretDictType).Count(); err != nil {
|
||||
return gerror.Wrap(err, consts.ErrorORM)
|
||||
} else if count > 0 {
|
||||
@@ -40,6 +42,7 @@ func (s *sSysDictData) Delete(ctx context.Context, in *sysin.DictDataDeleteInp)
|
||||
err = gerror.Wrap(err, consts.ErrorORM)
|
||||
return err
|
||||
}
|
||||
s.publishDictUpdated(ctx, oldTypes)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -52,11 +55,13 @@ func (s *sSysDictData) Edit(ctx context.Context, in *sysin.DictDataEditInp) (err
|
||||
} else if count > 0 {
|
||||
return gerror.New("内部密钥字典禁止通过通用接口操作")
|
||||
}
|
||||
oldTypes := s.getTypesByIds(ctx, in.Id)
|
||||
_, err = dao.SysDictData.Ctx(ctx).Fields(sysin.DictDataUpdateFields{}).WherePri(in.Id).Data(in).Update()
|
||||
if err != nil {
|
||||
err = gerror.Wrap(err, consts.ErrorORM)
|
||||
return err
|
||||
}
|
||||
s.publishDictUpdated(ctx, append(oldTypes, in.Type))
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -79,9 +84,33 @@ func (s *sSysDictData) Edit(ctx context.Context, in *sysin.DictDataEditInp) (err
|
||||
err = gerror.Wrap(err, consts.ErrorORM)
|
||||
return err
|
||||
}
|
||||
s.publishDictUpdated(ctx, []string{in.Type})
|
||||
return nil
|
||||
}
|
||||
|
||||
// getTypesByIds 查询指定字典数据ID的类型标识,用于变更后失效缓存
|
||||
func (s *sSysDictData) getTypesByIds(ctx context.Context, ids interface{}) []string {
|
||||
columns, err := dao.SysDictData.Ctx(ctx).Where(dao.SysDictData.Columns().Id, ids).Fields(dao.SysDictData.Columns().Type).Array()
|
||||
if err != nil {
|
||||
g.Log().Warningf(ctx, "查询字典类型失败 err:%+v", err)
|
||||
return nil
|
||||
}
|
||||
return g.NewVar(columns).Strings()
|
||||
}
|
||||
|
||||
// publishDictUpdated 发布字典变更事件,通知 im-server 实时失效字典配置缓存
|
||||
func (s *sSysDictData) publishDictUpdated(ctx context.Context, types []string) {
|
||||
for _, t := range types {
|
||||
t = strings.TrimSpace(t)
|
||||
if t == "" || t == consts.ImInternalSecretDictType {
|
||||
continue
|
||||
}
|
||||
if err := publishImPolicyEvent(ctx, 0, "*", consts.ImConfigEventDictionaryUpdated, t, 0); err != nil {
|
||||
g.Log().Warningf(ctx, "发布字典变更事件失败 type:%s err:%+v", t, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// List 获取列表
|
||||
func (s *sSysDictData) List(ctx context.Context, in *sysin.DictDataListInp) (list []*sysin.DictDataListModel, totalCount int, err error) {
|
||||
mod := dao.SysDictData.Ctx(ctx).WhereNot(dao.SysDictData.Columns().Type, consts.ImInternalSecretDictType)
|
||||
|
||||
Reference in New Issue
Block a user