public async Task SaveData(PB_Material data) { if (data.Id.IsNullOrEmpty()) { InitEntity(data); if (data.Code.IsNullOrWhiteSpace()) { data.Code = await _provider.GetRequiredService <IPB_BarCodeTypeBusiness>().Generate("PB_Material"); } await _pB_MaterialBus.AddDataAsync(data); } else { await _pB_MaterialBus.UpdateDataAsync(data); } }
public async Task <AjaxResult> Import(IFormFile file)// file { string ReturnValue = string.Empty; //定义一个bool类型的变量用来做验证 bool flag = true; try { #region 检查文件 string fileExt = Path.GetExtension(file.FileName).ToLower(); //定义一个集合一会儿将数据存储进来,全部一次丢到数据库中保存 var Data = new List <PB_Material>(); MemoryStream ms = new MemoryStream(); file.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); IWorkbook book; if (fileExt == ".xlsx") { book = new XSSFWorkbook(ms); } else if (fileExt == ".xls") { book = new HSSFWorkbook(ms); } else { book = null; } ISheet sheet = book.GetSheetAt(0); int CountRow = sheet.LastRowNum + 1;//获取总行数 if (CountRow - 1 == 0) { return(Error("Excel列表数据项为空!")); } #endregion #region 循环验证 for (int i = 1; i < CountRow; i++) { //获取第i行的数据 var row = sheet.GetRow(i); if (row != null) { //循环的验证单元格中的数据 for (int j = 0; j < 6; j++) { if ((j == 4 || j == 5) || (row.GetCell(j) == null || row.GetCell(j).ToString().Trim().Length == 0)) { //return Error(ReturnValue += $"注意第{i + 1}行,第{j + 1}列数据为空。"); } else if (row.GetCell(j) == null || row.GetCell(j).ToString().Trim().Length == 0) { flag = false; return(Error(ReturnValue += $"第{i + 1}行,第{j + 1}列数据不能为空。")); } } } } #endregion if (flag) { for (int i = 1; i < CountRow; i++)// { //实例化实体对象 PB_Material commodity = new PB_Material(); var row = sheet.GetRow(i); if (row.GetCell(0) != null && row.GetCell(0).ToString().Trim().Length > 0) { commodity.Id = IdHelper.GetId(); commodity.CreatorId = _Op.UserId; //"Admin";//_Op.UserId; commodity.Code = row.GetCell(0).ToString(); } if (row.GetCell(1) != null && row.GetCell(1).ToString().Trim().Length > 0) { commodity.Name = row.GetCell(1).ToString(); } if (row.GetCell(2) != null && row.GetCell(2).ToString().Trim().Length > 0) { commodity.BarCode = row.GetCell(2).ToString(); } if (row.GetCell(3) != null && row.GetCell(3).ToString().Trim().Length > 0) { commodity.SimpleName = row.GetCell(3).ToString(); } if (row.GetCell(4) != null && row.GetCell(4).ToString().Trim().Length > 0) { commodity.MaterialTypeId = row.GetCell(4).ToString(); } if (row.GetCell(5) != null && row.GetCell(5).ToString().Trim().Length > 0) { commodity.MeasureId = row.GetCell(5).ToString(); } if (row.GetCell(6) != null && row.GetCell(6).ToString().Trim().Length > 0) { commodity.Spec = row.GetCell(6).ToString(); } if (row.GetCell(7) != null && row.GetCell(7).ToString().Trim().Length > 0) { commodity.Max = Convert.ToDouble(row.GetCell(7).ToString()); } if (row.GetCell(8) != null && row.GetCell(8).ToString().Trim().Length > 0) { commodity.Min = Convert.ToDouble(row.GetCell(8).ToString()); } if (row.GetCell(9) != null && row.GetCell(9).ToString().Trim().Length > 0) { commodity.CusId = row.GetCell(9).ToString(); } if (row.GetCell(10) != null && row.GetCell(10).ToString().Trim().Length > 0) { commodity.SupId = row.GetCell(10).ToString(); } if (row.GetCell(11) != null && row.GetCell(11).ToString().Trim().Length > 0) { commodity.StorId = row.GetCell(11).ToString(); } if (row.GetCell(12) != null && row.GetCell(12).ToString().Trim().Length > 0) { commodity.Price = Convert.ToDouble(row.GetCell(12).ToString()); } Data.Add(commodity); } var listMaterialTypeCodes = Data.Select(s => s.MaterialTypeId).Select(s => s.Trim()).Distinct().ToList(); var dicMaterialType = _pB_MaterialBus.GetQueryable <PB_MaterialType>().Where(w => listMaterialTypeCodes.Contains(w.Code)).ToDictionary(k => k.Code, v => v.Id); var listMeasureCodes = Data.Select(s => s.MeasureId).Select(s => s.Trim()).Distinct().ToList(); var dicMeasure = _pB_MaterialBus.GetQueryable <PB_Measure>().Where(w => listMeasureCodes.Contains(w.Code)).ToDictionary(k => k.Code, v => v.Id); var listCusCodes = Data.Select(s => s.CusId).Distinct().ToList(); var dicCus = _pB_MaterialBus.GetQueryable <PB_Customer>().Where(w => listCusCodes.Contains(w.Code)).ToDictionary(k => k.Code, v => v.Id); var listSupCodes = Data.Select(s => s.SupId).Distinct().ToList(); var dicSup = _pB_MaterialBus.GetQueryable <PB_Supplier>().Where(w => listSupCodes.Contains(w.Code)).ToDictionary(k => k.Code, v => v.Id); var listStorCodes = Data.Select(s => s.StorId).Select(s => s.Trim()).Distinct().ToList(); var dicStor = _pB_MaterialBus.GetQueryable <PB_Storage>().Where(w => listStorCodes.Contains(w.Code)).ToDictionary(k => k.Code, v => v.Id); foreach (var item in Data) { if (dicMaterialType.ContainsKey(item.MaterialTypeId.Trim())) { item.MaterialTypeId = dicMaterialType[item.MaterialTypeId.Trim()]; } else { throw new Exception("物料类型编号不存在!"); } if (dicMeasure.ContainsKey(item.MeasureId.Trim())) { item.MeasureId = dicMeasure[item.MeasureId.Trim()]; } else { throw new Exception("单位编号不存在!"); } if (item.CusId == null) { item.CusId = null; } else if (dicCus.ContainsKey(item.CusId.Trim())) { item.CusId = dicCus[item.CusId.Trim()]; } else { throw new Exception("客户编号不存在!"); } if (item.SupId == null) { item.SupId = null; } else if (dicSup.ContainsKey(item.SupId.Trim())) { item.SupId = dicSup[item.SupId.Trim()]; } else { throw new Exception("供应商编号不存在!"); } if (dicStor.ContainsKey(item.StorId.Trim())) { item.StorId = dicStor[item.StorId.Trim()]; } else { throw new Exception("仓库编号不存在!"); } if (item.BarCode == null) { item.BarCode = null; } if (item.SimpleName == null) { item.SimpleName = null; } if (item.Spec == null) { item.Spec = null; } if (item.Max == null) { item.Max = null; } if (item.Min == null) { item.Min = null; } if (item.Price == null) { item.Price = null; } } if (Data.Count > 0) { int j = 1000; for (int i = 0; i < Data.Count; i += 1000) { var cList = new List <PB_Material>(); cList = Data.Take(j).Skip(i).ToList(); j += 1000; await _pB_MaterialBus.AddDataExlAsync(cList); } ReturnValue = $"数据导入成功,共导入{CountRow - 1}条数据。"; } } if (!flag) { return(Error(ReturnValue = "数据存在问题!" + ReturnValue)); } } catch (Exception) { return(Error("数据异常!")); } return(Success(ReturnValue)); }