string result = "";
|
string saleNum = "";//销售单号
|
#region 数据有效性验证
|
if (stockQuantity.Count == 0)
|
{
|
result = "数据为空";
|
logtxt.txtWrite("类名:sapWcf,函数名: takeStock:盘点库存SAP传过来的数据为空", 0);
|
|
return result;
|
}
|
if (stockQuantity[0].SaleCode == null)
|
{
|
logtxt.txtWrite("类名:sapWcf,函数名: takeStock:盘点库存SAP传过来的采购单号为空", 0);
|
|
result = "采购单号不能为空";
|
return result;
|
}
|
logtxt.txtWrite("类名:sapWcf,函数名: takeStock:收到盘点库存数据"+stockQuantity.Count+"条数据", 0);
|
saleNum = stockQuantity[0].SaleCode;//销售单号
|
#endregion
|
try
|
{
|
using (dbModel mod = new dbModel())//productCode
|
{
|
DateTime todayTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));//今天凌晨时间
|
|
//写入前先清空数据,因为之前的盘点数据已没有意义
|
List<TakeStock> isHaveOld = mod.TakeStock.Where(x => x.CreateDate < todayTime).ToList();
|
if (isHaveOld.Count>0)
|
{
|
string sql = "truncate table TakeStock ";
|
mod.Database.ExecuteSqlCommand(sql);
|
}
|
//此采购单的库存数据
|
List<vvBase_ProductPosition> stockInfo = mod.vvBase_ProductPosition.ToList();
|
//SAP传过来的 销售单下数据
|
List<ProductStock> sapInfo = stockQuantity;
|
//和SAP物料相同的 物料索引号集合 记录后 在源数据里删除后记录到盘点表里,--库存里有的sap里没有的
|
List<int> stockQty = new List<int>();
|
//和库存里物料相同的 物料索引号集合 记录后 在源数据里删除后记录到盘点表里,--sap里有的库存里没有的
|
List<int> sapQty = new List<int>();
|
|
#region 写入匹配到的物料
|
for (int i = 0; i < stockInfo.Count; i++)
|
{
|
|
for (int j = 0; j < sapInfo.Count; j++)
|
{
|
//当库存里和sap里的同一采购单下物料一样时,记录到盘点表里, 展示库存数量 和sap数量 PositionType
|
//tracking = trackingFrom.ToString().Split('/')[0];
|
//tracking = tracking.Remove(0, 1);
|
string sapTrankingNumber = stockInfo[i].ExtendField04;
|
if (stockInfo[i].SaleCode == sapInfo[j].SaleCode && stockInfo[i].ExtendField08 == sapInfo[j].SaleItem && stockInfo[i].ProductCode == sapInfo[j].materialCode)
|
{
|
stockQty.Add(i);
|
sapQty.Add(j);
|
TakeStock check = new TakeStock();
|
check.ProcureCode = sapInfo[j].SaleCode;//采购单号
|
check.ProcureItem = sapInfo[j].SaleItem;//采购项号
|
check.MateralCode = sapInfo[j].materialCode;//物料编号
|
check.MateralName = sapInfo[j].materialName;//物料名称
|
check.Unit = sapInfo[j].stockUnit;//SAP单位
|
check.SapQuantity = sapInfo[j].stockQuantity;//SAP数量
|
check.Ex1 = stockInfo[i].SmallUnit;//库存单位
|
check.StockQuantity = stockInfo[i].ProductStorage;//库存数量
|
check.Ex2 = sapInfo[j].isStock == 1 ? "常规货位" : "暂存区";//库存单位
|
check.CreateDate = DateTime.Now;//创建时间
|
mod.TakeStock.Add(check);
|
}
|
|
}
|
}
|
#endregion
|
|
#region 先移除库存里和sap里匹配到已写入的数据
|
if (stockQty.Count > 0)
|
{
|
for (int k = 0; k < stockQty.Count; k++)
|
{
|
stockInfo.Remove(stockInfo[stockQty[k]]);
|
}
|
}
|
|
#endregion
|
|
#region 判断库存里有的,sap里没有的物料,如果有就写入到盘点表里
|
//
|
if (stockInfo.Count > 0)
|
{
|
foreach (var stock in stockInfo)
|
{
|
TakeStock check = new TakeStock();
|
check.ProcureCode = stock.PoCode;//采购单号
|
check.ProcureItem = stock.ExtendField09;//采购项号
|
check.MateralCode = stock.ProductCode;//物料编号
|
check.MateralName = stock.ProductName;//物料名称
|
check.Unit = "";//SAP单位
|
check.SapQuantity = 0;//SAP数量
|
check.Ex1 = stock.ExtendField05;//库存单位
|
check.StockQuantity = stock.ProductStorage;//库存数量
|
check.CreateDate = DateTime.Now;//创建时间
|
mod.TakeStock.Add(check);
|
}
|
}
|
|
|
#endregion
|
|
#region 写入SAP有的库存没有的数据总和
|
//先移除库存里和sap里匹配到已写入的数据
|
if (sapQty.Count > 0)
|
{
|
for (int m = 0; m < sapQty.Count; m++)
|
{
|
sapInfo.Remove(sapInfo[sapQty[m]]);
|
}
|
}
|
//判断有没有库存里有的,sap里没有的物料,如果有就写入到盘点表里
|
if (sapInfo.Count > 0)
|
{
|
foreach (var sapStock in sapInfo)
|
{
|
TakeStock check = new TakeStock();
|
check.ProcureCode = sapStock.SaleCode;//销售单号
|
check.ProcureItem = sapStock.SaleItem;//销售项
|
check.MateralCode = sapStock.materialCode;//物料编号
|
check.MateralName = sapStock.materialName;//物料名称
|
check.Unit = sapStock.stockUnit;//SAP单位
|
check.SapQuantity = sapStock.stockQuantity;//SAP数量
|
check.Ex1 = "";//库存单位
|
check.StockQuantity = 0;//库存数量
|
check.CreateDate = DateTime.Now;//创建时间
|
mod.TakeStock.Add(check);
|
}
|
}
|
#endregion
|
int resultNum = mod.SaveChanges();
|
if (resultNum < 1)
|
{
|
result = "保存失败";
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
result += "\r\n" + ex.Message;
|
}
|
|
return result;
|