|
|
@@ -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();
|