using BLL; using BLL.Common; using Model; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; namespace FineUIPro.Web.EditorManage { public partial class CostReportIn : PageBase { #region 定义项 /// /// 上传预设的虚拟路径 /// private string initPath = Const.ExcelUrl; /// /// 错误集合 /// public static string errorInfos = string.Empty; #endregion #region 加载 /// /// 加载页面 /// /// /// protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { } } #endregion #region 模板下载 /// /// 模板下载 /// /// /// protected void btnDownLoad_Click(object sender, EventArgs e) { PageContext.RegisterStartupScript(Confirm.GetShowReference("Are you sure to download the import template?", String.Empty, MessageBoxIcon.Question, PageManager1.GetCustomEventReference(false, "Confirm_OK"), PageManager1.GetCustomEventReference("Confirm_Cancel"))); } /// /// 下载导入模板 /// /// /// protected void PageManager1_CustomEvent(object sender, CustomEventArgs e) { if (e.EventArgument == "Confirm_OK") { string rootPath = Server.MapPath("~/"); string uploadfilepath = rootPath + Const.CostReportTemplateUrl; string filePath = Const.CostReportTemplateUrl; string fileName = Path.GetFileName(filePath); FileInfo info = new FileInfo(uploadfilepath); long fileSize = info.Length; Response.ClearContent(); Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); Response.ContentType = "excel/plain"; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.AddHeader("Content-Length", fileSize.ToString().Trim()); Response.TransmitFile(uploadfilepath, 0, fileSize); Response.End(); } } #endregion #region 导入 /// /// 导入 /// /// /// protected void btnImport_Click(object sender, EventArgs e) { string message = string.Empty; errorInfos = string.Empty; List costReportLists = new List(); try { if (this.fuAttachUrl.HasFile == false) { ShowNotify("Please select Excel file!", MessageBoxIcon.Warning); return; } string IsXls = Path.GetExtension(this.fuAttachUrl.FileName).ToString().Trim().ToLower(); if (IsXls != ".xls" && IsXls != ".xlsx") { ShowNotify("Only Excel files can be selected!", MessageBoxIcon.Warning); return; } if (costReportLists != null) { costReportLists.Clear(); } if (!string.IsNullOrEmpty(errorInfos)) { 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); //文件上传服务器后的名称 string fileName = rootPath + initPath + this.hdFileName.Text; //读取Excel DataSet ds = NPOIHelper.ExcelToDataSet(fileName, out errorInfos, true); //验证Excel读取是否有误 if (!string.IsNullOrEmpty(errorInfos)) { ShowNotify(errorInfos, MessageBoxIcon.Warning); return; } DataRow[] dv =ds.Tables[0].Select("Month <>'' and JOB_NO <>''"); //导入数据库 if (dv.Length> 0) { for (int i = 0; i < dv.Length; i++) { Editor_CostReport costReport = new Editor_CostReport(); #region 数据验证和赋值 if (dv[i]["Month"] != null && !string.IsNullOrEmpty(dv[i]["Month"].ToString())) { try { costReport.Monthly = DateTime.ParseExact(dv[i]["Month"].ToString(), "yyyyMM", null).ToString("yyyyMM"); } catch (Exception) { errorInfos += (i + 2) + "line,[Month]Must be in datetime format
"; } } else { errorInfos += (i + 2) + "Line, [Month] cannot be empty
"; } if (dv[i]["JOB_NO"] != null && !string.IsNullOrEmpty(dv[i]["JOB_NO"].ToString())) { var eproject = BLL.EProjectService.GeteProjectByJobNO(dv[i]["JOB_NO"].ToString()); if (eproject != null) { costReport.EProjectId = eproject.EProjectId; } else { errorInfos += (i + 2) + "Line, [JOB_NO] not exist
"; } } else { errorInfos += (i + 2) + "Line, [JOB_NO] cannot be empty
"; } if (dv[i]["BUDGET_ORG"] != null && !string.IsNullOrEmpty(dv[i]["BUDGET_ORG"].ToString())) { try { costReport.OrginalBudget = Funs.GetNewDecimalOrZero(dv[i]["BUDGET_ORG"].ToString()); } catch (Exception) { errorInfos += (i + 2) + "line,[BUDGET_ORG] Must be in numeric format
"; } } else { costReport.OrginalBudget = 0; } if (dv[i]["Budget_CHK"] != null && !string.IsNullOrEmpty(dv[i]["Budget_CHK"].ToString())) { try { costReport.ChangedBudget = Funs.GetNewDecimalOrZero(dv[i]["Budget_CHK"].ToString()); } catch (Exception) { errorInfos += (i + 2) + "line,[Budget_CHK]Must be in numeric format
"; } } else { costReport.ChangedBudget = 0; } if (dv[i]["ACTUAL"] != null && !string.IsNullOrEmpty(dv[i]["ACTUAL"].ToString())) { try { costReport.ActualCost = Funs.GetNewDecimalOrZero(dv[i]["ACTUAL"].ToString()); } catch (Exception) { errorInfos += (i + 2) + "line,[ACTUAL]Must be in numeric format
"; } } else { costReport.ActualCost = 0; } if (dv[i]["Commit_PO"] != null && !string.IsNullOrEmpty(dv[i]["Commit_PO"].ToString())) { try { costReport.CommittedPRPO = Funs.GetNewDecimalOrZero(dv[i]["Commit_PO"].ToString()); } catch (Exception) { errorInfos += (i + 2) + "line,[Commit_PO]Must be in numeric format
"; } } else { costReport.CommittedPRPO = 0; } if (dv[i]["Commit_SSR"] != null && !string.IsNullOrEmpty(dv[i]["Commit_SSR"].ToString())) { try { costReport.CommittedSSRs = Funs.GetNewDecimalOrZero(dv[i]["Commit_SSR"].ToString()); } catch (Exception) { errorInfos += (i + 2) + "line,[Commit_SSR] Must be in numeric format
"; } } else { costReport.CommittedSSRs = 0; } if (dv[i]["Cost_To_CMPT"] != null && !string.IsNullOrEmpty(dv[i]["Cost_To_CMPT"].ToString())) { try { costReport.CostToComplete = Funs.GetNewDecimalOrZero(dv[i]["Cost_To_CMPT"].ToString()); } catch (Exception) { errorInfos += (i + 2) + "line,[Cost_To_CMPT] Must be in numeric format
"; } } else { costReport.CostToComplete = 0; } costReport.CostReportId = SQLHelper.GetNewID(typeof(Model.Editor_CostReport)); costReportLists.Add(costReport); #endregion } if (!string.IsNullOrEmpty(errorInfos)) { ShowAlert(errorInfos, MessageBoxIcon.Warning); return; } //去除集合中重复的数据 //for (int i = 0; i < costReportLists.Count; i++) //{ // for (int j = costReportLists.Count - 1; j > i; j--) // { // if (costReportLists[i].Monthly == costReportLists[j].Monthly && costReportLists[i].EProjectId == costReportLists[j].EProjectId) // { // costReportLists.RemoveAt(j); // } // } //} //判断数据库是否有相同日期和项目的数据 List insertlists = new List(); //List updatelists = new List(); foreach (var item in costReportLists) { var mewCostReport = BLL.CostReportService.GetCostReportByEProjectIdAndMonth(item.EProjectId, item.Monthly); if (mewCostReport == null) { insertlists.Add(item); } else { Editor_CostReport update = Funs.DB.Editor_CostReport.FirstOrDefault(x => x.CostReportId == mewCostReport.CostReportId); if (update != null) { update.EProjectId = item.EProjectId; update.Monthly = item.Monthly; update.OrginalBudget = item.OrginalBudget; update.ChangedBudget = item.ChangedBudget; update.ActualCost = item.ActualCost; update.CommittedPRPO = item.CommittedPRPO; update.CommittedSSRs = item.CommittedSSRs; update.CostToComplete = item.CostToComplete; Funs.DB.SubmitChanges(); } } } if (insertlists.Count > 0) { Funs.DB.Editor_CostReport.InsertAllOnSubmit(insertlists); Funs.DB.SubmitChanges(); } //更新Control中的OrginalBudget和CM中Cost to complete foreach (var item in costReportLists) { var eproject = BLL.EProjectService.GeteProjectById(item.EProjectId); eproject.EProjectId = item.EProjectId; eproject.ProjectControl_OrginalBudget = item.OrginalBudget; eproject.ProjectControl_ChangedBudget = item.ChangedBudget; eproject.ProjectControl_Actual = item.ActualCost; eproject.ProjectControl_CommittedPRPO = item.CommittedPRPO; eproject.ProjectControl_CommittedSSRs = item.CommittedSSRs; eproject.PM_General_CostToComplete = item.CostToComplete; eproject.ModifyDate = DateTime.Now; eproject.ModifyPerson = CurrUser.UserId; BLL.EProjectService.UpdateOrginalBudget(eproject); } ShowNotify("Import success!", MessageBoxIcon.Success); PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference()); } else { ShowAlert("No data!", MessageBoxIcon.Warning); return; } } catch (Exception ex) { ShowAlert("'" + ex.Message + "'", MessageBoxIcon.Warning); } } #endregion } }