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
|
{
|
/// <summary>
|
/// SRM数据接口
|
/// </summary>
|
public partial class iSRM : IiSRM
|
{
|
public static string GetSign(CommonParam param)
|
{
|
Dictionary<string, object> jsonDic = JsonConvert.DeserializeObject<Dictionary<string, object>>(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<WMS_SRMRcece>();
|
foreach (var item in responseJson["dataList"].Children())
|
{
|
var dlvyNo = item["deliveryNo"]?.ToString();
|
WMS_SRMRcece dlvy = Biz.Db.Queryable<WMS_SRMRcece>().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<Sys_Code>().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<WMS_SRM_ASN>().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<WMS_SRM_ASN_LINES>();
|
var dlvySnList = new List<WMS_SRMSNList>();
|
var snList = Biz.Db.Queryable<WMS_SRMSNList>().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<WMS_SRM_ASN_LINES>().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}]");
|
}
|
}
|
|
/// <summary>
|
/// 获取SRM送货单及条码列表
|
/// </summary>
|
/// <param name="iParams"></param>
|
/// <returns></returns>
|
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<string, string> dic = new Dictionary<string, string>() { { "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<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>>();
|
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<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"]?.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<WMS_SRM_ASN>().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<Sys_Code>().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<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;
|
}
|
}
|
}
|
}
|
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;
|
}
|
|
/// <summary>
|
/// 获取SRM送货单及条码列表
|
/// </summary>
|
/// <param name="iParams"></param>
|
/// <param name="isInterface"></param>
|
/// <returns></returns>
|
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<string, string> dic = new Dictionary<string, string>() { { "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<SYS_PARAM>().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<WMS_SUPP_DLVY>();
|
var dlvyDtlList = new List<WMS_SUPP_DLVY_DTL>();
|
var dlvySnList = new List<WMS_SUPP_DLVY_SN>();
|
var deliveryNoList = new List<string>();
|
var snDic = new Dictionary<string, List<WMS_SUPP_DLVY_SN>>();
|
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<WMS_SUPP_DLVY_SN>().Where(q => q.DELIVERY_NO == DeliveryNo).ToList();
|
WMS_SUPP_DLVY srmDlvy = db.Queryable<WMS_SUPP_DLVY>().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<WMS_SUPP_DLVY_DTL>().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;
|
}
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="param"></param>
|
/// <returns></returns>
|
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;
|
}
|
}
|
}
|