using iWareCommon.Common.Service; using iWareCommon.Utils; using iWareDataCore.BASE.Dao; using iWareDataCore.BASE.Entity; using iWareDataCore.ORM; using iWareDataCore.Properties; using iWareExcel.EXCEL.Entity; using iWareExcel.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace iWareDataCore.BASE.Service { public class MaterialTypeViewService : CommonService { private static object Lock = new object(); private MaterialTypeViewService() : base(MaterialTypeViewDao.GetInstance()) { } private static MaterialTypeViewService Instance = null; /// /// 获取单例的方法 /// /// 角色服务的单例实体 public static MaterialTypeViewService GetInstance() { if (Instance == null) { lock (Lock) { if (Instance == null) { Instance = new MaterialTypeViewService(); } } } return Instance; } /// /// 导入Excel /// /// 文件在服务器上的路径 /// 导入使用的模板 /// 异常错误消息 /// 是否导入成功 public bool ImportExcel(string path, WorkBookEntity workBook, out string msg) { using (var dbModel = new DbModelCore()) { try { msg = ""; var ds = ExcelHelper.FromExcelByEPPlus(path, workBook, out msg); if (!string.IsNullOrEmpty(msg)) { throw new Exception(msg); } var types = ds[0]; if (types.Count < 1) { msg = "物料类型记录数为0,请修改后重新导入"; return false; } var i = 0; var names = new List(); foreach (MaterialTypeViewEntity t in types) { i += 1; if (string.IsNullOrEmpty(t.Name)) { msg = string.Format("在第{0}行,物料名不能为空,请修改后重新导入", i + 1); return false; } if (names.Contains(t.Name)) { msg = string.Format("在第{0}行,物料类型{1}已重复出现,请修改后重新导入", i + 1, t.Name); return false; } names.Add(t.Name); } var typeSaves = new List(); var typeUpdates = new List(); var existTypes = dbModel.BASEMaterialTypes.Select(x => new { x.id, x.name }).Where(x => names.Contains(x.name)).ToList(); foreach (MaterialTypeViewEntity t in types) { var one = existTypes.FirstOrDefault(x => x.name == t.Name); if (one == null) { typeSaves.Add(new MaterialTypeEntity(t)); } else { t.Id = one.id; typeUpdates.Add(new MaterialTypeEntity(t)); } } for (var j = 0; j < (int)Math.Ceiling(typeSaves.Count / 1000.0); j++) { var sql = "INSERT INTO [dbo].[BASEMaterialType]( name, type ) VALUES"; for (var r = j * 1000; r < j * 1000 + 1000; r++) { if (r == typeSaves.Count) { break; } sql += string.Format("('{0}', {1}),", typeSaves[r].Name, typeSaves[r].Type); } if (sql.EndsWith(",")) { sql = sql.Substring(0, sql.Length - 1); } var num = dbModel.Database.ExecuteSqlCommand(sql); } MaterialTypeDao.GetInstance().Update(typeUpdates, dbModel); return string.IsNullOrEmpty(msg); } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ImportExcel", ex.Message); return false; } } } } }