From 9b4c2a808eeb693ad3e366fbe7824ab7bdad369b Mon Sep 17 00:00:00 2001 From: Anlin <184993826@qq.com> Date: Thu, 17 Jul 2025 17:30:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A1=E7=AE=97=E4=B8=AA=E7=A8=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bill/controller/MerBillController.java | 75 +++++++++++++++---- .../bill/domain/vo/MerBillDetailVo.java | 1 + .../payment/util/TaxCalculatorUtils.java | 6 +- 3 files changed, 64 insertions(+), 18 deletions(-) diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/controller/MerBillController.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/controller/MerBillController.java index db0ec91..4376e1e 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/controller/MerBillController.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/controller/MerBillController.java @@ -1,10 +1,8 @@ package org.dromara.payment.bill.controller; import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.math.BigDecimal; +import java.util.*; import java.util.stream.Collectors; import cn.hutool.core.io.IoUtil; @@ -32,6 +30,7 @@ import org.dromara.payment.task.domain.vo.MerTaskEnrollVo; import org.dromara.payment.task.domain.vo.MerTaskVo; import org.dromara.payment.task.service.IMerTaskEnrollService; import org.dromara.payment.task.service.IMerTaskService; +import org.dromara.payment.util.TaxCalculatorUtils; import org.dromara.payment.worker.domain.UserWorkerAccount; import org.dromara.payment.worker.domain.bo.UserWorkerAccountBo; import org.dromara.payment.worker.domain.vo.UserWorkerVo; @@ -318,25 +317,71 @@ public class MerBillController extends BaseController { this.merBillService.validateSysSyd(bo); ExcelResult result = ExcelUtil.importExcel(file.getInputStream(),new BillImportListener(bo)); - List list = result.getList(); - for (MerBillDetailBo merBillDetailBo : list) { + for (MerBillDetailBo merBillDetailBo : result.getList()) { UserWorkerVo userWorkerVo = userWorkerServiceImpl.queryByName(merBillDetailBo.getWorkerName()); UserWorkerAccountBo account = new UserWorkerAccountBo(); account.setWorkId(userWorkerVo.getId()); account.setBankCard(merBillDetailBo.getBankCard()); - - - - - - userWorkerAccountServiceImpl.updateByBo(account); + + MerBillDetailBo billDetailBo = new MerBillDetailBo(); + billDetailBo.setWorkerName(merBillDetailBo.getWorkerName()); + billDetailBo.setCardId(merBillDetailBo.getCardId()); + List merBillDetailVos = billDetailService.queryList(billDetailBo); + BigDecimal totalRaise = BigDecimal.valueOf(merBillDetailVos.stream() + .filter(Objects::nonNull) + .mapToLong(MerBillDetailVo::getRaise) + .sum()); + + BigDecimal totalMoney = BigDecimal.valueOf(merBillDetailVos.stream() + .filter(Objects::nonNull) + .mapToLong(MerBillDetailVo::getMoney) + .sum()); + + BigDecimal accumulatedIncome = totalMoney.add(merBillDetailBo.getMoneyDecimal()); + + String billNo = merBillDetailBo.getBillNo(); + String year = billNo.substring(0, 4); + String month = billNo.substring(4, 6); + + List uniqueMonthRecords = merBillDetailVos.stream() + .filter(record -> { + String batchNo = record.getBillNo(); + int year1 = Integer.parseInt(batchNo.substring(7, 11)); + return year1 == Integer.parseInt(year); + }) + .collect(Collectors.toMap( + record -> record.getBillNo().substring(7, 13), + record -> record, + (existing, replacement) -> existing, + LinkedHashMap::new + )) + .values() + .stream() + .collect(Collectors.toList()); + + boolean hasCurrentMonthRecord = uniqueMonthRecords.stream() + .anyMatch(record -> { + String batchNo = record.getBillNo(); + String recordYearMonth = batchNo.substring(7, 13); + return recordYearMonth.equals(year + month); + }); + int size = uniqueMonthRecords.size(); + BigDecimal personalIncomeTax; + if (hasCurrentMonthRecord){ + personalIncomeTax = TaxCalculatorUtils.calculateMonthlyWithholdingTax(accumulatedIncome, 0, totalRaise); + }else { + personalIncomeTax = TaxCalculatorUtils.calculateMonthlyWithholdingTax(accumulatedIncome,size+1,totalRaise); + } + + Long amount = (merBillDetailBo.getMoneyDecimal().subtract(personalIncomeTax)).multiply(new BigDecimal("100")).longValue(); + merBillDetailBo.setRaise(personalIncomeTax.multiply(new BigDecimal("100")).longValue()); + merBillDetailBo.setAmount(amount); + } - - - return R.ok(result); + return R.ok(result); } /** diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/domain/vo/MerBillDetailVo.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/domain/vo/MerBillDetailVo.java index cf36bc3..960d39a 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/domain/vo/MerBillDetailVo.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/domain/vo/MerBillDetailVo.java @@ -586,4 +586,5 @@ public class MerBillDetailVo implements Serializable { @ExcelIgnore private BigDecimal shServiceChargeRate; + } diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/util/TaxCalculatorUtils.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/util/TaxCalculatorUtils.java index a185088..f2d9124 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/util/TaxCalculatorUtils.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/util/TaxCalculatorUtils.java @@ -32,7 +32,7 @@ public class TaxCalculatorUtils { * 计算当月应预扣税额 * * @param cumulativeIncome 累计收入(税前) - * @param taxMonth 当前月份(1-12) + * @param taxMonth 第几个月(1-12) * @param cumulativePrepaidTax 累计已预缴税额 * @return 当月应预扣税额(BigDecimal,保留2位小数) */ @@ -44,8 +44,8 @@ public class TaxCalculatorUtils { // 1. 参数校验 validateParams(cumulativeIncome, taxMonth, cumulativePrepaidTax); - // 2. 计算累计减除费用:5000 * n(n为月份) - BigDecimal cumulativeDeduction = MONTHLY_DEDUCTION; + // 2. 计算累计减除费用:5000 * n(n为第几个月) + BigDecimal cumulativeDeduction = MONTHLY_DEDUCTION.multiply(new BigDecimal(taxMonth)); // 3. 计算应纳税所得额:累计收入 × (1 - 20%) - 累计减除费用 BigDecimal taxableIncome = cumulativeIncome