|
@@ -29,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
+import java.time.temporal.ChronoUnit;
|
|
|
import java.time.temporal.TemporalAdjusters;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -306,16 +307,17 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
vo2.setPlanEndTime(endDate);
|
|
|
//根据任务类型设置父计划的工作天数,固定任务1,临时任务2
|
|
|
if (taskMap.get(vo2.getPlanTaskType()).get(0).getDictValue().intValue() == 1){
|
|
|
- vo2.setPlanDays(new BigDecimal(endDate.compareTo(startDate)));
|
|
|
+ vo2.setPlanDays(new BigDecimal(endDate.compareTo(startDate) + 1));
|
|
|
}else {
|
|
|
- if (endDate.compareTo(startDate) > 35){
|
|
|
- //工作天数,工具只能获取50天之内的
|
|
|
- int i = 0;
|
|
|
- while (endDate.compareTo(startDate) > 0){
|
|
|
- i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
|
|
|
- startDate = startDate.plusDays(36L);
|
|
|
- }
|
|
|
- vo2.setPlanDays(new BigDecimal(i));
|
|
|
+ if (startDate.until(endDate,ChronoUnit.DAYS) > 35){
|
|
|
+ throw new ServiceException("请不要制定超过一个月的临时计划");
|
|
|
+// //工作天数,工具只能获取50天之内的
|
|
|
+// int i = 0;
|
|
|
+// while (endDate.compareTo(startDate) > 0){
|
|
|
+// i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
|
|
|
+// startDate = startDate.plusDays(36L);
|
|
|
+// }
|
|
|
+// vo2.setPlanDays(new BigDecimal(i));
|
|
|
}else {
|
|
|
vo2.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(startDate, endDate)));
|
|
|
}
|
|
@@ -508,8 +510,13 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
* 根据起止日期获取工作日
|
|
|
*/
|
|
|
@Override
|
|
|
- public Integer getWorkDays(LocalDate startDate, LocalDate endDate) {
|
|
|
- return CommonUtil.getWorkDays(startDate,endDate);
|
|
|
+ public Integer getWorkDays(LocalDate startDate, LocalDate endDate,Long planTaskType) {
|
|
|
+ DictInfo info = baseMapper.getTaskType(planTaskType);
|
|
|
+ if (info.getDictValue().intValue() == 1){
|
|
|
+ return new BigDecimal(startDate.until(endDate,ChronoUnit.DAYS)).intValue() + 1 ;
|
|
|
+ }else {
|
|
|
+ return CommonUtil.getWorkDays(startDate, endDate);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -937,8 +944,10 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
@Override
|
|
|
public ProjectCostBudgetVO2 updateMainPlan(ProjectCostBudgetVO2 vo2) {
|
|
|
//先判断如果数据都没填写,则设置可以分解子计划
|
|
|
- if (vo2.getPlanTaskType() == null && StringUtils.isBlank(vo2.getPlanTaskDesc()) && StringUtils.isBlank(vo2.getPlanTarget()) && vo2.getPlanDays() == null){
|
|
|
+ if (vo2.getPlanTaskType() == null && StringUtils.isBlank(vo2.getPlanTaskDesc()) && StringUtils.isBlank(vo2.getPlanTarget())
|
|
|
+ && vo2.getPlanStartTime() == null && vo2.getPlanEndTime() == null){
|
|
|
vo2.setPlanTaskTypeValue(null);
|
|
|
+ vo2.setPlanDays(null);
|
|
|
vo2.setIsShowChildren(1);
|
|
|
return vo2;
|
|
|
}
|
|
@@ -959,18 +968,19 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
int type = taskType.getDictValue().intValue();
|
|
|
//根据任务类型设置父计划的工作天数,固定任务1,临时任务2
|
|
|
if (type == 1){
|
|
|
- vo2.setPlanDays(new BigDecimal(vo2.getPlanEndTime().compareTo(vo2.getPlanStartTime())));
|
|
|
+ vo2.setPlanDays(new BigDecimal(vo2.getPlanStartTime().until(vo2.getPlanEndTime(),ChronoUnit.DAYS) + 1));
|
|
|
}else {
|
|
|
- if (vo2.getPlanEndTime().compareTo(vo2.getPlanStartTime()) > 35){
|
|
|
- //工作天数,工具只能获取50天之内的
|
|
|
- LocalDate startDate = vo2.getPlanStartTime();
|
|
|
- LocalDate endDate = vo2.getPlanEndTime();
|
|
|
- int i = 0;
|
|
|
- while (endDate.compareTo(startDate) > 0){
|
|
|
- i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
|
|
|
- startDate = startDate.plusDays(36L);
|
|
|
- }
|
|
|
- vo2.setPlanDays(new BigDecimal(i));
|
|
|
+ if (vo2.getPlanStartTime().until(vo2.getPlanEndTime(),ChronoUnit.DAYS) > 35){
|
|
|
+ throw new ServiceException("请不要制定超过一个月的临时计划");
|
|
|
+// //工作天数,工具只能获取50天之内的
|
|
|
+// LocalDate startDate = vo2.getPlanStartTime();
|
|
|
+// LocalDate endDate = vo2.getPlanEndTime();
|
|
|
+// int i = 0;
|
|
|
+// while (endDate.compareTo(startDate) > 0){
|
|
|
+// i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
|
|
|
+// startDate = startDate.plusDays(36L);
|
|
|
+// }
|
|
|
+// vo2.setPlanDays(new BigDecimal(i));
|
|
|
}else {
|
|
|
vo2.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(vo2.getPlanStartTime(), vo2.getPlanEndTime())));
|
|
|
}
|
|
@@ -978,6 +988,8 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
if (vo2.getPlanDays().intValue() > vo2.getBudgetDays().intValue()){
|
|
|
vo2.setOutMoneyTips("成本增加!该项计划完成时间超过当初测算时间工作时长("+(vo2.getPlanDays().intValue() - vo2.getBudgetDays().intValue())+")天");
|
|
|
vo2.setTaskFinishedStatus(1);
|
|
|
+ }else {
|
|
|
+ vo2.setTaskFinishedStatus(0);
|
|
|
}
|
|
|
vo2.setIsShowChildren(0);
|
|
|
return vo2;
|
|
@@ -999,7 +1011,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
}else {
|
|
|
taskType = budgetVO2.getPlanTaskType();
|
|
|
}
|
|
|
- DictInfo task = baseMapper.getTaskType(vo2.getPlanTaskType());
|
|
|
+ DictInfo task = baseMapper.getTaskType(taskType);
|
|
|
//拼接父计划信息
|
|
|
BigDecimal workDays = new BigDecimal(0);
|
|
|
LocalDate startDate = LocalDate.MAX;
|
|
@@ -1007,6 +1019,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
StringBuilder descStr = new StringBuilder();
|
|
|
StringBuilder targetStr = new StringBuilder();
|
|
|
int j = 1;
|
|
|
+ Boolean isFinished = true;
|
|
|
for (ProjectCostBudgetVO2 l : list) {
|
|
|
//校验数据
|
|
|
if (l.getPlanTaskType() == null){
|
|
@@ -1022,14 +1035,17 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
if (!taskType.equals(l.getPlanTaskType())){
|
|
|
throw new ServiceException("子计划任务类型不一致");
|
|
|
}
|
|
|
+ if (budgetVO2.getTaskApprove() == null || budgetVO2.getTaskApprove() != 1){
|
|
|
+ isFinished = false;
|
|
|
+ }
|
|
|
//计算总天数
|
|
|
if (l.getPlanDays() != null) {
|
|
|
workDays = workDays.add(l.getPlanDays());
|
|
|
}else {
|
|
|
if (task.getDictValue().intValue() == 1) {
|
|
|
- l.setPlanDays(new BigDecimal(endDate.compareTo(startDate)));
|
|
|
+ l.setPlanDays(new BigDecimal(l.getPlanStartTime().until(l.getPlanEndTime(),ChronoUnit.DAYS) + 1));
|
|
|
} else {
|
|
|
- if (l.getPlanEndTime().compareTo(budgetVO2.getPlanStartTime()) > 35) {
|
|
|
+ if (l.getPlanStartTime().until(l.getPlanEndTime(), ChronoUnit.DAYS) > 35) {
|
|
|
throw new ServiceException("请不要制定超过一个月的临时计划");
|
|
|
}else {
|
|
|
l.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(budgetVO2.getPlanStartTime(), budgetVO2.getPlanEndTime())));
|
|
@@ -1049,10 +1065,19 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
targetStr.append(j+"."+l.getPlanTarget()+"。");
|
|
|
j++;
|
|
|
}
|
|
|
+
|
|
|
+ //所有子计划完成,设置父计划为绿色
|
|
|
+ if (isFinished){
|
|
|
+ vo2.setTaskFinishedStatus(2);
|
|
|
+ }
|
|
|
//计算是否超过预算
|
|
|
- if (workDays.intValue() > vo2.getBudgetDays().intValue()){
|
|
|
- vo2.setTaskFinishedStatus(1);
|
|
|
- vo2.setOutMoneyTips("成本增加!该项计划完成时间超过当初测算时间工作时长("+(workDays.intValue() - vo2.getBudgetDays().intValue())+"天)");
|
|
|
+ if (vo2.getTaskFinishedStatus() == null || vo2.getTaskFinishedStatus() != 2) {
|
|
|
+ if (workDays.intValue() > vo2.getBudgetDays().intValue()) {
|
|
|
+ vo2.setTaskFinishedStatus(1);
|
|
|
+ vo2.setOutMoneyTips("成本增加!该项计划完成时间超过当初测算时间工作时长(" + (workDays.intValue() - vo2.getBudgetDays().intValue()) + "天)");
|
|
|
+ } else {
|
|
|
+ vo2.setTaskFinishedStatus(null);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//根据子计划设置父计划任务类型
|
|
@@ -1068,16 +1093,17 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
vo2.setPlanEndTime(endDate);
|
|
|
//根据任务类型设置父计划的工作天数,固定任务1,临时任务2
|
|
|
if (task.getDictValue().intValue() == 1){
|
|
|
- vo2.setPlanDays(new BigDecimal(endDate.compareTo(startDate)));
|
|
|
+ vo2.setPlanDays(new BigDecimal(startDate.until(endDate,ChronoUnit.DAYS)+ 1));
|
|
|
}else {
|
|
|
- if (endDate.compareTo(startDate) > 35){
|
|
|
- //工作天数,工具只能获取50天之内的
|
|
|
- int i = 0;
|
|
|
- while (endDate.compareTo(startDate) > 0){
|
|
|
- i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
|
|
|
- startDate = startDate.plusDays(36L);
|
|
|
- }
|
|
|
- vo2.setPlanDays(new BigDecimal(i));
|
|
|
+ if (startDate.until(endDate,ChronoUnit.DAYS) > 35){
|
|
|
+ throw new ServiceException("请不要制定超过一个月的临时计划");
|
|
|
+// //工作天数,工具只能获取50天之内的
|
|
|
+// int i = 0;
|
|
|
+// while (endDate.compareTo(startDate) > 0){
|
|
|
+// i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
|
|
|
+// startDate = startDate.plusDays(36L);
|
|
|
+// }
|
|
|
+// vo2.setPlanDays(new BigDecimal(i));
|
|
|
}else {
|
|
|
vo2.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(startDate, endDate)));
|
|
|
}
|
|
@@ -1085,14 +1111,15 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
vo2.setIsShowEdit(0);
|
|
|
|
|
|
}else {
|
|
|
- vo2.setPlanTaskType(null);
|
|
|
- vo2.setPlanTaskDesc(null);
|
|
|
- vo2.setPlanTarget(null);
|
|
|
- vo2.setPlanStartTime(null);
|
|
|
- vo2.setPlanEndTime(null);
|
|
|
- vo2.setPlanDays(null);
|
|
|
- vo2.setIsShowEdit(1);
|
|
|
- return vo2;
|
|
|
+ vo2.setPlanTaskTypeValue(null);
|
|
|
+ vo2.setPlanTaskType(null);
|
|
|
+ vo2.setPlanTaskDesc(null);
|
|
|
+ vo2.setPlanTarget(null);
|
|
|
+ vo2.setPlanStartTime(null);
|
|
|
+ vo2.setPlanEndTime(null);
|
|
|
+ vo2.setPlanDays(null);
|
|
|
+ vo2.setIsShowEdit(1);
|
|
|
+ return vo2;
|
|
|
}
|
|
|
return vo2;
|
|
|
}
|