|
@@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.rmi.ServerException;
|
|
|
import java.time.LocalDate;
|
|
|
import java.util.*;
|
|
@@ -1164,6 +1165,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
Boolean isBudget = true;
|
|
|
Map<Integer, List<ProjectCostBudget>> allPlanMap = new HashMap<>();
|
|
|
Boolean isOtherBudget = true;
|
|
|
+ Map<Integer, List<ProjectCostBudget>> otherBudgetMap = new HashMap<>();
|
|
|
if (allPlan != null && allPlan.size() > 0){
|
|
|
List<ProjectCostBudget> parentList = new ArrayList<>();
|
|
|
//如果不为空,根据costType分组
|
|
@@ -1183,6 +1185,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
//循环父计划,统计子计划
|
|
|
for (ProjectCostBudget budget : parentList) {
|
|
|
BigDecimal noStaffCost = budget.getBudgetCountMoney().subtract(budget.getBudgetStaffCost());
|
|
|
+ //有子计划直接设置
|
|
|
if (map.get(budget.getId()) != null && map.get(budget.getId()).size() > 0) {
|
|
|
List<ProjectCostBudget> budgetList = map.get(budget.getId());
|
|
|
//有子计划才设置,没子计划证明有值
|
|
@@ -1229,12 +1232,24 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
} else {
|
|
|
//跨月
|
|
|
budget.setPlanIsTwoMonth(1);
|
|
|
- BigDecimal decimal = startDays.divide(total, 2, BigDecimal.ROUND_HALF_UP).multiply(noStaffCost);
|
|
|
+ BigDecimal decimal = startDays.divide(total, 2, BigDecimal.ROUND_HALF_UP).multiply(noStaffCost).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ budget.setPlanStartMoney(decimal);
|
|
|
+ budget.setPlanEndMoney(noStaffCost.subtract(decimal));
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //没有子计划如果没有跨月则直接把其他支出放入startMoney
|
|
|
+ if (budget.getPlanIsTwoMonth() == 0){
|
|
|
+ budget.setPlanStartMoney(noStaffCost);
|
|
|
+ }else {
|
|
|
+ BigDecimal decimal = budget.getPlanStartMonthDays().divide(budget.getPlanDays(), 2, BigDecimal.ROUND_HALF_UP).multiply(noStaffCost).setScale(2, RoundingMode.HALF_UP);
|
|
|
budget.setPlanStartMoney(decimal);
|
|
|
budget.setPlanEndMoney(noStaffCost.subtract(decimal));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //根据部门分组
|
|
|
+ otherBudgetMap = parentList.parallelStream()
|
|
|
+ .collect(Collectors.groupingBy(ProjectCostBudget::getCostType));
|
|
|
}else {
|
|
|
isOtherBudget = false;
|
|
|
}
|
|
@@ -1328,6 +1343,33 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
}else {
|
|
|
vo.setBudget1(new BigDecimal(0));
|
|
|
}
|
|
|
+ //其他预算金额
|
|
|
+ if (isBudget && isOtherBudget && otherBudgetMap.get(1) != null && otherBudgetMap.get(1).size() > 0){
|
|
|
+ List<ProjectCostBudget> b1 = otherBudgetMap.get(1);
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ //循环市场部每一个预算
|
|
|
+ for (ProjectCostBudget budget : b1) {
|
|
|
+ //如果开始时间或结束时间是当月,则添加预算
|
|
|
+ if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
|
|
|
+ || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
|
|
|
+ //如果开始时间和结束时间的月相同,则直接用总预算
|
|
|
+ if (budget.getPlanIsTwoMonth() == 0) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //如果开始月是当前月,则直接使用开始金额
|
|
|
+ if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //结束月是当前月,使用结束金额
|
|
|
+ big = big.add(budget.getPlanEndMoney());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setBudget1(vo.getBudget1().add(big));
|
|
|
+ c1 = c1.add(big);
|
|
|
+ }
|
|
|
+
|
|
|
if (isFinished){
|
|
|
List<ProjectCostBudget> d1 = finishedMap.get(1);
|
|
|
if (d1 != null && d1.size() > 0){
|
|
@@ -1407,6 +1449,33 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
}else {
|
|
|
vo.setBudget2(new BigDecimal(0));
|
|
|
}
|
|
|
+ //其他预算金额
|
|
|
+ if (isBudget && isOtherBudget && otherBudgetMap.get(2) != null && otherBudgetMap.get(2).size() > 0){
|
|
|
+ List<ProjectCostBudget> b1 = otherBudgetMap.get(2);
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ //循环市场部每一个预算
|
|
|
+ for (ProjectCostBudget budget : b1) {
|
|
|
+ //如果开始时间或结束时间是当月,则添加预算
|
|
|
+ if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
|
|
|
+ || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
|
|
|
+ //如果开始时间和结束时间的月相同,则直接用总预算
|
|
|
+ if (budget.getPlanIsTwoMonth() == 0) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //如果开始月是当前月,则直接使用开始金额
|
|
|
+ if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //结束月是当前月,使用结束金额
|
|
|
+ big = big.add(budget.getPlanEndMoney());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setBudget2(vo.getBudget2().add(big));
|
|
|
+ c3 = c3.add(big);
|
|
|
+ }
|
|
|
+
|
|
|
if (isFinished){
|
|
|
List<ProjectCostBudget> d2 = finishedMap.get(2);
|
|
|
if (d2 != null && d2.size() > 0){
|
|
@@ -1487,6 +1556,33 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
}else {
|
|
|
vo.setBudget3(new BigDecimal(0));
|
|
|
}
|
|
|
+ //其他预算金额
|
|
|
+ if (isBudget && isOtherBudget && otherBudgetMap.get(3) != null && otherBudgetMap.get(3).size() > 0){
|
|
|
+ List<ProjectCostBudget> b1 = otherBudgetMap.get(3);
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ //循环市场部每一个预算
|
|
|
+ for (ProjectCostBudget budget : b1) {
|
|
|
+ //如果开始时间或结束时间是当月,则添加预算
|
|
|
+ if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
|
|
|
+ || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
|
|
|
+ //如果开始时间和结束时间的月相同,则直接用总预算
|
|
|
+ if (budget.getPlanIsTwoMonth() == 0) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //如果开始月是当前月,则直接使用开始金额
|
|
|
+ if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //结束月是当前月,使用结束金额
|
|
|
+ big = big.add(budget.getPlanEndMoney());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setBudget3(vo.getBudget3().add(big));
|
|
|
+ c5 = c5.add(big);
|
|
|
+ }
|
|
|
+
|
|
|
if (isFinished){
|
|
|
List<ProjectCostBudget> d3 = finishedMap.get(3);
|
|
|
if (d3 != null && d3.size() > 0){
|
|
@@ -1567,6 +1663,33 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
}else {
|
|
|
vo.setBudget4(new BigDecimal(0));
|
|
|
}
|
|
|
+ //其他预算金额
|
|
|
+ if (isBudget && isOtherBudget && otherBudgetMap.get(4) != null && otherBudgetMap.get(4).size() > 0){
|
|
|
+ List<ProjectCostBudget> b1 = otherBudgetMap.get(4);
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ //循环市场部每一个预算
|
|
|
+ for (ProjectCostBudget budget : b1) {
|
|
|
+ //如果开始时间或结束时间是当月,则添加预算
|
|
|
+ if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
|
|
|
+ || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
|
|
|
+ //如果开始时间和结束时间的月相同,则直接用总预算
|
|
|
+ if (budget.getPlanIsTwoMonth() == 0) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //如果开始月是当前月,则直接使用开始金额
|
|
|
+ if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //结束月是当前月,使用结束金额
|
|
|
+ big = big.add(budget.getPlanEndMoney());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setBudget4(vo.getBudget4().add(big));
|
|
|
+ c7 = c7.add(big);
|
|
|
+ }
|
|
|
+
|
|
|
if (isFinished){
|
|
|
List<ProjectCostBudget> d4 = finishedMap.get(4);
|
|
|
if (d4 != null && d4.size() > 0){
|
|
@@ -1644,6 +1767,32 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //其他预算金额
|
|
|
+ if (isBudget && isOtherBudget && otherBudgetMap.get(5) != null && otherBudgetMap.get(5).size() > 0){
|
|
|
+ List<ProjectCostBudget> b1 = otherBudgetMap.get(5);
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ //循环市场部每一个预算
|
|
|
+ for (ProjectCostBudget budget : b1) {
|
|
|
+ //如果开始时间或结束时间是当月,则添加预算
|
|
|
+ if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
|
|
|
+ || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
|
|
|
+ //如果开始时间和结束时间的月相同,则直接用总预算
|
|
|
+ if (budget.getPlanIsTwoMonth() == 0) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //如果开始月是当前月,则直接使用开始金额
|
|
|
+ if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //结束月是当前月,使用结束金额
|
|
|
+ big = big.add(budget.getPlanEndMoney());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ big1 = big.add(big);
|
|
|
+ }
|
|
|
+
|
|
|
if (isFinished){
|
|
|
List<ProjectCostBudget> d5 = finishedMap.get(5);
|
|
|
if (d5 != null && d5.size() > 0){
|
|
@@ -1690,6 +1839,32 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //其他预算金额
|
|
|
+ if (isBudget && isOtherBudget && otherBudgetMap.get(6) != null && otherBudgetMap.get(6).size() > 0){
|
|
|
+ List<ProjectCostBudget> b1 = otherBudgetMap.get(6);
|
|
|
+ BigDecimal big = new BigDecimal(0);
|
|
|
+ //循环市场部每一个预算
|
|
|
+ for (ProjectCostBudget budget : b1) {
|
|
|
+ //如果开始时间或结束时间是当月,则添加预算
|
|
|
+ if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
|
|
|
+ || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
|
|
|
+ //如果开始时间和结束时间的月相同,则直接用总预算
|
|
|
+ if (budget.getPlanIsTwoMonth() == 0) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //如果开始月是当前月,则直接使用开始金额
|
|
|
+ if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
|
|
|
+ big = big.add(budget.getPlanStartMoney());
|
|
|
+ } else {
|
|
|
+ //结束月是当前月,使用结束金额
|
|
|
+ big = big.add(budget.getPlanEndMoney());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ big1 = big.add(big);
|
|
|
+ }
|
|
|
+
|
|
|
if (isFinished){
|
|
|
List<ProjectCostBudget> d6 = finishedMap.get(6);
|
|
|
if (d6 != null && d6.size() > 0){
|