feat(hjgl): 完善焊接任务与质量管理流程

This commit is contained in:
2026-08-19 17:13:33 +08:00
parent 08792e0dc8
commit 679e9f6cec
68 changed files with 2481 additions and 1170 deletions
+132 -1
View File
@@ -112,6 +112,135 @@ namespace BLL
return q.ToList();
}
/// <summary>
/// 按项目、班组查询逻辑任务单;同一TaskCode下的多条焊口记录合并为一张任务单。
/// </summary>
public static List<Model.WeldTaskListItem> GetTaskListByTeamGroup(string projectId, string teamGroupId, string unitWorkId)
{
if (string.IsNullOrWhiteSpace(projectId))
{
return new List<Model.WeldTaskListItem>();
}
var query = Funs.DB.HJGL_WeldTask.Where(x => x.ProjectId == projectId && x.TaskCode != null);
if (!string.IsNullOrWhiteSpace(teamGroupId))
{
query = query.Where(x => x.TeamGroupId == teamGroupId);
}
if (!string.IsNullOrWhiteSpace(unitWorkId))
{
query = query.Where(x => x.UnitWorkId == unitWorkId);
}
var tasks = query.ToList()
.GroupBy(x => new { x.ProjectId, x.TaskCode })
.Select(g =>
{
var first = g.OrderBy(x => x.WeldTaskId).First();
return new Model.WeldTaskListItem
{
ProjectId = g.Key.ProjectId,
TaskCode = g.Key.TaskCode,
UnitWorkId = first.UnitWorkId,
UnitId = first.UnitId,
TaskDate = first.TaskDate,
SerialNumber = first.SerialNumber,
TeamGroupId = g.Select(x => x.TeamGroupId).FirstOrDefault(x => !string.IsNullOrEmpty(x)),
WeldJointCount = g.Select(x => x.WeldJointId).Where(x => x != null).Distinct().Count()
};
})
.OrderByDescending(x => x.TaskDate)
.ThenByDescending(x => x.TaskCode)
.ToList();
var unitWorkIds = tasks.Select(x => x.UnitWorkId).Where(x => x != null).Distinct().ToList();
var unitIds = tasks.Select(x => x.UnitId).Where(x => x != null).Distinct().ToList();
var teamIds = tasks.Select(x => x.TeamGroupId).Where(x => x != null).Distinct().ToList();
var unitWorkMap = Funs.DB.WBS_UnitWork.Where(x => unitWorkIds.Contains(x.UnitWorkId)).ToDictionary(x => x.UnitWorkId, x => x.UnitWorkName);
var unitMap = Funs.DB.Base_Unit.Where(x => unitIds.Contains(x.UnitId)).ToDictionary(x => x.UnitId, x => x.UnitName);
var teamMap = Funs.DB.ProjectData_TeamGroup.Where(x => teamIds.Contains(x.TeamGroupId)).ToDictionary(x => x.TeamGroupId, x => x.TeamGroupName);
foreach (var task in tasks)
{
task.UnitWorkName = task.UnitWorkId != null && unitWorkMap.ContainsKey(task.UnitWorkId) ? unitWorkMap[task.UnitWorkId] : string.Empty;
task.UnitName = task.UnitId != null && unitMap.ContainsKey(task.UnitId) ? unitMap[task.UnitId] : string.Empty;
task.TeamGroupName = task.TeamGroupId != null && teamMap.ContainsKey(task.TeamGroupId) ? teamMap[task.TeamGroupId] : string.Empty;
}
return tasks;
}
public static Model.WeldTaskDetailItem GetTaskDetail(string projectId, string taskCode)
{
var tasks = Funs.DB.HJGL_WeldTask
.Where(x => x.ProjectId == projectId && x.TaskCode == taskCode)
.OrderBy(x => x.PipeLineSortIndex)
.ThenBy(x => x.WeldTaskId)
.ToList();
var first = tasks.FirstOrDefault();
if (first == null) return null;
var summary = GetTaskListByTeamGroup(projectId, null, first.UnitWorkId)
.FirstOrDefault(x => x.TaskCode == taskCode);
if (summary == null) return null;
var jointIds = tasks.Select(x => x.WeldJointId).Where(x => x != null).Distinct().ToList();
var jointMap = Funs.DB.View_HJGL_WeldJoint.Where(x => jointIds.Contains(x.WeldJointId)).ToDictionary(x => x.WeldJointId, x => x);
return new Model.WeldTaskDetailItem
{
ProjectId = first.ProjectId,
TaskCode = summary.TaskCode,
UnitWorkId = summary.UnitWorkId,
UnitWorkName = summary.UnitWorkName,
UnitId = summary.UnitId,
UnitName = summary.UnitName,
TaskDate = summary.TaskDate,
SerialNumber = summary.SerialNumber,
TeamGroupId = summary.TeamGroupId,
TeamGroupName = summary.TeamGroupName,
WeldJointCount = summary.WeldJointCount,
Joints = tasks.Select(x =>
{
Model.View_HJGL_WeldJoint joint = null;
if (!string.IsNullOrEmpty(x.WeldJointId) && jointMap.ContainsKey(x.WeldJointId)) joint = jointMap[x.WeldJointId];
return new Model.WeldTaskJointItem
{
WeldTaskId = x.WeldTaskId,
WeldJointId = x.WeldJointId,
PipelineId = joint == null ? null : joint.PipelineId,
PipelineCode = joint == null ? null : joint.PipelineCode,
WeldJointCode = joint == null ? null : joint.WeldJointCode,
JointAttribute = x.JointAttribute,
WeldingMode = x.WeldingMode,
WeldTypeCode = joint == null ? null : joint.WeldTypeCode,
Size = joint == null ? null : joint.Size,
CoverWelderId = x.CoverWelderId,
BackingWelderId = x.BackingWelderId
};
}).ToList()
};
}
public static void UpdateTaskTeamGroup(string projectId, string taskCode, string teamGroupId)
{
var tasks = Funs.DB.HJGL_WeldTask.Where(x => x.ProjectId == projectId && x.TaskCode == taskCode).ToList();
foreach (var task in tasks)
{
task.TeamGroupId = string.IsNullOrWhiteSpace(teamGroupId) || teamGroupId == Const._Null ? null : teamGroupId;
}
Funs.DB.SubmitChanges();
}
public static void GenerateOutPlanByTaskCode(string projectId, string taskCode, string personId)
{
var task = Funs.DB.HJGL_WeldTask.FirstOrDefault(x => x.ProjectId == projectId && x.TaskCode == taskCode);
if (task == null || !task.TaskDate.HasValue)
{
throw new ArgumentException("焊接任务单不存在或任务日期为空。");
}
// 沿用原方法,TaskCode只负责定位其所需的组合任务参数。
TwInOutplanmasterService.GenOutPlanmasterByWeldTaskId(
task.UnitWorkId, task.UnitId, task.TaskDate.Value, task.SerialNumber, personId);
}
/// <summary>
/// 增加焊接任务单信息
/// </summary>
@@ -139,7 +268,8 @@ namespace BLL
CanWeldingRodName = WeldTask.CanWeldingRodName,
CanWeldingWireName = WeldTask.CanWeldingWireName,
PipeLineSortIndex = WeldTask.PipeLineSortIndex,
SerialNumber = WeldTask.SerialNumber
SerialNumber = WeldTask.SerialNumber,
TeamGroupId = WeldTask.TeamGroupId
};
@@ -172,6 +302,7 @@ namespace BLL
newWeldTask.IsSaved = WeldTask.IsSaved;
newWeldTask.SerialNumber = WeldTask.SerialNumber;
newWeldTask.PipeLineSortIndex = WeldTask.PipeLineSortIndex;
newWeldTask.TeamGroupId = WeldTask.TeamGroupId;
db.SubmitChanges();
}
}