|
|
@@ -2291,11 +2291,76 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
|
|
|
noProjectItem.project = MessageUtils.message("entry.noProject");
|
|
|
noProjectItem.workingTime = 0;
|
|
|
noProjectItem.cost = new BigDecimal(0);
|
|
|
+ noProjectItem.salary = new BigDecimal(0);
|
|
|
+ noProjectItem.bonus = new BigDecimal(0);
|
|
|
+ noProjectItem.allowance = new BigDecimal(0);
|
|
|
+ noProjectItem.old = new BigDecimal(0);
|
|
|
+ noProjectItem.injury = new BigDecimal(0);
|
|
|
+ noProjectItem.loseJob = new BigDecimal(0);
|
|
|
+ noProjectItem.medical = new BigDecimal(0);
|
|
|
+ noProjectItem.house = new BigDecimal(0);
|
|
|
+ noProjectItem.other = new BigDecimal(0);
|
|
|
+ noProjectItem.cost = new BigDecimal(0);
|
|
|
+ noProjectItem.field1 = new BigDecimal(0);
|
|
|
+ noProjectItem.field2 = new BigDecimal(0);
|
|
|
+ noProjectItem.field3 = new BigDecimal(0);
|
|
|
+ noProjectItem.field4 = new BigDecimal(0);
|
|
|
+ noProjectItem.field5 = new BigDecimal(0);
|
|
|
+ noProjectItem.field6 = new BigDecimal(0);
|
|
|
+ noProjectItem.field7 = new BigDecimal(0);
|
|
|
}
|
|
|
noProjectItem.cost = noProjectItem.cost.add(f.getTotalCost());
|
|
|
+ noProjectItem.salary = noProjectItem.salary.add(f.getMonthCost());
|
|
|
+ noProjectItem.bonus = noProjectItem.bonus.add(f.getBonus());
|
|
|
+ noProjectItem.allowance = noProjectItem.allowance.add(f.getAllowance());
|
|
|
+ noProjectItem.old = noProjectItem.old.add(f.getInsuranceOld());
|
|
|
+ noProjectItem.injury = noProjectItem.injury.add(f.getInsuranceInjury());
|
|
|
+ noProjectItem.loseJob = noProjectItem.loseJob.add(f.getInsuranceLosejob());
|
|
|
+ noProjectItem.medical = noProjectItem.medical.add(f.getInsuranceMedical());
|
|
|
+ noProjectItem.house = noProjectItem.house.add(f.getHouseFund());
|
|
|
+ noProjectItem.other = noProjectItem.other.add(f.getOthers());
|
|
|
+ noProjectItem.field1 = noProjectItem.field1.add(f.getCustomField1()==null?new BigDecimal(0):f.getCustomField1());
|
|
|
+ noProjectItem.field2 = noProjectItem.field2.add(f.getCustomField2()==null?new BigDecimal(0):f.getCustomField2());
|
|
|
+ noProjectItem.field3 = noProjectItem.field3.add(f.getCustomField3()==null?new BigDecimal(0):f.getCustomField3());
|
|
|
+ noProjectItem.field4 = noProjectItem.field4.add(f.getCustomField4()==null?new BigDecimal(0):f.getCustomField4());
|
|
|
+ noProjectItem.field5 = noProjectItem.field5.add(f.getCustomField5()==null?new BigDecimal(0):f.getCustomField5());
|
|
|
+ noProjectItem.field6 = noProjectItem.field6.add(f.getCustomField6()==null?new BigDecimal(0):f.getCustomField6());
|
|
|
+ noProjectItem.field7 = noProjectItem.field7.add(f.getCustomField7()==null?new BigDecimal(0):f.getCustomField7());
|
|
|
} else {
|
|
|
BigDecimal avgHourCost = f.getTotalCost().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourSalary = f.getMonthCost().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourBonus = f.getBonus().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourAllowance = f.getAllowance().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourInsuranceOld = f.getInsuranceOld().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourInsuranceInjury = f.getInsuranceInjury().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourInsuranceLoseJob = f.getInsuranceLosejob().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourInsuranceMedical = f.getInsuranceMedical().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourHouseFund = f.getHouseFund().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourOthers = f.getOthers().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourFiled1 =f.getCustomField1()==null?new BigDecimal(0): f.getCustomField1().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourFiled2 =f.getCustomField2()==null?new BigDecimal(0): f.getCustomField2().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourFiled3 =f.getCustomField3()==null?new BigDecimal(0): f.getCustomField3().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourFiled4 =f.getCustomField4()==null?new BigDecimal(0): f.getCustomField4().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourFiled5 =f.getCustomField5()==null?new BigDecimal(0): f.getCustomField5().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourFiled6 =f.getCustomField6()==null?new BigDecimal(0): f.getCustomField6().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal avgHourFiled7 =f.getCustomField7()==null?new BigDecimal(0): f.getCustomField7().divide(b,6, BigDecimal.ROUND_HALF_UP);
|
|
|
f.setHourCost(avgHourCost);
|
|
|
+ f.setHourSalary(avgHourSalary);
|
|
|
+ f.setHourBonus(avgHourBonus);
|
|
|
+ f.setHourAllowance(avgHourAllowance);
|
|
|
+ f.setHourInsuranceOld(avgHourInsuranceOld);
|
|
|
+ f.setHourInsuranceInjury(avgHourInsuranceInjury);
|
|
|
+ f.setHourInsuranceLoseJob(avgHourInsuranceLoseJob);
|
|
|
+ f.setHourInsuranceMedical(avgHourInsuranceMedical);
|
|
|
+ f.setHourHouseFund(avgHourHouseFund);
|
|
|
+ f.setHourOthers(avgHourOthers);
|
|
|
+ f.setHourCustomField1(avgHourFiled1);
|
|
|
+ f.setHourCustomField2(avgHourFiled2);
|
|
|
+ f.setHourCustomField3(avgHourFiled3);
|
|
|
+ f.setHourCustomField4(avgHourFiled4);
|
|
|
+ f.setHourCustomField5(avgHourFiled5);
|
|
|
+ f.setHourCustomField6(avgHourFiled6);
|
|
|
+ f.setHourCustomField7(avgHourFiled7);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -2307,8 +2372,41 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
|
|
|
Optional<Finance> first = finances.stream().filter(f -> f.getUserId().equals(creatorId)).findFirst();
|
|
|
Double workingTime = (Double)map.get("workingTime");
|
|
|
BigDecimal cost = new BigDecimal(0);
|
|
|
+ BigDecimal salary = new BigDecimal(0);
|
|
|
+ BigDecimal bonus = new BigDecimal(0);
|
|
|
+ BigDecimal allowance = new BigDecimal(0);
|
|
|
+ BigDecimal old = new BigDecimal(0);
|
|
|
+ BigDecimal medical = new BigDecimal(0);
|
|
|
+ BigDecimal loseJob = new BigDecimal(0);
|
|
|
+ BigDecimal injury = new BigDecimal(0);
|
|
|
+ BigDecimal house = new BigDecimal(0);
|
|
|
+ BigDecimal other = new BigDecimal(0);
|
|
|
+ BigDecimal field1 = new BigDecimal(0);
|
|
|
+ BigDecimal field2 = new BigDecimal(0);
|
|
|
+ BigDecimal field3 = new BigDecimal(0);
|
|
|
+ BigDecimal field4 = new BigDecimal(0);
|
|
|
+ BigDecimal field5 = new BigDecimal(0);
|
|
|
+ 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 (curProject == null) {
|
|
|
System.out.println("projectId="+projectId+", creatorId="+creatorId);
|
|
|
}
|
|
|
@@ -2316,6 +2414,22 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
|
|
|
if (projectId.equals(item.projectId)) {
|
|
|
item.workingTime += workingTime;
|
|
|
item.cost = item.cost.add(cost);
|
|
|
+ item.salary = item.salary.add(salary);
|
|
|
+ item.bonus = item.bonus.add(bonus);
|
|
|
+ item.allowance = item.allowance.add(allowance);
|
|
|
+ item.old = item.old.add(old);
|
|
|
+ item.medical = item.medical.add(medical);
|
|
|
+ item.loseJob = item.loseJob.add(loseJob);
|
|
|
+ item.injury = item.injury.add(injury);
|
|
|
+ item.house = item.house.add(house);
|
|
|
+ item.other = item.other.add(other);
|
|
|
+ item.field1 = item.field1.add(field1);
|
|
|
+ item.field2 = item.field2.add(field2);
|
|
|
+ item.field3 = item.field3.add(field3);
|
|
|
+ item.field4 = item.field4.add(field4);
|
|
|
+ item.field5 = item.field5.add(field5);
|
|
|
+ item.field6 = item.field6.add(field6);
|
|
|
+ item.field7 = item.field7.add(field7);
|
|
|
} else {
|
|
|
item = new ProjectSumItem();
|
|
|
pList.add(item);
|
|
|
@@ -2323,6 +2437,23 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
|
|
|
item.project = curProject;
|
|
|
item.workingTime = workingTime;
|
|
|
item.cost = cost;
|
|
|
+ item.salary = salary;
|
|
|
+ item.bonus = bonus;
|
|
|
+ item.salary = salary;
|
|
|
+ item.allowance = allowance;
|
|
|
+ item.old = old;
|
|
|
+ item.medical = medical;
|
|
|
+ item.loseJob = loseJob;
|
|
|
+ item.injury = injury;
|
|
|
+ item.house = house;
|
|
|
+ item.other = other;
|
|
|
+ item.field1 = field1;
|
|
|
+ item.field2 = field2;
|
|
|
+ item.field3 = field3;
|
|
|
+ item.field4 = field4;
|
|
|
+ item.field5 = field5;
|
|
|
+ item.field6 = field6;
|
|
|
+ item.field7 = field7;
|
|
|
}
|
|
|
totalMoneyCost = totalMoneyCost.add(cost);
|
|
|
} else {
|
|
|
@@ -2363,17 +2494,113 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
|
|
|
//计算项目的各自工时占比
|
|
|
System.out.println("按比例分配无工时人员");
|
|
|
BigDecimal accumulate = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateSalary = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateBonus = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateAllowance = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateOld = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateMedical = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateLoseJob = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateInjury = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateHouse = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateOther = new BigDecimal(0);
|
|
|
+ // 自定义字段
|
|
|
+ BigDecimal accumulateField1 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField2 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField3 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField4 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField5 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField6 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField7 = new BigDecimal(0);
|
|
|
+
|
|
|
double sum = filteredList.stream().mapToDouble(ProjectSumItem::getWorkingTime).sum();
|
|
|
System.out.println("总时长=="+sum);
|
|
|
for (int i=0;i<filteredList.size(); i++) {
|
|
|
ProjectSumItem p = filteredList.get(i);
|
|
|
+ if(p.projectId==88194){
|
|
|
+ System.out.println("123123123123");
|
|
|
+ }
|
|
|
+ BigDecimal ratio = new BigDecimal(p.workingTime / sum);
|
|
|
System.out.println("+p.getWorkingtime="+p.workingTime+", project="+p.project);
|
|
|
//避免偏差
|
|
|
- BigDecimal assignAmount = i < filteredList.size() -1 ?user.getTotalCost().multiply(new BigDecimal(p.workingTime / sum)):user.getTotalCost().subtract(accumulate);
|
|
|
+ BigDecimal assignAmount = i < filteredList.size() -1 ?user.getTotalCost().multiply(ratio):user.getTotalCost().subtract(accumulate);
|
|
|
+ BigDecimal assignAmountSalary = i < filteredList.size() -1 ?user.getMonthCost().multiply(ratio):user.getMonthCost().subtract(accumulateSalary);
|
|
|
+ BigDecimal assignAmountBonus = i < filteredList.size() -1 ?user.getBonus().multiply(ratio):user.getBonus().subtract(accumulateBonus);
|
|
|
+ BigDecimal assignAmountAllowance = i < filteredList.size() -1 ?user.getAllowance().multiply(ratio):user.getAllowance().subtract(accumulateAllowance);
|
|
|
+ BigDecimal assignAmountOld = i < filteredList.size() -1 ?user.getInsuranceOld().multiply(ratio):user.getInsuranceOld().subtract(accumulateOld);
|
|
|
+ BigDecimal assignAmountMedical = i < filteredList.size() -1 ?user.getInsuranceMedical().multiply(ratio):user.getInsuranceMedical().subtract(accumulateMedical);
|
|
|
+ BigDecimal assignAmountLoseJob = i < filteredList.size() -1 ?user.getInsuranceLosejob().multiply(ratio):user.getInsuranceLosejob().subtract(accumulateLoseJob);
|
|
|
+ BigDecimal assignAmountInjury = i < filteredList.size() -1 ?user.getInsuranceInjury().multiply(ratio):user.getInsuranceInjury().subtract(accumulateInjury);
|
|
|
+ BigDecimal assignAmountHouse = i < filteredList.size() -1 ?user.getHouseFund().multiply(ratio):user.getHouseFund().subtract(accumulateHouse);
|
|
|
+ BigDecimal assignAmountOther = i < filteredList.size() -1 ?user.getOthers().multiply(ratio):user.getOthers().subtract(accumulateOther);
|
|
|
+ if(user.getCustomField1()==null)user.setCustomField1(new BigDecimal(0));
|
|
|
+ if(user.getCustomField2()==null)user.setCustomField2(new BigDecimal(0));
|
|
|
+ if(user.getCustomField3()==null)user.setCustomField3(new BigDecimal(0));
|
|
|
+ if(user.getCustomField4()==null)user.setCustomField4(new BigDecimal(0));
|
|
|
+ if(user.getCustomField5()==null)user.setCustomField5(new BigDecimal(0));
|
|
|
+ if(user.getCustomField6()==null)user.setCustomField6(new BigDecimal(0));
|
|
|
+ if(user.getCustomField7()==null)user.setCustomField7(new BigDecimal(0));
|
|
|
+ BigDecimal assignAmountField1 = i < filteredList.size() -1 ?user.getCustomField1().multiply(ratio):user.getCustomField1().subtract(accumulateField1);
|
|
|
+ BigDecimal assignAmountField2 = i < filteredList.size() -1 ?user.getCustomField2().multiply(ratio):user.getCustomField2().subtract(accumulateField2);
|
|
|
+ BigDecimal assignAmountField3 = i < filteredList.size() -1 ?user.getCustomField3().multiply(ratio):user.getCustomField3().subtract(accumulateField3);
|
|
|
+ BigDecimal assignAmountField4 = i < filteredList.size() -1 ?user.getCustomField4().multiply(ratio):user.getCustomField4().subtract(accumulateField4);
|
|
|
+ BigDecimal assignAmountField5 = i < filteredList.size() -1 ?user.getCustomField5().multiply(ratio):user.getCustomField5().subtract(accumulateField5);
|
|
|
+ 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);
|
|
|
+
|
|
|
accumulate = accumulate.add(assignAmount);
|
|
|
+ accumulateSalary = accumulateSalary.add(assignAmountSalary);
|
|
|
+ accumulateBonus = accumulateBonus.add(assignAmountBonus);
|
|
|
+ accumulateAllowance = accumulateAllowance.add(assignAmountAllowance);
|
|
|
+ accumulateOld = accumulateOld.add(assignAmountOld);
|
|
|
+ accumulateMedical = accumulateMedical.add(assignAmountMedical);
|
|
|
+ accumulateLoseJob = accumulateLoseJob.add(assignAmountLoseJob);
|
|
|
+ accumulateInjury = accumulateInjury.add(assignAmountInjury);
|
|
|
+ accumulateHouse = accumulateHouse.add(assignAmountHouse);
|
|
|
+ accumulateOther = accumulateOther.add(assignAmountOther);
|
|
|
+ accumulateField1 = accumulateField1.add(assignAmountField1);
|
|
|
+ accumulateField2 = accumulateField2.add(assignAmountField2);
|
|
|
+ accumulateField3 = accumulateField3.add(assignAmountField3);
|
|
|
+ accumulateField4 = accumulateField4.add(assignAmountField4);
|
|
|
+ accumulateField5 = accumulateField5.add(assignAmountField5);
|
|
|
+ accumulateField6 = accumulateField6.add(assignAmountField6);
|
|
|
+ accumulateField7 = accumulateField7.add(assignAmountField7);
|
|
|
System.out.println("增加项目成本==="+assignAmount);
|
|
|
p.cost = p.cost.add(assignAmount);
|
|
|
+ p.salary = p.salary.add(assignAmountSalary);
|
|
|
+ p.bonus = p.bonus.add(assignAmountBonus);
|
|
|
+ p.allowance = p.allowance.add(assignAmountAllowance);
|
|
|
+ p.old = p.old.add(assignAmountOld);
|
|
|
+ p.medical = p.medical.add(assignAmountMedical);
|
|
|
+ p.loseJob = p.loseJob.add(assignAmountLoseJob);
|
|
|
+ p.injury = p.injury.add(assignAmountInjury);
|
|
|
+ p.house = p.house.add(assignAmountHouse);
|
|
|
+ p.other = p.other.add(assignAmountOther);
|
|
|
+ p.field1 = p.field1.add(assignAmountField1);
|
|
|
+ p.field2 = p.field2.add(assignAmountField2);
|
|
|
+ p.field3 = p.field3.add(assignAmountField3);
|
|
|
+ p.field4 = p.field4.add(assignAmountField4);
|
|
|
+ p.field5 = p.field5.add(assignAmountField5);
|
|
|
+ p.field6 = p.field6.add(assignAmountField6);
|
|
|
+ p.field7 = p.field7.add(assignAmountField7);
|
|
|
+ //todo:奖金计算 需要加上计算逻辑
|
|
|
if (p.secondCost == null) {
|
|
|
p.secondCost = new BigDecimal(0);
|
|
|
}
|
|
|
@@ -2484,6 +2711,9 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
|
|
|
String category = p.getProject().equals("生产其他") ? "生产" : "研发";
|
|
|
System.out.println("当前其他项目为:" + p.getProject());
|
|
|
for (ProjectSumItem projectSumItem : pList) {
|
|
|
+ if(projectSumItem.getProjectId()==88194){
|
|
|
+ System.out.println("22341234");
|
|
|
+ }
|
|
|
//把自己去掉
|
|
|
if (projectSumItem.getProjectId().equals(p.getProjectId())) {
|
|
|
continue;
|
|
|
@@ -2497,18 +2727,123 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
|
|
|
if (filteredList.size() > 0) {
|
|
|
//获取总时长
|
|
|
BigDecimal accumulate = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateSalary = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateBonus = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateAllowance = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateOld = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateMedical = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateLoseJob = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateInjury = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateHouse = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateOther = new BigDecimal(0);
|
|
|
+ // 自定义字段
|
|
|
+ BigDecimal accumulateField1 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField2 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField3 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField4 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField5 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField6 = new BigDecimal(0);
|
|
|
+ BigDecimal accumulateField7 = new BigDecimal(0);
|
|
|
+
|
|
|
+
|
|
|
BigDecimal publicProjectCost = p.getCost();//待分摊的其他项目工时
|
|
|
+ BigDecimal publicProjectSalary = p.getSalary();
|
|
|
+ BigDecimal publicProjectBonus = p.getBonus();
|
|
|
+ BigDecimal publicProjectAllowance = p.getAllowance();
|
|
|
+ BigDecimal publicProjectOld = p.getOld();
|
|
|
+ BigDecimal publicProjectMedical = p.getMedical();
|
|
|
+ BigDecimal publicProjectLoseJob = p.getLoseJob();
|
|
|
+ BigDecimal publicProjectInjury = p.getInjury();
|
|
|
+ BigDecimal publicProjectHouse = p.getHouse();
|
|
|
+ BigDecimal publicProjectOther = p.getOther();
|
|
|
+ BigDecimal publicProjectField1 = p.getField1();
|
|
|
+ BigDecimal publicProjectField2 = p.getField2();
|
|
|
+ BigDecimal publicProjectField3 = p.getField3();
|
|
|
+ BigDecimal publicProjectField4 = p.getField4();
|
|
|
+ BigDecimal publicProjectField5 = p.getField5();
|
|
|
+ BigDecimal publicProjectField6 = p.getField6();
|
|
|
+ BigDecimal publicProjectField7 = p.getField7();
|
|
|
+
|
|
|
double sum = filteredList.stream().mapToDouble(ProjectSumItem::getWorkingTime).sum();
|
|
|
System.out.println(category+"总时长=="+sum);
|
|
|
+
|
|
|
for (int i=0;i<filteredList.size(); i++) {
|
|
|
ProjectSumItem pItem = filteredList.get(i);
|
|
|
+ BigDecimal ratio = new BigDecimal(pItem.workingTime / sum);
|
|
|
System.out.println("+p.getWorkingtime="+pItem.workingTime+", project="+pItem.project);
|
|
|
//避免偏差
|
|
|
- BigDecimal assignAmount = i < filteredList.size() -1 ?publicProjectCost.multiply(new BigDecimal(pItem.workingTime / sum)):publicProjectCost.subtract(accumulate);
|
|
|
+ BigDecimal assignAmount = i < filteredList.size() -1 ?publicProjectCost.multiply(ratio):publicProjectCost.subtract(accumulate);
|
|
|
+ BigDecimal assignAmountSalary = i < filteredList.size() -1 ?publicProjectSalary.multiply(ratio):publicProjectSalary.subtract(accumulateSalary);
|
|
|
+ BigDecimal assignAmountBonus = i < filteredList.size() -1 ?publicProjectBonus.multiply(ratio):publicProjectBonus.subtract(accumulateBonus);
|
|
|
+ BigDecimal assignAmountAllowance = i < filteredList.size() -1 ?publicProjectAllowance.multiply(ratio):publicProjectAllowance.subtract(accumulateAllowance);
|
|
|
+ BigDecimal assignAmountOld = i < filteredList.size() -1 ?publicProjectOld.multiply(ratio):publicProjectOld.subtract(accumulateOld);
|
|
|
+ BigDecimal assignAmountMedical = i < filteredList.size() -1 ?publicProjectMedical.multiply(ratio):publicProjectMedical.subtract(accumulateMedical);
|
|
|
+ BigDecimal assignAmountLoseJob = i < filteredList.size() -1 ?publicProjectLoseJob.multiply(ratio):publicProjectLoseJob.subtract(accumulateLoseJob);
|
|
|
+ BigDecimal assignAmountInjury = i < filteredList.size() -1 ?publicProjectInjury.multiply(ratio):publicProjectInjury.subtract(accumulateInjury);
|
|
|
+ BigDecimal assignAmountHouse = i < filteredList.size() -1 ?publicProjectHouse.multiply(ratio):publicProjectHouse.subtract(accumulateHouse);
|
|
|
+ BigDecimal assignAmountOther = i < filteredList.size() -1 ?publicProjectOther.multiply(ratio):publicProjectOther.subtract(accumulateOther);
|
|
|
+ BigDecimal assignAmountField1 = i < filteredList.size() -1 ?publicProjectField1.multiply(ratio):publicProjectField1.subtract(accumulateField1);
|
|
|
+ BigDecimal assignAmountField2 = i < filteredList.size() -1 ?publicProjectField2.multiply(ratio):publicProjectField2.subtract(accumulateField2);
|
|
|
+ BigDecimal assignAmountField3 = i < filteredList.size() -1 ?publicProjectField3.multiply(ratio):publicProjectField3.subtract(accumulateField3);
|
|
|
+ BigDecimal assignAmountField4 = i < filteredList.size() -1 ?publicProjectField4.multiply(ratio):publicProjectField4.subtract(accumulateField4);
|
|
|
+ BigDecimal assignAmountField5 = i < filteredList.size() -1 ?publicProjectField5.multiply(ratio):publicProjectField5.subtract(accumulateField5);
|
|
|
+ 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);
|
|
|
+
|
|
|
accumulate = accumulate.add(assignAmount);
|
|
|
+ accumulateSalary = accumulateSalary.add(assignAmountSalary);
|
|
|
+ accumulateBonus = accumulateBonus.add(assignAmountBonus);
|
|
|
+ accumulateAllowance = accumulateAllowance.add(assignAmountAllowance);
|
|
|
+ accumulateOld = accumulateOld.add(assignAmountOld);
|
|
|
+ accumulateMedical = accumulateMedical.add(assignAmountMedical);
|
|
|
+ accumulateLoseJob = accumulateLoseJob.add(assignAmountLoseJob);
|
|
|
+ accumulateInjury = accumulateInjury.add(assignAmountInjury);
|
|
|
+ accumulateHouse = accumulateHouse.add(assignAmountHouse);
|
|
|
+ accumulateOther = accumulateOther.add(assignAmountOther);
|
|
|
+ accumulateField1 = accumulateField1.add(assignAmountField1);
|
|
|
+ accumulateField2 = accumulateField2.add(assignAmountField2);
|
|
|
+ accumulateField3 = accumulateField3.add(assignAmountField3);
|
|
|
+ accumulateField4 = accumulateField4.add(assignAmountField4);
|
|
|
+ accumulateField5 = accumulateField5.add(assignAmountField5);
|
|
|
+ accumulateField6 = accumulateField6.add(assignAmountField6);
|
|
|
+ accumulateField7 = accumulateField7.add(assignAmountField7);
|
|
|
+
|
|
|
System.out.println(category + "分摊出来的成本到["+pItem.getProject()+"]==="+assignAmount);
|
|
|
pItem.cost = pItem.cost.add(assignAmount);
|
|
|
+ pItem.salary = pItem.salary.add(assignAmountSalary);
|
|
|
+ pItem.bonus = pItem.bonus.add(assignAmountBonus);
|
|
|
+ pItem.allowance = pItem.allowance.add(assignAmountAllowance);
|
|
|
+ pItem.old = pItem.old.add(assignAmountOld);
|
|
|
+ pItem.medical = pItem.medical.add(assignAmountMedical);
|
|
|
+ pItem.loseJob = pItem.loseJob.add(assignAmountLoseJob);
|
|
|
+ pItem.injury = pItem.injury.add(assignAmountInjury);
|
|
|
+ pItem.house = pItem.house.add(assignAmountHouse);
|
|
|
+ pItem.other = pItem.other.add(assignAmountOther);
|
|
|
+ pItem.field1 = pItem.field1.add(assignAmountField1);
|
|
|
+ pItem.field2 = pItem.field2.add(assignAmountField2);
|
|
|
+ pItem.field3 = pItem.field3.add(assignAmountField3);
|
|
|
+ pItem.field4 = pItem.field4.add(assignAmountField4);
|
|
|
+ pItem.field5 = pItem.field5.add(assignAmountField5);
|
|
|
+ pItem.field6 = pItem.field6.add(assignAmountField6);
|
|
|
+ pItem.field7 = pItem.field7.add(assignAmountField7);
|
|
|
if (pItem.thirdCost == null) {
|
|
|
pItem.thirdCost = new BigDecimal(0);
|
|
|
}
|
|
|
@@ -2516,6 +2851,22 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
|
|
|
}
|
|
|
//分摊完了,需要将当前这个生产或者研发其他项目上的成本设置为0
|
|
|
p.cost = new BigDecimal(0);
|
|
|
+ p.salary = new BigDecimal(0);
|
|
|
+ p.bonus = new BigDecimal(0);
|
|
|
+ p.allowance = new BigDecimal(0);
|
|
|
+ p.old = new BigDecimal(0);
|
|
|
+ p.medical = new BigDecimal(0);
|
|
|
+ p.loseJob = new BigDecimal(0);
|
|
|
+ p.injury = new BigDecimal(0);
|
|
|
+ p.house = new BigDecimal(0);
|
|
|
+ p.other = new BigDecimal(0);
|
|
|
+ p.field1 = new BigDecimal(0);
|
|
|
+ p.field2 = new BigDecimal(0);
|
|
|
+ p.field3 = new BigDecimal(0);
|
|
|
+ p.field4 = new BigDecimal(0);
|
|
|
+ p.field5 = new BigDecimal(0);
|
|
|
+ p.field6 = new BigDecimal(0);
|
|
|
+ p.field7 = new BigDecimal(0);
|
|
|
}
|
|
|
}
|
|
|
//研发和生产都处理完了,就退出
|
|
|
@@ -2529,6 +2880,22 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
|
|
|
totalMoneyCost = totalMoneyCost.setScale(2, 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);
|
|
|
});
|
|
|
resultMap.put("costList", pList);
|
|
|
resultMap.put("percentTotal", percentTotal);
|