Преглед изворни кода

修改分摊 最后一个人员 补足逻辑 6位小数计算

yusm пре 1 месец
родитељ
комит
e19b1c34c5

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Finance.java

@@ -250,6 +250,7 @@ public class Finance extends Model<Finance> {
         target.setInsuranceLosejob(from.getInsuranceLosejob().multiply(per));
         target.setInsuranceInjury(from.getInsuranceInjury().multiply(per));
         target.setHouseFund(from.getHouseFund().multiply(per));
+        target.setOthers(from.getOthers() == null ? new BigDecimal(0) : from.getOthers().multiply(per));
         if (from.getCustomField1() != null) {
             target.setCustomField1(from.getCustomField1().multiply(per));
         } else {

+ 186 - 71
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java

@@ -33,6 +33,7 @@ import java.text.DecimalFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -2360,13 +2361,22 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                 }
             });
 
+            Map<String, Finance> financeMap = finances.stream()
+                    .collect(Collectors.toMap(Finance::getUserId, Function.identity(), (left, right) -> left));
+            Map<String, Long> userCostRecordCount = projectTimeList.stream()
+                    .map(map -> (String) map.get("creatorId"))
+                    .filter(financeMap::containsKey)
+                    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
+            Map<String, Integer> userCostRecordIndex = new HashMap<>();
+            Map<String, CostAccumulator> userCostAccumulator = new HashMap<>();
+
             List<String> missingFinanceUserIds = new ArrayList<>();
             for (Map<String, Object> map : projectTimeList) {
                 Integer projectId = ((Long) map.get("projectId")).intValue();
                 String curProject = (String) map.get("project");
                 String curProjectCode = (String) map.get("projectCode");
                 String creatorId = (String) map.get("creatorId");
-                Optional<Finance> first = finances.stream().filter(f -> f.getUserId().equals(creatorId)).findFirst();
+                Finance finance = financeMap.get(creatorId);
                 Double workingTime = (Double)map.get("workingTime");
                 BigDecimal cost = new BigDecimal(0);
                 BigDecimal salary = new BigDecimal(0);
@@ -2386,24 +2396,50 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                 BigDecimal field6 = new BigDecimal(0);
                 BigDecimal field7 = new BigDecimal(0);
 
-                if (first.isPresent()) {
-                    cost = first.get().getHourCost().multiply(new BigDecimal(workingTime));
-                    salary = first.get().getHourSalary().multiply(new BigDecimal(workingTime));
-                    bonus = first.get().getHourBonus().multiply(new BigDecimal(workingTime));
-                    allowance = first.get().getHourAllowance().multiply(new BigDecimal(workingTime));
-                    old = first.get().getHourInsuranceOld().multiply(new BigDecimal(workingTime));
-                    medical = first.get().getHourInsuranceMedical().multiply(new BigDecimal(workingTime));
-                    loseJob = first.get().getHourInsuranceLoseJob().multiply(new BigDecimal(workingTime));
-                    injury = first.get().getHourInsuranceInjury().multiply(new BigDecimal(workingTime));
-                    house = first.get().getHourHouseFund().multiply(new BigDecimal(workingTime));
-                    other = first.get().getHourOthers().multiply(new BigDecimal(workingTime));
-                    field1 = first.get().getHourCustomField1().multiply(new BigDecimal(workingTime));
-                    field2 = first.get().getHourCustomField2().multiply(new BigDecimal(workingTime));
-                    field3 = first.get().getHourCustomField3().multiply(new BigDecimal(workingTime));
-                    field4 = first.get().getHourCustomField4().multiply(new BigDecimal(workingTime));
-                    field5 = first.get().getHourCustomField5().multiply(new BigDecimal(workingTime));
-                    field6 = first.get().getHourCustomField6().multiply(new BigDecimal(workingTime));
-                    field7 = first.get().getHourCustomField7().multiply(new BigDecimal(workingTime));
+                if (finance != null) {
+                    int currentIndex = userCostRecordIndex.merge(creatorId, 1, Integer::sum);
+                    long recordCount = userCostRecordCount.getOrDefault(creatorId, 0L);
+                    boolean lastUserCostRecord = currentIndex == recordCount;
+                    CostAccumulator accumulator = userCostAccumulator.computeIfAbsent(creatorId, key -> new CostAccumulator());
+                    if (lastUserCostRecord) {
+                        cost = finance.getTotalCost().subtract(accumulator.cost);
+                        salary = finance.getMonthCost().subtract(accumulator.salary);
+                        bonus = finance.getBonus().subtract(accumulator.bonus);
+                        allowance = finance.getAllowance().subtract(accumulator.allowance);
+                        old = finance.getInsuranceOld().subtract(accumulator.old);
+                        medical = finance.getInsuranceMedical().subtract(accumulator.medical);
+                        loseJob = finance.getInsuranceLosejob().subtract(accumulator.loseJob);
+                        injury = finance.getInsuranceInjury().subtract(accumulator.injury);
+                        house = finance.getHouseFund().subtract(accumulator.house);
+                        other = finance.getOthers().subtract(accumulator.other);
+                        field1 = nvl(finance.getCustomField1()).subtract(accumulator.field1);
+                        field2 = nvl(finance.getCustomField2()).subtract(accumulator.field2);
+                        field3 = nvl(finance.getCustomField3()).subtract(accumulator.field3);
+                        field4 = nvl(finance.getCustomField4()).subtract(accumulator.field4);
+                        field5 = nvl(finance.getCustomField5()).subtract(accumulator.field5);
+                        field6 = nvl(finance.getCustomField6()).subtract(accumulator.field6);
+                        field7 = nvl(finance.getCustomField7()).subtract(accumulator.field7);
+                    } else {
+                        BigDecimal workHours = BigDecimal.valueOf(workingTime);
+                        cost = finance.getHourCost().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        salary = finance.getHourSalary().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        bonus = finance.getHourBonus().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        allowance = finance.getHourAllowance().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        old = finance.getHourInsuranceOld().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        medical = finance.getHourInsuranceMedical().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        loseJob = finance.getHourInsuranceLoseJob().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        injury = finance.getHourInsuranceInjury().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        house = finance.getHourHouseFund().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        other = finance.getHourOthers().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        field1 = finance.getHourCustomField1().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        field2 = finance.getHourCustomField2().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        field3 = finance.getHourCustomField3().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        field4 = finance.getHourCustomField4().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        field5 = finance.getHourCustomField5().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        field6 = finance.getHourCustomField6().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                        field7 = finance.getHourCustomField7().multiply(workHours).setScale(6, BigDecimal.ROUND_HALF_UP);
+                    }
+                    accumulator.add(cost, salary, bonus, allowance, old, medical, loseJob, injury, house, other, field1, field2, field3, field4, field5, field6, field7);
                     if (curProject == null) {
                         System.out.println("projectId="+projectId+", creatorId="+creatorId);
                     }
@@ -2542,23 +2578,23 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                                             BigDecimal assignAmountField6 = i < filteredList.size() -1 ?user.getCustomField6().multiply(ratio):user.getCustomField6().subtract(accumulateField6);
                                             BigDecimal assignAmountField7 = i < filteredList.size() -1 ?user.getCustomField7().multiply(ratio):user.getCustomField7().subtract(accumulateField7);
 
-                                            assignAmount = assignAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountSalary = assignAmountSalary.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountBonus = assignAmountBonus.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountAllowance = assignAmountAllowance.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountOld = assignAmountOld.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountMedical = assignAmountMedical.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountLoseJob = assignAmountLoseJob.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountInjury = assignAmountInjury.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountHouse = assignAmountHouse.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountOther = assignAmountOther.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountField1 = assignAmountField1.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountField2 = assignAmountField2.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountField3 = assignAmountField3.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountField4 = assignAmountField4.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountField5 = assignAmountField5.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountField6 = assignAmountField6.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                            assignAmountField7 = assignAmountField7.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmount = assignAmount.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountSalary = assignAmountSalary.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountBonus = assignAmountBonus.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountAllowance = assignAmountAllowance.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountOld = assignAmountOld.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountMedical = assignAmountMedical.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountLoseJob = assignAmountLoseJob.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountInjury = assignAmountInjury.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountHouse = assignAmountHouse.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountOther = assignAmountOther.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField1 = assignAmountField1.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField2 = assignAmountField2.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField3 = assignAmountField3.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField4 = assignAmountField4.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField5 = assignAmountField5.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField6 = assignAmountField6.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField7 = assignAmountField7.setScale(6, BigDecimal.ROUND_HALF_UP);
 
                                             accumulate = accumulate.add(assignAmount);
                                             accumulateSalary = accumulateSalary.add(assignAmountSalary);
@@ -2672,6 +2708,22 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                             npItem.projectId = np.getProjectId();
                             //初始设置为0
                             npItem.cost = new BigDecimal(0);
+                            npItem.salary = new BigDecimal(0);
+                            npItem.bonus = new BigDecimal(0);
+                            npItem.allowance = new BigDecimal(0);
+                            npItem.old = new BigDecimal(0);
+                            npItem.medical = new BigDecimal(0);
+                            npItem.loseJob = new BigDecimal(0);
+                            npItem.injury = new BigDecimal(0);
+                            npItem.house = new BigDecimal(0);
+                            npItem.other = new BigDecimal(0);
+                            npItem.field1 = new BigDecimal(0);
+                            npItem.field2 = new BigDecimal(0);
+                            npItem.field3 = new BigDecimal(0);
+                            npItem.field4 = new BigDecimal(0);
+                            npItem.field5 = new BigDecimal(0);
+                            npItem.field6 = new BigDecimal(0);
+                            npItem.field7 = new BigDecimal(0);
                             pList.add(npItem);
                         });
                     }
