325 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			325 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C#
		
	
	
	
| using BLL;
 | |
| using Model;
 | |
| using Newtonsoft.Json.Linq;
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using System.Text.RegularExpressions;
 | |
| using System.Web;
 | |
| using System.Web.UI;
 | |
| using System.Web.UI.WebControls;
 | |
| 
 | |
| namespace FineUIPro.Web.TestRun.TestRunManage
 | |
| {
 | |
|     public partial class SubSysWorkPackage : PageBase
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// 点击树状主键
 | |
|         /// </summary>
 | |
|         public string TreePreRunId { get { return (string)ViewState["TreePreRunId"]; } set { ViewState["TreePreRunId"] = value; } }
 | |
|         /// <summary>
 | |
|         /// 系统主键
 | |
|         /// </summary>
 | |
|         public string SystemId { get { return (string)ViewState["SystemId"]; } set { ViewState["SystemId"] = value; } }
 | |
|         protected void Page_Load(object sender, EventArgs e)
 | |
|         {
 | |
|             if (!IsPostBack)
 | |
|             {
 | |
|                 this.InitTreeMenu();//加载树
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         #region 加载树
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 加载树
 | |
|         /// </summary>
 | |
|         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 allPreRunLs = Funs.DB.PreRun_SysDevice.Where(p => p.ProjectId == this.CurrUser.LoginProjectId && p.PreRunLevel <= 3).ToList();
 | |
|             var onePreRunLs = allPreRunLs.Where(p => p.PreRunLevel == 1).OrderBy(x => x.Sort);
 | |
|             foreach (var item in onePreRunLs)
 | |
|             {
 | |
|                 TreeNode rootUnitNode = new TreeNode();//定义根节点
 | |
|                 rootUnitNode.NodeID = item.PreRunId;
 | |
|                 rootUnitNode.Text = item.PreRunName;
 | |
|                 rootUnitNode.ToolTip = item.PreRunName;
 | |
|                 rootUnitNode.CommandName = "";
 | |
|                 rootUnitNode.EnableClickEvent = true;
 | |
|                 rootUnitNode.EnableExpandEvent = true;
 | |
|                 rootNode.Nodes.Add(rootUnitNode);
 | |
|                 rootUnitNode.Expanded = true;
 | |
|                 var otherPreRunls = allPreRunLs.Where(p => p.PreRunLevel != 1).ToList();
 | |
|                 this.BindNodes(rootUnitNode, otherPreRunls, item.PreRunId);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         ///  绑定树节点
 | |
|         /// </summary>
 | |
|         private void BindNodes(TreeNode node, List<PreRun_SysDevice> list, string parentId)
 | |
|         {
 | |
| 
 | |
|             var itemList = list.Where(p => p.ParentId == parentId).OrderBy(x => x.Sort).ToList();
 | |
|             if (itemList.Count > 0)
 | |
|             {
 | |
|                 foreach (var item in itemList)
 | |
|                 {
 | |
|                     TreeNode newNode = new TreeNode();
 | |
|                     newNode.Text = item.PreRunName;
 | |
|                     newNode.NodeID = item.PreRunId;
 | |
|                     newNode.ToolTip = item.PreRunName;
 | |
|                     newNode.CommandName = "";
 | |
|                     newNode.EnableClickEvent = true;
 | |
|                     node.Nodes.Add(newNode);
 | |
|                     BindNodes(newNode, list, item.PreRunId);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 数加载
 | |
|         /// </summary>
 | |
|         protected void tvControlItem_NodeExpand(object sender, TreeNodeEventArgs e)
 | |
|         {
 | |
|             if (e.Node.Nodes != null)
 | |
|             {
 | |
|                 e.Node.Nodes.Clear();
 | |
|             }
 | |
|             var allPreRunLs = Funs.DB.PreRun_SysDevice.Where(p => p.ProjectId == this.CurrUser.LoginProjectId && p.PreRunLevel <= 3).ToList();
 | |
|             this.BindNodes(e.Node, allPreRunLs, e.NodeID);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 点击TreeView
 | |
|         /// </summary>
 | |
|         /// <param name="sender"></param>
 | |
|         /// <param name="e"></param>
 | |
|         protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e)
 | |
|         {
 | |
|             this.TreePreRunId = tvControlItem.SelectedNodeID;
 | |
|             this.PageBase();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 数据显示
 | |
|         /// </summary>
 | |
|         public void PageBase()
 | |
|         {
 | |
|             var model = Funs.DB.PreRun_SysDevice.FirstOrDefault(p => p.PreRunId == this.TreePreRunId);
 | |
|             if (model != null)
 | |
|             {
 | |
|                 var ids = new List<string>();
 | |
|                 if (!string.IsNullOrWhiteSpace(model.InstallationId)) ids.Add(model.InstallationId);
 | |
|                 if (!string.IsNullOrWhiteSpace(model.ProcessesId)) ids.Add(model.ProcessesId);
 | |
|                 if (!string.IsNullOrWhiteSpace(model.SystemId)) ids.Add(model.SystemId);
 | |
|                 var list = Funs.DB.PreRun_SysDevice.Where(p => ids.Contains(p.PreRunId) && p.PreRunLevel <= 3).ToList();
 | |
| 
 | |
|                 if (list.Count(p => p.PreRunLevel == 1) > 0)
 | |
|                 {
 | |
|                     zz.Hidden = false;
 | |
|                     lblzzbm.Text = list.FirstOrDefault(p => p.PreRunLevel == 1).PreRunCode;
 | |
|                     lblzzmc.Text = list.FirstOrDefault(p => p.PreRunLevel == 1).PreRunName;
 | |
|                 }
 | |
|                 if (list.Count(p => p.PreRunLevel == 2) > 0)
 | |
|                 {
 | |
|                     gx.Hidden = false;
 | |
|                     lblgxmc.Text = list.FirstOrDefault(p => p.PreRunLevel == 2).PreRunCode;
 | |
|                     lblgxbm.Text = list.FirstOrDefault(p => p.PreRunLevel == 2).PreRunName;
 | |
|                 }
 | |
|                 if (list.Count(p => p.PreRunLevel == 3) > 0)
 | |
|                 {
 | |
|                     gzb.Hidden = false;
 | |
|                     BridWorkPackGrid();
 | |
|                     sxt.Hidden = false;
 | |
|                     var itemlist = list.FirstOrDefault(p => p.PreRunLevel == 3);
 | |
|                     lblsxtmc.Text = itemlist.PreRunName;
 | |
|                     lblsxtbm.Text = itemlist.PreRunCode;
 | |
|                     this.SystemId = itemlist.PreRunId;
 | |
|                     var workPackages = Funs.DB.TestRun_SubSysWorkPackage.Where(p => p.SystemId == this.SystemId).OrderBy(x => x.Sort).ToList();
 | |
|                     if (workPackages.Count > 0)
 | |
|                     {
 | |
|                         var workIds = workPackages.ConvertAll(p => p.WorkPackId);
 | |
|                         BridSelectWorkPack(workIds);
 | |
|                         drpWorkPack.Values = workIds.ToArray();
 | |
|                     }
 | |
|                     else
 | |
|                     {
 | |
|                         Grid1.DataSource = null;
 | |
|                         Grid1.DataBind();
 | |
|                         drpWorkPack.Values = null;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 保存
 | |
|         /// </summary>
 | |
|         protected void btnSave_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             var prerunModel = Funs.DB.PreRun_SysDevice.FirstOrDefault(p => p.PreRunId == this.TreePreRunId);
 | |
|             if (prerunModel != null)
 | |
|             {
 | |
|                 if (prerunModel.PreRunLevel == 3)
 | |
|                 {
 | |
|                     var deleteLs = Funs.DB.TestRun_SubSysWorkPackage.Where(p => p.SystemId == prerunModel.PreRunId);
 | |
|                     Funs.DB.TestRun_SubSysWorkPackage.DeleteAllOnSubmit(deleteLs);
 | |
|                     Funs.DB.SubmitChanges();
 | |
|                     JArray mergedData = Grid1.GetMergedData();
 | |
|                     int[] selections = Grid1.SelectedRowIndexArray;
 | |
|                     foreach (JObject mergedRow in mergedData)
 | |
|                     {
 | |
|                         string status = mergedRow.Value<string>("status");
 | |
|                         JObject values = mergedRow.Value<JObject>("values");
 | |
|                         int i = mergedRow.Value<int>("index");
 | |
|                         var workId = Grid1.DataKeys[i][0].ToString();
 | |
|                         var model = new TestRun_SubSysWorkPackage();
 | |
|                         model.SubSysId = Guid.NewGuid().ToString();
 | |
|                         model.SystemId = prerunModel.PreRunId;
 | |
|                         model.WorkPackId = workId;
 | |
|                         model.WorkPackCode = !string.IsNullOrWhiteSpace(values.Value<string>("WorkPackCode")) ? values.Value<string>("WorkPackCode") : "WP";
 | |
|                         model.Remark = values.Value<string>("Remark");
 | |
|                         model.AddTime = DateTime.Now;
 | |
|                         model.AddUser = this.CurrUser.UserId;
 | |
|                         model.Sort = Funs.DB.TestRun_SubSysWorkPackage.Count();
 | |
|                         Funs.DB.TestRun_SubSysWorkPackage.InsertOnSubmit(model);
 | |
|                     }
 | |
|                     Funs.DB.SubmitChanges();
 | |
|                     ShowNotify("保存成功!", MessageBoxIcon.Success);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 绑定工作包
 | |
|         /// </summary>
 | |
|         public void BridWorkPackGrid()
 | |
|         {
 | |
|             GridWorkPack.DataSource = Funs.DB.TestRun_WorkPackage.OrderBy(p => p.Sort).ToList();
 | |
|             GridWorkPack.DataBind();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 绑定选择的工作包
 | |
|         /// </summary>
 | |
|         public void BridSelectWorkPack(List<string> workPackIds)
 | |
|         {
 | |
|             if (!string.IsNullOrWhiteSpace(this.SystemId))
 | |
|             {
 | |
|                 var result = new List<WorkData>();
 | |
|                 var queryData = from a in Funs.DB.TestRun_WorkPackage.Where(p => workPackIds.Contains(p.WorkPackId))
 | |
|                                 join b in Funs.DB.TestRun_SubSysWorkPackage.Where(p => p.SystemId == this.SystemId) on a.WorkPackId equals b.WorkPackId into bb
 | |
|                                 from t in bb.DefaultIfEmpty()
 | |
|                                 select new WorkData()
 | |
|                                 {
 | |
|                                     WorkPackId = a.WorkPackId,
 | |
|                                     WorkPackCode = t.WorkPackCode,
 | |
|                                     WorkPackName = a.WorkPackName,
 | |
|                                     SystemId = t.SystemId,
 | |
|                                     Sort = a.Sort,
 | |
|                                     Remark = t.Remark
 | |
|                                 };
 | |
|                 if (queryData.Count() > 0)
 | |
|                 {
 | |
|                     int num = 1;
 | |
|                     var data = queryData.ToList();
 | |
|                     foreach (var item in data.OrderBy(p => p.Sort))
 | |
|                     {
 | |
|                         var model = new WorkData();
 | |
|                         model.WorkPackId = item.WorkPackId;
 | |
|                         model.WorkPackName = item.WorkPackName;
 | |
|                         model.SystemId = item.SystemId;
 | |
|                         if (string.IsNullOrWhiteSpace(item.WorkPackCode))
 | |
|                         {
 | |
|                             var workpackages = data.Where(x => !string.IsNullOrWhiteSpace(x.WorkPackCode)).ToList();
 | |
|                             if (num == 1)
 | |
|                             {
 | |
|                                 if (workpackages.Count > 0) num = workpackages.ConvertAll(x => int.Parse(x.WorkPackCode.Replace("WP", ""))).Max(m => m) + 1;
 | |
|                             }
 | |
|                             model.WorkPackCode = $"WP{string.Format("{0:d3}", num)}";
 | |
|                             num++;
 | |
|                         }
 | |
|                         else
 | |
|                         {
 | |
|                             model.WorkPackCode = item.WorkPackCode;
 | |
|                         }
 | |
|                         model.Sort = num;
 | |
|                         model.Remark = item.Remark;
 | |
|                         result.Add(model);
 | |
|                     }
 | |
|                     result = result.OrderBy(p => int.Parse(Regex.Replace(p.WorkPackCode, @"\D", ""))).ToList();
 | |
|                     Grid1.DataSource = result;
 | |
|                     Grid1.DataBind();
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     Grid1.DataSource = null;
 | |
|                     Grid1.DataBind();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 工作包选择
 | |
|         /// </summary>
 | |
|         /// <param name="sender"></param>
 | |
|         /// <param name="e"></param>
 | |
|         protected void drpWorkPack_TextChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             if (drpWorkPack.Values.Length > 0)
 | |
|             {
 | |
|                 BridSelectWorkPack(drpWorkPack.Values.ToList());
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 Grid1.DataSource = null;
 | |
|                 Grid1.DataBind();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 行点击事件
 | |
|         /// </summary>
 | |
|         protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
 | |
|         {
 | |
|             if (e.CommandName == "Delete")
 | |
|             {
 | |
|                 string rowID = e.RowID;
 | |
|                 var model = Funs.DB.TestRun_SubSysWorkPackage.FirstOrDefault(p => p.WorkPackId == rowID);
 | |
|                 if (model != null)
 | |
|                 {
 | |
|                     Funs.DB.TestRun_SubSysWorkPackage.DeleteOnSubmit(model);
 | |
|                     Funs.DB.SubmitChanges();
 | |
|                 }
 | |
|                 var workPackages = Funs.DB.TestRun_SubSysWorkPackage.Where(p => p.SystemId == this.SystemId).ToList();
 | |
|                 var workIds = workPackages.ConvertAll(p => p.WorkPackId);
 | |
|                 BridSelectWorkPack(workIds);
 | |
|                 drpWorkPack.Values = workIds.ToArray();
 | |
|                 ShowNotify("删除成功!");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public class WorkData
 | |
|         {
 | |
|             public string SystemId { get; set; }
 | |
|             public string WorkPackId { get; set; }
 | |
|             public string WorkPackName { get; set; }
 | |
|             public int? Sort { get; set; }
 | |
|             public string Remark { get; set; }
 | |
|             public string WorkPackCode { get; set; }
 | |
|         }
 | |
| 
 | |
|     }
 | |
| } |