java数据运算

@Override
public List<DiffRiskInfoBO> getDiffRiskInfo(String yyyyMMdd) {

    String year;
    String month;
    if (StringUtils.isEmpty(yyyyMMdd)) {
        yyyyMMdd = CalendarUtil.curretDate();
    }
    year = yyyyMMdd.substring(0, yyyyMMdd.length() - 4); //当前年份
    month = yyyyMMdd.substring(4, yyyyMMdd.length() - 2); // 当前月份

    String lastMonthDay; // 上个月的最后一天 yyyyMMdd
    if (Integer.parseInt(month) == 1) { // 一月份则取上一年的最后一天的日期
        lastMonthDay = CalendarUtil.getLastDayOfMonth(Integer.parseInt(year) - 1, Integer.parseInt("12"));
        year = lastMonthDay.substring(0, yyyyMMdd.length() - 4);
    } else {
        lastMonthDay = CalendarUtil.getLastDayOfMonth(Integer.parseInt(year), Integer.parseInt(month) - 1);
    }
    String date = lastMonthDay.substring(0, lastMonthDay.length() - 2);

    // 获取过渡科目信息集合
    List<ZGDKMDataBO> zgdkmDataBOList = zGdkmDataServiceImpl.selectGdkmDataByDate(year);

    // 校验数据
    if (CollectionUtils.isEmpty(zgdkmDataBOList) || 12 != zgdkmDataBOList.size()) { // 如果year年的过度科目数据并未初始化、则在接口中调用抽数接口完成数据初始化
        processDiffRiskInfo(yyyyMMdd);
        zgdkmDataBOList = zGdkmDataServiceImpl.selectGdkmDataByDate(year);
    }

    // 初始化合计数据
    SimpleDateFormat sdfYearMonth = new SimpleDateFormat("yyyyMM");
    DiffRiskInfoBO totalDiffRisk = new DiffRiskInfoBO(); // 合计差异风险信息
    DiffRiskInfoBO monthDiffRisk = new DiffRiskInfoBO(); // 月均差异风险信息

    BigDecimal lastYearPackages = BigDecimal.ZERO; // 用来合计上一年的差异包数
    BigDecimal diffPackages = BigDecimal.ZERO; // 用来合计差异包数
    BigDecimal totalPackages = BigDecimal.ZERO; // 用来合计差异总包数
    BigDecimal packageDiffRate = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP); // 合计包差异率
    BigDecimal diffAmount = BigDecimal.ZERO; // 合计差异金额
    BigDecimal totalAmount = BigDecimal.ZERO; // 合计差异总金额
    BigDecimal amountDiffRate = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP); // 合计差异金额占比
    BigDecimal yoyGrowthRate = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP); // 合计同比增长率
    BigDecimal chainGrowthRate = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP); // 合计环比增长率
    BigDecimal diffDays = BigDecimal.ZERO; // 合计月度差异天数
    BigDecimal subsidiaryNum = BigDecimal.ZERO; // 合计差异分公司数
    BigDecimal sourcSysNum = BigDecimal.ZERO; // 合计来源系统数
    BigDecimal manualVoucherNum = BigDecimal.ZERO; // 合计手工凭证数
    BigDecimal totalVoucherNum = BigDecimal.ZERO; // 合计总凭证数
    BigDecimal manualVoucherProportion = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP); // 合计手工凭证占比

    // 转换过渡科目出参vo,处理数据
    List<DiffRiskInfoBO> diffRiskInfoBOList = new ArrayList<>();
    if (!CollectionUtils.isEmpty(zgdkmDataBOList)) {
        for (ZGDKMDataBO item : zgdkmDataBOList) {

            DiffRiskInfoBO diffRiskInfoBO = new DiffRiskInfoBO();
            try {
                diffRiskInfoBO.setMonths(item.getMonat());
                diffRiskInfoBO.setDate(item.getGjanhr() + item.getMonat()); // 设置日期
                diffRiskInfoBO.setLastYearPackages(item.getLastYearPackages());

if ((Integer.parseInt(diffRiskInfoBO.getDate()) - Integer.parseInt(date)) <= 0) {
                    BeanUtils.copyProperties(item, diffRiskInfoBO);
                    diffRiskInfoBO.setDiffDays(item.getDiffDays()); // 差异天数
                    diffRiskInfoBO.setTotalDays(CalendarUtil.getMonthDays(sdfYearMonth.parse(item.getGjanhr() + item.getMonat()))); // 设置当月总天数
                    diffRiskInfoBO.setManualVoucherNum(item.getZsgpz()); // 手工凭证数
                    diffRiskInfoBO.setTotalVoucherNum(item.getZzpz()); // 总凭证数
                    diffRiskInfoBO.setSubsidiaryNum(item.getSubCompanyNum()); // 差异子公司数
                    diffRiskInfoBO.setSourcSysNum(item.getSourceSysNum()); //来源系统数
                    if (null != item.getPackageDiffRate()) {
                        diffRiskInfoBO.setPackageDiffRate(item.getPackageDiffRate() + "%"); //包差异率
                        packageDiffRate = packageDiffRate.add(item.getPackageDiffRate()); //累加包差异率
                    }
                    if (null != item.getAmountDiffRate()) {
                        diffRiskInfoBO.setAmountDiffRate(item.getAmountDiffRate() + "%"); // 金额差异率
                        amountDiffRate = amountDiffRate.add(item.getAmountDiffRate()); //累加金额差异率
                    }
                    if (null != item.getYoyGrowthRate()) {
                        diffRiskInfoBO.setYoyGrowthRate(item.getYoyGrowthRate() + "%"); // 差异包同比增长率
                        yoyGrowthRate = yoyGrowthRate.add(item.getYoyGrowthRate()); //累加差异包同比增长率
                    }
                    if (null != item.getChainGrowthRate()) {
                        diffRiskInfoBO.setChainGrowthRate(item.getChainGrowthRate() + "%"); // 差异包环比增长率
                        chainGrowthRate = chainGrowthRate.add(item.getChainGrowthRate()); // 累加差异包环比增长率
                    }
                    if (null != item.getManualVoucherRate()) {
                        diffRiskInfoBO.setManualVoucherProportion(item.getManualVoucherRate() + "%"); // 手工凭证占比
                        manualVoucherProportion = manualVoucherProportion.add(item.getManualVoucherRate()); // 累加手工凭证占比
                    }
                }

                // 累加统计全年的数据
                if (StringUtils.isNotEmpty(item.getLastYearPackages())) {
                    lastYearPackages = lastYearPackages.add(new BigDecimal(item.getLastYearPackages()));
                }
                if (StringUtils.isNotEmpty(item.getDiffPackages())) {
                    diffPackages = diffPackages.add(new BigDecimal(item.getDiffPackages()));
                }
                if (StringUtils.isNotEmpty(item.getTotalPackages())) {
                    totalPackages = totalPackages.add(new BigDecimal(item.getTotalPackages()));
                }
                if (item.getDiffAmount() != null) {
                    diffAmount = diffAmount.add(item.getDiffAmount());
                }
                if (item.getTotalAmount() != null) {
                    totalAmount = totalAmount.add(item.getTotalAmount());
                }
                if (StringUtils.isNotEmpty(item.getDiffDays())) {
                    diffDays = diffDays.add(new BigDecimal(item.getDiffDays()));
                }
                if (StringUtils.isNotEmpty(item.getSubCompanyNum())) {
                    subsidiaryNum = subsidiaryNum.add(new BigDecimal(item.getSubCompanyNum()));
                }
                if (StringUtils.isNotEmpty(item.getSourceSysNum())) {
                    sourcSysNum = sourcSysNum.add(new BigDecimal(item.getSourceSysNum()));
                }
                if (StringUtils.isNotEmpty(item.getZsgpz())) {
                    manualVoucherNum = manualVoucherNum.add(new BigDecimal(item.getZsgpz()));
                }
                if (StringUtils.isNotEmpty(item.getZzpz())) {
                    totalVoucherNum = totalVoucherNum.add(new BigDecimal(item.getZzpz()));
                }
                diffRiskInfoBOList.add(diffRiskInfoBO);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
    }
    // 按照月份排序
    Collections.sort(diffRiskInfoBOList);

    // 处理全年合计数据
    totalDiffRisk.setMonths("全年合计");
    totalDiffRisk.setLastYearPackages(lastYearPackages + "");
    totalDiffRisk.setDiffPackages(diffPackages + "");
    totalDiffRisk.setTotalPackages(totalPackages + "");
    totalDiffRisk.setPackageDiffRate(packageDiffRate + "%");
    totalDiffRisk.setDiffAmount(diffAmount);
    totalDiffRisk.setTotalAmount(totalAmount);
    totalDiffRisk.setAmountDiffRate(amountDiffRate + "%");
    totalDiffRisk.setYoyGrowthRate(yoyGrowthRate + "%");
    totalDiffRisk.setChainGrowthRate(chainGrowthRate + "%");
    totalDiffRisk.setDiffDays(diffDays + "");
    totalDiffRisk.setTotalDays(LocalDate.of(Integer.parseInt(year), 1, 1).lengthOfYear() + "");
    totalDiffRisk.setSubsidiaryNum(subsidiaryNum + "");
    totalDiffRisk.setSourcSysNum(sourcSysNum + "");
    totalDiffRisk.setManualVoucherNum(manualVoucherNum + "");
    totalDiffRisk.setTotalVoucherNum(totalVoucherNum + "");
    totalDiffRisk.setManualVoucherProportion(manualVoucherProportion + "%");

    // 处理月均数据
    BigDecimal nowMonth = new BigDecimal(lastMonthDay.substring(lastMonthDay.length() - 4, lastMonthDay.length() - 2));
    monthDiffRisk.setMonths("月均");
    monthDiffRisk.setLastYearPackages(lastYearPackages.divide(new BigDecimal("12"), 0, BigDecimal.ROUND_HALF_UP) + ""); //计算上一年差异包数的月均值、固定全年合计包数除以12
    monthDiffRisk.setDiffPackages(diffPackages.divide(nowMonth, 0, BigDecimal.ROUND_HALF_UP) + "");
    monthDiffRisk.setTotalPackages(totalPackages.divide(nowMonth, 0, BigDecimal.ROUND_HALF_UP) + "");
    monthDiffRisk.setPackageDiffRate(packageDiffRate.divide(nowMonth, 2, BigDecimal.ROUND_HALF_UP) + "%");
    monthDiffRisk.setDiffAmount(diffAmount.divide(nowMonth, 2, BigDecimal.ROUND_HALF_UP));
    monthDiffRisk.setTotalAmount(totalAmount.divide(nowMonth, 2, BigDecimal.ROUND_HALF_UP));
    monthDiffRisk.setAmountDiffRate(amountDiffRate.divide(nowMonth, 2, BigDecimal.ROUND_HALF_UP) + "%");
    monthDiffRisk.setYoyGrowthRate(yoyGrowthRate.divide(nowMonth, 2, BigDecimal.ROUND_HALF_UP) + "%");
    monthDiffRisk.setChainGrowthRate(chainGrowthRate.divide(nowMonth, 2, BigDecimal.ROUND_HALF_UP) + "%");
    monthDiffRisk.setDiffDays(diffDays.divide(nowMonth, 0, BigDecimal.ROUND_HALF_UP) + "");
    monthDiffRisk.setTotalDays("30");
    monthDiffRisk.setSubsidiaryNum(subsidiaryNum.divide(nowMonth, 0, BigDecimal.ROUND_HALF_UP) + "");
    monthDiffRisk.setSourcSysNum(sourcSysNum.divide(nowMonth, 0, BigDecimal.ROUND_HALF_UP) + "");
    monthDiffRisk.setManualVoucherNum(manualVoucherNum.divide(nowMonth, 0, BigDecimal.ROUND_HALF_UP) + "");
    monthDiffRisk.setTotalVoucherNum(totalVoucherNum.divide(nowMonth, 0, BigDecimal.ROUND_HALF_UP) + "");
    monthDiffRisk.setManualVoucherProportion(manualVoucherProportion.divide(nowMonth, 2, BigDecimal.ROUND_HALF_UP) + "%");

    // 将全年合计数据和月均数据添加到出参的集合中

    diffRiskInfoBOList.add(totalDiffRisk);
    diffRiskInfoBOList.add(monthDiffRisk);

    return diffRiskInfoBOList;
}
 

@Override
public void processDiffRiskInfo(String yyyyMMdd) {

    // 入参校验
    if (StringUtils.isEmpty(yyyyMMdd)) { // 若不传参数、则默认取当前时间(yyyyMMdd)为查询条件
        yyyyMMdd = CalendarUtil.curretDate();
    }

    String year = yyyyMMdd.substring(0, yyyyMMdd.length() - 4);
    String month = yyyyMMdd.substring(4, yyyyMMdd.length() - 2);
    String lastMonthDay; // 上个月的最后一天 yyyyMMdd
    if (Integer.parseInt(month) == 1) { // 一月份则取上一年的最后一天
        lastMonthDay = CalendarUtil.getLastDayOfMonth(Integer.parseInt(year) - 1, Integer.parseInt("12"));
        year = lastMonthDay.substring(0, lastMonthDay.length() - 4);
    } else {
        lastMonthDay = CalendarUtil.getLastDayOfMonth(Integer.parseInt(year), Integer.parseInt(month) - 1);
    }

    // 1.校验数据是否完成初始化
    int count = zGdkmDataServiceImpl.selectGdkmDataCount(year);

    if (count != 12) { //若未完成初始化,需要先初始化数据
        // 删除表中year的数据
        ZGDKMDataBO zgdkmData = new ZGDKMDataBO();
        zgdkmData.setGjanhr(year);
        zGdkmDataServiceImpl.deleteGdkmData(zgdkmData);
        // 获取上一年的差异包数信息
        Map<String, List<String>> map = CommConst.GDKM_DATA_MAP;
        List<String> diffPackagesDataList = map.get(Integer.parseInt(year) - 1 + "");

        List<ZGDKMDataBO> zgdkmDataBOList = new ArrayList<>();
        int i = 1;
        for (String s : diffPackagesDataList) {
            ZGDKMDataBO zgdkmDataBO = new ZGDKMDataBO();
            zgdkmDataBO.setLastYearPackages(s);
            zgdkmDataBO.setGjanhr(year);
            zgdkmDataBO.setMonat(String.format("%02d", i));
            zgdkmDataBOList.add(zgdkmDataBO);
            i++;
        }
        zGdkmDataServiceImpl.insertGdkmData(zgdkmDataBOList);
    }

    // 2.获取数据(sap数据、过渡科目差异数据)
    List<DiffRiskInfoBO> diffRiskInfoBOList = new ArrayList<>();
    List<DiffRiskInfoBO> diffList = new ArrayList<>();

    // 封装调用SAP接口的入参
    GDKMReqVO reqVO = new GDKMReqVO();
    reqVO.setDate(lastMonthDay);
    reqVO.setType(CommConst.GDKM_QUERY_TYPE);

    // 调用SAP接口
    GDKMDataInfoVO gdkmData = sapSserviceImpl.getGDKMData(reqVO);
    if (CommConst.GDKM_STATE_FALSE.equals(gdkmData.getState())) { //若调用失败
        // todo 缺少处理失败调用的逻辑
        log.info("调用sap接口获取过渡科目数据失败!");
    }
    // 获取SAP接口返回数据
    List<GDKMInfoVO> gdkmInfoList = gdkmData.getGdkmInfoList(); //过渡科目数据信息集合

    System.out.println("=======" + gdkmInfoList + "=======");

    // 获取差异风险数据集合
    ConditionVo data = new ConditionVo();
    String reqYear = lastMonthDay.substring(0, lastMonthDay.length() - 4);
    data.setBldat(reqYear);
    data.setBudat(lastMonthDay);
    diffRiskInfoBOList = diffMapper.getDiffRiskInfo(data);
    diffList = diffMapper.getDiffBOInfo(data);

    for (int i = 0; i < diffRiskInfoBOList.size(); i++) {
        for (int j = 0; j < diffList.size(); j++) {
            String BOOKDATE = diffRiskInfoBOList.get(i).getDate();
            String MINTIME = diffList.get(j).getDate();

            if(BOOKDATE.equals(MINTIME)){
                diffRiskInfoBOList.get(i).setDiffDays(diffList.get(j).getDiffDays());
                diffRiskInfoBOList.get(i).setSourcSysNum(diffList.get(j).getSourcSysNum());
                diffRiskInfoBOList.get(i).setSubsidiaryNum(diffList.get(j).getSubsidiaryNum());
            }
        }
    }

// 校验差异风险数据是否12个月的信息都存在、若不存在则补全
    checkMonths(diffRiskInfoBOList, data.getBudat().substring(0, data.getBudat().length() - 4));

    // 3.处理落库数据
    List<ZGDKMDataBO> zgdkmDataBOList = new ArrayList<>();

    // 按照月份排序
    Collections.sort(diffRiskInfoBOList);
    String lastMonthPackages = null; //上个月的差异包数

    // 设置每月的总天数、总包数、总金额、手工凭证数、凭证总数以上一年的差异包数
    try {
        for (DiffRiskInfoBO item : diffRiskInfoBOList) {
            ZGDKMDataBO zgdkmDataBO = new ZGDKMDataBO();
            String mon = item.getDate().substring(item.getDate().length() - 2, item.getDate().length());

            // 封装BO
            zgdkmDataBO.setGjanhr(year); //年份
            zgdkmDataBO.setMonat(mon); //月份
            zgdkmDataBO.setLastYearPackages(getPackeageNumByYearAndMonth(mon, Integer.parseInt(year) - 1 + "")); //上一年同月差异包数
            zgdkmDataBO.setLastMonthPackages(lastMonthPackages); // 上一个月差异包数
            if ("01".equals(mon)) { //一月份的需要用上一年最后一个月的数据
                zgdkmDataBO.setLastMonthPackages(getPackeageNumByYearAndMonth("12", Integer.parseInt(year) - 1 + "")); // 一个月差异包数
            }
            processGdkmDataBO(zgdkmDataBO, item, gdkmInfoList, mon, year); //处理数据,并set差异总金额、总包数、手工凭证数、凭证数,

            lastMonthPackages = zgdkmDataBO.getDiffPackages(); //因已经按照月份排序,记录本月的差异包数用来给下个月的lastMonthPackages赋值

            // 计算包差异率、同比增长率、环比增长率、差异金额占比、手工凭证占比
            if (StringUtils.isNotEmpty(zgdkmDataBO.getDiffPackages()) && StringUtils.isNotEmpty(zgdkmDataBO.getTotalPackages()) && !"0".equals(zgdkmDataBO.getTotalPackages())) { // 计算包差异率
                zgdkmDataBO.setPackageDiffRate(DataUtils.perToDecimal(DataUtils.division(Integer.parseInt(zgdkmDataBO.getDiffPackages()), Integer.parseInt(zgdkmDataBO.getTotalPackages())))); // 包差异率
            }
            if (StringUtils.isNotEmpty(zgdkmDataBO.getDiffPackages()) && StringUtils.isNotEmpty(zgdkmDataBO.getLastYearPackages()) && !"0".equals(zgdkmDataBO.getLastYearPackages())) { // 计算同比增长率
                zgdkmDataBO.setYoyGrowthRate(DataUtils.perToDecimal(DataUtils.division((Integer.parseInt(zgdkmDataBO.getDiffPackages()) - Integer.parseInt(zgdkmDataBO.getLastYearPackages())), Integer.parseInt(zgdkmDataBO.getLastYearPackages())))); //同比增长率
            }
            if (StringUtils.isNotEmpty(zgdkmDataBO.getDiffPackages()) && StringUtils.isNotEmpty(zgdkmDataBO.getLastMonthPackages()) && !"0".equals(zgdkmDataBO.getLastMonthPackages())) { // 计算环比增长率
                zgdkmDataBO.setChainGrowthRate(DataUtils.perToDecimal(DataUtils.division((Integer.parseInt(zgdkmDataBO.getDiffPackages()) - Integer.parseInt(zgdkmDataBO.getLastMonthPackages())), Integer.parseInt(zgdkmDataBO.getLastMonthPackages())))); //环比增长率
            }
            if (zgdkmDataBO.getDiffAmount() != null && zgdkmDataBO.getTotalAmount() != null && 0 != BigDecimal.ZERO.compareTo(zgdkmDataBO.getTotalAmount())) { // 计算差异金额占比
                zgdkmDataBO.setAmountDiffRate(zgdkmDataBO.getDiffAmount().multiply(new BigDecimal(100)).divide(zgdkmDataBO.getTotalAmount(), 2, BigDecimal.ROUND_HALF_UP)); // 差异金额占比
            }
            if (StringUtils.isNotEmpty(zgdkmDataBO.getZsgpz()) && StringUtils.isNotEmpty(zgdkmDataBO.getZzpz()) && !"0".equals(zgdkmDataBO.getZzpz())) { // 计算手工凭证占比
                zgdkmDataBO.setManualVoucherRate(DataUtils.perToDecimal(DataUtils.division(Integer.parseInt(zgdkmDataBO.getZsgpz()), Integer.parseInt(zgdkmDataBO.getZzpz())))); // 手工凭证占比
            }
            zgdkmDataBOList.add(zgdkmDataBO);
        }

        // 4. 落库ZGDKMDATA
        zGdkmDataServiceImpl.updateGdkmData(zgdkmDataBOList);

    } catch (Exception e) {
        e.printStackTrace();
    }
}
 

/**
 * @param diffRiskInfoBOList
 * @describe 校验是否12个月的信息都存在、若不存在则补全
 */
private void checkMonths(List<DiffRiskInfoBO> diffRiskInfoBOList, String year) {

    List<String> monthlist = Stream.of("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12").collect(Collectors.toList());

    // 获取截取date(yyyyMM)日期字段 月份值的集合
    List<String> dateList = diffRiskInfoBOList.stream().map(e -> e.getDate().substring(e.getDate().length() - 2, e.getDate().length())).collect(Collectors.toList());

    // 取两个集合的差集
    monthlist.removeAll(dateList);
    if (!CollectionUtils.isEmpty(monthlist)) { // 若差集不为空则,补全缺少的月份
        for (String month : monthlist) {
            DiffRiskInfoBO diffRiskInfoBO = new DiffRiskInfoBO();
            // 初始化数据
            diffRiskInfoBO.setDate(year + month);
            diffRiskInfoBOList.add(diffRiskInfoBO);
        }
    }
}

/**
 * 计算往年同期包数
 *
 * @param month
 * @param year
 * @return
 */
private String getPackeageNumByYearAndMonth(String month, String year) {

    Map<String, List<String>> map = CommConst.GDKM_DATA_MAP;

    List<String> gdkmDataLists = map.get(year);

    if (CollectionUtils.isEmpty(gdkmDataLists)) {
        return "0";
    }

    BigDecimal packageNum = BigDecimal.ZERO; // 初始化包总数

    if (StringUtils.isEmpty(gdkmDataLists.get(Integer.parseInt(month) - 1))) {
        return packageNum + "";
    }

    return gdkmDataLists.get(Integer.parseInt(month) - 1);
}

/**
 * 处理数据:统计总金额、总包数、手工凭证数、凭证数,并set
 *
 * @param zgdkmDataBO
 * @param gdkmInfoList
 * @param month
 * @param year
 * @return
 */
private void processGdkmDataBO(ZGDKMDataBO zgdkmDataBO, DiffRiskInfoBO diffRiskInfoBO, List<GDKMInfoVO> gdkmInfoList, String month, String year) {

    if (null == zgdkmDataBO) {
        return;
    }

    if (CollectionUtils.isEmpty(gdkmInfoList)) {
        return;
    }

    // 初始化过度科目数据
    zgdkmDataBO.setDiffDays("0"); // 差异天数
    zgdkmDataBO.setDiffAmount(BigDecimal.ZERO); // 差异金额
    zgdkmDataBO.setDiffPackages("0"); // 差异包数
    zgdkmDataBO.setSourceSysNum("0"); // 来源系统数
    zgdkmDataBO.setSubCompanyNum("0"); // 来源分公司数
    if (null != diffRiskInfoBO) {
        if (StringUtils.isNotEmpty(diffRiskInfoBO.getDiffDays())) {
            zgdkmDataBO.setDiffDays(diffRiskInfoBO.getDiffDays()); // 差异天数
        }
        if (null != diffRiskInfoBO.getDiffAmount()) {
            zgdkmDataBO.setDiffAmount(diffRiskInfoBO.getDiffAmount()); // 差异金额
        }
        if (StringUtils.isNotEmpty(diffRiskInfoBO.getSourcSysNum())) {
            zgdkmDataBO.setSourceSysNum(diffRiskInfoBO.getSourcSysNum()); // 来源系统数
        }
        if (StringUtils.isNotEmpty(diffRiskInfoBO.getSubsidiaryNum())) {
            zgdkmDataBO.setSubCompanyNum(diffRiskInfoBO.getSubsidiaryNum()); // 来源分公司数
        }
        if (StringUtils.isNotEmpty(diffRiskInfoBO.getDiffPackages())) {
            zgdkmDataBO.setDiffPackages(diffRiskInfoBO.getDiffPackages()); // 差异包数
        }
    }

    List<GDKMInfoVO> gdkmInfoVOInfoVOList = gdkmInfoList.stream().filter(item -> item.getYear().equals(year) && item.getMonth().equals(month)).collect(Collectors.toList());

    if (CollectionUtils.isEmpty(gdkmInfoVOInfoVOList)) {
        return;
    }

    BigDecimal totalAmount = BigDecimal.ZERO; // 初始化差异总金额
    BigDecimal totalPackageNum = BigDecimal.ZERO; // 初始化差异包数
    BigDecimal totalVoucherNum = BigDecimal.ZERO; // 初始化总凭证数
    BigDecimal manualVoucherNum = BigDecimal.ZERO; // 初始化手工凭证数

    // 正常情况只有对应的月份数据只有一个,gdkmInfoVOInfoVOList.size() == 1
    for (GDKMInfoVO gdkmInfoVO : gdkmInfoVOInfoVOList) {

        totalPackageNum = totalPackageNum.add(new BigDecimal(gdkmInfoVO.getPackage22()));
        totalPackageNum = totalPackageNum.add(new BigDecimal(gdkmInfoVO.getPackage23()));

        totalAmount = totalAmount.add(gdkmInfoVO.getAmount22());
        totalAmount = totalAmount.add(gdkmInfoVO.getAmount23());
        totalVoucherNum = totalVoucherNum.add(new BigDecimal(gdkmInfoVO.getTotalVoucherNum()));
        manualVoucherNum = manualVoucherNum.add(new BigDecimal(gdkmInfoVO.getManualVoucherNum()));

        // 正常情况只有对应的月份数据只有一个
        zgdkmDataBO.setZbs1(gdkmInfoVO.getPackage23()); //23科目差异总包数
        zgdkmDataBO.setZdmbtr1(gdkmInfoVO.getAmount23()); //23科目差异总金额
        zgdkmDataBO.setZbs2(gdkmInfoVO.getPackage22()); //22科目差异总包数
        zgdkmDataBO.setZdmbtr2(gdkmInfoVO.getAmount22()); //22科目差异总金额
    }

    zgdkmDataBO.setTotalPackages(totalPackageNum + ""); // 总包数
    zgdkmDataBO.setTotalAmount(totalAmount); // 总金额
    zgdkmDataBO.setZzpz(totalVoucherNum + ""); // 凭证总数
    zgdkmDataBO.setZsgpz(manualVoucherNum + ""); // 手工凭证数
}
 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值