|
@@ -0,0 +1,312 @@
|
|
|
+/* ==============================================================================
|
|
|
+ * 功能描述:导出设备类
|
|
|
+ * 创 建 者:Garrett
|
|
|
+ * 创建日期:2018/10/15 11:26:18
|
|
|
+ * ==============================================================================*/
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.IO;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using Autodesk.Revit.DB;
|
|
|
+using Microsoft.Win32;
|
|
|
+using Newtonsoft.Json.Linq;
|
|
|
+using NPOI.SS.UserModel;
|
|
|
+using NPOI.XSSF.UserModel;
|
|
|
+using SAGA.DotNetUtils.Extend;
|
|
|
+using SAGA.DotNetUtils.Others;
|
|
|
+using SAGA.MBI.Calc;
|
|
|
+using SAGA.MBI.Common;
|
|
|
+using SAGA.MBI.DataArrange;
|
|
|
+using SAGA.MBI.Model;
|
|
|
+using SAGA.MBI.RequestData;
|
|
|
+using SAGA.MBI.Tools;
|
|
|
+using SAGA.MBI.WinView.Upload;
|
|
|
+using SAGA.RevitUtils.Extends;
|
|
|
+
|
|
|
+namespace SAGA.MBI.ToolsData
|
|
|
+{
|
|
|
+ /// <summary>
|
|
|
+ /// ExportAllEquipmentAll
|
|
|
+ /// </summary>
|
|
|
+ public class ExportAllEquipment
|
|
|
+ {
|
|
|
+ /// <summary>
|
|
|
+ /// 检查并处理所有楼层
|
|
|
+ /// </summary>
|
|
|
+ public static void OperateAll()
|
|
|
+ {
|
|
|
+ var floors = DalUploadFloor.GetHasFileFloors();
|
|
|
+ List<CalcContext> contexts = new List<CalcContext>();
|
|
|
+ foreach (UploadFloor floor in floors)
|
|
|
+ {
|
|
|
+ contexts.Add(Operate(floor.MFloor));
|
|
|
+ }
|
|
|
+ ExportToExcel(contexts);
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 只处理当前楼层
|
|
|
+ /// </summary>
|
|
|
+ public static void OperateCurFloor()
|
|
|
+ {
|
|
|
+ MFloor floor = ExternalDataWrapper.Current.Doc.GetCurMFloor();
|
|
|
+ if (floor != null)
|
|
|
+ {
|
|
|
+ var context = Operate(floor);
|
|
|
+ ExportToExcel(new List<CalcContext>() { context });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 检查并处理
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="floor"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private static CalcContext Operate(MFloor floor)
|
|
|
+ {
|
|
|
+ var context = DalCommon.DownLoadFloorDataByBIMFloorInfo(floor);
|
|
|
+ return context;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 导出数据
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="xyzsList"></param>
|
|
|
+ public static void ExportToExcel(List<CalcContext> contexts)
|
|
|
+ {
|
|
|
+ SaveFileDialog sflg = new SaveFileDialog();
|
|
|
+ sflg.Filter = "Excel(*.xlsx)|*.xlsx";
|
|
|
+ sflg.FileName = $"{MBIControl.ProjectCur}岗位汇总表";
|
|
|
+ if (sflg.ShowDialog() != true) return;
|
|
|
+ ExportToExcel(contexts, sflg.FileName, sflg.FilterIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 导出数据到指定目录
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="xyzsList"></param>
|
|
|
+ /// <param name="fileName"></param>
|
|
|
+ private static void ExportToExcel(List<CalcContext> contexts, string fileName, int filterIndex = 0)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ IWorkbook book = new XSSFWorkbook();
|
|
|
+
|
|
|
+ #region 添加数据
|
|
|
+
|
|
|
+ foreach (var context in contexts)
|
|
|
+ {
|
|
|
+ int index = 0;
|
|
|
+ ISheet sheet = book.CreateSheet(DalProjectTree.GetBuildingFloorName(context.FloorId));
|
|
|
+
|
|
|
+ #region 添加表头
|
|
|
+
|
|
|
+ IRow row = sheet.CreateRow(0);
|
|
|
+ NPOI.SS.UserModel.ICell cell0 = row.CreateCell(0);
|
|
|
+ cell0.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell0.SetCellValue("楼层名称");
|
|
|
+
|
|
|
+ ICell cell1 = row.CreateCell(1);
|
|
|
+ cell1.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell1.SetCellValue("类型");
|
|
|
+
|
|
|
+ ICell cell2 = row.CreateCell(2);
|
|
|
+ cell2.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell2.SetCellValue("族名称");
|
|
|
+
|
|
|
+ ICell cell3 = row.CreateCell(3);
|
|
|
+ cell3.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell3.SetCellValue("物理世界Id");
|
|
|
+
|
|
|
+
|
|
|
+ ICell cell4 = row.CreateCell(4);
|
|
|
+ cell4.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell4.SetCellValue("模型中的Id");
|
|
|
+
|
|
|
+ ICell cell5 = row.CreateCell(5);
|
|
|
+ cell5.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell5.SetCellValue("设备的本地名称");
|
|
|
+
|
|
|
+ ICell cell6 = row.CreateCell(6);
|
|
|
+ cell6.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell6.SetCellValue("设备的本地编码");
|
|
|
+
|
|
|
+ ICell cell7 = row.CreateCell(7);
|
|
|
+ cell7.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell7.SetCellValue("设备所在空间的名称");
|
|
|
+
|
|
|
+ ICell cell8 = row.CreateCell(8);
|
|
|
+ cell8.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell8.SetCellValue("设备所在空间的模型Id");
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ Action<MEquipment, string> action = (equip, type) =>
|
|
|
+ {
|
|
|
+ string family = equip.EquipClassCode + "-" + equip.Family?.Name;
|
|
|
+ var id = equip.Id;
|
|
|
+ var bimid = equip.BimID.GetBIMID();
|
|
|
+ index++;
|
|
|
+
|
|
|
+ row = sheet.CreateRow(index);
|
|
|
+
|
|
|
+ ICell cell = row.CreateCell(0, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(context.MFloor.ToString());
|
|
|
+
|
|
|
+ cell = row.CreateCell(1, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(type);
|
|
|
+
|
|
|
+ cell = row.CreateCell(2, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(family);
|
|
|
+
|
|
|
+ cell = row.CreateCell(3, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(id);
|
|
|
+
|
|
|
+ cell = row.CreateCell(4, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(bimid);
|
|
|
+
|
|
|
+ cell = row.CreateCell(5, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(equip.LocalName);
|
|
|
+
|
|
|
+ cell = row.CreateCell(6, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(equip.LocalId);
|
|
|
+
|
|
|
+ if (equip.MSpace != null)
|
|
|
+ {
|
|
|
+ cell = row.CreateCell(7, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(equip.MSpace.ToString());
|
|
|
+
|
|
|
+ cell = row.CreateCell(8, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(equip.MSpace.BimID.GetBIMID());
|
|
|
+ }
|
|
|
+
|
|
|
+ };
|
|
|
+ foreach (var equip in context.MEquipments)
|
|
|
+ {
|
|
|
+ action(equip, "设备");
|
|
|
+ }
|
|
|
+ foreach (var part in context.MEquipmentParts)
|
|
|
+ {
|
|
|
+ //action(part as MEquipment, "部件");
|
|
|
+ }
|
|
|
+ //foreach (var beacon in context.MBeacons)
|
|
|
+ //{
|
|
|
+ // action(beacon, "信标");
|
|
|
+ //}
|
|
|
+ //foreach (var space in context.MSpaces)
|
|
|
+ //{
|
|
|
+ // action(space, "空间");
|
|
|
+ //}
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 写入
|
|
|
+
|
|
|
+ MemoryStream ms = new MemoryStream();
|
|
|
+ book.Write(ms);
|
|
|
+ book = null;
|
|
|
+
|
|
|
+ using (System.IO.FileStream fs = new System.IO.FileStream(fileName, FileMode.Create, FileAccess.Write))
|
|
|
+ {
|
|
|
+ byte[] data = ms.ToArray();
|
|
|
+ fs.Write(data, 0, data.Length);
|
|
|
+ fs.Flush();
|
|
|
+ }
|
|
|
+ ms.Close();
|
|
|
+ ms.Dispose();
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ MessageShowBase.Show(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 导出数据到指定目录
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="xyzsList"></param>
|
|
|
+ /// <param name="fileName"></param>
|
|
|
+ private static void ExportToExcel2(List<CalcContext> contexts, string fileName, int filterIndex = 0)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ IWorkbook book = new XSSFWorkbook();
|
|
|
+
|
|
|
+ #region 添加数据
|
|
|
+ ISheet sheet = book.CreateSheet("Summary");
|
|
|
+
|
|
|
+ #region 添加表头
|
|
|
+
|
|
|
+ IRow row = sheet.CreateRow(0);
|
|
|
+ NPOI.SS.UserModel.ICell cell0 = row.CreateCell(0);
|
|
|
+ cell0.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell0.SetCellValue("楼层名称");
|
|
|
+
|
|
|
+ ICell cell1 = row.CreateCell(1);
|
|
|
+ cell1.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell1.SetCellValue("类型");
|
|
|
+
|
|
|
+ ICell cell2 = row.CreateCell(2);
|
|
|
+ cell2.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell2.SetCellValue("总数");
|
|
|
+
|
|
|
+ List<string> list = new List<string>() { "FASE-光电感烟探测器", "FASE-智能感温探测器", "FSCP-消火栓起泵按钮" };
|
|
|
+ var list2 = list.Select(tt => tt.Substring(0, 4)).ToList();
|
|
|
+ int index = 0;
|
|
|
+ foreach (var context in contexts)
|
|
|
+ {
|
|
|
+ var floorName = context.MFloor.ToString();
|
|
|
+
|
|
|
+
|
|
|
+ #endregion
|
|
|
+ Action<int> action = (count) =>
|
|
|
+ {
|
|
|
+ index++;
|
|
|
+
|
|
|
+ row = sheet.CreateRow(index);
|
|
|
+
|
|
|
+ ICell cell = row.CreateCell(0, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(floorName);
|
|
|
+
|
|
|
+ cell = row.CreateCell(1, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(string.Join(",", list));
|
|
|
+
|
|
|
+ cell = row.CreateCell(2, NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell.SetCellValue(count);
|
|
|
+
|
|
|
+ };
|
|
|
+ action(context.MEquipments.Where(t => list2.Contains(t.EquipClassCode)).Count());
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 写入
|
|
|
+
|
|
|
+ MemoryStream ms = new MemoryStream();
|
|
|
+ book.Write(ms);
|
|
|
+ book = null;
|
|
|
+
|
|
|
+ using (System.IO.FileStream fs = new System.IO.FileStream(fileName, FileMode.Create, FileAccess.Write))
|
|
|
+ {
|
|
|
+ byte[] data = ms.ToArray();
|
|
|
+ fs.Write(data, 0, data.Length);
|
|
|
+ fs.Flush();
|
|
|
+ }
|
|
|
+ ms.Close();
|
|
|
+ ms.Dispose();
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ MessageShowBase.Show(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|