using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json;
|
using Rhea.Common;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Tiger.IBusiness;
|
using Tiger.Model;
|
using Tiger.Model.Minsun;
|
using System.Diagnostics;
|
using SqlSugar;
|
using Org.BouncyCastle.Ocsp;
|
|
namespace Tiger.Business.WMS
|
{
|
public class SrmToWms : ISrmToWms
|
{
|
public static object SrmLock { get; } = new object();
|
|
/// <summary>
|
/// SRM推送到WMS
|
/// </summary>
|
/// <param name="dlvys"></param>
|
/// <returns></returns>
|
public ApiAction SrmDlvys(List<iSrmDlvy> dlvys)
|
{
|
var action = new ApiAction();
|
DbClient db = Biz.Db;
|
DateTime runStart = DateTime.Now;
|
var companyId = "";
|
try
|
{
|
if (dlvys != null && dlvys.Count > 0)
|
{
|
var dlvyList = new List<WMS_SRMRcece>();
|
var asnList = new List<WMS_SRM_ASN>();
|
var dlvyDtlList = new List<WMS_SRM_ASN_LINES>();
|
var dlvySnList = new List<WMS_SRMSNList>();
|
var deliveryNoList = new List<string>();
|
var snDic = new Dictionary<string, List<WMS_SRMSNList>>();
|
List<iSrmDlvy> srmDlvys = new List<iSrmDlvy>();
|
|
//Work.DoAsync(() =>
|
//{
|
action = SaveSrmDlvyData(dlvys.Clone()); //异步推到新数据库
|
//});
|
|
return action;
|
foreach (var group in dlvys.Select(q => q.company).Distinct())
|
{
|
switch (group)
|
{
|
case "XCSJ":
|
db = Biz.DataSource["Main"].Client;
|
break;
|
|
case "DGXC":
|
db = Biz.DataSource["DGXC"].Client;
|
break;
|
|
case "AHXC":
|
db = Biz.DataSource["AHXC"].Client;
|
break;
|
}
|
companyId = group;
|
srmDlvys = dlvys.Where(x => x.company == group).ToList();
|
foreach (var dlvy in srmDlvys)
|
{
|
if (dlvy.documentStatus != "0")
|
{
|
Logger.Scheduler.Info($"QqtSRM({dlvy.company})开始推送到WMS...");
|
var DeliveryNo = dlvy.documnetNumber;
|
//送货单加入列表供保存时用
|
deliveryNoList.Add(DeliveryNo);
|
var snList = db.Queryable<WMS_SRMSNList>().Where(q => q.DeliveryNo == DeliveryNo).ToList();
|
WMS_SRMRcece srmRcece = db.Queryable<WMS_SRMRcece>().Where(q => q.DeliveryNo == DeliveryNo).Single() ?? new();
|
|
srmRcece.DeliveryNo = DeliveryNo;
|
srmRcece.Status = dlvy.documentStatus;
|
srmRcece.InnerVendorCode = dlvy.supplierCode;
|
//srmRcece.DeliveryType = dlvy["deliveryType"]?.ToInt32() ?? 0;
|
//srmRcece.LogisticsStatus = dlvy["logisticsStatus"]?.ToString();
|
//srmRcece.PurchaseType = dlvy["purchaseType"]?.ToInt32() ?? 0;
|
//srmRcece.LastOperateTime = dlvy["lastOperateTime"]?.ToString();
|
srmRcece.CreationTime = DateTime.Now;
|
srmRcece.LastModificationTime = DateTime.Now;
|
srmRcece.FLAW = "Y";
|
srmRcece.FLAT = "N";
|
srmRcece.FLAN = "N";
|
dlvyList.Add(srmRcece);
|
|
WMS_SRM_ASN asn = db.Queryable<WMS_SRM_ASN>().Where(q => q.DeliveryNo == DeliveryNo).Single() ?? new();
|
|
asn.DeliveryNo = DeliveryNo;
|
asn.status = (Convert.ToInt32(dlvy.documentStatus));
|
asn.innerVendorCode = dlvy.supplierCode;
|
asn.innerVendorName = dlvy.supplierName;
|
//asn.deliveryType = dlvy["deliveryType"]?.ToInt32() ?? 0;
|
//asn.logisticsStatus = dlvy["logisticsStatus"]?.ToInt32() ?? 0;
|
asn.deliveryDate = iSRM.FromUnixTime(Convert.ToInt64(dlvy.deliveryDate));
|
asn.planArrivedDate = iSRM.FromUnixTime(Convert.ToInt64(dlvy.bookDeliveryDate));
|
asn.CreationTime = DateTime.Now;
|
asn.LastModificationTime = DateTime.Now;
|
//asn.updateTime = FromUnixTime(dlvy["updateTime"]?.ToInt64());
|
//asn.grossWeight = dlvy["grossWeight"]?.ToDecimal() ?? 0;
|
//asn.netWeight = dlvy["netWeight"]?.ToDecimal() ?? 0;
|
//asn.totalPackingQty = dlvy["totalPackingQty"]?.ToDecimal() ?? 0;
|
//asn.cargoDeliveryTime = FromUnixTime(dlvy["cargoDeliveryTime"]?.ToInt64());
|
asn.CreationTime = DateTime.Now;
|
asnList.Add(asn);
|
|
//循环单身列表
|
foreach (var item in dlvy.bookDeliveryItems)
|
{
|
WMS_SRM_ASN_LINES dtl = new()
|
{
|
DeliveryNo = DeliveryNo,
|
lineNo = Convert.ToInt32(item.orderItemNumber), //pmdt002 项次
|
poErpNo = item.orderNumber,
|
poLineNo = item.lotNum, //分批序 pmdt004
|
purchaseType = Convert.ToInt32(item.purchaseType),
|
productCode = item.materialNumber,
|
//productName = item.productName,
|
//productScale = item.productScale,
|
deliveryQty = Convert.ToDecimal(item.deliveryQuantity),
|
//deliveryUnitCode = item.deliveryUnitCode,
|
deliveryUnitName = item.purchaseUnit,
|
//deliveryValuationQty = Convert.ToInt32(item.deliveryValuationQty),
|
//price = item.price"]?.ToDouble() ?? double.MinValue,
|
//taxPrice = item.taxPrice"]?.ToDouble() ?? double.MinValue,
|
status = Convert.ToInt32(item.itemStatus),
|
extendN01 = item.itemNumber, //pmdtseq
|
//receiveStatus = Convert.ToInt32(item.receiveStatus),
|
//buyerName = item.buyerName,
|
//expectedDate = FromUnixTime(Convert.ToInt64(item.expectedDate)),
|
//answerDate = FromUnixTime(Convert.ToInt64(item.answerDate)),
|
//currencyCode = item.currencyCode,
|
//currencyName = item.currencyName,
|
//sendVerifyStatus = Convert.ToInt32(item.sendVerifyStatus),
|
//resultFlag = item.resultFlag,
|
//remark = item.remark,
|
//brandName = item.brandName,
|
};
|
dlvyDtlList.Add(dtl);
|
}
|
|
//循环条码列表
|
foreach (var item in dlvy.barcodeDetailDatas)
|
{
|
var sn = item.packetBarcodeNumber;
|
WMS_SRMSNList dlvySn = snList.Where(q => q.SmallBarcode == sn).SingleOrDefault() ?? new();
|
|
dlvySn.DeliveryNo = DeliveryNo;
|
//dlvySn.BILLCODE = item.poErpNo;
|
//dlvySn.BILLLINE = item.poLineNo;
|
dlvySn.MATERIALCODE = item.materialNumber;
|
dlvySn.SOURCETYPE = "SRM";
|
//dlvySn.ITEM_NAME = item.productName;
|
//dlvySn.SPECIFICATION = item.productScale;
|
dlvySn.IncludeQty = Convert.ToDecimal(item.materialQuantity);
|
dlvySn.SmallBarcode = item.packetBarcodeNumber;
|
dlvySn.BigBarcode = item.mediumBarcodeNumber;
|
dlvySn.OuterBarcode = item.cartonBarcodeNumber;
|
dlvySn.CreationTime = DateTime.Now;
|
dlvySn.production_date = DateTime.Now;
|
dlvySn.LastModificationTime = DateTime.Now;
|
snList.RemoveAll(q => q.SmallBarcode == sn);
|
dlvySnList.Add(dlvySn);
|
}
|
//将sn列表加入字典
|
if (!snDic.ContainsKey(DeliveryNo))
|
{
|
snDic.Add(DeliveryNo, snList);
|
}
|
Logger.Scheduler.Info($"QqtSRM({dlvy.company}) Get Delivery[{DeliveryNo}] Details[{dlvyDtlList.Count}] SN[{dlvySnList.Count}] successful");
|
}
|
else
|
{
|
action.IsSuccessed = false;
|
action.Message = $"SRM推送送货单状态[{dlvy.documentStatus}]不对";
|
return action;
|
}
|
}
|
|
//保存到数据库
|
var dbTran = db.UseTran(() =>
|
{
|
db.Storageable(dlvyList, "system").ExecuteCommand();
|
db.Storageable(asnList, "system").ExecuteCommand();
|
if (dlvyDtlList.Any())
|
{
|
foreach (var d in deliveryNoList)
|
{
|
db.Deleteable<WMS_SRM_ASN_LINES>().Where(q => q.DeliveryNo == d).ExecuteCommand();
|
}
|
db.Storageable(dlvyDtlList, "system").ExecuteCommand();
|
}
|
if (dlvySnList.Any())
|
{
|
var i = 0;
|
while (dlvySnList.Count > i)
|
{
|
var temp = dlvySnList.Skip(i).Take(500).ToList();
|
db.Storageable(temp, "system").ExecuteCommand();
|
i += temp.Count;
|
}
|
}
|
//循环字典内的sn列表有存在的删除
|
if (snDic.Any())
|
{
|
foreach (var item in snDic.Keys)
|
{
|
if (snDic[item].Any())
|
{
|
var i = 0;
|
while (snDic[item].Count > i)
|
{
|
var temp = snDic[item].Skip(i).Take(500).ToList();
|
db.Deleteable(temp).ExecuteCommand();
|
i += temp.Count;
|
}
|
}
|
}
|
}
|
});
|
if (!dbTran.IsSuccess)
|
{
|
throw dbTran.ErrorException;
|
}
|
}
|
}
|
DateTime endTime = DateTime.Now;
|
Logger.Scheduler.Info($"QqtSRM({companyId}) 推送送货单完成,耗时:[{(endTime - runStart).TotalMilliseconds}]");
|
action.Message = $"SRM推送送货单到WMS成功";
|
}
|
catch (Exception ex)
|
{
|
Logger.Scheduler.Info($"QqtSRM({companyId}) 推送送货单异常,耗时:[{(DateTime.Now - runStart).TotalMilliseconds}]");
|
return action.GetResponse().CatchExceptionWithLog(ex, $"SRM To WMS 推送异常");
|
}
|
return action;
|
}
|
|
/// <summary>
|
/// QqtSRM数据推送到WMS
|
/// </summary>
|
/// <param name="dlvys"></param>
|
/// <returns></returns>
|
public ApiAction SrmDlvysToWms(List<iSrmDlvy> dlvys)
|
{
|
var action = new ApiAction();
|
DbClient db = Biz.Db;
|
DateTime runStart = DateTime.Now;
|
try
|
{
|
Logger.Scheduler.Info($"QqtSRM开始推送送货单[{string.Join(",", dlvys.Select(x => x.documnetNumber))}]到新WMS...");
|
var dlvyList = new List<BIZ_SRM_DLVY>();
|
var dlvyDtlList = new List<BIZ_SRM_DLVY_DTL>();
|
var dlvySnList = new List<BIZ_SRM_DLVY_SN>();
|
var deliveryNoList = new List<string>();
|
var snDic = new Dictionary<string, List<BIZ_SRM_DLVY_SN>>();
|
//var pkgs = new List<WMS_ITEM_PKG>();
|
//var items = new List<WMS_ITEM>();
|
//var hiss = new List<WMS_ITEM_HIS>();
|
foreach (var dlvy in dlvys)
|
{
|
if (dlvy.documentStatus != "0")
|
{
|
//Debug.WriteLine($"Begin1:{DateTime.Now}");
|
Logger.Scheduler.Info($"New QqtSRM({dlvy.company})开始推送数据...");
|
var DeliveryNo = dlvy.documnetNumber;
|
//送货单加入列表供保存时用
|
deliveryNoList.Add(DeliveryNo);
|
var snList = db.Queryable<BIZ_SRM_DLVY_SN>().Where(q => q.DELIVERY_NO == DeliveryNo).ToList();
|
BIZ_SRM_DLVY _dlvy = db.Queryable<BIZ_SRM_DLVY>().Where(q => q.DELIVERY_NO == DeliveryNo).Single() ?? new()
|
{
|
DELIVERY_NO = DeliveryNo,
|
STATUS = Convert.ToInt32(dlvy.documentStatus),
|
SUPP_CODE = dlvy.supplierCode,
|
HANDLED = 0,
|
SUPP_NAME = dlvy.supplierName,
|
DELIVERY_DATE = iSRM.FromUnixTime(Convert.ToInt64(dlvy.deliveryDate)),
|
PLANARRIVED_DATE = iSRM.FromUnixTime(Convert.ToInt64(dlvy.bookDeliveryDate)),
|
AUTH_ORG = dlvy.company,
|
};
|
dlvyList.Add(_dlvy);
|
|
//循环单身列表
|
var PoNo = dlvy.bookDeliveryItems[0].orderNumber;
|
var dtls = db.Queryable<BIZ_SRM_DLVY_DTL>().Where(q => q.DELIVERY_NO == DeliveryNo).ToList();
|
foreach (var item in dlvy.bookDeliveryItems)
|
{
|
BIZ_SRM_DLVY_DTL dtl = dtls.Where(x => x.ITEM_CODE == item.materialNumber && x.PO_LINE_NO == Convert.ToInt32(item.itemNumber)).FirstOrDefault() ?? new();
|
dtl.DELIVERY_NO = DeliveryNo;
|
dtl.LINE_NO = Convert.ToInt32(item.orderItemNumber); //pmdt002 项次
|
dtl.ERP_PO_NO = item.orderNumber;
|
dtl.BATCH_NUMBER = item.lotNum; //分批序 pmdt004
|
dtl.PO_TYPE = Convert.ToInt32(item.purchaseType);
|
dtl.ITEM_CODE = item.materialNumber;
|
//productName = item.productName,
|
//productScale = item.productScale,
|
dtl.QTY = Convert.ToDecimal(item.deliveryQuantity);
|
dtl.UNIT = item.purchaseUnit;
|
dtl.PRICE = Convert.ToDouble(item.price);
|
dtl.TAX_PRICE = Convert.ToDouble(item.taxPrice);
|
dtl.STATUS = Convert.ToInt32(item.itemStatus);
|
dtl.PO_LINE_NO = Convert.ToInt32(item.itemNumber); //pmdtseq
|
dtl.BUYER = item.buyerName;
|
//receiveStatus = Convert.ToInt32(item.receiveStatus),
|
//expectedDate = FromUnixTime(Convert.ToInt64(item.expectedDate)),
|
//answerDate = FromUnixTime(Convert.ToInt64(item.answerDate)),
|
//currencyCode = item.currencyCode,
|
//currencyName = item.currencyName,
|
//sendVerifyStatus = Convert.ToInt32(item.sendVerifyStatus),
|
//resultFlag = item.resultFlag,
|
//remark = item.remark,
|
//brandName = item.brandName,
|
dtl.AUTH_ORG = dlvy.company;
|
dlvyDtlList.Add(dtl);
|
Logger.Scheduler.Info($"新SRM单身:[{DeliveryNo} - {item.materialNumber}]");
|
}
|
|
//循环条码列表
|
foreach (var item in dlvy.barcodeDetailDatas.OrderBy(x => x.materialNumber))
|
{
|
var sn = item.packetBarcodeNumber;
|
BIZ_SRM_DLVY_SN dlvySn = snList.Where(q => q.SMALL_BARCODE == sn).SingleOrDefault() ?? new();
|
|
dlvySn.DELIVERY_NO = DeliveryNo;
|
//dlvySn.PO_LINE_NO = lineno;
|
dlvySn.ITEM_CODE = item.materialNumber;
|
dlvySn.QTY = Convert.ToDecimal(item.materialQuantity);
|
dlvySn.SMALL_BARCODE = sn;
|
dlvySn.SMALL_SN = sn;
|
dlvySn.BIG_BARCODE = item.mediumBarcodeNumber;
|
dlvySn.BIG_SN = item.mediumBarcodeNumber;
|
dlvySn.OUTER_BARCODE = item.cartonBarcodeNumber;
|
dlvySn.OUTER_SN = item.cartonBarcodeNumber;
|
dlvySn.AUTH_ORG = dlvy.company;
|
dlvySn.PO_ERP_NO = PoNo;
|
dlvySn.IMPORTED = 1;
|
dlvySn.IMPORTED_DATE = DateTime.Now;
|
|
//dlvySn.PROD_DATE = DateTime.Now;
|
snList.RemoveAll(q => q.SMALL_BARCODE == sn);
|
dlvySnList.Add(dlvySn);
|
Debug.WriteLine(dlvySnList.Count);
|
|
////OUTER_SN
|
//if (!dlvySn.OUTER_SN.IsNullOrEmpty() && !pkgs.Any(q => q.SN == dlvySn.OUTER_SN))
|
//{
|
// //var pkg = db.Queryable<WMS_ITEM_PKG>().Where(x => x.SN == dlvySn.OUTER_SN).First() ?? new() {
|
// //};
|
// pkgs.Add(new WMS_ITEM_PKG()
|
// {
|
// AUTH_ORG = dlvy.company,
|
// SN = dlvySn.OUTER_SN,
|
// PKG_TYPE = dlvySn.OUTER_SN.StartsWith("P") ? WMS_ITEM_PKG.PKG_TYPEs.Pallet.GetValue() : (dlvySn.OUTER_SN.StartsWith("C") ? WMS_ITEM_PKG.PKG_TYPEs.Carton.GetValue() : WMS_ITEM_PKG.PKG_TYPEs.OnePiece.GetValue()),
|
// ITEM_CODE = dlvySn.ITEM_CODE,
|
// QTY = dlvy.barcodeDetailDatas.Where(q => q.cartonBarcodeNumber == dlvySn.OUTER_SN).Sum(q => Convert.ToDecimal(q.materialQuantity)),
|
// TRANS_CODE = nameof(BIZ_SRM_DLVY),
|
// TRANS_NO = dlvySn.DELIVERY_NO,
|
// SUPP_CODE = dlvySn.SUPP_CODE,
|
// });
|
//}
|
////BIG_SN
|
//if (!dlvySn.BIG_SN.IsNullOrEmpty() && !pkgs.Any(q => q.SN == dlvySn.BIG_SN))
|
//{
|
// pkgs.Add(new WMS_ITEM_PKG()
|
// {
|
// AUTH_ORG = dlvy.company,
|
// SN = dlvySn.BIG_SN,
|
// PARENT_SN = dlvySn.OUTER_SN,
|
// PKG_TYPE = dlvySn.BIG_SN.StartsWith("P") ? WMS_ITEM_PKG.PKG_TYPEs.Pallet.GetValue() : (dlvySn.BIG_SN.StartsWith("C") ? WMS_ITEM_PKG.PKG_TYPEs.Carton.GetValue() : WMS_ITEM_PKG.PKG_TYPEs.OnePiece.GetValue()),
|
// ITEM_CODE = dlvySn.ITEM_CODE,
|
// QTY = dlvy.barcodeDetailDatas.Where(q => q.mediumBarcodeNumber == dlvySn.BIG_SN).Sum(q => Convert.ToDecimal(q.materialQuantity)),
|
// TRANS_CODE = nameof(BIZ_SRM_DLVY),
|
// TRANS_NO = dlvySn.DELIVERY_NO,
|
// SUPP_CODE = dlvySn.SUPP_CODE,
|
// });
|
//}
|
////SMALL_SN
|
//if (!dlvySn.SMALL_SN.IsNullOrEmpty() && !pkgs.Any(q => q.SN == dlvySn.SMALL_SN))
|
//{
|
// pkgs.Add(new WMS_ITEM_PKG()
|
// {
|
// AUTH_ORG = dlvy.company,
|
// SN = dlvySn.SMALL_SN,
|
// PARENT_SN = dlvySn.BIG_SN,
|
// PKG_TYPE = dlvySn.SMALL_SN.StartsWith("P") ? WMS_ITEM_PKG.PKG_TYPEs.Pallet.GetValue() : (dlvySn.SMALL_SN.StartsWith("C") ? WMS_ITEM_PKG.PKG_TYPEs.Carton.GetValue() : WMS_ITEM_PKG.PKG_TYPEs.OnePiece.GetValue()),
|
// ITEM_CODE = dlvySn.ITEM_CODE,
|
// QTY = dlvySn.QTY,
|
// TRANS_CODE = nameof(BIZ_SRM_DLVY),
|
// TRANS_NO = dlvySn.DELIVERY_NO,
|
// SUPP_CODE = dlvySn.SUPP_CODE,
|
// });
|
// var newItem = new WMS_ITEM()
|
// {
|
// AUTH_ORG = dlvy.company,
|
// SN = dlvySn.SMALL_SN,
|
// ITEM_CODE = dlvySn.ITEM_CODE,
|
// STATUS = WMS_ITEM.STATUSs.Incoming.GetValue(),
|
// QTY = dlvySn.QTY,
|
// PROD_DATE = dlvySn.PROD_DATE,
|
// TRANS_CODE = nameof(BIZ_SRM_DLVY),
|
// TRANS_LINE = dlvySn.PO_LINE_NO.ToString(),
|
// TRANS_NO = dlvySn.DELIVERY_NO,
|
// SUPP_CODE = dlvy.supplierCode,
|
// CARTON_NO = dlvySn.BIG_SN.StartsWith("C") ? dlvySn.BIG_SN : null,
|
// PALLET_NO = dlvySn.OUTER_SN.StartsWith("P") ? dlvySn.OUTER_SN : null,
|
// IS_LOCKED = "N",
|
// SOURCE_CODE = nameof(BIZ_ERP_PO),
|
// SOURCE_LINE = dlvySn.PO_LINE_NO.ToString(),
|
// SOURCE_ORDER = PoNo,
|
// CREATE_USER = "SRM",
|
// UPDATE_USER = "SRM",
|
// };
|
// items.Add(newItem);
|
// hiss.Add(new WMS_ITEM_HIS(newItem, $"从供应商送货单获取条码[{dlvySn.SMALL_SN}]数据"));
|
//}
|
}
|
//将sn列表加入字典
|
if (!snDic.ContainsKey(DeliveryNo))
|
{
|
snDic.Add(DeliveryNo, snList);
|
}
|
Logger.Scheduler.Info($"New QqtSRM({dlvy.company}) Get Delivery[{DeliveryNo}] Details[{dlvyDtlList.Count}] SN[{dlvySnList.Count}] successful");
|
|
//Debug.WriteLine($"End1:{DateTime.Now}");
|
}
|
else
|
{
|
Logger.Scheduler.Error($"SRM推送送货单状态[{dlvy.documentStatus}]不对");
|
|
//action.IsSuccessed = false;
|
//action.Message = $"SRM推送送货单状态[{dlvy.documentStatus}]不对";
|
//return action;
|
}
|
}
|
|
DbClient _db = Biz.DataSource["WMS57"].Client;
|
//保存到数据库
|
var dbTran = _db.UseTran(() =>
|
{
|
//DateTime startTime = DateTime.Now;
|
//Debug.WriteLine($"Begin:{startTime}");
|
_db.Utilities.PageEach(dlvyList, 1000, pageList =>
|
{
|
var y = _db.Storageable(pageList, "SRM")
|
.WhereColumns(t => new { t.DELIVERY_NO, t.GHOST_ROW })
|
.ToStorage();
|
y.BulkCopy();
|
y.BulkUpdate();
|
});
|
if (dlvyDtlList.Any())
|
{
|
//foreach (var d in deliveryNoList)
|
{
|
// _db.Deleteable<BIZ_SRM_DLVY_DTL>().Where(q => deliveryNoList.Contains(q.DELIVERY_NO)).ExecuteCommand();
|
}
|
_db.Utilities.PageEach(dlvyDtlList, 1000, pageList =>
|
{
|
var y = _db.Storageable(pageList, "SRM")
|
.WhereColumns(t => new { t.DELIVERY_NO, t.ITEM_CODE, t.LINE_NO, t.GHOST_ROW })
|
.ToStorage();
|
y.BulkCopy();
|
y.BulkUpdate();
|
});
|
}
|
if (dlvySnList.Any())
|
{
|
_db.Utilities.PageEach(dlvySnList, 1000, pageList =>
|
{
|
var y = _db.Storageable(pageList, "SRM")
|
.WhereColumns(t => new { t.SMALL_SN, t.GHOST_ROW })
|
.ToStorage();
|
y.BulkCopy();
|
y.BulkUpdate();
|
});
|
//var i = 0;
|
//while (dlvySnList.Count > i)
|
//{
|
// var temp = dlvySnList.Skip(i).Take(500).ToList();
|
// _db.Storageable(temp, "SRM").ExecuteCommand();
|
// i += temp.Count;
|
// Debug.WriteLine(i);
|
//}
|
}
|
//循环字典内的sn列表有存在的删除
|
if (snDic.Any())
|
{
|
foreach (var item in snDic.Keys)
|
{
|
if (snDic[item].Any())
|
{
|
var i = 0;
|
while (snDic[item].Count > i)
|
{
|
var temp = snDic[item].Skip(i).Take(500).ToList();
|
_db.Deleteable(temp).ExecuteCommand();
|
i += temp.Count;
|
}
|
}
|
}
|
}
|
//_db.Utilities.PageEach(pkgs, 1000, pageList =>
|
//{
|
// var x = _db.Storageable(pageList, "SRM")
|
// .WhereColumns(t => new { t.SN, t.GHOST_ROW })
|
// .ToStorage();
|
// x.BulkCopy();
|
// x.BulkUpdate(); //.IgnoreColumns(x => x.ID);
|
//});
|
|
//_db.Utilities.PageEach(items, 1000, pageList =>
|
//{
|
// var y = _db.Storageable(pageList, "SRM")
|
// .WhereColumns(t => new { t.SN, t.GHOST_ROW })
|
// .ToStorage();
|
// y.BulkCopy();
|
// y.BulkUpdate();
|
//});
|
//_db.Fastest<WMS_ITEM_HIS>().BulkCopy(hiss);//插入
|
////_db.Insertable(hiss, "SRM").ExecuteCommand();
|
//Debug.WriteLine($"End:{DateTime.Now},耗时:[{(DateTime.Now - startTime).TotalSeconds}]");
|
});
|
if (!dbTran.IsSuccess)
|
{
|
//throw dbTran.ErrorException;
|
Logger.Scheduler.Error($"QqtSRM推送新送货单异常,错误:[{dbTran.ErrorException.Message}]");
|
}
|
foreach (var dlvy in dlvys)
|
{
|
if (dlvy.documentStatus != "0")
|
{
|
try
|
{
|
var bTime = DateTime.Now;
|
Biz.Db.Ado.UseStoredProcedure().ExecuteCommand("pkg_ImportItemFromSRM", new SugarParameter("dlvyNo", dlvy.documnetNumber));
|
Logger.Scheduler.Info($"New QqtSRM 保存送货单[{dlvy.documnetNumber}]条码导入WMS_ITEM完成,耗时:[{(DateTime.Now - bTime).TotalMilliseconds}]毫秒");
|
}
|
catch (System.Exception ex)
|
{
|
Logger.Scheduler.Error($"New QqtSRM 保存送货单[{dlvy.documnetNumber}]条码导入WMS_ITEM异常:[{ex.Message}]");
|
}
|
}
|
}
|
DateTime endTime = DateTime.Now;
|
Logger.Scheduler.Info($"New QqtSRM 推送送货单[{string.Join(",", dlvys.Select(x => x.documnetNumber))}]完成,耗时:[{(endTime - runStart).TotalMilliseconds}]");
|
}
|
catch (Exception ex)
|
{
|
Logger.Scheduler.Error($"QqtSRM推送新送货单异常,错误:[{ex.Message}]");
|
}
|
return action;
|
}
|
|
/// <summary>
|
/// 异步推送到新数据库
|
/// </summary>
|
/// <returns></returns>
|
private ApiAction SaveSrmDlvyData(List<iSrmDlvy> dlvys)
|
{
|
lock (SrmLock)
|
{
|
var action = new ApiAction();
|
DbClient db = Biz.DataSource["WMS57"].Client;
|
DateTime runStart = DateTime.Now;
|
try
|
{
|
Logger.Scheduler.Info($"QqtSRM开始推送送货单[{string.Join(",", dlvys.Select(x => x.documnetNumber))}]到新WMS...");
|
var dlvyList = new List<BIZ_SRM_DLVY>();
|
var dlvyDtlList = new List<BIZ_SRM_DLVY_DTL>();
|
var dlvySnList = new List<BIZ_SRM_DLVY_SN>();
|
var deliveryNoList = new List<string>();
|
var snDic = new Dictionary<string, List<BIZ_SRM_DLVY_SN>>();
|
//var pkgs = new List<WMS_ITEM_PKG>();
|
//var items = new List<WMS_ITEM>();
|
//var hiss = new List<WMS_ITEM_HIS>();
|
foreach (var dlvy in dlvys)
|
{
|
if (dlvy.documentStatus != "0")
|
{
|
//Debug.WriteLine($"Begin1:{DateTime.Now}");
|
Logger.Scheduler.Info($"New QqtSRM({dlvy.company})开始推送数据...");
|
var DeliveryNo = dlvy.documnetNumber;
|
//送货单加入列表供保存时用
|
deliveryNoList.Add(DeliveryNo);
|
var snList = db.Queryable<BIZ_SRM_DLVY_SN>().Where(q => q.DELIVERY_NO == DeliveryNo).ToList();
|
var statusitem = dlvys.Count(i => i.bookDeliveryItems.Any(a => a.itemStatus != "4"));
|
BIZ_SRM_DLVY _dlvy = db.Queryable<BIZ_SRM_DLVY>().Where(q => q.DELIVERY_NO == DeliveryNo).Single() ?? new()
|
{
|
DELIVERY_NO = DeliveryNo,
|
STATUS = Convert.ToInt32(dlvy.documentStatus),
|
SUPP_CODE = dlvy.supplierCode,
|
HANDLED = 0,
|
SUPP_NAME = dlvy.supplierName,
|
DELIVERY_DATE = iSRM.FromUnixTime(Convert.ToInt64(dlvy.deliveryDate)),
|
PLANARRIVED_DATE = iSRM.FromUnixTime(Convert.ToInt64(dlvy.bookDeliveryDate)),
|
AUTH_ORG = dlvy.company,
|
};
|
if (statusitem == 0)
|
{
|
_dlvy.STATUS = 4;
|
}
|
dlvyList.Add(_dlvy);
|
|
//循环单身列表
|
var PoNo = dlvy.bookDeliveryItems[0].orderNumber;
|
var dtls = db.Queryable<BIZ_SRM_DLVY_DTL>().Where(q => q.DELIVERY_NO == DeliveryNo).ToList();
|
foreach (var item in dlvy.bookDeliveryItems)
|
{
|
BIZ_SRM_DLVY_DTL dtl = dtls.Where(x => x.ITEM_CODE == item.materialNumber && x.PO_LINE_NO == Convert.ToInt32(item.itemNumber)).FirstOrDefault() ?? new();
|
dtl.DELIVERY_NO = DeliveryNo;
|
dtl.LINE_NO = Convert.ToInt32(item.orderItemNumber); //pmdt002 项次
|
dtl.ERP_PO_NO = item.orderNumber;
|
dtl.BATCH_NUMBER = item.lotNum; //分批序 pmdt004
|
dtl.PO_TYPE = Convert.ToInt32(item.purchaseType);
|
dtl.ITEM_CODE = item.materialNumber;
|
//productName = item.productName,
|
//productScale = item.productScale,
|
dtl.QTY = Convert.ToDecimal(item.deliveryQuantity);
|
dtl.UNIT = item.purchaseUnit;
|
dtl.PRICE = Convert.ToDouble(item.price);
|
dtl.TAX_PRICE = Convert.ToDouble(item.taxPrice);
|
dtl.STATUS = Convert.ToInt32(item.itemStatus);
|
dtl.PO_LINE_NO = Convert.ToInt32(item.itemNumber); //pmdtseq
|
dtl.BUYER = item.buyerName;
|
//receiveStatus = Convert.ToInt32(item.receiveStatus),
|
//expectedDate = FromUnixTime(Convert.ToInt64(item.expectedDate)),
|
//answerDate = FromUnixTime(Convert.ToInt64(item.answerDate)),
|
//currencyCode = item.currencyCode,
|
//currencyName = item.currencyName,
|
//sendVerifyStatus = Convert.ToInt32(item.sendVerifyStatus),
|
//resultFlag = item.resultFlag,
|
//remark = item.remark,
|
//brandName = item.brandName,
|
dtl.AUTH_ORG = dlvy.company;
|
dlvyDtlList.Add(dtl);
|
Logger.Scheduler.Info($"新SRM单身:[{DeliveryNo} - {item.materialNumber}]");
|
}
|
|
//循环条码列表
|
foreach (var item in dlvy.barcodeDetailDatas.OrderBy(x => x.materialNumber))
|
{
|
var sn = item.packetBarcodeNumber;
|
BIZ_SRM_DLVY_SN dlvySn = snList.Where(q => q.SMALL_BARCODE == sn).SingleOrDefault() ?? new();
|
|
dlvySn.DELIVERY_NO = DeliveryNo;
|
//dlvySn.PO_LINE_NO = lineno;
|
dlvySn.ITEM_CODE = item.materialNumber;
|
dlvySn.QTY = Convert.ToDecimal(item.materialQuantity);
|
dlvySn.SMALL_BARCODE = sn;
|
dlvySn.SMALL_SN = sn;
|
dlvySn.BIG_BARCODE = item.mediumBarcodeNumber;
|
dlvySn.BIG_SN = item.mediumBarcodeNumber;
|
dlvySn.OUTER_BARCODE = item.cartonBarcodeNumber;
|
dlvySn.OUTER_SN = item.cartonBarcodeNumber;
|
dlvySn.AUTH_ORG = dlvy.company;
|
dlvySn.PO_ERP_NO = PoNo;
|
dlvySn.IMPORTED = 1;
|
dlvySn.IMPORTED_DATE = DateTime.Now;
|
|
//dlvySn.PROD_DATE = DateTime.Now;
|
snList.RemoveAll(q => q.SMALL_BARCODE == sn);
|
dlvySnList.Add(dlvySn);
|
Debug.WriteLine(dlvySnList.Count);
|
|
#region MyRegion
|
|
////OUTER_SN
|
//if (!dlvySn.OUTER_SN.IsNullOrEmpty() && !pkgs.Any(q => q.SN == dlvySn.OUTER_SN))
|
//{
|
// //var pkg = db.Queryable<WMS_ITEM_PKG>().Where(x => x.SN == dlvySn.OUTER_SN).First() ?? new() {
|
// //};
|
// pkgs.Add(new WMS_ITEM_PKG()
|
// {
|
// AUTH_ORG = dlvy.company,
|
// SN = dlvySn.OUTER_SN,
|
// PKG_TYPE = dlvySn.OUTER_SN.StartsWith("P") ? WMS_ITEM_PKG.PKG_TYPEs.Pallet.GetValue() : (dlvySn.OUTER_SN.StartsWith("C") ? WMS_ITEM_PKG.PKG_TYPEs.Carton.GetValue() : WMS_ITEM_PKG.PKG_TYPEs.OnePiece.GetValue()),
|
// ITEM_CODE = dlvySn.ITEM_CODE,
|
// QTY = dlvy.barcodeDetailDatas.Where(q => q.cartonBarcodeNumber == dlvySn.OUTER_SN).Sum(q => Convert.ToDecimal(q.materialQuantity)),
|
// TRANS_CODE = nameof(BIZ_SRM_DLVY),
|
// TRANS_NO = dlvySn.DELIVERY_NO,
|
// SUPP_CODE = dlvySn.SUPP_CODE,
|
// });
|
//}
|
////BIG_SN
|
//if (!dlvySn.BIG_SN.IsNullOrEmpty() && !pkgs.Any(q => q.SN == dlvySn.BIG_SN))
|
//{
|
// pkgs.Add(new WMS_ITEM_PKG()
|
// {
|
// AUTH_ORG = dlvy.company,
|
// SN = dlvySn.BIG_SN,
|
// PARENT_SN = dlvySn.OUTER_SN,
|
// PKG_TYPE = dlvySn.BIG_SN.StartsWith("P") ? WMS_ITEM_PKG.PKG_TYPEs.Pallet.GetValue() : (dlvySn.BIG_SN.StartsWith("C") ? WMS_ITEM_PKG.PKG_TYPEs.Carton.GetValue() : WMS_ITEM_PKG.PKG_TYPEs.OnePiece.GetValue()),
|
// ITEM_CODE = dlvySn.ITEM_CODE,
|
// QTY = dlvy.barcodeDetailDatas.Where(q => q.mediumBarcodeNumber == dlvySn.BIG_SN).Sum(q => Convert.ToDecimal(q.materialQuantity)),
|
// TRANS_CODE = nameof(BIZ_SRM_DLVY),
|
// TRANS_NO = dlvySn.DELIVERY_NO,
|
// SUPP_CODE = dlvySn.SUPP_CODE,
|
// });
|
//}
|
////SMALL_SN
|
//if (!dlvySn.SMALL_SN.IsNullOrEmpty() && !pkgs.Any(q => q.SN == dlvySn.SMALL_SN))
|
//{
|
// pkgs.Add(new WMS_ITEM_PKG()
|
// {
|
// AUTH_ORG = dlvy.company,
|
// SN = dlvySn.SMALL_SN,
|
// PARENT_SN = dlvySn.BIG_SN,
|
// PKG_TYPE = dlvySn.SMALL_SN.StartsWith("P") ? WMS_ITEM_PKG.PKG_TYPEs.Pallet.GetValue() : (dlvySn.SMALL_SN.StartsWith("C") ? WMS_ITEM_PKG.PKG_TYPEs.Carton.GetValue() : WMS_ITEM_PKG.PKG_TYPEs.OnePiece.GetValue()),
|
// ITEM_CODE = dlvySn.ITEM_CODE,
|
// QTY = dlvySn.QTY,
|
// TRANS_CODE = nameof(BIZ_SRM_DLVY),
|
// TRANS_NO = dlvySn.DELIVERY_NO,
|
// SUPP_CODE = dlvySn.SUPP_CODE,
|
// });
|
// var newItem = new WMS_ITEM()
|
// {
|
// AUTH_ORG = dlvy.company,
|
// SN = dlvySn.SMALL_SN,
|
// ITEM_CODE = dlvySn.ITEM_CODE,
|
// STATUS = WMS_ITEM.STATUSs.Incoming.GetValue(),
|
// QTY = dlvySn.QTY,
|
// PROD_DATE = dlvySn.PROD_DATE,
|
// FIRST_IN_DATE = DateTime.Now,
|
// TRANS_CODE = nameof(BIZ_SRM_DLVY),
|
// TRANS_LINE = dlvySn.PO_LINE_NO.ToString(),
|
// TRANS_NO = dlvySn.DELIVERY_NO,
|
// SUPP_CODE = dlvy.supplierCode,
|
// CARTON_NO = dlvySn.BIG_SN.StartsWith("C") ? dlvySn.BIG_SN : null,
|
// PALLET_NO = dlvySn.OUTER_SN.StartsWith("P") ? dlvySn.OUTER_SN : null,
|
// IS_LOCKED = "N",
|
// SOURCE_CODE = nameof(BIZ_ERP_PO),
|
// SOURCE_LINE = dlvySn.PO_LINE_NO.ToString(),
|
// SOURCE_ORDER = PoNo,
|
// CREATE_USER = "SRM",
|
// UPDATE_USER = "SRM",
|
// };
|
// items.Add(newItem);
|
// hiss.Add(new WMS_ITEM_HIS(newItem, $"从供应商送货单获取条码[{dlvySn.SMALL_SN}]数据"));
|
//}
|
|
#endregion MyRegion
|
}
|
//将sn列表加入字典
|
if (!snDic.ContainsKey(DeliveryNo))
|
{
|
snDic.Add(DeliveryNo, snList);
|
}
|
Logger.Scheduler.Info($"New QqtSRM({dlvy.company}) Get Delivery[{DeliveryNo}] Details[{dlvyDtlList.Count}] SN[{dlvySnList.Count}] successful");
|
|
//Debug.WriteLine($"End1:{DateTime.Now}");
|
}
|
else
|
{
|
Logger.Scheduler.Error($"SRM推送送货单状态[{dlvy.documentStatus}]不对");
|
|
action.IsSuccessed = false;
|
action.LocaleMsg = Biz.L($"SRM推送送货单状态[{dlvy.documentStatus}]不对");
|
//return action;
|
}
|
}
|
|
DbClient _db = Biz.DataSource["WMS57"].Client;
|
//保存到数据库
|
var dbTran = _db.UseTran(() =>
|
{
|
//DateTime startTime = DateTime.Now;
|
//Debug.WriteLine($"Begin:{startTime}");
|
|
if (dlvyList.Count > 150)
|
{
|
_db.Utilities.PageEach(dlvyList, 1000, pageList =>
|
{
|
var y = _db.Storageable(pageList, "SRM")
|
.WhereColumns(t => new { t.DELIVERY_NO, t.GHOST_ROW })
|
.ToStorage();
|
y.BulkCopy();
|
y.BulkUpdate();
|
});
|
}
|
else
|
{
|
var d = _db.Storageable(dlvyList, "SRM")
|
.WhereColumns(t => new { t.DELIVERY_NO, t.GHOST_ROW })
|
.ToStorage();
|
d.AsInsertable.ExecuteCommand();
|
d.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
|
}
|
if (dlvyDtlList.Any())
|
{
|
//foreach (var d in deliveryNoList)
|
{
|
//_db.Deleteable<BIZ_SRM_DLVY_DTL>().Where(q => deliveryNoList.Contains(q.DELIVERY_NO)).ExecuteCommand();
|
}
|
if (dlvyDtlList.Count > 150)
|
{
|
_db.Utilities.PageEach(dlvyDtlList, 1000, pageList =>
|
{
|
var y = _db.Storageable(pageList, "SRM")
|
.WhereColumns(t => new { t.DELIVERY_NO, t.ITEM_CODE, t.PO_LINE_NO, t.GHOST_ROW })
|
.ToStorage();
|
y.BulkCopy();
|
y.BulkUpdate();
|
});
|
}
|
else
|
{
|
var l = _db.Storageable(dlvyDtlList, "SRM")
|
.WhereColumns(t => new { t.DELIVERY_NO, t.ITEM_CODE, t.PO_LINE_NO, t.GHOST_ROW })
|
.ToStorage();
|
l.AsInsertable.ExecuteCommand();
|
l.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
|
}
|
}
|
if (dlvySnList.Any())
|
{
|
if (dlvySnList.Count > 150)
|
{
|
_db.Utilities.PageEach(dlvySnList, 1000, pageList =>
|
{
|
var y = _db.Storageable(pageList, "SRM")
|
.WhereColumns(t => new { t.SMALL_SN, t.GHOST_ROW })
|
.ToStorage();
|
y.BulkCopy();
|
y.BulkUpdate();
|
});
|
}
|
else
|
{
|
var s = _db.Storageable(dlvySnList, "SRM")
|
.WhereColumns(t => new { t.SMALL_SN, t.GHOST_ROW })
|
.ToStorage();
|
s.AsInsertable.ExecuteCommand();
|
s.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
|
}
|
}
|
//循环字典内的sn列表有存在的删除
|
if (snDic.Any())
|
{
|
foreach (var item in snDic.Keys)
|
{
|
if (snDic[item].Any())
|
{
|
var i = 0;
|
while (snDic[item].Count > i)
|
{
|
var temp = snDic[item].Skip(i).Take(500).ToList();
|
_db.Deleteable(temp).ExecuteCommand();
|
i += temp.Count;
|
}
|
}
|
}
|
}
|
|
//if (pkgs.Count > 150)
|
//{
|
// _db.Utilities.PageEach(pkgs, 1000, pageList =>
|
// {
|
// var x = _db.Storageable(pageList, "SRM")
|
// .WhereColumns(t => new { t.SN, t.GHOST_ROW })
|
// .ToStorage();
|
// x.BulkCopy();
|
// x.BulkUpdate(); //.IgnoreColumns(x => x.ID);
|
// });
|
//}
|
//else
|
//{
|
// var x = _db.Storageable(pkgs, "SRM")
|
// .WhereColumns(t => new { t.SN, t.GHOST_ROW })
|
// .ToStorage();
|
// x.AsInsertable.ExecuteCommand();
|
// x.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
|
//}
|
|
//if (items.Count > 150)
|
//{
|
// _db.Utilities.PageEach(items, 1000, pageList =>
|
// {
|
// var y = _db.Storageable(pageList, "SRM")
|
// .WhereColumns(t => new { t.SN, t.GHOST_ROW })
|
// .ToStorage();
|
// y.BulkCopy();
|
// y.BulkUpdate();
|
// });
|
//}
|
//else
|
//{
|
// var y = _db.Storageable(items, "SRM")
|
// .WhereColumns(t => new { t.SN, t.GHOST_ROW })
|
// .ToStorage();
|
// y.AsInsertable.ExecuteCommand();
|
// y.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
|
//}
|
//if (hiss.Count > 150)
|
//{
|
// _db.Fastest<WMS_ITEM_HIS>().BulkCopy(hiss);//插入
|
//}
|
//else
|
//{
|
// _db.Insertable(hiss, "SRM").ExecuteCommand();
|
//}
|
|
//Debug.WriteLine($"End:{DateTime.Now},耗时:[{(DateTime.Now - startTime).TotalSeconds}]");
|
});
|
if (!dbTran.IsSuccess)
|
{
|
//throw dbTran.ErrorException;
|
Logger.Scheduler.Error($"QqtSRM推送新送货单异常,错误:[{dbTran.ErrorException.Message}]");
|
action.LocaleMsg = Biz.L($"QqtSRM推送新送货单异常,错误:[{dbTran.ErrorException.Message}]");
|
}
|
DbClient adoDb = Biz.DataSource["WMS57"].Client;
|
foreach (var dlvy in dlvys)
|
{
|
if (dlvy.documentStatus != "0")
|
{
|
try
|
{
|
var bTime = DateTime.Now;
|
adoDb.Ado.UseStoredProcedure().ExecuteCommand("pkg_ImportItemFromSRM", new SugarParameter("dlvyNo", dlvy.documnetNumber));
|
Logger.Scheduler.Info($"New QqtSRM 保存送货单[{dlvy.documnetNumber}]条码导入WMS_ITEM完成,耗时:[{(DateTime.Now - bTime).TotalMilliseconds}]毫秒");
|
}
|
catch (System.Exception ex)
|
{
|
Logger.Scheduler.Error($"New QqtSRM 保存送货单[{dlvy.documnetNumber}]条码导入WMS_ITEM异常:[{ex.Message}]");
|
}
|
}
|
}
|
DateTime endTime = DateTime.Now;
|
Logger.Scheduler.Info($"New QqtSRM 推送送货单[{string.Join(",", dlvys.Select(x => x.documnetNumber))}]完成,耗时:[{(endTime - runStart).TotalMilliseconds}]");
|
action.LocaleMsg = Biz.L($"New QqtSRM 推送送货单[{string.Join(",", dlvys.Select(x => x.documnetNumber))}]完成,耗时:[{(endTime - runStart).TotalMilliseconds}]");
|
}
|
catch (Exception ex)
|
{
|
Logger.Scheduler.Error($"QqtSRM推送新送货单异常,错误:[{ex.Message}]");
|
action.IsSuccessed = false;
|
action.LocaleMsg = Biz.L($"QqtSRM推送新送货单异常,错误:[{ex.Message}]");
|
}
|
return action;
|
}
|
}
|
}
|
}
|