Browse Source

更新版本

master
赵新宇 9 months ago
parent
commit
630acf0b49
  1. 2
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/BA_SERVICE.cs
  2. 8
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/CAN_SA_SERVICE.cs
  3. 1
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PURCHASE_PRICE_SERVICE.cs
  4. 19
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/GenerateJisInvoiceService.cs
  5. 68
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/INVOICE_GRP.cs
  6. 580
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/INV_MNG.cs

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

@ -552,7 +552,7 @@ namespace Win.Sfs.SettleAccount.Bases
/// <param name="p_version">版本号</param>
/// <param name="p_InvGroupNum">发票分组</param>
/// <param name="p_parentInvBillNum">原发票号</param>
protected async Task<bool> ReissueSecInvoice<TDetail>(List<TDetail> p_list, List<PUB_ADJ_DETAIL> p_adjlist, List<TEMP_CAN_SA_DETAIL> p_tmplist, int p_version, string p_parentInvBillNum) where TDetail : SA_CAN_BASE
protected async Task<bool> ReissueSecInvoice<TDetail>(List<TDetail> p_list, List<PUB_ADJ_DETAIL> p_adjlist, List<TEMP_CAN_SA_DETAIL> p_tmplist, int p_version, string p_parentInvBillNum) where TDetail : SA_CAN_BASE, new()
{
var flag = await _invMng.ReissueSecInvoice(p_list, p_adjlist, p_tmplist, p_parentInvBillNum, p_version).ConfigureAwait(false);
if (flag)

8
code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/CAN_SA_SERVICE.cs

@ -168,7 +168,7 @@ namespace Win.Sfs.SettleAccount.Bases
/// <param name="p_version">版本号</param>
/// <param name="p_InvGroupNum">发票分组</param>
/// <param name="p_parentInvBillNum">原发票号</param>
protected async Task<bool> SecInvoice<TDetail>(List<TDetail> p_list, List<PUB_ADJ_DETAIL> p_adjlist, List<TEMP_CAN_SA_DETAIL> dtos, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType, List<TEMP_NOT_SA_DETAIL> p_notlist = null) where TDetail : SA_CAN_BASE
protected async Task<bool> SecInvoice<TDetail>(List<TDetail> p_list, List<PUB_ADJ_DETAIL> p_adjlist, List<TEMP_CAN_SA_DETAIL> dtos, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType, List<TEMP_NOT_SA_DETAIL> p_notlist = null) where TDetail : SA_CAN_BASE, new()
{
List<string> invlist = new List<string>();
@ -176,10 +176,10 @@ namespace Win.Sfs.SettleAccount.Bases
switch (businessType)
{
case EnumBusinessType.MaiDanJianHBPO:
invlist = await _invmng.MakeInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType, false).ConfigureAwait(false);
invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType, p_notlist).ConfigureAwait(false);//重开可以变多张发票
break;
case EnumBusinessType.MaiDanJianBBAC:
invlist = await _invmng.MakeInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType, false).ConfigureAwait(false);
invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType, p_notlist).ConfigureAwait(false);//重开可以变多张发票
break;
case EnumBusinessType.ZhiGongJianBBAC:
invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType,p_notlist).ConfigureAwait(false);//重开可以变多张发票
@ -197,7 +197,7 @@ namespace Win.Sfs.SettleAccount.Bases
invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType, p_notlist).ConfigureAwait(false);
break;
case EnumBusinessType.YinDuJian:
invlist = await _invmng.JITInvoice(p_list, p_adjlist, dtos, new List<TEMP_NOT_SA_DETAIL>(), p_version, p_InvGroupNum, string.Empty, businessType, false).ConfigureAwait(false);//重开可以变多张发票
invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType, p_notlist).ConfigureAwait(false);//重开可以变多张发票开可以变多张发票
break;
}
//var ls= await _invmng.SecInvoice(p_list,p_adjlist,p_tmplist,p_version, p_InvGroupNum, p_parentInvBillNum, businessType);

1
code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PURCHASE_PRICE_SERVICE.cs

