using Infrastructure; using Infrastructure.Extensions; using Infrastructure.Helpers; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.Interface; using OpenAuth.App.ServiceApp.GoView.Request; using OpenAuth.App.ServiceApp.GoView.Response; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using OpenAuth.Repository.Domain.GoView; using SqlSugar; namespace OpenAuth.App.ServiceApp.GoView; public class GoViewProjectApp : SqlSugarBaseApp { private ILogger _logger; private string _filePath; private string _dbFilePath; //数据库中的文件路径 private string _dbThumbnail; //数据库中的缩略图路径 public GoViewProjectApp(IOptions setOptions, ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth, ILogger logger) : base(unitWork, repository, auth) { _logger = logger; _filePath = setOptions.Value.UploadPath; if (string.IsNullOrEmpty(_filePath)) { _filePath = AppContext.BaseDirectory; } } public async Task> DeleteProject(string ids) { var idArray = ids.Split(","); var flag = await Repository.DeleteByIdsAsync(idArray); return new Response { Code = 200, Result = flag, Message = flag ? "删除成功" : "删除失败" }; } public async Task> UpdateProject(GoviewProject project) { var exist = await Repository.AsQueryable().CountAsync(a => a.Id == project.Id); if (exist == 0) { return new Response { Code = 500, Message = "项目不存在" }; } var flag = await Repository.AsUpdateable(project).IgnoreNullColumns().ExecuteCommandAsync(); return new Response { Code = 200, Result = flag > 0, Message = flag > 0 ? "修改成功" : "修改失败" }; } public async Task> Create(GoviewProject project) { project.State = -1; project.CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var userId = _auth.GetUserId(); project.CreateUserId = userId; project.Id = Guid.NewGuid().ToString(); var flag = await Repository.InsertAsync(project); return new Response { Code = 200, Result = flag ? project : null, Message = flag ? "创建成功" : "创建失败" }; } public async Task> Publish(GoViewProjectRequest req) { var prj = new GoviewProject { Id = req.Id, State = req.State }; var flag = await Repository.AsUpdateable(prj).IgnoreNullColumns().ExecuteCommandAsync() > 0; return new Response { Code = 200, Result = flag, Message = flag ? "操作成功" : "操作失败" }; } public async Task>>> List(GoViewProjectPage page) { RefAsync total = 0; var list = await Repository.AsQueryable() .ToPageListAsync(page.page, page.limit, total); return new Response>>() { Result = new PageInfo> { Items = list, Total = total } }; } public async Task> GetData(string projectId) { var prj = await Repository.AsQueryable().SingleAsync(a => a.Id == projectId); if (prj == null) { return new Response() { Message = "项目不存在", Code = 500 }; } var vo = prj.MapTo(); var data = await Repository.ChangeRepository>().AsQueryable() .SingleAsync(a => a.ProjectId == projectId); if (data != null) { vo.Content = data.Content; } return new Response() { Result = vo }; } public async Task> SaveData(GoviewProjectData data) { // 更新还是保存, var project = await Repository.AsQueryable().SingleAsync(a => a.Id == data.ProjectId); if (project == null) { throw new Exception("项目不存在"); } var prjData = await Repository .ChangeRepository>() .AsQueryable() .SingleAsync(a => a.ProjectId == data.ProjectId); bool flag; if (prjData == null) { data.Id = Guid.NewGuid().ToString(); flag = await Repository.ChangeRepository>().InsertAsync(data); } else { data.Id = prjData.Id; flag = await Repository .ChangeRepository>() .AsUpdateable(data) .IgnoreNullColumns() .ExecuteCommandAsync() > 0; } return new Response { Code = 200, Result = flag, Message = flag ? "数据保存成功" : "数据保存失败" }; } #region 组件数据 /// /// 获取组件集合 /// /// /// public async Task>>> GetComponentList(GoViewProjectPage page) { RefAsync total = 0; var list = await Repository.ChangeRepository>().AsQueryable() .WhereIF(!string.IsNullOrEmpty(page.key), r => r.ComponentName.Contains(page.key)) .ToPageListAsync(page.page, page.limit, total); return new Response>>() { Result = new PageInfo> { Items = list, Total = total } }; } /// /// 获取组件数据 /// /// /// public async Task> GetComponentData(string componentId) { var data = await Repository.ChangeRepository>().AsQueryable() .SingleAsync(a => a.Id == componentId); return new Response() { Result = data }; } /// /// 保存组件数据 /// /// /// /// public async Task> SaveComponentData(GoviewComponent data) { // 更新还是保存, var comData = await Repository .ChangeRepository>() .AsQueryable() .SingleAsync(a => a.Id == data.Id); bool flag; if (comData == null) { data.Id = Guid.NewGuid().ToString(); data.CreateUserId = _auth.GetUserId(); data.CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); flag = await Repository.ChangeRepository>().InsertAsync(data); } else { data.Id = comData.Id; flag = await Repository .ChangeRepository>() .AsUpdateable(data) .IgnoreColumns(a => new { a.CreateTime, a.CreateUserId }) .IgnoreNullColumns() .ExecuteCommandAsync() > 0; } return new Response { Code = 200, Result = flag, Message = flag ? "数据保存成功" : "数据保存失败" }; } /// /// 删除组件 /// /// /// public async Task> DeleteComponent(string ids) { var idArray = ids.Split(","); var flag = await Repository.ChangeRepository>().DeleteByIdsAsync(idArray); return new Response { Code = 200, Result = flag, Message = flag ? "删除成功" : "删除失败" }; } #endregion public IList Add(IFormFileCollection files, string groupName) { if (!_auth.CheckLogin()) { throw new Exception("必需登录才能上传附件"); } var result = new List(); foreach (var file in files) { result.Add(Add(file, groupName)); } return result; } public SysUploadFile Add(IFormFile file, string groupName) { if (file != null) { _logger.LogInformation("收到新文件: " + file.FileName); _logger.LogInformation("收到新文件: " + file.Length); } else { _logger.LogWarning("收到新文件为空"); } if (file != null && file.Length > 0) { using (var binaryReader = new BinaryReader(file.OpenReadStream())) { var fileName = Path.GetFileName(file.FileName); var data = binaryReader.ReadBytes((int)file.Length); SaveFile(fileName, data); var filedb = new SysUploadFile { Id = SnowFlakeSingle.instance.getID(), FilePath = _dbFilePath, Thumbnail = _dbThumbnail, FileName = fileName, FileSize = file.Length.ToInt(), CreateUserName = _auth.GetUserName(), FileType = Path.GetExtension(fileName), Extension = Path.GetExtension(fileName), CreateTime = DateTime.Now, }; Repository.ChangeRepository>().Insert(filedb); var image = new GoviewImage { FileId = filedb.Id, GroupName = groupName }; Repository.ChangeRepository>().Insert(image); return filedb; } } else { throw new Exception("文件过大"); } } /// /// 存储文件,如果是图片文件则生成缩略图 /// /// /// /// private void SaveFile(string fileName, byte[] fileBuffers) { string folder = DateTime.Now.ToString("yyyyMMdd"); //判断文件是否为空 if (string.IsNullOrEmpty(fileName)) { throw new Exception("文件名不能为空"); } //判断文件是否为空 if (fileBuffers.Length < 1) { throw new Exception("文件不能为空"); } var uploadPath = Path.Combine(_filePath, folder); _logger.LogInformation("文件写入:" + uploadPath); if (!Directory.Exists(uploadPath)) { Directory.CreateDirectory(uploadPath); } var ext = Path.GetExtension(fileName).ToLower(); string newName = GenerateId.GenerateOrderNumber() + ext; using (var fs = new FileStream(Path.Combine(uploadPath, newName), FileMode.Create)) { fs.Write(fileBuffers, 0, fileBuffers.Length); fs.Close(); //生成缩略图 if (ext.Contains(".jpg") || ext.Contains(".jpeg") || ext.Contains(".png") || ext.Contains(".bmp") || ext.Contains(".gif")) { string thumbnailName = GenerateId.GenerateOrderNumber() + ext; ImgHelper.MakeThumbnail(Path.Combine(uploadPath, newName), Path.Combine(uploadPath, thumbnailName)); _dbThumbnail = Path.Combine(folder, thumbnailName); } _dbFilePath = Path.Combine(folder, newName); } } public IList GetImage(GoViewImagePage req) { var list = Repository.ChangeRepository>() .AsQueryable() .InnerJoin((a, b) => a.Id.Equals(b.FileId)) .WhereIF(!string.IsNullOrEmpty(req.GroupName),(a,b)=>b.GroupName.Equals(req.GroupName)) .Select() .ToList(); return list; } public bool DeleteImage(string ids) { if (string.IsNullOrEmpty(ids)) { return false; } var idArray = ids.Split(",").Select(a => a.ToLong()); // 向goviewimage中查询 var list = Repository.ChangeRepository>() .AsQueryable() .Where(a => idArray.Contains(a.FileId)) .Select(a => a.FileId.ToString()) .ToArray(); Repository.ChangeRepository>() .DeleteByIds(list); return Repository.ChangeRepository>() .DeleteByIds(list); } public Response> GetImageGroupList() { var list = Repository.ChangeRepository>() .AsQueryable() .GroupBy(a => a.GroupName) .Select(a => a.GroupName) .ToList(); return new Response> { Result = list }; } }