DcGetinSelf 方法:自动冲销负数实收款
public virtual void DcGetinSelf(DcParamDto dcParamDto)
{
//1 验证是否有需要自冲销的负数实收
if (dcParamDto.GetinList == null || dcParamDto.GetinList.Any(getin => getin.AfterRmbYe < 0) == false) return;
//2 循环负数款项开始小类自冲销
foreach (var fsGetin in dcParamDto.GetinList.Where(getin => getin.AfterRmbYe < 0))
{
int index = dcParamDto.GetinList.FindIndex(getin => getin.GetinGUID == fsGetin.GetinGUID);
//2.1 查询当前这笔负数款项的位置,从下向上冲减余额
foreach (var getin in dcParamDto.GetinList.Take(index).Where(getin => getin.SaleGUID == fsGetin.SaleGUID && ItemNameEquals(getin.ItemNameGUID, fsGetin.ItemNameGUID) && getin.AfterRmbYe > 0).Reverse())
{
if (fsGetin.AfterRmbYe == 0) continue;
//计算自冲销结果,冲减两笔款项的余额并记录两笔对冲过程
CaleDcGetinSelf(getin, fsGetin, dcParamDto);
}
//2.2 查询当前这笔负数款项的位置,从上向下冲减余额
foreach (var getin in dcParamDto.GetinList.Skip(index + 1).Where(getin => getin.SaleGUID == fsGetin.SaleGUID && ItemNameEquals(getin.ItemNameGUID, fsGetin.ItemNameGUID) && getin.AfterRmbYe > 0))
{
if (fsGetin.AfterRmbYe == 0) continue;
//计算自冲销结果,冲减两笔款项的余额并记录两笔对冲过程
CaleDcGetinSelf(getin, fsGetin, dcParamDto);
}
//2.3 查询当前这笔负数款项的位置,从下向上冲减余额
foreach (var getin in dcParamDto.GetinList.Take(index).Where(getin => getin.SaleGUID == fsGetin.SaleGUID && ItemTypeEquals(getin.ItemTypeGUID, fsGetin.ItemTypeGUID, getin.ItemNameGUID, fsGetin.ItemNameGUID, dcParamDto) && getin.AfterRmbYe > 0).Reverse())
{
if (fsGetin.AfterRmbYe == 0) continue;
//计算自冲销结果,冲减两笔款项的余额并记录两笔对冲过程
CaleDcGetinSelf(getin, fsGetin, dcParamDto);
}
//2.4 查询当前这笔负数款项的位置,从上向下冲减余额
foreach (var getin in dcParamDto.GetinList.Skip(index + 1).Where(getin => getin.SaleGUID == fsGetin.SaleGUID && ItemTypeEquals(getin.ItemTypeGUID, fsGetin.ItemTypeGUID, getin.ItemNameGUID, fsGetin.ItemNameGUID, dcParamDto) && getin.AfterRmbYe > 0))
{
if (fsGetin.AfterRmbYe == 0) continue;
//计算自冲销结果,冲减两笔款项的余额并记录两笔对冲过程
CaleDcGetinSelf(getin, fsGetin, dcParamDto);
}
}
}
翻译为java内容:
public void dcGetinSelf(DcParamDto dcParamDto) {
// 1 验证是否有需要自冲销的负数实收
if (dcParamDto.getGetinList() == null || dcParamDto.getGetinList().stream().anyMatch(getin -> getin.getAfterRmbYe() < 0) == false)
return;
// 2 循环负数款项开始小类自冲销
for (DcGetinDto fsGetin : dcParamDto.getGetinList().stream().filter(getin -> getin.getAfterRmbYe() < 0).collect(Collectors.toList())) {
int index = dcParamDto.getGetinList().indexOf(fsGetin);
// 2.1 查询当前这笔负数款项的位置,从下向上冲减余额
for (DcGetinDto getin : dcParamDto.getGetinList().stream().limit(index).filter(getin -> getin.getSaleGUID().equals(fsGetin.getSaleGUID()) && itemNameEquals(getin.getItemNameGUID(), fsGetin.getItemNameGUID()) && getin.getAfterRmbYe() > 0).collect(Collectors.toList())) {
if (fsGetin.getAfterRmbYe() == 0)
continue;
// 计算自冲销结果,冲减两笔款项的余额并记录两笔对冲过程
caleDcGetinSelf(getin, fsGetin, dcParamDto);
}
// 2.2 查询当前这笔负数款项的位置,从上向下冲减余额
for (DcGetinDto getin : dcParamDto.getGetinList().stream().skip(index + 1).filter(getin -> getin.getSaleGUID().equals(fsGetin.getSaleGUID()) && itemNameEquals(getin.getItemNameGUID(), fsGetin.getItemNameGUID()) && getin.getAfterRmbYe() > 0).collect(Collectors.toList())) {
if (fsGetin.getAfterRmbYe() == 0)
continue;
// 计算自冲销结果,冲减两笔款项的余额并记录两笔对冲过程
caleDcGetinSelf(getin, fsGetin, dcParamDto);
}
// 2.3 查询当前这笔负数款项的位置,从下向上冲减余额
for (DcGetinDto getin : dcParamDto.getGetinList().stream().limit(index).filter(getin -> getin.getSaleGUID().equals(fsGetin.getSaleGUID()) && itemTypeEquals(getin.getItemTypeGUID(), fsGetin.getItemTypeGUID(), getin.getItemNameGUID(), fsGetin.getItemNameGUID(), dcParamDto) && getin.getAfterRmbYe() > 0).collect(Collectors.toList())) {
if (fsGetin.getAfterRmbYe() == 0)
continue;
// 计算自冲销结果,冲减两笔款项的余额并记录两笔对冲过程
caleDcGetinSelf(getin, fsGetin, dcParamDto);
}
// 2.4 查询当前这笔负数款项的位置,从上向下冲减余额
for (DcGetinDto getin : dcParamDto.getGetinList().stream().skip(index + 1).filter(getin -> getin.getSaleGUID().equals(fsGetin.getSaleGUID()) && itemTypeEquals(getin.getItemTypeGUID(), fsGetin.getItemTypeGUID(), getin.getItemNameGUID(), fsGetin.getItemNameGUID(), dcParamDto) && getin.getAfterRmbYe() > 0).collect(Collectors.toList())) {
if (fsGetin.getAfterRmbYe() == 0)
continue;
// 计算自冲销结果,冲减两笔款项的余额并记录两笔对冲过程
caleDcGetinSelf(getin, fsGetin, dcParamDto);
}
}
}

原文地址: http://www.cveoy.top/t/topic/lZ8q 著作权归作者所有。请勿转载和采集!