Example #1
0
        public async Task <IResponseOutput> GetPassWordEncryptKeyAsync()
        {
            //写入Redis
            var guid      = Guid.NewGuid().ToString("N");
            var key       = string.Format(CacheKey.PassWordEncryptKey, guid);
            var encyptKey = StringHelper.GenerateRandom(8);
            await _cache.SetAsync(key, encyptKey, TimeSpan.FromMinutes(5));

            var data = new { key = guid, encyptKey };

            return(ResponseOutput.Ok(data));
        }
Example #2
0
        public async Task <IResponseOutput> UploadAvatarAsync([FromServices] ICurrentUser _user, [FromServices] UploadHelper _uploadHelper, [FromForm] IFormFile file)
        {
            var config = Configs.UploadConfig.Avatar;
            var res    = await _uploadHelper.UploadAsync(file, config, new { _user.Id });

            if (res.Success)
            {
                return(ResponseOutput.Ok(res.Data.FileRelativePath));
            }

            return(ResponseOutput.NotOk("上传失败!"));
        }
Example #3
0
        async public Task <IResponseOutput> Create([FromBody] UserCreateRequestDto requestDto)
        {
            Department department = await _fsql.Select <Department>().Where(d => d.Id == requestDto.DepartmentId).FirstAsync();

            if (department == null)
            {
                throw new ArgumentException("无该部门");
            }

/*            Role role = await _fsql.Select<Role>().Where(r => r.Id == requestDto.RoleId).FirstAsync();
 *          if (role == null)
 *          {
 *              throw new ArgumentException("无该职位");
 *          }*/

            if (await _fsql.Select <User>().Where(u => u.UserName == requestDto.UserName).CountAsync() > 0)
            {
                throw new ArgumentException($"用户{requestDto.UserName}已经存在");
            }

            using (var uow = _fsql.CreateUnitOfWork()) //使用 UnitOfWork 事务
            {
                User user = _mapper.Map <User>(requestDto);
                user.CreatedAt = DateTime.Now;
                var ret = await _fsql.Insert(user).WithTransaction(uow.GetOrBeginTransaction()).ExecuteInsertedAsync();

                user = ret.FirstOrDefault();

/*                var userRole = await _fsql.Insert(new UserRole { UserId = user.Id, RoleId = role.Id, CreatedAt = DateTime.Now })
 *                  .WithTransaction(uow.GetOrBeginTransaction()).ExecuteInsertedAsync();*/
                if (!(user?.Id > 0))
                {
                    return(ResponseOutput.NotOk());
                }

                if (requestDto.RoleIds != null && requestDto.RoleIds.Any())
                {
                    var userRoles = requestDto.RoleIds.Select(r => new UserRole {
                        UserId = user.Id, RoleId = r
                    });
                    var userRolesRet = await _fsql.Insert(userRoles).WithTransaction(uow.GetOrBeginTransaction()).ExecuteInsertedAsync();
                }

                var responseDto = _mapper.Map <UserResponseDto>(user);
                uow.Commit();

/*                responseDto.RoleId = role.Id;
 *              responseDto.RoleName = role.Name;*/
                responseDto.DepartmentName = department.Name;
                return(ResponseOutput.Ok(responseDto));
            }
        }
Example #4
0
        public async Task <IResponseOutput> List([FromQuery] string name, int parentId, int page = 1, int size = 30)
        {
            var departmentList = await _fsql.Select <Department>()
                                 .WhereIf(parentId != 0, d => d.ParentId == parentId)
                                 .WhereIf(name != null, d => d.Name.Contains(name))
                                 .Count(out var total)
                                 .Page(page, size)
                                 .ToListAsync();

            return(ResponseOutput.Ok(new Pagenation <Department> {
                Total = total, List = departmentList, Page = page, Size = size
            }));
        }
