using BLL; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace FineUIPro.Web.TestRun.TestRunManage { public partial class SubWorkInspect : PageBase { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.InitTreeMenu();//加载树 } } #region 树绑定 /// /// 加载树 /// private void InitTreeMenu() { this.tvControlItem.Nodes.Clear(); TreeNode rootNode = new TreeNode(); rootNode.Text = "检查表"; rootNode.NodeID = "0"; rootNode.Expanded = true; rootNode.ToolTip = ""; rootNode.EnableClickEvent = true; this.tvControlItem.Nodes.Add(rootNode); var userTermItems = from a in Funs.DB.TestRun_TermItemInspectedUser join b in Funs.DB.TestRun_SubInspectTermItem on a.TermItemId equals b.TermItemId where a.InspectedUser == this.CurrUser.UserId && a.ProjectId == this.CurrUser.LoginProjectId select new { a, b }; if (userTermItems.Count() == 0) return; var systemIds = userTermItems.Select(x => x.b.SystemId); var workPackIds = userTermItems.Select(x => x.b.WorkPackId); var list = from a in Funs.DB.PreRun_SysDevice join b in Funs.DB.TestRun_SubSysWorkPackage on a.PreRunId equals b.SystemId join c in Funs.DB.TestRun_WorkPackage on b.WorkPackId equals c.WorkPackId where a.ProjectId == this.CurrUser.LoginProjectId && systemIds.Contains(a.PreRunId) && workPackIds.Contains(c.WorkPackId) select new { a.PreRunId, a.ProcessesId, a.SystemId, a.PreRunCode, a.PreRunName, a.ProjectId, c.WorkPackId, c.WorkPackName, b.WorkPackCode }; if (list.Count() > 0) { var ids = list.Select(x => x.ProcessesId).ToList(); ids.AddRange(list.Select(x => x.PreRunId).ToList()); ids = ids.Distinct().ToList(); var syslist = Funs.DB.PreRun_SysDevice.Where(x => ids.Contains(x.PreRunId)).ToList(); if (syslist.Count > 0) { var oneIds = syslist.ConvertAll(x => x.ProcessesId).Distinct().ToList(); foreach (var itemOne in oneIds) { var itemOneModel = syslist.FirstOrDefault(x => x.PreRunId == itemOne); TreeNode rootOneNode = new TreeNode(); rootOneNode.NodeID = itemOneModel.PreRunId; rootOneNode.Text = itemOneModel.PreRunName; rootOneNode.ToolTip = itemOneModel.PreRunName; rootOneNode.CommandName = ""; rootOneNode.EnableClickEvent = false; rootOneNode.EnableExpandEvent = false; rootNode.Nodes.Add(rootOneNode); rootOneNode.Expanded = true; var subTwoList = syslist.Where(g => g.ParentId == itemOneModel.PreRunId).GroupBy(x => new { x.PreRunId, x.ProcessesId, x.PreRunCode, x.PreRunName }); foreach (var itemTwo in subTwoList) { TreeNode rootTwoNode = new TreeNode(); rootTwoNode.NodeID = itemTwo.Key.PreRunId; rootTwoNode.Text = itemTwo.Key.PreRunName; rootTwoNode.ToolTip = itemTwo.Key.PreRunName; rootTwoNode.CommandName = ""; rootTwoNode.EnableClickEvent = false; rootTwoNode.EnableExpandEvent = false; rootOneNode.Nodes.Add(rootTwoNode); rootTwoNode.Expanded = true; var worklist = list.Where(a => a.PreRunId == itemTwo.Key.PreRunId).GroupBy(x => new { x.WorkPackId, x.WorkPackName, x.WorkPackCode }).ToList(); if (worklist.Count > 0) { foreach (var itemWork in worklist.OrderBy(o => o.Key.WorkPackCode)) { TreeNode newNode = new TreeNode(); newNode.Text = itemWork.Key.WorkPackName; newNode.NodeID = itemWork.Key.WorkPackId + "|" + itemTwo.Key.PreRunId; newNode.ToolTip = itemWork.Key.WorkPackName; newNode.CommandName = ""; newNode.Expanded = true; newNode.EnableClickEvent = true; newNode.EnableExpandEvent = true; rootTwoNode.Nodes.Add(newNode); } } } } } } } /// /// 点击TreeView /// protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e) { this.BindGrid(); } #endregion #region 数据绑定 /// /// 绑定数据 /// public void BindGrid(bool istail = false) { var workPackId = this.tvControlItem.SelectedNodeID.Split('|').First(); var subSystemId = this.tvControlItem.SelectedNodeID.Split('|').Last(); var data = from termuser in Funs.DB.TestRun_TermItemInspectedUser join termitem in Funs.DB.TestRun_SubInspectTermItem on termuser.TermItemId equals termitem.TermItemId join b in Funs.DB.TestRun_InspectTailTerm.Where(x => x.InspectUser == this.CurrUser.UserId) on termitem.TermItemId equals b.TermItemId into t from tail in t.DefaultIfEmpty() where termitem.WorkPackId == workPackId && termitem.SystemId == subSystemId && termuser.InspectedUser == this.CurrUser.UserId group new { termitem.TermItemId, termitem.SubInspectId, termitem.WorkPackId, termitem.ProjectId, termitem.WorkInspectId, termitem.WorkInspectName, termitem.InstallationId, termitem.ProcessesId, termitem.SystemId, termitem.InspectedUser, termuser.InspectionResults, termuser.InspectionIllustrate, termitem.Subcontractor, termitem.Contractor, termitem.Supervision, termitem.Owner, termitem.SubcontractorIsPass, termitem.ContractorIsPass, termitem.SupervisionIsPass, termitem.OwnerIsPass, termitem.SubcontractorRemark, termitem.ContractorRemark, termitem.SupervisionRemark, termitem.OwnerRemark, termitem.Remark, termitem.AddUser, termitem.AddTime, termitem.Sort, IsTailTerm = tail.TailTermId == null ? 0 : 1 } by new { termitem.TermItemId, termitem.SubInspectId, termitem.WorkPackId, termitem.ProjectId, termitem.WorkInspectId, termitem.WorkInspectName, termitem.InstallationId, termitem.ProcessesId, termitem.SystemId, termitem.InspectedUser, termuser.InspectionResults, termuser.InspectionIllustrate, termitem.Subcontractor, termitem.Contractor, termitem.Supervision, termitem.Owner, termitem.SubcontractorIsPass, termitem.ContractorIsPass, termitem.SupervisionIsPass, termitem.OwnerIsPass, termitem.SubcontractorRemark, termitem.ContractorRemark, termitem.SupervisionRemark, termitem.OwnerRemark, termitem.Remark, termitem.AddUser, termitem.AddTime, termitem.Sort, IsTailTerm = tail.TailTermId == null ? 0 : 1 } into gt orderby gt.Key.Sort select new TermItemBridDto() { TermItemId = gt.Key.TermItemId, SubInspectId = gt.Key.SubInspectId, WorkPackId = gt.Key.WorkPackId, ProjectId = gt.Key.ProjectId, WorkInspectId = gt.Key.WorkInspectId, WorkInspectName = gt.Key.WorkInspectName, InstallationId = gt.Key.InstallationId, ProcessesId = gt.Key.ProcessesId, SystemId = gt.Key.SystemId, InspectedUser = gt.Key.InspectedUser, InspectionResults = gt.Key.InspectionResults, InspectionIllustrate = gt.Key.InspectionIllustrate, Subcontractor = gt.Key.Subcontractor, Contractor = gt.Key.Contractor, Supervision = gt.Key.Supervision, Owner = gt.Key.Owner, SubcontractorIsPass = gt.Key.SubcontractorIsPass, ContractorIsPass = gt.Key.ContractorIsPass, SupervisionIsPass = gt.Key.SupervisionIsPass, OwnerIsPass = gt.Key.OwnerIsPass, SubcontractorRemark = gt.Key.SubcontractorRemark, ContractorRemark = gt.Key.ContractorRemark, SupervisionRemark = gt.Key.SupervisionRemark, OwnerRemark = gt.Key.OwnerRemark, Remark = gt.Key.Remark, AddUser = gt.Key.AddUser, AddTime = gt.Key.AddTime, Sort = gt.Key.Sort, IsTailTerm = gt.Key.IsTailTerm }; var list = data.ToList(); if (istail) { JArray mergedData = Grid1.GetMergedData(); list.ForEach(a => { var itemRow = mergedData.FirstOrDefault(x => x.Value("id") == a.TermItemId); JObject values = itemRow.Value("values"); var inspectionResults = !string.IsNullOrWhiteSpace(values.Value("InspectionResults")) ? values.Value("InspectionResults") : string.Empty; if (!string.IsNullOrWhiteSpace(inspectionResults)) { a.InspectionResults = int.Parse(inspectionResults); } }); } Grid1.DataSource = list; Grid1.DataBind(); } /// /// 排序 /// protected void Grid1_Sort(object sender, GridSortEventArgs e) { Grid1.SortDirection = e.SortDirection; Grid1.SortField = e.SortField; BindGrid(); } #endregion #region 保存 /// /// 保存 /// protected void btnSave_Click(object sender, EventArgs e) { try { var subInspectId = this.Grid1.Rows[0].DataKeys[2].ToString(); if (Funs.DB.TestRun_SubInspectTermItem.Count(x => x.SubInspectId == subInspectId && (x.SubcontractorIsPass != null || x.ContractorIsPass != null || x.SupervisionIsPass != null || x.OwnerIsPass != null)) > 0) { ShowNotify("已进入检查表流转,无法修改检查结果!", MessageBoxIcon.Warning); return; } JArray mergedData = Grid1.GetMergedData(); foreach (JObject mergedRow in mergedData) { string status = mergedRow.Value("status"); JObject values = mergedRow.Value("values"); int i = mergedRow.Value("index"); var termItemId = this.Grid1.Rows[i].DataKeys[0].ToString(); if (values.Value("InspectionResults") == "0") { if (Funs.DB.TestRun_InspectTailTerm.Count(x => x.TermItemId == termItemId) == 0) { ShowNotify("未通过的检查项请填写尾项!", MessageBoxIcon.Warning); return; } } } foreach (JObject mergedRow in mergedData) { string status = mergedRow.Value("status"); JObject values = mergedRow.Value("values"); int i = mergedRow.Value("index"); var termItemId = this.Grid1.Rows[i].DataKeys[0].ToString(); //获取子系统信息 var model = Funs.DB.TestRun_TermItemInspectedUser.FirstOrDefault(x => x.TermItemId == termItemId && x.InspectedUser == this.CurrUser.UserId); if (model != null) { model.InspectionIllustrate = !string.IsNullOrWhiteSpace(values.Value("InspectionIllustrate")) ? values.Value("InspectionIllustrate") : string.Empty; if (!string.IsNullOrWhiteSpace(values.Value("InspectionResults"))) { model.InspectionResults = int.Parse(values.Value("InspectionResults")); } //检查项表 var subItemModel = Funs.DB.TestRun_SubInspectTermItem.FirstOrDefault(x => x.TermItemId == model.TermItemId); if (subItemModel != null) { if (Funs.DB.TestRun_TermItemInspectedUser.Count(x => x.InspectionResults.GetValueOrDefault() != 1 && x.TermItemId == model.TermItemId && x.InspectedUser != model.InspectedUser) == 0 && model.InspectionResults == 1) { subItemModel.AllUserInspectionPass = 1; } else { subItemModel.AllUserInspectionPass = 0; } } Funs.DB.SubmitChanges(); } } //检查表 var subModel = Funs.DB.TestRun_SubInspectTerm.FirstOrDefault(x => x.SubInspectId == subInspectId); if (subModel != null) { if (Funs.DB.TestRun_TermItemInspectedUser.Count(x => x.SubInspectId == subInspectId && x.InspectionResults.GetValueOrDefault() != 1) == 0) { subModel.InspectionIsAllPass = 1; } else { subModel.InspectionIsAllPass = 0; } } Funs.DB.SubmitChanges(); BindGrid(); ShowNotify("保存成功!"); } catch (Exception ex) { ShowNotify(ex.Message, MessageBoxIcon.Error); } } #endregion /// /// 尾项数据绑定实体 /// public class TermItemBridDto { /// /// 主键 /// public string TermItemId { get; set; } /// /// 检查项主键 /// public string SubItemId { get; set; } /// /// 检查表主键 /// public string SubInspectId { get; set; } /// /// 工作包主键 /// public string WorkPackId { get; set; } /// /// 项目主键 /// public string ProjectId { get; set; } /// /// 工作包模板项主键 /// public string WorkInspectId { get; set; } /// /// 检查事项名称 /// public string WorkInspectName { get; set; } /// /// 装置主键 /// public string InstallationId { get; set; } /// /// 工序主键 /// public string ProcessesId { get; set; } /// /// 系统主键 /// public string SystemId { get; set; } /// /// 检查人主键 /// public string InspectedUser { get; set; } /// /// 检查结果0:未通过 1:通过 /// public int? InspectionResults { get; set; } /// /// 检查说明 /// public string InspectionIllustrate { get; set; } /// /// 分包商 /// public string Subcontractor { get; set; } /// /// 承包商 /// public string Contractor { get; set; } /// /// 监理 /// public string Supervision { get; set; } /// /// 业主 /// public string Owner { get; set; } /// /// 分包商是否通过0/null:未通过 1:通过 /// public int? SubcontractorIsPass { get; set; } /// /// 承包商是否通过0/null:未通过 1:通过 /// public int? ContractorIsPass { get; set; } /// /// 监理是否通过0/null:未通过 1:通过 /// public int? SupervisionIsPass { get; set; } /// /// 业主是否通过0/null:未通过 1:通过 /// public int? OwnerIsPass { get; set; } /// /// 分包商备注 /// public string SubcontractorRemark { get; set; } /// /// 承包商备注 /// public string ContractorRemark { get; set; } /// /// 监理备注 /// public string SupervisionRemark { get; set; } /// /// 业主备注 /// public string OwnerRemark { get; set; } /// /// 备注 /// public string Remark { get; set; } /// /// 添加人 /// public string AddUser { get; set; } /// /// 添加日期 /// public DateTime? AddTime { get; set; } /// /// 排序 /// public int? Sort { get; set; } /// /// 是否存在尾项0:不存在1:存在 /// public int IsTailTerm { get; set; } } /// /// 行内按钮事件 /// protected void Grid1_RowCommand(object sender, GridCommandEventArgs e) { //尾项申请 if (e.CommandName == "TailTerm") { var termItemId = Grid1.DataKeys[e.RowIndex][0].ToString(); var inspectionResults = Grid1.DataKeys[e.RowIndex][1] != null ? int.Parse(Grid1.DataKeys[e.RowIndex][1].ToString()) : -1; if (inspectionResults == 0) { PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("InspectTailTermEdit.aspx?TailTermId={0}&TermItemId={1}", "", termItemId, "新增 - "))); } else { JArray mergedData = Grid1.GetMergedData(); var itemRow = mergedData[e.RowIndex].Value("values"); if (itemRow.Value("InspectionResults") == "0") { PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("InspectTailTermEdit.aspx?TailTermId={0}&TermItemId={1}", "", termItemId, "新增 - "))); } else { ShowNotify("仅未通过检查项才可填写!", MessageBoxIcon.Warning); } } } //尾项修改 if (e.CommandName == "TailTermUpdate") { var termItemId = Grid1.DataKeys[e.RowIndex][0].ToString(); var inspectionResults = Grid1.DataKeys[e.RowIndex][1] != null ? int.Parse(Grid1.DataKeys[e.RowIndex][1].ToString()) : -1; if (inspectionResults == 0) { var tails = Funs.DB.TestRun_InspectTailTerm.Where(x => x.TermItemId == termItemId && x.InspectUser == this.CurrUser.UserId).ToList(); if (tails.Count > 0) { if (tails.Count(x => x.ApproveState == 0) == 0) { ShowNotify("申请的尾项非“待提交处理”状态,无法修改!", MessageBoxIcon.Warning); return; } if (tails.Count(x => x.ApproveState == 0) > 1) { string window = $"SelectTailTermList.aspx?TermItemId={termItemId}"; PageContext.RegisterStartupScript(Window2.GetSaveStateReference(this.hidTailTermId.ClientID) + Window2.GetShowReference(window)); } else { var tailModel = tails.FirstOrDefault(); PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("InspectTailTermEdit.aspx?TailTermId={0}&TermItemId={1}", tailModel.TailTermId, tailModel.TermItemId, "编辑 - "))); } } else { ShowNotify("请填写尾项申请!", MessageBoxIcon.Warning); } } else { ShowNotify("请填写尾项申请!", MessageBoxIcon.Warning); } } } /// /// 窗口关闭 /// protected void Window1_Close(object sender, WindowCloseEventArgs e) { BindGrid(true); } /// /// 行绑定 /// protected void Grid1_RowDataBound(object sender, GridRowEventArgs e) { var isTailTerm = Grid1.DataKeys[e.RowIndex][3].ToString(); LinkButtonField TailTermUpdate = Grid1.FindColumn("TailTermUpdate") as LinkButtonField; if (isTailTerm == "0") { e.CellCssClasses[TailTermUpdate.ColumnIndex] = "hidethis"; } } /// /// 尾项选择关闭 /// /// /// protected void Window2_Close(object sender, WindowCloseEventArgs e) { if (!string.IsNullOrWhiteSpace(hidTailTermId.Text)) { var model = Funs.DB.TestRun_InspectTailTerm.FirstOrDefault(x => x.TailTermId == hidTailTermId.Text); if (model != null) { PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("InspectTailTermEdit.aspx?TailTermId={0}&TermItemId={1}", hidTailTermId.Text, model.TermItemId, "编辑 - "))); } } } } }