Commit 5667dee2 by lizefeng

测试完毕,发布亚马逊结算报表拉取服务

parent 44395003
......@@ -31,194 +31,194 @@ namespace AutoTurnOver.Services
{
public class AmazonDataSynchroService
{
public void SynchroFee()
{
// 拉取亚马逊账号
var amazonAccounts = ApiServices.GetAmazonAccountList();
foreach (var item in amazonAccounts)
{
try
{
if (item.AmznSpDevAccountObj != null && item.AmznSpTokenObj != null)
{
var task_name = $"SynchroAmazonFee_v1_{item.Id}";
// 查询最后一次成功抓取的记录
var last_task_synchro_log = MyMySqlConnection._connection.QuerySingleOrDefault<task_synchro_log>(" select * from task_synchro_log where task_name=@task_name and status=1 order by end_time desc limit 1 ", new { task_name = task_name });
var new_task_synchro_log = new task_synchro_log
{
create_date = DateTime.Now,
end_time = DateTime.Now.AddMinutes(-3),
status = 0,
task_name = task_name
};
if (last_task_synchro_log != null)
{
new_task_synchro_log.start_time = last_task_synchro_log.end_time.AddMinutes(-1);
}
else
{
new_task_synchro_log.start_time = new DateTime(2023, 1, 1);
}
new_task_synchro_log.id = MyMySqlConnection._connection.Insert(new_task_synchro_log) ?? 0;
int count = 0;
//new_task_synchro_log.end_time = new DateTime(2023, 1, 31, 23,59, 59);
var now = DateTime.Now;
var fees = GetFees(item, null, new_task_synchro_log.start_time, new_task_synchro_log.end_time);
var feesJson = fees.ToJson();
List<dc_base_amazon_fee> feeDatas = new List<dc_base_amazon_fee>();
foreach (var fee in fees)
{
// 订单交易
if (fee.ShipmentEventList != null && fee.ShipmentEventList.Count >= 1)
{
foreach (var shipmentEvent in fee.ShipmentEventList)
{
foreach (var shipmentItem in shipmentEvent.ShipmentItemList)
{
feeDatas.Add(ApiDataMapDbData(item.Account, shipmentEvent, shipmentItem, "order"));
}
}
}
// 退款
if (fee.RefundEventList != null && fee.RefundEventList.Count >= 1)
{
foreach (var refundEventList in fee.RefundEventList)
{
foreach (var shipmentItemAdjustmentList in refundEventList.ShipmentItemAdjustmentList)
{
feeDatas.Add(ApiDataMapDbData(item.Account, refundEventList, shipmentItemAdjustmentList, "refund"));
}
}
}
// 服务费 (该费用没有实际时间,如果抓取时间跟当前时间相差不超过24小时,则以当前时间为准,否则跳过该费用)
if ((DateTime.Now - new_task_synchro_log.start_time).TotalHours <= 24)
{
if (fee.ServiceFeeEventList != null && fee.ServiceFeeEventList.Count >= 1)
{
foreach (var serviceFeeEvent in fee.ServiceFeeEventList)
{
foreach (var serviceFeeEventFeeItem in serviceFeeEvent.FeeList)
{
if (serviceFeeEventFeeItem.FeeAmount != null && serviceFeeEventFeeItem.FeeAmount.CurrencyAmount != 0)
{
dc_base_amazon_fee serviceFeeEventFee = new dc_base_amazon_fee
{
account = item.Account,
date = new_task_synchro_log.start_time.AddHours(-8), // 没有时间,用当前时间代替
AmazonOrderId = serviceFeeEvent.AmazonOrderId,
description = serviceFeeEventFeeItem.FeeType,
type = "Service Fee",
total = (decimal)serviceFeeEventFeeItem.FeeAmount.CurrencyAmount,
other = (decimal)serviceFeeEventFeeItem.FeeAmount.CurrencyAmount,
currency_code = serviceFeeEventFeeItem.FeeAmount.CurrencyCode
};
serviceFeeEventFee.data_id = $"{item.Account}_{serviceFeeEventFee.type}_{serviceFeeEventFee.description}_{serviceFeeEventFee.date.ToString("yyyy-MM-ddTHH:mm:ssZ")}_{serviceFeeEventFee.AmazonOrderId}_{serviceFeeEventFee.currency_code}";
feeDatas.Add(serviceFeeEventFee);
}
}
}
}
}
// 广告费
if (fee.ProductAdsPaymentEventList != null && fee.ProductAdsPaymentEventList.Count >= 1)
{
foreach (var productAdsPayment in fee.ProductAdsPaymentEventList)
{
dc_base_amazon_fee productAdsPaymentFee = new dc_base_amazon_fee
{
account = item.Account,
date = productAdsPayment.PostedDate == null ? new DateTime(1991, 1, 1) : productAdsPayment.PostedDate.Value,
AmazonOrderId = productAdsPayment.InvoiceId,
description = "Cost of Advertising",
type = "Service Fee",
total = (decimal)productAdsPayment.TransactionValue.CurrencyAmount,
other = 0,
currency_code = productAdsPayment.TransactionValue.CurrencyCode
};
productAdsPaymentFee.data_id = $"{item.Account}_{productAdsPaymentFee.type}_{productAdsPaymentFee.description}_{productAdsPaymentFee.date.ToString("yyyy-MM-ddTHH:mm:ssZ")}_{productAdsPaymentFee.currency_code}_{productAdsPaymentFee.AmazonOrderId}";
feeDatas.Add(productAdsPaymentFee);
}
}
// 客户退款
if (fee.AdjustmentEventList != null && fee.AdjustmentEventList.Count >= 1)
{
// 客户退款
foreach (var customerReturn in fee.AdjustmentEventList.Where(s => s.AdjustmentType == "REVERSAL_REIMBURSEMENT"))
{
foreach (var customerReturnItem in customerReturn.AdjustmentItemList)
{
dc_base_amazon_fee customerReturnFee = new dc_base_amazon_fee
{
account = item.Account,
date = customerReturn.PostedDate == null ? new DateTime(1991, 1, 1) : customerReturn.PostedDate.Value,
description = "FBA Inventory Reimbursement - Customer Return",
type = "Ajustement",
total = (decimal)customerReturnItem.TotalAmount.CurrencyAmount,
other = 0,
sku = customerReturnItem.SellerSKU,
currency_code = customerReturnItem.TotalAmount.CurrencyCode
};
customerReturnFee.data_id = $"{item.Account}_{customerReturnFee.type}_{customerReturnFee.description}_{customerReturnFee.date.ToString("yyyy-MM-ddTHH:mm:ssZ")}_{customerReturnFee.currency_code}_{customerReturnFee.sku}";
feeDatas.Add(customerReturnFee);
}
}
}
}
foreach (var feeItem in feeDatas)
{
feeItem.id = MyMySqlConnection._connection.QueryFirstOrDefault<int?>("select id from dc_base_amazon_fee where data_id=@data_id", new { data_id = feeItem.data_id }) ?? 0;
if (feeItem.id > 0)
{
MyMySqlConnection._connection.Update(feeItem);
}
else
{
MyMySqlConnection._connection.Insert(feeItem);
}
}
new_task_synchro_log.count = count;
new_task_synchro_log.status = 1;
MyMySqlConnection._connection.Update(new_task_synchro_log);
}
}
catch (Exception ex)
{
MyMySqlConnection._connection.Insert(new dc_task_error_log
{
date = DateTime.Now,
message = ex.Message,
stack_trace = ex.StackTrace,
task_name = "SynchroAmazonFee_" + item.Id
});
//throw;
}
}
}
//public void SynchroFee()
//{
// // 拉取亚马逊账号
// var amazonAccounts = ApiServices.GetAmazonAccountList();
// foreach (var item in amazonAccounts)
// {
// try
// {
// if (item.AmznSpDevAccountObj != null && item.AmznSpTokenObj != null)
// {
// var task_name = $"SynchroAmazonFee_v1_{item.Id}";
// // 查询最后一次成功抓取的记录
// var last_task_synchro_log = MyMySqlConnection._connection.QuerySingleOrDefault<task_synchro_log>(" select * from task_synchro_log where task_name=@task_name and status=1 order by end_time desc limit 1 ", new { task_name = task_name });
// var new_task_synchro_log = new task_synchro_log
// {
// create_date = DateTime.Now,
// end_time = DateTime.Now.AddMinutes(-3),
// status = 0,
// task_name = task_name
// };
// if (last_task_synchro_log != null)
// {
// new_task_synchro_log.start_time = last_task_synchro_log.end_time.AddMinutes(-1);
// }
// else
// {
// new_task_synchro_log.start_time = new DateTime(2023, 1, 1);
// }
// new_task_synchro_log.id = MyMySqlConnection._connection.Insert(new_task_synchro_log) ?? 0;
// int count = 0;
// //new_task_synchro_log.end_time = new DateTime(2023, 1, 31, 23,59, 59);
// var now = DateTime.Now;
// var fees = GetFees(item, null, new_task_synchro_log.start_time, new_task_synchro_log.end_time);
// var feesJson = fees.ToJson();
// List<dc_base_amazon_fee> feeDatas = new List<dc_base_amazon_fee>();
// foreach (var fee in fees)
// {
// // 订单交易
// if (fee.ShipmentEventList != null && fee.ShipmentEventList.Count >= 1)
// {
// foreach (var shipmentEvent in fee.ShipmentEventList)
// {
// foreach (var shipmentItem in shipmentEvent.ShipmentItemList)
// {
// feeDatas.Add(ApiDataMapDbData(item.Account, shipmentEvent, shipmentItem, "order"));
// }
// }
// }
// // 退款
// if (fee.RefundEventList != null && fee.RefundEventList.Count >= 1)
// {
// foreach (var refundEventList in fee.RefundEventList)
// {
// foreach (var shipmentItemAdjustmentList in refundEventList.ShipmentItemAdjustmentList)
// {
// feeDatas.Add(ApiDataMapDbData(item.Account, refundEventList, shipmentItemAdjustmentList, "refund"));
// }
// }
// }
// // 服务费 (该费用没有实际时间,如果抓取时间跟当前时间相差不超过24小时,则以当前时间为准,否则跳过该费用)
// if ((DateTime.Now - new_task_synchro_log.start_time).TotalHours <= 24)
// {
// if (fee.ServiceFeeEventList != null && fee.ServiceFeeEventList.Count >= 1)
// {
// foreach (var serviceFeeEvent in fee.ServiceFeeEventList)
// {
// foreach (var serviceFeeEventFeeItem in serviceFeeEvent.FeeList)
// {
// if (serviceFeeEventFeeItem.FeeAmount != null && serviceFeeEventFeeItem.FeeAmount.CurrencyAmount != 0)
// {
// dc_base_amazon_fee serviceFeeEventFee = new dc_base_amazon_fee
// {
// account = item.Account,
// date = new_task_synchro_log.start_time.AddHours(-8), // 没有时间,用当前时间代替
// AmazonOrderId = serviceFeeEvent.AmazonOrderId,
// description = serviceFeeEventFeeItem.FeeType,
// type = "Service Fee",
// total = (decimal)serviceFeeEventFeeItem.FeeAmount.CurrencyAmount,
// other = (decimal)serviceFeeEventFeeItem.FeeAmount.CurrencyAmount,
// currency_code = serviceFeeEventFeeItem.FeeAmount.CurrencyCode
// };
// serviceFeeEventFee.data_id = $"{item.Account}_{serviceFeeEventFee.type}_{serviceFeeEventFee.description}_{serviceFeeEventFee.date.ToString("yyyy-MM-ddTHH:mm:ssZ")}_{serviceFeeEventFee.AmazonOrderId}_{serviceFeeEventFee.currency_code}";
// feeDatas.Add(serviceFeeEventFee);
// }
// }
// }
// }
// }
// // 广告费
// if (fee.ProductAdsPaymentEventList != null && fee.ProductAdsPaymentEventList.Count >= 1)
// {
// foreach (var productAdsPayment in fee.ProductAdsPaymentEventList)
// {
// dc_base_amazon_fee productAdsPaymentFee = new dc_base_amazon_fee
// {
// account = item.Account,
// date = productAdsPayment.PostedDate == null ? new DateTime(1991, 1, 1) : productAdsPayment.PostedDate.Value,
// AmazonOrderId = productAdsPayment.InvoiceId,
// description = "Cost of Advertising",
// type = "Service Fee",
// total = (decimal)productAdsPayment.TransactionValue.CurrencyAmount,
// other = 0,
// currency_code = productAdsPayment.TransactionValue.CurrencyCode
// };
// productAdsPaymentFee.data_id = $"{item.Account}_{productAdsPaymentFee.type}_{productAdsPaymentFee.description}_{productAdsPaymentFee.date.ToString("yyyy-MM-ddTHH:mm:ssZ")}_{productAdsPaymentFee.currency_code}_{productAdsPaymentFee.AmazonOrderId}";
// feeDatas.Add(productAdsPaymentFee);
// }
// }
// // 客户退款
// if (fee.AdjustmentEventList != null && fee.AdjustmentEventList.Count >= 1)
// {
// // 客户退款
// foreach (var customerReturn in fee.AdjustmentEventList.Where(s => s.AdjustmentType == "REVERSAL_REIMBURSEMENT"))
// {
// foreach (var customerReturnItem in customerReturn.AdjustmentItemList)
// {
// dc_base_amazon_fee customerReturnFee = new dc_base_amazon_fee
// {
// account = item.Account,
// date = customerReturn.PostedDate == null ? new DateTime(1991, 1, 1) : customerReturn.PostedDate.Value,
// description = "FBA Inventory Reimbursement - Customer Return",
// type = "Ajustement",
// total = (decimal)customerReturnItem.TotalAmount.CurrencyAmount,
// other = 0,
// sku = customerReturnItem.SellerSKU,
// currency_code = customerReturnItem.TotalAmount.CurrencyCode
// };
// customerReturnFee.data_id = $"{item.Account}_{customerReturnFee.type}_{customerReturnFee.description}_{customerReturnFee.date.ToString("yyyy-MM-ddTHH:mm:ssZ")}_{customerReturnFee.currency_code}_{customerReturnFee.sku}";
// feeDatas.Add(customerReturnFee);
// }
// }
// }
// }
// foreach (var feeItem in feeDatas)
// {
// feeItem.id = MyMySqlConnection._connection.QueryFirstOrDefault<int?>("select id from dc_base_amazon_fee where data_id=@data_id", new { data_id = feeItem.data_id }) ?? 0;
// if (feeItem.id > 0)
// {
// MyMySqlConnection._connection.Update(feeItem);
// }
// else
// {
// MyMySqlConnection._connection.Insert(feeItem);
// }
// }
// new_task_synchro_log.count = count;
// new_task_synchro_log.status = 1;
// MyMySqlConnection._connection.Update(new_task_synchro_log);
// }
// }
// catch (Exception ex)
// {
// MyMySqlConnection._connection.Insert(new dc_task_error_log
// {
// date = DateTime.Now,
// message = ex.Message,
// stack_trace = ex.StackTrace,
// task_name = "SynchroAmazonFee_" + item.Id
// });
// //throw;
// }
// }
//}
public void SynchroFinancialEventGroups()
{
// 拉取亚马逊账号
......@@ -231,7 +231,7 @@ namespace AutoTurnOver.Services
if (item.AmznSpDevAccountObj != null && item.AmznSpTokenObj != null)
{
var task_name = $"SynchroAmazonFinancialEventGroups_v2_{item.Id}";
var task_name = $"SynchroAmazonFinancialEventGroups_v3_{item.Id}";
// 查询最后一次成功抓取的记录
var last_task_synchro_log = MyMySqlConnection._connection.QuerySingleOrDefault<task_synchro_log>(" select * from task_synchro_log where task_name=@task_name and status=1 order by end_time desc limit 1 ", new { task_name = task_name });
......@@ -255,7 +255,7 @@ namespace AutoTurnOver.Services
new_task_synchro_log.id = MyMySqlConnection._connection.Insert(new_task_synchro_log) ?? 0;
int count = 0;
new_task_synchro_log.end_time = new DateTime(2023, 1, 31, 23,59, 59);
new_task_synchro_log.end_time = new DateTime(2023, 1, 31, 23, 59, 59);
var now = DateTime.Now;
var fees = GetFinancialEventGroups(item, new_task_synchro_log.start_time, new_task_synchro_log.end_time);
......@@ -270,7 +270,7 @@ namespace AutoTurnOver.Services
SellerOrderId = feeItem.TraceId,
description = $"To account ending in: {feeItem.AccountTail}",
type = "Transfer", // 提现
total = (decimal)feeItem.OriginalTotal.CurrencyAmount- (decimal)feeItem.BeginningBalance.CurrencyAmount,
total = 0 - (decimal)feeItem.OriginalTotal.CurrencyAmount - (decimal)feeItem.BeginningBalance.CurrencyAmount,
currency_code = feeItem.OriginalTotal.CurrencyCode
};
transferFee.other = transferFee.total;
......@@ -318,18 +318,18 @@ namespace AutoTurnOver.Services
{
// 拉取亚马逊账号
var amazonAccounts = ApiServices.GetAmazonAccountList();
//amazonAccounts = amazonAccounts.Where(s => s.Account == "Natural Daisy Encens").ToList();
//amazonAccounts = amazonAccounts.Where(s => s.Account == "Natural Daisy Encens" && s.SiteEn == "UK").ToList();
foreach (var itemV in amazonAccounts)
{
try
{
if (itemV.AmznSpDevAccountObj != null && itemV.AmznSpTokenObj != null && itemV.MarketPlaceObj!=null)
if (itemV.AmznSpDevAccountObj != null && itemV.AmznSpTokenObj != null && itemV.MarketPlaceObj != null)
{
// 由于token1小时刷新一次,所以个账号要重新从账号系统拉取token
var item = ApiServices.GetAmazonAccountList().FirstOrDefault(s => s.Id == itemV.Id);
var reportTypeEnum = ReportTypes.GET_V2_SETTLEMENT_REPORT_DATA_XML;
var task_name = $"SynchroAmazonReport_{reportTypeEnum.ToString()}_v2_{item.Id}";
var task_name = $"SynchroAmazonReport_{reportTypeEnum.ToString()}_v8_{item.Id}";
// 查询最后一次成功抓取的记录
var last_task_synchro_log = MyMySqlConnection._connection.QuerySingleOrDefault<task_synchro_log>(" select * from task_synchro_log where task_name=@task_name and status=1 order by end_time desc limit 1 ", new { task_name = task_name });
......@@ -343,8 +343,8 @@ namespace AutoTurnOver.Services
if (last_task_synchro_log != null)
{
// 由于是拉报告,没必要太频繁,如果24小时之内拉过的,就先跳过
if ((DateTime.Now - last_task_synchro_log.end_time).TotalHours <3)
// 由于是拉报告,没必要太频繁,如果3小时之内拉过的,就先跳过
if ((DateTime.Now - last_task_synchro_log.end_time).TotalHours < 3)
{
continue;
}
......@@ -359,7 +359,9 @@ namespace AutoTurnOver.Services
var reports = GetReports(item, reportTypeEnum, new_task_synchro_log.start_time, new_task_synchro_log.end_time);
var reports = GetReports(item, new_task_synchro_log.start_time, new_task_synchro_log.end_time, reportTypeEnum);
foreach (var reportsItem in reports)
{
var reportsDb = new dc_base_amazon_fee_report_log
......@@ -375,13 +377,14 @@ namespace AutoTurnOver.Services
report_par_json = reportsItem.ToJson(),
btime = reportsItem.DataStartTime,
etime = reportsItem.DataEndTime,
site_code = item.SiteEn,
site_code = item.MarketPlaceObj.multiMwsMid,
};
reportsDb.id = MyMySqlConnection._connection.QueryFirstOrDefault<int?>(" select id from dc_base_amazon_fee_report_log where report_id=@report_id and pams_account_id=@pams_account_id ",new {
reportsDb.id = MyMySqlConnection._connection.QueryFirstOrDefault<int?>(" select id from dc_base_amazon_fee_report_log where report_id=@report_id and pams_account_id=@pams_account_id ", new
{
pams_account_id = reportsDb.pams_account_id,
report_id = reportsDb.report_id
}) ??0;
}) ?? 0;
if (reportsDb.id <= 0)
{
MyMySqlConnection._connection.Insert(reportsDb);
......@@ -416,16 +419,20 @@ namespace AutoTurnOver.Services
/// </summary>
public void AnaReport()
{
var ana_task = MyMySqlConnection._connection.QueryFirstOrDefault<dc_base_amazon_fee_report_log>(" select * from dc_base_amazon_fee_report_log where ana_status=0 order by id desc limit 1 ");
var reportTypeEnum = ReportTypes.GET_V2_SETTLEMENT_REPORT_DATA_XML;
var ana_task = MyMySqlConnection._connection.QueryFirstOrDefault<dc_base_amazon_fee_report_log>(" select * from dc_base_amazon_fee_report_log where report_type=@report_type and ana_status=0 order by id desc limit 1 ", new
{
report_type = reportTypeEnum.ToString()
});
if (ana_task == null)
{
return ;
return;
}
try
{
var pamsAccount = ApiServices.GetAmazonAccountList().FirstOrDefault(s => s.Id == ana_task.pams_account_id);
var filePath = DownloadReport(pamsAccount, ana_task.report_id);
StringBuilder response_str =new StringBuilder (){ };
StringBuilder response_str = new StringBuilder() { };
using (StreamReader sr = new StreamReader(filePath))
{
response_str.AppendLine(sr.ReadToEnd());
......@@ -437,7 +444,84 @@ namespace AutoTurnOver.Services
ana_task.content = jsonText;
//序列化
if (true)
{
var settlementData = MapSettlement(jsonText);
List<dc_base_amazon_fee> feeDatas = new List<dc_base_amazon_fee> { };
foreach (var orderItem in settlementData.AmazonEnvelope.Message.SettlementReport.Order)
{
var orderDbData = ApiOrderDataMapDbData(pamsAccount, settlementData.AmazonEnvelope.Message.SettlementReport.SettlementData, orderItem);
feeDatas.AddRange(orderDbData);
}
foreach (var refundItem in settlementData.AmazonEnvelope.Message.SettlementReport.Refund)
{
var refundDbData = ApiRefundDataMapDbData(pamsAccount, settlementData.AmazonEnvelope.Message.SettlementReport.SettlementData, refundItem);
feeDatas.AddRange(refundDbData);
}
var marketplaceName = "";
if (feeDatas.Count >= 1)
{
marketplaceName = feeDatas.FirstOrDefault().MarketplaceName;
}
foreach (var otherTransactionItem in settlementData.AmazonEnvelope.Message.SettlementReport.OtherTransaction)
{
if (otherTransactionItem.Fees != null && otherTransactionItem.Fees.Fee != null && otherTransactionItem.Fees.Fee.Count >= 1)
{
foreach (var otherTransactionItemFee in otherTransactionItem.Fees.Fee)
{
var otherTransactionItemData = ApiOtherTransactionDataMapDbData(marketplaceName,pamsAccount, settlementData.AmazonEnvelope.Message.SettlementReport.SettlementData,
otherTransactionItem.TransactionID, otherTransactionItem.PostedDate,
otherTransactionItemFee.Amount.Text ?? 0, otherTransactionItemFee.Type, otherTransactionItemFee.Amount.Currency);
feeDatas.Add(otherTransactionItemData);
}
}
else
{
var otherTransactionItemData = ApiOtherTransactionDataMapDbData(marketplaceName,pamsAccount, settlementData.AmazonEnvelope.Message.SettlementReport.SettlementData,
otherTransactionItem.TransactionID, otherTransactionItem.PostedDate,
otherTransactionItem.Amount.Text ?? 0, otherTransactionItem.TransactionType, otherTransactionItem.Amount.Currency);
feeDatas.Add(otherTransactionItemData);
}
}
if (settlementData.AmazonEnvelope.Message.SettlementReport.AdvertisingTransactionDetails != null)
{
foreach (var advertisingTransactionDetailsItem in settlementData.AmazonEnvelope.Message.SettlementReport.AdvertisingTransactionDetails)
{
var adFee = advertisingTransactionDetailsItem;
var adItemData = ApiOtherTransactionDataMapDbData(marketplaceName, pamsAccount, settlementData.AmazonEnvelope.Message.SettlementReport.SettlementData,
adFee.InvoiceId, adFee.PostedDate,
adFee.TransactionAmount.Text ?? 0, advertisingTransactionDetailsItem.TransactionType, adFee.TransactionAmount.Currency);
feeDatas.Add(adItemData);
}
}
foreach (var feeItem in feeDatas)
{
try
{
feeItem.id = MyMySqlConnection._connection.QueryFirstOrDefault<int?>("select id from dc_base_amazon_fee where data_id=@data_id", new { data_id = feeItem.data_id }) ?? 0;
if (feeItem.id > 0)
{
MyMySqlConnection._connection.Update(feeItem);
}
else
{
MyMySqlConnection._connection.Insert(feeItem);
}
}
catch (Exception ex1)
{
throw;
}
}
}
ana_task.ana_error = "";
......@@ -458,67 +542,161 @@ namespace AutoTurnOver.Services
{
return json.ToObj<ApiAmazonSettlementDto>();
}
public dc_base_amazon_fee ApiDataMapDbData(string account, ShipmentEvent shipmentEvent, ShipmentItem shipmentItem, string type)
/// <summary>
/// 结算文件解析成数据库实体
/// </summary>
/// <param name="account"></param>
/// <param name="xmlSettlementData"></param>
/// <param name="type"></param>
/// <returns></returns>
public List<dc_base_amazon_fee> ApiOrderDataMapDbData(AmazonAccountDto account, ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.SettlementDataDto xmlSettlementData,
ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.OrderDto xmlSettlementOrderData)
{
List<dc_base_amazon_fee> datas = new List<dc_base_amazon_fee> { };
var fbaFeeTypeList = new List<string> { "FBAPerOrderFulfillmentFee", "FBAPerUnitFulfillmentFee", "FBAWeightBasedFee" };
var sellingFeesList = new List<string> { "Commission", "RefundCommission" };
foreach (var item in xmlSettlementOrderData.Fulfillment.Item)
{
dc_base_amazon_fee feeShipmentEvent = new dc_base_amazon_fee { };
feeShipmentEvent.account = account;
feeShipmentEvent.data_id = $"{account}_{type}_{shipmentEvent.SellerOrderId}_{shipmentEvent.AmazonOrderId}_{shipmentItem.SellerSKU}_{shipmentItem.OrderItemId}";
feeShipmentEvent.type = type;
feeShipmentEvent.date = shipmentEvent.PostedDate == null ? new DateTime(1991, 1, 1) : shipmentEvent.PostedDate.Value;
feeShipmentEvent.SellerOrderId = shipmentEvent.SellerOrderId;
feeShipmentEvent.AmazonOrderId = shipmentEvent.AmazonOrderId;
feeShipmentEvent.MarketplaceName = shipmentEvent.MarketplaceName;
feeShipmentEvent.sku = shipmentItem.SellerSKU;
if (type == "refund")
feeShipmentEvent.account = account.Account;
feeShipmentEvent.settlement_id = xmlSettlementData.AmazonSettlementID;
feeShipmentEvent.data_id = $"{account.Account}_order_{feeShipmentEvent.settlement_id}_{xmlSettlementOrderData.AmazonOrderID}_{item.SKU}_{item.AmazonOrderItemCode}";
feeShipmentEvent.type = "order";
feeShipmentEvent.date = xmlSettlementOrderData.Fulfillment.PostedDate == null ? new DateTime(1991, 1, 1) : xmlSettlementOrderData.Fulfillment.PostedDate.Value;
feeShipmentEvent.SellerOrderId = xmlSettlementOrderData.MerchantOrderID;
feeShipmentEvent.AmazonOrderId = xmlSettlementOrderData.AmazonOrderID;
feeShipmentEvent.MarketplaceName = xmlSettlementOrderData.MarketplaceName;
feeShipmentEvent.sku = item.SKU;
if (item.ItemFees.Fee != null && item.ItemFees.Fee.Count >= 1)
{
if (shipmentItem.ItemFeeAdjustmentList != null && shipmentItem.ItemFeeAdjustmentList.Count >= 1)
feeShipmentEvent.fba_fees = item.ItemFees.Fee.Where(s => fbaFeeTypeList.Any(f1 => f1.Equals(s.Type, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.selling_fees = item.ItemFees.Fee.Where(s => sellingFeesList.Any(f1 => s.Type.Equals(f1, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.Amount.Text ?? 0);
}
if (item.ItemPrice.Component != null && item.ItemPrice.Component.Count >= 1)
{
feeShipmentEvent.fba_fees = (decimal)shipmentItem.ItemFeeAdjustmentList.Where(s => fbaFeeTypeList.Any(f1 => f1.Equals(s.FeeType, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.FeeAmount.CurrencyAmount);
feeShipmentEvent.selling_fees = (decimal)shipmentItem.ItemFeeAdjustmentList.Where(s => sellingFeesList.Any(f1 => s.FeeType.Equals(f1, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.FeeAmount.CurrencyAmount);
feeShipmentEvent.currency_code = item.ItemPrice.Component.FirstOrDefault()?.Amount.Currency;
feeShipmentEvent.shipping_credits_tax = item.ItemPrice.Component.Where(s => s.Type.Equals("ShippingTax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.postage_credits = item.ItemPrice.Component.Where(s => s.Type.Equals("Shipping", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.product_sales_tax = item.ItemPrice.Component.Where(s => s.Type.Equals("Tax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.gift_wrap_credits = item.ItemPrice.Component.Where(s => s.Type.Equals("GiftWrap", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.gift_wrap_credits_tax = item.ItemPrice.Component.Where(s => s.Type.Equals("GiftWrapTax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.product_sales = item.ItemPrice.Component.Where(s => s.Type.Equals("Principal", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
var marketplace_withheld = item.ItemPrice.Component.Where(s => s.Type.Contains("VAT")).ToList();
if (marketplace_withheld != null && marketplace_withheld.Count >= 1)
{
feeShipmentEvent.marketplace_withheld_tax = marketplace_withheld.Sum(s => s.Amount.Text ?? 0);
var marketplace_withheld_type = marketplace_withheld.FirstOrDefault().Type;
if (!string.IsNullOrWhiteSpace(marketplace_withheld_type))
{
feeShipmentEvent.tax_collection_model = marketplace_withheld_type.Substring(0, marketplace_withheld_type.IndexOf("VAT"));
}
if (shipmentItem.ItemChargeAdjustmentList != null && shipmentItem.ItemChargeAdjustmentList.Count >= 1)
}
}
feeShipmentEvent.quantity = (item.Quantity ?? 0).ToString();
feeShipmentEvent.promotional_rebates = 0;
feeShipmentEvent.promotional_rebates_tax = 0;
feeShipmentEvent.other_transaction_fees = 0;
feeShipmentEvent.other = 0;
if (item.Promotion != null && item.Promotion.Amount.Text != 0)
{
feeShipmentEvent.currency_code = shipmentItem.ItemChargeAdjustmentList.FirstOrDefault()?.ChargeAmount.CurrencyCode;
feeShipmentEvent.shipping_credits_tax = (decimal)shipmentItem.ItemChargeAdjustmentList.Where(s => s.ChargeType.Equals("ShippingTax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
feeShipmentEvent.postage_credits = (decimal)shipmentItem.ItemChargeAdjustmentList.Where(s => s.ChargeType.Equals("ShippingCharge", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
feeShipmentEvent.product_sales_tax = (decimal)shipmentItem.ItemChargeAdjustmentList.Where(s => s.ChargeType.Equals("Tax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
feeShipmentEvent.promotional_rebates = feeShipmentEvent.postage_credits;
feeShipmentEvent.promotional_rebates_tax = feeShipmentEvent.shipping_credits_tax;
}
feeShipmentEvent.gift_wrap_credits = (decimal)shipmentItem.ItemChargeAdjustmentList.Where(s => s.ChargeType.Equals("GiftWrap", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
feeShipmentEvent.gift_wrap_credits_tax = (decimal)shipmentItem.ItemChargeAdjustmentList.Where(s => s.ChargeType.Equals("GiftWrapTax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
feeShipmentEvent.product_sales = (decimal)shipmentItem.ItemChargeAdjustmentList.Where(s => s.ChargeType.Equals("Principal", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
feeShipmentEvent.total =
feeShipmentEvent.product_sales +
feeShipmentEvent.product_sales_tax +
feeShipmentEvent.postage_credits +
feeShipmentEvent.shipping_credits_tax +
feeShipmentEvent.gift_wrap_credits +
feeShipmentEvent.gift_wrap_credits_tax +
feeShipmentEvent.promotional_rebates +
feeShipmentEvent.promotional_rebates_tax +
feeShipmentEvent.marketplace_withheld_tax +
feeShipmentEvent.selling_fees +
feeShipmentEvent.fba_fees +
feeShipmentEvent.other +
feeShipmentEvent.other_transaction_fees +
feeShipmentEvent.total;
datas.Add(feeShipmentEvent);
}
return datas;
}
else
/// <summary>
/// 结算文件解析成数据库实体
/// </summary>
/// <param name="account"></param>
/// <param name="xmlSettlementData"></param>
/// <param name="type"></param>
/// <returns></returns>
public List<dc_base_amazon_fee> ApiRefundDataMapDbData(AmazonAccountDto account, ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.SettlementDataDto xmlSettlementData,
ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.RefundDto xmlSettlementOrderData)
{
if (shipmentItem.ItemFeeList != null && shipmentItem.ItemFeeList.Count >= 1)
var fbaFeeTypeList = new List<string> { "FBAPerOrderFulfillmentFee", "FBAPerUnitFulfillmentFee", "FBAWeightBasedFee" };
var sellingFeesList = new List<string> { "Commission", "RefundCommission" };
var datas = new List<dc_base_amazon_fee> { };
foreach (var itemFeeAdjustment in xmlSettlementOrderData.Fulfillment.AdjustedItem)
{
feeShipmentEvent.fba_fees = (decimal)shipmentItem.ItemFeeList.Where(s => fbaFeeTypeList.Any(f1 => f1.Equals(s.FeeType, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.FeeAmount.CurrencyAmount);
feeShipmentEvent.selling_fees = (decimal)shipmentItem.ItemFeeList.Where(s => sellingFeesList.Any(f1 => s.FeeType.Equals(f1, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.FeeAmount.CurrencyAmount);
}
feeShipmentEvent.currency_code = shipmentItem.ItemChargeList.FirstOrDefault()?.ChargeAmount.CurrencyCode;
dc_base_amazon_fee feeShipmentEvent = new dc_base_amazon_fee { };
if (shipmentItem.ItemTaxWithheldList != null && shipmentItem.ItemTaxWithheldList.Count >= 1)
feeShipmentEvent.account = account.Account;
feeShipmentEvent.settlement_id = xmlSettlementData.AmazonSettlementID;
feeShipmentEvent.data_id = $"{account.Account}_refund_{feeShipmentEvent.settlement_id}_{xmlSettlementOrderData.AmazonOrderID}_{itemFeeAdjustment.SKU}_{itemFeeAdjustment.AmazonOrderItemCode}";
feeShipmentEvent.type = "refund";
feeShipmentEvent.date = xmlSettlementOrderData.Fulfillment.PostedDate == null ? new DateTime(1991, 1, 1) : xmlSettlementOrderData.Fulfillment.PostedDate.Value;
feeShipmentEvent.SellerOrderId = xmlSettlementOrderData.MerchantOrderID;
feeShipmentEvent.AmazonOrderId = xmlSettlementOrderData.AmazonOrderID;
feeShipmentEvent.MarketplaceName = xmlSettlementOrderData.MarketplaceName;
feeShipmentEvent.sku = itemFeeAdjustment.SKU;
if (itemFeeAdjustment.ItemFeeAdjustments.Fee != null && itemFeeAdjustment.ItemFeeAdjustments.Fee.Count >= 1)
{
feeShipmentEvent.tax_collection_model = shipmentItem.ItemTaxWithheldList?.FirstOrDefault()?.TaxCollectionModel;
feeShipmentEvent.marketplace_withheld_tax = (decimal)shipmentItem.ItemTaxWithheldList?.Sum(s => s.TaxesWithheld.Sum(s1 => s1.ChargeAmount.CurrencyAmount));
feeShipmentEvent.fba_fees = itemFeeAdjustment.ItemFeeAdjustments.Fee.Where(s => fbaFeeTypeList.Any(f1 => f1.Equals(s.Type, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.selling_fees = itemFeeAdjustment.ItemFeeAdjustments.Fee.Where(s => sellingFeesList.Any(f1 => s.Type.Equals(f1, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.Amount.Text ?? 0);
}
if (shipmentItem.ItemChargeList != null && shipmentItem.ItemChargeList.Count >= 1)
if (itemFeeAdjustment.ItemPriceAdjustments.Component != null && itemFeeAdjustment.ItemPriceAdjustments.Component.Count >= 1)
{
feeShipmentEvent.shipping_credits_tax = (decimal)shipmentItem.ItemChargeList.Where(s => s.ChargeType.Equals("ShippingTax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
feeShipmentEvent.postage_credits = (decimal)shipmentItem.ItemChargeList.Where(s => s.ChargeType.Equals("ShippingCharge", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
feeShipmentEvent.product_sales_tax = (decimal)shipmentItem.ItemChargeList.Where(s => s.ChargeType.Equals("Tax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
feeShipmentEvent.currency_code = itemFeeAdjustment.ItemPriceAdjustments.Component.FirstOrDefault()?.Amount.Currency;
feeShipmentEvent.shipping_credits_tax = itemFeeAdjustment.ItemPriceAdjustments.Component.Where(s => s.Type.Equals("ShippingTax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.postage_credits = itemFeeAdjustment.ItemPriceAdjustments.Component.Where(s => s.Type.Equals("Shipping", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.product_sales_tax = itemFeeAdjustment.ItemPriceAdjustments.Component.Where(s => s.Type.Equals("Tax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.gift_wrap_credits = itemFeeAdjustment.ItemPriceAdjustments.Component.Where(s => s.Type.Equals("GiftWrap", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.gift_wrap_credits_tax = itemFeeAdjustment.ItemPriceAdjustments.Component.Where(s => s.Type.Equals("GiftWrapTax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
feeShipmentEvent.product_sales = itemFeeAdjustment.ItemPriceAdjustments.Component.Where(s => s.Type.Equals("Principal", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.Amount.Text ?? 0);
var marketplace_withheld = itemFeeAdjustment.ItemPriceAdjustments.Component.Where(s => s.Type.Contains("VAT")).ToList();
if (marketplace_withheld != null && marketplace_withheld.Count >= 1)
{
feeShipmentEvent.marketplace_withheld_tax = marketplace_withheld.Sum(s => s.Amount.Text ?? 0);
var marketplace_withheld_type = marketplace_withheld.FirstOrDefault().Type;
if (!string.IsNullOrWhiteSpace(marketplace_withheld_type))
{
feeShipmentEvent.tax_collection_model = marketplace_withheld_type.Substring(0, marketplace_withheld_type.IndexOf("VAT"));
}
feeShipmentEvent.gift_wrap_credits = (decimal)shipmentItem.ItemChargeList.Where(s => s.ChargeType.Equals("GiftWrap", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
feeShipmentEvent.gift_wrap_credits_tax = (decimal)shipmentItem.ItemChargeList.Where(s => s.ChargeType.Equals("GiftWrapTax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
feeShipmentEvent.product_sales = (decimal)shipmentItem.ItemChargeList.Where(s => s.ChargeType.Equals("Principal", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount);
}
}
feeShipmentEvent.quantity = (shipmentItem.QuantityShipped ?? 0).ToString();
feeShipmentEvent.quantity = (itemFeeAdjustment.Quantity ?? 0).ToString();
feeShipmentEvent.promotional_rebates = 0;
feeShipmentEvent.promotional_rebates_tax = 0;
......@@ -526,11 +704,12 @@ namespace AutoTurnOver.Services
feeShipmentEvent.other = 0;
if (shipmentItem.PromotionList != null && shipmentItem.PromotionList.Any(s => s.PromotionAmount.CurrencyAmount != 0))
if (itemFeeAdjustment.PromotionAdjustment != null && itemFeeAdjustment.PromotionAdjustment.Amount.Text != 0)
{
feeShipmentEvent.promotional_rebates = feeShipmentEvent.postage_credits;
feeShipmentEvent.promotional_rebates_tax = feeShipmentEvent.shipping_credits_tax;
}
feeShipmentEvent.total =
feeShipmentEvent.product_sales +
feeShipmentEvent.product_sales_tax +
......@@ -546,9 +725,45 @@ namespace AutoTurnOver.Services
feeShipmentEvent.other +
feeShipmentEvent.other_transaction_fees +
feeShipmentEvent.total;
return feeShipmentEvent;
datas.Add(feeShipmentEvent);
}
return datas;
}
public dc_base_amazon_fee ApiOtherTransactionDataMapDbData(string marketplaceName,AmazonAccountDto account, ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.SettlementDataDto xmlSettlementData,
string transactionID, DateTime? postedDate, decimal amount, string type, string currency_code)
{
var fbaTypeDic = new Dictionary<string, string> { };
fbaTypeDic.Add("Storage Fee", "FBA Inventory Fee");
fbaTypeDic.Add("DisposalComplete", "FBA Inventory Fee");
fbaTypeDic.Add("Inbound Transportation Fee", "FBA Inventory Fee");
fbaTypeDic.Add("Inbound Transportation Program Fee", "FBA Inventory Fee");
fbaTypeDic.Add("StorageRenewalBilling", "FBA Inventory Fee");
fbaTypeDic.Add("Subscription Fee", "Service Fee");
fbaTypeDic.Add("Cost of Advertising", "Service Fee");
dc_base_amazon_fee feeShipmentEvent = new dc_base_amazon_fee { };
feeShipmentEvent.account = account.Account;
feeShipmentEvent.settlement_id = xmlSettlementData.AmazonSettlementID;
feeShipmentEvent.AmazonOrderId = transactionID;
feeShipmentEvent.currency_code = currency_code;
feeShipmentEvent.MarketplaceName = marketplaceName;
feeShipmentEvent.description = type;
feeShipmentEvent.total = amount;
feeShipmentEvent.type = "Other";
if (fbaTypeDic.ContainsKey(type))
{
feeShipmentEvent.type = fbaTypeDic[type];
}
feeShipmentEvent.data_id = $"{account.Account}_OtherTransaction_{feeShipmentEvent.AmazonOrderId}_{ feeShipmentEvent.description}_{feeShipmentEvent.settlement_id}";
feeShipmentEvent.date = postedDate == null ? new DateTime(1991, 1, 1) : postedDate.Value;
return feeShipmentEvent;
}
/// <summary>
/// 获取费用列表
/// </summary>
......@@ -599,7 +814,7 @@ namespace AutoTurnOver.Services
/// <param name="etime"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public List<Report> GetReports(AmazonAccountDto account, ReportTypes reportType, DateTime btime, DateTime etime)
public List<Report> GetReports(AmazonAccountDto account, DateTime btime, DateTime etime, ReportTypes reportType)
{
AmazonConnection amazonConnection = MapAmazonConnection(account);
var parameters = new ParameterReportList();
......@@ -621,7 +836,7 @@ namespace AutoTurnOver.Services
var parameters = new ParameterListFinancialEventGroup();
parameters.FinancialEventGroupStartedAfter = btime;
parameters.FinancialEventGroupStartedBefore = etime;
parameters.MaxResultsPerPage=100;
parameters.MaxResultsPerPage = 100;
var reports = amazonConnection.Financial.ListFinancialEventGroups(parameters);
return reports;
}
......@@ -641,7 +856,6 @@ namespace AutoTurnOver.Services
//Thread.Sleep(1000 * 60);
AmazonConnection amazonConnection = MapAmazonConnection(account);
var parameters = new ParameterCreateReportSpecification();
parameters.reportType = reportType;
parameters.dataStartTime = btime;
......@@ -649,7 +863,8 @@ namespace AutoTurnOver.Services
parameters.marketplaceIds = new MarketplaceIds();
parameters.marketplaceIds.Add(account.MarketPlaceObj.multiMwsMid);
parameters.reportOptions = new
ReportOptions() { };
ReportOptions()
{ };
var reportId = amazonConnection.Reports.CreateReport(parameters);
......
using FikaAmazonAPI.AmazonSpApiSDK.Models.Finances;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
......@@ -149,7 +150,7 @@ namespace AutoTurnOver.Services.Dto
public DateTime? DepositDate { get; set; }
}
public List<OtherTransactionDto> OtherTransaction { get; set; }
public List<OtherTransactionDto> OtherTransaction { get; set; } = new List<OtherTransactionDto> { };
public class OtherTransactionDto
{
......@@ -158,9 +159,17 @@ namespace AutoTurnOver.Services.Dto
public string TransactionType { get; set; }
public DateTime? PostedDate { get; set; }
public Amount Amount { get; set; }
public FeesDto Fees { get; set; }
public class FeesDto
{
public List<FeeDto> Fee { get; set; }
}
}
public List<OrderDto> Order { get; set; }
[JsonProperty("Order")]
[JsonConverter(typeof(OrderDataConverter))]
public List<OrderDto> Order { get; set; } = new List<OrderDto> { };
public class OrderDto
{
......@@ -173,20 +182,29 @@ namespace AutoTurnOver.Services.Dto
{
public string MerchantFulfillmentID { get; set; }
public DateTime? PostedDate { get; set; }
public ItemDto Item { get; set; }
[JsonProperty("Item")]
[JsonConverter(typeof(ItemDataConverter))]
public List<ItemDto> Item { get; set; }
public class ItemDto
{
public string AmazonOrderItemCode { get; set; }
public string SKU { get; set; }
public int? Quantity { get; set; }
public ItemPriceDto ItemPrice { get; set; }
public ItemFeesDto ItemFees { get; set; }
public ItemPriceDto ItemPrice { get; set; } = new ItemPriceDto { };
public ItemFeesDto ItemFees { get; set; } = new ItemFeesDto { };
public class ItemPriceDto
{
[JsonProperty("Component")]
[JsonConverter(typeof(ItemFeeDataConverter))]
public List<FeeDto> Component { get; set; }
}
public class ItemFeesDto
{
[JsonProperty("Fee")]
[JsonConverter(typeof(ItemFeeDataConverter))]
public List<FeeDto> Fee { get; set; }
}
......@@ -202,7 +220,9 @@ namespace AutoTurnOver.Services.Dto
}
}
public List<RefundDto> Refund { get; set; }
[JsonProperty("Refund")]
[JsonConverter(typeof(RefundDataConverter))]
public List<RefundDto> Refund { get; set; } = new List<RefundDto> { };
public class RefundDto
{
......@@ -215,20 +235,27 @@ namespace AutoTurnOver.Services.Dto
{
public string MerchantFulfillmentID { get; set; }
public DateTime? PostedDate { get; set; }
public ItemDto AdjustedItem { get; set; }
[JsonProperty("AdjustedItem")]
[JsonConverter(typeof(AdjustedItemDataConverter))]
public List<ItemDto> AdjustedItem { get; set; }
public class ItemDto
{
public string AmazonOrderItemCode { get; set; }
public string SKU { get; set; }
public int? Quantity { get; set; }
public ItemPriceDto ItemPriceAdjustments { get; set; }
public ItemFeesDto ItemFeeAdjustments { get; set; }
public ItemPriceDto ItemPriceAdjustments { get; set; } = new ItemPriceDto { };
public ItemFeesDto ItemFeeAdjustments { get; set; } = new ItemFeesDto { };
public class ItemPriceDto
{
[JsonProperty("Component")]
[JsonConverter(typeof(ItemFeeDataConverter))]
public List<FeeDto> Component { get; set; }
}
public class ItemFeesDto
{
[JsonProperty("Fee")]
[JsonConverter(typeof(ItemFeeDataConverter))]
public List<FeeDto> Fee { get; set; }
}
......@@ -243,6 +270,19 @@ namespace AutoTurnOver.Services.Dto
}
}
}
[JsonProperty("AdvertisingTransactionDetails")]
[JsonConverter(typeof(AdvertisingTransactionDetailsDataConverter))]
public List<AdvertisingTransactionDetailsDto> AdvertisingTransactionDetails { get; set; } = new List<AdvertisingTransactionDetailsDto> { };
public class AdvertisingTransactionDetailsDto
{
public string TransactionType { get; set; }
public string InvoiceId { get; set; }
public DateTime? PostedDate { get; set; }
public Amount BaseAmount { get; set; } = new Amount { };
public Amount TransactionAmount { get; set; } = new Amount { };
}
}
}
public class FeeDto
......@@ -255,8 +295,192 @@ namespace AutoTurnOver.Services.Dto
[JsonProperty(PropertyName = "@currency")]
public string Currency { get; set; }
[JsonProperty(PropertyName = "#text")]
public string Text { get; set; }
public decimal? Text { get; set; } = 0;
}
}
}
class OrderDataConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.OrderDto));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
{
return token.ToObject<List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.OrderDto>>();
}
if (token.Type == JTokenType.Object)
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.OrderDto> { token.ToObject<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.OrderDto>() };
}
else
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.OrderDto> { };
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
}
class RefundDataConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.RefundDto));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
{
return token.ToObject<List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.RefundDto>>();
}
if (token.Type == JTokenType.Object)
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.RefundDto> { token.ToObject<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.RefundDto>() };
}
else
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.RefundDto> { };
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
}
class AdvertisingTransactionDetailsDataConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.AdvertisingTransactionDetailsDto));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
{
return token.ToObject<List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.AdvertisingTransactionDetailsDto>>();
}
if (token.Type == JTokenType.Object)
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.AdvertisingTransactionDetailsDto> { token.ToObject<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.AdvertisingTransactionDetailsDto>() };
}
else
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.AdvertisingTransactionDetailsDto> { };
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
}
class ItemDataConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.OrderDto.FulfillmentDto.ItemDto));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
{
var test = token.ToString();
return token.ToObject<List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.OrderDto.FulfillmentDto.ItemDto>>();
}
if (token.Type == JTokenType.Object)
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.OrderDto.FulfillmentDto.ItemDto> { token.ToObject<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.OrderDto.FulfillmentDto.ItemDto>() };
}
else
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.OrderDto.FulfillmentDto.ItemDto> { };
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
}
class ItemFeeDataConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(ApiAmazonSettlementDto.AmazonEnvelopeDto.FeeDto));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
{
var test = token.ToString();
return token.ToObject<List<ApiAmazonSettlementDto.AmazonEnvelopeDto.FeeDto>>();
}
if (token.Type == JTokenType.Object)
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.FeeDto> { token.ToObject<ApiAmazonSettlementDto.AmazonEnvelopeDto.FeeDto > () };
}
else
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.FeeDto> { };
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
}
class AdjustedItemDataConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.RefundDto.FulfillmentDto.ItemDto));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
{
return token.ToObject<List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.RefundDto.FulfillmentDto.ItemDto>>();
}
if (token.Type == JTokenType.Object)
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.RefundDto.FulfillmentDto.ItemDto> { token.ToObject<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.RefundDto.FulfillmentDto.ItemDto>() };
}
else
{
return new List<ApiAmazonSettlementDto.AmazonEnvelopeDto.MessageDto.SettlementReportDto.RefundDto.FulfillmentDto.ItemDto> { };
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
}
}
......@@ -53,10 +53,10 @@ namespace ResetOutofstock
//dc_ana_deviation_dao.PushAnaTask();
//new AmazonDataSynchroService().SynchroFinancialEventGroups();
//new AmazonDataSynchroService().SynchroReportIds();
while (true)
{
new AmazonDataSynchroService().AnaReport();
}
//while (true)
//{
// new AmazonDataSynchroService().AnaReport();
//}
}
......
......@@ -613,27 +613,7 @@ namespace ResetOutofstock
});
Task.Factory.StartNew(() =>
{
while (true)
{
try
{
Console.WriteLine($"开始 拉取亚马逊费用流水,线程Id:{Thread.CurrentThread.ManagedThreadId},{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
new AmazonDataSynchroService().SynchroFee();
Console.WriteLine($"结束 拉取亚马逊费用流水,线程Id:{Thread.CurrentThread.ManagedThreadId},{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
Thread.Sleep(10 * 60 * 1000);
}
catch (Exception ex)
{
Console.WriteLine(" 拉取亚马逊费用流水:" + ex.Message);
Console.WriteLine(" 拉取亚马逊费用流水 :" + ex.StackTrace);
}
}
});
Task.Factory.StartNew(() =>
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment