Ejemplo n.º 1
0
        public async Task Create(CreateRoleInput input)
        {
            var exsitRole = await _roleRepository.FirstOrDefaultAsync(p => p.Name == input.Name);

            if (exsitRole != null)
            {
                throw new BusinessException($"系统中已经存在{input.Name}的角色");
            }
            var role = input.MapTo <Role>();

            await UnitOfWorkAsync(async (conn, trans) =>
            {
                var roleId            = await _roleRepository.InsertAndGetIdAsync(role, conn, trans);
                var queryOperationSql = "SELECT o.* FROM `Operation` as o LEFT JOIN Permission as p ON o.PermissionId = p.Id AND p.IsDeleted = 0 AND o.IsDeleted = 0 WHERE o.PermissionId IN @PermissionIds";

                var operations = await conn.QueryAsync <Operation>(queryOperationSql, new { PermissionIds = input.PermissionIds }, transaction: trans);
                if (!operations.Any(p => p.Mold == Shared.Operations.OperationMold.Query || p.Mold == Shared.Operations.OperationMold.Look))
                {
                    throw new BusinessException($"分配的权限至少要包含查询或是查看类型操作");
                }
                await _rolePermissionRepository.DeleteAsync(p => p.RoleId == roleId, conn, trans);
                foreach (var permissionId in input.PermissionIds)
                {
                    var permission = await _permissionRepository.SingleOrDefaultAsync(p => p.Id == permissionId);
                    if (permission == null)
                    {
                        throw new BusinessException($"不存在Id为{permissionId}的权限信息");
                    }
                    await _rolePermissionRepository.InsertAsync(new RolePermission()
                    {
                        PermissionId = permissionId, RoleId = roleId
                    }, conn, trans);
                }
            }, Connection);
        }
Ejemplo n.º 2
0
        public async Task <string> Create(CreateUserInput input)
        {
            input.CheckDataAnnotations().CheckValidResult();
            var existUser = await _userRepository.FirstOrDefaultAsync(p => p.UserName == input.UserName);

            if (existUser != null)
            {
                throw new UserFriendlyException($"已经存在用户名为{input.UserName}的用户");
            }
            existUser = await _userRepository.FirstOrDefaultAsync(p => p.Phone == input.Phone);

            if (existUser != null)
            {
                throw new UserFriendlyException($"已经存在手机号码为{input.Phone}的用户");
            }
            existUser = await _userRepository.FirstOrDefaultAsync(p => p.Email == input.Email);

            if (existUser != null)
            {
                throw new UserFriendlyException($"已经存在Email为{input.Email}的用户");
            }

            await _userDomainService.Create(input);

            return("新增员工成功");
        }
Ejemplo n.º 3
0
        public async Task <string> Create(CreateTenantInput input)
        {
            var exsitTenant = await _tenantRepository.FirstOrDefaultAsync(p => p.Name == input.Name.Trim());

            if (exsitTenant != null)
            {
                throw new BusinessException($"已经存在{input.Name}的租户");
            }

            var corporationAppServiceProxy = GetService <ICorporationAppService>();

            await UnitOfWorkAsync(async (conn, trans) =>
            {
                var tenantId = await _tenantRepository.InsertAndGetIdAsync(input.MapTo <Tenant>(), conn, trans);
                if (input.CreateSuper)
                {
                    await CreateAdminAndRole(tenantId, input, conn, trans);
                }

                await corporationAppServiceProxy.CreateByTenant(new CreateCorporationByTenantInput()
                {
                    Name           = input.Name,
                    Identification = input.Identification,
                    ParentId       = 0,
                    OpenDate       = DateTime.Now,
                    RegisterDate   = DateTime.Now,
                    Mold           = CorporationMold.Group,
                    TenantId       = tenantId
                });
            }, Connection);

            return("新增租户成功");
        }
Ejemplo n.º 4
0
        public async Task <string> CreateOperation(CreateOperationInput input)
        {
            var operation = await _permissionRepository.FirstOrDefaultAsync(p => p.Code == input.Code);

            if (operation != null)
            {
                throw new BusinessException($"系统中已经存在Code为{input.Code}的操作");
            }
            foreach (var funcId in input.FunctionIds)
            {
                var funcInfo = await _functionRepository.SingleOrDefaultAsync(p => p.Id == funcId);

                if (funcInfo == null)
                {
                    throw new BusinessException($"系统中不存在{funcId}的功能");
                }
            }
            operation = new Permission()
            {
                Code = input.Code,
                Name = input.Name,
                Memo = input.Memo,
                Mold = PermissionMold.Operate,
            };
            await _functionManager.CreateOperation(operation, input.FunctionIds);

            return($"新增{input.Name}操作成功");
        }
