using Learun.Application.Base.AuthorizeModule; using Learun.Application.Organization; using Learun.Application.TwoDevelopment.ZZDT_EC; using Learun.Util; using Learun.Util.Operat; using Learun.Util.SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Remoting.Metadata.W3cXsd2001; using System.Web.Http.Results; using System.Web.Mvc; using ec_projectEntity = Learun.Application.TwoDevelopment.ZZDT_EC.ec_projectEntity; namespace Learun.Application.Web.Areas.ZZDT_EC.Controllers { /// /// 版 本 PIT-ADMS V7.0.3 敏捷开发框架 /// Copyright (c) 2013-2018 Hexagon PPM /// 创 建:超级管理员 /// 日 期:2020-12-04 15:20 /// 描 述:项目管理 /// public class ec_projectController : MvcControllerBase { private ec_projectIBLL ec_projectIBLL = new ec_projectBLL(); #region 视图功能 /// /// 主页面 /// /// [HttpGet] public ActionResult Index() { return View(); } /// /// 项目切换页面 /// /// [HttpGet] public ActionResult ProjectListIndex() { return View(); } /// /// 表单页 /// /// [HttpGet] public ActionResult Form() { return View(); } /// /// 项目选择界面 /// /// public ActionResult SelectProjectForm() { return View(); } #endregion #region 获取数据 /// /// 显示项目列表数据(网页端) /// /// 查询参数 /// [HttpGet] [AjaxOnly] public ActionResult GetPageList(string pagination, string queryJson) { Pagination paginationobj = pagination.ToObject(); var data = ec_projectIBLL.GetList(queryJson, paginationobj); var jsonData = new { rows = data, total = paginationobj.total, page = paginationobj.page, records = paginationobj.records }; return Success(jsonData); } /// /// 获取项目选择页面显示列表数据 /// /// 查询参数 /// [HttpGet] [AjaxOnly] public ActionResult GetProjectSelectPageList(string pagination, string queryJson) { Pagination paginationobj = pagination.ToObject(); var data = ec_projectIBLL.GetListUnderUser(paginationobj, queryJson); var jsonData = new { rows = data, total = paginationobj.total, page = paginationobj.page, records = paginationobj.records }; return Success(jsonData); } /// /// 获取项目下拉框 /// /// /// public ActionResult GetProjectSelectList(string queryJson) { Pagination paginationobj = new Pagination(); paginationobj.page = 1; paginationobj.rows = 10000; paginationobj.sidx = "CreateTime"; paginationobj.sord = "DESC"; var data = ec_projectIBLL.GetList("{}", null); return Success(data); } /// /// 根据id获取项目数据 /// /// 查询参数 /// [HttpGet] [AjaxOnly] public ActionResult GetProjectById(string ProjectId) { var ec_projectData = ec_projectIBLL.GetEntity(ProjectId); var jsonData = new { ec_project = ec_projectData, }; return Success(jsonData); } /// /// 获取表单数据。(网页端编辑项目) /// /// [HttpGet] [AjaxOnly] public ActionResult GetFormData(string keyValue) { var ec_projectData = ec_projectIBLL.GetEntity(keyValue); var jsonData = new { ec_project = ec_projectData, }; return Success(jsonData); } #endregion #region 提交数据 /// /// 删除实体数据 /// 主键 /// /// [HttpPost] [AjaxOnly] public ActionResult DeleteForm(string keyValue, string projectIndex) { ec_projectIBLL.DeleteEntity(keyValue, Convert.ToInt32(projectIndex)); return Success("删除成功!", "项目列表", OperationType.Delete, null, null); } /// /// 保存实体数据(新增、修改) /// 主键 /// /// [HttpPost] [ValidateAntiForgeryToken] [AjaxOnly] public ActionResult SaveForm(string keyValue, string sourceProjId, string strEntity) { ec_projectEntity entity = strEntity.ToObject(); //新建、编辑项目时,项目名称、项目编号不允许重复。 var data = ec_projectIBLL.GetList("{}").ToList(); data = data.FindAll(x => x.ProjectName == entity.ProjectName || x.ProjectCode == entity.ProjectCode); if (data != null && data.Count > 0) { if (!string.IsNullOrEmpty(keyValue)) { data = data.FindAll(x => x.ProjectId != keyValue); if (data != null && data.Count > 0) { return Fail("项目名称或项目编号重复!"); } } else { return Fail("项目名称或项目编号重复!"); } } ec_projectIBLL.SaveEntity(keyValue, entity); if (string.IsNullOrEmpty(keyValue)) { entity = ec_projectIBLL.GetEntity(entity.ProjectId); //复制角色 CopyRole(entity.ProjectId); var sourceProj = ec_projectIBLL.GetEntity(sourceProjId); //从业务表中获取数据,复制表结构 var listBusinessTable = new ec_business_tableBLL().GetList("{}").ToList(); List TableCodes = listBusinessTable.Select(x => x.BusinessTableCode).Distinct().ToList(); if (sourceProj == null) { if (listBusinessTable != null && listBusinessTable.Count > 0) { //新建项目时需要复制“是否复制数据”为1的表数据(指的是从公司级 -> 项目级) List CopyTableData = listBusinessTable.FindAll(x => x.IsCopyData == 1).Select(x => x.BusinessTableCode).Distinct().ToList(); ec_projectIBLL.SynDataToProject(TableCodes, Convert.ToInt16(entity.ProjectIndex), CopyTableData); #region 牵涉到文件的,要把annexe也复制一份,同时folderID也要换 ec_projectIBLL.SaveDataAndAnnexes(entity.ProjectId);//创建项目 #endregion } } else { //基于一个现有项目 if (listBusinessTable != null && listBusinessTable.Count > 0) { ec_projectIBLL.SynDataSynDataToProjectToProject(TableCodes, sourceProj.ProjectIndex, entity.ProjectIndex); } #region 牵涉到文件的,要把annexe也复制一份,同时folderID也要换 ec_projectIBLL.SaveDataAndAnnexes(entity.ProjectId);//创建项目,从某个现有项目 #endregion #region 再处理一些状态相关的 //比如图纸都重置为第一个阶段,检入的状态 var dwgTbName = ProjectSugar.TableName(entity.ProjectId); var dataItemTb = ProjectSugar.TableName(entity.ProjectId); var dataItemDetailTb = ProjectSugar.TableName(entity.ProjectId); var stage = SqlSugarHelper.Db.Queryable().AS(dataItemTb).First(x => x.DataItemCode == GlobalObject.enumlist_DrawingStage); if (stage != null) { var dwgStages = SqlSugarHelper.Db.Queryable().AS(dataItemDetailTb).Where(x => x.DataItemID == stage.DataItemID).OrderBy(X => X.OrderID).ToList(); var res2 = SqlSugarHelper.Db.Updateable().AS(dwgTbName).SetColumns(X => X.DrawingStage == dwgStages.FirstOrDefault().DataItemDetailID).Where(x=>x.IsEngineDWG ==1 ). ExecuteCommand(); } var res = SqlSugarHelper.Db.Updateable().AS(dwgTbName).SetColumns(X => X.IsCheckOut == 0). Where(X => X.IsCheckOut != 0).ExecuteCommand(); //比如信号状态都设置为“新建” #endregion } } return Success("保存成功!", "项目列表", string.IsNullOrEmpty(keyValue) ? OperationType.Create : OperationType.Update, null, null); } /// /// 同步数据,从单位平台同步对数据到项目表中。仅限选中的表 /// 项目编号 /// /// [HttpPost] [AjaxOnly] public ActionResult SynData(string ProjectIndex, string strData, string ProjectId) { //判断是否有工程数据 var TB = ProjectSugar.TableName(ProjectIndex); int countenginedata = SqlSugarHelper.Db.Queryable().AS(TB).Count(); if (countenginedata > 0) { return Fail("该项目已经存在设计工程数据和位号,不允许同步数据!"); } //页面上勾选的需要同步的表编号 List listTableCode = strData.ToList(); //同步关联表数据 var synrelTable = new ec_synrel_tableBLL().GetList("{}").ToList(); //需要同步表编号 List synTableCodes = new List(); foreach (var item in listTableCode) { var allDataByCode = synrelTable.FindAll(x => x.MainBusinessTableCode == item).Select(x => x.RelBusinessTableCode); synTableCodes.AddRange(allDataByCode);//关联表 } //最后需要同步数据的表编号集合 var copyTables = listTableCode.Union(synTableCodes).Distinct().ToList(); //2个集合 取 并集 ec_projectIBLL.SynDataToProject(copyTables, Convert.ToInt32(ProjectIndex), copyTables); ec_projectIBLL.SaveDataAndAnnexes(ProjectId);//手动同步数据 return Success("同步成功!"); } #endregion /// /// 复制角色 /// /// 项目ID private void CopyRole(string ProjectId) { RoleBLL roleBLL = new RoleBLL(); UserRelationIBLL userRelationIBLL = new UserRelationBLL(); List projRoleList = roleBLL.GetList(ProjectId); if (projRoleList == null || projRoleList.Count == 0) { UserInfo userInfo = LoginUserInfo.Get(); List commonRoleList = roleBLL.GetList("00000000-0000-0000-0000-000000000001");//单位通用的项目角色 foreach (RoleEntity roleEntity in commonRoleList) { IEnumerable commonUserRelationEntity = userRelationIBLL.GetUserIdList(roleEntity.F_RoleId, "00000000-0000-0000-0000-000000000001"); //拷贝授权 var auths = SqlSugarHelper.Db.Queryable().Where(x => x.F_ObjectId == roleEntity.F_RoleId).ToList(); RoleEntity newRoleEntity = roleEntity; newRoleEntity.ProjectId = ProjectId; roleBLL.SaveEntity("", ref newRoleEntity); foreach (UserRelationEntity userRelationEntity in commonUserRelationEntity) { UserRelationEntity newUserRelationEntity = userRelationEntity; newUserRelationEntity.F_ObjectId = newRoleEntity.F_RoleId; newUserRelationEntity.ProjectId = ProjectId; userRelationIBLL.SaveEntity("", newUserRelationEntity); } auths.ForEach(x => { x.Create(); x.F_ObjectId = newRoleEntity.F_RoleId; }); SqlSugarHelper.Db.Insertable(auths).ExecuteCommand(); } } } } }