@ -115,6 +115,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
[HttpPost]
public async Task<PagedResultDto<PURCHASE_PRICE_DTO>> GetListAsync(RequestDto input)
{
var entities = await _repository.GetListByFilterAsync(input.Filters, input.Sorting, input.MaxResultCount, input.SkipCount, true).ConfigureAwait(false);
var totalCount = await _repository.GetCountByFilterAsync(input.Filters).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<PURCHASE_PRICE>, List<PURCHASE_PRICE_DTO>>(entities);

19
code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/GenerateJisInvoiceService.cs

@ -152,13 +152,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs
}).ToList();//不能结算
entitys = entitys.OrderBy(p => p.LU).ToList();
var invs = SecInvoice(entitys, new List<PUB_ADJ_DETAIL>(), dtos, notlist, main.Version, main.InvGroupNum, string.Empty, main.BusinessType);
// var invs = SecInvoice(entitys, new List<PUB_ADJ_DETAIL>(), dtos, main.Version, main.InvGroupNum, string.Empty, main.BusinessType, query.ToList());
if (invs.Count > 0)
@ -581,10 +574,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs
// }
//}
_invls = invlist.Select(p => p.InvbillNum).ToList();
}
return _invls;
}
@ -597,7 +586,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs
{
List<string> _invls = new List<string>();
var groupDtos = dtos.GroupBy(p => new { p.InvGroupNum, p.PartCode, p.Price, p.BeginDate, p.EndDate, p.ContractDocID, p.LU })//明细
.Select(itm => new GroupPartCode
{
@ -633,10 +621,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs
var invlist = new List<INVOICE_GRP>();
var salist = new List<TDetail>();
var adjlist = new List<PUB_ADJ_DETAIL>();
foreach (var big in biglist)//单条大于1000W的开票
{
var list = p_list.Where(p => p.InvGroupNum == big.InvGroupNum && p.PartCode == big.PartCode && p.Price == big.Price && p.LU == big.LU);
@ -692,9 +676,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs
{
groupList.AddRange(mapList);
}
#region 发票明细
List<INVOICE_WAIT_DETAIL> _entityDetailList = new List<INVOICE_WAIT_DETAIL>();
foreach (var detail in detailDtos)

68
code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/INVOICE_GRP.cs

@ -207,6 +207,74 @@ namespace SettleAccount.Domain.BQ
this.invoices = invoices;
}
}
public class InvoiceByPUB<T> where T : SA_CAN_BASE, new()
{
public string InvBillNum { set; get; }
public InvoiceByPUB() { }
private List<T> parts = new List<T>();
public IReadOnlyList<T> Parts => parts.AsReadOnly();
public decimal TotalAmount => parts.Sum(p => p.Price);
public int PartCount => parts.GroupBy(p => new { p.LU, p.PartCode }).Count();
public bool CanAddPart(T part)
{
return TotalAmount + part.Price < 10000000 && PartCount<15 ;
}
public void AddPart(T part)
{
if (CanAddPart(part))
{
part.InvbillNum = InvBillNum;
parts.Add(part);
}
}
}
public class InvoiceGeneratorPUB<T> where T : SA_CAN_BASE, new()
{
private List<InvoiceByPUB<T>> invoices = new List<InvoiceByPUB<T>>();
public IReadOnlyList<InvoiceByPUB<T>> Invoices => invoices.AsReadOnly();
public void GenerateInvoices(List<T> parts)
{
InvoiceByPUB<T> currentInvoice = new InvoiceByPUB<T>();
invoices.Add(currentInvoice);
currentInvoice.InvBillNum = OrderNumberGenerator.GenerateOrderNumber("INV");
foreach (var part in parts)
{
if (!currentInvoice.CanAddPart(part))
{
currentInvoice = new InvoiceByPUB<T>();
currentInvoice.InvBillNum = OrderNumberGenerator.GenerateOrderNumber("INV");
invoices.Add(currentInvoice);
}
currentInvoice.AddPart(part);
}
}
public InvoiceGeneratorPUB()
{
}
public InvoiceGeneratorPUB(List<InvoiceByPUB<T>> invoices)
{
this.invoices = invoices;
}
}
public class GroupPartCode
{
public string PartCode { set; get; }

580
code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/INV_MNG.cs

@ -1007,150 +1007,115 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
/// <param name="p_parentInvBillNum">原发票号</param>
[UnitOfWork(false)]
public async Task<List<string>> SecInvoice<TDetail>(List<TDetail> p_list, List<PUB_ADJ_DETAIL> p_ajdlist, List<TEMP_CAN_SA_DETAIL> dtos, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType, List<TEMP_NOT_SA_DETAIL> p_notlist = null)
where TDetail : SA_CAN_BASE
where TDetail : SA_CAN_BASE,new()
{
List<string> _invls = new List<string>();
var groups1 = dtos.GroupBy(p => new { p.PartCode, p.LU, p.Price, p.BeginDate, p.EndDate, p.ContractDocID }).Select(p => new TMEP_INV
{
PartCode = p.Key.PartCode,
LU = p.Key.LU,
Amt = p.Sum(itm => itm.Amt),
Qty = p.Sum(itm => itm.Qty),
ContractDocID = p.Key.ContractDocID,
Price = p.Key.Price,
BeginDate = p.Key.BeginDate,
EndDate = p.Key.EndDate
}).ToList();//汇总记录不出现重复值
var groups = dtos.GroupBy(p => new { p.PartCode, p.LU, p.Price, p.BeginDate, p.EndDate, p.ContractDocID }).Select(p => new TMEP_INV
var groupDtos = dtos.GroupBy(p => new { p.InvGroupNum, p.PartCode, p.Price, p.BeginDate, p.EndDate, p.ContractDocID, p.LU })//明细
.Select(itm => new GroupPartCode
{
PartCode = p.Key.PartCode,
LU = p.Key.LU,
Amt = p.Sum(itm => itm.Amt),
Qty = p.Sum(itm => itm.Qty),
Price = p.Key.Price,
ContractDocID = p.Key.ContractDocID,
BeginDate = p.Key.BeginDate,
EndDate = p.Key.EndDate
}).ToList();//汇总记录不出现重复值
Dictionary<string, List<TMEP_INV>> invoiceMap = new Dictionary<string, List<TMEP_INV>>();//发票和发票明细关系
foreach (var group in groups)
{
int i = groups1.Count(p => p.LU == group.LU
&& p.PartCode == group.PartCode
&& p.BeginDate == group.BeginDate
&& p.EndDate == group.EndDate
&& p.ContractDocID == group.ContractDocID
);
if (i > 0)
{
string invoiceBillNum = OrderNumberGenerator.GenerateOrderNumber("CINV");
List<TMEP_INV> tempList = new List<TMEP_INV>();
decimal sum = group.Amt;//初始合计金额
int partCount = 0;
foreach (var group1 in groups1)
{
if (group.LU == group1.LU
&& group.PartCode == group1.PartCode
&& group.BeginDate == group1.BeginDate
&& group.EndDate == group1.EndDate
&& group1.ContractDocID == group.ContractDocID
&& group1.Price == group.Price
&& group1.Qty == group.Qty
&& group1.Amt == group.Amt
)
PartCode = itm.Key.PartCode,
InvGroupNum = itm.Key.InvGroupNum,
LU = itm.Key.LU,
ContactDocID = itm.Key.ContractDocID,
Price = itm.Key.Price,
Amt = Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2),//税前
Tax = Math.Round(Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2) * 0.13m, 2),//税
TaxAmt = Math.Round(Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2) * 0.13m, 2) + Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2),//税后进
Qty = itm.Sum(k => k.Qty),
BeginDate = itm.Key.BeginDate,
EndDate = itm.Key.EndDate
}).ToList();
List<GroupPartCode> biglist = new List<GroupPartCode>();
List<GroupPartCode> smalllist = new List<GroupPartCode>();
foreach (var itm in groupDtos)//分类1000W以上或1000W以下
{
tempList.Add(group1);
partCount++;//符合条件加入到零件中
continue;
}
sum += group1.Amt;
if (sum > 10000000)
if (itm.Amt > 10000000)
{
break;
}
tempList.Add(group1);
biglist.Add(itm);
}
invoiceMap.Add(invoiceBillNum, tempList);
var query = from itm in groups1 //更新分组
join itm1 in tempList
on
new { itm.LU, itm.BeginDate, itm.EndDate, itm.ContractDocID, itm.PartCode, itm.Qty, itm.Price, itm.Amt }
equals
new { itm1.LU, itm1.BeginDate, itm1.EndDate, itm1.ContractDocID, itm1.PartCode, itm1.Qty, itm1.Price, itm1.Amt }
into temp
from tm in temp.DefaultIfEmpty()
where tm == null
select new TMEP_INV
else
{
LU = itm.LU,
Amt = itm.Amt,
Qty = itm.Qty,
Price = itm.Price,
BeginDate = itm.BeginDate,
ContractDocID = itm.ContractDocID,
EndDate = itm.EndDate,
PartCode = itm.PartCode,
};
groups1 = query.ToList();
smalllist.Add(itm);
}
}
if (invoiceMap.Count > 0)
{
var groupList = new List<INVOICE_MAP_GROUP>();
var notDetialList = new List<INVOICE_NOT_SETTLE>();
var detailList = new List<INVOICE_WAIT_DETAIL>();
var invlist = new List<INVOICE_GRP>();
var salist = new List<TDetail>();
var adjlist = new List<PUB_ADJ_DETAIL>();
int count = invoiceMap.Keys.Count;//计算第几张发票计数器
int i = 1;
foreach (var group in invoiceMap)
foreach (var big in biglist)//单条大于1000W的开票
{
var list = p_list.Where(p => p.InvGroupNum == big.InvGroupNum && p.PartCode == big.PartCode && p.Price == big.Price && p.LU == big.LU);
var gener = new InvoiceGeneratorPUB<TDetail>();
gener.GenerateInvoices(p_list);
var invList = gener.Invoices;
foreach (var inv in invList)
{
var partlist = inv.Parts;
if (partlist.Count > 0)
{
var query = from itm in p_list
join itm1 in dtos on itm.Id equals itm1.Id
select itm1;
var Dtos = query.ToList();
var detailDtos = Dtos.GroupBy(p => new { p.InvGroupNum, p.PartCode, p.Price, p.BeginDate, p.EndDate, p.ContractDocID, p.LU })//明细
.Select(itm => new
{
var key = group.Key;//发票票号
var ls = group.Value;//发票明细
//反向查找结算数据
var query = from itm in dtos
join itm1 in ls
on new { itm.LU, itm.PartCode, itm.BeginDate, itm.EndDate, itm.ContractDocID } equals new { itm1.LU, itm1.PartCode, itm1.BeginDate, itm1.EndDate, itm1.ContractDocID }
join itm2 in p_list on new { itm.PartCode, itm.PN, itm.SettleDate } equals new { itm2.PartCode, itm2.PN, itm2.SettleDate }
select itm2;//反向更新可计算数据
foreach (var itm in query)
PartCode = itm.Key.PartCode,
InvGroupNum = itm.Key.InvGroupNum,
LU = itm.Key.LU,
ContactDocID = itm.Key.ContractDocID,
Price = itm.Key.Price,
Amt = Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2),//税前
Tax = Math.Round(Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2) * 0.13m, 2),//税
TaxAmt = Math.Round(Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2) * 0.13m, 2) + Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2),//税后进
Qty = itm.Sum(k => k.Qty),
BeginDate = itm.Key.BeginDate,
EndDate = itm.Key.EndDate
}).ToList();
decimal amt = detailDtos.Sum(k => k.Amt);//金额
decimal txtAmt = detailDtos.Sum(k => k.TaxAmt);//税后金额
decimal realAmt = detailDtos.Sum(k => k.Tax);//税额
var invoicegrup = partlist.Select(p => p.GroupNum);
var mapList = new List<INVOICE_MAP_GROUP>();
foreach (var groupnum in invoicegrup)
{
itm.InvbillNum = key;
salist.Add(itm);
mapList.Add(new INVOICE_MAP_GROUP(
guid: GuidGenerator.Create(),
version: p_version,
invbillNum: inv.InvBillNum,
invGroupNum: p_InvGroupNum,
settleGroupNum: groupnum,
amt: 0,
extend1: string.Empty,
extend2: string.Empty
)
);
}
if (!string.IsNullOrEmpty(p_parentInvBillNum))
{
//反向查找调整数据
var query1 = from itm in dtos
join itm1 in ls
on new { itm.LU, itm.PartCode, itm.BeginDate, itm.EndDate } equals new { itm1.LU, itm1.PartCode, itm1.BeginDate, itm1.EndDate }
join itm2 in p_ajdlist on new { itm.PartCode, itm.PN, itm.SettleDate } equals new { itm2.PartCode, itm2.PN, itm2.SettleDate }
select itm2;
foreach (var itm in query1)
if (mapList.Count > 0)
{
itm.InvBillNum = key;
adjlist.Add(itm);
}
groupList.AddRange(mapList);
}
#region 发票明细
List<INVOICE_WAIT_DETAIL> _entityDetailList = new List<INVOICE_WAIT_DETAIL>();
foreach (var detail in ls)
foreach (var detail in detailDtos)
{
_entityDetailList.Add(
new INVOICE_WAIT_DETAIL(
guid: GuidGenerator.Create(),
version: p_version,
invbillNum: key,
invbillNum: inv.InvBillNum,
invGroupNum: p_InvGroupNum,
lU: detail.LU,
qty: detail.Qty,
bussiessType: businessType,
amt: detail.Amt,
pRICE: detail.Price,
extend1: detail.ContractDocID,
extend1: detail.ContactDocID,
extend2: string.Empty,
beginDate: detail.BeginDate,
endDate: detail.EndDate,
@ -1161,104 +1126,123 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
{
detailList.AddRange(_entityDetailList);
}
#region 发票不能结算的明细
var innotls = new List<INVOICE_NOT_SETTLE>();
var sq = query.GroupBy(p => new { p.LU, p.GroupNum })
.Select(p => new { version = p_version, LU = p.Key.LU, Qty = p.Sum(itm => itm.Qty), InvBillNum = group.Key, GroupNum = p.Key.GroupNum });
foreach (var sitm in sq)
{
innotls.Add(new INVOICE_NOT_SETTLE(
#endregion
#region 发票
var invbill = new INVOICE_GRP
(
guid: GuidGenerator.Create(),
version: p_version,
realnvBillNum: string.Empty,
invbillNum: inv.InvBillNum,
amt: amt,
taxAmt: txtAmt,
fileName: string.Empty,
businessType: businessType,
invGroupNum: p_InvGroupNum,
settleGroupNum: sitm.GroupNum,
lU: sitm.LU,
lU1: sitm.LU,
extend1: "可结算",
extend2: string.Empty,
qty: sitm.Qty,
p_invbillnum: group.Key
));
}
if (innotls.Count > 0)
state: SettleBillState.,
invoiceBillState: InvoiceBillState.,
tax: 0.13m,
parent: !string.IsNullOrEmpty(p_parentInvBillNum) ? p_parentInvBillNum : string.Empty,
preTaxDiff: 0,
taxDiff: 0,
clientCode: string.Empty,
realAmt: realAmt
);
string site = dtos.Where(p => !string.IsNullOrEmpty(p.Site)).FirstOrDefault().Site;
string clientCode = string.Empty;
switch (site)
{
notDetialList.AddRange(innotls);
case "1040":
clientCode = "C001";
break;
case "1046":
clientCode = "C171";
break;
default:
clientCode = "C004";
break;
}
if (p_notlist != null && p_notlist.Count > 0)
invbill.ClientCode = clientCode;
invbill.Site = dtos.FirstOrDefault().Site;
invbill.CreationTime = DateTime.MinValue;
invbill.LastModificationTime = DateTime.Now;
invlist.Add(invbill);
#endregion
}
}
}
smalllist = smalllist.OrderBy(p => p.Amt).ToList();
var gener1 = new InvoiceGeneratorDiff();
gener1.GenerateInvoices(smalllist);
var invList1 = gener1.Invoices;
foreach (var inv in invList1)//小于1000W的开票
{
var innotls1 = new List<INVOICE_NOT_SETTLE>();
var partlist = inv.Parts;
var query = from part in p_list
join part1 in partlist on
new { part.InvGroupNum, part.PartCode, part.LU, part.Price } equals new { part1.InvGroupNum, part1.PartCode, part1.LU, part1.Price }
select part;
var grouplist = query.Select(p => p.GroupNum).ToList();
var entityList = query.ToList();
salist.AddRange(entityList);
var notlist = p_notlist.Where(p => grouplist.Contains(p.GroupNum));
if (partlist.Count > 0)
{
decimal amt = partlist.Sum(k => k.Amt);//金额
decimal txtAmt = partlist.Sum(k => k.TaxAmt);//税后金额
decimal realAmt = partlist.Sum(k => k.Tax);//税额
foreach (var nitm in notlist)
var invoicegroupls = entityList.Select(p => p.GroupNum);
var mapList = new List<INVOICE_MAP_GROUP>();
foreach (var groupnum in invoicegroupls)
{
innotls1.Add(new INVOICE_NOT_SETTLE(
mapList.Add(new INVOICE_MAP_GROUP(
guid: GuidGenerator.Create(),
version: p_version,
invbillNum: inv.InvBillNum,
invGroupNum: p_InvGroupNum,
settleGroupNum: nitm.GroupNum,
lU: nitm.LU,
lU1: nitm.LU,
extend1: "不可结算",
extend2: string.Empty,
qty: nitm.Qty,
p_invbillnum: group.Key
));
settleGroupNum: groupnum,
amt: 0,
extend1: string.Empty,
extend2: string.Empty
)
);
}
if (innotls.Count > 0)
if (mapList.Count > 0)
{
notDetialList.AddRange(innotls1);
}
groupList.AddRange(mapList);
}
#endregion
decimal amt = ls.Sum(k => k.Amt);//金额
decimal txtAmt = Math.Round(amt * 0.13m, 2);//税后金额
decimal readAmt = amt + Math.Round(amt * 0.13m, 2);//税额
//var contractList = ls.Select(p => p.ContractDocID).Distinct();
var _groupList = query.GroupBy(p => new { p.GroupNum })
.Select(p => new { GroupNum = p.Key.GroupNum, Amt = p.Sum(itm => Math.Round(itm.Qty * itm.Price, 2)) }).Distinct();
List<INVOICE_MAP_GROUP> group1 = new List<INVOICE_MAP_GROUP>();
foreach (var en in _groupList)
{
group1.Add(
new INVOICE_MAP_GROUP(
List<INVOICE_WAIT_DETAIL> _entityDetailList = new List<INVOICE_WAIT_DETAIL>();
foreach (var detail in partlist)
{
_entityDetailList.Add(
new INVOICE_WAIT_DETAIL(
guid: GuidGenerator.Create(),
version: p_version,
invbillNum: key,
invbillNum: inv.InvBillNum,
invGroupNum: p_InvGroupNum,
settleGroupNum: en.GroupNum,
amt: en.Amt,
extend1: string.Empty,
extend2: string.Empty));
}
if (group1.Count > 0)
{
groupList.AddRange(group1);
lU: detail.LU,
qty: detail.Qty,
bussiessType: businessType,
amt: detail.Amt,
pRICE: detail.Price,
extend1: detail.ContactDocID,
extend2: string.Empty,
beginDate: detail.BeginDate.Value,
endDate: detail.EndDate.Value,
partcode: detail.PartCode
));
}
var lst = dtos.Where(p => !string.IsNullOrEmpty(p.Site)).ToList();
string site = lst.FirstOrDefault().Site;
string clientCode = string.Empty;
switch (site)
if (_entityDetailList.Count > 0)
{
case "1040":
clientCode = "C001";
break;
case "1046":
clientCode = "C171";
break;
default:
clientCode = "C004";
break;
detailList.AddRange(_entityDetailList);
}
var invbill = new INVOICE_GRP
(guid: GuidGenerator.Create(),
(
guid: GuidGenerator.Create(),
realnvBillNum: string.Empty,
invbillNum: key,
invbillNum: inv.InvBillNum,
amt: amt,
taxAmt: txtAmt,
fileName: string.Empty,
@ -1267,56 +1251,59 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
state: SettleBillState.,
invoiceBillState: InvoiceBillState.,
tax: 0.13m,
parent: p_parentInvBillNum,
parent: !string.IsNullOrEmpty(p_parentInvBillNum) ? p_parentInvBillNum : string.Empty,
preTaxDiff: 0,
taxDiff: 0,
clientCode: string.Empty,
realAmt: readAmt
realAmt: realAmt
);
string site = dtos.Where(p => !string.IsNullOrEmpty(p.Site)).FirstOrDefault().Site;
string clientCode = string.Empty;
switch (site)
{
case "1040":
clientCode = "C001";
break;
case "1046":
clientCode = "C171";
break;
default:
clientCode = "C004";
break;
}
invbill.ClientCode = clientCode;
invbill.Site = dtos.FirstOrDefault().Site;
invbill.CreationTime = DateTime.MinValue;
invbill.LastModificationTime = DateTime.Now;
invbill.Site = dtos.FirstOrDefault().Site;
invlist.Add(invbill);
}
}
var dbcontxt = await _repository.GetDbContextAsync().ConfigureAwait(false);
//_dbcontext.BulkInsert(invlist);
//_dbcontext.BulkInsert(groupList);
//_dbcontext.BulkInsert(detailList);
//_dbcontext.BulkInsert(notDetialList);
//if (salist.Count > 0)
//{
// _dbcontext.BulkUpdate(salist);
//}
//if (adjlist.Count > 0)
//{
// _dbcontext.BulkUpdate(adjlist);
//}
await dbcontxt.BulkInsertAsync(invlist).ConfigureAwait(false);
await dbcontxt.BulkInsertAsync(groupList).ConfigureAwait(false);
await dbcontxt.BulkInsertAsync(detailList).ConfigureAwait(false);
await dbcontxt.BulkInsertAsync(notDetialList).ConfigureAwait(false);
var _dbcontext=await _repository.GetDbContextAsync().ConfigureAwait(false);
if (salist.Count > 0)
{
await dbcontxt.BulkUpdateAsync(salist).ConfigureAwait(false);
_dbcontext.BulkUpdate(salist);
}
_dbcontext.BulkInsert(invlist);
_dbcontext.BulkInsert(groupList);
_dbcontext.BulkInsert(detailList);
if (adjlist.Count > 0)
{
await dbcontxt.BulkUpdateAsync(adjlist).ConfigureAwait(false);
_dbcontext.BulkInsert(adjlist);
}
//await _repository.DbContext.BulkInsertAsync(notDetialList);
_invls = invlist.Select(p => p.InvbillNum).ToList();
if (notDetialList.Count > 0)
{
_dbcontext.BulkInsert(notDetialList);
}
_invls = invlist.Select(p => p.InvbillNum).ToList();
return _invls;
}
//public async Task<List<string>> SecInvoice<TDetail>(List<TDetail> p_list, List<PUB_ADJ_DETAIL> p_ajdlist, List<TEMP_CAN_SA_DETAIL> dtos, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType)
// where TDetail : SA_CAN_BASE
//List<string> _invls = new List<string>();
//var groups1 = dtos.GroupBy(p => new { p.PartCode, p.LU, p.Price, p.BeginDate, p.EndDate, p.ContractDocID }).Select(p => new TMEP_INV
//{
// List<string> _invls = new List<string>();
// var groups1 = dtos.GroupBy(p => new { p.PartCode, p.LU, p.Price, p.BeginDate, p.EndDate, p.ContractDocID }).Select(p => new TMEP_INV
// {
// PartCode = p.Key.PartCode,
// LU = p.Key.LU,
// Amt = p.Sum(itm => itm.Amt),
@ -1325,10 +1312,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
// Price = p.Key.Price,
// BeginDate = p.Key.BeginDate,
// EndDate = p.Key.EndDate
// }).ToList();//汇总记录不出现重复值
// var groups = dtos.GroupBy(p => new { p.PartCode, p.LU, p.Price, p.BeginDate, p.EndDate, p.ContractDocID }).Select(p => new TMEP_INV
// {
//}).ToList();//汇总记录不出现重复值
//var groups = dtos.GroupBy(p => new { p.PartCode, p.LU, p.Price, p.BeginDate, p.EndDate, p.ContractDocID }).Select(p => new TMEP_INV
//{
// PartCode = p.Key.PartCode,
// LU = p.Key.LU,
// Amt = p.Sum(itm => itm.Amt),
@ -1337,10 +1323,11 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
// ContractDocID = p.Key.ContractDocID,
// BeginDate = p.Key.BeginDate,
// EndDate = p.Key.EndDate
// }).ToList();//汇总记录不出现重复值
// Dictionary<string, List<TMEP_INV>> invoiceMap = new Dictionary<string, List<TMEP_INV>>();//发票和发票明细关系
// foreach (var group in groups)
// {
//}).ToList();//汇总记录不出现重复值
//Dictionary<string, List<TMEP_INV>> invoiceMap = new Dictionary<string, List<TMEP_INV>>();//发票和发票明细关系
//foreach (var group in groups)
//{
// int i = groups1.Count(p => p.LU == group.LU
// && p.PartCode == group.PartCode
// && p.BeginDate == group.BeginDate
@ -1360,51 +1347,63 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
// && group.BeginDate == group1.BeginDate
// && group.EndDate == group1.EndDate
// && group1.ContractDocID == group.ContractDocID
// && group1.Price == group.Price
// && group1.Qty == group.Qty
// && group1.Amt == group.Amt
// )
// {
// tempList.Add(group1);
// partCount++;//符合条件加入到零件中
// continue;
// }
// //partCount++;
// //if (partCount > 30)
// //{
// // continue;
// //}
// sum += group1.Amt;
// if (sum > 10000000)
// {
// break;
// }
// sum += group1.Amt;
// tempList.Add(group1);
// }
// invoiceMap.Add(invoiceBillNum, tempList);
// var query = from itm in groups1 //更新分组
// join itm1 in tempList
// on new { itm.LU, itm.BeginDate, itm.EndDate, itm.ContractDocID, itm.PartCode }
// equals new { itm1.LU, itm1.BeginDate, itm1.EndDate, itm1.ContractDocID, itm1.PartCode } into temp
// from tm in temp
// on
// new { itm.LU, itm.BeginDate, itm.EndDate, itm.ContractDocID, itm.PartCode, itm.Qty, itm.Price, itm.Amt }
// equals
// new { itm1.LU, itm1.BeginDate, itm1.EndDate, itm1.ContractDocID, itm1.PartCode, itm1.Qty, itm1.Price, itm1.Amt }
// into temp
// from tm in temp.DefaultIfEmpty()
// where tm == null
// select new TMEP_INV
// {
// LU = itm.LU,
// Amt = itm.Amt,
// Qty = itm.Qty,
// Price = itm.Price,
// BeginDate = itm.BeginDate,
// ContractDocID = itm.ContractDocID,
// EndDate = itm.EndDate
// EndDate = itm.EndDate,
// PartCode = itm.PartCode,
// };
// groups1 = query.ToList();
// }
// }
// if (invoiceMap.Count > 0)
// {
//}
//if (invoiceMap.Count > 0)
//{
// var groupList = new List<INVOICE_MAP_GROUP>();
// var notDetialList = new List<INVOICE_NOT_SETTLE>();
// var detailList = new List<INVOICE_WAIT_DETAIL>();
// var invlist = new List<INVOICE_GRP>();
// var salist = new List<TDetail>();
// var adjlist = new List<PUB_ADJ_DETAIL>();
// int count = invoiceMap.Keys.Count;//计算第几张发票计数器
// int i = 1;
// foreach (var group in invoiceMap)
// {
// var key = group.Key;//发票票号
@ -1412,9 +1411,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
// //反向查找结算数据
// var query = from itm in dtos
// join itm1 in ls
// on new { itm.LU, itm.PartCode, itm.BeginDate, itm.EndDate } equals new { itm1.LU, itm1.PartCode, itm1.BeginDate, itm1.EndDate }
// on new { itm.LU, itm.PartCode, itm.BeginDate, itm.EndDate, itm.ContractDocID } equals new { itm1.LU, itm1.PartCode, itm1.BeginDate, itm1.EndDate, itm1.ContractDocID }
// join itm2 in p_list on new { itm.PartCode, itm.PN, itm.SettleDate } equals new { itm2.PartCode, itm2.PN, itm2.SettleDate }
// select itm2;
// select itm2;//反向更新可计算数据
// foreach (var itm in query)
// {
// itm.InvbillNum = key;
@ -1431,7 +1430,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
// foreach (var itm in query1)
// {
// itm.InvBillNum = key;
// itm.InvGroupNum = dtos.FirstOrDefault().InvGroupNum;
// adjlist.Add(itm);
// }
// }
@ -1460,30 +1458,67 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
// {
// detailList.AddRange(_entityDetailList);
// }
// List<tempAmt1> amtList = new List<tempAmt1>();
// foreach (var itm in detailList)
// #region 发票不能结算的明细
// var innotls = new List<INVOICE_NOT_SETTLE>();
// var sq = query.GroupBy(p => new { p.LU, p.GroupNum })
// .Select(p => new { version = p_version, LU = p.Key.LU, Qty = p.Sum(itm => itm.Qty), InvBillNum = group.Key, GroupNum = p.Key.GroupNum });
// foreach (var sitm in sq)
// {
// amtList.Add(new tempAmt1()
// innotls.Add(new INVOICE_NOT_SETTLE(
// guid: GuidGenerator.Create(),
// version: p_version,
// invGroupNum: p_InvGroupNum,
// settleGroupNum: sitm.GroupNum,
// lU: sitm.LU,
// lU1: sitm.LU,
// extend1: "可结算",
// extend2: string.Empty,
// qty: sitm.Qty,
// p_invbillnum: group.Key
// ));
// }
// if (innotls.Count > 0)
// {
// Amt = itm.Amt,
// Tax = Math.Round(itm.Amt * 0.13m, 2),
// TaxAmt = itm.Amt + Math.Round(itm.Amt * 0.13m, 2)
// });
// notDetialList.AddRange(innotls);
// }
// decimal amt = amtList.Sum(k => k.Amt);//金额
// decimal txtAmt = amtList.Sum(k => k.TaxAmt);//税后金额
// decimal readAmt = amtList.Sum(k => k.Tax);//税额
// if (p_notlist != null && p_notlist.Count > 0)
// {
// var innotls1 = new List<INVOICE_NOT_SETTLE>();
// //decimal amt = detailList.Sum(k => k.Amt);//金额
// //decimal txtAmt = detailList.Sum(k => k.Amt) + Math.Round(detailList.Sum(k => k.Amt) * 0.13m, 2);//税后金额
// //decimal readAmt = Math.Round(detailList.Sum(k => k.Amt) * 0.13m, 2);//税额
// var grouplist = query.Select(p => p.GroupNum).ToList();
// var contractList = ls.Select(p => p.ContractDocID).Distinct();
// var _groupList = dtos.Where(p => contractList.Contains(p.ContractDocID)).GroupBy(p => new { p.GroupNum })
// .Select(p => new { GroupNum = p.Key.GroupNum, Amt = p.Sum(itm => itm.Amt) }).Distinct();
// List<INVOICE_MAP_GROUP> group1 = new List<INVOICE_MAP_GROUP>();
// var notlist = p_notlist.Where(p => grouplist.Contains(p.GroupNum));
// foreach (var nitm in notlist)
// {
// innotls1.Add(new INVOICE_NOT_SETTLE(
// guid: GuidGenerator.Create(),
// version: p_version,
// invGroupNum: p_InvGroupNum,
// settleGroupNum: nitm.GroupNum,
// lU: nitm.LU,
// lU1: nitm.LU,
// extend1: "不可结算",
// extend2: string.Empty,
// qty: nitm.Qty,
// p_invbillnum: group.Key
// ));
// }
// if (innotls.Count > 0)
// {
// notDetialList.AddRange(innotls1);
// }
// }
// #endregion
// decimal amt = ls.Sum(k => k.Amt);//金额
// decimal txtAmt = Math.Round(amt * 0.13m, 2);//税后金额
// decimal readAmt = amt + Math.Round(amt * 0.13m, 2);//税额
// //var contractList = ls.Select(p => p.ContractDocID).Distinct();
// var _groupList = query.GroupBy(p => new { p.GroupNum })
// .Select(p => new { GroupNum = p.Key.GroupNum, Amt = p.Sum(itm => Math.Round(itm.Qty * itm.Price, 2)) }).Distinct();
// List<INVOICE_MAP_GROUP> group1 = new List<INVOICE_MAP_GROUP>();
// foreach (var en in _groupList)
// {
// group1.Add(
@ -1501,7 +1536,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
// {
// groupList.AddRange(group1);
// }
// var lst = dtos.Where(p => !string.IsNullOrEmpty(p.Site)).ToList();
// string site = lst.FirstOrDefault().Site;
// string clientCode = string.Empty;
@ -1538,27 +1572,35 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
// );
// invbill.ClientCode = clientCode;
// invbill.CreationTime = DateTime.MinValue;
// invbill.Site = dtos.FirstOrDefault().Site;
// invbill.LastModificationTime = DateTime.Now;
// invbill.Site = dtos.FirstOrDefault().Site;
// invlist.Add(invbill);
// }
// await _repository.DbContext.BulkInsertAsync(invlist).ConfigureAwait(false);
// await _repository.DbContext.BulkInsertAsync(groupList).ConfigureAwait(false);
// await _repository.DbContext.BulkInsertAsync(detailList).ConfigureAwait(false);
// var dbcontxt = await _repository.GetDbContextAsync().ConfigureAwait(false);
// await dbcontxt.BulkInsertAsync(invlist).ConfigureAwait(false);
// await dbcontxt.BulkInsertAsync(groupList).ConfigureAwait(false);
// await dbcontxt.BulkInsertAsync(detailList).ConfigureAwait(false);
// await dbcontxt.BulkInsertAsync(notDetialList).ConfigureAwait(false);
// if (salist.Count > 0)
// {
// await _repository.DbContext.BulkUpdateAsync(salist).ConfigureAwait(false);
// await dbcontxt.BulkUpdateAsync(salist).ConfigureAwait(false);
// }
// if (adjlist.Count > 0)
// {
// await _repository.DbContext.BulkUpdateAsync(adjlist).ConfigureAwait(false);
// await dbcontxt.BulkUpdateAsync(adjlist).ConfigureAwait(false);
// }
// //await _repository.DbContext.BulkInsertAsync(notDetialList);
// _invls = invlist.Select(p => p.InvbillNum).ToList();
// }
// return _invls;
//}
//return _invls;
}
[UnitOfWork(false)]
public async Task<List<string>> FirstInvoice<TDetail>(List<TDetail> p_list, List<PUB_ADJ_DETAIL> p_adjlist, List<TEMP_CAN_SA_DETAIL> dtos, List<TEMP_NOT_SA_DETAIL> p_notlist, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType)
where TDetail : SA_CAN_BASE
@ -2762,7 +2804,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
/// <returns></returns>
/// <exception cref="BusinessException"></exception>
public async Task<bool> ReissueSecInvoice<TDetail>(List<TDetail> p_list, List<PUB_ADJ_DETAIL> p_adjlist, List<TEMP_CAN_SA_DETAIL> dtos, string p_OldInvBillNum, int p_version)
where TDetail : SA_CAN_BASE
where TDetail : SA_CAN_BASE, new()
{
if (!string.IsNullOrEmpty(p_OldInvBillNum))
{

Loading…
Cancel
Save