using FreeSql; using MAX.Core.DependencyInjection; using Store.Users.Entities; namespace Store.Users.Repositories; public interface IUserRepository : IBaseRepository { Task GetUser(string userName); } /// 集中处理旧系统主子账号的有效计费配置和积分权限继承。 internal class UserRepository(IFreeSql freeSql) : BaseRepository(freeSql), IUserRepository, ITransientDependency { public async Task GetUser(string userName) { var user = await Where(u => u.UserName == userName).FirstAsync(); if (user == null || user.IsMainUser) return user; var parent = await Where(u => u.UserName == user.ParentUserName).FirstAsync(); if (parent == null) throw new MAX.Framework.Commons.AppException("主账号不存在,请联系管理员"); user.OemId = parent.OemId; user.PostagePerOrder = Math.Max(2.2m, parent.PostagePerOrder ?? 0); user.RefundPostagePerOrder = Math.Max(2.5m, parent.RefundPostagePerOrder ?? 0); user.GiftOemAmountPerOrder = Math.Max(0, parent.GiftOemAmountPerOrder ?? 0); user.SyncLogisticsPerOrder = parent.SyncLogisticsPerOrder; var authority = (user.Authority ?? "").Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries).ToHashSet(); var parentAuthority = (parent.Authority ?? "").Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); if (parentAuthority.Contains("积分用户")) authority.Add("积分用户"); else authority.Remove("积分用户"); user.Authority = string.Join(",", authority); return user; } }