feat: 性能优化与功能增强

- 优化TestPackageData的InitTreeMenu方法,减少数据库查询次数
  - InstallList页面新增数据汇总统计功能
  - 修复SetSubReviewEdit2编辑时编号重复误报的bug
This commit is contained in:
2025-12-22 12:26:03 +08:00
parent 588fd6124c
commit 808beba1fd
7 changed files with 179 additions and 72 deletions
@@ -61,83 +61,77 @@ namespace FineUIPro.Web.HJGL.TestPackage
{
this.tvControlItem.Nodes.Clear();
TreeNode rootNode1 = new TreeNode();
rootNode1.NodeID = "1";
rootNode1.Text = "建筑工程";
rootNode1.CommandName = "建筑工程";
rootNode1.Selectable = false;
rootNode1.EnableClickEvent = true;
// 创建根节点
TreeNode rootNode1 = new TreeNode
{
NodeID = "1",
Text = "建筑工程",
CommandName = "建筑工程",
Selectable = false,
EnableClickEvent = true
};
this.tvControlItem.Nodes.Add(rootNode1);
TreeNode rootNode2 = new TreeNode();
rootNode2.NodeID = "2";
rootNode2.Text = "安装工程";
rootNode2.CommandName = "安装工程";
rootNode2.Expanded = true;
rootNode2.EnableClickEvent = true;
TreeNode rootNode2 = new TreeNode
{
NodeID = "2",
Text = "安装工程",
CommandName = "安装工程",
Expanded = true,
EnableClickEvent = true
};
this.tvControlItem.Nodes.Add(rootNode2);
var pUnits = (from x in Funs.DB.Project_ProjectUnit where x.ProjectId == this.CurrUser.LoginProjectId select x).ToList();
// 获取当前用户所在单位
var currUnit = pUnits.FirstOrDefault(x => x.UnitId == this.CurrUser.UnitId);
// 一次性获取所有需要的数据
var projectId = this.CurrUser.LoginProjectId;
var unitWorkList = (from x in Funs.DB.WBS_UnitWork
where x.ProjectId == this.CurrUser.LoginProjectId
&& x.SuperUnitWork == null && x.UnitId != null && x.ProjectType != null
select x).ToList();
//List<Model.PTP_TestPackage> testPackageLists = (from x in Funs.DB.PTP_TestPackage
//where x.ProjectId == this.CurrUser.LoginProjectId
//select x).ToList();
List<Model.WBS_UnitWork> unitWork1 = null;
List<Model.WBS_UnitWork> unitWork2 = null;
where x.ProjectId == projectId
&& x.SuperUnitWork == null
&& x.UnitId != null
&& x.ProjectType != null
select x).ToList();
//// 当前为施工单位,只能操作本单位的数据
//if (currUnit != null && currUnit.UnitType == Const.ProjectUnitType_2)
//{
// unitWork1 = (from x in unitWorkList
// where x.UnitId == this.CurrUser.UnitId && x.ProjectType == "1"
// select x).ToList();
// unitWork2 = (from x in unitWorkList
// where x.UnitId == this.CurrUser.UnitId && x.ProjectType == "2"
// select x).ToList();
//}
//else
//{
unitWork1 = (from x in unitWorkList where x.ProjectType == "1" select x).ToList();
unitWork2 = (from x in unitWorkList where x.ProjectType == "2" select x).ToList();
//}
// 按项目类型分组,避免重复查询
var unitWorkGroups = unitWorkList
.GroupBy(x => x.ProjectType)
.ToDictionary(g => g.Key, g => g.ToList());
if (unitWork1.Count() > 0)
// 批量获取单位名称,避免在循环中查询数据库
var unitIds = unitWorkList.Where(x => x.UnitId != null).Select(x => x.UnitId).Distinct().ToList();
var unitNameDict = new Dictionary<string, string>();
foreach (var unitId in unitIds)
{
foreach (var q in unitWork1)
var unitName = BLL.UnitService.getUnitNamesUnitIds(unitId);
if (!string.IsNullOrEmpty(unitName))
{
var unitNamesUnitIds = BLL.UnitService.getUnitNamesUnitIds(q.UnitId);
TreeNode tn1 = new TreeNode();
tn1.NodeID = q.UnitWorkId;
tn1.Text = q.UnitWorkName;
tn1.ToolTip = "施工单位:" + unitNamesUnitIds;
tn1.CommandName = "单位工程";
tn1.EnableClickEvent = true;
rootNode1.Nodes.Add(tn1);
//var testPackageUnitList = testPackageLists.Where(x => x.UnitWorkId == q.UnitWorkId).ToList();
//BindNodes(tn1, testPackageUnitList);
unitNameDict[unitId] = unitName;
}
}
if (unitWork2.Count() > 0)
// 统一方法处理两种类型的单位工程
Action<string, TreeNode> addUnitWorkNodes = (projectType, parentNode) =>
{
foreach (var q in unitWork2)
if (unitWorkGroups.ContainsKey(projectType))
{
var unitNamesUnitIds = BLL.UnitService.getUnitNamesUnitIds(q.UnitId);
TreeNode tn2 = new TreeNode();
tn2.NodeID = q.UnitWorkId;
tn2.Text = q.UnitWorkName;
tn2.ToolTip = "施工单位:" + unitNamesUnitIds;
tn2.CommandName = "单位工程";
tn2.EnableClickEvent = true;
rootNode2.Nodes.Add(tn2);
//var testPackageUnitList = testPackageLists.Where(x => x.UnitWorkId == q.UnitWorkId).ToList();
//BindNodes(tn2, testPackageUnitList);
foreach (var unitWork in unitWorkGroups[projectType])
{
TreeNode treeNode = new TreeNode
{
NodeID = unitWork.UnitWorkId,
Text = unitWork.UnitWorkName,
ToolTip = unitNameDict.ContainsKey(unitWork.UnitId) ?
"施工单位:" + unitNameDict[unitWork.UnitId] : "施工单位:",
CommandName = "单位工程",
EnableClickEvent = true
};
parentNode.Nodes.Add(treeNode);
}
}
}
};
// 添加建筑工程和安装工程节点
addUnitWorkNodes("1", rootNode1);
addUnitWorkNodes("2", rootNode2);
}
#endregion