Ejemplo n.º 5
0
        public async Task Create(CreateRoleInput input)
        {
            var exsitRole = await _roleRepository.FirstOrDefaultAsync(p => p.Name == input.Name);

            if (exsitRole != null)
            {
                throw new BusinessException($"系统中已经存在{input.Name}的角色");
            }
            var role = input.MapTo <Role>();
            await _roleRepository.InsertAsync(role);
        }
        public async Task inline_sql_with_dapper_should_rollback_when_uow_fails()
        {
            Resolve <IEventBus>().Register <EntityCreatingEventData <Blog> >(eventData =>
            {
                eventData.Entity.Name.ShouldBe("Oguzhan_Same_Uow");
            });

            var blogId = 0;

            using (var uow = Resolve <IUnitOfWorkManager>().Begin())
            {
                blogId = await _blogDapperRepository.InsertAndGetIdAsync(
                    new Blog("Oguzhan_Same_Uow", "www.aspnetboilerplate.com")
                    );

                var person = await _blogRepository.GetAsync(blogId);

                person.ShouldNotBeNull();

                await uow.CompleteAsync();
            }

            try
            {
                using (IUnitOfWorkCompleteHandle uow = Resolve <IUnitOfWorkManager>()
                                                       .Begin(new UnitOfWorkOptions {
                    IsTransactional = true
                }))
                {
                    await _blogDapperRepository.ExecuteAsync(
                        "Update Blogs Set Name = @name where Id =@id",
                        new
                    {
                        id = blogId, name = "Oguzhan_New_Blog"
                    }
                        );

                    throw new Exception("uow rollback");

                    // Unreachable code.
                    // await uow.CompleteAsync();
                }
            }
            catch (Exception)
            {
                //no handling.
            }

            (await _blogDapperRepository.FirstOrDefaultAsync(x => x.Name == "Oguzhan_New_Blog")).ShouldBeNull();
            (await _blogRepository.FirstOrDefaultAsync(x => x.Name == "Oguzhan_New_Blog")).ShouldBeNull();

            (await _blogDapperRepository.FirstOrDefaultAsync(x => x.Name == "Oguzhan_Same_Uow")).ShouldNotBeNull();
            (await _blogRepository.FirstOrDefaultAsync(x => x.Name == "Oguzhan_Same_Uow")).ShouldNotBeNull();
        }
Ejemplo n.º 7
0
        public async Task <string> Create(CreateUserInput input)
        {
            input.CheckDataAnnotations().CheckValidResult();
            var exsitUserInfo = await _userRepository.FirstOrDefaultAsync(p => p.UserName == input.UserName ||
                                                                          p.Email == input.Email ||
                                                                          p.Phone == input.Phone);

            if (exsitUserInfo != null)
            {
                throw new BusinessException("已经存在该员工信息,请检查员工账号信息");
            }

            var userInfo = input.MapTo <UserInfo>();
            await _userManager.CreateUserInfo(userInfo);

            return("新增员工成功");
        }
Ejemplo n.º 8
0
        public async Task <QueryFunctionOutput> QueryFunction(string keyworld)
        {
            var function = await _functionRepository.FirstOrDefaultAsync(p => p.WebApi.Equals(keyworld) || p.Code.Equals(keyworld));

            if (function == null)
            {
                throw new UserFriendlyException($"为查询到{keyworld}的功能记录");
            }
            return(function.MapTo <QueryFunctionOutput>());
        }
Ejemplo n.º 9
0
        public async Task <GetMenuOutput> GetMenu(long id)
        {
            var menu = await _menuRepository.FirstOrDefaultAsync(p => p.Id == id);

            if (menu == null)
            {
                throw new BusinessException($"不存在Id为{id}的菜单信息");
            }
            return(menu.MapTo <GetMenuOutput>());
        }
Ejemplo n.º 10
0
        public async Task CreateWordbook(CreateWordbookInput input)
        {
            var wordbook = await _wordbookRepository.FirstOrDefaultAsync(p => p.Code == input.Code);

            if (wordbook != null)
            {
                throw new BusinessException($"系统中已经存在code为{input.Code}的字典类型");
            }
            wordbook = input.MapTo <Wordbook>();
            await _wordbookRepository.InsertAsync(wordbook);
        }
