using DocumentFormat.OpenXml.EMMA; using Learun.Application.TwoDevelopment.ZZDT_EC; using Learun.Util; using Learun.Util.SqlSugar; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Web.Mvc; namespace Learun.Application.Web.Areas.ZZDT_EC.Controllers { /// /// 版 本 PIT-ADMS V7.0.3 敏捷开发框架 /// Copyright (c) 2013-2018 Hexagon PPM /// 创 建:超级管理员 /// 日 期:2022-01-30 15:57 /// 描 述:图纸文件 /// public class ec_drawing_fileController : MvcControllerBase { private ec_drawing_fileBLL ec_drawing_fileIBLL = new ec_drawing_fileBLL(); #region 视图功能 /// /// 主页面 /// /// [HttpGet] public ActionResult Index() { return View(); } /// /// 表单页 /// /// [HttpGet] public ActionResult Form() { return View(); } /// /// 选择页 /// /// [HttpGet] public ActionResult SelectIndex() { return View(); } /// /// 图纸回收站 /// /// [HttpGet] public ActionResult RecycleBin() { return View(); } #endregion #region 获取数据 /// /// 导出图纸的一些检查内容 /// /// public void ReportToExcel(string ProjectId, string dwgId) { IWorkbook workbook = new XSSFWorkbook(); ISheet sheet = workbook.CreateSheet("未在布置图上出现的位号"); //创建第一行 并赋值 IRow row = sheet.CreateRow(0); row.CreateCell(0).SetCellValue("对象类型"); row.CreateCell(1).SetCellValue("位号"); int rowIndex = 2; #region 项目的基本信息 //项目的基本信息 var projectEntity = new ec_projectBLL().GetList("{ProjectId:\"" + ProjectId + "\"}").FirstOrDefault(); var dwgTbName = ProjectSugar.TableName(ProjectId); var pixelTbName = ProjectSugar.TableName(ProjectId); var listTbName = ProjectSugar.TableName(ProjectId); var detailTbName = ProjectSugar.TableName(ProjectId); var tagTbName = ProjectSugar.TableName(ProjectId); var dwgType = SqlSugarHelper.Db.Queryable().AS(listTbName).First(x => x.DataItemCode == GlobalObject.enumlist_DrawingType); var dwgTypes = SqlSugarHelper.Db.Queryable().AS(detailTbName). Where(x => x.DataItemID == dwgType.DataItemID).ToList(); var layoutDetail = dwgTypes.FirstOrDefault(x => x.DataItemName == GlobalObject.drawingType_Layout); var allDwgs = SqlSugarHelper.Db.Queryable().AS(dwgTbName).ToList(); var allLayoutDwgs = allDwgs.Where(x => x.DrawingType == layoutDetail.DataItemDetailID).Select(x => x.DrawingFileID). Distinct().ToList(); var allPixels = SqlSugarHelper.Db.Queryable().AS(pixelTbName).ToList(); var pixelsOnDwg = allPixels.Where(x => x.DrawingFileID == dwgId).ToList(); var TagIds = pixelsOnDwg.Select(x => x.EngineDataID).Distinct().ToList(); //这些id是否再另外的图纸上 var PixelOnOtherDwg = allPixels.Where(x => TagIds.Contains(x.EngineDataID) && x.DrawingFileID != dwgId && allLayoutDwgs.Contains(x.DrawingFileID) && x.DeleteFlg != 1).ToList(); var tagIdsOccurOnLayout = PixelOnOtherDwg.Select(x => x.EngineDataID).Distinct().ToList(); var allTag = SqlSugarHelper.Db.Queryable().AS(tagTbName).ToList(); var ERROR_Tag = TagIds.Where(x => !tagIdsOccurOnLayout.Contains(x)).ToList(); int rowIdx = 1; foreach (var tagId in ERROR_Tag) { var tag = allTag.FirstOrDefault(x => x.EngineDataID == tagId); row = sheet.CreateRow(rowIdx); row.CreateCell(0).SetCellValue(tag.ObjectTypeID); row.CreateCell(1).SetCellValue(tag.TagNumber); rowIdx++; } #endregion string filename = "系统图图纸检查_" + DateTime.Now.ToString("yyMMddHHmmss"); ExcelHelper.DownloadIWorkbook(workbook, filename); } /// /// 获取列表数据 /// /// [HttpGet] [AjaxOnly] public ActionResult GetList(string queryJson) { var data = ec_drawing_fileIBLL.GetList(queryJson); return Success(data); } /// /// 获取列表分页数据 /// 分页参数 /// 工程数据ID /// /// [HttpGet] [AjaxOnly] public ActionResult GetPageList(string pagination, string queryJson, string engineDataID = "") { Pagination paginationobj = pagination.ToObject(); var data = ec_drawing_fileIBLL.GetList(queryJson, engineDataID, paginationobj); var jsonData = new { rows = data, total = paginationobj.total, page = paginationobj.page, records = paginationobj.records }; return Success(jsonData); } /// /// 获取表单数据 /// 主键 /// /// [HttpGet] [AjaxOnly] public ActionResult GetFormData(string keyValue, string ProjectId) { var data = ec_drawing_fileIBLL.GetEntity(keyValue, ProjectId); var jsonData = new { ec_drawing_file = data }; return Success(jsonData); } /// /// 获取图纸目录文件树形数据。 /// 场合:比如电缆清册、设备清册输出时的选择。 /// /// [HttpGet] [AjaxOnly] public ActionResult GetTreeData(string ProjectId, bool isShowCheck) { var tableName = ProjectSugar.TableName(ProjectId); var catalogueTableName = ProjectSugar.TableName(ProjectId); var pixelTableName = ProjectSugar.TableName(ProjectId); var list = SqlSugarHelper.Db.Queryable().AS(catalogueTableName).Where(x => x.DrawingCatalogueName != "材料表").ToList(); var DrawingCatalogueIDs = list.Select(x => x.DrawingCatalogueID).ToList(); var files = SqlSugarHelper.Db.Queryable().AS(tableName) .Where(x => DrawingCatalogueIDs.Contains(x.DrawingCatalogueID)).ToList(); files = files.Where(x => x.IsDelete != 1).ToList();//排除删掉的 files = files.Where(x => x.IsEngineDWG != null).Where(X => X.IsEngineDWG == 1).ToList();//排除非工程图纸 //要适当过滤出一些无效图纸 25 04 09 //比如图上没句柄的 var DWGPixels = SqlSugarHelper.Db.Queryable().AS(pixelTableName). InnerJoin((x, y) => x.EngineDataID == y.EngineDataID).AS(ProjectSugar.TableName(ProjectId)). InnerJoin((x, y, z) => y.ObjectTypeID == z.ObjectTypeID).AS(ProjectSugar.TableName(ProjectId)). Where((x, y, z) => x.DeleteFlg != 1 && files.Select(yy => yy.DrawingFileID).Contains(x.DrawingFileID) && !z.FullPathCN.EndsWith("电缆") && !z.FullPathCN.EndsWith("图框") && !z.FullPathCN.EndsWith(GlobalObject.objectType_Base)). Select((x, y, z) => new { x.DrawingFileID, x.PixelCode, y.EngineDataID, z.FullPathCN }).ToList(); //排除掉图框 基点一类的无效句柄 var dwghavingPixels = DWGPixels.Select(x => x.DrawingFileID).Distinct().ToList(); var invalidDwgs = files.Where(x => !dwghavingPixels.Contains(x.DrawingFileID)).ToList(); //比如没有 List treeList = new List(); foreach (var item in list) { TreeModel node = new TreeModel(); node.id = item.DrawingCatalogueID; node.text = item.DrawingCatalogueName; node.value = item.DrawingCatalogueID; node.showcheck = isShowCheck; node.checkstate = 0; node.isexpand = false; node.parentId = item.UpDrawingCatalogueID; node.NodeExtData = item; treeList.Add(node); } treeList.Add(new TreeModel { id = "☆图面暂无内容☆", text = "☆图面暂无内容☆", value = "☆图面暂无内容☆", showcheck = isShowCheck, checkstate = 0, isexpand = false, parentId = "" }); foreach (var item in files) { if (invalidDwgs.Any(x => x.DrawingFileID == item.DrawingFileID)) { item.DrawingFileName = "【☆图面暂无内容☆】" + item.DrawingFileName; item.DrawingCatalogueID = "☆图面暂无内容☆"; } TreeModel node = new TreeModel(); node.id = item.DrawingFileID; node.text = item.DrawingFileName; node.value = item.DrawingFileID; node.showcheck = isShowCheck; node.checkstate = 0; node.isexpand = false; node.parentId = item.DrawingCatalogueID; node.NodeExtData = item; treeList.Add(node); } return Success(treeList.ToTree()); } #endregion #region 提交数据 /// /// 删除图纸 /// 主键 /// 主键 /// 彻底删除 /// /// [HttpPost] [AjaxOnly] public ActionResult DeleteForm(string keyValue, string ProjectId, bool deleteTags) { ec_drawing_fileIBLL.DeleteEntity(keyValue, ProjectId); return Success("删除成功!"); } /// /// 逻辑删除实体数据 /// 主键 /// /// [HttpPost] [AjaxOnly] public ActionResult LogicDelete(string keyValue, string ProjectId) { ec_drawing_fileIBLL.LogicDelete(keyValue, ProjectId); return Success("删除成功!"); } /// /// 还原逻辑删除实体数据 /// 主键 /// /// [HttpPost] [AjaxOnly] public ActionResult RepeatLogicDelete(string keyValue, string ProjectId) { ec_drawing_fileIBLL.RepeatLogicDelete(keyValue, ProjectId); return Success("还原成功!"); } /// /// 保存实体数据(新增、修改) /// 主键 /// /// [HttpPost] [ValidateAntiForgeryToken] [AjaxOnly] public ActionResult SaveForm(string keyValue, string strEntity, string ProjectId) { ec_drawing_fileEntity entity = strEntity.ToObject(); //同一目录下不允许有名称相同的图纸文件 var data = ec_drawing_fileIBLL.GetList("{DrawingCatalogueID:\"" + entity.DrawingCatalogueID + "\",ProjectId:\"" + ProjectId + "\",DrawingFileNameFull:\"" + entity.DrawingFileName + "\"}").ToList(); if (data != null && data.Count > 0) { if (!string.IsNullOrEmpty(keyValue)) { if (data.Find(x => x.DrawingFileID != keyValue) != null) { return Fail("同一目录下不允许有名称相同的图纸文件!"); } } else { return Fail("同一目录下不允许有名称相同的图纸文件!"); } } ec_drawing_fileEntity entityOld = new ec_drawing_fileEntity(); if (!string.IsNullOrEmpty(keyValue)) { entityOld = ec_drawing_fileIBLL.GetEntity(keyValue, ProjectId); //entity.IsPublish = entityOld.IsPublish; //entity.IsCheckOut = entityOld.IsCheckOut; //entity.CheckOutUserID = entityOld.CheckOutUserID; //entity.CheckOutTime = entityOld.CheckOutTime; //entity.CreateTime= entityOld.CreateTime; //entity.CreateUserID= entityOld.CreateUserID; //entity.DrawingFileID = entityOld.DrawingFileID; entityOld.DrawingFileName = entity.DrawingFileName; entityOld.DrawingType = entity.DrawingType; //entityOld.DrawingStage = entity.DrawingStage; 版次关系不能直接改 entityOld.DrawingSystem = entity.DrawingSystem; entityOld.MaterialCensus = entity.MaterialCensus; entityOld.MaterialRange = entity.MaterialRange; entityOld.FileVersion = entity.FileVersion; entityOld.OrderID = entity.OrderID; entityOld.IsEngineDWG = entity.IsEngineDWG; //entityOld.FileMD5 = entity.FileMD5; entityOld.Describe1 = entity.Describe1; entityOld.Describe2 = entity.Describe2; entityOld.Describe3 = entity.Describe3; } ec_drawing_fileIBLL.SaveEntity(keyValue, entityOld, ProjectId); return Success("保存成功!"); } /// /// 释放图纸文件 /// 主键 /// /// [HttpPost] [AjaxOnly] public ActionResult FreeDrawingFile(string keyValue, string ProjectId) { ec_drawing_fileIBLL.FreeDrawingFile(keyValue, ProjectId); return Success("释放成功!"); } /// /// 图纸导入 类似于复制的功能 /// 当前项目里的图纸目录ID,用于保存导入后的图纸 /// 包含DrawingFileID和ProjectId(source Project) /// /// [HttpPost] [AjaxOnly] public ActionResult ImportDrawing(string drawingCatalogueID, string ProjectId, string strEntity) { string msg = ec_drawing_fileIBLL.ImportDrawing(drawingCatalogueID, ProjectId, strEntity); if (string.IsNullOrEmpty(msg)) { return Success("导入成功!"); } else { return Fail(msg); } } #endregion } }