using BLL; using MiniExcelLibs; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; namespace FineUIPro.Web.HJGL.PreDesign { public partial class PrePipelineComponentJointIn : PageBase { private string initPath = Const.ExcelUrl; public static List ComponentJointList = new List(); public static string errorInfos = string.Empty; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.hdFileName.Text = string.Empty; if (ComponentJointList != null) { ComponentJointList.Clear(); } errorInfos = string.Empty; } } protected void btnAudit_Click(object sender, EventArgs e) { try { if (this.fuAttachUrl.HasFile == false) { ShowNotify("请您选择Excel文件!", MessageBoxIcon.Warning); return; } string isXls = Path.GetExtension(this.fuAttachUrl.FileName).ToString().Trim().ToLower(); if (isXls != ".xlsx") { ShowNotify("只可以选择Excel文件!", MessageBoxIcon.Warning); return; } ComponentJointList.Clear(); errorInfos = string.Empty; string rootPath = Server.MapPath("~/"); string initFullPath = rootPath + initPath; if (!Directory.Exists(initFullPath)) { Directory.CreateDirectory(initFullPath); } this.hdFileName.Text = BLL.Funs.GetNewFileName() + isXls; string filePath = initFullPath + this.hdFileName.Text; this.fuAttachUrl.PostedFile.SaveAs(filePath); ImportXlsToData(filePath); } catch (Exception ex) { Alert alert = new Alert { Message = "'" + ex.Message + "'", Target = Target.Self }; alert.Show(); } } private void ImportXlsToData(string fileName) { var rows = MiniExcel.QueryAsDataTable(fileName, useHeaderRow: true); Model.ResponeData responeData = AddDatasetToSQL(rows, 3); if (responeData.code == 1) { ShowNotify("审核完成,请点击导入!", MessageBoxIcon.Success); } else { Alert alert = new Alert { Message = responeData.message, Target = Target.Self }; alert.Show(); } } private Model.ResponeData AddDatasetToSQL(DataTable pds, int cols) { Model.ResponeData responeData = new Model.ResponeData(); List result = new List(); if (pds == null) { responeData.code = 0; responeData.message = "导入数据为空!"; return responeData; } int ic = pds.Columns.Count; int ir = pds.Rows.Count; if (ic < cols || !pds.Columns.Contains("管线号") || !pds.Columns.Contains("预制组件") || !pds.Columns.Contains("焊口号")) { responeData.code = 0; responeData.message = "导入Excel格式错误!模板列必须包含:管线号、预制组件、焊口号"; return responeData; } if (ir == 0) { responeData.code = 0; responeData.message = "导入数据为空!"; return responeData; } var getPipeline = from x in Funs.DB.HJGL_Pipeline where x.ProjectId == this.CurrUser.LoginProjectId select x; List importItems = new List(); for (int i = 0; i < ir; i++) { string pipelineCode = GetCellValue(pds.Rows[i], "管线号"); string pipelineComponentCode = GetCellValue(pds.Rows[i], "预制组件"); string weldJointCode = GetCellValue(pds.Rows[i], "焊口号"); if (string.IsNullOrEmpty(pipelineCode) && string.IsNullOrEmpty(pipelineComponentCode) && string.IsNullOrEmpty(weldJointCode)) { continue; } if (string.IsNullOrEmpty(pipelineCode)) { result.Add("第" + (i + 2).ToString() + "行,管线号,此项为必填项!"); continue; } if (string.IsNullOrEmpty(pipelineComponentCode)) { result.Add("第" + (i + 2).ToString() + "行,预制组件,此项为必填项!"); continue; } if (string.IsNullOrEmpty(weldJointCode)) { result.Add("第" + (i + 2).ToString() + "行,焊口号,此项为必填项!"); continue; } var pipeline = getPipeline.FirstOrDefault(x => x.PipelineCode == pipelineCode); if (pipeline == null) { result.Add("第" + (i + 2).ToString() + "行,不存在此管线号-" + pipelineCode); continue; } var pipelineComponent = HJGL_PipelineComponentService.GetPipelineComponentByCodeandpipelineId(pipelineComponentCode, pipeline.PipelineId); if (pipelineComponent == null) { result.Add("第" + (i + 2).ToString() + "行,不存在此预制组件-" + pipelineComponentCode); continue; } var weldJoint = WeldJointService.GetWeldJointsByWeldJointCode(pipeline.PipelineId, weldJointCode); if (weldJoint == null) { result.Add("第" + (i + 2).ToString() + "行,不存在此焊口号-" + weldJointCode); continue; } importItems.Add(new ComponentJointImportItem { PipelineId = pipeline.PipelineId, PipelineCode = pipeline.PipelineCode, PipelineComponentId = pipelineComponent.PipelineComponentId, PipelineComponentCode = pipelineComponent.PipelineComponentCode, WeldJointId = weldJoint.WeldJointId, WeldJointCode = weldJoint.WeldJointCode }); } var conflictWeldJoints = importItems .GroupBy(x => x.WeldJointId) .Where(x => x.Select(y => y.PipelineComponentId).Distinct().Count() > 1) .Select(x => x.First().PipelineCode + "-" + x.First().WeldJointCode) .ToList(); if (conflictWeldJoints.Count > 0) { result.Add("同一焊口不能导入到多个组件:" + string.Join("、", conflictWeldJoints)); } if (result.Count > 0) { ComponentJointList.Clear(); errorInfos = string.Join("|", result.Distinct()); responeData.code = 0; responeData.message = errorInfos; return responeData; } ComponentJointList = importItems .GroupBy(x => new { x.PipelineComponentId, x.WeldJointId }) .Select(x => x.First()) .ToList(); errorInfos = string.Empty; responeData.code = ComponentJointList.Count > 0 ? 1 : 0; responeData.message = ComponentJointList.Count > 0 ? string.Empty : "导入数据为空!"; return responeData; } protected void btnImport_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(errorInfos)) { if (!string.IsNullOrEmpty(this.hdFileName.Text)) { if (ComponentJointList.Count > 0) { this.Grid1.Hidden = false; this.Grid1.DataIDField = "WeldJointId"; this.Grid1.DataSource = ComponentJointList; this.Grid1.DataBind(); Grid1.RecordCount = ComponentJointList.Count; } } else { ShowNotify("请先审核要导入的文件!", MessageBoxIcon.Warning); } } else { ShowNotify("请先将错误数据修正,再重新导入提交!", MessageBoxIcon.Warning); } } protected void btnSave_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(errorInfos)) { ShowNotify("请先将错误数据修正,再重新导入提交!", MessageBoxIcon.Warning); return; } if (ComponentJointList.Count > 0) { foreach (var item in ComponentJointList) { var componentJoint = BLL.HJGL_PipelineComponentjointService.GetHJGL_Pipeline_ComponentJointByWeldJointId(item.WeldJointId); if (componentJoint != null) { componentJoint.PipelineComponentCode = item.PipelineComponentCode; componentJoint.PipelineComponentId = item.PipelineComponentId; componentJoint.WeldJointCode = item.WeldJointCode; componentJoint.WeldJointId = item.WeldJointId; HJGL_PipelineComponentjointService.UpdateHJGL_Pipeline_ComponentJoint(componentJoint); } else { Model.HJGL_Pipeline_ComponentJoint newComponentJoint = new Model.HJGL_Pipeline_ComponentJoint(); newComponentJoint.Id = SQLHelper.GetNewID(); newComponentJoint.PipelineComponentCode = item.PipelineComponentCode; newComponentJoint.PipelineComponentId = item.PipelineComponentId; newComponentJoint.WeldJointCode = item.WeldJointCode; newComponentJoint.WeldJointId = item.WeldJointId; newComponentJoint.State = 0; HJGL_PipelineComponentjointService.AddHJGL_Pipeline_ComponentJoint(newComponentJoint); } } } string rootPath = Server.MapPath("~/"); string filePath = rootPath + initPath + this.hdFileName.Text; if (filePath != string.Empty && System.IO.File.Exists(filePath)) { System.IO.File.Delete(filePath); } ShowNotify("导入成功!", MessageBoxIcon.Success); PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference()); } protected void btnDownLoad_Click(object sender, EventArgs e) { string rootPath = Server.MapPath("~/"); string tempDirectory = rootPath + @"File\Excel\Temp\"; if (!Directory.Exists(tempDirectory)) { Directory.CreateDirectory(tempDirectory); } string tempPath = tempDirectory + "组件焊口信息导入模板" + string.Format("{0:yyyyMMddHHmmss}", DateTime.Now) + ".xlsx"; DataTable template = new DataTable(); template.Columns.Add("管线号"); template.Columns.Add("预制组件"); template.Columns.Add("焊口号"); MiniExcel.SaveAs(tempPath, template); FileInfo info = new FileInfo(tempPath); long fileSize = info.Length; Response.ClearContent(); Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("组件焊口信息导入模板.xlsx", System.Text.Encoding.UTF8)); Response.ContentType = "excel/plain"; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.AddHeader("Content-Length", fileSize.ToString().Trim()); Response.TransmitFile(tempPath, 0, fileSize); Response.Flush(); Response.Close(); File.Delete(tempPath); } protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) { Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); this.Grid1.DataSource = ComponentJointList; this.Grid1.DataBind(); Grid1.RecordCount = ComponentJointList.Count; } private string GetCellValue(DataRow row, string columnName) { return Convert.ToString(row[columnName]).Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "").Trim(); } public class ComponentJointImportItem { public string PipelineId { get; set; } public string PipelineCode { get; set; } public string PipelineComponentId { get; set; } public string PipelineComponentCode { get; set; } public string WeldJointId { get; set; } public string WeldJointCode { get; set; } } } }