@@ -2685,6 +2737,22 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                             //各项收入按比例计算,累加到当前项目上
                             Finance newFinance = Finance.getByPercent(finance, percent);
                             p.cost = p.cost.add(newFinance.getTotalCost());
+                            p.salary = p.salary.add(newFinance.getMonthCost());
+                            p.bonus = p.bonus.add(newFinance.getBonus());
+                            p.allowance = p.allowance.add(newFinance.getAllowance());
+                            p.old = p.old.add(newFinance.getInsuranceOld());
+                            p.medical = p.medical.add(newFinance.getInsuranceMedical());
+                            p.loseJob = p.loseJob.add(newFinance.getInsuranceLosejob());
+                            p.injury = p.injury.add(newFinance.getInsuranceInjury());
+                            p.house = p.house.add(newFinance.getHouseFund());
+                            p.other = p.other.add(newFinance.getOthers());
+                            p.field1 = p.field1.add(newFinance.getCustomField1());
+                            p.field2 = p.field2.add(newFinance.getCustomField2());
+                            p.field3 = p.field3.add(newFinance.getCustomField3());
+                            p.field4 = p.field4.add(newFinance.getCustomField4());
+                            p.field5 = p.field5.add(newFinance.getCustomField5());
+                            p.field6 = p.field6.add(newFinance.getCustomField6());
+                            p.field7 = p.field7.add(newFinance.getCustomField7());
                             //叠加到总计的各项成本上
                             totalMoneyCost = totalMoneyCost.add(newFinance.getTotalCost());
                             percentTotal = percentTotal.add(newFinance.getTotalCost());