Ejemplo n.º 11
0
        public async Task <string> Create(CreateRoleInput input)
        {
            input.CheckDataAnnotations().CheckValidResult();
            var exsitRole = await _roleRepository.FirstOrDefaultAsync(p => p.Code == input.Code);

            if (exsitRole != null)
            {
                throw new UserFriendlyException($"已经存在{input.Code}的角色信息");
            }
            await _roleRepository.InsertAsync(input.MapTo <Role>());

            return("新增角色成功");
        }
Ejemplo n.º 12
0
        public async Task <CreateOperationOutput> Create(CreateOperationInput input)
        {
            var exsitOperation = await _operationRepository.FirstOrDefaultAsync(p => p.Name == input.Name);

            if (exsitOperation != null)
            {
                throw new BusinessException($"系统中已经存在{input.Name}的操作,请勿重复添加");
            }
            var menu = await _menuRepository.SingleOrDefaultAsync(p => p.PermissionId == input.PermissionId);

            if (menu == null)
            {
                throw new BusinessException($"不存在PermissionId为{input.PermissionId}的菜单信息");
            }
            var operation  = input.MapTo <Operation>();
            var permission = input.MapTo <Permission>();

            var operationCount = await _operationRepository.GetCountAsync(p => p.MenuId == input.PermissionId);

            operation.Code  = menu.Code + HeroConstants.CodeRuleRestrain.CodeSeparator + (operationCount + 1).ToString().PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
            operation.Level = menu.Level + 1;

            await UnitOfWorkAsync(async (conn, trans) =>
            {
                var permissionId       = await _permissionRepository.InsertAndGetIdAsync(permission, conn, trans);
                operation.PermissionId = permissionId;
                operation.MenuId       = menu.Id;
                var operationId        = await _operationRepository.InsertAndGetIdAsync(operation, conn, trans);
                if (input.ActionIds != null && input.ActionIds.Any())
                {
                    foreach (var actionId in input.ActionIds)
                    {
                        var action = await _actionRepository.SingleOrDefaultAsync(p => p.Id == actionId);
                        if (action == null)
                        {
                            throw new BusinessException($"系统中不存在Id为{actionId}的方法");
                        }
                        var operationAction = new OperationActionRelation()
                        {
                            ActionId = actionId, OperationId = operationId, ServiceId = action.ServiceId
                        };
                        await _operationActionRepository.InsertAsync(operationAction, conn, trans);
                    }
                }
            }, Connection);

            return(new CreateOperationOutput()
            {
                Id = operation.Id, PermissionId = operation.PermissionId, Tips = "新增操作成功"
            });
        }
