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.Model;
using Rhea.Common.Authorization;
using Tiger.Model.Minsun;
using Tiger.IBusiness;
namespace Tiger.Business.WMS
{
///
/// SRM数据接口
///
public partial class iSRM : IiSRM
{
public static string GetSign(CommonParam param)
{
Dictionary jsonDic = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(param));
string valueStr = "";
foreach (var item in jsonDic.OrderBy(q => q.Key/*, new KeyComparator()*/))
{
if (item.Key.ToLower() != "sign")
{
valueStr += item.Value?.ToString().Trim() + ":";
}
}
var md5 = Hash.MD5(valueStr + param.GetAppSecret()).ToLower();
return md5;
}
public static DateTime FromUnixTime(long? timestamp)
{
var epoch = new DateTime(1970, 1, 1, 0, 0, 0);
return timestamp.IsNullOrEmpty() ? DateTime.MinValue : new DateTime((long)timestamp * 10000 + epoch.Ticks).ToLocalTime();
}
public static void GetNoList(DateTime start, DateTime end)
{
var url = "https://openapi.xiekeyun.com/delivery/getNoList.json";
CommonParam apiParam = new CommonParam();
apiParam.sign = GetSign(apiParam);
var requestData = new SrmParam()
{
commonParam = apiParam,
body = new GetNoListBody()
{
startDate = start.ToUnixTime(),//DateTime.Now.AddHours(-2).ToUnixTime(),
endDate = end.ToUnixTime(),//DateTime.Now.ToUnixTime(),
erpCode = "L39571",
}
};
var requestJson = JsonConvert.SerializeObject(requestData);
try
{
var response = HttpHelper.PostAsync(url, requestJson).Result;
var responseJson = JObject.Parse(response.Message);
if (responseJson["result"]?.ToString() == "1")
{
var dlvyList = new List();
foreach (var item in responseJson["dataList"].Children())
{
var dlvyNo = item["deliveryNo"]?.ToString();
WMS_SRMRcece dlvy = Biz.Db.Queryable().Where(q => q.DeliveryNo == dlvyNo).Single() ?? new();
dlvy.DeliveryNo = item["deliveryNo"]?.ToString();
dlvy.Status = item["status"]?.ToString();
dlvy.InnerVendorCode = item["innerVendorCode"]?.ToString();
dlvy.DeliveryType = item["deliveryType"]?.ToInt32() ?? 0;
dlvy.LogisticsStatus = item["logisticsStatus"]?.ToString();
dlvy.PurchaseType = item["purchaseType"]?.ToInt32() ?? 0;
dlvy.LastOperateTime = item["lastOperateTime"]?.ToString();
dlvy.CreationTime = DateTime.Now;
dlvy.LastModificationTime = DateTime.Now;
dlvy.FLAW = "N";
dlvy.FLAT = "N";
dlvy.FLAN = "N";
dlvyList.Add(dlvy);
}
var LastRun = Biz.Db.Queryable().Where(q => q.CodeType == "SRM_Interface" && q.Value == "LastRun").Single();
LastRun.Text = end.ToString("yyyy/MM/dd HH:mm:ss");
//保存到数据库
var db = Business.Biz.Db;
var dbTran = db.UseTran(() =>
{
db.Storageable(dlvyList, "system").ExecuteCommand();
db.Storageable(LastRun, "system").ExecuteCommand();
});
if (!dbTran.IsSuccess)
{
throw dbTran.ErrorException;
}
Logger.Console.Info($"SRM Get Delivery List[{dlvyList.Count}] from {start:yyyy-MM-dd HH:mm:ss} to {end:yyyy-MM-dd HH:mm:ss} successful");
Logger.Scheduler.Info($"SRM Get Delivery List[{dlvyList.Count}] from {start:yyyy-MM-dd HH:mm:ss} to {end:yyyy-MM-dd HH:mm:ss} successful");
}
else
{
Logger.Scheduler.Error($"SRM送货单接口回复异常: From {start:yyyy-MM-dd HH:mm:ss} to {end:yyyy-MM-dd HH:mm:ss}, Result: {responseJson["result"]?.ToString()}, ErrorCode: {responseJson["errorCode"]?.ToString()}, ErrorMessage: {responseJson["errorMsg"]?.ToString()}, RequestData: {requestJson}");
}
}
catch (Exception ex)
{
new ApiAction().CatchExceptionWithLog(ex, $"SRM GetNoList 访问异常[{url}]");
}
}
public static void GetDetail(WMS_SRMRcece dlvy)
{
var url = "https://openapi.xiekeyun.com/delivery/getDetail.json";
CommonParam apiParam = new CommonParam();
apiParam.sign = GetSign(apiParam);
var requestData = new SrmParam()
{
commonParam = apiParam,
body = new GetDetailBody()
{
erpCode = "L39571",
deliveryNo = dlvy.DeliveryNo,
returnVerifyFlag = 1,
}
};
var requestJson = JsonConvert.SerializeObject(requestData);
try
{
var response = HttpHelper.PostAsync(url, requestJson).Result;
var responseJson = JObject.Parse(response.Message);
if (responseJson["result"]?.ToString() == "1")
{
WMS_SRM_ASN asn = Biz.Db.Queryable().Where(q => q.DeliveryNo == dlvy.DeliveryNo).Single() ?? new();
asn.DeliveryNo = dlvy.DeliveryNo;
asn.status = responseJson["data"]["status"]?.ToInt32() ?? 0;
asn.innerVendorCode = responseJson["data"]["innerVendorCode"]?.ToString();
asn.innerVendorName = responseJson["data"]["innerVendorName"]?.ToString();
asn.deliveryType = responseJson["data"]["deliveryType"]?.ToInt32() ?? 0;
asn.logisticsStatus = responseJson["data"]["logisticsStatus"]?.ToInt32() ?? 0;
asn.deliveryDate = FromUnixTime(responseJson["data"]["deliveryDate"]?.ToInt64());
asn.planArrivedDate = FromUnixTime(responseJson["data"]["planArrivedDate"]?.ToInt64());
asn.CreationTime = DateTime.Now;
asn.LastModificationTime = DateTime.Now;
asn.updateTime = FromUnixTime(responseJson["data"]["updateTime"]?.ToInt64());
asn.grossWeight = responseJson["data"]["grossWeight"]?.ToDecimal() ?? 0;
asn.netWeight = responseJson["data"]["netWeight"]?.ToDecimal() ?? 0;
asn.totalPackingQty = responseJson["data"]["totalPackingQty"]?.ToDecimal() ?? 0;
asn.cargoDeliveryTime = FromUnixTime(responseJson["data"]["cargoDeliveryTime"]?.ToInt64());
asn.CreationTime = DateTime.Now;
dlvy.FLAW = "Y";
var dlvyDtlList = new List();
var dlvySnList = new List();
var snList = Biz.Db.Queryable().Where(q => q.DeliveryNo == dlvy.DeliveryNo).ToList();
foreach (var item in responseJson["data"]["lineList"].Children())
{
WMS_SRM_ASN_LINES dtl = new()
{
DeliveryNo = dlvy.DeliveryNo,
lineNo = item["lineNo"]?.ToInt32() ?? 0,
poErpNo = item["poErpNo"]?.ToString(),
poLineNo = item["poLineNo"]?.ToString(),
purchaseType = item["purchaseType"]?.ToInt32() ?? 0,
productCode = item["productCode"]?.ToString(),
productName = item["productName"]?.ToString(),
productScale = item["productScale"]?.ToString(),
deliveryQty = item["deliveryQty"]?.ToDecimal() ?? 0,
deliveryUnitCode = item["deliveryUnitCode"]?.ToString(),
deliveryUnitName = item["deliveryUnitName"]?.ToString(),
deliveryValuationQty = item["deliveryValuationQty"]?.ToDecimal() ?? 0,
price = item["price"]?.ToDouble() ?? double.MinValue,
taxPrice = item["taxPrice"]?.ToDouble() ?? double.MinValue,
status = item["status"]?.ToInt32() ?? 0,
receiveStatus = item["receiveStatus"]?.ToInt32() ?? 0,
buyerName = item["buyerName"]?.ToString(),
expectedDate = FromUnixTime(item["expectedDate"]?.ToInt64()),
answerDate = FromUnixTime(item["answerDate"]?.ToInt64()),
currencyCode = item["currencyCode"]?.ToString(),
currencyName = item["currencyName"]?.ToString(),
sendVerifyStatus = item["sendVerifyStatus"]?.ToInt32() ?? 0,
resultFlag = item["resultFlag"]?.ToString(),
remark = item["remark"]?.ToString(),
brandName = item["brandName"]?.ToString(),
};
dlvyDtlList.Add(dtl);
}
//获取条码明细
var snUrl = "https://openapi.xiekeyun.com/barcode/byDeliveryNo.json";
CommonParam snApiParam = new CommonParam();
snApiParam.sign = GetSign(snApiParam);
var snRequestData = new SrmParam()
{
commonParam = snApiParam,
body = new ByDeliveryNoBody()
{
erpCode = "L39571",
deliveryNo = dlvy.DeliveryNo,
}
};
var snRequestJson = JsonConvert.SerializeObject(snRequestData);
var snResponse = HttpHelper.PostAsync(snUrl, snRequestJson).Result;
var snResponseJson = JObject.Parse(snResponse.Message);
if (snResponseJson["result"]?.ToString() == "1")
{
foreach (var item in snResponseJson["dataList"].Children())
{
var sn = item["smallBarcode"]?.ToString();
WMS_SRMSNList dlvySn = snList.Where(q => q.SmallBarcode == sn).SingleOrDefault() ?? new();
dlvySn.DeliveryNo = dlvy.DeliveryNo;
dlvySn.BILLCODE = item["poErpNo"]?.ToString();
dlvySn.BILLLINE = item["poLineNo"]?.ToString();
dlvySn.MATERIALCODE = item["productCode"]?.ToString();
dlvySn.SOURCETYPE = "SRM";
//dlvySn.ITEM_NAME = item["productName"]?.ToString();
//dlvySn.SPECIFICATION = item["productScale"]?.ToString();
dlvySn.IncludeQty = item["includeQty"]?.ToInt32() ?? int.MinValue;
dlvySn.SmallBarcode = item["smallBarcode"]?.ToString();
dlvySn.BigBarcode = item["bigBarcode"]?.ToString();
dlvySn.OuterBarcode = item["outerBarcode"]?.ToString();
dlvySn.CreationTime = DateTime.Now;
dlvySn.production_date = DateTime.Now;
dlvySn.LastModificationTime = DateTime.Now;
snList.RemoveAll(q => q.SmallBarcode == sn);
dlvySnList.Add(dlvySn);
}
//var bigs = from q in dlvySnList
// group q by new { q.BIG_BARCODE, q.SUPP_CODE } into g
// select new
// {
// Barcode = g.Key.BIG_BARCODE,
// SuppCode = g.Key.SUPP_CODE,
// Qty = g.Sum(q => q.QTY)
// };
//var outers = from q in dlvySnList
// group q by new { q.OUTER_BARCODE, q.SUPP_CODE } into g
// select new
// {
// Barcode = g.Key.OUTER_BARCODE,
// SuppCode = g.Key.SUPP_CODE,
// Qty = g.Sum(q => q.QTY)
// };
//foreach (var sn in dlvySnList)
//{
// var bigSn = bigs.Where(q => q.Barcode == sn.BIG_BARCODE && q.SuppCode == sn.SUPP_CODE).SingleOrDefault();
// if (!bigSn.IsNullOrEmpty())
// {
// sn.BIG_SN = bigSn.Barcode.Replace(bigSn.SuppCode, bigSn.SuppCode.Replace("GY", "")) +
// (bigSn.Barcode.EndsWith("_") ? "" : "_") + bigSn.Qty.ToString("00000");
// }
// var outerSn = outers.Where(q => q.Barcode == sn.OUTER_BARCODE && q.SuppCode == sn.SUPP_CODE).SingleOrDefault();
// if (!outerSn.IsNullOrEmpty())
// {
// sn.OUTER_SN = outerSn.Barcode.Replace(outerSn.SuppCode, outerSn.SuppCode.Replace("GY", "")) +
// (outerSn.Barcode.EndsWith("_") ? "" : "_") + outerSn.Qty.ToString("00000");
// }
//}
}
else
{
//dlvy.HANDLED++;
dlvy.FLAW = "N";
Logger.Scheduler.Error($"SRM送货单条码明细接口回复异常: DeliveryNo: {dlvy.DeliveryNo}, Result: {snResponseJson["result"]?.ToString()}, ErrorCode: {snResponseJson["errorCode"]?.ToString()}, ErrorMessage: {snResponseJson["errorMsg"]?.ToString()}, RequestData: {requestJson}");
Logger.Console.Error($"SRM送货单条码明细接口回复异常: DeliveryNo: {dlvy.DeliveryNo}, Result: {snResponseJson["result"]?.ToString()}, ErrorCode: {snResponseJson["errorCode"]?.ToString()}, ErrorMessage: {snResponseJson["errorMsg"]?.ToString()}, RequestData: {requestJson}");
}
//保存到数据库
var db = Business.Biz.Db;
var dbTran = db.UseTran(() =>
{
var dt = dlvySnList.ToDataTable();
db.Storageable(dlvy, "system").ExecuteCommand();
db.Storageable(asn, "system").ExecuteCommand();
if (dlvyDtlList.Any())
{
db.Deleteable().Where(q => q.DeliveryNo == dlvy.DeliveryNo).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;
}
}
if (snList.Any())
{
//db.Deleteable(snList).ExecuteCommand();
var i = 0;
while (snList.Count > i)
{
var temp = snList.Skip(i).Take(500).ToList();
db.Deleteable(temp).ExecuteCommand();
i += temp.Count;
}
}
});
Logger.Console.Info($"SRM Get Delivery[{dlvy.DeliveryNo}] Details[{dlvyDtlList.Count}] SN[{dlvySnList.Count}] successful");
Logger.Scheduler.Info($"SRM Get Delivery[{dlvy.DeliveryNo}] Details[{dlvyDtlList.Count}] SN[{dlvySnList.Count}] successful");
}
else
{
Logger.Scheduler.Error($"SRM送货单明细接口回复异常: DeliveryNo: {dlvy.DeliveryNo}, Result: {responseJson["result"]?.ToString()}, ErrorCode: {responseJson["errorCode"]?.ToString()}, ErrorMessage: {responseJson["errorMsg"]?.ToString()}, RequestData: {requestJson}");
}
}
catch (Exception ex)
{
new ApiAction().CatchExceptionWithLog(ex, $"SRM 送货单[{dlvy.DeliveryNo}]明细接口异常[{url}]");
}
}
///
/// 获取SRM送货单及条码列表
///
///
///
public ApiAction GetSRMList(iSrmParams iParams)
{
var action = new ApiAction();
var rootUrl = iParams.serverId != "55" ? "https://api.51qqt.com" : "https://api-sit.51qqt.com";
var url = $"{rootUrl}/els/openApi/invoke";
var requestData = new GetSrmListBody()
{
bus_account = "1398210",
interface_code = "JK20230411000005",
body = new body
{
data = new data
{
company = iParams.company, //"XCSJ",
startDate = iParams.startDate,
endDate = iParams.endDate
},
busAccount = "1398210",
simpleFlag = "1",
interfaceCode = "wmsPullSrmBookDeliveryData"
}
};
var requestJson = JsonConvert.SerializeObject(requestData);
DbClient db = Business.Biz.Db;
var _lastrun = "";
switch (iParams.serverId)
{
case "55":
db = Biz.DataSource["Test"].Client;
break;
case "XCSJ":
db = Biz.DataSource["Main"].Client;
_lastrun = "QqtLastRun";
break;
case "DGXC":
db = Biz.DataSource["DGXC"].Client;
_lastrun = "QqtLastRun_dgxc";
break;
case "AHXC":
db = Biz.DataSource["AHXC"].Client;
_lastrun = "QqtLastRun_ahxc";
break;
}
try
{
GetSecret secret = iParams.serverId != "55" ? new GetSecret {key = "ed3ccc64", secret = "b6178cd87ea4400eb38c0af8ea9d7419" } : new GetSecret();
var token = GetToken(secret, rootUrl);
Dictionary dic = new Dictionary() { { "elsAccount", "1398210" }, { "token", token }, { "subAccount", "App_interface" }, { "pwd", "123" } };
var response = HttpHelper.PostAsync(url, requestJson, dic).Result;
var responseJson = JObject.Parse(response.Message);
if (responseJson["code"]?.ToString() == "200")
{
action.Message = responseJson["message"]?.ToString();
var data = responseJson["result"]["data"];
var respbody = data["respBody"];
var dlvyList = new List();
var asnList = new List();
var dlvyDtlList = new List();
var dlvySnList = new List();
var deliveryNoList = new List();
var snDic = new Dictionary>();
Logger.Scheduler.Info($"QqtSRM({iParams.company}) Response from {iParams.startDate:yyyy-MM-dd HH:mm:ss} to {iParams.endDate:yyyy-MM-dd HH:mm:ss} successful");
if (!respbody.IsNullOrEmpty())
{
//Logger.Scheduler.Info($"SRM Response Json[{respbody}] from {iParams.startDate:yyyy-MM-dd HH:mm:ss} to {iParams.endDate:yyyy-MM-dd HH:mm:ss} successful");
//循环单头列表
foreach (var dlvy in respbody.Children())
{
if (dlvy["documentStatus"]?.ToString() != "0")
{
var DeliveryNo = dlvy["documnetNumber"]?.ToString();
//送货单加入列表供保存时用
deliveryNoList.Add(DeliveryNo);
var snList = db.Queryable().Where(q => q.DeliveryNo == DeliveryNo).ToList();
WMS_SRMRcece srmRcece = db.Queryable().Where(q => q.DeliveryNo == DeliveryNo).Single() ?? new();
srmRcece.DeliveryNo = DeliveryNo;
srmRcece.Status = dlvy["documentStatus"]?.ToString();
srmRcece.InnerVendorCode = dlvy["supplierCode"]?.ToString();
//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().Where(q => q.DeliveryNo == DeliveryNo).Single() ?? new();
asn.DeliveryNo = DeliveryNo;
asn.status = (dlvy["documentStatus"]?.ToInt32() ?? 0);
asn.innerVendorCode = dlvy["supplierCode"]?.ToString();
asn.innerVendorName = dlvy["supplierName"]?.ToString();
//asn.deliveryType = dlvy["deliveryType"]?.ToInt32() ?? 0;
//asn.logisticsStatus = dlvy["logisticsStatus"]?.ToInt32() ?? 0;
asn.deliveryDate = FromUnixTime(dlvy["deliveryDate"]?.ToInt64());
asn.planArrivedDate = FromUnixTime(dlvy["bookDeliveryDate"]?.ToInt64());
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"].Children())
{
WMS_SRM_ASN_LINES dtl = new()
{
DeliveryNo = DeliveryNo,
lineNo = item["orderItemNumber"]?.ToInt32() ?? 0,
poErpNo = item["orderNumber"]?.ToString(),
poLineNo = item["lotNum"]?.ToString(),
purchaseType = item["purchaseType"]?.ToInt32() ?? 0,
productCode = item["materialNumber"]?.ToString(),
//productName = item["productName"]?.ToString(),
//productScale = item["productScale"]?.ToString(),
deliveryQty = item["deliveryQuantity"]?.ToDecimal() ?? 0,
//deliveryUnitCode = item["deliveryUnitCode"]?.ToString(),
deliveryUnitName = item["purchaseUnit"]?.ToString(),
//deliveryValuationQty = item["deliveryValuationQty"]?.ToInt32() ?? 0,
//price = item["price"]?.ToDouble() ?? double.MinValue,
//taxPrice = item["taxPrice"]?.ToDouble() ?? double.MinValue,
status = (item["itemStatus"]?.ToInt32() ?? 0),
extendN01 = item["itemNumber"]?.ToString(),
//receiveStatus = item["receiveStatus"]?.ToInt32() ?? 0,
//buyerName = item["buyerName"]?.ToString(),
//expectedDate = FromUnixTime(item["expectedDate"]?.ToInt64()),
//answerDate = FromUnixTime(item["answerDate"]?.ToInt64()),
//currencyCode = item["currencyCode"]?.ToString(),
//currencyName = item["currencyName"]?.ToString(),
//sendVerifyStatus = item["sendVerifyStatus"]?.ToInt32() ?? 0,
//resultFlag = item["resultFlag"]?.ToString(),
//remark = item["remark"]?.ToString(),
//brandName = item["brandName"]?.ToString(),
};
dlvyDtlList.Add(dtl);
}
//循环条码列表
foreach (var item in dlvy["barcodeDetailDatas"].Children())
{
var sn = item["packetBarcodeNumber"]?.ToString();
WMS_SRMSNList dlvySn = snList.Where(q => q.SmallBarcode == sn).SingleOrDefault() ?? new();
dlvySn.DeliveryNo = DeliveryNo;
//dlvySn.BILLCODE = item["poErpNo"]?.ToString();
//dlvySn.BILLLINE = item["poLineNo"]?.ToString();
dlvySn.MATERIALCODE = item["materialNumber"]?.ToString();
dlvySn.SOURCETYPE = "SRM";
//dlvySn.ITEM_NAME = item["productName"]?.ToString();
//dlvySn.SPECIFICATION = item["productScale"]?.ToString();
dlvySn.IncludeQty = item["materialQuantity"]?.ToDecimal() ?? int.MinValue;
dlvySn.SmallBarcode = item["packetBarcodeNumber"]?.ToString();
dlvySn.BigBarcode = item["mediumBarcodeNumber"]?.ToString();
dlvySn.OuterBarcode = item["cartonBarcodeNumber"]?.ToString();
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({iParams.company}) Get Delivery[{DeliveryNo}] Details[{dlvyDtlList.Count}] SN[{dlvySnList.Count}] successful");
}
}
}
else
{
action.Message = "没有数据可导入";
}
//保存到数据库
var LastRun = db.Queryable().Where(q => q.CodeType == "SRM_Interface" && q.Value == _lastrun).Single();
LastRun.Text = iParams.endDate;
var dbTran = db.UseTran(() =>
{
db.Storageable(dlvyList, "system").ExecuteCommand();
db.Storageable(asnList, "system").ExecuteCommand();
if (dlvyDtlList.Any())
{
foreach (var d in deliveryNoList)
{
db.Deleteable().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;
}
}
}
}
db.Storageable(LastRun, "system").ExecuteCommand();
});
if (!dbTran.IsSuccess)
{
throw dbTran.ErrorException;
}
Logger.Scheduler.Info($"QqtSRM({iParams.company}) Get Delivery List[{dlvyList.Count}] done");
}
else
{
action.Message = "没有数据可导入";
Logger.Scheduler.Error($"SRM送货单接口回复异常: From {iParams.startDate:yyyy-MM-dd HH:mm:ss} to {iParams.endDate:yyyy-MM-dd HH:mm:ss}, Result: {responseJson["result"]?.ToString()}, ErrorCode: {responseJson["errorCode"]?.ToString()}, ErrorMessage: {responseJson["errorMsg"]?.ToString()}, RequestData: {requestJson}");
}
}
catch (Exception ex)
{
return action.GetResponse().CatchExceptionWithLog(ex, $"SRM GetSRMList 访问异常[{url}]");
}
return action;
}
///
/// 获取SRM送货单及条码列表
///
///
///
///
public static ApiAction GetSuppDlvy(iSrmParams iParams)
{
var action = new ApiAction();
var rootUrl = iParams.serverId != "55" ? "https://api.51qqt.com" : "https://api-sit.51qqt.com";
var url = $"{rootUrl}/els/openApi/invoke";
var requestData = new GetSrmListBody()
{
bus_account = "1398210",
interface_code = "JK20230411000005",
body = new body
{
data = new data
{
company = iParams.company, //"XCSJ",
startDate = iParams.startDate,
endDate = iParams.endDate
},
busAccount = "1398210",
simpleFlag = "1",
interfaceCode = "wmsPullSrmBookDeliveryData"
}
};
var requestJson = JsonConvert.SerializeObject(requestData);
var db = Biz.Db;
try
{
GetSecret secret = iParams.serverId != "55" ? new GetSecret { key = "ed3ccc64", secret = "b6178cd87ea4400eb38c0af8ea9d7419" } : new GetSecret();
var token = GetToken(secret, rootUrl);
Dictionary dic = new Dictionary() { { "elsAccount", "1398210" }, { "token", token }, { "subAccount", "App_interface" }, { "pwd", "123" } };
var response = HttpHelper.PostAsync(url, requestJson, dic).Result;
var responseJson = JObject.Parse(response.Message);
var LastRun = Biz.Db.Queryable().Where(q => q.PRMG_CODE == "SRM_Interface" && q.PARAM_CODE == "LastRun").Single();
if (responseJson["code"]?.ToString() == "200")
{
action.Message = responseJson["message"]?.ToString();
var data = responseJson["result"]["data"];
var respbody = data["respBody"];
var dlvyList = new List();
var dlvyDtlList = new List();
var dlvySnList = new List();
var deliveryNoList = new List();
var snDic = new Dictionary>();
if (!respbody.IsNullOrEmpty())
{
Logger.Scheduler.Info($"SRM Response Json[{respbody}] from {iParams.startDate:yyyy-MM-dd HH:mm:ss} to {iParams.endDate:yyyy-MM-dd HH:mm:ss} successful");
action.Message += $", SRM 返回JSON:{respbody}";
//循环单头列表
foreach (var dlvy in respbody.Children())
{
if (dlvy["documentStatus"]?.ToString() != "0")
{
var DeliveryNo = dlvy["documnetNumber"]?.ToString();
//送货单加入列表供保存时用
deliveryNoList.Add(DeliveryNo);
var snList = db.Queryable().Where(q => q.DELIVERY_NO == DeliveryNo).ToList();
WMS_SUPP_DLVY srmDlvy = db.Queryable().Where(q => q.DELIVERY_NO == DeliveryNo).Single() ?? new();
srmDlvy.DELIVERY_NO = DeliveryNo;
srmDlvy.STATUS = dlvy["documentStatus"]?.ToInt32() ?? 0;
srmDlvy.SUPP_CODE = dlvy["supplierCode"]?.ToString();
//srmDlvy.DeliveryType = dlvy["deliveryType"]?.ToInt32() ?? 0;
//srmDlvy.LogisticsStatus = dlvy["logisticsStatus"]?.ToString();
//srmDlvy.PurchaseType = dlvy["purchaseType"]?.ToInt32() ?? 0;
//srmDlvy.LastOperateTime = dlvy["lastOperateTime"]?.ToString();
srmDlvy.CREATE_TIME = DateTime.Now;
srmDlvy.UPDATE_TIME = DateTime.Now;
srmDlvy.SUPP_NAME = dlvy["supplierName"]?.ToString();
//srmDlvy.deliveryType = dlvy["deliveryType"]?.ToInt32() ?? 0;
//srmDlvy.logisticsStatus = dlvy["logisticsStatus"]?.ToInt32() ?? 0;
srmDlvy.DELIVERY_DATE = FromUnixTime(dlvy["deliveryDate"]?.ToInt64());
srmDlvy.PLANARRIVED_DATE = FromUnixTime(dlvy["bookDeliveryDate"]?.ToInt64());
//srmDlvy.updateTime = FromUnixTime(dlvy["updateTime"]?.ToInt64());
//srmDlvy.grossWeight = dlvy["grossWeight"]?.ToDecimal() ?? 0;
//srmDlvy.netWeight = dlvy["netWeight"]?.ToDecimal() ?? 0;
//srmDlvy.totalPackingQty = dlvy["totalPackingQty"]?.ToDecimal() ?? 0;
//srmDlvy.cargoDeliveryTime = FromUnixTime(dlvy["cargoDeliveryTime"]?.ToInt64());
srmDlvy.HANDLED = 0;
dlvyList.Add(srmDlvy);
//循环单身列表
foreach (var item in dlvy["bookDeliveryItems"].Children())
{
WMS_SUPP_DLVY_DTL dtl = new()
{
DELIVERY_NO = DeliveryNo,
LINE_NO = item["orderItemNumber"]?.ToInt32() ?? 0,
ERP_PO_NO = item["orderNumber"]?.ToString(),
PO_LINE_NO = item["lotNum"]?.ToInt32() ?? 0,
PO_TYPE = item["purchaseType"]?.ToInt32() ?? 0,
ITEM_CODE = item["materialNumber"]?.ToString(),
//productName = item["productName"]?.ToString(),
//productScale = item["productScale"]?.ToString(),
QTY = item["deliveryQuantity"]?.ToDecimal() ?? 0,
//deliveryUnitCode = item["deliveryUnitCode"]?.ToString(),
UNIT = item["purchaseUnit"]?.ToString(),
//deliveryValuationQty = item["deliveryValuationQty"]?.ToInt32() ?? 0,
PRICE = item["price"]?.ToDouble() ?? 0,
TAX_PRICE = item["taxPrice"]?.ToDouble() ?? 0,
STATUS = (item["itemStatus"]?.ToInt32() ?? 0),
//receiveStatus = item["receiveStatus"]?.ToInt32() ?? 0,
BUYER = item["buyerName"]?.ToString(),
//expectedDate = FromUnixTime(item["expectedDate"]?.ToInt64()),
//answerDate = FromUnixTime(item["answerDate"]?.ToInt64()),
//currencyCode = item["currencyCode"]?.ToString(),
//currencyName = item["currencyName"]?.ToString(),
//sendVerifyStatus = item["sendVerifyStatus"]?.ToInt32() ?? 0,
//resultFlag = item["resultFlag"]?.ToString(),
//remark = item["remark"]?.ToString(),
//brandName = item["brandName"]?.ToString(),
};
dlvyDtlList.Add(dtl);
}
//循环条码列表
foreach (var item in dlvy["barcodeDetailDatas"].Children())
{
var sn = item["packetBarcodeNumber"]?.ToString();
WMS_SUPP_DLVY_SN dlvySn = snList.Where(q => q.SMALL_BARCODE == sn).SingleOrDefault() ?? new();
dlvySn.DELIVERY_NO = DeliveryNo;
//dlvySn.BILLCODE = item["poErpNo"]?.ToString();
//dlvySn.BILLLINE = item["poLineNo"]?.ToString();
dlvySn.ITEM_CODE = item["materialNumber"]?.ToString();
//dlvySn.SOURCETYPE = "SRM";
//dlvySn.ITEM_NAME = item["productName"]?.ToString();
//dlvySn.SPECIFICATION = item["productScale"]?.ToString();
dlvySn.QTY = item["materialQuantity"]?.ToDecimal() ?? int.MinValue;
dlvySn.SMALL_BARCODE = item["packetBarcodeNumber"]?.ToString();
dlvySn.BIG_BARCODE = item["mediumBarcodeNumber"]?.ToString();
dlvySn.OUTER_BARCODE = item["cartonBarcodeNumber"]?.ToString();
dlvySn.CREATE_TIME = DateTime.Now;
dlvySn.PROD_DATE = DateTime.Now;
dlvySn.UPDATE_TIME = DateTime.Now;
snList.RemoveAll(q => q.SMALL_BARCODE == sn);
dlvySnList.Add(dlvySn);
}
//将sn列表加入字典
if (!snDic.ContainsKey(DeliveryNo))
{
snDic.Add(DeliveryNo, snList);
}
}
}
LastRun.PARAM_VALUE = iParams.endDate;
//保存到数据库
var dbTran = db.UseTran(() =>
{
db.Storageable(dlvyList, "system").ExecuteCommand();
if (dlvyDtlList.Any())
{
foreach (var d in deliveryNoList)
{
db.Deleteable().Where(q => q.DELIVERY_NO == 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;
}
}
}
}
db.Storageable(LastRun, "system").ExecuteCommand();
});
if (!dbTran.IsSuccess)
{
throw dbTran.ErrorException;
}
Logger.Scheduler.Info($"SRM Get Delivery List[{dlvyList.Count}] from {iParams.startDate:yyyy-MM-dd HH:mm:ss} to {iParams.endDate:yyyy-MM-dd HH:mm:ss} successful");
}
else
{
action.Message = "没有数据可导入";
LastRun.PARAM_VALUE = iParams.endDate;
db.Storageable(LastRun, "system").ExecuteCommand();
}
Logger.Scheduler.Info($"QqtSRM Get Delivery List[{dlvyList.Count}] done");
}
else
{
LastRun.PARAM_VALUE = iParams.endDate;
db.Storageable(LastRun, "system").ExecuteCommand();
action.Message = "没有数据可导入";
Logger.Scheduler.Error($"SRM送货单接口回复异常: From {iParams.startDate:yyyy-MM-dd HH:mm:ss} to {iParams.endDate:yyyy-MM-dd HH:mm:ss}, Result: {responseJson["result"]?.ToString()}, ErrorCode: {responseJson["errorCode"]?.ToString()}, ErrorMessage: {responseJson["errorMsg"]?.ToString()}, RequestData: {requestJson}");
}
}
catch (Exception ex)
{
return action.GetResponse().CatchExceptionWithLog(ex, $"SRM GetSRMList 访问异常[{url}]");
}
return action;
}
///
///
///
///
///
public static string GetToken(GetSecret param, string tkUrl)
{
string result = "";
var url = $"{tkUrl}/els/openApi/getToken?key={param.key}&secret={param.secret}";
var snRequestJson = JsonConvert.SerializeObject(param);
var snResponse = HttpHelper.GetAsync(url).Result;
var snResponseJson = JObject.Parse(snResponse.Message);
if (snResponseJson["success"].ToBoolean())
{
result = snResponseJson["result"]["token"]?.ToString();
}
return result;
}
}
}