using Magicodes.ExporterAndImporter.Core.Models; using Magicodes.ExporterAndImporter.Excel; using Microsoft.AspNetCore.Http; using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_Core.Utilities; using WIDESEA_ISystemRepository; using WIDESEA_ISystemService; using WIDESEA_Model.Models; using WIDESEA_Model.Models.System; namespace WIDESEA_SystemService { public class Sys_TraycodeinfoService : ServiceBase, ISys_TraycodeinfoService { public readonly IDt_palletService _PalletService; public Sys_TraycodeinfoService(ISys_TraycodeinfoRepository BaseDal , IDt_palletService palletService) : base(BaseDal) { _PalletService = palletService; } public ISys_TraycodeinfoRepository Repository => BaseDal; public Dt_traycodeinfo? GetInCacheList(string traycode_code) { Dt_traycodeinfo _Traycodeinfo= BaseDal.QueryData(x=>x.traycode_code== traycode_code && x.traycode_staute==1).FirstOrDefault(); return _Traycodeinfo; } public WebResponseContent AddTenantInfo(SaveModel saveModel) { WebResponseContent content = new WebResponseContent(); string barcode = saveModel.MainData["barcode"].ToString(); //条码 string stationnum = saveModel.MainData["cacheNo"].ToString(); Dt_traycodeinfo _Traycodeinfo = BaseDal.QueryData(x => x.traycode_code == barcode).FirstOrDefault(); if (_Traycodeinfo != null) { return content.Error("已有该托盘信息,请误重复新增"); } Dt_traycodeinfo dt_Traycodeinfo = new Dt_traycodeinfo() { traycode_type = stationnum, traycode_staute = 1, traycode_code = barcode, traycode_createtime = DateTime.Now, }; BaseDal.AddData(dt_Traycodeinfo); return content.OK("新增成功"); } /// /// 添加数据 /// /// /// public virtual WebResponseContent AddData(SaveModel saveModel) { try { if (saveModel == null || saveModel.MainData == null || saveModel.MainData.Count == 0)//判断参数是否传入 { return WebResponseContent.Instance.Error("传参错误,参数不能为空"); } string validResult = typeof(Dt_traycodeinfo).ValidateDicInEntity(saveModel.MainData, true, TProperties); if (!string.IsNullOrEmpty(validResult)) { return WebResponseContent.Instance.Error(validResult); } PropertyInfo keyPro = typeof(Dt_traycodeinfo).GetKeyProperty(); if (keyPro == null) { return WebResponseContent.Instance.Error("请先设置主键"); } if (keyPro.PropertyType == typeof(Guid)) { saveModel.MainData.Add(keyPro.Name, Guid.NewGuid()); } else if (keyPro.PropertyType == typeof(int) || keyPro.PropertyType == typeof(long)) { SugarColumn? sugarColumn = keyPro.GetCustomAttribute(); if (sugarColumn?.IsIdentity ?? true) { saveModel.MainData.Remove(keyPro.Name.FirstLetterToUpper()); saveModel.MainData.Remove(keyPro.Name.FirstLetterToLower()); } } Dt_traycodeinfo entity = saveModel.MainData.DicToModel(); List dt_Traycodeinfos = BaseDal.QueryData(x => x.traycode_code == entity.traycode_code).ToList(); if (dt_Traycodeinfos.Count > 0) { return WebResponseContent.Instance.Error("新增失败!!!已添加该托盘"); } if (saveModel.DetailData == null || saveModel.DetailData.Count == 0) { BaseDal.AddData(entity); return WebResponseContent.Instance.OK(); } if (typeof(Dt_traycodeinfo).GetNavigatePro() == null) { return WebResponseContent.Instance.Error("未配置导航属性"); } Type detailType = typeof(Dt_traycodeinfo).GetDetailType(); MethodInfo? methodInfo = GetType().GetMethod("AddDataIncludesDetail"); methodInfo = methodInfo?.MakeGenericMethod(new Type[] { detailType }); object? obj = methodInfo?.Invoke(this, new object[] { entity, detailType, saveModel.DetailData }); return obj as WebResponseContent; } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } //导入 public virtual WebResponseContent Import(List files) { try { if (files == null || files.Count == 0) return new WebResponseContent { Status = true, Message = "请选择上传的文件" }; Microsoft.AspNetCore.Http.IFormFile formFile = files[0]; // 使用Path.Combine,避免硬编码路径分隔符 string dicPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ExcelImport", DateTime.Now.ToString("yyyyMMdd")); if (!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath); string fileName = $"{Guid.NewGuid()}_{formFile.FileName}"; string fullPath = Path.Combine(dicPath, fileName); // 使用FileStream保存文件 using (FileStream stream = new FileStream(fullPath, FileMode.Create)) { formFile.CopyTo(stream); } // 初始化Excel导入工具 ExcelImporter importer = new ExcelImporter(); // 导入Excel数据 ImportResult importResult = importer.Import(fullPath, "").Result; if (importResult.HasError) { return WebResponseContent.Instance.Error(importResult.TemplateErrors.Serialize()); } // 假设BaseDal是数据访问层,进行数据存储 List traycodeinfo = new List(); foreach (var item in importResult.Data) { Dt_traycodeinfo dt_Traycodeinfo = BaseDal.QueryFirst(x => x.traycode_code == item.traycode_code); if (dt_Traycodeinfo != null) { return WebResponseContent.Instance.Error($"添加失败!已有该托盘条码:{item.traycode_code},请勿重复添加!"); } Dt_pallet pallerdata =_PalletService.Repository.QueryFirst(x => x.palletname == item.traycode_type); if(pallerdata == null) { return WebResponseContent.Instance.Error($"添加失败!托盘条码:{item.traycode_code},未找到对应的类型"); } Dt_traycodeinfo dt_ = new Dt_traycodeinfo() { traycode_type = pallerdata.palletnumber.ToString(), traycode_createtime = DateTime.Now, traycode_staute = 1, traycode_code=item.traycode_code, }; traycodeinfo.Add(dt_); } BaseDal.AddData(traycodeinfo); return WebResponseContent.Instance.OK("导入成功"); } catch (Exception ex) { // 捕获异常并返回错误消息 return WebResponseContent.Instance.Error(ex.Message); } } } }