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);
        }
    }
}
DcGetinSelf 方法:自动冲销负数实收款

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

免费AI点我,无需注册和登录