Commit 5667dee2 by lizefeng

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

parent 44395003
...@@ -31,194 +31,194 @@ namespace AutoTurnOver.Services ...@@ -31,194 +31,194 @@ namespace AutoTurnOver.Services
{ {
public class AmazonDataSynchroService public class AmazonDataSynchroService
{ {
public void SynchroFee() //public void SynchroFee()
{ //{
// 拉取亚马逊账号 // // 拉取亚马逊账号
var amazonAccounts = ApiServices.GetAmazonAccountList(); // var amazonAccounts = ApiServices.GetAmazonAccountList();
foreach (var item in amazonAccounts) // foreach (var item in amazonAccounts)
{ // {
try // try
{ // {
if (item.AmznSpDevAccountObj != null && item.AmznSpTokenObj != null) // if (item.AmznSpDevAccountObj != null && item.AmznSpTokenObj != null)
{ // {
var task_name = $"SynchroAmazonFee_v1_{item.Id}"; // 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 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 // var new_task_synchro_log = new task_synchro_log
{ // {
create_date = DateTime.Now, // create_date = DateTime.Now,
end_time = DateTime.Now.AddMinutes(-3), // end_time = DateTime.Now.AddMinutes(-3),
status = 0, // status = 0,
task_name = task_name // task_name = task_name
}; // };
if (last_task_synchro_log != null) // if (last_task_synchro_log != null)
{ // {
new_task_synchro_log.start_time = last_task_synchro_log.end_time.AddMinutes(-1); // new_task_synchro_log.start_time = last_task_synchro_log.end_time.AddMinutes(-1);
} // }
else // else
{ // {
new_task_synchro_log.start_time = new DateTime(2023, 1, 1); // new_task_synchro_log.start_time = new DateTime(2023, 1, 1);
} // }
new_task_synchro_log.id = MyMySqlConnection._connection.Insert(new_task_synchro_log) ?? 0; // new_task_synchro_log.id = MyMySqlConnection._connection.Insert(new_task_synchro_log) ?? 0;
int count = 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 now = DateTime.Now;
var fees = GetFees(item, null, new_task_synchro_log.start_time, new_task_synchro_log.end_time); // var fees = GetFees(item, null, new_task_synchro_log.start_time, new_task_synchro_log.end_time);
var feesJson = fees.ToJson(); // var feesJson = fees.ToJson();
List<dc_base_amazon_fee> feeDatas = new List<dc_base_amazon_fee>(); // List<dc_base_amazon_fee> feeDatas = new List<dc_base_amazon_fee>();
foreach (var fee in fees) // foreach (var fee in fees)
{ // {
// 订单交易 // // 订单交易
if (fee.ShipmentEventList != null && fee.ShipmentEventList.Count >= 1) // if (fee.ShipmentEventList != null && fee.ShipmentEventList.Count >= 1)
{ // {
foreach (var shipmentEvent in fee.ShipmentEventList) // foreach (var shipmentEvent in fee.ShipmentEventList)
{ // {
foreach (var shipmentItem in shipmentEvent.ShipmentItemList) // foreach (var shipmentItem in shipmentEvent.ShipmentItemList)
{ // {
feeDatas.Add(ApiDataMapDbData(item.Account, shipmentEvent, shipmentItem, "order")); // feeDatas.Add(ApiDataMapDbData(item.Account, shipmentEvent, shipmentItem, "order"));
} // }
} // }
} // }
// 退款 // // 退款
if (fee.RefundEventList != null && fee.RefundEventList.Count >= 1) // if (fee.RefundEventList != null && fee.RefundEventList.Count >= 1)
{ // {
foreach (var refundEventList in fee.RefundEventList) // foreach (var refundEventList in fee.RefundEventList)
{ // {
foreach (var shipmentItemAdjustmentList in refundEventList.ShipmentItemAdjustmentList) // foreach (var shipmentItemAdjustmentList in refundEventList.ShipmentItemAdjustmentList)
{ // {
feeDatas.Add(ApiDataMapDbData(item.Account, refundEventList, shipmentItemAdjustmentList, "refund")); // feeDatas.Add(ApiDataMapDbData(item.Account, refundEventList, shipmentItemAdjustmentList, "refund"));
} // }
} // }
} // }
// 服务费 (该费用没有实际时间,如果抓取时间跟当前时间相差不超过24小时,则以当前时间为准,否则跳过该费用) // // 服务费 (该费用没有实际时间,如果抓取时间跟当前时间相差不超过24小时,则以当前时间为准,否则跳过该费用)
if ((DateTime.Now - new_task_synchro_log.start_time).TotalHours <= 24) // if ((DateTime.Now - new_task_synchro_log.start_time).TotalHours <= 24)
{ // {
if (fee.ServiceFeeEventList != null && fee.ServiceFeeEventList.Count >= 1) // if (fee.ServiceFeeEventList != null && fee.ServiceFeeEventList.Count >= 1)
{ // {
foreach (var serviceFeeEvent in fee.ServiceFeeEventList) // foreach (var serviceFeeEvent in fee.ServiceFeeEventList)
{ // {
foreach (var serviceFeeEventFeeItem in serviceFeeEvent.FeeList) // foreach (var serviceFeeEventFeeItem in serviceFeeEvent.FeeList)
{ // {
if (serviceFeeEventFeeItem.FeeAmount != null && serviceFeeEventFeeItem.FeeAmount.CurrencyAmount != 0) // if (serviceFeeEventFeeItem.FeeAmount != null && serviceFeeEventFeeItem.FeeAmount.CurrencyAmount != 0)
{ // {
dc_base_amazon_fee serviceFeeEventFee = new dc_base_amazon_fee // dc_base_amazon_fee serviceFeeEventFee = new dc_base_amazon_fee
{ // {
account = item.Account, // account = item.Account,
date = new_task_synchro_log.start_time.AddHours(-8), // 没有时间,用当前时间代替 // date = new_task_synchro_log.start_time.AddHours(-8), // 没有时间,用当前时间代替
AmazonOrderId = serviceFeeEvent.AmazonOrderId, // AmazonOrderId = serviceFeeEvent.AmazonOrderId,
description = serviceFeeEventFeeItem.FeeType, // description = serviceFeeEventFeeItem.FeeType,
type = "Service Fee", // type = "Service Fee",
total = (decimal)serviceFeeEventFeeItem.FeeAmount.CurrencyAmount, // total = (decimal)serviceFeeEventFeeItem.FeeAmount.CurrencyAmount,
other = (decimal)serviceFeeEventFeeItem.FeeAmount.CurrencyAmount, // other = (decimal)serviceFeeEventFeeItem.FeeAmount.CurrencyAmount,
currency_code = serviceFeeEventFeeItem.FeeAmount.CurrencyCode // 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}"; // 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); // feeDatas.Add(serviceFeeEventFee);
} // }
} // }
} // }
} // }
} // }
// 广告费 // // 广告费
if (fee.ProductAdsPaymentEventList != null && fee.ProductAdsPaymentEventList.Count >= 1) // if (fee.ProductAdsPaymentEventList != null && fee.ProductAdsPaymentEventList.Count >= 1)
{ // {
foreach (var productAdsPayment in fee.ProductAdsPaymentEventList) // foreach (var productAdsPayment in fee.ProductAdsPaymentEventList)
{ // {
dc_base_amazon_fee productAdsPaymentFee = new dc_base_amazon_fee // dc_base_amazon_fee productAdsPaymentFee = new dc_base_amazon_fee
{ // {
account = item.Account, // account = item.Account,
date = productAdsPayment.PostedDate == null ? new DateTime(1991, 1, 1) : productAdsPayment.PostedDate.Value, // date = productAdsPayment.PostedDate == null ? new DateTime(1991, 1, 1) : productAdsPayment.PostedDate.Value,
AmazonOrderId = productAdsPayment.InvoiceId, // AmazonOrderId = productAdsPayment.InvoiceId,
description = "Cost of Advertising", // description = "Cost of Advertising",
type = "Service Fee", // type = "Service Fee",
total = (decimal)productAdsPayment.TransactionValue.CurrencyAmount, // total = (decimal)productAdsPayment.TransactionValue.CurrencyAmount,
other = 0, // other = 0,
currency_code = productAdsPayment.TransactionValue.CurrencyCode // 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}"; // 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); // feeDatas.Add(productAdsPaymentFee);
} // }
} // }
// 客户退款 // // 客户退款
if (fee.AdjustmentEventList != null && fee.AdjustmentEventList.Count >= 1) // if (fee.AdjustmentEventList != null && fee.AdjustmentEventList.Count >= 1)
{ // {
// 客户退款 // // 客户退款
foreach (var customerReturn in fee.AdjustmentEventList.Where(s => s.AdjustmentType == "REVERSAL_REIMBURSEMENT")) // foreach (var customerReturn in fee.AdjustmentEventList.Where(s => s.AdjustmentType == "REVERSAL_REIMBURSEMENT"))
{ // {
foreach (var customerReturnItem in customerReturn.AdjustmentItemList) // foreach (var customerReturnItem in customerReturn.AdjustmentItemList)
{ // {
dc_base_amazon_fee customerReturnFee = new dc_base_amazon_fee // dc_base_amazon_fee customerReturnFee = new dc_base_amazon_fee
{ // {
account = item.Account, // account = item.Account,
date = customerReturn.PostedDate == null ? new DateTime(1991, 1, 1) : customerReturn.PostedDate.Value, // date = customerReturn.PostedDate == null ? new DateTime(1991, 1, 1) : customerReturn.PostedDate.Value,
description = "FBA Inventory Reimbursement - Customer Return", // description = "FBA Inventory Reimbursement - Customer Return",
type = "Ajustement", // type = "Ajustement",
total = (decimal)customerReturnItem.TotalAmount.CurrencyAmount, // total = (decimal)customerReturnItem.TotalAmount.CurrencyAmount,
other = 0, // other = 0,
sku = customerReturnItem.SellerSKU, // sku = customerReturnItem.SellerSKU,
currency_code = customerReturnItem.TotalAmount.CurrencyCode // 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}"; // 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); // feeDatas.Add(customerReturnFee);
} // }
} // }
} // }
} // }
foreach (var feeItem in feeDatas) // 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; // 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) // if (feeItem.id > 0)
{ // {
MyMySqlConnection._connection.Update(feeItem); // MyMySqlConnection._connection.Update(feeItem);
} // }
else // else
{ // {
MyMySqlConnection._connection.Insert(feeItem); // MyMySqlConnection._connection.Insert(feeItem);
} // }
} // }
new_task_synchro_log.count = count; // new_task_synchro_log.count = count;
new_task_synchro_log.status = 1; // new_task_synchro_log.status = 1;
MyMySqlConnection._connection.Update(new_task_synchro_log); // MyMySqlConnection._connection.Update(new_task_synchro_log);
} // }
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
MyMySqlConnection._connection.Insert(new dc_task_error_log // MyMySqlConnection._connection.Insert(new dc_task_error_log
{ // {
date = DateTime.Now, // date = DateTime.Now,
message = ex.Message, // message = ex.Message,
stack_trace = ex.StackTrace, // stack_trace = ex.StackTrace,
task_name = "SynchroAmazonFee_" + item.Id // task_name = "SynchroAmazonFee_" + item.Id
}); // });
//throw; // //throw;
} // }
} // }
} //}
public void SynchroFinancialEventGroups() public void SynchroFinancialEventGroups()
{ {
// 拉取亚马逊账号 // 拉取亚马逊账号
...@@ -231,7 +231,7 @@ namespace AutoTurnOver.Services ...@@ -231,7 +231,7 @@ namespace AutoTurnOver.Services
if (item.AmznSpDevAccountObj != null && item.AmznSpTokenObj != null) 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 }); 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 ...@@ -255,7 +255,7 @@ namespace AutoTurnOver.Services
new_task_synchro_log.id = MyMySqlConnection._connection.Insert(new_task_synchro_log) ?? 0; new_task_synchro_log.id = MyMySqlConnection._connection.Insert(new_task_synchro_log) ?? 0;
int count = 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 now = DateTime.Now;
var fees = GetFinancialEventGroups(item, new_task_synchro_log.start_time, new_task_synchro_log.end_time); var fees = GetFinancialEventGroups(item, new_task_synchro_log.start_time, new_task_synchro_log.end_time);
...@@ -270,7 +270,7 @@ namespace AutoTurnOver.Services ...@@ -270,7 +270,7 @@ namespace AutoTurnOver.Services
SellerOrderId = feeItem.TraceId, SellerOrderId = feeItem.TraceId,
description = $"To account ending in: {feeItem.AccountTail}", description = $"To account ending in: {feeItem.AccountTail}",
type = "Transfer", // 提现 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 currency_code = feeItem.OriginalTotal.CurrencyCode
}; };
transferFee.other = transferFee.total; transferFee.other = transferFee.total;
...@@ -318,18 +318,18 @@ namespace AutoTurnOver.Services ...@@ -318,18 +318,18 @@ namespace AutoTurnOver.Services
{ {
// 拉取亚马逊账号 // 拉取亚马逊账号
var amazonAccounts = ApiServices.GetAmazonAccountList(); 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) foreach (var itemV in amazonAccounts)
{ {
try try
{ {
if (itemV.AmznSpDevAccountObj != null && itemV.AmznSpTokenObj != null && itemV.MarketPlaceObj!=null) if (itemV.AmznSpDevAccountObj != null && itemV.AmznSpTokenObj != null && itemV.MarketPlaceObj != null)
{ {
// 由于token1小时刷新一次,所以个账号要重新从账号系统拉取token // 由于token1小时刷新一次,所以个账号要重新从账号系统拉取token
var item = ApiServices.GetAmazonAccountList().FirstOrDefault(s => s.Id == itemV.Id); var item = ApiServices.GetAmazonAccountList().FirstOrDefault(s => s.Id == itemV.Id);
var reportTypeEnum = ReportTypes.GET_V2_SETTLEMENT_REPORT_DATA_XML; 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 }); 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 ...@@ -343,8 +343,8 @@ namespace AutoTurnOver.Services
if (last_task_synchro_log != null) if (last_task_synchro_log != null)
{ {
// 由于是拉报告,没必要太频繁,如果24小时之内拉过的,就先跳过 // 由于是拉报告,没必要太频繁,如果3小时之内拉过的,就先跳过
if ((DateTime.Now - last_task_synchro_log.end_time).TotalHours <3) if ((DateTime.Now - last_task_synchro_log.end_time).TotalHours < 3)
{ {
continue; continue;
} }
...@@ -359,7 +359,9 @@ namespace AutoTurnOver.Services ...@@ -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) foreach (var reportsItem in reports)
{ {
var reportsDb = new dc_base_amazon_fee_report_log var reportsDb = new dc_base_amazon_fee_report_log
...@@ -375,20 +377,21 @@ namespace AutoTurnOver.Services ...@@ -375,20 +377,21 @@ namespace AutoTurnOver.Services
report_par_json = reportsItem.ToJson(), report_par_json = reportsItem.ToJson(),
btime = reportsItem.DataStartTime, btime = reportsItem.DataStartTime,
etime = reportsItem.DataEndTime, 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, pams_account_id = reportsDb.pams_account_id,
report_id = reportsDb.report_id report_id = reportsDb.report_id
}) ??0; }) ?? 0;
if (reportsDb.id <= 0) if (reportsDb.id <= 0)
{ {
MyMySqlConnection._connection.Insert(reportsDb); MyMySqlConnection._connection.Insert(reportsDb);
} }
} }
new_task_synchro_log.count = 0; new_task_synchro_log.count = 0;
...@@ -416,16 +419,20 @@ namespace AutoTurnOver.Services ...@@ -416,16 +419,20 @@ namespace AutoTurnOver.Services
/// </summary> /// </summary>
public void AnaReport() 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) if (ana_task == null)
{ {
return ; return;
} }
try try
{ {
var pamsAccount = ApiServices.GetAmazonAccountList().FirstOrDefault(s => s.Id == ana_task.pams_account_id); var pamsAccount = ApiServices.GetAmazonAccountList().FirstOrDefault(s => s.Id == ana_task.pams_account_id);
var filePath = DownloadReport(pamsAccount, ana_task.report_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)) using (StreamReader sr = new StreamReader(filePath))
{ {
response_str.AppendLine(sr.ReadToEnd()); response_str.AppendLine(sr.ReadToEnd());
...@@ -437,7 +444,84 @@ namespace AutoTurnOver.Services ...@@ -437,7 +444,84 @@ namespace AutoTurnOver.Services
ana_task.content = jsonText; ana_task.content = jsonText;
//序列化 //序列化
var settlementData = MapSettlement(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 = ""; ana_task.ana_error = "";
...@@ -458,97 +542,228 @@ namespace AutoTurnOver.Services ...@@ -458,97 +542,228 @@ namespace AutoTurnOver.Services
{ {
return json.ToObj<ApiAmazonSettlementDto>(); 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 fbaFeeTypeList = new List<string> { "FBAPerOrderFulfillmentFee", "FBAPerUnitFulfillmentFee", "FBAWeightBasedFee" };
var sellingFeesList = new List<string> { "Commission", "RefundCommission" }; var sellingFeesList = new List<string> { "Commission", "RefundCommission" };
dc_base_amazon_fee feeShipmentEvent = new dc_base_amazon_fee { }; foreach (var item in xmlSettlementOrderData.Fulfillment.Item)
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")
{ {
if (shipmentItem.ItemFeeAdjustmentList != null && shipmentItem.ItemFeeAdjustmentList.Count >= 1) dc_base_amazon_fee feeShipmentEvent = new dc_base_amazon_fee { };
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)
{
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.currency_code = item.ItemPrice.Component.FirstOrDefault()?.Amount.Currency;
feeShipmentEvent.selling_fees = (decimal)shipmentItem.ItemFeeAdjustmentList.Where(s => sellingFeesList.Any(f1 => s.FeeType.Equals(f1, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.FeeAmount.CurrencyAmount); 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.promotional_rebates = feeShipmentEvent.postage_credits;
feeShipmentEvent.shipping_credits_tax = (decimal)shipmentItem.ItemChargeAdjustmentList.Where(s => s.ChargeType.Equals("ShippingTax", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount); feeShipmentEvent.promotional_rebates_tax = feeShipmentEvent.shipping_credits_tax;
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.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);
} }
else return datas;
}
/// <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)
{
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)
{ {
if (shipmentItem.ItemFeeList != null && shipmentItem.ItemFeeList.Count >= 1) dc_base_amazon_fee feeShipmentEvent = new dc_base_amazon_fee { };
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.fba_fees = (decimal)shipmentItem.ItemFeeList.Where(s => fbaFeeTypeList.Any(f1 => f1.Equals(s.FeeType, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.FeeAmount.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 = (decimal)shipmentItem.ItemFeeList.Where(s => sellingFeesList.Any(f1 => s.FeeType.Equals(f1, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.FeeAmount.CurrencyAmount); feeShipmentEvent.selling_fees = itemFeeAdjustment.ItemFeeAdjustments.Fee.Where(s => sellingFeesList.Any(f1 => s.Type.Equals(f1, StringComparison.InvariantCultureIgnoreCase))).Sum(s => s.Amount.Text ?? 0);
} }
feeShipmentEvent.currency_code = shipmentItem.ItemChargeList.FirstOrDefault()?.ChargeAmount.CurrencyCode;
if (shipmentItem.ItemTaxWithheldList != null && shipmentItem.ItemTaxWithheldList.Count >= 1)
if (itemFeeAdjustment.ItemPriceAdjustments.Component != null && itemFeeAdjustment.ItemPriceAdjustments.Component.Count >= 1)
{ {
feeShipmentEvent.tax_collection_model = shipmentItem.ItemTaxWithheldList?.FirstOrDefault()?.TaxCollectionModel; feeShipmentEvent.currency_code = itemFeeAdjustment.ItemPriceAdjustments.Component.FirstOrDefault()?.Amount.Currency;
feeShipmentEvent.marketplace_withheld_tax = (decimal)shipmentItem.ItemTaxWithheldList?.Sum(s => s.TaxesWithheld.Sum(s1 => s1.ChargeAmount.CurrencyAmount)); 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"));
}
}
} }
if (shipmentItem.ItemChargeList != null && shipmentItem.ItemChargeList.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.gift_wrap_credits = (decimal)shipmentItem.ItemChargeList.Where(s => s.ChargeType.Equals("GiftWrap", StringComparison.InvariantCultureIgnoreCase)).Sum(s => s.ChargeAmount.CurrencyAmount); feeShipmentEvent.quantity = (itemFeeAdjustment.Quantity ?? 0).ToString();
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.promotional_rebates = 0;
feeShipmentEvent.promotional_rebates_tax = 0;
feeShipmentEvent.other_transaction_fees = 0;
feeShipmentEvent.other = 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 +
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);
} }
feeShipmentEvent.quantity = (shipmentItem.QuantityShipped ?? 0).ToString(); return datas;
feeShipmentEvent.promotional_rebates = 0;
feeShipmentEvent.promotional_rebates_tax = 0;
feeShipmentEvent.other_transaction_fees = 0;
feeShipmentEvent.other = 0;
if (shipmentItem.PromotionList != null && shipmentItem.PromotionList.Any(s => s.PromotionAmount.CurrencyAmount != 0)) }
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.promotional_rebates = feeShipmentEvent.postage_credits; feeShipmentEvent.type = fbaTypeDic[type];
feeShipmentEvent.promotional_rebates_tax = feeShipmentEvent.shipping_credits_tax;
} }
feeShipmentEvent.total = feeShipmentEvent.data_id = $"{account.Account}_OtherTransaction_{feeShipmentEvent.AmazonOrderId}_{ feeShipmentEvent.description}_{feeShipmentEvent.settlement_id}";
feeShipmentEvent.product_sales + feeShipmentEvent.date = postedDate == null ? new DateTime(1991, 1, 1) : postedDate.Value;
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;
return feeShipmentEvent; return feeShipmentEvent;
} }
/// <summary> /// <summary>
/// 获取费用列表 /// 获取费用列表
/// </summary> /// </summary>
...@@ -599,7 +814,7 @@ namespace AutoTurnOver.Services ...@@ -599,7 +814,7 @@ namespace AutoTurnOver.Services
/// <param name="etime"></param> /// <param name="etime"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="Exception"></exception> /// <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); AmazonConnection amazonConnection = MapAmazonConnection(account);
var parameters = new ParameterReportList(); var parameters = new ParameterReportList();
...@@ -613,7 +828,7 @@ namespace AutoTurnOver.Services ...@@ -613,7 +828,7 @@ namespace AutoTurnOver.Services
var reports = amazonConnection.Reports.GetReports(parameters); var reports = amazonConnection.Reports.GetReports(parameters);
return reports; return reports;
} }
public IList<FinancialEventGroup> GetFinancialEventGroups(AmazonAccountDto account, DateTime btime, DateTime etime) public IList<FinancialEventGroup> GetFinancialEventGroups(AmazonAccountDto account, DateTime btime, DateTime etime)
{ {
AmazonConnection amazonConnection = MapAmazonConnection(account); AmazonConnection amazonConnection = MapAmazonConnection(account);
...@@ -621,7 +836,7 @@ namespace AutoTurnOver.Services ...@@ -621,7 +836,7 @@ namespace AutoTurnOver.Services
var parameters = new ParameterListFinancialEventGroup(); var parameters = new ParameterListFinancialEventGroup();
parameters.FinancialEventGroupStartedAfter = btime; parameters.FinancialEventGroupStartedAfter = btime;
parameters.FinancialEventGroupStartedBefore = etime; parameters.FinancialEventGroupStartedBefore = etime;
parameters.MaxResultsPerPage=100; parameters.MaxResultsPerPage = 100;
var reports = amazonConnection.Financial.ListFinancialEventGroups(parameters); var reports = amazonConnection.Financial.ListFinancialEventGroups(parameters);
return reports; return reports;
} }
...@@ -641,15 +856,15 @@ namespace AutoTurnOver.Services ...@@ -641,15 +856,15 @@ namespace AutoTurnOver.Services
//Thread.Sleep(1000 * 60); //Thread.Sleep(1000 * 60);
AmazonConnection amazonConnection = MapAmazonConnection(account); AmazonConnection amazonConnection = MapAmazonConnection(account);
var parameters = new ParameterCreateReportSpecification(); var parameters = new ParameterCreateReportSpecification();
parameters.reportType = reportType; parameters.reportType = reportType;
parameters.dataStartTime = btime; parameters.dataStartTime = btime;
parameters.dataEndTime = etime; parameters.dataEndTime = etime;
parameters.marketplaceIds = new MarketplaceIds(); parameters.marketplaceIds = new MarketplaceIds();
parameters.marketplaceIds.Add(account.MarketPlaceObj.multiMwsMid); parameters.marketplaceIds.Add(account.MarketPlaceObj.multiMwsMid);
parameters.reportOptions = new parameters.reportOptions = new
ReportOptions() { }; ReportOptions()
{ };
var reportId = amazonConnection.Reports.CreateReport(parameters); var reportId = amazonConnection.Reports.CreateReport(parameters);
......
using FikaAmazonAPI.AmazonSpApiSDK.Models.Finances; using FikaAmazonAPI.AmazonSpApiSDK.Models.Finances;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.Serialization; using System.Runtime.Serialization;
...@@ -149,7 +150,7 @@ namespace AutoTurnOver.Services.Dto ...@@ -149,7 +150,7 @@ namespace AutoTurnOver.Services.Dto
public DateTime? DepositDate { get; set; } public DateTime? DepositDate { get; set; }
} }
public List<OtherTransactionDto> OtherTransaction { get; set; } public List<OtherTransactionDto> OtherTransaction { get; set; } = new List<OtherTransactionDto> { };
public class OtherTransactionDto public class OtherTransactionDto
{ {
...@@ -158,9 +159,17 @@ namespace AutoTurnOver.Services.Dto ...@@ -158,9 +159,17 @@ namespace AutoTurnOver.Services.Dto
public string TransactionType { get; set; } public string TransactionType { get; set; }
public DateTime? PostedDate { get; set; } public DateTime? PostedDate { get; set; }
public Amount Amount { 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 public class OrderDto
{ {
...@@ -173,20 +182,29 @@ namespace AutoTurnOver.Services.Dto ...@@ -173,20 +182,29 @@ namespace AutoTurnOver.Services.Dto
{ {
public string MerchantFulfillmentID { get; set; } public string MerchantFulfillmentID { get; set; }
public DateTime? PostedDate { 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 class ItemDto
{ {
public string AmazonOrderItemCode { get; set; } public string AmazonOrderItemCode { get; set; }
public string SKU { get; set; } public string SKU { get; set; }
public int? Quantity { get; set; } public int? Quantity { get; set; }
public ItemPriceDto ItemPrice { get; set; } public ItemPriceDto ItemPrice { get; set; } = new ItemPriceDto { };
public ItemFeesDto ItemFees { get; set; } public ItemFeesDto ItemFees { get; set; } = new ItemFeesDto { };
public class ItemPriceDto public class ItemPriceDto
{ {
[JsonProperty("Component")]
[JsonConverter(typeof(ItemFeeDataConverter))]
public List<FeeDto> Component { get; set; } public List<FeeDto> Component { get; set; }
} }
public class ItemFeesDto public class ItemFeesDto
{ {
[JsonProperty("Fee")]
[JsonConverter(typeof(ItemFeeDataConverter))]
public List<FeeDto> Fee { get; set; } public List<FeeDto> Fee { get; set; }
} }
...@@ -202,7 +220,9 @@ namespace AutoTurnOver.Services.Dto ...@@ -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 public class RefundDto
{ {
...@@ -215,20 +235,27 @@ namespace AutoTurnOver.Services.Dto ...@@ -215,20 +235,27 @@ namespace AutoTurnOver.Services.Dto
{ {
public string MerchantFulfillmentID { get; set; } public string MerchantFulfillmentID { get; set; }
public DateTime? PostedDate { 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 class ItemDto
{ {
public string AmazonOrderItemCode { get; set; } public string AmazonOrderItemCode { get; set; }
public string SKU { get; set; } public string SKU { get; set; }
public int? Quantity { get; set; } public int? Quantity { get; set; }
public ItemPriceDto ItemPriceAdjustments { get; set; } public ItemPriceDto ItemPriceAdjustments { get; set; } = new ItemPriceDto { };
public ItemFeesDto ItemFeeAdjustments { get; set; } public ItemFeesDto ItemFeeAdjustments { get; set; } = new ItemFeesDto { };
public class ItemPriceDto public class ItemPriceDto
{ {
[JsonProperty("Component")]
[JsonConverter(typeof(ItemFeeDataConverter))]
public List<FeeDto> Component { get; set; } public List<FeeDto> Component { get; set; }
} }
public class ItemFeesDto public class ItemFeesDto
{ {
[JsonProperty("Fee")]
[JsonConverter(typeof(ItemFeeDataConverter))]
public List<FeeDto> Fee { get; set; } public List<FeeDto> Fee { get; set; }
} }
...@@ -243,6 +270,19 @@ namespace AutoTurnOver.Services.Dto ...@@ -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 public class FeeDto
...@@ -255,8 +295,192 @@ namespace AutoTurnOver.Services.Dto ...@@ -255,8 +295,192 @@ namespace AutoTurnOver.Services.Dto
[JsonProperty(PropertyName = "@currency")] [JsonProperty(PropertyName = "@currency")]
public string Currency { get; set; } public string Currency { get; set; }
[JsonProperty(PropertyName = "#text")] [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 ...@@ -53,10 +53,10 @@ namespace ResetOutofstock
//dc_ana_deviation_dao.PushAnaTask(); //dc_ana_deviation_dao.PushAnaTask();
//new AmazonDataSynchroService().SynchroFinancialEventGroups(); //new AmazonDataSynchroService().SynchroFinancialEventGroups();
//new AmazonDataSynchroService().SynchroReportIds(); //new AmazonDataSynchroService().SynchroReportIds();
while (true) //while (true)
{ //{
new AmazonDataSynchroService().AnaReport(); // new AmazonDataSynchroService().AnaReport();
} //}
} }
......
...@@ -613,27 +613,7 @@ namespace ResetOutofstock ...@@ -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(() => 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