|
@@ -15,6 +15,7 @@ import org.springblade.control.entity.*;
|
|
import org.springblade.control.mapper.DepartmentPlanLogMapper;
|
|
import org.springblade.control.mapper.DepartmentPlanLogMapper;
|
|
import org.springblade.control.mapper.ProjectCostBudgetMapper;
|
|
import org.springblade.control.mapper.ProjectCostBudgetMapper;
|
|
import org.springblade.control.mapper.ProjectInfoMapper;
|
|
import org.springblade.control.mapper.ProjectInfoMapper;
|
|
|
|
+import org.springblade.control.mapper.WorkDateInfoMapper;
|
|
import org.springblade.control.service.*;
|
|
import org.springblade.control.service.*;
|
|
import org.springblade.control.vo.*;
|
|
import org.springblade.control.vo.*;
|
|
import org.springblade.core.log.exception.ServiceException;
|
|
import org.springblade.core.log.exception.ServiceException;
|
|
@@ -51,6 +52,10 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
private final ProjectCostBudgetMapper budgetMapper;
|
|
private final ProjectCostBudgetMapper budgetMapper;
|
|
|
|
|
|
private final IContractInfoService contractService;
|
|
private final IContractInfoService contractService;
|
|
|
|
+
|
|
|
|
+ private final WorkDateInfoMapper dateInfoMapper;
|
|
|
|
+
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 批量新增或修改预算
|
|
* 批量新增或修改预算
|
|
* @param dto
|
|
* @param dto
|
|
@@ -352,22 +357,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
if (taskMap.get(vo2.getPlanTaskType()).get(0).getDictValue().intValue() == 2){
|
|
if (taskMap.get(vo2.getPlanTaskType()).get(0).getDictValue().intValue() == 2){
|
|
vo2.setPlanDays(new BigDecimal(endDate.compareTo(startDate) + 1));
|
|
vo2.setPlanDays(new BigDecimal(endDate.compareTo(startDate) + 1));
|
|
}else {
|
|
}else {
|
|
- 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 {
|
|
|
|
- try {
|
|
|
|
- vo2.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(startDate, endDate)));
|
|
|
|
- }catch (NullPointerException e){
|
|
|
|
- throw new ServiceException("请不要刷新这么快,请稍后再试");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ vo2.setPlanDays(new BigDecimal(dateInfoMapper.getWorkDays(startDate, endDate)));
|
|
}
|
|
}
|
|
//如果计划已经完成,则不计算超预算
|
|
//如果计划已经完成,则不计算超预算
|
|
if (vo2.getTaskFinishedStatus() == null && vo2.getPlanDays() != null && vo2.getBudgetDays() != null){
|
|
if (vo2.getTaskFinishedStatus() == null && vo2.getPlanDays() != null && vo2.getBudgetDays() != null){
|
|
@@ -505,7 +495,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
}
|
|
}
|
|
//如果保存太快,没有生成planDays,就查询
|
|
//如果保存太快,没有生成planDays,就查询
|
|
if (budget.getPlanDays() == null || budget.getPlanDays().intValue() == 0){
|
|
if (budget.getPlanDays() == null || budget.getPlanDays().intValue() == 0){
|
|
- budget.setPlanDays(new BigDecimal( CommonUtil.getWorkDays(budget.getPlanStartTime(),budget.getPlanEndTime())));
|
|
|
|
|
|
+ budget.setPlanDays(new BigDecimal( dateInfoMapper.getWorkDays(budget.getPlanStartTime(),budget.getPlanEndTime())));
|
|
}
|
|
}
|
|
budget.setProjectId(vo.getProjectId());
|
|
budget.setProjectId(vo.getProjectId());
|
|
budget.setParentId(vo2.getId());
|
|
budget.setParentId(vo2.getId());
|
|
@@ -528,7 +518,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
// isTwoMonth = true;
|
|
// isTwoMonth = true;
|
|
budget.setPlanIsTwoMonth(1);
|
|
budget.setPlanIsTwoMonth(1);
|
|
//计算开始到月底多少个工作日
|
|
//计算开始到月底多少个工作日
|
|
- int days = CommonUtil.getWorkDays(budget.getPlanStartTime(), LocalDate.of(vo2.getPlanStartTime().getYear(), budget.getPlanStartTime().getMonthValue(), budget.getPlanStartTime().getMonth().maxLength()));
|
|
|
|
|
|
+ int days = dateInfoMapper.getWorkDays(budget.getPlanStartTime(), LocalDate.of(vo2.getPlanStartTime().getYear(), budget.getPlanStartTime().getMonthValue(), budget.getPlanStartTime().getMonth().maxLength()));
|
|
if (days > budget.getPlanDays().intValue()){
|
|
if (days > budget.getPlanDays().intValue()){
|
|
//如果这个月工作天数大于总天数,那么所有值都设置到本月
|
|
//如果这个月工作天数大于总天数,那么所有值都设置到本月
|
|
// startTotalDays = startTotalDays.add(budget.getPlanDays());
|
|
// startTotalDays = startTotalDays.add(budget.getPlanDays());
|
|
@@ -581,7 +571,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
if (budget.getPlanStartTime().getMonthValue() != budget.getPlanEndTime().getMonthValue()) {
|
|
if (budget.getPlanStartTime().getMonthValue() != budget.getPlanEndTime().getMonthValue()) {
|
|
budget.setPlanIsTwoMonth(1);
|
|
budget.setPlanIsTwoMonth(1);
|
|
//计算开始到月底多少个工作日
|
|
//计算开始到月底多少个工作日
|
|
- int days = CommonUtil.getWorkDays(budget.getPlanStartTime(), LocalDate.of(budget.getPlanStartTime().getYear(), budget.getPlanStartTime().getMonthValue(), budget.getPlanStartTime().getMonth().maxLength()));
|
|
|
|
|
|
+ int days = dateInfoMapper.getWorkDays(budget.getPlanStartTime(), LocalDate.of(budget.getPlanStartTime().getYear(), budget.getPlanStartTime().getMonthValue(), budget.getPlanStartTime().getMonth().maxLength()));
|
|
if (days > budget.getPlanDays().intValue()){
|
|
if (days > budget.getPlanDays().intValue()){
|
|
//如果这个月工作天数大于总天数,那么所有值都设置到本月
|
|
//如果这个月工作天数大于总天数,那么所有值都设置到本月
|
|
budget.setPlanStartMonthDays(budget.getPlanDays());
|
|
budget.setPlanStartMonthDays(budget.getPlanDays());
|
|
@@ -618,27 +608,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public List<ProjectCostBudgetVO> getDepartmentPlan(Long deptId, String date) {
|
|
public List<ProjectCostBudgetVO> getDepartmentPlan(Long deptId, String date) {
|
|
- //初始化时间段
|
|
|
|
- String[] split = date.split("-");
|
|
|
|
- int year = Integer.parseInt(split[0]);
|
|
|
|
- int month = Integer.parseInt(split[1]);
|
|
|
|
- LocalDate startDate;
|
|
|
|
- LocalDate endDate;
|
|
|
|
- startDate = LocalDate.of(year,month,1);
|
|
|
|
- if (Arrays.asList("1,3,5,7,8,10,12".split(",")).contains(month)){
|
|
|
|
- endDate = LocalDate.of(year,month,31);
|
|
|
|
- }else {
|
|
|
|
- if (month != 2) {
|
|
|
|
- endDate = LocalDate.of(year, month, 30);
|
|
|
|
- }else {
|
|
|
|
- if (year % 4 == 0){
|
|
|
|
- endDate = LocalDate.of(year, month, 29);
|
|
|
|
- }else {
|
|
|
|
- endDate = LocalDate.of(year, month, 28);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- List<ProjectCostBudgetVO> departmentPlan = baseMapper.getDepartmentPlan(deptId, startDate, endDate);
|
|
|
|
|
|
+ List<ProjectCostBudgetVO> departmentPlan = baseMapper.getDepartmentPlan(deptId, date);
|
|
List<DictInfo> allTaskInfo = budgetMapper.getAllTaskInfo();
|
|
List<DictInfo> allTaskInfo = budgetMapper.getAllTaskInfo();
|
|
Map<Long, List<DictInfo>> taskMap = new HashMap<>();
|
|
Map<Long, List<DictInfo>> taskMap = new HashMap<>();
|
|
if (allTaskInfo != null && allTaskInfo.size() > 0) {
|
|
if (allTaskInfo != null && allTaskInfo.size() > 0) {
|
|
@@ -691,12 +661,8 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
DictInfo info = baseMapper.getTaskType(planTaskType);
|
|
DictInfo info = baseMapper.getTaskType(planTaskType);
|
|
if (info.getDictValue().intValue() == 2){
|
|
if (info.getDictValue().intValue() == 2){
|
|
return new BigDecimal(startDate.until(endDate,ChronoUnit.DAYS)).intValue() + 1 ;
|
|
return new BigDecimal(startDate.until(endDate,ChronoUnit.DAYS)).intValue() + 1 ;
|
|
- }else {
|
|
|
|
- if (startDate.until(endDate,ChronoUnit.DAYS) > 35){
|
|
|
|
- throw new ServiceException("请不要制定超过一个月的固定计划");
|
|
|
|
- }
|
|
|
|
- return CommonUtil.getWorkDays(startDate, endDate);
|
|
|
|
}
|
|
}
|
|
|
|
+ return dateInfoMapper.getWorkDays(startDate, endDate);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -772,7 +738,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
//获取用户当月填写的日志
|
|
//获取用户当月填写的日志
|
|
Integer logTotal = baseMapper.getUserMonthLog(userId,start,end);
|
|
Integer logTotal = baseMapper.getUserMonthLog(userId,start,end);
|
|
//根据开始时间,结束时间获取工作日应该填写
|
|
//根据开始时间,结束时间获取工作日应该填写
|
|
- days = CommonUtil.getWorkDays(start, end.plusDays(-1));
|
|
|
|
|
|
+ days = dateInfoMapper.getWorkDays(start, end.plusDays(-1));
|
|
//计算 应该填写-实际填写
|
|
//计算 应该填写-实际填写
|
|
vo3.setNotFilledLog(days - logTotal);
|
|
vo3.setNotFilledLog(days - logTotal);
|
|
}
|
|
}
|
|
@@ -1213,8 +1179,8 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
if (type == 2){
|
|
if (type == 2){
|
|
vo2.setPlanDays(new BigDecimal(vo2.getPlanStartTime().until(vo2.getPlanEndTime(),ChronoUnit.DAYS) + 1));
|
|
vo2.setPlanDays(new BigDecimal(vo2.getPlanStartTime().until(vo2.getPlanEndTime(),ChronoUnit.DAYS) + 1));
|
|
}else {
|
|
}else {
|
|
- if (vo2.getPlanStartTime().until(vo2.getPlanEndTime(),ChronoUnit.DAYS) > 35){
|
|
|
|
- throw new ServiceException("请不要制定超过一个月的固定计划");
|
|
|
|
|
|
+// if (vo2.getPlanStartTime().until(vo2.getPlanEndTime(),ChronoUnit.DAYS) > 35){
|
|
|
|
+// throw new ServiceException("请不要制定超过一个月的固定计划");
|
|
// //工作天数,工具只能获取50天之内的
|
|
// //工作天数,工具只能获取50天之内的
|
|
// LocalDate startDate = vo2.getPlanStartTime();
|
|
// LocalDate startDate = vo2.getPlanStartTime();
|
|
// LocalDate endDate = vo2.getPlanEndTime();
|
|
// LocalDate endDate = vo2.getPlanEndTime();
|
|
@@ -1224,9 +1190,9 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
// startDate = startDate.plusDays(36L);
|
|
// startDate = startDate.plusDays(36L);
|
|
// }
|
|
// }
|
|
// vo2.setPlanDays(new BigDecimal(i));
|
|
// vo2.setPlanDays(new BigDecimal(i));
|
|
- }else {
|
|
|
|
- vo2.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(vo2.getPlanStartTime(), vo2.getPlanEndTime())));
|
|
|
|
- }
|
|
|
|
|
|
+// }else {
|
|
|
|
+ vo2.setPlanDays(new BigDecimal(dateInfoMapper.getWorkDays(vo2.getPlanStartTime(), vo2.getPlanEndTime())));
|
|
|
|
+// }
|
|
}
|
|
}
|
|
if (vo2.getPlanDays().intValue() > vo2.getBudgetDays().multiply(vo2.getStaffCount()).intValue()){
|
|
if (vo2.getPlanDays().intValue() > vo2.getBudgetDays().multiply(vo2.getStaffCount()).intValue()){
|
|
vo2.setOutMoneyTips("成本增加!该项计划完成时间超过当初测算时间工作时长("+(vo2.getPlanDays().intValue() - vo2.getBudgetDays().multiply(vo2.getStaffCount()).intValue())+")天");
|
|
vo2.setOutMoneyTips("成本增加!该项计划完成时间超过当初测算时间工作时长("+(vo2.getPlanDays().intValue() - vo2.getBudgetDays().multiply(vo2.getStaffCount()).intValue())+")天");
|
|
@@ -1299,12 +1265,8 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
if (task.getDictValue().intValue() == 2) {
|
|
if (task.getDictValue().intValue() == 2) {
|
|
l.setPlanDays(new BigDecimal(l.getPlanStartTime().until(l.getPlanEndTime(),ChronoUnit.DAYS) + 1));
|
|
l.setPlanDays(new BigDecimal(l.getPlanStartTime().until(l.getPlanEndTime(),ChronoUnit.DAYS) + 1));
|
|
} else {
|
|
} else {
|
|
- if (l.getPlanStartTime().until(l.getPlanEndTime(), ChronoUnit.DAYS) > 35) {
|
|
|
|
- throw new ServiceException("请不要制定超过一个月的固定计划");
|
|
|
|
- }else {
|
|
|
|
- if (l.getIsShowDelete() != 0) {
|
|
|
|
- l.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(budgetVO2.getPlanStartTime(), budgetVO2.getPlanEndTime())));
|
|
|
|
- }
|
|
|
|
|
|
+ if (l.getIsShowDelete() != 0) {
|
|
|
|
+ l.setPlanDays(new BigDecimal(dateInfoMapper.getWorkDays(budgetVO2.getPlanStartTime(), budgetVO2.getPlanEndTime())));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1353,18 +1315,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
if (task.getDictValue().intValue() == 2){
|
|
if (task.getDictValue().intValue() == 2){
|
|
vo2.setPlanDays(new BigDecimal(startDate.until(endDate,ChronoUnit.DAYS)+ 1));
|
|
vo2.setPlanDays(new BigDecimal(startDate.until(endDate,ChronoUnit.DAYS)+ 1));
|
|
}else {
|
|
}else {
|
|
- 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)));
|
|
|
|
- }
|
|
|
|
|
|
+ vo2.setPlanDays(new BigDecimal(dateInfoMapper.getWorkDays(startDate, endDate)));
|
|
}
|
|
}
|
|
vo2.setIsShowEdit(0);
|
|
vo2.setIsShowEdit(0);
|
|
|
|
|
|
@@ -1424,28 +1375,20 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
//日志类型为开启,和status=2则 计算计划结束时间到中途开启时间 + 实际工作时间
|
|
//日志类型为开启,和status=2则 计算计划结束时间到中途开启时间 + 实际工作时间
|
|
if (planLog.getOpenPlanStartTime() == null){
|
|
if (planLog.getOpenPlanStartTime() == null){
|
|
//中途没暂停,开启过任务
|
|
//中途没暂停,开启过任务
|
|
- if (planLog.getRealPlanStartTime().until(practicalFinishTime, ChronoUnit.DAYS) > 35) {
|
|
|
|
- throw new ServiceException("固定计划完成周期超过一个月,请联系管理员");
|
|
|
|
- }else {
|
|
|
|
if (planLog.getRealPlanStartTime().compareTo(practicalFinishTime) >= 1){
|
|
if (planLog.getRealPlanStartTime().compareTo(practicalFinishTime) >= 1){
|
|
throw new ServiceException("数据错误,计划开始时间大于结束时间");
|
|
throw new ServiceException("数据错误,计划开始时间大于结束时间");
|
|
}
|
|
}
|
|
- realWorkDays = CommonUtil.getWorkDays(planLog.getRealPlanStartTime(), practicalFinishTime);
|
|
|
|
- }
|
|
|
|
|
|
+ realWorkDays = dateInfoMapper.getWorkDays(planLog.getRealPlanStartTime(), practicalFinishTime);
|
|
}else {
|
|
}else {
|
|
//中途暂停,开启过任务
|
|
//中途暂停,开启过任务
|
|
//获取上次暂停时实际工作日
|
|
//获取上次暂停时实际工作日
|
|
Integer days = planLog.getRealWorkDays();
|
|
Integer days = planLog.getRealWorkDays();
|
|
//计算这次开启后到任务完成之间的工作日
|
|
//计算这次开启后到任务完成之间的工作日
|
|
- if (planLog.getOpenPlanStartTime().until(practicalFinishTime, ChronoUnit.DAYS) > 35) {
|
|
|
|
- throw new ServiceException("固定计划完成周期超过一个月,请联系管理员");
|
|
|
|
- }else {
|
|
|
|
- if (planLog.getOpenPlanStartTime().compareTo(practicalFinishTime) >= 1){
|
|
|
|
- throw new ServiceException("数据错误,计划开始时间大于结束时间");
|
|
|
|
- }
|
|
|
|
- int day = CommonUtil.getWorkDays(planLog.getOpenPlanStartTime(), practicalFinishTime);
|
|
|
|
- realWorkDays = days + day;
|
|
|
|
|
|
+ if (planLog.getOpenPlanStartTime().compareTo(practicalFinishTime) >= 1){
|
|
|
|
+ throw new ServiceException("数据错误,计划开始时间大于结束时间");
|
|
}
|
|
}
|
|
|
|
+ int day = dateInfoMapper.getWorkDays(planLog.getOpenPlanStartTime(), practicalFinishTime);
|
|
|
|
+ realWorkDays = days + day;
|
|
}
|
|
}
|
|
//设置status=4,taskAPP=1,实际工资,实际工资天数,实际完成时间,如果计划处于暂停中,那么实际完成时间就是暂停时间
|
|
//设置status=4,taskAPP=1,实际工资,实际工资天数,实际完成时间,如果计划处于暂停中,那么实际完成时间就是暂停时间
|
|
}
|
|
}
|
|
@@ -1455,7 +1398,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
//判断是否跨月
|
|
//判断是否跨月
|
|
if (budget.getRealPlanStartTime().getMonthValue() != budget.getPracticalFinishTime().getMonthValue()){
|
|
if (budget.getRealPlanStartTime().getMonthValue() != budget.getPracticalFinishTime().getMonthValue()){
|
|
budget.setIsTwoMonth(1);
|
|
budget.setIsTwoMonth(1);
|
|
- int day = CommonUtil.getWorkDays(budget.getRealPlanStartTime(),LocalDate.of(budget.getRealPlanStartTime().getYear(),budget.getRealPlanStartTime().getMonthValue(),budget.getRealPlanStartTime().getMonth().maxLength()));
|
|
|
|
|
|
+ int day = dateInfoMapper.getWorkDays(budget.getRealPlanStartTime(),LocalDate.of(budget.getRealPlanStartTime().getYear(),budget.getRealPlanStartTime().getMonthValue(),budget.getRealPlanStartTime().getMonth().maxLength()));
|
|
if (day < realWorkDays){
|
|
if (day < realWorkDays){
|
|
budget.setPracticalStartMoney(new BigDecimal(day).multiply(new BigDecimal(money)));
|
|
budget.setPracticalStartMoney(new BigDecimal(day).multiply(new BigDecimal(money)));
|
|
budget.setPracticalEndMoney(budget.getActualTotalMoney().subtract(budget.getPracticalStartMoney()));
|
|
budget.setPracticalEndMoney(budget.getActualTotalMoney().subtract(budget.getPracticalStartMoney()));
|