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.code)) .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(); string fileEmptyErrorMessage = "上传文件数据时,文件不能为空!"; if (entity.excelfile == null || entity.excelfile.Count == 0) { return response.ResponseError(fileEmptyErrorMessage); } if (string.IsNullOrEmpty(entity.targetId)) { return response.ResponseError("适用的设备Code不能为空!"); } foreach (var file in entity.excelfile) { if (file == null || file.Length == 0) { return response.ResponseError(fileEmptyErrorMessage); } switch (entity.targetTableName) { case "eqType": entity.targetTableName = "base_equipment_type"; break; case "eq": entity.targetTableName = "base_equipment"; break; } var uploadPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "Document"); if (!Directory.Exists(uploadPath)) { Directory.CreateDirectory(uploadPath); } var suffix = Path.GetExtension(file.FileName); var fileName = Path.GetFileNameWithoutExtension(file.FileName); var newFileName = $"{fileName}_{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")}{suffix}"; long size; using (var fs = File.Create(Path.Combine(uploadPath, newFileName))) { file.CopyTo(fs); size = fs.Length / 1024; } entity.size = size > 1024 ? $"{size / 1024:N1}M" : $"{size:N1}Kb"; entity.suffix = suffix; 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.targetTableName) && model.targetTableName != "root") { 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 (!string.IsNullOrEmpty(model.targetId)&&model.targetId!="r-1") { 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 = newid(), name = '根节点', keys = 'r-1', parentId = '0', isok = '', code = 'root' union all select id = newid(), name = Name, keys = e.code, parentId = 'r-1', isok = 'true', code='eqType' from base_equipment_type e union all select id = newid(), name = e.equipmentName, keys=e.equipmentCode, parentId =( select base_equipment_type.code from base_equipment_type where code=e.equipmentTypeCode ), isok = 'true', code='eq' from base_equipment e"; var dt = base.Context.Ado.GetDataTableAsync(sql).Result; return dt == null || dt.Rows.Count == 0 ? null : dt; }); } } }