357 lines
14 KiB
C#
357 lines
14 KiB
C#
|
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
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 版 本 PIT-ADMS V7.0.3 敏捷开发框架
|
|||
|
/// Copyright (c) 2013-2018 Hexagon PPM
|
|||
|
/// 创 建:超级管理员
|
|||
|
/// 日 期:2020-12-04 15:20
|
|||
|
/// 描 述:项目管理
|
|||
|
/// </summary>
|
|||
|
public class ec_projectController : MvcControllerBase
|
|||
|
{
|
|||
|
private ec_projectIBLL ec_projectIBLL = new ec_projectBLL();
|
|||
|
|
|||
|
#region 视图功能
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 主页面
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
public ActionResult Index()
|
|||
|
{
|
|||
|
return View();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 项目切换页面
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
public ActionResult ProjectListIndex()
|
|||
|
{
|
|||
|
return View();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 表单页
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
public ActionResult Form()
|
|||
|
{
|
|||
|
return View();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 项目选择界面
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public ActionResult SelectProjectForm()
|
|||
|
{
|
|||
|
return View();
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 获取数据
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 显示项目列表数据(网页端)
|
|||
|
/// <summary>
|
|||
|
/// <param name="queryJson">查询参数</param>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult GetPageList(string pagination, string queryJson)
|
|||
|
{
|
|||
|
Pagination paginationobj = pagination.ToObject<Pagination>();
|
|||
|
var data = ec_projectIBLL.GetList(queryJson, paginationobj);
|
|||
|
var jsonData = new
|
|||
|
{
|
|||
|
rows = data,
|
|||
|
total = paginationobj.total,
|
|||
|
page = paginationobj.page,
|
|||
|
records = paginationobj.records
|
|||
|
};
|
|||
|
return Success(jsonData);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取项目选择页面显示列表数据
|
|||
|
/// <summary>
|
|||
|
/// <param name="queryJson">查询参数</param>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult GetProjectSelectPageList(string pagination, string queryJson)
|
|||
|
{
|
|||
|
Pagination paginationobj = pagination.ToObject<Pagination>();
|
|||
|
var data = ec_projectIBLL.GetListUnderUser(paginationobj, queryJson);
|
|||
|
var jsonData = new
|
|||
|
{
|
|||
|
rows = data,
|
|||
|
total = paginationobj.total,
|
|||
|
page = paginationobj.page,
|
|||
|
records = paginationobj.records
|
|||
|
};
|
|||
|
return Success(jsonData);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取项目下拉框
|
|||
|
/// </summary>
|
|||
|
/// <param name="queryJson"></param>
|
|||
|
/// <returns></returns>
|
|||
|
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);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 根据id获取项目数据
|
|||
|
/// <summary>
|
|||
|
/// <param name="queryJson">查询参数</param>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpGet]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult GetProjectById(string ProjectId)
|
|||
|
{
|
|||
|
var ec_projectData = ec_projectIBLL.GetEntity(ProjectId);
|
|||
|
var jsonData = new
|
|||
|
{
|
|||
|
ec_project = ec_projectData,
|
|||
|
};
|
|||
|
return Success(jsonData);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取表单数据。(网页端编辑项目)
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[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 提交数据
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 删除实体数据
|
|||
|
/// <param name="keyValue">主键</param>
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpPost]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult DeleteForm(string keyValue, string projectIndex)
|
|||
|
{
|
|||
|
ec_projectIBLL.DeleteEntity(keyValue, Convert.ToInt32(projectIndex));
|
|||
|
return Success("删除成功!", "项目列表", OperationType.Delete, null, null);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 保存实体数据(新增、修改)
|
|||
|
/// <param name="keyValue">主键</param>
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpPost]
|
|||
|
[ValidateAntiForgeryToken]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult SaveForm(string keyValue, string sourceProjId, string strEntity)
|
|||
|
{
|
|||
|
ec_projectEntity entity = strEntity.ToObject<ec_projectEntity>();
|
|||
|
//新建、编辑项目时,项目名称、项目编号不允许重复。
|
|||
|
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<string> TableCodes = listBusinessTable.Select(x => x.BusinessTableCode).Distinct().ToList();
|
|||
|
|
|||
|
if (sourceProj == null)
|
|||
|
{
|
|||
|
|
|||
|
if (listBusinessTable != null && listBusinessTable.Count > 0)
|
|||
|
{
|
|||
|
//新建项目时需要复制“是否复制数据”为1的表数据(指的是从公司级 -> 项目级)
|
|||
|
List<string> 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<ec_drawing_fileEntity>(entity.ProjectId);
|
|||
|
|
|||
|
var dataItemTb = ProjectSugar.TableName<ec_dataitemEntity>(entity.ProjectId);
|
|||
|
var dataItemDetailTb = ProjectSugar.TableName<ec_dataitemdetailEntity>(entity.ProjectId);
|
|||
|
var stage = SqlSugarHelper.Db.Queryable<ec_dataitemEntity>().AS(dataItemTb).First(x => x.DataItemCode == GlobalObject.enumlist_DrawingStage);
|
|||
|
if (stage != null)
|
|||
|
{
|
|||
|
var dwgStages = SqlSugarHelper.Db.Queryable<ec_dataitemdetailEntity>().AS(dataItemDetailTb).Where(x => x.DataItemID == stage.DataItemID).OrderBy(X => X.OrderID).ToList();
|
|||
|
var res2 = SqlSugarHelper.Db.Updateable<ec_drawing_fileEntity>().AS(dwgTbName).SetColumns(X => X.DrawingStage == dwgStages.FirstOrDefault().DataItemDetailID).Where(x=>x.IsEngineDWG ==1 ).
|
|||
|
ExecuteCommand();
|
|||
|
}
|
|||
|
|
|||
|
var res = SqlSugarHelper.Db.Updateable<ec_drawing_fileEntity>().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);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 同步数据,从单位平台同步对数据到项目表中。仅限选中的表
|
|||
|
/// <param name="projectCode">项目编号</param>
|
|||
|
/// <summary>
|
|||
|
/// <returns></returns>
|
|||
|
[HttpPost]
|
|||
|
[AjaxOnly]
|
|||
|
public ActionResult SynData(string ProjectIndex, string strData, string ProjectId)
|
|||
|
{
|
|||
|
//判断是否有工程数据
|
|||
|
var TB = ProjectSugar.TableName<ec_enginedataEntity>(ProjectIndex);
|
|||
|
int countenginedata = SqlSugarHelper.Db.Queryable<ec_enginedataEntity>().AS(TB).Count();
|
|||
|
if (countenginedata > 0)
|
|||
|
{
|
|||
|
return Fail("该项目已经存在设计工程数据和位号,不允许同步数据!");
|
|||
|
}
|
|||
|
//页面上勾选的需要同步的表编号
|
|||
|
List<string> listTableCode = strData.ToList<string>();
|
|||
|
//同步关联表数据
|
|||
|
var synrelTable = new ec_synrel_tableBLL().GetList("{}").ToList();
|
|||
|
//需要同步表编号
|
|||
|
List<string> synTableCodes = new List<string>();
|
|||
|
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
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 复制角色
|
|||
|
/// </summary>
|
|||
|
/// <param name="ProjectId">项目ID</param>
|
|||
|
private void CopyRole(string ProjectId)
|
|||
|
{
|
|||
|
RoleBLL roleBLL = new RoleBLL();
|
|||
|
UserRelationIBLL userRelationIBLL = new UserRelationBLL();
|
|||
|
|
|||
|
List<RoleEntity> projRoleList = roleBLL.GetList(ProjectId);
|
|||
|
if (projRoleList == null || projRoleList.Count == 0)
|
|||
|
{
|
|||
|
UserInfo userInfo = LoginUserInfo.Get();
|
|||
|
List<RoleEntity> commonRoleList = roleBLL.GetList("00000000-0000-0000-0000-000000000001");//单位通用的项目角色
|
|||
|
foreach (RoleEntity roleEntity in commonRoleList)
|
|||
|
{
|
|||
|
IEnumerable<UserRelationEntity> commonUserRelationEntity = userRelationIBLL.GetUserIdList(roleEntity.F_RoleId, "00000000-0000-0000-0000-000000000001");
|
|||
|
//拷贝授权
|
|||
|
var auths = SqlSugarHelper.Db.Queryable<AuthorizeEntity>().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();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|