Пример #1
0
        public async Task <ResultMessage <bool> > CreateTenant([FromBody] SynchronizeTenantDto input)
        {
            var otherSystem = _principalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == "SplitPackageOtherSystemId");

            if (string.IsNullOrEmpty(otherSystem?.Value))
            {
                throw new UserFriendlyException("不存在该系统标识");
            }
            return(new ResultMessage <bool>(ResultCode.Success, "success", await _tenantService.CreateTenant(input, long.Parse(otherSystem.Value))));
        }
Пример #2
0
        public async Task <bool> CreateTenant(SynchronizeTenantDto dto, long otherSystemId)
        {
            using (var unitOfWork = _unitOfWorkManager.Begin())
            {
                var tenant = new Tenant()
                {
                    TenancyName   = dto.TenantName,
                    Name          = dto.Name,
                    ApiKey        = dto.TenantName,
                    OtherSystemId = otherSystemId
                };
                await _tenantManager.CreateAsync(tenant);

                await _unitOfWorkManager.Current.SaveChangesAsync(); // To get new tenant's id.

                // We are working entities of new tenant, so changing tenant filter
                using (_unitOfWorkManager.Current.SetTenantId(tenant.Id))
                {
                    // Create static roles for new tenant
                    CheckErrors(await _roleManager.CreateStaticRoles(tenant.Id));
                    await _unitOfWorkManager.Current.SaveChangesAsync(); // To get static role ids

                    // Grant all permissions to admin role
                    var adminRole = _roleManager.Roles.Single(r => r.Name == StaticRoleNames.Tenants.Admin);
                    await _roleManager.GrantAllPermissionsAsync(adminRole);

                    // Create admin user for the tenant
                    var adminUser = User.CreateTenantAdminUser(tenant.Id, "*****@*****.**");
                    adminUser.Password = _passwordHasher.HashPassword(adminUser, User.DefaultPassword);
                    CheckErrors(await _userManager.CreateAsync(adminUser));
                    await _unitOfWorkManager.Current.SaveChangesAsync(); // To get admin user's id

                    // Assign admin user to role!
                    CheckErrors(await _userManager.AddToRoleAsync(adminUser, adminRole.Name));
                    List <long> addSet = new List <long>();
                    foreach (var item in dto.Channels)
                    {
                        var channel = await this._lcRepository.GetAll().IgnoreQueryFilters().FirstAsync(o => o.LogisticBy.LogisticCode == item.LogisticCode &&
                                                                                                        o.ChannelName == item.LogisticChannelCode);

                        var tlc = new TenantLogisticChannel()
                        {
                            TenantId          = tenant.Id,
                            LogisticChannelId = channel.Id
                        };
                        if (item.StepWeight > 0)
                        {
                            tlc.LogisticChannelChange = JsonConvert.SerializeObject(new ChangeFreightRule()
                            {
                                WeightChargeRules = new List <WeightFreight>()
                                {
                                    new WeightFreight()
                                    {
                                        Currency       = "AUD",
                                        Unit           = "g",
                                        StartingWeight = item.StartingWeight.Value,
                                        EndWeight      = 1000000,
                                        StartingPrice  = item.StartingPrice.Value,
                                        StepWeight     = item.StepWeight.Value,
                                        CostPrice      = item.Price.Value,
                                        Price          = item.Price.Value
                                    }
                                }
                            });
                        }
                        await this._tlcRepository.InsertAsync(tlc);

                        addSet.Add(channel.Id);
                    }
                    await this._eventBus.TriggerAsync(new TenantImportChannelEvent()
                    {
                        TenantId         = tenant.Id,
                        AddChannelIds    = addSet,
                        RemoveChannelIds = new List <long>()
                    });

                    await _unitOfWorkManager.Current.SaveChangesAsync();
                }
                await unitOfWork.CompleteAsync();

                return(true);
            }
        }