liusheng
2024-06-01 1653bd25056096a6f5d434670f7988977774fc25
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFunddetailServiceImpl.java
@@ -276,17 +276,33 @@
        if (CollectionUtils.isEmpty(serviceFunddetails)) {
            throw new BaseException("算税条件为空,请检查后,再进行计算");
        }
        // 用于临时保存已经算好的"费用详情数据"
        List<ServiceFunddetail> temporarySave = new ArrayList<>();
        // 用于记录序号
        Map<String, Long> xhMap = new HashMap<>();
        // 先对serviceFunddetails排序
        Comparator<ServiceFunddetail> customComparator = Comparator.comparing(obj -> {
            if (ObjectUtils.isEmpty(obj.getTaxTime())) {
                return 1; // 返回1表示字段为空的对象排在后面
            } else {
                return 0; // 返回0表示字段不为空的对象保持原顺序
            }
        });
        Collections.sort(serviceFunddetails, customComparator);
        //这个是为了获取fund_tax_time
        Long fundid = serviceFunddetails.get(0).getFundid();
        log.info("算税的fundid的值为:{}", fundid);
        ServiceFund serviceFund1 = serviceFundMapper.selectById(fundid);
        log.info("fund表的fundtextime值为:{}", serviceFund1.getFundtaxtime());
        //用于临时保存已经算好的"费用详情数据"
        List<ServiceFunddetail> temporarySave = new ArrayList<>();
        //保存总税前金额(用于更新fund表里的)
        BigDecimal pretaxcost = BigDecimal.valueOf(0.00);
        BigDecimal taxedcost = BigDecimal.valueOf(0.00);
        for (ServiceFunddetail serviceFunddetail : serviceFunddetails) {
            if (serviceFunddetail.getBeneficiaryname().equals("吴康松")) {
                System.out.println(serviceFunddetail);
            }
            if (StringUtils.isEmpty(serviceFunddetail.getIdcardno())) {
                logger.info("serviceFunddetail数据入参 : {}", serviceFunddetail);
                //如果身份证号为空,就不用查了,可能是医院的记录
@@ -297,6 +313,7 @@
                }
                //公司的申请金额也要加进去
                pretaxcost = pretaxcost.add(BigDecimal.valueOf(serviceFunddetail.getAmount()));
                taxedcost = taxedcost.add(BigDecimal.valueOf(serviceFunddetail.getTaxedamount()));
                serviceFunddetail.setTaxamount(0.0);
                logger.info("serviceFunddetail更新后的数据 : {}", serviceFunddetail);
@@ -307,8 +324,24 @@
            //获取当月的第一天
            Date firstDay = Date.from(LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()).atStartOfDay(ZoneId.systemDefault()).toInstant());
