using Model.ModelDto;
using Model.ModelDto.BllSoDto;
using Model.ModelDto.SysDto;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using WMS.DAL;
using WMS.Entity.BllSoEntity;
using WMS.Entity.Context;
using WMS.Entity.SysEntity;
using WMS.IBLL.ISysServer;
namespace WMS.BLL.SysServer
{
///
/// 物料类别管理方法
///
public class MaterialCategoryServer : DbHelper, IMaterialCategoryServer
{
private static readonly SqlSugarScope Db = DataContext.Db;
public MaterialCategoryServer() : base(Db)
{
}
///
/// 获取物料类别信息
///
/// 类别名称
/// 区域编码
///
///
public List GetMaterialCategories(string categoryName, string areaNo)
{
try
{
//var list = Db.Queryable()
// .WhereIF(!string.IsNullOrWhiteSpace(categoryName), a => a.CategoryName == categoryName)
// .WhereIF(!string.IsNullOrWhiteSpace(areaNo), a => a.AreaNo == areaNo)
// .Where(a => a.IsDel == "0").ToList();
Expression> item = Expressionable.Create()
.AndIF(!string.IsNullOrWhiteSpace(categoryName), it => it.CategoryName.Contains(categoryName))
.AndIF(!string.IsNullOrWhiteSpace(areaNo), it => it.AreaNo.Contains(areaNo))
.And(it => it.IsDel == "0")
.ToExpression();//注意 这一句 不能少
var data = GetAllWhereAsync(item)
.Includes(x => x.CreateUserInfo)
.Includes(x => x.UpdateUserInfo).ToList();
//.LeftJoin((a, b) => a.WareHouseNo == b.WareHouseNo)
//.LeftJoin((a, b, c) => a.CreateUser == c.Id)
//.LeftJoin((a, b, c, d) => a.UpdateUser == d.Id)
var data2 = data.Select(a => new MaterialCategoryDto()
{
Id = a.Id,
CategoryNo = a.CategoryNo, //类别编码
CategoryName = a.CategoryName, //类别名称
AreaNo = a.AreaNo, //区域号
AreaName = GetStorageArea(a.AreaNo), //区域名称
//WareHouseNo = a.WareHouseNo, //仓库号
//WareHouseName = a.WareHouseInfo.WareHouseName, //仓库名称
Demo = a.Demo, //备注
IsDel = a.IsDel,
CreateName = a.CreateUserInfo.RealName,
UpdateName = a.UpdateUserInfo == null ? "" : a.UpdateUserInfo.RealName,
CreateTime = a.CreateTime,
UpdateTime = a.UpdateTime,
}).ToList();
return data2;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 获取物料类别下拉菜单信息
///
///
///
public List GetMaterialCategories()
{
try
{
//var list = Db.Queryable()
// .WhereIF(!string.IsNullOrWhiteSpace(categoryName), a => a.CategoryName == categoryName)
// .WhereIF(!string.IsNullOrWhiteSpace(areaNo), a => a.AreaNo == areaNo)
// .Where(a => a.IsDel == "0").ToList();
var list = Db.Queryable().Where(a => a.IsDel == "0").ToList();
return list;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 根据Id获取物料类别信息
///
/// Id
///
///
public SysMaterialCategory GetMaterialCategoriesById(int Id)
{
try
{
var list = Db.Queryable().Where(a => a.IsDel == "0" && a.Id == Id).First();
return list;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 获取巷道信息
///
/// 巷道号
///
///
public string GetStorageArea(string AreaNo)
{
try
{
string str = "";
if (string.IsNullOrWhiteSpace(AreaNo))
{
return str;
}
else
{
//判断是否需要进行分割字符串
var arr = AreaNo.Split(',');
//获取区域信息
var list = Db.Queryable().Where(a => a.IsDel == "0" && arr.Contains(a.AreaNo)).ToList();
//拼接字符串
foreach (var item in list)
{
str += item.AreaName + ";";
}
return str;
}
}
catch (Exception ex)
{
throw new Exception("获取巷道信息异常" + ex.Message);
}
}
///
/// 获取库区域信息
///
///
public List GetStorageAreaList()
{
try
{
var list = Db.Queryable().Where(a => a.IsDel == "0").ToList();
return list;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
///
/// 新增类别信息
///
/// 物料类别实体
///
///
public string InsertMaterialCategories(SysMaterialCategory category)
{
try
{
string msg = "";
//获取类别信息
var categoryInfo = Db.Queryable().First(a => a.IsDel == "0" && a.CategoryNo == category.CategoryNo);
//获取区域信息
var area = Db.Queryable().Where(a => category.AreaNo.Contains(a.AreaNo) && a.IsDel == "0").ToList();
if (categoryInfo != null)
{
throw new Exception("当前类别信息已被创建,请重新填写信息!");
}
if (area.Count == 0)
{
throw new Exception("当前选择区域信息异常,请重新选择或联系管理员!");
}
Db.BeginTran();
SysMaterialCategory list = new SysMaterialCategory()
{
CategoryNo = category.CategoryNo, //类别编码
CategoryName = category.CategoryName, //类别名称
AreaNo = category.AreaNo, //区域编码
Demo = category.Demo, //备注
IsDel = "0", //是否删除
CreateUser = category.CreateUser, //创建人
CreateTime = Db.GetDate(), //创建时间
};
Db.Insertable(list).ExecuteCommand();
Db.CommitTran();
msg = "新增类别信息成功!";
return msg;
}
catch (Exception ex)
{
Db.RollbackTran();
throw new Exception(ex.Message);
}
}
///
/// 编辑类别信息
///
/// 物料类别实体
///
///
public string ExitMaterialCategories(SysMaterialCategory category)
{
try
{
string msg = "";
//获取类别信息
var categoryInfo = Db.Queryable().First(a => a.IsDel == "0" && a.Id == category.Id);
//获取类别对应物料信息
var matelist = Db.Queryable().Where(a=>a.IsDel == "0" && a.CategoryNo == categoryInfo.CategoryNo).ToList();
//获取区域信息
var area = Db.Queryable().First(a => category.AreaNo.Contains(a.AreaNo) && a.IsDel == "0");
if (area == null)
{
throw new Exception("当前选择区域信息异常,请重新选择或联系管理员!");
}
Db.BeginTran();
categoryInfo.CategoryNo = category.CategoryNo; //类别编码
categoryInfo.CategoryName = category.CategoryName; //类别名称
categoryInfo.AreaNo = category.AreaNo; //区域编码
categoryInfo.Demo = category.Demo; //备注
categoryInfo.UpdateUser = category.CreateUser; //更改人
categoryInfo.UpdateTime = Db.GetDate(); //更改时间
Db.Updateable(categoryInfo).ExecuteCommand();
foreach (var item in matelist)
{
item.CategoryNo = categoryInfo.CategoryNo;
}
Db.Updateable(matelist).ExecuteCommand();
Db.CommitTran();
msg = "编辑类别信息成功!";
return msg;
}
catch (Exception ex)
{
Db.RollbackTran();
throw new Exception(ex.Message);
}
}
///
/// 删除类别信息
///
/// 物料类别实体
///
///
public string DeleteMaterialCategories(MaterialCategoryDto category)
{
try
{
string msg = "";
//获取类别信息
var categoryInfo = Db.Queryable().First(a => a.IsDel == "0" && a.Id == category.Id);
//获取区域信息
var area = Db.Queryable().First(a => categoryInfo.AreaNo.Contains(a.AreaNo) && a.IsDel == "0");
//获取是否存在有物料已绑定当前类别
var mate = Db.Queryable().Where(a => a.IsDel == "0" && a.CategoryNo == categoryInfo.CategoryNo).ToList();
//判断是否存在有物料已绑定当前类别
if (mate.Count > 0)
{
throw new Exception("当前类别已有物料进行绑定,无法删除!");
}
if (categoryInfo == null)
{
throw new Exception("当前类别信息已被删除,请重新选择!");
}
if (area == null)
{
throw new Exception("当前选择区域信息异常,请重新选择或联系管理员!");
}
Db.BeginTran();
categoryInfo.IsDel = "1";
categoryInfo.UpdateUser = int.Parse(category.UpdateUser);
categoryInfo.UpdateTime = Db.GetDate();
Db.Updateable(categoryInfo).ExecuteCommand();
Db.CommitTran();
msg = "删除类别信息成功!";
return msg;
}
catch (Exception ex)
{
Db.RollbackTran();
throw new Exception(ex.Message);
}
}
}
}