sync: 对齐小程序 v1.0.2 生产代码并脱敏
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-app/internal/consts"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-app/internal/dao"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-app/internal/model"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-app/internal/model/do"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-app/internal/model/entity"
|
||||
|
||||
"github.com/gogf/gf/v2/database/gdb"
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
)
|
||||
|
||||
func warningPreferenceKey(userID int64) string {
|
||||
return fmt.Sprintf("app.wechat.warning.enabled.%d", userID)
|
||||
}
|
||||
|
||||
func (s *sAppUser) WarningPreference(ctx context.Context) (*model.AppWarningPreferenceModel, error) {
|
||||
user, err := appCurrentUser(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var config *entity.SysConfig
|
||||
err = dao.SysConfig.Ctx(ctx).Where("tenant_id", user.TenantId).Where("config_key", warningPreferenceKey(user.UserId)).OrderDesc("config_id").Scan(&config)
|
||||
if err != nil {
|
||||
return nil, gerror.Wrap(err, "读取消息提醒设置失败")
|
||||
}
|
||||
bound, _, err := appUserWechatBindingStatus(ctx, user)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &model.AppWarningPreferenceModel{Enabled: bound && (config == nil || config.ConfigValue == "1"), WechatBound: bound}, nil
|
||||
}
|
||||
|
||||
func saveWarningPreference(ctx context.Context, tx gdb.TX, user *entity.SysUser, enabled bool) error {
|
||||
value := "0"
|
||||
if enabled {
|
||||
value = "1"
|
||||
}
|
||||
var config *entity.SysConfig
|
||||
if err := dao.SysConfig.Ctx(ctx).TX(tx).Where("tenant_id", user.TenantId).Where("config_key", warningPreferenceKey(user.UserId)).OrderDesc("config_id").Scan(&config); err != nil {
|
||||
return gerror.Wrap(err, "读取消息提醒设置失败")
|
||||
}
|
||||
data := do.SysConfig{ConfigValue: value, UpdatedBy: user.UserId}
|
||||
if config != nil {
|
||||
_, err := dao.SysConfig.Ctx(ctx).TX(tx).Where("tenant_id", user.TenantId).Where("config_key", warningPreferenceKey(user.UserId)).Data(data).Update()
|
||||
return gerror.Wrap(err, "保存消息提醒设置失败")
|
||||
}
|
||||
data.TenantId = user.TenantId
|
||||
data.ConfigKey = warningPreferenceKey(user.UserId)
|
||||
data.ConfigName = "小程序用户微信预警提醒偏好"
|
||||
data.ConfigType = "N"
|
||||
data.CreatedBy = user.UserId
|
||||
data.CreatedDept = user.DeptId
|
||||
_, err := dao.SysConfig.Ctx(ctx).TX(tx).Data(data).Insert()
|
||||
return gerror.Wrap(err, "保存消息提醒设置失败")
|
||||
}
|
||||
|
||||
func (s *sAppUser) SaveWarningPreference(ctx context.Context, param *model.AppWarningPreferenceParam) (*model.AppWarningPreferenceModel, error) {
|
||||
if param == nil || param.Enabled == nil {
|
||||
return nil, gerror.New("请选择是否开启预警订阅")
|
||||
}
|
||||
user, err := appCurrentUser(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = dao.SysUser.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||||
var locked *entity.SysUser
|
||||
lockModel := dao.SysUser.Ctx(ctx).TX(tx).WherePri(user.UserId).Where("tenant_id", user.TenantId)
|
||||
if dao.SysUser.DB().GetConfig().Type != "sqlite" {
|
||||
lockModel = lockModel.LockUpdate()
|
||||
}
|
||||
if err := lockModel.Scan(&locked); err != nil {
|
||||
return err
|
||||
}
|
||||
if locked == nil {
|
||||
return gerror.New("账号不存在")
|
||||
}
|
||||
if *param.Enabled {
|
||||
count, err := dao.SysSocial.Ctx(ctx).TX(tx).Where("tenant_id", user.TenantId).Where("user_id", user.UserId).Where("source", consts.SourceWechatMp).Where("open_id <> ?", "").Count()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if count == 0 {
|
||||
return gerror.New("请先在个人资料中绑定微信")
|
||||
}
|
||||
}
|
||||
return saveWarningPreference(ctx, tx, user, *param.Enabled)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, gerror.Wrap(err, "保存消息提醒设置失败")
|
||||
}
|
||||
return s.WarningPreference(ctx)
|
||||
}
|
||||
|
||||
func (s *sAppUser) UnbindWechat(ctx context.Context) (*model.AppWechatBindModel, error) {
|
||||
user, err := appCurrentUser(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if strings.TrimSpace(user.UserName) == "" || strings.TrimSpace(user.Password) == "" {
|
||||
return nil, gerror.New("请先设置可用的账号密码,再解除微信绑定")
|
||||
}
|
||||
err = unbindWechatBindings(ctx, user)
|
||||
if err != nil {
|
||||
return nil, gerror.Wrap(err, "解除微信绑定失败")
|
||||
}
|
||||
info, err := getAppUserInfoById(ctx, user.UserId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &model.AppWechatBindModel{Success: true, UserInfo: info}, nil
|
||||
}
|
||||
|
||||
func unbindWechatBindings(ctx context.Context, user *entity.SysUser) error {
|
||||
return dao.SysUser.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||||
var locked *entity.SysUser
|
||||
lockModel := dao.SysUser.Ctx(ctx).TX(tx).WherePri(user.UserId).Where("tenant_id", user.TenantId)
|
||||
if dao.SysUser.DB().GetConfig().Type != "sqlite" {
|
||||
lockModel = lockModel.LockUpdate()
|
||||
}
|
||||
if err := lockModel.Scan(&locked); err != nil {
|
||||
return err
|
||||
}
|
||||
if locked == nil || strings.TrimSpace(locked.UserName) == "" || strings.TrimSpace(locked.Password) == "" {
|
||||
return gerror.New("请先设置可用的账号密码")
|
||||
}
|
||||
if err := saveWarningPreference(ctx, tx, user, false); err != nil {
|
||||
return err
|
||||
}
|
||||
_, err := dao.SysSocial.Ctx(ctx).TX(tx).Where("tenant_id", user.TenantId).Where("user_id", user.UserId).Where("source", consts.SourceWechatMp).Delete()
|
||||
return err
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user