2de696fad2
补齐焊前专项审核和焊缝外观检测流程,统一质检查询、附件处理与材料明细导出,提升业务数据追溯和组件匹配使用效率。
957 lines
49 KiB
C#
957 lines
49 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace BLL
|
|
{
|
|
/// <summary>
|
|
/// 焊前检查台账服务
|
|
/// </summary>
|
|
public static class PreWeldInspectionService
|
|
{
|
|
public const int CuttingReviewCompleted = 0;
|
|
public const int CuttingReviewPending = 1;
|
|
public const int CuttingReviewApproved = 2;
|
|
/// <summary>
|
|
/// 获取下料检查台账
|
|
/// </summary>
|
|
public static Tuple<List<Model.PreWeldCuttingCheckItem>, int> GetCuttingCheckList(string projectId, string pipelineCode, string weldJointCode, int pageIndex, int pageSize)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
var query = from c in db.HJGL_PreWeldCuttingCheck
|
|
join w in db.HJGL_WeldJoint on c.WeldJointId equals w.WeldJointId
|
|
join p in db.Person_Persons on c.CheckPerson equals p.PersonId into persons
|
|
from p in persons.DefaultIfEmpty()
|
|
where string.IsNullOrEmpty(projectId) || c.ProjectId == projectId || w.ProjectId == projectId
|
|
select new
|
|
{
|
|
c,
|
|
w,
|
|
CheckPersonName = p == null ? string.Empty : p.PersonName
|
|
};
|
|
|
|
if (!string.IsNullOrEmpty(pipelineCode))
|
|
{
|
|
query = query.Where(x => x.w.PipelineCode.Contains(pipelineCode));
|
|
}
|
|
if (!string.IsNullOrEmpty(weldJointCode))
|
|
{
|
|
query = query.Where(x => x.w.WeldJointCode.Contains(weldJointCode));
|
|
}
|
|
|
|
int total = query.Count();
|
|
var data = query.OrderByDescending(x => x.c.CheckTime)
|
|
.Skip(pageIndex * pageSize)
|
|
.Take(pageSize)
|
|
.Select(x => new Model.PreWeldCuttingCheckItem
|
|
{
|
|
CuttingCheckId = x.c.CuttingCheckId,
|
|
ProjectId = x.c.ProjectId,
|
|
WeldJointId = x.c.WeldJointId,
|
|
PipelineCode = x.w.PipelineCode,
|
|
WeldJointCode = x.w.WeldJointCode,
|
|
CuttingLength = x.c.CuttingLength,
|
|
GrooveForm = x.c.GrooveForm,
|
|
GrooveAngle = x.c.GrooveAngle,
|
|
IsMaterialCodeBatchNoAccurate = x.c.IsMaterialCodeBatchNoAccurate,
|
|
IsMaterialQuantityAccurate = x.c.IsMaterialQuantityAccurate,
|
|
IsQualified = x.c.IsQualified,
|
|
CheckPerson = x.c.CheckPerson,
|
|
CheckPersonName = x.CheckPersonName,
|
|
CheckTime = x.c.CheckTime,
|
|
CreateUser = x.c.CreateUser,
|
|
CreateTime = x.c.CreateTime,
|
|
CheckResult = x.c.CheckResult,
|
|
UnqualifiedReason = x.c.UnqualifiedReason,
|
|
RectifyRequirement = x.c.RectifyRequirement,
|
|
Remark = x.c.Remark,
|
|
ReviewState = x.c.ReviewState,
|
|
SpecialReviewerId = x.c.SpecialReviewerId,
|
|
ReviewerId = x.c.ReviewerId,
|
|
ReviewTime = x.c.ReviewTime
|
|
})
|
|
.ToList();
|
|
PopulateCuttingCheckDetails(db, data);
|
|
|
|
return Tuple.Create(data, total);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取组对检查台账
|
|
/// </summary>
|
|
public static Tuple<List<Model.PreWeldFitupCheckItem>, int> GetFitupCheckList(string projectId, string pipelineCode, string weldJointCode, int pageIndex, int pageSize)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
var query = from f in db.HJGL_PreWeldFitupCheck
|
|
join w in db.HJGL_WeldJoint on f.WeldJointId equals w.WeldJointId
|
|
join g in db.Base_GrooveType on f.GrooveTypeId equals g.GrooveTypeId into grooveTypes
|
|
from g in grooveTypes.DefaultIfEmpty()
|
|
join p in db.Person_Persons on f.CheckPerson equals p.PersonId into persons
|
|
from p in persons.DefaultIfEmpty()
|
|
where string.IsNullOrEmpty(projectId) || f.ProjectId == projectId || w.ProjectId == projectId
|
|
select new
|
|
{
|
|
f,
|
|
w,
|
|
g,
|
|
CheckPersonName = p == null ? string.Empty : p.PersonName
|
|
};
|
|
|
|
if (!string.IsNullOrEmpty(pipelineCode))
|
|
{
|
|
query = query.Where(x => x.w.PipelineCode.Contains(pipelineCode));
|
|
}
|
|
if (!string.IsNullOrEmpty(weldJointCode))
|
|
{
|
|
query = query.Where(x => x.w.WeldJointCode.Contains(weldJointCode));
|
|
}
|
|
|
|
int total = query.Count();
|
|
var data = query.OrderByDescending(x => x.f.CheckTime)
|
|
.Skip(pageIndex * pageSize)
|
|
.Take(pageSize)
|
|
.Select(x => new Model.PreWeldFitupCheckItem
|
|
{
|
|
FitupCheckId = x.f.FitupCheckId,
|
|
ProjectId = x.f.ProjectId,
|
|
WeldJointId = x.f.WeldJointId,
|
|
PipelineCode = x.w.PipelineCode,
|
|
WeldJointCode = x.w.WeldJointCode,
|
|
GrooveTypeId = x.f.GrooveTypeId,
|
|
GrooveTypeCode = x.g == null ? string.Empty : x.g.GrooveTypeCode,
|
|
GrooveTypeName = x.g == null ? string.Empty : x.g.GrooveTypeName,
|
|
GrooveProcessType = x.f.GrooveProcessType,
|
|
GrooveAngle = x.f.GrooveAngle,
|
|
FitupGap = x.f.FitupGap,
|
|
Misalignment = x.f.Misalignment,
|
|
WeldReinforcement = x.f.WeldReinforcement,
|
|
WeldHeight = x.f.WeldHeight,
|
|
WeldWidth = x.f.WeldWidth,
|
|
SurfaceDefect = x.f.SurfaceDefect,
|
|
CheckPerson = x.f.CheckPerson,
|
|
CheckPersonName = x.CheckPersonName,
|
|
CheckTime = x.f.CheckTime,
|
|
CreateUser = x.f.CreateUser,
|
|
CreateTime = x.f.CreateTime,
|
|
CheckResult = x.f.CheckResult,
|
|
UnqualifiedReason = x.f.UnqualifiedReason,
|
|
RectifyRequirement = x.f.RectifyRequirement,
|
|
Remark = x.f.Remark
|
|
})
|
|
.ToList();
|
|
foreach (var item in data)
|
|
{
|
|
item.AttachUrl1 = GetInspectionAttachUrl(db, Const.HJGL_PreWeldFitupCheckMenuId, item.FitupCheckId);
|
|
}
|
|
|
|
return Tuple.Create(data, total);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取下料检查实体
|
|
/// </summary>
|
|
public static Model.HJGL_PreWeldCuttingCheck GetCuttingCheckById(string cuttingCheckId)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
return db.HJGL_PreWeldCuttingCheck.FirstOrDefault(x => x.CuttingCheckId == cuttingCheckId);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取组对检查实体
|
|
/// </summary>
|
|
public static Model.HJGL_PreWeldFitupCheck GetFitupCheckById(string fitupCheckId)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
return db.HJGL_PreWeldFitupCheck.FirstOrDefault(x => x.FitupCheckId == fitupCheckId);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 兼容旧调用:按焊口获取组对检查记录,返回最新一条
|
|
/// </summary>
|
|
public static Model.HJGL_PreWeldFitupCheck GetFitupCheckByWeldJointId(string weldJointId)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
return db.HJGL_PreWeldFitupCheck.Where(x => x.WeldJointId == weldJointId)
|
|
.OrderByDescending(x => x.CheckTime)
|
|
.FirstOrDefault();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 按焊口获取下料记录
|
|
/// </summary>
|
|
public static List<Model.HJGL_PreWeldCuttingCheck> GetCuttingChecksByWeldJointId(string weldJointId)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
return db.HJGL_PreWeldCuttingCheck.Where(x => x.WeldJointId == weldJointId)
|
|
.OrderByDescending(x => x.CheckTime)
|
|
.ToList();
|
|
}
|
|
}
|
|
|
|
public static List<Model.PreWeldCuttingCheckItem> GetCuttingCheckItemsByWeldJointId(string weldJointId)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
var data = (from c in db.HJGL_PreWeldCuttingCheck
|
|
join w in db.HJGL_WeldJoint on c.WeldJointId equals w.WeldJointId
|
|
join p in db.Person_Persons on c.CheckPerson equals p.PersonId into persons
|
|
from p in persons.DefaultIfEmpty()
|
|
where c.WeldJointId == weldJointId
|
|
orderby c.CheckTime descending, c.CreateTime descending
|
|
select new Model.PreWeldCuttingCheckItem
|
|
{
|
|
CuttingCheckId = c.CuttingCheckId,
|
|
ProjectId = c.ProjectId,
|
|
WeldJointId = c.WeldJointId,
|
|
PipelineCode = w.PipelineCode,
|
|
WeldJointCode = w.WeldJointCode,
|
|
CuttingLength = c.CuttingLength,
|
|
GrooveForm = c.GrooveForm,
|
|
GrooveAngle = c.GrooveAngle,
|
|
IsMaterialCodeBatchNoAccurate = c.IsMaterialCodeBatchNoAccurate,
|
|
IsMaterialQuantityAccurate = c.IsMaterialQuantityAccurate,
|
|
IsQualified = c.IsQualified,
|
|
CheckPerson = c.CheckPerson,
|
|
CheckPersonName = p == null ? string.Empty : p.PersonName,
|
|
CheckTime = c.CheckTime,
|
|
CreateUser = c.CreateUser,
|
|
CreateTime = c.CreateTime,
|
|
CheckResult = c.CheckResult,
|
|
UnqualifiedReason = c.UnqualifiedReason,
|
|
RectifyRequirement = c.RectifyRequirement,
|
|
Remark = c.Remark,
|
|
ReviewState = c.ReviewState,
|
|
SpecialReviewerId = c.SpecialReviewerId,
|
|
ReviewerId = c.ReviewerId,
|
|
ReviewTime = c.ReviewTime
|
|
}).ToList();
|
|
PopulateCuttingCheckDetails(db, data);
|
|
return data;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 按焊口获取组对记录
|
|
/// </summary>
|
|
public static List<Model.HJGL_PreWeldFitupCheck> GetFitupChecksByWeldJointId(string weldJointId)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
return db.HJGL_PreWeldFitupCheck.Where(x => x.WeldJointId == weldJointId)
|
|
.OrderByDescending(x => x.CheckTime)
|
|
.ToList();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存下料检查;传入主键时修改对应记录,否则新增一条记录
|
|
/// </summary>
|
|
public static string SaveCuttingCheck(Model.PreWeldCuttingCheckInput item)
|
|
{
|
|
if (item == null)
|
|
{
|
|
throw new ArgumentNullException("item");
|
|
}
|
|
if (string.IsNullOrEmpty(item.WeldJointId))
|
|
{
|
|
throw new ArgumentException("焊口ID不能为空。");
|
|
}
|
|
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
var weldJoint = db.HJGL_WeldJoint.FirstOrDefault(x => x.WeldJointId == item.WeldJointId);
|
|
if (weldJoint == null)
|
|
{
|
|
throw new ArgumentException("未找到对应焊口。");
|
|
}
|
|
|
|
var check = string.IsNullOrEmpty(item.CuttingCheckId)
|
|
? null
|
|
: db.HJGL_PreWeldCuttingCheck.FirstOrDefault(x => x.CuttingCheckId == item.CuttingCheckId);
|
|
if (check == null)
|
|
{
|
|
check = new Model.HJGL_PreWeldCuttingCheck
|
|
{
|
|
CuttingCheckId = string.IsNullOrEmpty(item.CuttingCheckId) ? Guid.NewGuid().ToString() : item.CuttingCheckId,
|
|
CreateTime = DateTime.Now
|
|
};
|
|
db.HJGL_PreWeldCuttingCheck.InsertOnSubmit(check);
|
|
}
|
|
|
|
check.WeldJointId = item.WeldJointId;
|
|
check.ProjectId = string.IsNullOrEmpty(item.ProjectId) ? weldJoint.ProjectId : item.ProjectId;
|
|
check.CuttingLength = item.CuttingLength;
|
|
check.GrooveForm = item.GrooveForm;
|
|
check.GrooveAngle = item.GrooveAngle;
|
|
check.IsMaterialCodeBatchNoAccurate = item.IsMaterialCodeBatchNoAccurate;
|
|
check.IsMaterialQuantityAccurate = item.IsMaterialQuantityAccurate;
|
|
// 下料检查合格规则:材料编码批次和材料数量都准确才判定为合格。
|
|
check.IsQualified = item.IsMaterialCodeBatchNoAccurate && item.IsMaterialQuantityAccurate;
|
|
check.CheckPerson = item.CheckPerson;
|
|
check.CheckTime = item.CheckTime ?? DateTime.Now;
|
|
check.CreateUser = item.CreateUser ?? item.CheckPerson;
|
|
check.CheckResult = item.CheckResult;
|
|
check.UnqualifiedReason = item.UnqualifiedReason;
|
|
check.RectifyRequirement = item.RectifyRequirement;
|
|
check.Remark = item.Remark;
|
|
bool requiresSpecialReview = !item.IsMaterialCodeBatchNoAccurate;
|
|
if (requiresSpecialReview && string.IsNullOrWhiteSpace(item.SpecialReviewerId))
|
|
{
|
|
throw new ArgumentException("材料编码或批次不准确时必须选择专项审核办理人。");
|
|
}
|
|
if (requiresSpecialReview && !db.SitePerson_Person.Any(x => x.ProjectId == check.ProjectId
|
|
&& x.PersonId == item.SpecialReviewerId && x.States == Const.ProjectPersonStates_1))
|
|
{
|
|
throw new ArgumentException("专项审核办理人不属于当前项目或已停用。");
|
|
}
|
|
|
|
check.ReviewState = requiresSpecialReview ? CuttingReviewPending : CuttingReviewCompleted;
|
|
check.SpecialReviewerId = requiresSpecialReview ? item.SpecialReviewerId : null;
|
|
check.ReviewerId = null;
|
|
check.ReviewTime = null;
|
|
SaveCuttingMaterialSnapshots(db, check, item.Materials);
|
|
SyncCuttingReviewTodo(db, check, item.CreateUser ?? item.CheckPerson);
|
|
db.SubmitChanges();
|
|
SaveInspectionAttachUrl(item.AttachUrl1, Const.HJGL_PreWeldCuttingCheckMenuId, check.CuttingCheckId);
|
|
return check.CuttingCheckId;
|
|
}
|
|
}
|
|
|
|
public static string ReviewCuttingCheck(Model.PreWeldCuttingCheckReviewInput item)
|
|
{
|
|
if (item == null || string.IsNullOrWhiteSpace(item.CuttingCheckId))
|
|
{
|
|
throw new ArgumentException("下料检查记录ID不能为空。");
|
|
}
|
|
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
var check = db.HJGL_PreWeldCuttingCheck.FirstOrDefault(x => x.CuttingCheckId == item.CuttingCheckId);
|
|
if (check == null)
|
|
{
|
|
throw new ArgumentException("未找到下料检查记录。");
|
|
}
|
|
if (check.ReviewState != CuttingReviewPending)
|
|
{
|
|
throw new InvalidOperationException("该专项审核已办理或无需办理。");
|
|
}
|
|
if (string.IsNullOrWhiteSpace(item.ReviewerId) || check.SpecialReviewerId != item.ReviewerId)
|
|
{
|
|
throw new InvalidOperationException("当前人员不是该专项审核的办理人。");
|
|
}
|
|
|
|
if (item.Materials != null)
|
|
{
|
|
SaveCuttingMaterialSnapshots(db, check, item.Materials);
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(item.Remark))
|
|
{
|
|
check.Remark = item.Remark;
|
|
}
|
|
check.ReviewState = CuttingReviewApproved;
|
|
check.ReviewerId = item.ReviewerId;
|
|
check.ReviewTime = item.ReviewTime ?? DateTime.Now;
|
|
CompleteCuttingReviewTodo(db, check.CuttingCheckId, item.ReviewerId);
|
|
db.SubmitChanges();
|
|
return check.CuttingCheckId;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存组对检查;传入主键时修改对应记录,否则新增一条记录
|
|
/// </summary>
|
|
public static string SaveFitupCheck(Model.PreWeldFitupCheckInput item)
|
|
{
|
|
if (item == null)
|
|
{
|
|
throw new ArgumentNullException("item");
|
|
}
|
|
if (string.IsNullOrEmpty(item.WeldJointId))
|
|
{
|
|
throw new ArgumentException("焊口ID不能为空。");
|
|
}
|
|
/* if (string.IsNullOrEmpty(item.GrooveTypeId))
|
|
{
|
|
throw new ArgumentException("坡口类型不能为空。");
|
|
}*/
|
|
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
var weldJoint = db.HJGL_WeldJoint.FirstOrDefault(x => x.WeldJointId == item.WeldJointId);
|
|
if (weldJoint == null)
|
|
{
|
|
throw new ArgumentException("未找到对应焊口。");
|
|
}
|
|
/* if (!db.Base_GrooveType.Any(x => x.GrooveTypeId == item.GrooveTypeId))
|
|
{
|
|
throw new ArgumentException("坡口类型不存在。");
|
|
}*/
|
|
|
|
var check = string.IsNullOrEmpty(item.FitupCheckId)
|
|
? null
|
|
: db.HJGL_PreWeldFitupCheck.FirstOrDefault(x => x.FitupCheckId == item.FitupCheckId);
|
|
if (check == null)
|
|
{
|
|
check = new Model.HJGL_PreWeldFitupCheck
|
|
{
|
|
FitupCheckId = string.IsNullOrEmpty(item.FitupCheckId) ? Guid.NewGuid().ToString() : item.FitupCheckId,
|
|
CreateTime = DateTime.Now
|
|
};
|
|
db.HJGL_PreWeldFitupCheck.InsertOnSubmit(check);
|
|
}
|
|
|
|
check.ProjectId = string.IsNullOrEmpty(item.ProjectId) ? weldJoint.ProjectId : item.ProjectId;
|
|
check.WeldJointId = item.WeldJointId;
|
|
//check.GrooveTypeId = item.GrooveTypeId;
|
|
check.GrooveProcessType = item.GrooveProcessType;
|
|
check.GrooveAngle = item.GrooveAngle;
|
|
check.FitupGap = item.FitupGap;
|
|
check.Misalignment = item.Misalignment;
|
|
check.WeldReinforcement = item.WeldReinforcement;
|
|
check.WeldHeight = item.WeldHeight;
|
|
check.WeldWidth = item.WeldWidth;
|
|
check.SurfaceDefect = item.SurfaceDefect;
|
|
check.CheckPerson = item.CheckPerson;
|
|
check.CheckTime = item.CheckTime ?? DateTime.Now;
|
|
check.CreateUser = item.CreateUser ?? item.CheckPerson;
|
|
check.CheckResult = item.CheckResult;
|
|
check.UnqualifiedReason = item.UnqualifiedReason;
|
|
check.RectifyRequirement = item.RectifyRequirement;
|
|
check.Remark = item.Remark;
|
|
|
|
// 组对检查需要同步回写焊口主表,保证焊口基础信息保持最新
|
|
// weldJoint.GrooveTypeId = item.GrooveTypeId;
|
|
weldJoint.GrooveProcessType = item.GrooveProcessType;
|
|
weldJoint.GrooveAngle = item.GrooveAngle;
|
|
weldJoint.FitupGap = item.FitupGap;
|
|
weldJoint.Misalignment = item.Misalignment;
|
|
|
|
db.SubmitChanges();
|
|
SaveInspectionAttachUrl(item.AttachUrl1, Const.HJGL_PreWeldFitupCheckMenuId, check.FitupCheckId);
|
|
return check.FitupCheckId;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取防腐检查台账
|
|
/// </summary>
|
|
public static Tuple<List<Model.AntiCorrosionCheckRecordItem>, int> GetAntiCorrosionCheckList(string projectId, string materialCode, string paintCode, string intermediatePaint, string topcoat, string filmThickness, string checkResult, DateTime? startTime, DateTime? endTime, int pageIndex, int pageSize)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
var query = from r in db.HJGL_AntiCorrosionCheckRecord
|
|
join m in db.HJGL_MaterialCodeLib on r.MaterialCode equals m.MaterialCode into materialJoin
|
|
from m in materialJoin.DefaultIfEmpty()
|
|
join paint in db.Tw_PaintCodeDict on r.PaintId equals paint.Id into paintJoin
|
|
from paint in paintJoin.DefaultIfEmpty()
|
|
join person in db.Person_Persons on r.CheckPerson equals person.PersonId into personJoin
|
|
from person in personJoin.DefaultIfEmpty()
|
|
where string.IsNullOrEmpty(projectId) || r.ProjectId == projectId
|
|
select new { r, m, paint, person };
|
|
if (!string.IsNullOrEmpty(materialCode))
|
|
{
|
|
query = query.Where(x => x.r.MaterialCode.Contains(materialCode));
|
|
}
|
|
if (!string.IsNullOrEmpty(paintCode))
|
|
{
|
|
query = query.Where(x => x.paint != null && x.paint.PaintCode.Contains(paintCode));
|
|
}
|
|
if (!string.IsNullOrEmpty(intermediatePaint))
|
|
{
|
|
query = query.Where(x => x.paint != null && x.paint.IntermediatePaint.Contains(intermediatePaint));
|
|
}
|
|
if (!string.IsNullOrEmpty(topcoat))
|
|
{
|
|
query = query.Where(x => x.paint != null && x.paint.Topcoat.Contains(topcoat));
|
|
}
|
|
decimal filmThicknessValue;
|
|
if (!string.IsNullOrWhiteSpace(filmThickness) && decimal.TryParse(filmThickness, out filmThicknessValue))
|
|
{
|
|
query = query.Where(x => x.r.FilmThickness == filmThicknessValue);
|
|
}
|
|
if (!string.IsNullOrEmpty(checkResult))
|
|
{
|
|
query = query.Where(x => x.r.CheckResult == checkResult);
|
|
}
|
|
if (startTime.HasValue)
|
|
{
|
|
query = query.Where(x => x.r.CheckTime >= startTime.Value);
|
|
}
|
|
if (endTime.HasValue)
|
|
{
|
|
query = query.Where(x => x.r.CheckTime < endTime.Value.AddDays(1));
|
|
}
|
|
|
|
int total = query.Count();
|
|
var data = query.OrderByDescending(x => x.r.CheckTime)
|
|
.Skip(pageIndex * pageSize)
|
|
.Take(pageSize)
|
|
.Select(x => new Model.AntiCorrosionCheckRecordItem
|
|
{
|
|
AntiCorrosionCheckId = x.r.AntiCorrosionCheckId,
|
|
ProjectId = x.r.ProjectId,
|
|
UnitWorkId = x.r.UnitWorkId,
|
|
MaterialId = x.r.MaterialId,
|
|
MaterialCode = x.r.MaterialCode,
|
|
MaterialName = x.m == null ? string.Empty : x.m.MaterialName,
|
|
MaterialSpec = x.m == null ? string.Empty : x.m.MaterialSpec,
|
|
MaterialMade = x.m == null ? string.Empty : x.m.MaterialMade,
|
|
MaterialDef = x.m == null ? string.Empty : x.m.MaterialDef,
|
|
MaterialUnit = x.m == null ? string.Empty : x.m.MaterialUnit,
|
|
HeatNo = x.m == null ? string.Empty : x.m.HeatNo,
|
|
BatchNo = x.m == null ? string.Empty : x.m.BatchNo,
|
|
Code = x.m == null ? string.Empty : x.m.Code,
|
|
AnticorrosionLevel = x.r.AnticorrosionLevel,
|
|
PaintId = x.r.PaintId,
|
|
PaintCode = x.paint == null ? string.Empty : x.paint.PaintCode,
|
|
Primer = x.paint == null ? string.Empty : x.paint.Primer,
|
|
IntermediatePaint = x.paint == null ? string.Empty : x.paint.IntermediatePaint,
|
|
Topcoat = x.paint == null ? string.Empty : x.paint.Topcoat,
|
|
ColorCode = x.paint == null ? string.Empty : x.paint.ColorCode,
|
|
FilmThickness = x.r.FilmThickness,
|
|
SandBlasting = x.r.SandBlasting,
|
|
RustSandBlasting = x.r.RustSandBlasting,
|
|
CheckResult = x.r.CheckResult,
|
|
CheckPerson = x.r.CheckPerson,
|
|
CheckPersonName = x.person == null ? string.Empty : x.person.PersonName,
|
|
CheckTime = x.r.CheckTime,
|
|
UnqualifiedReason = x.r.UnqualifiedReason,
|
|
RectifyRequirement = x.r.RectifyRequirement,
|
|
Remark = x.r.Remark,
|
|
CreateUser = x.r.CreateUser,
|
|
CreateTime = x.r.CreateTime
|
|
})
|
|
.ToList();
|
|
foreach (var item in data)
|
|
{
|
|
item.AttachUrl1 = GetInspectionAttachUrl(db, Const.Tw_AntiCorrosionCheckRecordMenuId, item.AntiCorrosionCheckId);
|
|
}
|
|
|
|
return Tuple.Create(data, total);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据防腐记录ID获取详情
|
|
/// </summary>
|
|
public static Model.AntiCorrosionCheckRecordItem GetAntiCorrosionCheckById(string antiCorrosionCheckId)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
var query = from r in db.HJGL_AntiCorrosionCheckRecord
|
|
join m in db.HJGL_MaterialCodeLib on r.MaterialCode equals m.MaterialCode into materialJoin
|
|
from m in materialJoin.DefaultIfEmpty()
|
|
join paint in db.Tw_PaintCodeDict on r.PaintId equals paint.Id into paintJoin
|
|
from paint in paintJoin.DefaultIfEmpty()
|
|
join person in db.Person_Persons on r.CheckPerson equals person.PersonId into personJoin
|
|
from person in personJoin.DefaultIfEmpty()
|
|
where r.AntiCorrosionCheckId == antiCorrosionCheckId
|
|
select new Model.AntiCorrosionCheckRecordItem
|
|
{
|
|
AntiCorrosionCheckId = r.AntiCorrosionCheckId,
|
|
ProjectId = r.ProjectId,
|
|
UnitWorkId = r.UnitWorkId,
|
|
MaterialId = r.MaterialId,
|
|
MaterialCode = r.MaterialCode,
|
|
MaterialName = m == null ? string.Empty : m.MaterialName,
|
|
MaterialSpec = m == null ? string.Empty : m.MaterialSpec,
|
|
MaterialMade = m == null ? string.Empty : m.MaterialMade,
|
|
MaterialDef = m == null ? string.Empty : m.MaterialDef,
|
|
MaterialUnit = m == null ? string.Empty : m.MaterialUnit,
|
|
HeatNo = m == null ? string.Empty : m.HeatNo,
|
|
BatchNo = m == null ? string.Empty : m.BatchNo,
|
|
Code = m == null ? string.Empty : m.Code,
|
|
AnticorrosionLevel = r.AnticorrosionLevel,
|
|
PaintId = r.PaintId,
|
|
PaintCode = paint == null ? string.Empty : paint.PaintCode,
|
|
Primer = paint == null ? string.Empty : paint.Primer,
|
|
IntermediatePaint = paint == null ? string.Empty : paint.IntermediatePaint,
|
|
Topcoat = paint == null ? string.Empty : paint.Topcoat,
|
|
ColorCode = paint == null ? string.Empty : paint.ColorCode,
|
|
FilmThickness = r.FilmThickness,
|
|
SandBlasting = r.SandBlasting,
|
|
RustSandBlasting = r.RustSandBlasting,
|
|
CheckResult = r.CheckResult,
|
|
CheckPerson = r.CheckPerson,
|
|
CheckPersonName = person == null ? string.Empty : person.PersonName,
|
|
CheckTime = r.CheckTime,
|
|
UnqualifiedReason = r.UnqualifiedReason,
|
|
RectifyRequirement = r.RectifyRequirement,
|
|
Remark = r.Remark,
|
|
CreateUser = r.CreateUser,
|
|
CreateTime = r.CreateTime
|
|
};
|
|
var item = query.FirstOrDefault();
|
|
if (item != null)
|
|
{
|
|
item.AttachUrl1 = GetInspectionAttachUrl(db, Const.Tw_AntiCorrosionCheckRecordMenuId, item.AntiCorrosionCheckId);
|
|
}
|
|
return item;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 按材料编码获取防腐记录列表
|
|
/// </summary>
|
|
public static List<Model.AntiCorrosionCheckRecordItem> GetAntiCorrosionChecksByMaterialCode(string materialCode, string projectId)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
var query = from r in db.HJGL_AntiCorrosionCheckRecord
|
|
join m in db.HJGL_MaterialCodeLib on r.MaterialCode equals m.MaterialCode into materialJoin
|
|
from m in materialJoin.DefaultIfEmpty()
|
|
join paint in db.Tw_PaintCodeDict on r.PaintId equals paint.Id into paintJoin
|
|
from paint in paintJoin.DefaultIfEmpty()
|
|
join person in db.Person_Persons on r.CheckPerson equals person.PersonId into personJoin
|
|
from person in personJoin.DefaultIfEmpty()
|
|
where r.MaterialCode == materialCode && (string.IsNullOrEmpty(projectId) || r.ProjectId == projectId)
|
|
orderby r.CheckTime descending
|
|
select new Model.AntiCorrosionCheckRecordItem
|
|
{
|
|
AntiCorrosionCheckId = r.AntiCorrosionCheckId,
|
|
ProjectId = r.ProjectId,
|
|
UnitWorkId = r.UnitWorkId,
|
|
MaterialId = r.MaterialId,
|
|
MaterialCode = r.MaterialCode,
|
|
MaterialName = m == null ? string.Empty : m.MaterialName,
|
|
MaterialSpec = m == null ? string.Empty : m.MaterialSpec,
|
|
MaterialMade = m == null ? string.Empty : m.MaterialMade,
|
|
MaterialDef = m == null ? string.Empty : m.MaterialDef,
|
|
MaterialUnit = m == null ? string.Empty : m.MaterialUnit,
|
|
HeatNo = m == null ? string.Empty : m.HeatNo,
|
|
BatchNo = m == null ? string.Empty : m.BatchNo,
|
|
Code = m == null ? string.Empty : m.Code,
|
|
AnticorrosionLevel = r.AnticorrosionLevel,
|
|
PaintId = r.PaintId,
|
|
PaintCode = paint == null ? string.Empty : paint.PaintCode,
|
|
Primer = paint == null ? string.Empty : paint.Primer,
|
|
IntermediatePaint = paint == null ? string.Empty : paint.IntermediatePaint,
|
|
Topcoat = paint == null ? string.Empty : paint.Topcoat,
|
|
ColorCode = paint == null ? string.Empty : paint.ColorCode,
|
|
FilmThickness = r.FilmThickness,
|
|
SandBlasting = r.SandBlasting,
|
|
RustSandBlasting = r.RustSandBlasting,
|
|
CheckResult = r.CheckResult,
|
|
CheckPerson = r.CheckPerson,
|
|
CheckPersonName = person == null ? string.Empty : person.PersonName,
|
|
CheckTime = r.CheckTime,
|
|
UnqualifiedReason = r.UnqualifiedReason,
|
|
RectifyRequirement = r.RectifyRequirement,
|
|
Remark = r.Remark,
|
|
CreateUser = r.CreateUser,
|
|
CreateTime = r.CreateTime
|
|
};
|
|
var data = query.ToList();
|
|
foreach (var item in data)
|
|
{
|
|
item.AttachUrl1 = GetInspectionAttachUrl(db, Const.Tw_AntiCorrosionCheckRecordMenuId, item.AntiCorrosionCheckId);
|
|
}
|
|
return data;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 按焊口获取防腐检查记录列表
|
|
/// </summary>
|
|
/// <param name="weldJointId"></param>
|
|
/// <returns></returns>
|
|
public static List<Model.AntiCorrosionCheckRecordItem> GetAntiCorrosionChecksByWeldJointId(string weldJointId)
|
|
{
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
|
|
var getweldJointPaintId=(from x in db.HJGL_WeldJoint
|
|
join y in db.HJGL_Pipeline on x.PipelineId equals y.PipelineId
|
|
where x.WeldJointId == weldJointId
|
|
select y.PaintId).FirstOrDefault();
|
|
var getweldJointMaterialCode = (from x in db.HJGL_PipeLineMat
|
|
where x.WeldJointId == weldJointId
|
|
select x.MaterialCode).FirstOrDefault();
|
|
var query = from r in db.HJGL_AntiCorrosionCheckRecord
|
|
join m in db.HJGL_MaterialCodeLib on r.MaterialCode equals m.MaterialCode into materialJoin
|
|
from m in materialJoin.DefaultIfEmpty()
|
|
join paint in db.Tw_PaintCodeDict on r.PaintId equals paint.Id into paintJoin
|
|
from paint in paintJoin.DefaultIfEmpty()
|
|
join person in db.Person_Persons on r.CheckPerson equals person.PersonId into personJoin
|
|
from person in personJoin.DefaultIfEmpty()
|
|
join weldmat in db.HJGL_PipeLineMat on r.MaterialCode equals weldmat.MaterialCode into weldJoin
|
|
from weldmat in weldJoin.DefaultIfEmpty()
|
|
where weldmat.WeldJointId == weldJointId && (string.IsNullOrEmpty(getweldJointPaintId) || r.PaintId == getweldJointPaintId)
|
|
orderby r.CheckTime descending
|
|
select new Model.AntiCorrosionCheckRecordItem
|
|
{
|
|
AntiCorrosionCheckId = r.AntiCorrosionCheckId,
|
|
ProjectId = r.ProjectId,
|
|
UnitWorkId = r.UnitWorkId,
|
|
MaterialId = r.MaterialId,
|
|
MaterialCode = r.MaterialCode,
|
|
MaterialName = m == null ? string.Empty : m.MaterialName,
|
|
MaterialSpec = m == null ? string.Empty : m.MaterialSpec,
|
|
MaterialMade = m == null ? string.Empty : m.MaterialMade,
|
|
MaterialDef = m == null ? string.Empty : m.MaterialDef,
|
|
MaterialUnit = m == null ? string.Empty : m.MaterialUnit,
|
|
HeatNo = m == null ? string.Empty : m.HeatNo,
|
|
BatchNo = m == null ? string.Empty : m.BatchNo,
|
|
Code = m == null ? string.Empty : m.Code,
|
|
AnticorrosionLevel = r.AnticorrosionLevel,
|
|
PaintId = r.PaintId,
|
|
PaintCode = paint == null ? string.Empty : paint.PaintCode,
|
|
Primer = paint == null ? string.Empty : paint.Primer,
|
|
IntermediatePaint = paint == null ? string.Empty : paint.IntermediatePaint,
|
|
Topcoat = paint == null ? string.Empty : paint.Topcoat,
|
|
ColorCode = paint == null ? string.Empty : paint.ColorCode,
|
|
FilmThickness = r.FilmThickness,
|
|
SandBlasting = r.SandBlasting,
|
|
RustSandBlasting = r.RustSandBlasting,
|
|
CheckResult = r.CheckResult,
|
|
CheckPerson = r.CheckPerson,
|
|
CheckPersonName = person == null ? string.Empty : person.PersonName,
|
|
CheckTime = r.CheckTime,
|
|
UnqualifiedReason = r.UnqualifiedReason,
|
|
RectifyRequirement = r.RectifyRequirement,
|
|
Remark = r.Remark,
|
|
CreateUser = r.CreateUser,
|
|
CreateTime = r.CreateTime
|
|
};
|
|
var data = query.ToList();
|
|
foreach (var item in data)
|
|
{
|
|
item.AttachUrl1 = GetInspectionAttachUrl(db, Const.Tw_AntiCorrosionCheckRecordMenuId, item.AntiCorrosionCheckId);
|
|
}
|
|
return data;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存防腐检查,始终新增一条历史记录
|
|
/// </summary>
|
|
public static string SaveAntiCorrosionCheck(Model.AntiCorrosionCheckRecordInput item)
|
|
{
|
|
if (item == null)
|
|
{
|
|
throw new ArgumentNullException("item");
|
|
}
|
|
if (string.IsNullOrEmpty(item.MaterialCode))
|
|
{
|
|
throw new ArgumentException("材料编码不能为空。");
|
|
}
|
|
if (string.IsNullOrEmpty(item.PaintId))
|
|
{
|
|
throw new ArgumentException("防腐代码不能为空。");
|
|
}
|
|
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
{
|
|
if (!db.Tw_PaintCodeDict.Any(x => x.Id == item.PaintId && x.IsUsed))
|
|
{
|
|
throw new ArgumentException("防腐代码不存在或已停用。");
|
|
}
|
|
|
|
var check = string.IsNullOrEmpty(item.AntiCorrosionCheckId)
|
|
? null
|
|
: db.HJGL_AntiCorrosionCheckRecord.FirstOrDefault(x => x.AntiCorrosionCheckId == item.AntiCorrosionCheckId);
|
|
if (check == null)
|
|
{
|
|
check = new Model.HJGL_AntiCorrosionCheckRecord
|
|
{
|
|
AntiCorrosionCheckId = string.IsNullOrEmpty(item.AntiCorrosionCheckId) ? Guid.NewGuid().ToString() : item.AntiCorrosionCheckId,
|
|
CreateTime = DateTime.Now
|
|
};
|
|
db.HJGL_AntiCorrosionCheckRecord.InsertOnSubmit(check);
|
|
}
|
|
|
|
var materialId = item.MaterialId;
|
|
|
|
check.ProjectId = item.ProjectId;
|
|
check.MaterialId = materialId;
|
|
check.MaterialCode = item.MaterialCode;
|
|
check.AnticorrosionLevel = item.AnticorrosionLevel;
|
|
check.PaintId = item.PaintId;
|
|
check.FilmThickness = item.FilmThickness;
|
|
check.SandBlasting = item.SandBlasting;
|
|
check.RustSandBlasting = item.RustSandBlasting;
|
|
check.CheckResult = item.CheckResult;
|
|
check.CheckPerson = item.CheckPerson;
|
|
check.CheckTime = item.CheckTime ?? DateTime.Now;
|
|
check.UnqualifiedReason = item.UnqualifiedReason;
|
|
check.RectifyRequirement = item.RectifyRequirement;
|
|
check.Remark = item.Remark;
|
|
check.CreateUser = string.IsNullOrEmpty(item.CreateUser) ? item.CheckPerson : item.CreateUser;
|
|
db.SubmitChanges();
|
|
SaveInspectionAttachUrl(item.AttachUrl1, Const.Tw_AntiCorrosionCheckRecordMenuId, check.AntiCorrosionCheckId);
|
|
return check.AntiCorrosionCheckId;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存检查附件
|
|
/// </summary>
|
|
private static void SaveInspectionAttachUrl(string attachUrl, string menuId, string dataId)
|
|
{
|
|
if (attachUrl == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(attachUrl))
|
|
{
|
|
UploadFileService.SaveAttachUrl(UploadFileService.GetSourceByAttachUrl(attachUrl, 10, null), attachUrl, menuId, dataId);
|
|
}
|
|
else
|
|
{
|
|
CommonService.DeleteAttachFileById(menuId, dataId);
|
|
}
|
|
}
|
|
|
|
private static void SaveCuttingMaterialSnapshots(Model.SGGLDB db, Model.HJGL_PreWeldCuttingCheck check,
|
|
IList<Model.PreWeldCuttingMaterialInput> materials)
|
|
{
|
|
var currentMaterials = db.HJGL_PipeLineMat
|
|
.Where(x => x.WeldJointId == check.WeldJointId)
|
|
.OrderBy(x => x.PipeLineMatId)
|
|
.ToList();
|
|
var inputs = materials ?? currentMaterials.Select((x, index) => new Model.PreWeldCuttingMaterialInput
|
|
{
|
|
PipeLineMatId = x.PipeLineMatId,
|
|
MaterialSide = index + 1,
|
|
ReportedMainCode = x.MaterialCode
|
|
}).ToList();
|
|
|
|
var existing = db.HJGL_PreWeldCuttingCheckMaterial
|
|
.Where(x => x.CuttingCheckId == check.CuttingCheckId)
|
|
.ToList();
|
|
var originalCodeMap = existing.GroupBy(x => x.PipeLineMatId)
|
|
.ToDictionary(x => x.Key, x => x.First().OriginalMainCode);
|
|
db.HJGL_PreWeldCuttingCheckMaterial.DeleteAllOnSubmit(existing);
|
|
|
|
int side = 0;
|
|
foreach (var input in inputs)
|
|
{
|
|
side++;
|
|
var material = currentMaterials.FirstOrDefault(x => x.PipeLineMatId == input.PipeLineMatId);
|
|
if (material == null)
|
|
{
|
|
throw new ArgumentException("反馈材料不属于当前焊口。");
|
|
}
|
|
string reportedMainCode = string.IsNullOrWhiteSpace(input.ReportedMainCode)
|
|
? material.MaterialCode
|
|
: input.ReportedMainCode.Trim();
|
|
db.HJGL_PreWeldCuttingCheckMaterial.InsertOnSubmit(new Model.HJGL_PreWeldCuttingCheckMaterial
|
|
{
|
|
CuttingCheckMaterialId = Guid.NewGuid().ToString(),
|
|
CuttingCheckId = check.CuttingCheckId,
|
|
PipeLineMatId = material.PipeLineMatId,
|
|
MaterialSide = input.MaterialSide > 0 ? input.MaterialSide : side,
|
|
// 专项审核再次保存时保留首次提交快照,避免原始主编码被当前正式数据覆盖。
|
|
OriginalMainCode = originalCodeMap.ContainsKey(material.PipeLineMatId)
|
|
? originalCodeMap[material.PipeLineMatId]
|
|
: material.MaterialCode,
|
|
ReportedMainCode = reportedMainCode,
|
|
IsBatchChanged = !string.Equals(material.MaterialCode, reportedMainCode, StringComparison.OrdinalIgnoreCase)
|
|
});
|
|
}
|
|
}
|
|
|
|
private static void SyncCuttingReviewTodo(Model.SGGLDB db, Model.HJGL_PreWeldCuttingCheck check, string creator)
|
|
{
|
|
var todos = db.Workflow_TodoItems.Where(x => x.FlowId == check.CuttingCheckId
|
|
&& x.WorkflowName == "下料抽检专项审核").ToList();
|
|
db.Workflow_TodoItems.DeleteAllOnSubmit(todos);
|
|
if (check.ReviewState != CuttingReviewPending)
|
|
{
|
|
return;
|
|
}
|
|
|
|
db.Workflow_TodoItems.InsertOnSubmit(new Model.Workflow_TodoItems
|
|
{
|
|
Id = SQLHelper.GetNewID(),
|
|
SysCode = WorkflowTodoitemsService.SysCode,
|
|
FlowId = check.CuttingCheckId,
|
|
RequestName = "下料抽检结果不准确,请专项审核",
|
|
WorkflowName = "下料抽检专项审核",
|
|
NodeName = "专项审核",
|
|
PCUrl = "HJGL/PreWeld/CuttingCheckEdit.aspx?CuttingCheckId=" + check.CuttingCheckId + "&review=1",
|
|
AppUrl = "/pages/hjgl/preWeld/cuttingCheckReview?cuttingCheckId=" + check.CuttingCheckId,
|
|
Creator = creator,
|
|
CreateDateTime = DateTime.Now,
|
|
Receiver = check.SpecialReviewerId,
|
|
ReceiveDateTime = DateTime.Now,
|
|
Status = (int)WorkflowTodoitemsService.Status.待办
|
|
});
|
|
}
|
|
|
|
private static void CompleteCuttingReviewTodo(Model.SGGLDB db, string cuttingCheckId, string reviewerId)
|
|
{
|
|
var todo = db.Workflow_TodoItems.FirstOrDefault(x => x.FlowId == cuttingCheckId
|
|
&& x.Receiver == reviewerId
|
|
&& x.WorkflowName == "下料抽检专项审核"
|
|
&& x.Status == (int)WorkflowTodoitemsService.Status.待办);
|
|
if (todo != null)
|
|
{
|
|
todo.Status = (int)WorkflowTodoitemsService.Status.已办;
|
|
}
|
|
}
|
|
|
|
private static void PopulateCuttingCheckDetails(Model.SGGLDB db, IList<Model.PreWeldCuttingCheckItem> data)
|
|
{
|
|
if (data == null || data.Count == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var ids = data.Select(x => x.CuttingCheckId).ToList();
|
|
var snapshots = db.HJGL_PreWeldCuttingCheckMaterial
|
|
.Where(x => ids.Contains(x.CuttingCheckId))
|
|
.ToList();
|
|
var personIds = data.SelectMany(x => new[] { x.SpecialReviewerId, x.ReviewerId })
|
|
.Where(x => !string.IsNullOrEmpty(x)).Distinct().ToList();
|
|
var personNames = db.Person_Persons.Where(x => personIds.Contains(x.PersonId))
|
|
.ToDictionary(x => x.PersonId, x => x.PersonName);
|
|
|
|
foreach (var item in data)
|
|
{
|
|
item.AttachUrl1 = GetInspectionAttachUrl(db, Const.HJGL_PreWeldCuttingCheckMenuId, item.CuttingCheckId);
|
|
item.ReviewStateText = item.ReviewState == CuttingReviewPending
|
|
? "待专项审核"
|
|
: item.ReviewState == CuttingReviewApproved ? "专项审核完成" : "普通完成";
|
|
string name;
|
|
item.SpecialReviewerName = personNames.TryGetValue(item.SpecialReviewerId ?? string.Empty, out name) ? name : string.Empty;
|
|
item.ReviewerName = personNames.TryGetValue(item.ReviewerId ?? string.Empty, out name) ? name : string.Empty;
|
|
item.Materials = snapshots.Where(x => x.CuttingCheckId == item.CuttingCheckId)
|
|
.OrderBy(x => x.MaterialSide)
|
|
.Select(x => new Model.PreWeldCuttingMaterialItem
|
|
{
|
|
PipeLineMatId = x.PipeLineMatId,
|
|
MaterialSide = x.MaterialSide,
|
|
OriginalMainCode = x.OriginalMainCode,
|
|
ReportedMainCode = x.ReportedMainCode,
|
|
IsBatchChanged = x.IsBatchChanged
|
|
}).ToList();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据菜单和记录ID获取检查附件地址
|
|
/// </summary>
|
|
private static string GetInspectionAttachUrl(Model.SGGLDB db, string menuId, string dataId)
|
|
{
|
|
var attachUrl = db.AttachFile
|
|
.Where(x => x.MenuId == menuId && x.ToKeyId == dataId)
|
|
.Select(x => x.AttachUrl)
|
|
.FirstOrDefault();
|
|
return string.IsNullOrEmpty(attachUrl) ? attachUrl : attachUrl.Replace('\\', '/');
|
|
}
|
|
}
|
|
}
|