public bool ImportPaymentData(DataTable dt, string fileName, ref string outmsg) { Dictionary <string, int> cardIds = getItemCardId(); Dictionary <string, int> titles = getItemTitle(); Dictionary <int, int> keyValues = new Dictionary <int, int>(); #region 项目匹配 for (int i = 0; i < dt.Columns.Count; i++) { DataColumn column = dt.Columns[i]; if (titles.ContainsKey(column.ColumnName)) { keyValues.Add(i, titles[column.ColumnName]); } } #endregion using (EntityContext context = BlueFramework.Blood.Session.CreateContext()) { try { context.BeginTransaction(); //判断是否已经入库 List <InsuranceInfo> list = context.SelectList <InsuranceInfo>("hr.insurance.findInsuranceByTitle", fileName); if (list.Count > 0) { outmsg += "文件:" + fileName + "已上传!"; return(false); } //入库导入主表 InsuranceInfo ii = new InsuranceInfo(); ii.Title = fileName; ii.CreatorId = UserContext.CurrentUser.UserId; ii.CreateTime = DateTime.Now.ToShortDateString(); ii.ImportType = 2; context.Save <InsuranceInfo>("hr.insurance.insertInsurance", ii); int rowIndex = 0; int passRows = 0; foreach (DataRow row in dt.Rows) { rowIndex++; //入库导入详细表 InsuranceDetailInfo idi = new InsuranceDetailInfo(); idi.ImportId = ii.ImportId; idi.PayMonth = row["发放年月"].ToString(); idi.PersonName = row["姓名"].ToString().Trim(); idi.ImportType = 2; string cardId = row["身份证"].ToString().ToLower() + "." + idi.PersonName; #region 身份证判断 if (cardIds.ContainsKey(cardId)) { idi.PersonId = cardIds[cardId]; passRows++; } else { //未找到人员,忽略该行 outmsg += string.Format("第{0}行{1}人员的身份证号码和姓名不匹配, ", rowIndex, idi.PersonName); continue; } #endregion foreach (var columnindex in keyValues.Keys) { if (row[columnindex] == null || string.IsNullOrEmpty(row[columnindex].ToString())) { continue; } InsuranceDetailInfo item = idi.Clone(); item.ItemId = keyValues[columnindex]; item.PersonPayValue = decimal.Parse(row[columnindex].ToString()); item.ImportColumnName = dt.Columns[columnindex].Caption; context.Save <InsuranceDetailInfo>("hr.insurance.insertInsuranceDetail", item); } } context.Commit(); outmsg = string.Format("Excel一共{0}行,导入成功{1}行。{2}", dt.Rows.Count, passRows, outmsg); return(true); } catch (Exception ex) { outmsg += "保存失败," + ex.Message; context.Rollback(); return(false); } } }
/// <summary> /// 保险导入 /// </summary> /// <param name="dt"></param> /// <param name="fileName"></param> /// <param name="outmsg"></param> /// <returns></returns> public bool ImportInsurance(DataTable dt, string fileName, ref string outmsg) { Dictionary <string, int> cardIds = getItemCardId(); Dictionary <string, int> titles = getItemTitle(); //Dictionary<string, int> thirddic = getThirdItem(); using (EntityContext context = BlueFramework.Blood.Session.CreateContext()) { try { context.BeginTransaction(); //判断是否已经入库 List <InsuranceInfo> list = context.SelectList <InsuranceInfo>("hr.insurance.findInsuranceByTitle", fileName); if (list.Count > 0) { outmsg += "文件:" + fileName + "已上传!"; return(false); } //入库导入主表 InsuranceInfo ii = new InsuranceInfo(); ii.Title = fileName; ii.CreatorId = UserContext.CurrentUser.UserId; ii.CreateTime = DateTime.Now.ToShortDateString(); ii.ImportType = 1; context.Save <InsuranceInfo>("hr.insurance.insertInsurance", ii); int rowIndex = 0; int passRows = 0; foreach (DataRow row in dt.Rows) { rowIndex++; //入库导入详细表 InsuranceDetailInfo idi = new InsuranceDetailInfo(); idi.ImportId = ii.ImportId; idi.PayMonth = row["计划月度"].ToString(); idi.PersonName = row["个人姓名"].ToString().Trim(); idi.PersonPayValue = decimal.Parse(row["个人缴存"].ToString()); idi.CompanyPayValue = decimal.Parse(row["单位缴存"].ToString()); idi.ImportColumnName = row["险种"].ToString(); string cardId = row["身份证号码"].ToString().ToLower() + "." + idi.PersonName; if (cardIds.ContainsKey(cardId)) { idi.PersonId = cardIds[cardId]; passRows++; } else { //未找到人员,忽略该行 outmsg += string.Format("第{0}行 {1} 人员的身份证号码和姓名不匹配, ", rowIndex, idi.PersonName); continue; } if (titles.ContainsKey(row["险种"].ToString())) { idi.ItemId = titles[row["险种"].ToString()]; } else { //值错误,不入库 outmsg += "第" + dt.Rows.IndexOf(row) + "行险种不匹配!"; context.Rollback(); return(false); } context.Save <InsuranceDetailInfo>("hr.insurance.insertInsuranceDetail", idi); } context.Commit(); outmsg = string.Format("Excel中一共{0}行,导入成功{1}行。{2}", dt.Rows.Count, passRows, outmsg); return(true); } catch (Exception ex) { outmsg += "服务器内部错误,请联系管理员:" + ex.Message; context.Rollback(); return(false); } } }