using MiniExcelLibs; using Sinvo.EplanHpD.Plugin.WPFUI.Datas; using Sinvo.EplanHpD.Plugin.WPFUI.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace Sinvo.EplanHpD.Plugin.WPFUI.Utils { public class MotorExcelHelper { public static MotorExcelHelper Instance = new(); private Stream dataFileStream; public void ReadDataToStream() { var file = Path.Combine(Consts.PLUGIN_DATA_FILE_PATH, Consts.PLUGIN_DATA_FILE_NAME); if (File.Exists(file)) { var bytes = File.ReadAllBytes(file); dataFileStream = new MemoryStream(bytes); } } public List GetCableDatas(string brand = Brands.SANLING_HK_KT) { if (dataFileStream == null || !dataFileStream.CanRead) { // 未初始化或是无法读取时,重试一次 ReadDataToStream(); } //var filePath = "D:\\旧电脑文件\\Desktop\\Data\\三菱伺服HK-KT线材选型BOM表_按程序格式整理后.xlsx"; var data = MiniExcel.Query(dataFileStream, brand).ToList(); //MiniExcel.Query() return data; } /// /// 1. 100W, /// 2. 100W带刹车, /// 3. 200W, /// 4. 200W带刹车, /// 5. 400W低惯量, /// 6. 400W低惯量带刹车, /// 7. 750W低惯量, /// 8. 750W低惯量带刹车, /// 9. 1000W(220V), /// 10.1000W带刹车(220V), /// 11.1500W(220V), /// 12.1500带刹车(220V), /// public List GetMotorPowers() { //return new List //{ // new(){ ItemName = "100W", ItemValue = "100W"}, // new(){ ItemName = "100W带刹车", ItemValue = "100W带刹车"}, // new(){ ItemName = "200W", ItemValue = "200W"}, // new(){ ItemName = "200W带刹车", ItemValue = "200W带刹车"}, // new(){ ItemName = "400W低惯量", ItemValue = "400W低惯量"}, // new(){ ItemName = "400W低惯量带刹车", ItemValue = "400W低惯量带刹车"}, // new(){ ItemName = "750W低惯量", ItemValue = "750W低惯量"}, // new(){ ItemName = "750W低惯量带刹车", ItemValue = "750W低惯量带刹车"}, // new(){ ItemName = "1000W(220V)", ItemValue = "1000W(220V)"}, // new(){ ItemName = "1000W带刹车(220V)", ItemValue = "1000W带刹车(220V)"}, // new(){ ItemName = "1500W(220V)", ItemValue = "1500W(220V)"}, // new(){ ItemName = "1500带刹车(220V)", ItemValue = "1500带刹车(220V)"}, //}; var data = MiniExcel.Query(dataFileStream, sheetName: "电机驱动器", startCell: "A2", useHeaderRow: true).OrderBy(it => it.序号).Select(it => new ConfigItemModel { ItemName = it.功率, ItemValue = it.功率, ItemFlag = it.型号 }).ToList(); return data.Distinct(new LambdaComparer( (a, b) => a.ItemName == b.ItemName && a.ItemValue == b.ItemValue && b.ItemFlag == a.ItemFlag, obj => obj.ToString().GetHashCode() )).ToList(); } /// /// 1.动力线, /// 2.编码器线, /// 3.动力刹车线, /// 4.编码器线+动力线, /// 5.编码器线+动力刹车线, /// /// public List GetCableTypes() { //return new List //{ // new(){ ItemName = "动力线", ItemValue = "动力线,"}, // new(){ ItemName = "编码器线", ItemValue = "编码器线"}, // new(){ ItemName = "动力刹车线", ItemValue = "动力刹车线"}, // new(){ ItemName = "编码器线+动力线", ItemValue = "编码器线+动力线"}, // new(){ ItemName = "编码器线+动力刹车线", ItemValue = "编码器线+动力刹车线"}, //}; var data = MiniExcel.Query(dataFileStream, sheetName: "线材类型", useHeaderRow: true).Select(it => new ConfigItemModel { ItemName = it.线材类型, ItemValue = it.线材类型, ItemFlag = it.是否组合 }).OrderBy(it => it.ItemName).ToList(); return data.Distinct(new LambdaComparer( (a, b) => a.ItemName == b.ItemName && a.ItemValue == b.ItemValue, obj => obj.ToString().GetHashCode() )).OrderBy(it => it.ItemValue).ToList(); } /// /// 获取直通线数量 /// /// /// public List GetPassthroughCableCount(string motorModel) { if (dataFileStream == null || !dataFileStream.CanRead) { // 未初始化或是无法读取时,重试一次 ReadDataToStream(); } return MiniExcel.Query(dataFileStream, sheetName: "直通线数量").Where(it => it.MotorModel == motorModel).ToList(); } /// /// 获取电机功率 /// /// 电机型号 /// public int GetMotorPower(string motorModel) { if (dataFileStream == null || !dataFileStream.CanRead) { // 未初始化或是无法读取时,重试一次 ReadDataToStream(); } return MiniExcel.Query(dataFileStream, sheetName: "电机功率") .Where(it => it.MotorModel == motorModel) .FirstOrDefault() ?.MotorPower ?? 0; } public List GetBomList(string drawNo) { //var filePath = "D:\\Desktop\\Data\\BOM表.xlsx"; var filePath = Path.Combine(Consts.PLUGIN_DATA_FILE_PATH, Consts.PLUGIN_DATA_FILE_NAME_BOM); var data = MiniExcel.Query(filePath).Where(it => it.DrawingNo == drawNo).ToList(); //MiniExcel.Query<>() return data; } public void SaveBomListToExcel(string targetPath, List bomList, string cableModelNo) { MiniExcel.SaveAs( targetPath, bomList ); } public bool SaveLinesToExcel(string targetPath,string mechanismNo, List lines) { try { var templatePath = Path.Combine(Consts.PLUGIN_DATA_FILE_PATH, Consts.PLUGIN_TEMPLATE_FILE_NAME); var data = lines.Select(line => new { line.ItemSeqNo, line.SeqNo, line.MechanicalNo, line.MechanicalName, line.CableModelNo, line.CableType, line.AxisNo, line.DrawingNo, EncoderLineLength = line.EncoderLineLength == 0 ? "" : line.EncoderLineLength.ToString(), PowerLineLength = line.PowerLineLength == 0 ? "" : line.PowerLineLength.ToString(), OrderDate = DateTime.Now.ToString("yyyy/M/d"), DeliveryDate = DateTime.Now.AddDays(7).ToString("yyyy/M/d"), // 交期默认一周 }).ToList(); MiniExcel.SaveAsByTemplate( $"{targetPath}\\{mechanismNo}线材下单_{DateTime.Now:yyyy_MM_dd}_{DateTime.Now.Ticks}.xlsx", templatePath, new { data }, new MiniExcelLibs.OpenXml.OpenXmlConfiguration { FastMode = true } ); return true; } catch (System.Exception) { throw; } } public void CloseStream() { dataFileStream?.Close(); } } }