Example #5
0
        async public Task <IResponseOutput> Create([FromBody] ProcedureCreateRequestDto requestDto)
        {
            var workType = await _fsql.Select <WorkType>().Where(w => w.Id == requestDto.WorkTypeId).FirstAsync();

            if (workType == null)
            {
                return(ResponseOutput.NotOk($"worktype with id(${requestDto.WorkTypeId}) does not exsit"));
            }

            var ret = await _fsql.Insert(_mapper.Map <Procedure>(requestDto)).ExecuteInsertedAsync();

            return(ResponseOutput.Ok(ret.FirstOrDefault()));
        }
Example #6
0
        public async Task <IResponseOutput> UpdateApiAsync(PermissionUpdateApiInput input)
        {
            if (!string.IsNullOrWhiteSpace(input.Id))
            {
                var entity = await _permissionRepo.FindByIdAsync(input.Id);

                entity = ObjectMapper.Map(input, entity);
                await _permissionRepo.UpdateAsync(entity);

                return(ResponseOutput.Ok());
            }
            return(ResponseOutput.NotOk());
        }
Example #7
0
        public async Task <IResponseOutput> List([FromQuery] string key, [FromQuery] int page = 1, [FromQuery] int size = 20)
        {
            var list = await _fsql.Select <User>().IncludeMany(u => u.Roles)
                       .Include(a => a.Department)
                       .WhereIf(!string.IsNullOrEmpty(key), (u) => u.UserName.Contains(key))
                       .Page(page, size)
                       .Count(out var total)
                       .ToListAsync();

            return(ResponseOutput.Ok(new Pagenation <User> {
                Page = page, Size = size, Total = total, List = list
            }));
        }
Example #8
0
        public async Task <ResponseOutput <AuthLoginOutput> > GetLoginUserAsync(long id)
        {
            var output    = new ResponseOutput <AuthLoginOutput>();
            var entityDto = await _userRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(id).ToOneAsync <AuthLoginOutput>();

            if (_appConfig.Tenant)
            {
                var tenant = await _tenantRepository.Select.DisableGlobalFilter("Tenant").WhereDynamic(entityDto.TenantId).ToOneAsync(a => new { a.TenantType, a.DataIsolationType });

                output.Data.TenantType        = tenant.TenantType;
                output.Data.DataIsolationType = tenant.DataIsolationType;
            }
            return(output.Ok(entityDto));
        }
Example #9
0
        public async Task <IResponseOutput> AddAsync(UserSaveInput input)
        {
            if (input.Password.IsNull())
            {
                input.Password = "******";
            }
            input.Password = MD5Encrypt.Encrypt32(input.Password);
            var entity = _mapper.Map <UserEntity>(input);

            entity.CreatedTime = DateTime.Now;
            await _userRepo.InsertAsync(entity);

            return(ResponseOutput.Ok());
        }
Example #10
0
        async public Task <IResponseOutput> Delete([FromRoute] int id)
        {
            using (var uow = _fsql.CreateUnitOfWork()) //使用 UnitOfWork 事务
            {
                //删除用户角色关系
                await _fsql.Delete <UserRole>().Where(ur => ur.RoleId == id).ExecuteDeletedAsync();

                //删除角色关系
                var ret = await _fsql.Delete <Role>().Where(a => a.Id == id).ExecuteDeletedAsync();

                uow.Commit();
                return(ResponseOutput.Ok(_mapper.Map <RoleResponseDto>(ret.FirstOrDefault())));
            }
        }
