|
|
@ -14,6 +14,7 @@ using Microsoft.AspNetCore.Http; |
|
|
|
using Microsoft.AspNetCore.Mvc; |
|
|
|
using Microsoft.Extensions.Logging; |
|
|
|
using Microsoft.Extensions.Options; |
|
|
|
using Omu.ValueInjecter; |
|
|
|
using Polly; |
|
|
|
using SettleAccount.Domain.BQ; |
|
|
|
using Shouldly; |
|
|
@ -126,19 +127,128 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
/// </summary>
|
|
|
|
private async Task SubmitToQadSingle(string invbillNum) |
|
|
|
{ |
|
|
|
|
|
|
|
var invoiceGrp = _settleAccountDbContext.Set<INVOICE_GRP>() |
|
|
|
.Where(t => t.InvbillNum == invbillNum) |
|
|
|
.Where(t => t.State == SettleBillState.已扣减) |
|
|
|
.FirstOrDefault(); |
|
|
|
|
|
|
|
if (invoiceGrp.BusinessType == EnumBusinessType.JisBBAC) |
|
|
|
{ |
|
|
|
|
|
|
|
var _detail = await _bbacMng.GetDetailAsync(invbillNum, EnumBusinessType.MaiDanJianBBAC).ConfigureAwait(false);//查出买单数量
|
|
|
|
var invoiceGrpDetails = _settleAccountDbContext.Set<INVOICE_WAIT_DETAIL>() |
|
|
|
.Where(t => t.InvbillNum == invbillNum) |
|
|
|
.ToList(); |
|
|
|
if (invoiceGrpDetails.Any()) |
|
|
|
{ |
|
|
|
var tedSaInvs = new List<TED_SAS_INVOICE>(); |
|
|
|
var taskId = GuidGenerator.Create(); |
|
|
|
var teaTaskSub = new TEA_TASK_SUB() |
|
|
|
{ |
|
|
|
GUID = taskId, |
|
|
|
TaskState = 0, |
|
|
|
TaskID = taskId, |
|
|
|
TableName = "TED_SAS_INVOICE", |
|
|
|
Creator = "SAS", |
|
|
|
Subscriber = "QAD", |
|
|
|
Domain = "BJBMPT", |
|
|
|
Site = "BJ02", |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
UpdateTime = DateTime.Now, |
|
|
|
}; |
|
|
|
List<INVOICE_WAIT_DETAIL> invdetials = new List<INVOICE_WAIT_DETAIL>(); |
|
|
|
foreach (var itm in invoiceGrpDetails) |
|
|
|
{ |
|
|
|
invdetials.Add(itm);//添加发票明细
|
|
|
|
|
|
|
|
|
|
|
|
var first = _detail.FirstOrDefault(p => p.ContractDocID == itm.Extend1 && p.PartCode == itm.PartCode ); |
|
|
|
if (first == null) |
|
|
|
{ |
|
|
|
continue; |
|
|
|
} |
|
|
|
itm.Qty = itm.Qty - first.Qty;//发票总数中去除
|
|
|
|
itm.Amt = Math.Round(itm.Qty * itm.PRICE, 2); |
|
|
|
var inv = new INVOICE_WAIT_DETAIL();//添加买单件
|
|
|
|
inv.InjectFrom(itm); |
|
|
|
inv.Qty= first.Qty; |
|
|
|
inv.Amt = Math.Round(first.Qty * itm.PRICE, 2); |
|
|
|
inv.BussiessType = EnumBusinessType.MaiDanJianBBAC; |
|
|
|
if (invoiceGrp.Site == "1046") |
|
|
|
{ |
|
|
|
inv.SetProperty("ErpToLoc", "CC16"); |
|
|
|
} |
|
|
|
if (invoiceGrp.Site == "1040") |
|
|
|
{ |
|
|
|
inv.SetProperty("ErpToLoc", "CC11"); |
|
|
|
} |
|
|
|
invdetials.Add(inv); |
|
|
|
|
|
|
|
if (invoiceGrp == null) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < invdetials.Count; i++) |
|
|
|
{ |
|
|
|
return; |
|
|
|
var invoiceGrpDetail = invdetials[i]; |
|
|
|
|
|
|
|
tedSaInvs.Add(new TED_SAS_INVOICE() |
|
|
|
{ |
|
|
|
GUID = GuidGenerator.Create(), |
|
|
|
Dataid = GuidGenerator.Create(), |
|
|
|
Taskid = taskId, |
|
|
|
invoiceNumber = invoiceGrp.RealnvBillNum, |
|
|
|
sasInvoiceNumber = invoiceGrp.InvbillNum, |
|
|
|
Customer = invoiceGrp.ClientCode, |
|
|
|
BillTo = invoiceGrp.ClientCode, |
|
|
|
InvoiceDate = invoiceGrp.CreationTime, |
|
|
|
Site = "BJ02", |
|
|
|
PartNumber = invoiceGrpDetail.PartCode, |
|
|
|
InvoiceQuatity = invoiceGrpDetail.Qty, |
|
|
|
Price = invoiceGrpDetail.PRICE, |
|
|
|
InvoiceNetAmount = invoiceGrpDetail.Amt, |
|
|
|
InvoiceTaxAmount = Math.Round(invoiceGrpDetail.Amt * 0.13m, 2), |
|
|
|
TaxRate = 0.13m, |
|
|
|
Location = invoiceGrp.GetProperty("ErpToLoc", string.Empty), |
|
|
|
begintime = invoiceGrpDetail.BeginDate, |
|
|
|
endtime = invoiceGrpDetail.EndDate, |
|
|
|
domain = "BJBMPT", |
|
|
|
LINE = (i + 1).ToString() |
|
|
|
}); |
|
|
|
} |
|
|
|
tedSaInvs.FirstOrDefault().InvoiceTaxAmount += invoiceGrp.TaxDiff; |
|
|
|
//红冲发票提交QAD
|
|
|
|
if (!string.IsNullOrEmpty(invoiceGrp.ParentInvbillNum)) |
|
|
|
{ |
|
|
|
await SubmitToQadHongChongAsync(invoiceGrp.ParentInvbillNum).ConfigureAwait(false); |
|
|
|
} |
|
|
|
|
|
|
|
await _exChangeCenterDbContext.Set<TEA_TASK_SUB>().AddAsync(teaTaskSub).ConfigureAwait(false); |
|
|
|
await _exChangeCenterDbContext.Set<TED_SAS_INVOICE>().AddRangeAsync(tedSaInvs).ConfigureAwait(false); |
|
|
|
invoiceGrp.State = SettleBillState.已提交QAD; |
|
|
|
//构建发票同步Qad状态表数据
|
|
|
|
await BindInvoiceSyncQadAsync(teaTaskSub, invoiceGrp.RealnvBillNum, invoiceGrp.InvbillNum, invoiceGrp.ClientCode).ConfigureAwait(false); |
|
|
|
|
|
|
|
await _exChangeCenterDbContext.SaveChangesAsync().ConfigureAwait(false); |
|
|
|
var retryPolicyAsync = Policy.Handle<Exception>().WaitAndRetryAsync(new[] { |
|
|
|
TimeSpan.FromSeconds(1), |
|
|
|
TimeSpan.FromSeconds(5), |
|
|
|
TimeSpan.FromSeconds(5), |
|
|
|
TimeSpan.FromSeconds(5) |
|
|
|
}, (exception, timeSpan, retryCount, context) => |
|
|
|
{ |
|
|
|
_logger.LogError($"提交到QAD,修改发票状态执行失败,第 {retryCount} 次重试"); |
|
|
|
}); |
|
|
|
await retryPolicyAsync.ExecuteAsync(async () => await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false)).ConfigureAwait(false); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
var invoiceGrpDetails = _settleAccountDbContext.Set<INVOICE_WAIT_DETAIL>() |
|
|
|
.Where(t => t.InvbillNum == invbillNum) |
|
|
|
.ToList(); |
|
|
@ -159,9 +269,16 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
UpdateTime = DateTime.Now, |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < invoiceGrpDetails.Count; i++) |
|
|
|
{ |
|
|
|
var invoiceGrpDetail = invoiceGrpDetails[i]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tedSaInvs.Add(new TED_SAS_INVOICE() |
|
|
|
{ |
|
|
|
GUID = GuidGenerator.Create(), |
|
|
@ -179,7 +296,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
InvoiceNetAmount = invoiceGrpDetail.Amt, |
|
|
|
InvoiceTaxAmount = Math.Round(invoiceGrpDetail.Amt * 0.13m, 2), |
|
|
|
TaxRate = 0.13m, |
|
|
|
Location = invoiceGrp.GetProperty("ErpToLoc",string.Empty), |
|
|
|
Location = invoiceGrp.GetProperty("ErpToLoc", string.Empty), |
|
|
|
begintime = invoiceGrpDetail.BeginDate, |
|
|
|
endtime = invoiceGrpDetail.EndDate, |
|
|
|
domain = "BJBMPT", |
|
|
@ -211,6 +328,98 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
}); |
|
|
|
await retryPolicyAsync.ExecuteAsync(async () => await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false)).ConfigureAwait(false); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//if (invoiceGrp == null)
|
|
|
|
//{
|
|
|
|
// return;
|
|
|
|
//}
|
|
|
|
//var invoiceGrpDetails = _settleAccountDbContext.Set<INVOICE_WAIT_DETAIL>()
|
|
|
|
// .Where(t => t.InvbillNum == invbillNum)
|
|
|
|
// .ToList();
|
|
|
|
//if (invoiceGrpDetails.Any())
|
|
|
|
//{
|
|
|
|
// var tedSaInvs = new List<TED_SAS_INVOICE>();
|
|
|
|
// var taskId = GuidGenerator.Create();
|
|
|
|
// var teaTaskSub = new TEA_TASK_SUB()
|
|
|
|
// {
|
|
|
|
// GUID = taskId,
|
|
|
|
// TaskState = 0,
|
|
|
|
// TaskID = taskId,
|
|
|
|
// TableName = "TED_SAS_INVOICE",
|
|
|
|
// Creator = "SAS",
|
|
|
|
// Subscriber = "QAD",
|
|
|
|
// Domain = "BJBMPT",
|
|
|
|
// Site = "BJ02",
|
|
|
|
// CreateTime = DateTime.Now,
|
|
|
|
// UpdateTime = DateTime.Now,
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// for (var i = 0; i < invoiceGrpDetails.Count; i++)
|
|
|
|
// {
|
|
|
|
// var invoiceGrpDetail = invoiceGrpDetails[i];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// tedSaInvs.Add(new TED_SAS_INVOICE()
|
|
|
|
// {
|
|
|
|
// GUID = GuidGenerator.Create(),
|
|
|
|
// Dataid = GuidGenerator.Create(),
|
|
|
|
// Taskid = taskId,
|
|
|
|
// invoiceNumber = invoiceGrp.RealnvBillNum,
|
|
|
|
// sasInvoiceNumber = invoiceGrp.InvbillNum,
|
|
|
|
// Customer = invoiceGrp.ClientCode,
|
|
|
|
// BillTo = invoiceGrp.ClientCode,
|
|
|
|
// InvoiceDate = invoiceGrp.CreationTime,
|
|
|
|
// Site = "BJ02",
|
|
|
|
// PartNumber = invoiceGrpDetail.PartCode,
|
|
|
|
// InvoiceQuatity = invoiceGrpDetail.Qty,
|
|
|
|
// Price = invoiceGrpDetail.PRICE,
|
|
|
|
// InvoiceNetAmount = invoiceGrpDetail.Amt,
|
|
|
|
// InvoiceTaxAmount = Math.Round(invoiceGrpDetail.Amt * 0.13m, 2),
|
|
|
|
// TaxRate = 0.13m,
|
|
|
|
// Location = invoiceGrp.GetProperty("ErpToLoc",string.Empty),
|
|
|
|
// begintime = invoiceGrpDetail.BeginDate,
|
|
|
|
// endtime = invoiceGrpDetail.EndDate,
|
|
|
|
// domain = "BJBMPT",
|
|
|
|
// LINE = (i + 1).ToString()
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
// tedSaInvs.FirstOrDefault().InvoiceTaxAmount += invoiceGrp.TaxDiff;
|
|
|
|
// //红冲发票提交QAD
|
|
|
|
// if (!string.IsNullOrEmpty(invoiceGrp.ParentInvbillNum))
|
|
|
|
// {
|
|
|
|
// await SubmitToQadHongChongAsync(invoiceGrp.ParentInvbillNum).ConfigureAwait(false);
|
|
|
|
// }
|
|
|
|
|
|
|
|
// await _exChangeCenterDbContext.Set<TEA_TASK_SUB>().AddAsync(teaTaskSub).ConfigureAwait(false);
|
|
|
|
// await _exChangeCenterDbContext.Set<TED_SAS_INVOICE>().AddRangeAsync(tedSaInvs).ConfigureAwait(false);
|
|
|
|
// invoiceGrp.State = SettleBillState.已提交QAD;
|
|
|
|
// //构建发票同步Qad状态表数据
|
|
|
|
// await BindInvoiceSyncQadAsync(teaTaskSub, invoiceGrp.RealnvBillNum, invoiceGrp.InvbillNum, invoiceGrp.ClientCode).ConfigureAwait(false);
|
|
|
|
|
|
|
|
// await _exChangeCenterDbContext.SaveChangesAsync().ConfigureAwait(false);
|
|
|
|
// var retryPolicyAsync = Policy.Handle<Exception>().WaitAndRetryAsync(new[] {
|
|
|
|
// TimeSpan.FromSeconds(1),
|
|
|
|
// TimeSpan.FromSeconds(5),
|
|
|
|
// TimeSpan.FromSeconds(5),
|
|
|
|
// TimeSpan.FromSeconds(5)
|
|
|
|
// }, (exception, timeSpan, retryCount, context) =>
|
|
|
|
// {
|
|
|
|
// _logger.LogError($"提交到QAD,修改发票状态执行失败,第 {retryCount} 次重试");
|
|
|
|
// });
|
|
|
|
// await retryPolicyAsync.ExecuteAsync(async () => await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false)).ConfigureAwait(false);
|
|
|
|
//}
|
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|