SGGL_SHJ/SGGL/FineUIPro.Web/HJGL/PreDesign/PrePipelineComponentJointIn...

337 lines
14 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<ComponentJointImportItem> ComponentJointList = new List<ComponentJointImportItem>();
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<string> result = new List<string>();
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<ComponentJointImportItem> importItems = new List<ComponentJointImportItem>();
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; }
}
}
}