|
@@ -1316,6 +1316,8 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
int taskType = dictInfo.getDictValue().intValue();
|
|
int taskType = dictInfo.getDictValue().intValue();
|
|
//计划为临时计划,则不计算金额直接闭环
|
|
//计划为临时计划,则不计算金额直接闭环
|
|
if (taskType == 2){
|
|
if (taskType == 2){
|
|
|
|
+ //为临时任务设置任务实际实际,方便统计
|
|
|
|
+ budget.setPracticalTaskDays(new BigDecimal(1 + budget.getPracticalFinishTime().until(budget.getRealPlanStartTime(), ChronoUnit.DAYS)));
|
|
this.updateById(budget);
|
|
this.updateById(budget);
|
|
}else {
|
|
}else {
|
|
//获取任务人工资
|
|
//获取任务人工资
|
|
@@ -1740,7 +1742,14 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
Map<Long, List<ControlContractInfo>> contractMap = contractList.parallelStream()
|
|
Map<Long, List<ControlContractInfo>> contractMap = contractList.parallelStream()
|
|
.collect(Collectors.groupingBy(ControlContractInfo::getProjectId));
|
|
.collect(Collectors.groupingBy(ControlContractInfo::getProjectId));
|
|
//返回结果
|
|
//返回结果
|
|
- Map<Long,List<BigDecimal>> map = new HashMap<>();
|
|
|
|
|
|
+ Map<Integer,List<BigDecimal>> map = new HashMap<>();
|
|
|
|
+ for (int i = 1; i <= 6; i++) {
|
|
|
|
+ List<BigDecimal> list = new ArrayList<>();
|
|
|
|
+ for (int j = 0; j < 12; j++) {
|
|
|
|
+ list.add(new BigDecimal(0));
|
|
|
|
+ }
|
|
|
|
+ map.put(i,list);
|
|
|
|
+ }
|
|
//循环项目,
|
|
//循环项目,
|
|
for (ControlProjectInfo info : projectInfos) {
|
|
for (ControlProjectInfo info : projectInfos) {
|
|
List<ControlContractInfo> infos = contractMap.get(info.getId());
|
|
List<ControlContractInfo> infos = contractMap.get(info.getId());
|
|
@@ -1751,23 +1760,43 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
ControlContractInfo contract = contractMap.get(info.getId()).get(0);
|
|
ControlContractInfo contract = contractMap.get(info.getId()).get(0);
|
|
LocalDate startTime = contract.getStartTime();
|
|
LocalDate startTime = contract.getStartTime();
|
|
LocalDate endTime = contract.getEndTime();
|
|
LocalDate endTime = contract.getEndTime();
|
|
|
|
+ //合同开始日期比今天大,直接跳过
|
|
|
|
+ if (LocalDate.now().compareTo(startTime) < 0){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
int years = endTime.getYear() - startTime.getYear();
|
|
int years = endTime.getYear() - startTime.getYear();
|
|
int months = years * 12 + (endTime.getMonthValue() - startTime.getMonthValue()) + 1;
|
|
int months = years * 12 + (endTime.getMonthValue() - startTime.getMonthValue()) + 1;
|
|
//每个项目的维护总和 / 多少个月 = 该项目每个月的维护费
|
|
//每个项目的维护总和 / 多少个月 = 该项目每个月的维护费
|
|
|
|
+ //该项目所有的维护计划,不会为空,
|
|
List<ProjectCostBudget> list = budgetMap.get(info.getId());
|
|
List<ProjectCostBudget> list = budgetMap.get(info.getId());
|
|
- BigDecimal big = new BigDecimal(0);
|
|
|
|
|
|
+ //查询出每个部门的维护支出
|
|
|
|
+ BigDecimal b1 = new BigDecimal(0);
|
|
|
|
+ BigDecimal b2 = new BigDecimal(0);
|
|
|
|
+ BigDecimal b3 = new BigDecimal(0);
|
|
|
|
+ BigDecimal b4 = new BigDecimal(0);
|
|
|
|
+ BigDecimal b5 = new BigDecimal(0);
|
|
|
|
+ BigDecimal b6 = new BigDecimal(0);
|
|
for (ProjectCostBudget l : list) {
|
|
for (ProjectCostBudget l : list) {
|
|
- big = big.add(l.getBudgetStaffCost());
|
|
|
|
- }
|
|
|
|
- if (big.compareTo(new BigDecimal(0)) == 0){
|
|
|
|
- continue;
|
|
|
|
|
|
+ if (l.getCostType() == 1){
|
|
|
|
+ b1 = b1.add(l.getBudgetStaffCost());
|
|
|
|
+ }
|
|
|
|
+ if (l.getCostType() == 2){
|
|
|
|
+ b2 = b2.add(l.getBudgetStaffCost());
|
|
|
|
+ }
|
|
|
|
+ if (l.getCostType() == 3){
|
|
|
|
+ b3 = b3.add(l.getBudgetStaffCost());
|
|
|
|
+ }
|
|
|
|
+ if (l.getCostType() == 4){
|
|
|
|
+ b4 = b4.add(l.getBudgetStaffCost());
|
|
|
|
+ }
|
|
|
|
+ if (l.getCostType() == 5){
|
|
|
|
+ b5 = b5.add(l.getBudgetStaffCost());
|
|
|
|
+ }
|
|
|
|
+ if (l.getCostType() == 6){
|
|
|
|
+ b6 = b6.add(l.getBudgetStaffCost());
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- //获得每个月的维护费
|
|
|
|
- BigDecimal scale = big.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
// 当前日期和合同开始时间比较,相差多少月 月 * 每个月维护费 = 当前项目截至当前的所有维护费
|
|
// 当前日期和合同开始时间比较,相差多少月 月 * 每个月维护费 = 当前项目截至当前的所有维护费
|
|
- if (LocalDate.now().compareTo(startTime) < 0){
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
int startMonth = 0;
|
|
int startMonth = 0;
|
|
int endMonth = 0;
|
|
int endMonth = 0;
|
|
//判断是否查询今年
|
|
//判断是否查询今年
|
|
@@ -1816,18 +1845,71 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- //为项目设置值
|
|
|
|
- List<BigDecimal> decimalList = new ArrayList<>();
|
|
|
|
- for (int i = 1; i <= 12; i++) {
|
|
|
|
- if (i >= startMonth && i <= endMonth){
|
|
|
|
- decimalList.add(scale);
|
|
|
|
- }else {
|
|
|
|
- decimalList.add(new BigDecimal(0));
|
|
|
|
|
|
+ //为部门设置值
|
|
|
|
+ if (b1.intValue() != 0){
|
|
|
|
+ //获得部门每个月的维护费
|
|
|
|
+ BigDecimal scale = b1.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
+ List<BigDecimal> l1 = map.get(1);
|
|
|
|
+ for (int i = 1; i <= 12; i++) {
|
|
|
|
+ if (i >= startMonth && i <= endMonth){
|
|
|
|
+ l1.set(i-1,l1.get(i-1).add(scale));
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- map.put(info.getId(),decimalList);
|
|
|
|
|
|
+ if (b2.intValue() != 0){
|
|
|
|
+ //获得部门每个月的维护费
|
|
|
|
+ BigDecimal scale = b2.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
+ List<BigDecimal> l1 = map.get(2);
|
|
|
|
+ for (int i = 1; i <= 12; i++) {
|
|
|
|
+ if (i >= startMonth && i <= endMonth){
|
|
|
|
+ l1.set(i-1,l1.get(i-1).add(scale));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (b3.intValue() != 0){
|
|
|
|
+ //获得部门每个月的维护费
|
|
|
|
+ BigDecimal scale = b3.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
+ List<BigDecimal> l1 = map.get(3);
|
|
|
|
+ for (int i = 1; i <= 12; i++) {
|
|
|
|
+ if (i >= startMonth && i <= endMonth){
|
|
|
|
+ l1.set(i-1,l1.get(i-1).add(scale));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (b4.intValue() != 0){
|
|
|
|
+ //获得部门每个月的维护费
|
|
|
|
+ BigDecimal scale = b4.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
+ List<BigDecimal> l1 = map.get(4);
|
|
|
|
+ for (int i = 1; i <= 12; i++) {
|
|
|
|
+ if (i >= startMonth && i <= endMonth){
|
|
|
|
+ l1.set(i-1,l1.get(i-1).add(scale));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (b5.intValue() != 0){
|
|
|
|
+ //获得部门每个月的维护费
|
|
|
|
+ BigDecimal scale = b5.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
+ List<BigDecimal> l1 = map.get(5);
|
|
|
|
+ for (int i = 1; i <= 12; i++) {
|
|
|
|
+ if (i >= startMonth && i <= endMonth){
|
|
|
|
+ l1.set(i-1,l1.get(i-1).add(scale));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (b6.intValue() != 0){
|
|
|
|
+ //获得部门每个月的维护费
|
|
|
|
+ BigDecimal scale = b6.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
+ List<BigDecimal> l1 = map.get(6);
|
|
|
|
+ for (int i = 1; i <= 12; i++) {
|
|
|
|
+ if (i >= startMonth && i <= endMonth){
|
|
|
|
+ l1.set(i-1,l1.get(i-1).add(scale));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
- return null;
|
|
|
|
|
|
+ return map;
|
|
}
|
|
}
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|