using Magicodes.ExporterAndImporter.Excel.Utility; using Microsoft.AspNetCore.Http; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_IPackInfoRepository; using WIDESEAWCS_Common.Utilities; using WIDESEAWCS_Model.Models; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_IPackInfoService; using WIDESEAWCS_IBasicInfoRepository; namespace WIDESEAWCS_PackInfoService { public class PackaxisService : ServiceBase, IPackaxisService { public PackaxisService(IPackaxisRepository BaseDal) : base(BaseDal) { } private readonly IPackTypeRepository _packTypeRepository; private readonly IStationMangerRepository _stationMangerRepository; public PackaxisService(IPackaxisRepository BaseDal, IPackTypeRepository packTypeRepository, IStationMangerRepository stationMangerRepository) : base(BaseDal) { _packTypeRepository = packTypeRepository; _stationMangerRepository = stationMangerRepository; } public override WebResponseContent Import(List files) { WebResponseContent content = new WebResponseContent(); try { // 1. 验证文件 if (files == null || files.Count == 0) return new WebResponseContent { Status = false, Message = "请选择上传的文件" }; var formFile = files[0]; // 2. 准备目录(使用Path.Combine) var dicPath = Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "ExcelImport", DateTime.Now.ToString("yyyyMMdd"), typeof(Dt_Packaxis).Name); Directory.CreateDirectory(dicPath); // 3. 保存上传文件 var fileName = $"{Guid.NewGuid()}_{formFile.FileName}"; var fullPath = Path.Combine(dicPath, fileName); using (var stream = new FileStream(fullPath, FileMode.Create)) { formFile.CopyToAsync(stream); } // 4. 导入Excel数据 DataTable dtExcel = new DataTable(); using (ImportExcelHelper excelHelper = new ImportExcelHelper(fullPath)) { dtExcel = excelHelper.ExcelToDataTable(); } List addAxis = new List(); List updateAxis = new List(); if (dtExcel == null || dtExcel.Rows.Count == 0) { return content.Error("未找到数据请检查Excel表格数据格式是否正确!"); } for (int i = 0; i < dtExcel.Rows.Count; i++) { DataRow row = dtExcel.Rows[i]; string id = row["id"]?.ToString() ?? string.Empty; string DeviceCode = row["DeviceCode"]?.ToString() ?? string.Empty; string StationCode = row["StationCode"]?.ToString() ?? string.Empty; int PackType = row["PackType"].ObjToInt(); string PackNum = row["PackNum"]?.ToString() ?? string.Empty; string AxisX = row["AxisX"]?.ToString() ?? string.Empty; string AxisXCount = row["AxisXCount"]?.ToString() ?? string.Empty; string AxisXSpacing = row["AxisXSpacing"]?.ToString() ?? string.Empty; string AxisY = row["AxisY"]?.ToString() ?? string.Empty; string AxisYCount = row["AxisYCount"]?.ToString() ?? string.Empty; string AxisYSpacing = row["AxisYSpacing"]?.ToString() ?? string.Empty; string AxisZ = row["AxisZ"]?.ToString() ?? string.Empty; string AxisZCount = row["AxisZCount"]?.ToString() ?? string.Empty; string AxisZSpacing = row["AxisZSpacing"]?.ToString() ?? string.Empty; var axis = BaseDal.QueryFirst(x => x.DeviceCode == DeviceCode && x.StationCode == StationCode && x.PackType == PackType); if (axis == null) if (axis == null) { Dt_Packaxis packaxis = new Dt_Packaxis() { DeviceCode = DeviceCode, StationCode = StationCode, PackType = PackType, PackNum = Convert.ToInt32(PackNum), AxisX = Convert.ToInt32(AxisX), AxisXCount = Convert.ToInt32(AxisXCount), AxisXSpacing = Convert.ToInt32(AxisXSpacing), AxisY = Convert.ToInt32(AxisY), AxisYCount = Convert.ToInt32(AxisYCount), AxisYSpacing = Convert.ToInt32(AxisYSpacing), AxisZ = Convert.ToInt32(AxisZ), AxisZCount = Convert.ToInt32(AxisZCount), AxisZSpacing = Convert.ToInt32(AxisZSpacing), Creater = App.User.UserId > 0 ? App.User.UserName : "System", CreateDate = DateTime.Now }; addAxis.Add(packaxis); } else { axis.DeviceCode = DeviceCode; axis.StationCode = StationCode; axis.PackType = PackType; axis.PackNum = Convert.ToInt32(PackNum); axis.AxisX = Convert.ToInt32(AxisX); axis.AxisXCount = Convert.ToInt32(AxisXCount); axis.AxisXSpacing = Convert.ToInt32(AxisXSpacing); axis.AxisY = Convert.ToInt32(AxisY); axis.AxisYCount = Convert.ToInt32(AxisYCount); axis.AxisYSpacing = Convert.ToInt32(AxisYSpacing); axis.AxisZ = Convert.ToInt32(AxisZ); axis.AxisZCount = Convert.ToInt32(AxisZCount); axis.AxisZSpacing = Convert.ToInt32(AxisZSpacing); axis.Modifier = App.User.UserId > 0 ? App.User.UserName : "System"; axis.ModifyDate = DateTime.Now; updateAxis.Add(axis); } } BaseDal.AddData(addAxis); BaseDal.UpdateData(updateAxis); content = WebResponseContent.Instance.OK("导入成功!"); } catch (Exception ex) { content = WebResponseContent.Instance.Error(ex.Message); } return content; } /// /// 添加坐标数据 /// /// /// public override WebResponseContent AddData(SaveModel saveModel) { WebResponseContent content = new WebResponseContent(); try { string json = JsonConvert.SerializeObject(saveModel.MainData); Dt_Packaxis dt_Pack = JsonConvert.DeserializeObject(json); Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == dt_Pack.StationCode && x.StackerCraneCode == dt_Pack.DeviceCode); Dt_PackType packTyp = _packTypeRepository.QueryFirst(x => x.Id == dt_Pack.PackType); int w = 1200;//这个是码垛托盘宽1.2米 int h = 1500;//托盘的高度限高1.5米 int AxisXCountMax = w / packTyp.PackLength;//X坐标最多放码垛数量 int AxisYCountMax = w / packTyp.PackWidth;//Y坐标最多放码垛数量 int AxisZCountMax = h / packTyp.PackHeight;//Z坐标最多放码垛数量 if (dt_Pack.AxisXCount <= 0 || dt_Pack.AxisXCount > AxisXCountMax || dt_Pack.AxisYCount <= 0 || dt_Pack.AxisYCount > AxisYCountMax || dt_Pack.AxisZCount <= 0 || dt_Pack.AxisZCount > AxisZCountMax) { return WebResponseContent.Instance.Error($"添加失败,请输入X坐标码垛数大于0且小于{AxisXCountMax + 1}且Y坐标码垛数大于0且小于{AxisYCountMax + 1}且Z坐标码垛数大于0且小于{AxisZCountMax + 1}"); } if (stationManger.IsNullOrEmpty()) { return WebResponseContent.Instance.Error($"添加失败,该码垛机器输送线工位选错!"); } Dt_Packaxis packaxis = BaseDal.QueryFirst(x => x.DeviceCode == dt_Pack.DeviceCode && x.StationCode == dt_Pack.StationCode && x.PackType == dt_Pack.PackType); if (packaxis.IsNullOrEmpty()) { saveModel.MainData["PackNum"] = dt_Pack.AxisXCount * dt_Pack.AxisYCount * dt_Pack.AxisZCount; return base.AddData(saveModel); } return WebResponseContent.Instance.Error($"添加失败,该码垛坐标数据已存在!"); } catch (Exception ex) { content = WebResponseContent.Instance.Error(ex.Message); } return content; } /// /// 修改坐标数据 /// /// /// public override WebResponseContent UpdateData(SaveModel saveModel) { WebResponseContent content = new WebResponseContent(); try { string json = JsonConvert.SerializeObject(saveModel.MainData); Dt_Packaxis dt_Pack = JsonConvert.DeserializeObject(json); Dt_PackType packTyp = _packTypeRepository.QueryFirst(x => x.Id == dt_Pack.PackType); int w = 1200;//这个是码垛托盘宽1.2米 int h = 1500;//托盘的高度限高1.5米 int AxisXCountMax = w / packTyp.PackLength;//X坐标最多放码垛数量 int AxisYCountMax = w / packTyp.PackWidth;//Y坐标最多放码垛数量 int AxisZCountMax = h / packTyp.PackHeight;//Z坐标最多放码垛数量 if (dt_Pack.AxisXCount <= 0 || dt_Pack.AxisXCount > AxisXCountMax || dt_Pack.AxisYCount <= 0 || dt_Pack.AxisYCount > AxisYCountMax || dt_Pack.AxisZCount <= 0 || dt_Pack.AxisZCount > AxisZCountMax) { return WebResponseContent.Instance.Error($"修改失败,请输入X坐标码垛数大于0且小于{AxisXCountMax + 1}且Y坐标码垛数大于0且小于{AxisYCountMax + 1}且Z坐标码垛数大于0且小于{AxisZCountMax + 1}"); } Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == dt_Pack.StationCode && x.StackerCraneCode == dt_Pack.DeviceCode); if (stationManger.IsNullOrEmpty()) { return WebResponseContent.Instance.Error($"修改失败,该码垛机器输送线工位选错!"); } Dt_Packaxis packaxis = BaseDal.QueryFirst(x => x.Id != dt_Pack.Id && x.DeviceCode == dt_Pack.DeviceCode && x.StationCode == dt_Pack.StationCode && x.PackType == dt_Pack.PackType); if (packaxis.IsNullOrEmpty()) { saveModel.MainData["PackNum"] = dt_Pack.AxisXCount * dt_Pack.AxisYCount * dt_Pack.AxisZCount; return base.UpdateData(saveModel); } return WebResponseContent.Instance.Error($"修改失败,该码垛坐标数据已存在!"); } catch (Exception ex) { content = WebResponseContent.Instance.Error(ex.Message); } return content; } } }