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<MaterialTypeViewEntity, BASEMaterialTypeView, DbModelCore>
|
{
|
|
private static object Lock = new object();
|
|
private MaterialTypeViewService() : base(MaterialTypeViewDao.GetInstance()) { }
|
|
private static MaterialTypeViewService Instance = null;
|
|
/// <summary>
|
/// 获取单例的方法
|
/// </summary>
|
/// <returns>角色服务的单例实体</returns>
|
public static MaterialTypeViewService GetInstance()
|
{
|
|
if (Instance == null)
|
{
|
lock (Lock)
|
{
|
if (Instance == null)
|
{
|
Instance = new MaterialTypeViewService();
|
}
|
}
|
}
|
return Instance;
|
}
|
|
|
/// <summary>
|
/// 导入Excel
|
/// </summary>
|
/// <param name="path">文件在服务器上的路径</param>
|
/// <param name="customerEntity">导入使用的模板</param>
|
/// <param name="msg">异常错误消息</param>
|
/// <returns>是否导入成功</returns>
|
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<string>();
|
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<MaterialTypeEntity>();
|
var typeUpdates = new List<MaterialTypeEntity>();
|
|
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;
|
}
|
}
|
}
|
}
|
}
|