using Hh.Mes.Common.Infrastructure; using Hh.Mes.Common.log; using Hh.Mes.Common.Request; using Hh.Mes.POJO.Entity; using Hh.Mes.POJO.Response; using Hh.Mes.Service.Repository; using SqlSugar; using System; using System.Linq; using System.Linq.Expressions; using System.Data; using System.IO; namespace Hh.Mes.Service.Base { public class SysFileService : RepositorySqlSugar<sys_File> { /// <summary> /// 文件存储路径 /// </summary> private readonly string FileNamePath = "\\wwwroot\\Document"; public dynamic Load(PageReq pageReq, sys_File entity) { return ExceptionsHelp.Instance.ExecuteT(() => { var result = new Response(); var expression = LinqWhere(entity); //先组合查询表达式 var query = Context.Queryable<sys_File, base_equipment_type>((x, y) => new JoinQueryInfos(JoinType.Left, x.targetId == y.id)) .Where(expression); //Exel为ture就不分页,因为导出的话是全部导出 if (pageReq != null) { int total = 0; result.Result = query.Select((x, y) => new { x.fileName, x.id, x.targetId, x.host, x.url, x.size, x.suffix, x.remark, targetName = y.name, x.createBy, x.createTime }) .ToOffsetPage(pageReq.page, pageReq.limit, ref total); result.Count = total; } else { result.Result = query.ToList(); result.Count = result.Result.Count(); } return result; }, catchRetrunValue: "list"); } public dynamic DelByIds(int[] ids) { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); var docs = Context.Queryable<sys_File>().Where(x => ids.Contains(x.id)).ToList(); docs.ForEach((item) => { DeleteDocument(item.url); }); Context.Deleteable<sys_File>(t => ids.Contains(t.id)).ExecuteCommand(); return response; }); } /// <summary> /// 删除服务器内文件 /// </summary> /// <param name="fileName"></param> private void DeleteDocument(string fileName) { string path = $"{Directory.GetCurrentDirectory()}{FileNamePath}\\{fileName}"; if (File.Exists(path)) { File.Delete(path); } } public dynamic AddOrUpdate(sys_File entity) { return ExceptionsHelp.Instance.ExecuteT<dynamic>(() => { var response = new Response(); for (int i = 0; i < entity.excelfile.Count; i++) { if (entity.targetId == 0) { return response.ResponseError("适用的设备类型不能为空!"); } if (entity.excelfile[i] == null || entity.excelfile[i].Length == 0) { return response.ResponseError("上传文件数据时,文件不能为空!"); } var UploadPath = $"{Directory.GetCurrentDirectory()}{FileNamePath}"; if (!Directory.Exists(UploadPath)) Directory.CreateDirectory(UploadPath); var fileType = entity.excelfile[i]?.FileName.Split(".").LastOrDefault(); var fileName = entity.excelfile[i]?.FileName.Replace($".{fileType}", ""); if (string.IsNullOrWhiteSpace(fileName)) fileName = Guid.NewGuid().ToString().Substring(0, 8); var newFileName = $"{fileName}_{Guid.NewGuid():N}.{fileType}"; long size; using (var fs = File.Create($"{UploadPath}\\{newFileName}")) { entity.excelfile[i].CopyTo(fs); fs.Flush(); size = fs.Length / 1024; } entity.size = size > 1024 ? $"{size / 1024:N1}M" : $"{size:N1}Kb"; entity.suffix = fileType; entity.fileName = fileName; entity.url = newFileName; entity.createBy = sysWebUser.Account; entity.createTime = DateTime.Now; Context.Insertable(entity).ExecuteCommand(); } return response; }); } public Expression<Func<sys_File, bool>> LinqWhere(sys_File model) { try { var exp = Expressionable.Create<sys_File>(); //数据过滤条件 //if (!string.IsNullOrWhiteSpace(model.XXX)) exp.And(x => x.XXX.Contains(model.XXX)); if (!string.IsNullOrWhiteSpace(model.targetTableName)) { exp.And(x => x.targetTableName.Contains(model.targetTableName)); } if (!string.IsNullOrWhiteSpace(model.fileCode)) { exp.And(x => x.fileCode.Contains(model.fileCode)); } if (!string.IsNullOrWhiteSpace(model.host)) { exp.And(x => x.host.Contains(model.host)); } if (model.targetId != 0) { exp.And(x => x.targetId.Equals(model.targetId)); } if (!string.IsNullOrWhiteSpace(model.fileName)) { exp.And(x => x.fileName.Contains(model.fileName)); } return exp.ToExpression();//拼接表达式 } catch (Exception ex) { throw new Exception($"{ex.Message}"); } } /// <summary> /// /左侧列表 仓库+设备类型 /// </summary> public DataTable GetTreeList() { return ExceptionsHelp.Instance.ExecuteT(() => { string sql = $@" select id = '1', name = '根节点', keys = '00000000-0000-0000-0000-000000000000', parentId = null, isok = '', Code = '' union all select id, name = Name, keys = Code, parentId = '00000000-0000-0000-0000-000000000000', isok = 'true', e.Code from base_equipment_type e"; var dt = base.Context.Ado.GetDataTableAsync(sql).Result; return dt == null || dt.Rows.Count == 0 ? null : dt; }); } } }