using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Runtime.Serialization;
|
using System.ServiceModel;
|
using System.Text;
|
using siemensSapService.orm;
|
using siemensSapService.aspEntity;
|
|
using logtxtWrite;
|
using Newtonsoft.Json;
|
using System.Diagnostics;
|
using System.IO;
|
|
namespace siemensSapService.wcf
|
{
|
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“sapWcf”。
|
public class sapWcf : IsapWcf
|
{
|
/// <summary>
|
/// 添加出库单,被 张展的iWareSAP服务调用
|
/// </summary>
|
/// <param name="sale">要添加的plckList</param>
|
/// <returns></returns>
|
public string pickList(SaleOrder sale)
|
{
|
string result = "";
|
#region 验证传入参数/合并相同物料
|
if (sale.saleChild.Count == 0)
|
{
|
result = "出库明细数量为0!";
|
logtxt.txtWrite("类名:sapWcf,函数名: pickList:收到数量是0", 2);
|
return result;
|
}
|
#region 合并相同物料编号的数据
|
//PICKlist child临时变量
|
List<SaleOrderList> convertPickLIST = new List<SaleOrderList>();
|
//按物料编号分组
|
var PickList = sale.saleChild.GroupBy(x => x.materialCode);
|
foreach (var convertItem in PickList)
|
{
|
for (int i = 1; i < convertItem.ToList().Count; i++)
|
{
|
//数量合并到第一个
|
convertItem.ToList()[0].exitQty += convertItem.ToList()[i].exitQty;
|
}
|
convertPickLIST.Add(convertItem.ToList()[0]);
|
}
|
sale.saleChild = convertPickLIST;
|
#endregion
|
|
#endregion
|
logtxt.txtWrite("类名:sapWcf,函数名: pickList:收到" + sale.saleChild.Count + "条数据", 0);
|
try
|
{
|
|
using (dbModel mod = new dbModel())
|
{
|
//出库单号/生成订单号
|
string orderCode = sale.orderNumber;
|
Sale_Order checkList = mod.Sale_Order.FirstOrDefault(x => x.OrderCode == orderCode);
|
List<string> rstPo = sale.saleChild.Select(x => x.materialCode).ToList();
|
//查找物料基础数据 找到po明细物料编号在数据库里有的集合
|
var checkMateria1s = (from p in mod.Base_ProductInfo
|
where
|
(from f in rstPo select f).Contains(p.ProductCode)
|
select p).ToList();
|
//有就修改没有就新建
|
string trackingNum = "";
|
if (checkList != null)
|
{
|
//检查明细有就修改没有就新建
|
List<Sale_OrderList> checkLists = mod.Sale_OrderList.Where(x => x.Order_Id == checkList.Order_Id).ToList();
|
//if (checkLists.Count < 1)
|
//{
|
// logtxt.txtWrite("类名:sapWcf,函数名: pickList:更新出库单明细为" + sale.saleChild.Count + "条数据", 2);
|
//}
|
|
checkList.MaterialCount = sale.orderQuantity;//出库套数
|
//int unb = 0;//计数
|
foreach (var item in sale.saleChild)
|
{
|
string materialCode = item.materialCode;
|
//unb++;
|
Sale_OrderList isHave = checkLists.FirstOrDefault(x => x.ProductCode == item.materialCode);
|
|
if (isHave != null)
|
{
|
//if (item.materialCode=="A7EQD-5170027509")
|
//{
|
// decimal aa=item.exitQty;
|
//}
|
#region 修改出库单数据
|
// isHave.ExtendField06 = item.saleItem;//销售项号
|
isHave.ProductCode = materialCode;//物料编号
|
isHave.SmallUnit = item.stockUnit;//库存单位
|
isHave.ValidQuantity = item.exitQty - isHave.QuantityShipped + isHave.ValidQuantity;//未出库数量 extendField03
|
isHave.QuantityShipped = item.exitQty;//预出库数量 extendField03
|
isHave.ModifyDate = DateTime.Now;
|
isHave.ExtendField09 = item.storageLocation;//G028 库区
|
continue;
|
#endregion
|
}
|
else
|
{
|
#region 新增出库单
|
string materialName = "sapPickList物料";
|
|
long productId = 0;
|
//查询物料找物料ID 没有就新建一个物料
|
Base_ProductInfo checkMateria = checkMateria1s.FirstOrDefault(x => x.ProductCode == materialCode);
|
if (checkMateria != null)
|
{
|
productId = checkMateria.Product_Id;
|
materialName = checkMateria.ProductName;
|
}
|
else
|
{
|
#region 检查物料基础信息里是否有这个物料没有就新建
|
Base_ProductInfo newMateria = new Base_ProductInfo();
|
newMateria.ProductCode = materialCode;//物料编号
|
newMateria.ProductName = materialName;//物料名称
|
newMateria.SmallUnit = item.stockUnit;//库存单位
|
newMateria.UnitConvert = 1M;
|
newMateria.BigUnit = item.stockUnit;//采购单位
|
newMateria.Enable = 1;//设置为可用
|
///////////////
|
newMateria.Brand_Id = 0;//库存预警量
|
newMateria.ProductModel = materialCode;
|
newMateria.Provider_Id = 926;
|
newMateria.ProviderCode = "PV201940371";
|
newMateria.ProviderShortName = "默认供应商";
|
newMateria.Consignor_Id = 30;
|
newMateria.ConsignorCode = "GX30";
|
newMateria.ConsignorName = "广州西门子";
|
newMateria.UserProduct_Id = 1007;
|
newMateria.UserProductCode = "100000001";
|
mod.Base_ProductInfo.Add(newMateria);
|
mod.SaveChanges();
|
//通过新建获取产品ID
|
productId = newMateria.Product_Id;
|
#endregion
|
}
|
if (productId == 0)
|
{
|
continue;//没这个物料到循环尾
|
}
|
if (trackingNum == "")//一个出库单只有一个跟踪号,只需要匹配一次
|
{
|
Purchase_OrderList saleList = mod.Purchase_OrderList.FirstOrDefault(x => x.ExtendField07 == sale.saleCode && x.SpecAlias == item.saleItem);
|
trackingNum = saleList == null ? "" : saleList.ExtendField04;
|
}
|
int saleItem = 0;
|
bool saleitemis0 = Int32.TryParse(item.saleItem, out saleItem);
|
Sale_OrderList orderList = new Sale_OrderList();
|
orderList.Order_Id = checkList.Order_Id;
|
orderList.ExtendField06 = item.saleItem;//销售项号
|
orderList.ProductCode = materialCode;//物料编号
|
orderList.ProductName = materialName;//物料名称
|
orderList.SmallUnit = item.stockUnit;//库存单位
|
orderList.QuantityShipped = item.exitQty;//预出库数量 extendField03
|
orderList.ValidQuantity = item.exitQty;//未出库数量 extendField03
|
orderList.ExtendField03 = "新建";
|
orderList.ExtendField01 = "261";//移动类型
|
orderList.ExtendField09 = item.storageLocation;//G028 库区
|
orderList.CreateDate = DateTime.Now;
|
orderList.TrackingNumber = saleItem > 0 ? trackingNum : "";//跟踪号
|
orderList.SaleCode = sale.saleCode;//销售单
|
orderList.ExtendField10 = item.batch;//保留项号
|
//不为空的垃圾字段
|
orderList.Product_Id = productId;
|
orderList.ProductModel = materialCode;
|
mod.Sale_OrderList.Add(orderList);
|
#endregion
|
}
|
}
|
int numList = mod.SaveChanges();
|
}
|
else
|
{
|
string productCode = sale.productNumber;
|
Base_ProductInfo findProduct = mod.Base_ProductInfo.FirstOrDefault(x => x.ProductCode == productCode);
|
string productName = "未找到产品名称";
|
if (findProduct != null)
|
{
|
productName = findProduct.ProductName;
|
}
|
Sale_Order saleOrder = new Sale_Order();
|
#region pickList主表
|
saleOrder.OrderCode = orderCode;//出库单号 =生产订单号=提料单号 800开头的号
|
saleOrder.MaterialCount = sale.orderQuantity;//订单出库套数
|
saleOrder.SaleCode = sale.saleCode;//销售单号
|
saleOrder.StoreName = sale.ReservationNumber;//保留号
|
saleOrder.DeptName = productName;//(产品名称)物料描述
|
saleOrder.PriorityNo = 0;//优先级
|
saleOrder.OrderType = "SAP生产订单";//单据类型
|
saleOrder.StorageName = "立体库";
|
saleOrder.StatusID = 1;//状态ID
|
saleOrder.StatusText = "新建";
|
saleOrder.Client_Id = 0;//已出库套数
|
//不可为空垃圾字段
|
saleOrder.Storage_Id = 87;
|
saleOrder.Consignor_Id = 30;
|
saleOrder.ConsignorCode = "HZ20180002";
|
saleOrder.ConsignorName = "默认货主";
|
saleOrder.UserProduct_Id = 1007;
|
saleOrder.CreateID = 1;
|
saleOrder.Creator = "超级管理员";
|
saleOrder.CreateDate = DateTime.Now;
|
#endregion
|
#region 添加明细
|
|
foreach (var item in sale.saleChild)
|
{
|
#region 检查物料基础信息里是否有这个物料没有就新建
|
long productId = 0;
|
string materialCode = item.materialCode;
|
string materialName = "sapPickList物料";
|
//查询物料找物料ID 没有就新建一个物料
|
Base_ProductInfo checkMateria = checkMateria1s.FirstOrDefault(x => x.ProductCode == materialCode);
|
if (checkMateria != null)
|
{
|
productId = checkMateria.Product_Id;
|
materialName = checkMateria.ProductName;
|
}
|
else
|
{
|
#region 新建
|
Base_ProductInfo newMateria = new Base_ProductInfo();
|
newMateria.ProductCode = materialCode;//物料编号
|
newMateria.ProductName = materialName;//物料名称
|
newMateria.SmallUnit = item.stockUnit;//库存单位
|
newMateria.UnitConvert = 1M;
|
newMateria.BigUnit = item.stockUnit;//采购单位
|
newMateria.Enable = 1;//设置为可用
|
///////////////
|
newMateria.Brand_Id = 0;//库存预警量
|
newMateria.ProductModel = materialCode;
|
newMateria.Provider_Id = 926;
|
newMateria.ProviderCode = "PV201940371";
|
newMateria.ProviderShortName = "默认供应商";
|
newMateria.Consignor_Id = 30;
|
newMateria.ConsignorCode = "GX30";
|
newMateria.ConsignorName = "广州西门子";
|
newMateria.UserProduct_Id = 1007;
|
newMateria.UserProductCode = "100000001";
|
mod.Base_ProductInfo.Add(newMateria);
|
mod.SaveChanges();
|
//通过新建获取产品ID
|
productId = newMateria.Product_Id;
|
#endregion
|
}
|
if (productId == 0)
|
{
|
continue;//没这个物料到循环尾
|
}
|
//查找跟踪号
|
if (trackingNum == "")//一个出库单只有一个跟踪号只需要匹配一次
|
{
|
Purchase_OrderList saleList = mod.Purchase_OrderList.FirstOrDefault(x => x.ExtendField07 == sale.saleCode && x.SpecAlias == item.saleItem);
|
trackingNum = saleList == null ? "" : saleList.ExtendField04;
|
}
|
|
if (trackingNum != "")
|
{
|
saleOrder.TrackingNumber = trackingNum;
|
}
|
#endregion
|
int saleItem = 0;
|
bool saleitemis0 = Int32.TryParse(item.saleItem, out saleItem);
|
Sale_OrderList orderList = new Sale_OrderList();
|
orderList.ExtendField06 = item.saleItem;//销售项号
|
orderList.ProductCode = materialCode;//物料编号
|
orderList.ProductName = materialName;//物料名称
|
orderList.SmallUnit = item.stockUnit;//库存单位
|
orderList.QuantityShipped = item.exitQty;//预出库数量 extendField03
|
orderList.ValidQuantity = item.exitQty;//未出库数量 extendField03
|
orderList.ExtendField03 = "新建";
|
orderList.ExtendField01 = "261";//移动类型
|
orderList.ExtendField09 = item.storageLocation;//G028 库区
|
orderList.TrackingNumber = saleItem > 0 ? trackingNum : "";//跟踪号
|
|
orderList.SaleCode = sale.saleCode;//销售单
|
orderList.ExtendField10 = item.batch;//保留项号
|
orderList.CreateDate = DateTime.Now;
|
//不为空的垃圾字段
|
orderList.Product_Id = productId;
|
orderList.ProductModel = materialCode;
|
saleOrder.Sale_OrderList.Add(orderList);
|
}
|
#endregion
|
mod.Sale_Order.Add(saleOrder);
|
int numList = mod.SaveChanges();
|
}
|
|
|
}
|
}
|
catch (Exception ex)
|
{
|
//logtxt.txtWrite("类名:sapWcf,函数名: pickList:发生异常" + JsonConvert.SerializeObject(sale) + ex.ToString(), 2);
|
//logtxt.txtWrite("类名:sapWcf,函数名: pickList:发生异常" + JsonConvert.SerializeObject(sale) + ex.ToString(), 2);
|
//logtxt.txtWrite("类名:sapWcf,函数名: pickList:收到" + sale.saleChild.Count + "条数据,出现异常:" + ex.Message + ",堆栈:" + ex.StackTrace, 0);
|
logtxt.txtWrite("类名:sapWcf,函数名: pickList:收到" + sale.saleChild.Count + "条数据,出现异常:" + ex.Message, 0);
|
result = DateTime.Now.ToString() + "导入出库单异常" + ex.Message;
|
}
|
logtxt.txtWrite("类名:sapWcf,函数名: pickList:收到" + sale.saleChild.Count + "条数据,执行完毕:" + result, 0);
|
return result;
|
}
|
/// <summary>
|
/// 添加物料
|
/// </summary>
|
/// <param name="material">要添加的物料集合</param>
|
/// <returns></returns>
|
public string addMaterial(List<Material> materials)
|
{
|
string result = "";
|
try
|
{
|
if (materials.Count == 0)
|
{
|
//return result = "没有传入数据";
|
return result = "";//返回成功 【EditBy shaocx,2022-06-17】
|
}
|
//记录次数
|
using (dbModel mod = new dbModel())
|
{
|
int num = 0;
|
foreach (var item in materials)
|
{
|
num++;
|
if (item.materialCode == null)
|
{
|
result += "第" + num + "条数据:物料编号为空\r\n";
|
continue;
|
}
|
string materialCode = item.materialCode;
|
|
Base_ProductInfo checkMateria = mod.Base_ProductInfo.Where(x => x.ProductCode == materialCode).FirstOrDefault();
|
//已存在物料就修改 ,没有就新建
|
if (checkMateria != null)
|
{
|
checkMateria.ProductName = item.materialName;//物料名称
|
checkMateria.Weight = item.weight;//重量
|
checkMateria.BigUnit = item.purchaseUnit;//采购单位
|
checkMateria.SmallUnit = item.stockUnit;//库存单位
|
checkMateria.TypeName = item.Category;//物料类别;
|
checkMateria.Creator = item.creator;//创建人
|
continue;
|
}
|
Base_ProductInfo material = new Base_ProductInfo();
|
material.ProductCode = item.materialCode;//物料编号
|
material.ProductName = item.materialName;//物料名称
|
material.Weight = item.weight;//重量
|
material.TypeName = item.Category;//物料类别;
|
material.Brand_Id = 0;//库存预警量
|
material.BigUnit = item.purchaseUnit;//采购单位
|
material.SmallUnit = item.stockUnit;//库存单位
|
material.Creator = item.creator;//创建人
|
material.CreateDate = DateTime.Now;
|
material.Enable = 1;//启用
|
material.UnitConvert = 1;//单位转换
|
//不为空的垃圾字段
|
material.Provider_Id = 926;
|
material.ProviderCode = "PV201940371";
|
material.ProviderShortName = "默认供应商";
|
material.UserProduct_Id = 1007;
|
material.ProductModel = item.materialCode;
|
material.Consignor_Id = 30;
|
material.ConsignorCode = "GX30";
|
material.ConsignorName = "广州西门子";
|
mod.Base_ProductInfo.Add(material);
|
}
|
mod.SaveChanges();
|
}
|
|
//writeTxt.writeInfo("addMaterial", INFO);
|
}
|
catch (Exception ex)
|
{
|
result += "\r\n" + ex.Message;
|
}
|
return result;
|
}
|
/// <summary>
|
/// 库存盘点,此接口被张展的iWareSAP所调用
|
/// </summary>
|
/// <param name="stockQuantity">要核对的数据</param>
|
/// <returns>成功返回"",否则返回错误信息</returns>
|
public string takeStock(List<ProductStock> stockQuantity)
|
{
|
//logtxt.txtWrite("类名:sapWcf,函数名: takeStock:收到盘点数据", 0);
|
Log4NetHelper.WriteInfoLog(LogType.TakeStock, "收到盘点数据:" + JsonConvert.SerializeObject(stockQuantity));
|
|
Stopwatch deviceSw = new Stopwatch();
|
deviceSw.Start();//运行计算器开始记时
|
List<ProductStock> sapInfo = new List<ProductStock>();
|
#region 读取本地SA[库存盘点txt
|
//var files = Directory.GetFiles("D:\\log_ShuYing");
|
//注意:是按照创建时间降序排列
|
var files = Directory.GetFiles("D:\\log_takeStock").OrderByDescending(x => new FileInfo(x).CreationTime).ToList();//盘点存放文件改为 log_takeStock 【EditBy shaocx,2022-10-12】
|
if (files.Count < 1)
|
{
|
//logtxt.txtWrite("类名:sapWcf,函数名: takeStock:收到数据为空 条", 2);
|
Log4NetHelper.WriteInfoLog(LogType.TakeStock, "收到数据为空");
|
return "";
|
}
|
|
var filePath = files[0];
|
var fileName = Path.GetFileName(filePath);
|
using (var reader = new StreamReader(filePath))
|
{
|
var line = reader.ReadLine();
|
if (line.StartsWith("MATNR"))
|
{
|
while (!string.IsNullOrEmpty(line))
|
{
|
if (!line.StartsWith("MATNR"))
|
{
|
var spliterChar = Encoding.UTF8.GetString(new byte[] { 9 });
|
var args = line.Split(spliterChar.ToCharArray());
|
if (args[7] == "3TG1" && args[8] == "G021")
|
{
|
try
|
{
|
ProductStock stock = new ProductStock();
|
stock.SaleCode = args[11];
|
if (args[12] == "")
|
{
|
stock.SaleItem = args[12];
|
}
|
else
|
{
|
stock.SaleItem = Convert.ToInt32(args[12]) < 1 ? "" : args[12];
|
}
|
stock.materialCode = args[0];
|
stock.materialName = args[1];
|
stock.stockUnit = args[6];
|
stock.stockQuantity = decimal.Parse(args[19]);
|
sapInfo.Add(stock);
|
}
|
catch (Exception)
|
{
|
|
}
|
|
}
|
}
|
line = reader.ReadLine();
|
}
|
}
|
else
|
{
|
return "";
|
}
|
}
|
#endregion
|
|
if (sapInfo.Count < 1)
|
{
|
//logtxt.txtWrite("类名:sapWcf,函数名: sapInfo:转换数据为空 条", 2);
|
Log4NetHelper.WriteInfoLog(LogType.TakeStock, "sapInfo:转换数据为空");
|
return "";
|
}
|
string result = "";
|
try
|
{
|
using (dbModel mod = new dbModel())//productCode
|
{
|
|
// DateTime todayTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));//今天凌晨时间
|
//删除之前的 盘点数据
|
string sql = "truncate table TakeStock ";
|
mod.Database.ExecuteSqlCommand(sql);
|
|
//立库库存数据
|
List<vvBase_ProductPosition> stockInfo = mod.vvBase_ProductPosition.Where(x => x.PositionType == 1 && x.ProductStorage > 0).ToList();
|
#region 合并相同项
|
List<vvBase_ProductPosition> stockInfoMerge = new List<vvBase_ProductPosition>();
|
var merge = stockInfo.GroupBy(x => new { x.SaleCode, x.ExtendField08, x.ProductCode });
|
foreach (var item in merge)
|
{
|
vvBase_ProductPosition temporaryStock = new vvBase_ProductPosition();
|
if (item.ToList().Count > 1)
|
{
|
|
for (int k = 1; k < item.ToList().Count; k++)
|
{
|
temporaryStock.ProductStorage = item.ToList()[0].ProductStorage + item.ToList()[k].ProductStorage;
|
}
|
}
|
else
|
{
|
temporaryStock.ProductStorage = item.ToList()[0].ProductStorage;
|
}
|
temporaryStock.SmallUnit = item.ToList()[0].SmallUnit;
|
temporaryStock.ProductCode = item.ToList()[0].ProductCode;
|
temporaryStock.ProductName = item.ToList()[0].ProductName;
|
temporaryStock.SaleCode = item.ToList()[0].SaleCode;
|
temporaryStock.ExtendField08 = item.ToList()[0].ExtendField08;
|
stockInfoMerge.Add(temporaryStock);
|
}
|
int aa = mod.SaveChanges();
|
#endregion
|
|
//SAP传过来的 销售单下数据
|
|
//立库库存里和sap数据对应的项
|
List<vvBase_ProductPosition> stockInfoIdentical = stockInfoMerge.Where(p => sapInfo.Any(x => x.SaleCode == p.SaleCode &&
|
x.SaleItem == p.ExtendField08 && x.stockQuantity == p.ProductStorage && x.materialCode == p.ProductCode)).ToList();
|
//SAP库存和立库库存里数据对应的项
|
List<ProductStock> sapInfoIdentical = sapInfo.Where(p => stockInfoMerge.Any(x => x.SaleCode == p.SaleCode && x.ExtendField08 == p.SaleItem &&
|
x.ProductStorage == p.stockQuantity && x.ProductCode == p.materialCode)).ToList();
|
|
#region 移除相同项
|
if (stockInfoIdentical.Count > 0)//移除立库库存相同项
|
{
|
logtxt.txtWrite("类名:sapWcf,函数名: takeStock:盘点库存都相同的数据有:" + stockInfoIdentical.Count + "条", 0);
|
foreach (var itemRE in stockInfoIdentical)
|
{
|
stockInfoMerge.Remove(itemRE);
|
}
|
}
|
if (sapInfoIdentical.Count > 0)//移除SAP库存相同项
|
{
|
foreach (var itemRE in sapInfoIdentical)
|
{
|
sapInfo.Remove(itemRE);
|
}
|
|
}
|
#endregion
|
//----------------------------------------------------------------------------------------------------------
|
//立库库存里和sap跟踪号和物料号对应且数量不对应的项
|
List<vvBase_ProductPosition> stockInfoIdentical2 = stockInfoMerge.Where(p => sapInfo.Any(x => x.SaleCode == p.SaleCode &&
|
x.SaleItem == p.ExtendField08 && x.materialCode == p.ProductCode)).ToList();
|
//SAP库存和立库库存里跟踪号和物料号对应且数量不对应的项
|
List<ProductStock> sapInfoIdentical2 = sapInfo.Where(p => stockInfoMerge.Any(x => x.SaleCode == p.SaleCode &&
|
x.ExtendField08 == p.SaleItem && x.ProductCode == p.materialCode)).ToList();
|
int matching = 0;//记录匹配失败的数量
|
aa = mod.SaveChanges();
|
TakeStock checkStatistics = new TakeStock();
|
checkStatistics.MateralName = "排除相同数据:" + stockInfoIdentical.Count + "条,数量差异数据:" + stockInfoIdentical2.Count + "条, " + "仅立库数据:" + stockInfoMerge.Count +
|
"条, " + "仅SAP数据:" + sapInfo.Count + "条。";
|
checkStatistics.CreateDate = DateTime.Now;//创建时间
|
mod.TakeStock.Add(checkStatistics);
|
int a = mod.SaveChanges();
|
if (sapInfoIdentical2.Count > 0)
|
{
|
#region 移除跟踪号和物料号对应且数量不对应的项
|
if (stockInfoIdentical2.Count > 0)//移除立库库存里和sap跟踪号和物料号对应且数量不对应的项
|
{
|
logtxt.txtWrite("类名:sapWcf,函数名: takeStock:盘点库存都相同的数据有:" + stockInfoIdentical2.Count + "条", 0);
|
foreach (var itemRE in stockInfoIdentical2)
|
{
|
stockInfoMerge.Remove(itemRE);
|
}
|
}
|
if (sapInfoIdentical2.Count > 0)//移除SAP库存和立库库存里跟踪号和物料号对应且数量不对应的项
|
{
|
foreach (var itemRE in sapInfoIdentical2)
|
{
|
sapInfo.Remove(itemRE);
|
}
|
|
}
|
#endregion
|
#region 写入匹配到的物料
|
|
|
for (int j = 0; j < sapInfoIdentical2.Count; j++)
|
{
|
//找出对应的立库库存数量
|
vvBase_ProductPosition stockInfoIdentical22 = stockInfoIdentical2.FirstOrDefault(x => x.ProductCode == sapInfoIdentical2[j].materialCode &&
|
x.SaleCode == sapInfoIdentical2[j].SaleCode && x.ExtendField08 == sapInfoIdentical2[j].SaleItem);
|
if (sapInfoIdentical2 != null)
|
{
|
TakeStock check = new TakeStock();
|
check.ProcureCode = sapInfoIdentical2[j].SaleCode;//采购单号
|
check.ProcureItem = sapInfoIdentical2[j].SaleItem;//采购项号
|
check.MateralCode = sapInfoIdentical2[j].materialCode;//物料编号
|
check.MateralName = sapInfoIdentical2[j].materialName;//物料名称
|
check.Unit = stockInfoIdentical22.SmallUnit;//库存单位
|
check.SapQuantity = sapInfoIdentical2[j].stockQuantity;//SAP数量
|
check.Ex1 = stockInfoIdentical22.SmallUnit;//SAP单位
|
check.StockQuantity = stockInfoIdentical22.ProductStorage;//库存数量
|
// check.Ex2 = sapInfo[j].isStock == 1 ? "常规货位" : "暂存区";//库存单位
|
check.CreateDate = DateTime.Now;//创建时间
|
mod.TakeStock.Add(check);
|
}
|
else
|
{
|
matching++;
|
}
|
|
}
|
if (matching > 0)
|
{
|
logtxt.txtWrite("类名:sapWcf,函数名: takeStock:相同项数量不同写入库存 匹配失败数量:" + matching + "条", 2);
|
}
|
#endregion
|
}
|
mod.SaveChanges();
|
#region 判断库存里有的,sap里没有的物料,如果有就写入到盘点表里
|
//
|
if (stockInfoMerge.Count > 0)
|
{
|
foreach (var stock in stockInfoMerge)
|
{
|
TakeStock check = new TakeStock();
|
check.ProcureCode = stock.SaleCode;//销售单号
|
check.ProcureItem = stock.ExtendField08;//销售项号
|
check.MateralCode = stock.ProductCode;//物料编号
|
check.MateralName = stock.ProductName;//物料名称
|
check.Unit = "";//SAP单位
|
check.SapQuantity = 0;//SAP数量
|
check.Ex1 = stock.SmallUnit;//库存单位
|
check.StockQuantity = stock.ProductStorage;//库存数量
|
check.CreateDate = DateTime.Now;//创建时间
|
mod.TakeStock.Add(check);
|
}
|
}
|
|
mod.SaveChanges();
|
#endregion
|
|
#region 写入SAP有的库存没有的数据总和
|
|
//判断有没有库存里有的,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 = "保存失败";
|
}
|
//logtxt.txtWrite("类名:sapWcf,函数名: takeStock:盘点库存计算时间:" + deviceSw.Elapsed.ToString(), 0);
|
Log4NetHelper.WriteInfoLog(LogType.TakeStock, "类名:sapWcf,函数名: takeStock:盘点库存计算时间:" + deviceSw.Elapsed.ToString());
|
deviceSw.Stop();
|
|
|
//处理成功后,将所有文件删除
|
var remove_files = Directory.GetFiles("D:\\log_takeStock");
|
foreach (var item in remove_files)
|
{
|
File.Delete(item);//文件删除
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
//logtxt.txtWrite("类名:sapWcf,函数名: takeStock:异常" + ex.ToString() + ex.StackTrace.ToString(), 2);
|
Log4NetHelper.WriteErrorLog(LogType.TakeStock, "类名:sapWcf,函数名: takeStock:异常:" + ex.Message, ex);
|
result += "\r\n" + ex.Message;
|
}
|
|
return result;
|
|
}
|
}
|
}
|