Example #11
0
        async public Task <IResponseOutput> Create([FromBody] ManuOrderFeedbackCreateRequestDto requestDto)
        {
            //检查工序, 其他大类等
            //检查用户是否存在
            var user = await _fsql.Select <User>().Where(u => u.Id == requestDto.UserId).FirstAsync();

            if (user == null)
            {
                return(ResponseOutput.NotOk("用户不存在"));
            }

            //检查工作类型
            var workType = await _fsql.Select <WorkType>().Where(w => w.Id == requestDto.WorkTypeId).FirstAsync();

            if (workType == null)
            {
                return(ResponseOutput.NotOk("工作类型不存在"));
            }

            //工作类型
            if (requestDto.ProcedureId != 0)
            {
                var procedure = await _fsql.Select <Procedure>().Where(p => p.Id == requestDto.ProcedureId).FirstAsync();

                if (procedure == null)
                {
                    return(ResponseOutput.NotOk("工序不存在"));
                }
            }

            //检查线材类型
            if (requestDto.WireRodTypeId != 0)
            {
                var wireRodType = await _fsql.Select <WireRodType>().Where(w => w.Id == requestDto.WireRodTypeId).FirstAsync();

                if (wireRodType == null)
                {
                    return(ResponseOutput.NotOk("线材类型不存在"));
                }
            }


            var feedBack = _mapper.Map <ManuOrderFeedback>(requestDto);

            feedBack.StartAt = DateTime.Now;
            feedBack.Status  = 1;
            var ret = await _fsql.Insert(feedBack).ExecuteInsertedAsync();

            return(ResponseOutput.Ok(ret.FirstOrDefault()));
        }
