Browse Source

QAD接口拆分BBAC JIS和BBAC买单

master
学 赵 12 months ago
parent
commit
1e44cebc3b
  1. 15
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/BA_SERVICE.cs
  2. 331
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/INVOICE_SERVICE.cs
  3. 7
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/BBAC_CAN_SA_MNG.cs

15
code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/BA_SERVICE.cs

@ -604,21 +604,6 @@ namespace Win.Sfs.SettleAccount.Bases
{ {
errors.Add(new ERR_EXP_DTO() { Message = $"零件号{itm.LU},标识号(生产码){itm.PN}有重复数据!" }); errors.Add(new ERR_EXP_DTO() { Message = $"零件号{itm.LU},标识号(生产码){itm.PN}有重复数据!" });
} }
return errors; return errors;
} }

331
code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/INVOICE_SERVICE.cs

@ -14,6 +14,7 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Omu.ValueInjecter;
using Polly; using Polly;
using SettleAccount.Domain.BQ; using SettleAccount.Domain.BQ;
using Shouldly; using Shouldly;
@ -126,81 +127,197 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
/// </summary> /// </summary>
private async Task SubmitToQadSingle(string invbillNum) private async Task SubmitToQadSingle(string invbillNum)
{ {
var invoiceGrp = _settleAccountDbContext.Set<INVOICE_GRP>() var invoiceGrp = _settleAccountDbContext.Set<INVOICE_GRP>()
.Where(t => t.InvbillNum == invbillNum) .Where(t => t.InvbillNum == invbillNum)
.Where(t => t.State == SettleBillState.) .Where(t => t.State == SettleBillState.)
.FirstOrDefault(); .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);
}
for (var i = 0; i < invdetials.Count; i++)
{
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);
}
if (invoiceGrp == null)
{
return;
} }
var invoiceGrpDetails = _settleAccountDbContext.Set<INVOICE_WAIT_DETAIL>() else
.Where(t => t.InvbillNum == invbillNum)
.ToList();
if (invoiceGrpDetails.Any())
{ {
var tedSaInvs = new List<TED_SAS_INVOICE>(); var invoiceGrpDetails = _settleAccountDbContext.Set<INVOICE_WAIT_DETAIL>()
var taskId = GuidGenerator.Create(); .Where(t => t.InvbillNum == invbillNum)
var teaTaskSub = new TEA_TASK_SUB() .ToList();
if (invoiceGrpDetails.Any())
{ {
GUID = taskId, var tedSaInvs = new List<TED_SAS_INVOICE>();
TaskState = 0, var taskId = GuidGenerator.Create();
TaskID = taskId, var teaTaskSub = new TEA_TASK_SUB()
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(), GUID = taskId,
Dataid = GuidGenerator.Create(), TaskState = 0,
Taskid = taskId, TaskID = taskId,
invoiceNumber = invoiceGrp.RealnvBillNum, TableName = "TED_SAS_INVOICE",
sasInvoiceNumber = invoiceGrp.InvbillNum, Creator = "SAS",
Customer = invoiceGrp.ClientCode, Subscriber = "QAD",
BillTo = invoiceGrp.ClientCode, Domain = "BJBMPT",
InvoiceDate = invoiceGrp.CreationTime,
Site = "BJ02", Site = "BJ02",
PartNumber = invoiceGrpDetail.PartCode, CreateTime = DateTime.Now,
InvoiceQuatity = invoiceGrpDetail.Qty, UpdateTime = DateTime.Now,
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[] { 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(1),
TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5),
TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5),
@ -209,8 +326,100 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
{ {
_logger.LogError($"提交到QAD,修改发票状态执行失败,第 {retryCount} 次重试"); _logger.LogError($"提交到QAD,修改发票状态执行失败,第 {retryCount} 次重试");
}); });
await retryPolicyAsync.ExecuteAsync(async () => await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false)).ConfigureAwait(false); 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> /// <summary>

7
code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/BBAC_CAN_SA_MNG.cs

@ -263,6 +263,13 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
return await _detailRepository.Where(p => p_invs.Contains(p.InvbillNum)).ToListAsync().ConfigureAwait(false); return await _detailRepository.Where(p => p_invs.Contains(p.InvbillNum)).ToListAsync().ConfigureAwait(false);
} }
public virtual async Task<List<BBAC_CAN_SA_DETAIL>> GetDetailAsync(string p_invbillnum,EnumBusinessType p_bussinesstype)
{
return await _detailRepository.Where(p => p.InvbillNum == p_invbillnum && p.BusinessType==p_bussinesstype)
.GroupBy(p=>new { p.PartCode ,p.ContractDocID }).Select(p=> new BBAC_CAN_SA_DETAIL { Qty=p.Sum(itm=>itm.Qty),PartCode=p.Key.PartCode,ContractDocID=p.Key.ContractDocID }).ToListAsync();
}
} }
} }

Loading…
Cancel
Save