|
@@ -0,0 +1,284 @@
|
|
|
+/* ==============================================================================
|
|
|
+ * 功能描述:导出所有的岗位
|
|
|
+ * 创 建 者:Garrett
|
|
|
+ * 创建日期:2018/8/10 16:36:26
|
|
|
+ * ==============================================================================*/
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.IO;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using Autodesk.Revit.DB;
|
|
|
+using Autodesk.Revit.DB.Mechanical;
|
|
|
+using Microsoft.Win32;
|
|
|
+using Newtonsoft.Json.Linq;
|
|
|
+using NPOI.SS.UserModel;
|
|
|
+using NPOI.XSSF.UserModel;
|
|
|
+using SAGA.DotNetUtils;
|
|
|
+using SAGA.DotNetUtils.Logger;
|
|
|
+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;
|
|
|
+using CellType = Autodesk.Revit.DB.CellType;
|
|
|
+
|
|
|
+namespace SAGA.MBI.ToolsData
|
|
|
+{
|
|
|
+ /// <summary>
|
|
|
+ /// UpdateRelationEquipinFloor
|
|
|
+ /// </summary>
|
|
|
+ public class ExportAllDuty
|
|
|
+ {
|
|
|
+ /// <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";
|
|
|
+ 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;
|
|
|
+ var floorName = context.MFloor.ToString();
|
|
|
+ var floorPath = context.MFloor.FullPath;
|
|
|
+ ISheet sheet = book.CreateSheet(floorName);
|
|
|
+
|
|
|
+ #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("Dutyid");
|
|
|
+
|
|
|
+
|
|
|
+ ICell cell4 = row.CreateCell(3);
|
|
|
+ cell4.SetCellType(NPOI.SS.UserModel.CellType.String);
|
|
|
+ cell4.SetCellValue("BIMID");
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ Action<MRevitEquipBase, string> action = (equip, type) =>
|
|
|
+ {
|
|
|
+ var family = equip.EquipClassCode;
|
|
|
+ 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(floorName);
|
|
|
+
|
|
|
+ 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);
|
|
|
+ };
|
|
|
+ foreach (var equip in context.MEquipments)
|
|
|
+ {
|
|
|
+ action(equip, "设备");
|
|
|
+ }
|
|
|
+ foreach (var part in context.MEquipmentParts)
|
|
|
+ {
|
|
|
+ action(part, "部件");
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|