|
|
|
@ -310,62 +310,71 @@ namespace DS.WMS.Core.Settlement.Method
|
|
|
|
|
var details2 = details.Where(x => x.RefId == doc.Id).OrderBy(x => x.ApplyAmount).ToList();
|
|
|
|
|
|
|
|
|
|
var rmbDetails = details2.FindAll(x => x.Currency == FeeCurrency.RMB_CODE);
|
|
|
|
|
var totalRMB = rmbDetails.Sum(x => x.ApplyAmount);
|
|
|
|
|
doc.SettlementRMB ??= totalRMB;
|
|
|
|
|
if (rmbDetails.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
var totalRMB = rmbDetails.Sum(x => x.ApplyAmount);
|
|
|
|
|
doc.SettlementRMB ??= totalRMB;
|
|
|
|
|
|
|
|
|
|
if (doc.SettlementRMB > totalRMB)
|
|
|
|
|
return DataResult<TEntity>.Failed("人民币结算金额不能大于剩余人民币金额");
|
|
|
|
|
if (doc.SettlementRMB > totalRMB)
|
|
|
|
|
return DataResult<TEntity>.Failed("人民币结算金额不能大于剩余人民币金额");
|
|
|
|
|
|
|
|
|
|
if (totalRMB < doc.SettlementRMB)
|
|
|
|
|
{
|
|
|
|
|
var rest = totalRMB - doc.SettlementRMB.GetValueOrDefault();
|
|
|
|
|
foreach (var detail in rmbDetails)
|
|
|
|
|
if (totalRMB != doc.SettlementRMB)
|
|
|
|
|
{
|
|
|
|
|
if (rest == 0)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
detail.ApplyAmount = detail.ApplyAmount - rest;
|
|
|
|
|
rest = detail.ApplyAmount - rest;
|
|
|
|
|
var rest = totalRMB - doc.SettlementRMB.GetValueOrDefault();
|
|
|
|
|
foreach (var detail in rmbDetails)
|
|
|
|
|
{
|
|
|
|
|
if (rest == 0)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
detail.ApplyAmount = detail.ApplyAmount - rest;
|
|
|
|
|
rest = detail.ApplyAmount - rest;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var usdDetails = details2.FindAll(x => x.Currency == FeeCurrency.USD_CODE);
|
|
|
|
|
var totalUSD = usdDetails.Sum(x => x.ApplyAmount);
|
|
|
|
|
doc.SettlementUSD ??= totalUSD;
|
|
|
|
|
if (usdDetails.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
var totalUSD = usdDetails.Sum(x => x.ApplyAmount);
|
|
|
|
|
doc.SettlementUSD ??= totalUSD;
|
|
|
|
|
|
|
|
|
|
if (doc.SettlementUSD > totalUSD)
|
|
|
|
|
return DataResult<TEntity>.Failed("美元结算金额不能大于剩余美元金额");
|
|
|
|
|
if (doc.SettlementUSD > totalUSD)
|
|
|
|
|
return DataResult<TEntity>.Failed("美元结算金额不能大于剩余美元金额");
|
|
|
|
|
|
|
|
|
|
if (totalUSD < doc.SettlementUSD)
|
|
|
|
|
{
|
|
|
|
|
var rest = totalUSD - doc.SettlementUSD.GetValueOrDefault();
|
|
|
|
|
foreach (var detail in usdDetails)
|
|
|
|
|
if (totalUSD != doc.SettlementUSD)
|
|
|
|
|
{
|
|
|
|
|
if (rest == 0)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
detail.ApplyAmount = detail.ApplyAmount - rest;
|
|
|
|
|
rest = detail.ApplyAmount - rest;
|
|
|
|
|
var rest = totalUSD - doc.SettlementUSD.GetValueOrDefault();
|
|
|
|
|
foreach (var detail in usdDetails)
|
|
|
|
|
{
|
|
|
|
|
if (rest == 0)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
detail.ApplyAmount = detail.ApplyAmount - rest;
|
|
|
|
|
rest = detail.ApplyAmount - rest;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var otherDetails = details2.FindAll(x => x.Currency != FeeCurrency.RMB_CODE && x.Currency != FeeCurrency.USD_CODE);
|
|
|
|
|
var total = rmbDetails.Sum(x => x.ApplyAmount);
|
|
|
|
|
doc.SettlementOther ??= total;
|
|
|
|
|
if (otherDetails.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
var total = rmbDetails.Sum(x => x.ApplyAmount);
|
|
|
|
|
doc.SettlementOther ??= total;
|
|
|
|
|
|
|
|
|
|
if (doc.SettlementOther > total)
|
|
|
|
|
return DataResult<TEntity>.Failed("其他结算金额不能大于剩余其他金额");
|
|
|
|
|
if (doc.SettlementOther > total)
|
|
|
|
|
return DataResult<TEntity>.Failed("其他结算金额不能大于剩余其他金额");
|
|
|
|
|
|
|
|
|
|
if (total < doc.SettlementOther)
|
|
|
|
|
{
|
|
|
|
|
var rest = total - doc.SettlementOther.GetValueOrDefault();
|
|
|
|
|
foreach (var detail in otherDetails)
|
|
|
|
|
if (total != doc.SettlementOther)
|
|
|
|
|
{
|
|
|
|
|
if (rest == 0)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
detail.ApplyAmount = detail.ApplyAmount - rest;
|
|
|
|
|
rest = detail.ApplyAmount - rest;
|
|
|
|
|
var rest = total - doc.SettlementOther.GetValueOrDefault();
|
|
|
|
|
foreach (var detail in otherDetails)
|
|
|
|
|
{
|
|
|
|
|
if (rest == 0)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
detail.ApplyAmount = detail.ApplyAmount - rest;
|
|
|
|
|
rest = detail.ApplyAmount - rest;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|