//            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//            String firstDatStr = dateFormat.format(firstDay);
            //获取到当前人的本月算税序号最大值
            TaxMoneyByItemEO taxMoneyByItemEO = new TaxMoneyByItemEO();
            taxMoneyByItemEO.setFirstDay(firstDay);
            taxMoneyByItemEO.setIDCard(serviceFunddetail.getIdcardno());
            taxMoneyByItemEO.setTaxTime(new Date());
            //根据条件获取表中该条数据的”序号“最大值
            Long maxXH = serviceFunddetailMapper.getMaxXH(taxMoneyByItemEO);
            if (maxXH == null) {
                maxXH = 1L;
            } else {
                maxXH = maxXH + 1;
            }
            //序号Map与数据库表里的xh同时不为空,那就以map里的为准
            if (ObjectUtils.isNotEmpty(xhMap)) {
                Long xhValue = xhMap.get(serviceFunddetail.getIdcardno());
                if (xhValue != null) maxXH = xhValue + 1;
            }
            TaxMoneyByItemEO taxMoneyVO = new TaxMoneyByItemEO();
            if (serviceFund1.getFundtaxtime() != null) {
                taxMoneyVO.setTaxTime(serviceFund1.getFundtaxtime());
@@ -318,6 +351,12 @@
            taxMoneyVO.setFirstDay(firstDay);
            taxMoneyVO.setFundID(serviceFunddetail.getFundid());
            taxMoneyVO.setIDCard(serviceFunddetail.getIdcardno());
            if (serviceFunddetail.getXh() != null) {
                taxMoneyVO.setXh(serviceFunddetail.getXh());
            } else {
                taxMoneyVO.setXh(maxXH);
                xhMap.put(serviceFunddetail.getIdcardno(), maxXH);
            }
            //查出税前、税、税后的总额(不包含本次)
            TaxMoneySumEO taxSum = serviceFunddetailMapper.getTaxSum(taxMoneyVO);
            logger.info("查询的taxSum的值 : {}", taxSum);
@@ -342,6 +381,9 @@
                    }
                    continue;
                }
            }
            if (serviceFunddetail.getXh() == null) {
                serviceFunddetail.setXh(maxXH);
            }
            if (StringUtils.isEmpty(serviceFunddetail.getServicesscopename()) || !serviceFunddetail.getServicesscopename().contains("税后")) {
@@ -371,9 +413,11 @@
                logger.info("打印税前serviceFunddetail3数据 :{}", serviceFunddetail3);
                // 将该条数据更新
                boolean b = this.updateById(serviceFunddetail3);
                pretaxcost = pretaxcost.add(BigDecimal.valueOf(serviceFunddetail.getAmount()));
                // 把该数据,放到临时的集合中
                taxedcost = taxedcost.add(BigDecimal.valueOf(serviceFunddetail.getTaxedamount()));
//                // 把该数据,放到临时的集合中
                temporarySave.add(serviceFunddetail3);
            } else if (serviceFunddetail.getServicesscopename().contains("税后")) {
                logger.info("计算税后信息开始:{}", serviceFunddetail);
@@ -400,15 +444,22 @@
                    serviceFunddetail3.setTaxTime(serviceFund1.getFundtaxtime());
                }
                logger.info("打印serviceFunddetail3:{}", serviceFunddetail3);
                //获取到当前人的本月算税序号最大值
                TaxMoneyByItemEO byItemEO = new TaxMoneyByItemEO();
                byItemEO.setFirstDay(firstDay);
                byItemEO.setIDCard(serviceFunddetail.getIdcardno());
                byItemEO.setTaxTime(new Date());
                // 将该条数据更新
                updateById(serviceFunddetail3);
                pretaxcost = pretaxcost.add(BigDecimal.valueOf(serviceFunddetail3.getAmount()));
                // 把该数据,放到临时的集合中
                taxedcost = taxedcost.add(BigDecimal.valueOf(serviceFunddetail3.getTaxedamount()));
//                // 把该数据,放到临时的集合中
                temporarySave.add(serviceFunddetail3);
            }
        }
        ServiceFund serviceFund = new ServiceFund();
        serviceFund.setPretaxcost(pretaxcost.doubleValue());
        serviceFund.setTaxedcost(taxedcost.doubleValue());
        serviceFund.setId(serviceFunddetails.get(0).getFundid());
        if (ObjectUtils.isEmpty(serviceFund1.getFundtaxtime())) {
            serviceFund.setFundtaxtime(new Date());
@@ -480,6 +531,6 @@
    @Override
    public List<SpStatBonus> getListBySpStatBonus(SpStatBonusReq spStatBonusReq) {
        return spStatBonusMapper.getListBySpStatBonus(spStatBonusReq.getPabegtime(), spStatBonusReq.getPaendtime(), spStatBonusReq.getPadeptno(), spStatBonusReq.getPauserno(), spStatBonusReq.getPabonustype());
        return spStatBonusMapper.getListBySpStatBonus(spStatBonusReq.getPabegtime(), spStatBonusReq.getPaendtime(), spStatBonusReq.getPadeptno(), spStatBonusReq.getPausername(), spStatBonusReq.getPabonustype());
    }
}