Ejemplo n.º 13
0
        public async Task <CreateMenuOutput> Create(CreateMenuInput input)
        {
            var  menu         = input.MapTo <Menu>();
            long menuParentId = 0;
            var  exsitMenu    = await _menuRepository.FirstOrDefaultAsync(p => p.Name == input.Name);

            if (exsitMenu != null)
            {
                throw new BusinessException($"系统中已经存在{input.Name}的菜单,请勿重复添加");
            }
            if (menu.Mold == MenuMold.Top)
            {
                var thisLevelMenuCount = await _menuRepository.GetCountAsync(p => p.Mold == MenuMold.Top);

                menu.Code  = (thisLevelMenuCount + 1).ToString().PadRight(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
                menu.Level = 1;
            }
            else
            {
                var parentMenu = await _menuRepository.SingleOrDefaultAsync(p => p.PermissionId == input.ParentPermissionId);

                if (parentMenu == null)
                {
                    throw new BusinessException($"不存在PermissionId为{input.ParentPermissionId}的菜单信息");
                }
                menuParentId = parentMenu.Id;
                var thisLevelMenuCount = await _menuRepository.GetCountAsync(p => p.Mold == MenuMold.SubMenu && p.ParentId == parentMenu.Id);

                menu.Code  = parentMenu.Code + HeroConstants.CodeRuleRestrain.CodeSeparator + (thisLevelMenuCount + 1).ToString().PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
                menu.Level = parentMenu.Level + 1;
            }
            var permission = input.MapTo <Permission>();

            await UnitOfWorkAsync(async (conn, trans) => {
                var permissionId  = await _permissionRepository.InsertAndGetIdAsync(permission, conn, trans);
                menu.PermissionId = permissionId;
                menu.ParentId     = menuParentId;
                await _menuRepository.InsertAsync(menu, conn, trans);
            }, Connection);

            return(new CreateMenuOutput()
            {
                Id = menu.Id, PermissionId = menu.PermissionId, Tips = "新增菜单成功"
            });
        }
Ejemplo n.º 14
0
        public async Task <GetSystemConfigOutput> GetSystemConfig()
        {
            var sysConfig = await _systemConfigRepository.FirstOrDefaultAsync(p => p.TenantId == _session.TenantId);

            if (sysConfig == null)
            {
                var newSysconfig = new SystemConfig()
                {
                    SysName = HeroConstants.DefaultSysName,
                    NonPermissionOperationStyle = NonPermissionOperationStyle.Displayed
                };
                await _systemConfigRepository.InsertAsync(newSysconfig);

                return(newSysconfig.MapTo <GetSystemConfigOutput>());
            }

            return(sysConfig.MapTo <GetSystemConfigOutput>());
        }
Ejemplo n.º 15
0
        public async Task <UpdateCorporationOutput> UpdateCorporation(UpdateCorporationInput input)
        {
            var corporation = await _corporationRepository.SingleOrDefaultAsync(p => p.Id == input.Id);

            if (corporation == null)
            {
                throw new BusinessException($"系统中不存在Id为{input.Id}的公司信息");
            }

            var orgInfo = await _organizationRepository.SingleOrDefaultAsync(p => p.Id == corporation.OrgId);

            if (orgInfo == null)
            {
                throw new BusinessException($"系统中不存在Id为{input.Id}的公司信息");
            }
            if (!input.Identification.Equals(orgInfo.Identification))
            {
                var exsitOrg =
                    await _organizationRepository.FirstOrDefaultAsync(p => p.Identification == input.Identification);

                if (exsitOrg != null)
                {
                    throw new BusinessException($"系统中已经存在标识为{input.Identification}的组织机构");
                }
            }

            corporation = input.MapTo(corporation);
            orgInfo     = input.MapTo(orgInfo);
            await UnitOfWorkAsync(async (conn, trans) =>
            {
                await _organizationRepository.UpdateAsync(orgInfo, conn, trans);
                await _corporationRepository.UpdateAsync(corporation, conn, trans);
            }, Connection);

            return(new UpdateCorporationOutput
            {
                OrgId = orgInfo.Id,
                CorporationId = corporation.Id,
                Tips = "更新公司信息成功"
            });
        }
Ejemplo n.º 16
0
        public async Task <string> Create(CreateUserGroupInput input)
        {
            input.CheckDataAnnotations().CheckValidResult();
            if (input.ParentId != 0)
            {
                var parentUserGroup = await _userGroupRepository.SingleOrDefaultAsync(p => p.Id == input.ParentId);

                if (parentUserGroup == null)
                {
                    throw new BusinessException($"不存在父Id为{input.ParentId}的用户组");
                }
            }
            var existUserGroup = await _userGroupRepository.FirstOrDefaultAsync(p => p.GroupCode == input.GroupCode);

            if (existUserGroup != null)
            {
                throw new BusinessException($"已经存在{input.GroupCode}的用户组");
            }
            var userGroupEntity = input.MapTo <UserGroup>();
            await _userGroupRepository.InsertAsync(userGroupEntity);

            return("新增用户组成功");
        }
Ejemplo n.º 17
0
        public async Task <long> Create(CreateRoleInput input, long?tenantId = null)
        {
            using (var locker = await _lockerProvider.CreateLockAsync("CreateRole"))
            {
                return(await locker.Lock(async() =>
                {
                    var exsitRole =
                        await _roleRepository.FirstOrDefaultAsync(p => p.Identification == input.Identification, false);
                    if (exsitRole != null)
                    {
                        throw new BusinessException($"系统中已经存在{input.Identification}的角色");
                    }
                    CheckUserDefinedDataPermission(input.DataPermissionType, input.DataPermissionOrgIds);
                    var role = input.MapTo <Role>();
                    role.TenantId = _session.TenantId;
                    if (tenantId.HasValue)
                    {
                        role.TenantId = tenantId.Value;
                    }

                    await UnitOfWorkAsync(async(conn, trans) =>
                    {
                        var roleId = await _roleRepository.InsertAndGetIdAsync(role, conn, trans);
                        await _rolePermissionRepository.DeleteAsync(p => p.RoleId == role.Id, conn, trans);
                        var insertSql =
                            "INSERT INTO RolePermission(PermissionId,RoleId,CreateTime,CreateBy,TenantId) VALUES(@PermissionId,@RoleId,@CreationTime,@CreatorUserId,@TenantId)";
                        var rolePermissions = new List <RolePermission>();
                        foreach (var permissionId in input.PermissionIds)
                        {
                            rolePermissions.Add(new RolePermission
                            {
                                PermissionId = permissionId,
                                RoleId = roleId,
                                CreationTime = DateTime.Now,
                                CreatorUserId = _session.UserId,
                                TenantId = role.TenantId
                            });
                        }
                        await conn.ExecuteAsync(insertSql, rolePermissions, trans);
                        if (!input.IsAllOrg)
                        {
                            foreach (var orgId in input.OrgIds)
                            {
                                var roleOrg = new RoleOrganization()
                                {
                                    RoleId = roleId, OrgId = orgId, TenantId = role.TenantId
                                };
                                await _roleOrganizationRepository.InsertAsync(roleOrg, conn, trans);
                            }
                        }

                        if (input.DataPermissionType == DataPermissionType.UserDefined)
                        {
                            var insertDataPermissionOrgSql =
                                "INSERT INTO RoleDataPermissionOrgRelation(RoleId,OrgId,CreateTime,CreateBy,TenantId) VALUES(@RoleId,@OrgId,@CreationTime,@CreatorUserId,@TenantId)";
                            var dataPermissionOrgDatas = new List <RoleDataPermissionOrgRelation>();
                            foreach (var orgId in input.DataPermissionOrgIds)
                            {
                                dataPermissionOrgDatas.Add(new RoleDataPermissionOrgRelation()
                                {
                                    RoleId = roleId,
                                    OrgId = orgId,
                                    CreationTime = DateTime.Now,
                                    CreatorUserId = _session.UserId,
                                    TenantId = role.TenantId
                                });
                            }

                            await conn.ExecuteAsync(insertDataPermissionOrgSql, dataPermissionOrgDatas, trans);
                        }
                    }, Connection);
                    return role.Id;
                }));
            }
        }
Ejemplo n.º 18
0
        public async Task Update(UpdateUserInput input)
        {
            var updateUser = await _userRepository.SingleOrDefaultAsync(p => p.Id == input.Id, false);

            if (updateUser == null)
            {
                throw new BusinessException($"不存在Id为{input.Id}的账号信息");
            }
            if (input.Phone != updateUser.Phone)
            {
                var existUser = await _userRepository.FirstOrDefaultAsync(p => p.Phone == input.Phone, false);

                if (existUser != null)
                {
                    throw new UserFriendlyException($"已经存在手机号码为{input.Phone}的用户");
                }
            }

            if (input.Email != updateUser.Email)
            {
                var existUser = await _userRepository.FirstOrDefaultAsync(p => p.Email == input.Email, false);

                if (existUser != null)
                {
                    throw new UserFriendlyException($"已经存在Email为{input.Email}的用户");
                }
            }

            var departAppServiceProxy = GetService <IDepartmentAppService>();

            if (input.OrgId.HasValue)
            {
                if (!await departAppServiceProxy.Check(input.OrgId.Value))
                {
                    throw new BusinessException($"不存在Id为{input.OrgId}的部门信息");
                }
            }

            var positionAppServiceProxy = GetService <IPositionAppService>();

            if (input.PositionId.HasValue)
            {
                if (!await positionAppServiceProxy.CheckExsit(input.PositionId.Value))
                {
                    throw new BusinessException($"不存在Id为{input.PositionId}的职位信息");
                }
            }

            updateUser = input.MapTo(updateUser);
            using (var locker = await _lockerProvider.CreateLockAsync("UpdateUser"))
            {
                await locker.Lock(async() =>
                {
                    await UnitOfWorkAsync(async(conn, trans) =>
                    {
                        await _userRepository.UpdateAsync(updateUser, conn, trans);
                        await _userRoleRepository.DeleteAsync(p => p.UserId == updateUser.Id, conn, trans);
                        await _userUserGroupRelationRepository.DeleteAsync(p => p.UserId == updateUser.Id, conn, trans);
                        foreach (var roleId in input.RoleIds)
                        {
                            var role = await _roleRepository.SingleOrDefaultAsync(p => p.Id == roleId);
                            if (role == null)
                            {
                                throw new BusinessException($"系统中不存在Id为{roleId}的角色信息");
                            }

                            await _userRoleRepository.InsertAsync(
                                new UserRole {
                                UserId = updateUser.Id, RoleId = roleId
                            }, conn, trans);
                        }

                        foreach (var userGroupId in input.UserGroupIds)
                        {
                            var userGroup = await _userGroupRepository.SingleOrDefaultAsync(p => p.Id == userGroupId);
                            if (userGroup == null)
                            {
                                throw new BusinessException($"系统中不存在Id为{userGroupId}的用户组信息");
                            }

                            await _userUserGroupRelationRepository.InsertAsync(
                                new UserUserGroupRelation {
                                UserId = updateUser.Id, UserGroupId = userGroupId
                            }, conn,
                                trans);
                        }
                    }, Connection);
                });
            }
        }
Ejemplo n.º 19
0
        public async Task Create(CreateUserGroupInput input)
        {
            CheckUserDefinedDataPermission(input.DataPermissionType, input.DataPermissionOrgIds);
            using (var locker = await _lockerProvider.CreateLockAsync("CreateUserGroup"))
            {
                await locker.Lock(async() =>
                {
                    var exsitUserGroup = await _userGroupRepository.FirstOrDefaultAsync(p => p.Identification == input.Identification, false);
                    if (exsitUserGroup != null)
                    {
                        throw new BusinessException($"系统中已经存在{input.Identification}的用户组");
                    }
                    var userGroup = input.MapTo <UserGroup>();
                    await UnitOfWorkAsync(async(conn, trans) =>
                    {
                        var userGroupId = await _userGroupRepository.InsertAndGetIdAsync(userGroup, conn, trans);
                        foreach (var roleId in input.RoleIds)
                        {
                            await _userGroupRoleRepository.InsertAsync(
                                new UserGroupRole {
                                UserGroupId = userGroupId, RoleId = roleId
                            }, conn, trans);
                        }

                        if (!input.IsAllOrg)
                        {
                            foreach (var orgId in input.OrgIds)
                            {
                                var userGroupOrg = new UserGroupOrganization()
                                {
                                    UserGroupId = userGroupId, OrgId = orgId
                                };
                                await _userGroupOrganizationRepository.InsertAsync(userGroupOrg, conn, trans);
                            }
                        }
                        var insertSql =
                            "INSERT INTO UserGroupPermission(PermissionId,UserGroupId,CreateTime,CreateBy,TenantId) VALUES(@PermissionId,@UserGroupId,@CreationTime,@CreatorUserId,@TenantId)";
                        var userGroupPermissions = new List <UserGroupPermission>();
                        foreach (var permissionId in input.PermissionIds)
                        {
                            userGroupPermissions.Add(new UserGroupPermission
                            {
                                PermissionId  = permissionId,
                                UserGroupId   = userGroupId,
                                CreationTime  = DateTime.Now,
                                CreatorUserId = _session.UserId,
                                TenantId      = _session.TenantId
                            });
                        }
                        await conn.ExecuteAsync(insertSql, userGroupPermissions, trans);
                        if (input.DataPermissionType == DataPermissionType.UserDefined)
                        {
                            var insertDataPermissionOrgSql =
                                "INSERT INTO UserGroupDataPermissionOrgRelation(UserGroupId,OrgId,CreateTime,CreateBy,TenantId) VALUES(@UserGroupId,@OrgId,@CreationTime,@CreatorUserId,@TenantId)";
                            var dataPermissionOrgDatas = new List <UserGroupDataPermissionOrgRelation>();
                            foreach (var orgId in input.DataPermissionOrgIds)
                            {
                                dataPermissionOrgDatas.Add(new UserGroupDataPermissionOrgRelation()
                                {
                                    UserGroupId   = userGroupId,
                                    OrgId         = orgId,
                                    CreationTime  = DateTime.Now,
                                    CreatorUserId = _session.UserId,
                                    TenantId      = _session.TenantId
                                });
                            }
                            await conn.ExecuteAsync(insertDataPermissionOrgSql, dataPermissionOrgDatas, trans);
                        }
                    }, Connection);
                });
            }
        }
Ejemplo n.º 20
0
        public async Task Dapper_Repository_Tests()
        {
            using (IUnitOfWorkCompleteHandle uow = _unitOfWorkManager.Begin())
            {
                //---Insert operation should work and tenant, creation audit properties must be set---------------------
                _productDapperRepository.Insert(new Product("TShirt"));
                Product insertedProduct = _productDapperRepository.GetAll(x => x.Name == "TShirt").FirstOrDefault();

                insertedProduct.ShouldNotBeNull();
                insertedProduct.TenantId.ShouldBe(AbpSession.TenantId);
                insertedProduct.CreationTime.ShouldNotBeNull();
                insertedProduct.CreatorUserId.ShouldBe(AbpSession.UserId);

                //----Update operation should work and Modification Audits should be set---------------------------
                _productDapperRepository.Insert(new Product("TShirt"));
                Product productToUpdate = _productDapperRepository.GetAll(x => x.Name == "TShirt").FirstOrDefault();
                productToUpdate.Name = "Pants";
                _productDapperRepository.Update(productToUpdate);

                productToUpdate.ShouldNotBeNull();
                productToUpdate.TenantId.ShouldBe(AbpSession.TenantId);
                productToUpdate.CreationTime.ShouldNotBeNull();
                productToUpdate.LastModifierUserId.ShouldBe(AbpSession.UserId);

                //---Get method should return single-------------------------------------------------------------------
                _productDapperRepository.Insert(new Product("TShirt"));
                Action getAction = () => _productDapperRepository.Single(x => x.Name == "TShirt");

                getAction.ShouldThrow <InvalidOperationException>("Sequence contains more than one element");

                //----Select * from syntax should work---------------------------------
                IEnumerable <Product> products = _productDapperRepository.Query("select * from Products");

                products.Count().ShouldBeGreaterThan(0);

                //------------Ef and Dapper should work under same transaction---------------------
                Product productFromEf     = _productRepository.FirstOrDefault(x => x.Name == "TShirt");
                Product productFromDapper = _productDapperRepository.Single(productFromEf.Id);

                productFromDapper.Name.ShouldBe(productFromEf.Name);
                productFromDapper.TenantId.ShouldBe(productFromEf.TenantId);

                //------Soft Delete should work for Dapper--------------
                _productDapperRepository.Insert(new Product("SoftDeletableProduct"));

                Product toSoftDeleteProduct = _productDapperRepository.Single(x => x.Name == "SoftDeletableProduct");

                _productDapperRepository.Delete(toSoftDeleteProduct);

                toSoftDeleteProduct.IsDeleted.ShouldBe(true);
                toSoftDeleteProduct.DeleterUserId.ShouldBe(AbpSession.UserId);
                toSoftDeleteProduct.TenantId.ShouldBe(AbpSession.TenantId);

                Product softDeletedProduct = _productRepository.FirstOrDefault(x => x.Name == "SoftDeletableProduct");
                softDeletedProduct.ShouldBeNull();

                Product softDeletedProductFromDapper = _productDapperRepository.FirstOrDefault(x => x.Name == "SoftDeletableProduct");
                softDeletedProductFromDapper.ShouldBeNull();

                using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.SoftDelete))
                {
                    Product softDeletedProductWhenFilterDisabled = _productRepository.FirstOrDefault(x => x.Name == "SoftDeletableProduct");
                    softDeletedProductWhenFilterDisabled.ShouldNotBeNull();

                    Product softDeletedProductFromDapperWhenFilterDisabled = _productDapperRepository.Single(x => x.Name == "SoftDeletableProduct");
                    softDeletedProductFromDapperWhenFilterDisabled.ShouldNotBeNull();
                }

                using (AbpSession.Use(2, 266))
                {
                    int productWithTenant2Id = _productDapperRepository.InsertAndGetId(new Product("ProductWithTenant2"));

                    Product productWithTenant2 = _productRepository.Get(productWithTenant2Id);

                    productWithTenant2.TenantId.ShouldBe(1); //Not sure about that?,Because we changed TenantId to 2 in this scope !!! Abp.TenantId = 2 now NOT 1 !!!
                }

                using (_unitOfWorkManager.Current.SetTenantId(3))
                {
                    int productWithTenant3Id = _productDapperRepository.InsertAndGetId(new Product("ProductWithTenant3"));

                    Product productWithTenant3 = _productRepository.Get(productWithTenant3Id);

                    productWithTenant3.TenantId.ShouldBe(3);
                }

                Product productWithTenantId3FromDapper = _productDapperRepository.FirstOrDefault(x => x.Name == "ProductWithTenant3");
                productWithTenantId3FromDapper.ShouldBeNull();

                Product p = await _productDapperRepository.FirstOrDefaultAsync(x => x.Status == Status.Active);

                p.ShouldNotBeNull();

                using (_unitOfWorkManager.Current.SetTenantId(3))
                {
                    Product productWithTenantId3FromDapperInsideTenantScope = _productDapperRepository.FirstOrDefault(x => x.Name == "ProductWithTenant3");
                    productWithTenantId3FromDapperInsideTenantScope.ShouldNotBeNull();
                }

                //About issue-#2091
                using (_unitOfWorkManager.Current.SetTenantId(AbpSession.TenantId))
                {
                    int productWithTenantId40 = _productDapperRepository.InsertAndGetId(new Product("ProductWithTenantId40"));

                    Product productWithTenant40 = _productRepository.Get(productWithTenantId40);

                    productWithTenant40.TenantId.ShouldBe(AbpSession.TenantId);
                    productWithTenant40.CreatorUserId.ShouldBe(AbpSession.UserId);
                }

                //Second DbContext tests
                int productDetailId = _productDetailRepository.InsertAndGetId(new ProductDetail("Woman"));
                _productDetailDapperRepository.Get(productDetailId).ShouldNotBeNull();

                uow.Complete();
            }
        }