@@ -2785,23 +2853,23 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                                 BigDecimal assignAmountField6 = i < filteredList.size() -1 ?publicProjectField6.multiply(ratio):publicProjectField6.subtract(accumulateField6);
                                 BigDecimal assignAmountField7 = i < filteredList.size() -1 ?publicProjectField7.multiply(ratio):publicProjectField7.subtract(accumulateField7);
 
-                                assignAmount = assignAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountSalary = assignAmountSalary.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountBonus = assignAmountBonus.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountAllowance = assignAmountAllowance.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountOld = assignAmountOld.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountMedical = assignAmountMedical.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountLoseJob = assignAmountLoseJob.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountInjury = assignAmountInjury.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountHouse = assignAmountHouse.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountOther = assignAmountOther.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountField1 = assignAmountField1.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountField2 = assignAmountField2.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountField3 = assignAmountField3.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountField4 = assignAmountField4.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountField5 = assignAmountField5.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountField6 = assignAmountField6.setScale(2, BigDecimal.ROUND_HALF_UP);
-                                assignAmountField7 = assignAmountField7.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmount = assignAmount.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountSalary = assignAmountSalary.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountBonus = assignAmountBonus.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountAllowance = assignAmountAllowance.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountOld = assignAmountOld.setScale(6,BigDecimal.ROUND_HALF_UP);
+                                assignAmountMedical = assignAmountMedical.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountLoseJob = assignAmountLoseJob.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountInjury = assignAmountInjury.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountHouse = assignAmountHouse.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountOther = assignAmountOther.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField1 = assignAmountField1.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField2 = assignAmountField2.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField3 = assignAmountField3.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField4 = assignAmountField4.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField5 = assignAmountField5.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField6 = assignAmountField6.setScale(6, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField7 = assignAmountField7.setScale(6, BigDecimal.ROUND_HALF_UP);
 
                                 accumulate = accumulate.add(assignAmount);
                                 accumulateSalary = accumulateSalary.add(assignAmountSalary);
@@ -2872,25 +2940,25 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             }
 
             //整体四舍五入处理
