liusheng
2023-07-27 4237cf7ce201652d7df7069dca3f3aac8b438a0d
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFundController.java
@@ -438,29 +438,37 @@
//        }
        List<ServiceFunddetail> serviceFunddetails = serviceFundVO.getServiceFunddetails();
//        serviceFunddetails.forEach(item -> item.setFundid(id));
        //taxBefore、taxAfter用来记录税前税后的总金额,不用管税率
        double taxBefore = 0.0;
        double taxAfter = 0.0;
        for (ServiceFunddetail serviceFunddetail : serviceFunddetails) {
            serviceFunddetail.setFundid(id);
            if (!serviceFunddetail.getTaxedamount().equals(Double.NaN) && !serviceFunddetail.getAmount().equals(Double.NaN)) {
            if (serviceFunddetail.getTaxedamount() != 0.0 && serviceFunddetail.getAmount() != 0.0 && serviceFunddetail.getTaxedamount() != null && serviceFunddetail.getTaxedamount() != null) {
                // 税前税后都不为空
                continue;
            } else if (!serviceFunddetail.getTaxedamount().equals(Double.NaN)) {
            } else if (serviceFunddetail.getTaxedamount() != 0.0 && serviceFunddetail.getTaxedamount() != null) {
                // 税后求税前
                Double taxationBefore = Double.valueOf(TaxtUtils.getTaxationBefore(BigDecimal.valueOf(serviceFunddetail.getTaxedamount())));
                // 税金
                String taxation = TaxtUtils.getTaxation(BigDecimal.valueOf(taxationBefore));
                serviceFunddetail.setAmount(Double.valueOf(taxationBefore));
                serviceFunddetail.setTaxamount(Double.parseDouble(taxation));
            } else if (!serviceFunddetail.getAmount().equals(Double.NaN)) {
            } else if (serviceFunddetail.getAmount() != 0.0 && serviceFunddetail.getAmount() != null) {
                // 税前求税后
                double tax = Double.parseDouble(TaxtUtils.getTaxation(BigDecimal.valueOf(serviceFunddetail.getAmount())));
                BigDecimal taxAfterMoney = BigDecimal.valueOf(serviceFunddetail.getAmount()).subtract(BigDecimal.valueOf(tax));
                serviceFunddetail.setTaxamount(tax);
                serviceFunddetail.setTaxedamount(taxAfterMoney.doubleValue());
            }
            taxBefore = taxBefore + serviceFunddetail.getAmount();
            taxAfter = taxAfter + serviceFunddetail.getTaxedamount();
        }
        //将税前、税后金额更新到fund表中
        serviceFundVO.setPretaxcost(taxBefore);
        serviceFundVO.setTaxedcost(taxAfter);
        serviceFundService.updateById(serviceFundVO);
        //将计算好的数据,保存到detail表中
        serviceFunddetailService.saveBatch(serviceFunddetails);
        return AjaxResult.success(id);
    }
@@ -765,16 +773,34 @@
        List<Double> sqljList = new ArrayList<>();
        List<Double> ksljList = new ArrayList<>();
        List<Double> shljList = new ArrayList<>();
        Map<String, Optional<ServiceFunddetailAssort>> result = fd.stream().collect(Collectors.groupingBy(ServiceFunddetail::getSubjecttypename, Collectors.mapping(obj -> new ServiceFunddetailAssort(obj.getAmount(), obj.getTaxamount(), obj.getTaxedamount()), Collectors.reducing(ServiceFunddetailAssort::add))));
        result.forEach((FWFL, serviceFunddetailAssort) -> {
        //根据”科目类型名称“,来计算税前总和,税金总和,税后总和
        Map<String, ServiceFunddetailAssort> funddetailMap = new HashMap<>();
        for (ServiceFunddetail serviceFunddetail : fd) {
            boolean b = funddetailMap.containsKey(serviceFunddetail.getSubjecttypename());
            if (b == true) {
                ServiceFunddetailAssort serviceFunddetailAssort = funddetailMap.get(serviceFunddetail.getSubjecttypename());
                serviceFunddetailAssort.setKSXJ(serviceFunddetailAssort.getKSXJ() + serviceFunddetail.getTaxamount());
                serviceFunddetailAssort.setSQXJ(serviceFunddetailAssort.getSQXJ() + serviceFunddetail.getAmount());
                serviceFunddetailAssort.setSHXJ(serviceFunddetailAssort.getSHXJ() + serviceFunddetail.getTaxedamount());
            } else {
                funddetailMap.put(serviceFunddetail.getSubjecttypename(), new ServiceFunddetailAssort());
                ServiceFunddetailAssort serviceFunddetailAssort = funddetailMap.get(serviceFunddetail.getSubjecttypename());
                serviceFunddetailAssort.setKSXJ(serviceFunddetailAssort.getKSXJ() + serviceFunddetail.getTaxamount());
                serviceFunddetailAssort.setSQXJ(serviceFunddetailAssort.getSQXJ() + serviceFunddetail.getAmount());
                serviceFunddetailAssort.setSHXJ(serviceFunddetailAssort.getSHXJ() + serviceFunddetail.getTaxedamount());
            }
        }
        funddetailMap.forEach((FWFL, serviceFunddetailAssort) -> {
            Map<String, Object> map1 = new HashMap<String, Object>();
            map1.put("FWFL", FWFL);
            map1.put("SQXJ", serviceFunddetailAssort.get().getSQXJ());
            map1.put("KSXJ", serviceFunddetailAssort.get().getKSXJ());
            map1.put("SHXJ", serviceFunddetailAssort.get().getSHXJ());
            sqljList.add(serviceFunddetailAssort.get().getSQXJ());
            ksljList.add(serviceFunddetailAssort.get().getKSXJ());
            shljList.add(serviceFunddetailAssort.get().getSHXJ());
            map1.put("SQXJ", serviceFunddetailAssort.getSQXJ());
            map1.put("KSXJ", serviceFunddetailAssort.getKSXJ());
            map1.put("SHXJ", serviceFunddetailAssort.getSHXJ());
            sqljList.add(serviceFunddetailAssort.getSQXJ());
            ksljList.add(serviceFunddetailAssort.getKSXJ());
            shljList.add(serviceFunddetailAssort.getSHXJ());
            lists.add(map1);
        });