using System;
using iWareSql.DBModel;
using System.Linq;
using XiGang.Core.Model;
using iWareCommon;
using iWareCommon.Common.Globle;
using iWareModel;
using System.Threading.Tasks;
using XiGang.Core.Model.PostParamModels;
using iWareModel.Entity.SalverMaterialBind;
namespace iWareSql.DataAccess
{
public class MaterialHandler
{
///
/// 根据 ContainerId 查找Item
///
///
///
public static Base_Material GetItemByContainerId(string ContainerId, DbModel edm)
{
var cvi = Salver_Material_Handler.GetIVCByContainerId(edm, ContainerId);
if (cvi == null)
throw new Exception("根据ContainerId " + ContainerId + " 没有找到CVI");
var item = GetMaterialById(edm, cvi.MaterialId);
if (item == null)
throw new Exception("根据ItemId " + cvi.MaterialId + " 没有找到Item");
return item;
}
///
/// 根据物料ID获取物料对象
///
///
///
///
public static Base_Material GetMaterialById(DbModel edm, string materialId)
{
var materials = edm.Base_Material.Where(x => x.Id == materialId).ToList();
if (materials != null && materials.Count == 1)
return materials.First();
return null;
}
///
/// 创建新的空托盘物料
///
///
///
///
public static Base_Material CreateEmptySlaverMaterial(DbModel edm, string remark, int Qty)
{
try
{
MaterialTypeEnum cargoTypeEnum = MaterialTypeEnum.托盘;
//注意:表Base_Material的OrderNo和SerialNumber是必填的,因此空托盘给他赋值一个空格进去!
C_AnalyzeMaterialPostParam analyzeMaterialPostParam = new C_AnalyzeMaterialPostParam();
//注意:表Base_Material的OrderNo和SerialNumber是必填的,因此空托盘给他赋值一个空格进去!
analyzeMaterialPostParam.SerialNumber = " ";
analyzeMaterialPostParam.OrderNo = " ";
analyzeMaterialPostParam.CargoNo = " ";
analyzeMaterialPostParam.Supplier = "";//供应商
return BaseCreateMaterial(edm, analyzeMaterialPostParam, cargoTypeEnum, remark, " ", " ", Qty);
}
catch (Exception)
{
throw;
}
}
///
/// 获取指定 物料编号的物料
///
///
///
///
///
public static Base_Material CreateCargoMaterial(DbModel edm, C_AnalyzeMaterialPostParam request, string remark, string serialNumber, string orderNo)
{
try
{
MaterialTypeEnum cargoTypeEnum = MaterialTypeEnum.一般物料;
return BaseCreateMaterial(edm, request, cargoTypeEnum, remark, serialNumber, orderNo);
}
catch (Exception)
{
throw;
}
}
///
/// 创建新的物料
///
///
///
///
/// 序列号
/// 订货号
///
///
private static Base_Material BaseCreateMaterial(DbModel edm, C_AnalyzeMaterialPostParam request, MaterialTypeEnum materialTypeEnum, string remark,
string serialNumber, string orderNo, int Qty = 1)
{
try
{
Base_Material material = new Base_Material();
material.Id = Guid.NewGuid().ToString();
material.SerialNumber = serialNumber;
material.OrderNo = orderNo;
material.Supplier = request.Supplier;//工厂
material.Batch = "";
material.CargoNo = request.CargoNo;
material.Qty = Qty;
material.MaterialType = Convert.ToInt32(materialTypeEnum);
material.MaterialTypeName = materialTypeEnum.ToString();
MyCodeItems items_SeriesCode = request.items_SeriesCode;
MyCodeItems items_CategoryCode = request.items_CategoryCode;
MyCodeItems items_ModelNumber = request.items_ModelNumber;
//增加机型等信息
if (items_CategoryCode != null)
{
material.CargoType_CodeItemId = items_CategoryCode.Id.ToString();
material.CargoTypeName = items_CategoryCode.name;
}
if (items_SeriesCode != null)
{
material.Series_CodeItemId = items_SeriesCode.Id.ToString();
material.SeriesName = items_SeriesCode.name;
}
if (items_ModelNumber != null)
{
material.MaterialModel_CodeItemId = items_ModelNumber.Id.ToString();
material.MaterialModel = items_ModelNumber.name;
}
material.CreateTime = material.ModifyTime = DateTime.Now;
material.CreateBy = material.ModifyBy = SysGloble.WCSSystem;
material.OperationRemark = remark + "新增物料";
edm.Base_Material.Add(material);
return material;
}
catch (Exception)
{
throw;
}
}
///
/// 根据序列号查找物料
///
/// 序列号
/// 如果没有发现物料,是否需要报警
///
public static MessageModel GetMaterialBySerialNumber(DbModel edm, string serialNumber, bool noFoundThrowError)
{
//var maters = await _dal.Query(x => x.SerialNumber == serialNumber);
var maters = edm.Base_Material.Where(x => x.SerialNumber == serialNumber).ToList();
if (maters == null || maters.Count == 0)
{
if (noFoundThrowError)
{
return MessageModel.Fail("根据序列号'" + serialNumber + "'没有找到物料");
}
else
{
return MessageModel.Success("成功", null);
}
}
if (maters.Count > 1)
{
return MessageModel.Fail("根据序列号'" + serialNumber + "'找到" + maters.Count + "个物料");
}
return MessageModel.Success("成功", maters[0]);
}
}
}