Ejemplo n.º 21
0
        public async Task <UpdateDepartmentOutput> UpdateDepartment(UpdateDepartmentInput input)
        {
            var department = await _departmentRepository.SingleOrDefaultAsync(p => p.Id == input.Id);

            if (department == null)
            {
                throw new BusinessException($"系统中不存在Id为{input.Id}的部门信息");
            }
            var orgInfo = await _organizationRepository.SingleOrDefaultAsync(p => p.Id == department.OrgId);

            if (orgInfo == null)
            {
                throw new BusinessException($"系统中不存在Id为{department.Id}的部门信息");
            }

            if (!input.Identification.Equals(orgInfo.Identification))
            {
                var exsitOrg =
                    await _organizationRepository.FirstOrDefaultAsync(p => p.Identification == input.Identification);

                if (exsitOrg != null)
                {
                    throw new BusinessException($"系统中已经存在标识为{input.Identification}的组织机构");
                }
            }

            if (input.DeptTypeKey.IsNullOrEmpty())
            {
                throw new BusinessException("请选择部门类型");
            }

            var workbookAppServiceProxy = GetService <IWordbookAppService>();
            var checkDeptTypeResult     = await workbookAppServiceProxy.Check(new CheckWordbookInput
                                                                              { WordbookCode = SystemPresetWordbookCode.Organization.DeptType, WordbookItemKey = input.DeptTypeKey });

            if (!checkDeptTypeResult)
            {
                throw new BusinessException("部门类型Id不正确,请选择正确的部门类型");
            }
            department = input.MapTo(department);
            orgInfo    = input.MapTo(orgInfo);
            Debug.Assert(_session.UserId.HasValue, "登录用户的UserId不会为空");
            await UnitOfWorkAsync(async (conn, trans) =>
            {
                await _organizationRepository.UpdateAsync(orgInfo, conn, trans);
                await _departmentRepository.UpdateAsync(department, conn, trans);

                if (input.Positions != null && input.Positions.Any())
                {
                    if (input.Positions.Count(p => p.IsLeadingOfficial) > 1)
                    {
                        throw new BusinessException("部门只允许设置一个负责人岗位");
                    }
                    var positionIds       = input.Positions.Where(p => p.Id != 0 && p.Id.HasValue).Select(p => p.Id);
                    var deletePositionSql =
                        "UPDATE `Position` SET IsDeleted=@IsDeleted,DeleteBy=@DeleteBy,DeleteTime=@DeleteTime WHERE DeptId=@DeptId AND Id NOT in @Id AND TenantId=@TenantId";
                    await conn.ExecuteAsync(deletePositionSql,
                                            new
                    {
                        IsDeleted  = HeroConstants.DeletedFlag, DeleteBy = _session.UserId.Value,
                        DeleteTime = DateTime.Now, DeptId = department.Id, Id = positionIds,
                        TenantId   = _session.TenantId
                    }, trans);
                    var sort = 1;
                    foreach (var positionInput in input.Positions)
                    {
                        var positionCode = orgInfo.Code + HeroConstants.CodeRuleRestrain.CodeSeparator + sort.ToString()
                                           .PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit,
                                                    HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
                        if (positionInput.Id.HasValue && positionInput.Id != 0)
                        {
                            var position = await _positionRepository.GetAsync(positionInput.Id.Value);
                            position.CheckDataAnnotations().CheckValidResult();
                            position      = positionInput.MapTo(position);
                            position.Code = positionCode;
                            await _positionRepository.UpdateAsync(position, conn, trans);
                        }
                        else
                        {
                            var position    = positionInput.MapTo <Position>();
                            position.DeptId = department.Id;
                            position.CheckDataAnnotations().CheckValidResult();
                            position.Code = positionCode;
                            await _positionRepository.InsertAsync(position, conn, trans);
                        }

                        sort++;
                    }
                }
            }, Connection);

            return(new UpdateDepartmentOutput
            {
                OrgId = orgInfo.Id,
                DeptId = department.Id,
                Tips = "更新部门信息成功"
            });
        }
Ejemplo n.º 22
0
 public Task <UserInfo> GetByOemIdAsync(long oemId, long userId)
 {
     return(_userDapperRepository.FirstOrDefaultAsync(s => s.OemId == oemId && s.Id == userId));
 }