using System; using System.Collections.Generic; using System.Linq; namespace BLL { /// /// 焊缝外观检测业务服务。 /// public static class WeldAppearanceCheckService { /// /// 分页查询焊缝外观检测记录。 /// /// 项目ID。 /// 管线号查询条件。 /// 焊口号查询条件。 /// 合格状态,1为合格,0为不合格,空为全部。 /// 页码,从0开始。 /// 每页记录数。 /// 外观检测记录及总记录数。 public static Tuple, int> GetList(string projectId, string pipelineCode, string weldJointCode, string qualified, int pageIndex, int pageSize) { var db = Funs.DB; var query = from c in db.HJGL_WeldAppearanceCheck 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 select new { c, w, CheckPersonName = p == null ? string.Empty : p.PersonName }; if (!string.IsNullOrWhiteSpace(pipelineCode)) { query = query.Where(x => x.w.PipelineCode.Contains(pipelineCode)); } if (!string.IsNullOrWhiteSpace(weldJointCode)) { query = query.Where(x => x.w.WeldJointCode.Contains(weldJointCode)); } if (qualified == "1" || qualified == "0") { bool isQualified = qualified == "1"; query = query.Where(x => x.c.IsQualified == isQualified); } int total = query.Count(); var data = query.OrderByDescending(x => x.c.CheckTime) .ThenByDescending(x => x.c.CreateTime) .Skip(pageIndex * pageSize) .Take(pageSize) .Select(x => new Model.WeldAppearanceCheckItem { AppearanceCheckId = x.c.AppearanceCheckId, ProjectId = x.c.ProjectId, WeldJointId = x.c.WeldJointId, PipelineCode = x.w.PipelineCode, WeldJointCode = x.w.WeldJointCode, IsQualified = x.c.IsQualified, QualifiedText = x.c.IsQualified ? "合格" : "不合格", CheckPerson = x.c.CheckPerson, CheckPersonName = x.CheckPersonName, CheckTime = x.c.CheckTime, Remark = x.c.Remark, CreateTime = x.c.CreateTime }).ToList(); PopulateAttachUrls(data); return Tuple.Create(data, total); } /// /// 分页查询当前项目中已焊接的焊口。 /// /// 项目ID。 /// 管线号查询条件。 /// 焊口号查询条件。 /// 页码,从0开始。 /// 每页记录数。 /// 已焊接焊口列表。 public static List GetWeldedJoints(string projectId, string pipelineCode, string weldJointCode, int pageIndex, int pageSize) { var db = Funs.DB; var query = db.View_HJGL_WeldJoint.Where(x => x.ProjectId == projectId && x.WeldingDailyId != null); if (!string.IsNullOrWhiteSpace(pipelineCode)) { query = query.Where(x => x.PipelineCode.Contains(pipelineCode)); } if (!string.IsNullOrWhiteSpace(weldJointCode)) { query = query.Where(x => x.WeldJointCode.Contains(weldJointCode)); } return query.OrderBy(x => x.PipelineCode).ThenBy(x => x.WeldJointCode) .Skip(pageIndex * pageSize).Take(pageSize) .Select(x => new Model.WeldAppearanceJointItem { WeldJointId = x.WeldJointId, ProjectId = x.ProjectId, PipelineCode = x.PipelineCode, WeldJointCode = x.WeldJointCode, WeldTypeCode = x.WeldTypeCode, WeldingMethodCode = x.WeldingMethodCode, WeldingDate = x.WeldingDateD }).ToList(); } /// /// 查询焊口基础信息及历史外观检测记录。 /// /// 焊口ID。 /// 焊口详情及外观检测历史。 public static Model.WeldAppearanceJointItem GetJointDetail(string weldJointId) { var db = Funs.DB; var joint = db.View_HJGL_WeldJoint.Where(x => x.WeldJointId == weldJointId) .Select(x => new Model.WeldAppearanceJointItem { WeldJointId = x.WeldJointId, ProjectId = x.ProjectId, PipelineCode = x.PipelineCode, WeldJointCode = x.WeldJointCode, WeldTypeCode = x.WeldTypeCode, WeldingMethodCode = x.WeldingMethodCode, WeldingDate = x.WeldingDateD }).FirstOrDefault(); if (joint != null) { joint.History = GetHistory(weldJointId); } return joint; } /// /// 根据记录ID查询焊缝外观检测记录。 /// /// 外观检测记录ID。 /// 焊缝外观检测记录。 public static Model.WeldAppearanceCheckItem GetById(string appearanceCheckId) { var item = GetHistoryQuery().FirstOrDefault(x => x.AppearanceCheckId == appearanceCheckId); if (item != null) { item.AttachUrl = GetAttachUrl(item.AppearanceCheckId); } return item; } /// /// 新增或修改焊缝外观检测记录。 /// /// 外观检测结果及附件信息。 /// 外观检测记录ID。 public static string Save(Model.WeldAppearanceCheckInput item) { if (item == null || string.IsNullOrWhiteSpace(item.WeldJointId)) { throw new ArgumentException("焊口不能为空。"); } var db = Funs.DB; var joint = db.HJGL_WeldJoint.FirstOrDefault(x => x.WeldJointId == item.WeldJointId); if (joint == null || joint.WeldingDailyId == null) { throw new ArgumentException("只能对已焊接焊口进行外观检测。"); } string id = string.IsNullOrWhiteSpace(item.AppearanceCheckId) ? Guid.NewGuid().ToString() : item.AppearanceCheckId; var check = db.HJGL_WeldAppearanceCheck.FirstOrDefault(x => x.AppearanceCheckId == id); bool hasExistingPhoto = db.AttachFile.Any(x => x.MenuId == Const.HJGL_WeldAppearanceCheckMenuId && x.ToKeyId == id); if (string.IsNullOrWhiteSpace(item.AttachUrl) && !hasExistingPhoto) { throw new ArgumentException("请至少上传一张外观检测照片。"); } if (check == null) { check = new Model.HJGL_WeldAppearanceCheck { AppearanceCheckId = id, CreateTime = DateTime.Now, CreateUser = string.IsNullOrEmpty(item.CreateUser) ? item.CheckPerson : item.CreateUser }; db.HJGL_WeldAppearanceCheck.InsertOnSubmit(check); } else { check.ModifyUser = string.IsNullOrEmpty(item.CreateUser) ? item.CheckPerson : item.CreateUser; check.ModifyTime = DateTime.Now; } check.ProjectId = string.IsNullOrEmpty(item.ProjectId) ? joint.ProjectId : item.ProjectId; check.WeldJointId = item.WeldJointId; check.IsQualified = item.IsQualified; check.CheckPerson = item.CheckPerson; check.CheckTime = item.CheckTime ?? DateTime.Now; check.Remark = item.Remark; db.SubmitChanges(); if (!string.IsNullOrWhiteSpace(item.AttachUrl)) { UploadFileService.SaveAttachUrl(UploadFileService.GetSourceByAttachUrl(item.AttachUrl, 10, null), item.AttachUrl, Const.HJGL_WeldAppearanceCheckMenuId, id); } return id; } /// /// 删除焊缝外观检测记录及其附件。 /// /// 外观检测记录ID。 public static void Delete(string appearanceCheckId) { var db = Funs.DB; var check = db.HJGL_WeldAppearanceCheck.FirstOrDefault(x => x.AppearanceCheckId == appearanceCheckId); if (check == null) { return; } db.HJGL_WeldAppearanceCheck.DeleteOnSubmit(check); db.SubmitChanges(); CommonService.DeleteAttachFileById(Const.HJGL_WeldAppearanceCheckMenuId, appearanceCheckId); } /// /// 查询指定焊口的历史外观检测记录。 /// /// 焊口ID。 /// 按检测时间倒序排列的历史记录。 private static List GetHistory(string weldJointId) { var data = GetHistoryQuery().Where(x => x.WeldJointId == weldJointId) .OrderByDescending(x => x.CheckTime).ThenByDescending(x => x.CreateTime).ToList(); PopulateAttachUrls(data); return data; } /// /// 构建焊缝外观检测记录查询。 /// /// 焊缝外观检测记录查询对象。 private static IQueryable GetHistoryQuery() { var db = Funs.DB; return from c in db.HJGL_WeldAppearanceCheck 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() select new Model.WeldAppearanceCheckItem { AppearanceCheckId = c.AppearanceCheckId, ProjectId = c.ProjectId, WeldJointId = c.WeldJointId, PipelineCode = w.PipelineCode, WeldJointCode = w.WeldJointCode, IsQualified = c.IsQualified, QualifiedText = c.IsQualified ? "合格" : "不合格", CheckPerson = c.CheckPerson, CheckPersonName = p == null ? string.Empty : p.PersonName, CheckTime = c.CheckTime, Remark = c.Remark, CreateTime = c.CreateTime }; } /// /// 为外观检测记录补充附件地址。 /// /// 外观检测记录。 private static void PopulateAttachUrls(IList data) { foreach (var item in data) { item.AttachUrl = GetAttachUrl(item.AppearanceCheckId); } } /// /// 查询外观检测记录的附件地址。 /// /// 外观检测记录ID。 /// 附件地址。 private static string GetAttachUrl(string id) { var db = Funs.DB; var url = db.AttachFile.Where(x => x.MenuId == Const.HJGL_WeldAppearanceCheckMenuId && x.ToKeyId == id) .Select(x => x.AttachUrl).FirstOrDefault(); return string.IsNullOrEmpty(url) ? url : url.Replace('\\', '/'); } } }