using DocumentFormat.OpenXml.Drawing.Spreadsheet;
using Learun.Application.Base.SystemModule;
using Learun.Application.TwoDevelopment.ZZDT_EC;
using Learun.Util;
using Learun.Util.SqlSugar;
using log4net.Config;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Description;
using System.Web.UI.WebControls;
namespace Learun.Application.Web.AppApi
{
///
/// 图纸文件接口
///
[RoutePrefix("api/DrawingFileApi")]
[HandlerApiLogin(FilterMode.Enforce)]
[TokenAuthorize]
public class DrawingFileApiController : WebApiControllerBase
{
private ec_drawing_catalogueBLL ec_drawing_catalogueIBLL = new ec_drawing_catalogueBLL();
private ec_drawing_fileBLL ec_drawing_fileIBLL = new ec_drawing_fileBLL();
private ec_drawing_synIBLL ec_drawing_synIBLL = new ec_drawing_synBLL();
private ec_drawing_publishIBLL ec_drawing_publishIBLL = new ec_drawing_publishBLL();
private ec_operate_logIBLL ec_operate_logIBLL = new ec_operate_logBLL();
private AnnexesFileIBLL annexesFileIBLL = new AnnexesFileBLL();
private ec_dataitemIBLL dataItemIBLL = new ec_dataitemBLL();
private ec_enginedataIBLL ec_enginedataIBLL = new ec_enginedataBLL();
private ec_enginedata_pixelIBLL pixelBll = new ec_enginedata_pixelBLL();
///
/// 获取图纸目录
///
/// 项目ID
/// 是否只查询文件夹。1代表只查询文件夹
///
[HttpGet]
[ResponseType(typeof(List))]
public IHttpActionResult GetDrawingCatalogue(string projectId, string onlyFolderFlag)
{
try
{
var res = ec_drawing_catalogueIBLL.GetDrawingCategory(projectId, onlyFolderFlag);
return Success(res);
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 获取图纸类型目录
///
/// 项目ID
///
[HttpGet]
[ResponseType(typeof(List))]
public IHttpActionResult GetDrawingCatalogueByType(string projectId)
{
try
{
var treeList = ec_drawing_catalogueIBLL.GetDrawingCategoryByType(projectId);
return Success(treeList);
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 获取图纸所属系统目录
///
/// 项目ID
///
[HttpGet]
[ResponseType(typeof(List))]
public IHttpActionResult GetDrawingCatalogueBySystem(string projectId)
{
try
{
var treeList = ec_drawing_catalogueIBLL.GetDrawingCatalogueBySystem(projectId);
return Success(treeList);
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 获取图纸文件信息
///
/// 项目ID
/// 图纸文件ID
///
[HttpGet]
[ResponseType(typeof(ec_drawing_fileEntity))]
public IHttpActionResult GetEntity(string projectId, string drawingFileID)
{
try
{
var entity = ec_drawing_fileIBLL.GetEntity(drawingFileID, projectId);
var fileList = annexesFileIBLL.GetList(entity.FolderId).ToList();
if (fileList != null && fileList.Count > 0)
{
entity.FileId = fileList[0].F_Id;
}
return Success(entity);
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 所有发布过的图纸记录。
///
///
///
[HttpGet]
public IHttpActionResult GetPublishedDwg(string projectId)
{
try
{
var tbName = ProjectSugar.TableName(projectId);
var pubObjs = SqlSugarHelper.Db.Queryable().AS(tbName).
InnerJoin((a, b) => a.FolderId == b.F_FolderId).
Where((a, b) => !string.IsNullOrEmpty(a.FileRevision)).
ToList();
var dwgTbName = ProjectSugar.TableName(projectId);
var dwgs = SqlSugarHelper.Db.Queryable().AS(dwgTbName).
ToList();
var folderTbName = ProjectSugar.TableName(projectId);
var folders = SqlSugarHelper.Db.Queryable().AS(folderTbName).
ToList();
var RES = new List();
var enumTbName = ProjectSugar.TableName(projectId);
var enumList = SqlSugarHelper.Db.Queryable().AS(enumTbName).
First(x => x.DataItemCode == GlobalObject.enumlist_DrawingStage);
if (enumList == null)
{
pubObjs = pubObjs.Where(y => dwgs.Select(x => x.DrawingFileID).Contains(y.DrawingFileID)).ToList();
}
else
{
var detailTbName = ProjectSugar.TableName(projectId);
var detailList = SqlSugarHelper.Db.Queryable().AS(detailTbName).
Where(x => x.DataItemID == enumList.DataItemID).OrderBy(X => X.OrderID).ToList();
detailList.RemoveAt(0);
foreach (var DETAIL in detailList)
{
RES.AddRange(
pubObjs.Where(y => y.FileRevision == DETAIL.DataItemName
&&
dwgs.Select(x => x.DrawingFileID).Contains(y.DrawingFileID)).OrderBy(X => X.DrawingFileID).OrderBy(X => X.CreateTime));
}
}
//过滤无效的
//比如“即使更新版”,再比如排序
//加工下
foreach (var folder in folders)
{
var pathNew = new List();
foreach (var item in folder.FullPath.Split(','))
{
pathNew.Add(folders.FirstOrDefault(x => x.DrawingCatalogueID == item)?.DrawingCatalogueName);
}
folder.FullPath = string.Join(",", pathNew);
}
foreach (var pub in RES)
{
var folderId = dwgs.FirstOrDefault(x => x.DrawingFileID == pub.DrawingFileID)?.DrawingCatalogueID;
pub.PubDrawingName = dwgs.FirstOrDefault(x => x.DrawingFileID == pub.DrawingFileID)?.DrawingFileName;
pub.PubDrawingName = pub.PubDrawingName.Replace(".dwg", "") + " - " + pub.FileVersion + ".dwg";
pub.FullPath = folders.FirstOrDefault(x => x.DrawingCatalogueID == folderId)?.FullPath;
}
return Success(pubObjs);
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 新增图纸文件
///
/// 项目ID
///
[HttpPost]
public IHttpActionResult AddDrawingFile(string projectId)
{
try
{
var httpContent = Request.Content;
var asyncContent = httpContent.ReadAsStringAsync().Result;
ec_drawing_fileEntity entity = asyncContent.ToObject();
//同一目录下不允许有名称相同的图纸文件
var data = ec_drawing_fileIBLL.GetList("{DrawingCatalogueID:\"" + entity.DrawingCatalogueID + "\",\"ProjectId\":\"" + projectId + "\",DrawingFileNameFull:\"" + entity.DrawingFileName + "\"}").ToList();
if (data != null && data.Count > 0)
{
return Fail("同一目录下不允许有名称相同的图纸文件!");
}
entity.Create();
//默认参数
entity.IsCheckOut = 1;
entity.CheckOutUserID = entity.CreateUserID;
entity.CheckOutTime = entity.CreateTime;
ec_drawing_fileIBLL.InertEntity(entity, projectId);
return Success(entity);
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 编辑图纸文件
///
/// 项目ID
///
[HttpPost]
public IHttpActionResult EditDrawingFile(string projectId)
{
try
{
var httpContent = Request.Content;
var asyncContent = httpContent.ReadAsStringAsync().Result;
ec_drawing_fileEntity entity = asyncContent.ToObject();
//同一目录下不允许有名称相同的图纸文件
var data = ec_drawing_fileIBLL.GetList("{DrawingCatalogueID:\"" + entity.DrawingCatalogueID + "\",\"ProjectId\":\"" + projectId + "\",DrawingFileNameFull:\"" + entity.DrawingFileName + "\",DrawingFileIDUnequal:\"" + entity.DrawingFileID + "\"}").ToList();
if (data != null && data.Count > 0)
{
return Fail("同一目录下不允许有名称相同的图纸文件!");
}
ec_drawing_fileEntity entityOld = ec_drawing_fileIBLL.GetEntity(entity.DrawingFileID, projectId);
#region 把不能变的属性固定一下
entity.IsCheckOut = entityOld.IsCheckOut;
entity.CheckOutUserID = entityOld.CheckOutUserID;
entity.CheckOutTime = entityOld.CheckOutTime;
entity.DrawingFileID = entityOld.DrawingFileID;
entity.FolderId = entityOld.FolderId;
entity.FileMD5 = entityOld.FileMD5;
entity.IsDelete = entityOld.IsDelete;
entity.IsEngineDWG = entityOld.IsEngineDWG;
#endregion
ec_drawing_fileIBLL.EditEntity(entity, projectId);
return Success("编辑成功");
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 删除图纸文件。逻辑删除,会去回收站
///
/// 项目ID
/// 图纸文件ID
///
[HttpPost]
public IHttpActionResult DeleteDrawingFile(string projectId, string drawingFileID)
{
try
{
var entity = ec_drawing_fileIBLL.GetEntity(drawingFileID, projectId);
if (entity?.IsEngineDWG == 1)
{
ec_drawing_fileIBLL.LogicDelete(drawingFileID, projectId);
}
else
{
//非工程图纸文件,直接删除
ec_drawing_fileIBLL.DeleteEntity(drawingFileID, projectId);
}
return Success("删除成功!");
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 检出图纸文件
///
/// 项目ID
/// 图纸文件ID
///
[HttpPost]
public IHttpActionResult CheckOutDrawingFile(string projectId, string drawingFileID, string PCInfo)
{
try
{
ec_drawing_fileIBLL.CheckOutDrawingFile(drawingFileID, projectId, PCInfo);
return Success("检出成功!");
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 预检入,生成一些自动生成的增删改内容(By YuXH)。配合,放在其前面
///
///
///
///
[HttpPost]
public IHttpActionResult PreCheckInDrawingFile(string projectId, string drawingFileID)
{
try
{
var httpContent = Request.Content;
var asyncContent = httpContent.ReadAsStringAsync().Result;
List entityList = asyncContent.ToList();
var pixelBLL = new ec_enginedata_pixelBLL();
var res = pixelBLL.IfLayoutPixelValid(entityList, drawingFileID, projectId, out string errText);
//pixelBLL.Clear(drawingFileID, projectId);
//string res = new ec_notificationBLL().GenerateCompareRes(entityList, projectId, drawingFileID); 暂时取消,内容不太合适。
if (res)
{
return Success("");
}
else
{
return Fail(errText);
}
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 检入图纸文件(句柄信息)
///
/// 项目ID
/// 图纸文件ID
/// 文件夹ID
/// 文件MD5
///
[HttpPost]
public IHttpActionResult CheckInDrawingFileNew(string projectId, string drawingFileID, string folderId, string fileMD5)
{
//如何避免数据丢失
try
{
var httpContent = Request.Content;
var asyncContent = httpContent.ReadAsStringAsync().Result;
List entityList = asyncContent.ToList();
if (entityList == null || entityList.Count == 0)
{
//避免前端因频繁切换图纸造成检入时,一个都没有,而把数据库里的都清空了
XmlConfigurator.Configure();
var log = log4net.LogManager.GetLogger("INFO"); //参数就是config里logger节点的名字
log.Error($"★★★{DateTime.Now.ToString()}★★★Drawing Check In Only 0 Pixel【DrawingId:{drawingFileID}】★★★");
//return Success("检入成功!");
//entityList = new List();
}
else if (string.IsNullOrEmpty(folderId))
{
log4net.LogManager.GetLogger("ERROR").Error("检入图纸 - " + "无效的空白FolderId");
throw new Exception("检入图纸 - " + "无效的空白FolderId");
}
else
{
var pixelBLL = new ec_enginedata_pixelBLL();
var res = pixelBLL.CheckPropWhenCheckIn(entityList, drawingFileID, projectId, out string errText);
if (res)
{
pixelBll.SavePixels(entityList, projectId, drawingFileID);
}
else
{
return Fail(errText);
}
}
return Success("检入成功!");
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
/// 检入图纸文件(修改消息)
///
/// 项目ID
/// 图纸文件ID
/// 文件夹ID
/// 文件MD5
/// 待通知的用户,逗号分隔
///
[HttpPost]
public IHttpActionResult CheckInDrawingMsg(string projectId, string drawingFileID, string folderId, string fileMD5, string UsersNotified)
{
//如何避免数据丢失
try
{
var httpContent = Request.Content;
var asyncContent = httpContent.ReadAsStringAsync().Result;
var x = asyncContent.ToJObject();
ec_drawing_synEntity Msg = null;
try
{
x.TryGetValue("data", out JToken value);
Msg = value.ToString().ToObject();
}
catch (Exception)
{
Msg = null;
}
if (Msg == null)
{
Msg = x.ToObject();//第二种格式
}
if (Msg != null)
{
Msg.DrawingFileID = drawingFileID;
Msg.FolderId = folderId;
#region 2025 05 26
var drawingPublishTableName = ProjectSugar.TableName(projectId);
//TASK 7848 只要图纸发布过O版,检入时必定要通知生产设计
var pubObjs = SqlSugarHelper.Db.Queryable().AS(drawingPublishTableName).Where(X => X.DrawingFileID == drawingFileID).ToList();
if (pubObjs != null && pubObjs.Count > 0)
{
if (pubObjs.Any(x2 => x2.FileRevision == "清洁版" || x2.FileRevision.Contains("清洁")))
{
if (string.IsNullOrEmpty(UsersNotified))
{
return Fail("由于图纸已经发布过清洁版,因此后续检入需要通知生产设计的相关人员。请勾选人员。");
}
}
}
#endregion
ec_drawing_fileIBLL.CheckInDrawingFileNew(Msg, fileMD5, projectId, UsersNotified);
}
return Success("保存成功!");
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 释放图纸文件
///
/// 项目ID
/// 图纸文件ID
///
[HttpPost]
public IHttpActionResult FreeDrawingFile(string projectId, string drawingFileID)
{
try
{
ec_drawing_fileIBLL.FreeDrawingFile(drawingFileID, projectId);
return Success("释放成功!");
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 发布图纸文件。
/// 只有检入时才可以。
///
/// 项目ID
/// 图纸文件ID
/// 即图纸阶段,类似于spf的大版本
/// 即版本,类似于spf的小版本
/// 备注
///
[HttpPost]
public IHttpActionResult PublishDrawingFile(string projectId, string drawingFileID, string revision, string version, string remark)
{
try
{
var pixelBLL = new ec_enginedata_pixelBLL();
var res = pixelBLL.IsNotEmptyOfProInPublish(drawingFileID, projectId, revision, out string errText);
if (res)
{
ec_drawing_fileIBLL.PublishDrawingFile(drawingFileID, revision, version, remark, projectId);
}
else
{
return Fail(errText);
}
return Success("发布成功!");
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 修订图纸文件。否则发布后的图纸没法继续编辑的。
///
/// 项目ID
/// 图纸文件ID
/// 版本
///
[HttpPost]
public IHttpActionResult ModifyDrawingFile(string projectId, string drawingFileID, string fileVersion)
{
try
{
ec_drawing_fileIBLL.ModifyDrawingFile(drawingFileID, fileVersion, projectId);
return Success("修订成功!");
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 获取单个图纸的检入记录
///
/// 项目ID
/// 图纸文件ID
///
[HttpGet]
public IHttpActionResult GetCheckInLog(string projectId, string drawingFileID)
{
try
{
var listDrawingSyn = ec_drawing_synIBLL.GetList(projectId, drawingFileID, null);
return Success(listDrawingSyn);
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 获取发布记录
///
/// 项目ID
/// 图纸文件ID
///
[HttpPost]
public IHttpActionResult GetPublishLog(string projectId, string drawingFileID)
{
try
{
var listDrawingPublish = ec_drawing_publishIBLL.GetList(projectId, drawingFileID);
return Success(listDrawingPublish);
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
///
/// 获取操作记录
///
/// 项目ID
/// 图纸文件ID
///
[HttpPost]
public IHttpActionResult GetOperateLog(string projectId, string drawingFileID)
{
try
{
var listlog = ec_operate_logIBLL.GetList(projectId,drawingFileID);
return Success(listlog);
}
catch (Exception ex)
{
return Fail(ex.Message);
}
}
}
}