Example #12
0
        public async Task <IResponseOutput> AvatarUpload([FromServices] IWebHostEnvironment environment, IFormFile file)
        {
            if (file == null || file.Length < 1)
            {
                if (Request.Form.Files != null && Request.Form.Files.Any())
                {
                    file = Request.Form.Files[0];
                }
            }

            if (file == null || file.Length < 1)
            {
                return(ResponseOutput.NotOk("请上传头像!"));
            }

            var avatar = _uploadConfig.Avatar;

            //格式限制
            if (!avatar.ContentType.Contains(file.ContentType))
            {
                return(ResponseOutput.NotOk("图片格式错误"));
            }

            //大小限制
            if (!(file.Length <= avatar.Size))
            {
                return(ResponseOutput.NotOk("图片过大"));
            }

            var dateTimeFormat = avatar.DateTimeFormat.NotNull() ? DateTime.Now.ToString(avatar.DateTimeFormat) : "";
            var format         = avatar.Format.NotNull() ? string.Format(avatar.Format, _user.Id) : "";
            var savePath       = Path.Combine(dateTimeFormat, format);
            var fullDirectory  = Path.Combine(avatar.Path, savePath);

            if (!Directory.Exists(fullDirectory))
            {
                Directory.CreateDirectory(fullDirectory);
            }

            var saveFileName = $"{new Snowfake(0).nextId()}{Path.GetExtension(file.FileName)}";
            var fullPath     = Path.Combine(fullDirectory, saveFileName);

            using (var stream = new FileStream(fullPath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }

            return(ResponseOutput.Ok(Path.Combine(savePath, saveFileName)));
        }
Example #13
0
        public async Task <ResponseOutput <UserGetOutput> > GetAsync(long id)
        {
            var res = new ResponseOutput <UserGetOutput>();

            var entity = await _userRepository.Select
                         .WhereDynamic(id)
                         .IncludeMany(a => a.Roles.Select(b => new RoleEntity {
                Id = b.Id
            }))
                         .ToOneAsync();

            var entityDto = _mapper.Map <UserGetOutput>(entity);

            return(res.Ok(entityDto));
        }
        async public Task <IResponseOutput> List([FromQuery] int page, int size)
        {
            var list = await _fsql.Select <ExceptionType>()
                       .Count(out var total)
                       .Page(page, size)
                       .ToListAsync();

            return(ResponseOutput.Ok(new Pagenation <ExceptionType>
            {
                Page = page,
                Total = total,
                Size = size,
                List = list,
            }));
        }
Example #15
0
        async public Task <IResponseOutput> List([FromQuery] int workTypeId, int page, int size)
        {
            var list = await _fsql.Select <Procedure>()
                       .WhereIf(workTypeId != 0, p => p.WorkTypeId == workTypeId)
                       .Count(out var total)
                       .Page(page, size)
                       .ToListAsync();

            return(ResponseOutput.Ok(new Pagenation <Procedure> {
                Page = page,
                Total = total,
                Size = size,
                List = list,
            }));
        }
Example #16
0
        /// <summary>
        /// 添加角色
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        public async Task <IResponseOutput> AddRoleAsync(RoleSaveDto dto)
        {
            var list = await _roleRepo.FindListAsync(_ => _.Name == dto.Name);

            if (list.Count > 0)
            {
                return(ResponseOutput.NotOk("名称重复"));
            }
            var data = ObjectMapper.Map <RoleEntity>(dto);

            data.CreatedTime = DateTime.Now;
            await _roleRepo.InsertAsync(data);

            return(ResponseOutput.Ok());
        }
Example #17
0
        public async Task <IResponseOutput> GetById([FromRoute] int id)
        {
            WorkType workType = await _fsql.Select <WorkType>()
                                .Where(w => w.Id == id)
                                .IncludeMany(w => w.Childs)
                                .Include(w => w.Parent)
                                //.AsTreeCte()
                                .FirstAsync();

            if (workType == null)
            {
                return(ResponseOutput.NotOk($"未找到ID为{id}的工作类型"));
            }
            return(ResponseOutput.Ok(_mapper.Map <WorkTypeResponseDto>(workType)));
        }
        public IResponseOutput RequestToken([FromBody] LoginRequestDto request)
        {
            if (!ModelState.IsValid)
            {
                return(ResponseOutput.NotOk("Invalid Request"));
            }

            string token;

            if (_authService.IsAuthenticated(request, out token))
            {
                return(ResponseOutput.Ok(token));
            }

            return(ResponseOutput.NotOk("Invalid Request"));
        }
Example #19
0
        public async Task <IResponseOutput> GetListAsync(string key, DateTime?start, DateTime?end)
        {
            if (end.HasValue)
            {
                end = end.Value.AddDays(1);
            }

            var data = await _DocumentRepository
                       .WhereIf(key.NotNull(), a => a.Name.Contains(key) || a.Label.Contains(key))
                       .WhereIf(start.HasValue && end.HasValue, a => a.CreatedTime.Value.BetweenEnd(start.Value, end.Value))
                       .OrderBy(a => a.ParentId)
                       .OrderBy(a => a.Sort)
                       .ToListAsync <DocumentListOutput>();

            return(ResponseOutput.Ok(data));
        }
Example #20
0
        public async Task <IResponseOutput> GetById([FromRoute] int id)
        {
            var user = await _fsql.Select <User>().From <Department, UserRole, Role>((u, d, ur, r) => u
                                                                                     .LeftJoin(a => a.DepartmentId == d.Id)
                                                                                     .LeftJoin(a => a.Id == ur.UserId)
                                                                                     .LeftJoin(a => ur.RoleId == r.Id))
                       .WhereIf(id > 0, (u, d, ur, r) => u.Id == id)
                       .FirstAsync((u, d, ur, r) => new UserResponseDto
            {
                Id             = u.Id,
                DepartmentName = d.Name,
                RoleName       = r.Name,
            });

            return(ResponseOutput.Ok(user));
        }
Example #21
0
        public async Task <IResponseOutput> GenerateTokenAsync(string type, string code, string state)
        {
            if (!StateManager.IsExist(state))
            {
                return(ResponseOutput.NotOk("Request failed"));
            }

            StateManager.Remove(state);
            var token = type switch
            {
                "github" => GenerateToken(await _githubService.GetUserByOAuthAsync(type, code, state)),
                _ => throw new NotImplementedException($"Not implemented {type}")
            };

            return(ResponseOutput.Ok(token));
        }
Example #22
0
        public async Task <IResponseOutput> Login(AuthLoginInput input)
        {
            var sw = new Stopwatch();

            sw.Start();
            var res = (await _authService.LoginAsync(input)) as IResponseOutput;

            sw.Stop();

            #region 添加登录日志
            var loginLogAddInput = new LoginLogAddInput()
            {
                CreatedUserName     = input.UserName,
                ElapsedMilliseconds = sw.ElapsedMilliseconds,
                Status = res.Success,
                Msg    = res.Msg
            };

            AuthLoginOutput user = null;
            if (res.Success)
            {
                user = (res as IResponseOutput <AuthLoginOutput>).Data;
                loginLogAddInput.CreatedUserId = user.Id;
                loginLogAddInput.RealName      = user.Name;
            }

            await _loginLogService.AddAsync(loginLogAddInput);

            #endregion

            if (!res.Success)
            {
                return(res);
            }

            #region 生成token信息
            var token = _userToken.Build(new[]
            {
                new Claim(ClaimAttributes.UserId, user.Id.ToString()),
                new Claim(ClaimAttributes.UserName, user.UserName),
                new Claim(ClaimAttributes.UserRealName, user.Name)
            });
            #endregion

            return(ResponseOutput.Ok(new { token }));
        }
Example #23
0
        public async Task <IResponseOutput> GetUserInfoAsync()
        {
            if (!(User?.Id > 0))
            {
                return(ResponseOutput.NotOk("未登录!"));
            }

            var key    = string.Format(CacheKey.UserInfo, User.Id);
            var output = await Cache.GetOrSetAsync(key, async() =>
            {
                var authUserInfoOutput = new AuthUserInfoOutput {
                };
                //用户信息
                authUserInfoOutput.User = await _userRepository.GetAsync <AuthUserProfileDto>(User.Id);

                //用户菜单
                authUserInfoOutput.Menus = await _permissionRepository.Select
                                           .Where(a => new[] { PermissionType.Group, PermissionType.Menu }.Contains(a.Type))
                                           .Where(a =>
                                                  _permissionRepository.Orm.Select <RolePermissionEntity>()
                                                  .InnerJoin <UserRoleEntity>((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id)
                                                  .Where(b => b.PermissionId == a.Id)
                                                  .Any()
                                                  )
                                           .OrderBy(a => a.ParentId)
                                           .OrderBy(a => a.Sort)
                                           .ToListAsync(a => new AuthUserMenuDto {
                    ViewPath = a.View.Path
                });

                //用户权限点
                authUserInfoOutput.Permissions = await _permissionRepository.Select
                                                 .Where(a => new[] { PermissionType.Api, PermissionType.Dot }.Contains(a.Type))
                                                 .Where(a =>
                                                        _permissionRepository.Orm.Select <RolePermissionEntity>()
                                                        .InnerJoin <UserRoleEntity>((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id)
                                                        .Where(b => b.PermissionId == a.Id)
                                                        .Any()
                                                        )
                                                 .ToListAsync(a => a.Code);

                return(authUserInfoOutput);
            });

            return(ResponseOutput.Ok(output));
        }
Example #24
0
        /// <summary>
        /// 获得token
        /// </summary>
        /// <param name="output"></param>
        /// <returns></returns>
        private IResponseOutput GetToken(ResponseOutput<AuthLoginOutput> output)
        {
            if (!output.Success)
            {
                return ResponseOutput.NotOk(output.Msg);
            }

            var user = output.Data;
            var token = _userToken.Build(new[]
            {
                new Claim(ClaimAttributes.UserId, user.Id.ToString()),
                new Claim(ClaimAttributes.UserName, user.UserName),
                new Claim(ClaimAttributes.UserNickName, user.NickName)
            });

            return ResponseOutput.Ok(new { token });
        }
Example #25
0
        public async Task <IResponseOutput> ListAsync(string key, DateTime?start, DateTime?end)
        {
            if (end.HasValue)
            {
                end = end.Value.AddDays(1);
            }

            var data = await _permissionRepository
                       .WhereIf(key.NotNull(), a => a.Path.Contains(key) || a.Label.Contains(key))
                       .WhereIf(start.HasValue && end.HasValue, a => a.CreatedTime.Value.BetweenEnd(start.Value, end.Value))
                       .OrderBy(a => a.ParentId)
                       .OrderBy(a => a.Sort)
                       .ToListAsync(a => new PermissionListOutput {
                ApiPath = a.Api.Path
            });

            return(ResponseOutput.Ok(data));
        }
Example #26
0
        public async Task<IResponseOutput> PageAsync(PageInput<UserEntity> input)
        {
            var list = await _userRepository.Select
            .WhereDynamicFilter(input.DynamicFilter)
            .Count(out var total)
            .OrderByDescending(true, a => a.Id)
            .IncludeMany(a => a.Roles.Select(b => new RoleEntity{ Name = b.Name }))
            .Page(input.CurrentPage, input.PageSize)
            .ToListAsync();

            var data = new PageOutput<UserListOutput>()
            {
                List = _mapper.Map<List<UserListOutput>>(list),
                Total = total
            };

            return ResponseOutput.Ok(data);
        }
Example #27
0
        public async Task <IResponseOutput> GetUserInfoAsync()
        {
            if (string.IsNullOrEmpty(User?.Id))
            {
                return(ResponseOutput.NotOk("未登录!"));
            }

            //用户信息
            var user = await _userRepo.FindByIdAsync(User.Id);

            var rolePerList = _rolePermissionRepo.Query.Where(c => c.RoleId == user.RoleId);
            var rolePerIds  = rolePerList.Select(x => x.PermissionId);

            //用户菜单
            var menus = await _permissionRepo.Query
                        .Where(a => new[] { PermissionType.Group, PermissionType.Menu }.Contains(a.Type))
                        .Where(a => rolePerIds.Contains(a.Id)
                               )
                        .OrderBy(a => a.ParentId)
                        .OrderBy(a => a.Sort)
                        .Select(a => new
            {
                a.Id,
                a.ParentId,
                a.Path,
                ViewPath = a.ViewPath,
                a.Label,
                a.Icon,
                a.Opened,
                a.Closable,
                a.Hidden,
                a.NewWindow,
                a.External
            }).ToListAsync();

            //用户权限点
            var permissions = await _permissionRepo.Query
                              .Where(a => new[] { PermissionType.Api, PermissionType.Dot }.Contains(a.Type))
                              .Where(a => rolePerIds.Contains(a.Id)
                                     )
                              .Select(a => a.Code).ToListAsync();

            return(ResponseOutput.Ok(new { user, menus, permissions }));
        }
Example #28
0
        public async Task <IResponseOutput> UpdateAsync(RoleUpdateInput input)
        {
            if (!(input?.Id > 0))
            {
                return(ResponseOutput.NotOk());
            }

            var entity = await _roleRepository.GetAsync(input.Id);

            if (!(entity?.Id > 0))
            {
                return(ResponseOutput.NotOk("½ÇÉ«²»´æÔÚ£¡"));
            }

            _mapper.Map(input, entity);
            await _roleRepository.UpdateAsync(entity);

            return(ResponseOutput.Ok());
        }
Example #29
0
        public async Task <IResponseOutput> PageAsync(PageInput <RoleEntity> input)
        {
            var key = input.Filter?.Name;

            var list = await _roleRepository.Select
                       .WhereIf(key.NotNull(), a => a.Name.Contains(key))
                       .Count(out var total)
                       .OrderByDescending(true, c => c.Id)
                       .Page(input.CurrentPage, input.PageSize)
                       .ToListAsync <RoleListOutput>();

            var data = new PageOutput <RoleListOutput>()
            {
                List  = list,
                Total = total
            };

            return(ResponseOutput.Ok(data));
        }
Example #30
0
        public async Task <IResponseOutput> GetVerifyCodeAsync(string lastKey)
        {
            var img = VerifyCodeHelper.GetBase64String(out string code);

            //删除上次缓存的验证码
            if (lastKey.NotNull())
            {
                await _cache.DelAsync(lastKey);
            }

            //写入Redis
            var guid = Guid.NewGuid().ToString("N");
            var key  = string.Format(CacheKey.VerifyCodeKey, guid);
            await _cache.SetAsync(key, code, TimeSpan.FromMinutes(5));

            var data = new { key = guid, img };

            return(ResponseOutput.Ok(data));
        }