|
|
@ -5,6 +5,8 @@ using System.ComponentModel.DataAnnotations; |
|
|
|
using System.Linq; |
|
|
|
using System.Reflection; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using DocumentFormat.OpenXml.Office2013.Word; |
|
|
|
using DocumentFormat.OpenXml.Presentation; |
|
|
|
using EFCore.BulkExtensions; |
|
|
|
using Magicodes.ExporterAndImporter.Core; |
|
|
|
using Magicodes.ExporterAndImporter.Csv; |
|
|
@ -12,8 +14,10 @@ using Magicodes.ExporterAndImporter.Excel; |
|
|
|
using Microsoft.AspNetCore.Authorization; |
|
|
|
using Microsoft.AspNetCore.Http; |
|
|
|
using Microsoft.AspNetCore.Mvc; |
|
|
|
using Microsoft.EntityFrameworkCore; |
|
|
|
using Microsoft.Extensions.Logging; |
|
|
|
using Microsoft.Extensions.Options; |
|
|
|
using Newtonsoft.Json; |
|
|
|
using Omu.ValueInjecter; |
|
|
|
using Polly; |
|
|
|
using SettleAccount.Domain.BQ; |
|
|
@ -112,6 +116,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
/// * 成功提交后修改状态为已提交QAD
|
|
|
|
/// </remarks>
|
|
|
|
[HttpPost] |
|
|
|
[UnitOfWork(false)] |
|
|
|
public virtual async Task<IActionResult> SubmitToQad(List<string> invbillNums) |
|
|
|
{ |
|
|
|
_globalConfigOptions.IsSyncInvoiceQadState = true; |
|
|
@ -121,7 +126,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
} |
|
|
|
return new OkResult(); |
|
|
|
} |
|
|
|
|
|
|
|
[UnitOfWork(false)] |
|
|
|
/// <summary>
|
|
|
|
/// 提交到QAD
|
|
|
|
/// </summary>
|
|
|
@ -135,7 +140,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
{ |
|
|
|
|
|
|
|
var _detail = await _bbacMng.GetDetailAsync(invbillNum, EnumBusinessType.MaiDanJianBBAC).ConfigureAwait(false);//查出买单数量
|
|
|
|
var invoiceGrpDetails = _settleAccountDbContext.Set<INVOICE_WAIT_DETAIL>() |
|
|
|
var invoiceGrpDetails = _settleAccountDbContext.Set<INVOICE_WAIT_DETAIL>().AsNoTracking() |
|
|
|
.Where(t => t.InvbillNum == invbillNum) |
|
|
|
.ToList(); |
|
|
|
if (invoiceGrpDetails.Any()) |
|
|
@ -156,32 +161,38 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
UpdateTime = DateTime.Now, |
|
|
|
}; |
|
|
|
List<INVOICE_WAIT_DETAIL> invdetials = new List<INVOICE_WAIT_DETAIL>(); |
|
|
|
foreach (var itm in invoiceGrpDetails) |
|
|
|
|
|
|
|
|
|
|
|
var invoiceGrpDetails1 = JsonConvert.DeserializeObject<List<INVOICE_WAIT_DETAIL>>(JsonConvert.SerializeObject(invoiceGrpDetails)); |
|
|
|
foreach (var itm in invoiceGrpDetails1) |
|
|
|
{ |
|
|
|
itm.SetProperty("ErpToLoc",$"C{invoiceGrp.ClientCode}"); |
|
|
|
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") |
|
|
|
var first = _detail.FirstOrDefault(p => p.ContractDocID == itm.Extend1 && p.PartCode == itm.PartCode); |
|
|
|
if (first == null) |
|
|
|
{ |
|
|
|
inv.SetProperty("ErpToLoc", "CC16"); |
|
|
|
inv.SetProperty("ErpToLoc", $"C{invoiceGrp.ClientCode}"); |
|
|
|
invdetials.Add(itm);//添加发票明细
|
|
|
|
continue; |
|
|
|
} |
|
|
|
if (invoiceGrp.Site == "1040") |
|
|
|
else |
|
|
|
{ |
|
|
|
inv.SetProperty("ErpToLoc", "CC11"); |
|
|
|
if (itm.Qty > first.Qty) |
|
|
|
{ |
|
|
|
inv.Qty = itm.Qty - first.Qty;//发票总数中去除
|
|
|
|
inv.Amt = Math.Round(itm.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); |
|
|
|
} |
|
|
|
invdetials.Add(inv); |
|
|
|
|
|
|
|
} |
|
|
|
for (var i = 0; i < invdetials.Count; i++) |
|
|
|
{ |
|
|
@ -212,50 +223,39 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
var invbefore = invoiceGrp.TaxAmt + invoiceGrp.TaxDiff; |
|
|
|
var invafter=tedSaInvs.Sum(p => p.InvoiceNetAmount) + tedSaInvs.Sum(p => p.InvoiceTaxAmount); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var tedsaInvs1 = JsonConvert.DeserializeObject<List<TED_SAS_INVOICE>>(JsonConvert.SerializeObject(tedSaInvs)); |
|
|
|
var invbefore = invoiceGrp.TaxAmt + invoiceGrp.TaxDiff; |
|
|
|
var invafter = tedsaInvs1.Sum(p => p.InvoiceNetAmount) + tedsaInvs1.Sum(p => p.InvoiceTaxAmount); |
|
|
|
var invdiff = invbefore - invafter; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tedSaInvs.FirstOrDefault(p => p.LINE == "2").InvoiceTaxAmount +=invdiff; |
|
|
|
tedSaInvs.FirstOrDefault(p => p.LINE == "1").InvoiceTaxAmount += invoiceGrp.TaxDiff; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var line1 = tedsaInvs1.FirstOrDefault(p => p.LINE == "1"); |
|
|
|
var line2 = tedsaInvs1.FirstOrDefault(p => p.LINE == "2"); |
|
|
|
line2.InvoiceTaxAmount += invdiff; |
|
|
|
line1.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); |
|
|
|
await _exChangeCenterDbContext.BulkInsertAsync(new List<TEA_TASK_SUB>() { teaTaskSub }).ConfigureAwait(false); |
|
|
|
await _exChangeCenterDbContext.BulkInsertAsync(tedsaInvs1).ConfigureAwait(false); |
|
|
|
invoiceGrp.State = SettleBillState.已提交QAD; |
|
|
|
//构建发票同步Qad状态表数据
|
|
|
|
_repository.DbContext.BulkUpdateAsync(new List<INVOICE_GRP>() { invoiceGrp }); |
|
|
|
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); |
|
|
|
//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 |
|
|
|
{ |
|
|
@ -279,9 +279,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
UpdateTime = DateTime.Now, |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < invoiceGrpDetails.Count; i++) |
|
|
|
{ |
|
|
|
var invoiceGrpDetail = invoiceGrpDetails[i]; |
|
|
@ -316,118 +313,42 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
{ |
|
|
|
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); |
|
|
|
//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.BulkInsertAsync(new List<TEA_TASK_SUB>() { teaTaskSub }).ConfigureAwait(false); |
|
|
|
await _exChangeCenterDbContext.BulkInsertAsync(tedSaInvs).ConfigureAwait(false); |
|
|
|
invoiceGrp.State = SettleBillState.已提交QAD; |
|
|
|
//构建发票同步Qad状态表数据
|
|
|
|
_repository.DbContext.BulkUpdateAsync(new List<INVOICE_GRP>() { invoiceGrp }); |
|
|
|
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); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//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>
|
|
|
|
/// 红冲发票提交到QAD
|
|
|
@ -505,12 +426,14 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
{ |
|
|
|
var invoiceSyncQad = new InvoiceSyncQad(teaTaskSub.TaskID, invoiceNumber, sasInvoiceNumber) |
|
|
|
{ |
|
|
|
|
|
|
|
TableName = teaTaskSub.TableName, |
|
|
|
Domain = teaTaskSub.Domain, |
|
|
|
Site = teaTaskSub.Site, |
|
|
|
Customer = customer |
|
|
|
}; |
|
|
|
await _settleAccountDbContext.Set<InvoiceSyncQad>().AddAsync(invoiceSyncQad).ConfigureAwait(false); |
|
|
|
|
|
|
|
await _settleAccountDbContext.BulkInsertAsync(new List<InvoiceSyncQad>() { invoiceSyncQad }); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|