-            totalMoneyCost = totalMoneyCost.setScale(2, BigDecimal.ROUND_HALF_UP);
+            totalMoneyCost = totalMoneyCost.setScale(6, BigDecimal.ROUND_HALF_UP);
             pList.forEach(p->{
-                p.cost = p.cost.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.salary = p.salary.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.bonus = p.bonus.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.allowance = p.allowance.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.old = p.old.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.medical = p.medical.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.loseJob = p.loseJob.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.injury = p.injury.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.house = p.house.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.other = p.other.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.field1 = p.field1.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.field2 = p.field2.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.field3 = p.field3.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.field4 = p.field4.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.field5 = p.field5.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.field6 = p.field6.setScale(2, BigDecimal.ROUND_HALF_UP);
-                p.field7 = p.field7.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.cost = p.cost.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.salary = p.salary.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.bonus = p.bonus.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.allowance = p.allowance.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.old = p.old.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.medical = p.medical.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.loseJob = p.loseJob.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.injury = p.injury.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.house = p.house.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.other = p.other.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.field1 = p.field1.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.field2 = p.field2.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.field3 = p.field3.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.field4 = p.field4.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.field5 = p.field5.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.field6 = p.field6.setScale(6, BigDecimal.ROUND_HALF_UP);
+                p.field7 = p.field7.setScale(6, BigDecimal.ROUND_HALF_UP);
             });
             resultMap.put("costList", pList);
             resultMap.put("percentTotal", percentTotal);
@@ -2913,6 +2981,53 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
         return httpRespMsg;
     }
 
+    private BigDecimal nvl(BigDecimal value) {
+        return value == null ? BigDecimal.ZERO : value;
+    }
+
+    private static class CostAccumulator {
+        private BigDecimal cost = BigDecimal.ZERO;
+        private BigDecimal salary = BigDecimal.ZERO;
+        private BigDecimal bonus = BigDecimal.ZERO;
+        private BigDecimal allowance = BigDecimal.ZERO;
+        private BigDecimal old = BigDecimal.ZERO;
+        private BigDecimal medical = BigDecimal.ZERO;
+        private BigDecimal loseJob = BigDecimal.ZERO;
+        private BigDecimal injury = BigDecimal.ZERO;
+        private BigDecimal house = BigDecimal.ZERO;
+        private BigDecimal other = BigDecimal.ZERO;
+        private BigDecimal field1 = BigDecimal.ZERO;
+        private BigDecimal field2 = BigDecimal.ZERO;
+        private BigDecimal field3 = BigDecimal.ZERO;
+        private BigDecimal field4 = BigDecimal.ZERO;
+        private BigDecimal field5 = BigDecimal.ZERO;
+        private BigDecimal field6 = BigDecimal.ZERO;
+        private BigDecimal field7 = BigDecimal.ZERO;
+
+        private void add(BigDecimal cost, BigDecimal salary, BigDecimal bonus, BigDecimal allowance, BigDecimal old,
+                         BigDecimal medical, BigDecimal loseJob, BigDecimal injury, BigDecimal house, BigDecimal other,
+                         BigDecimal field1, BigDecimal field2, BigDecimal field3, BigDecimal field4,
+                         BigDecimal field5, BigDecimal field6, BigDecimal field7) {
+            this.cost = this.cost.add(cost);
+            this.salary = this.salary.add(salary);
+            this.bonus = this.bonus.add(bonus);
+            this.allowance = this.allowance.add(allowance);
+            this.old = this.old.add(old);
+            this.medical = this.medical.add(medical);
+            this.loseJob = this.loseJob.add(loseJob);
+            this.injury = this.injury.add(injury);
+            this.house = this.house.add(house);
+            this.other = this.other.add(other);
+            this.field1 = this.field1.add(field1);
+            this.field2 = this.field2.add(field2);
+            this.field3 = this.field3.add(field3);
+            this.field4 = this.field4.add(field4);
+            this.field5 = this.field5.add(field5);
+            this.field6 = this.field6.add(field6);
+            this.field7 = this.field7.add(field7);
+        }
+    }
+
     @Override
     public HttpRespMsg getNoProjectUsers(String yearMonth, Integer salaryType, HttpServletRequest request) {
         Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();