|
@@ -12,8 +12,10 @@ import org.springblade.control.dto.ControlProjectInfoDTO;
|
|
|
import org.springblade.control.dto.ProjectCostBudgetDTO;
|
|
|
import org.springblade.control.dto.ProjectCostBudgetStatsDTO;
|
|
|
import org.springblade.control.entity.*;
|
|
|
+import org.springblade.control.mapper.DepartmentPlanLogMapper;
|
|
|
import org.springblade.control.mapper.ProjectCostBudgetMapper;
|
|
|
import org.springblade.control.mapper.ProjectInfoMapper;
|
|
|
+import org.springblade.control.service.IDepartmentPlanLogService;
|
|
|
import org.springblade.control.service.IProjectCostBudgetService;
|
|
|
import org.springblade.control.service.IProjectInfoService;
|
|
|
import org.springblade.control.service.IProjectProcessService;
|
|
@@ -43,7 +45,7 @@ import java.util.stream.Collectors;
|
|
|
@AllArgsConstructor
|
|
|
public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBudgetMapper, ProjectCostBudget> implements IProjectCostBudgetService {
|
|
|
|
|
|
-// private final IProjectInfoService projectInfoService;
|
|
|
+ private final DepartmentPlanLogMapper logMapper;
|
|
|
|
|
|
private final ProjectInfoMapper infoMapper;
|
|
|
|
|
@@ -1133,6 +1135,67 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
|
|
|
return vo2;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 任务完成之后统计工作时间和人工成本
|
|
|
+ * @param PlanId 计划id
|
|
|
+ * @param practicalFinishTime 实际完成时间
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void taskFinishedStats(Long PlanId, LocalDate practicalFinishTime) {
|
|
|
+ //先获取当前计划
|
|
|
+ ProjectCostBudget budget = this.getById(PlanId);
|
|
|
+ budget.setStatus(4);
|
|
|
+ budget.setTaskApprove(1);
|
|
|
+ budget.setPracticalFinishTime(practicalFinishTime);
|
|
|
+ DictInfo dictInfo = baseMapper.getTaskType(budget.getPlanTaskType());
|
|
|
+ int taskType = dictInfo.getDictValue().intValue();
|
|
|
+ //计划为临时计划,则不计算金额直接闭环
|
|
|
+ if (taskType == 2){
|
|
|
+ this.updateById(budget);
|
|
|
+ }else {
|
|
|
+ //获取任务人工资
|
|
|
+ User userInfo = baseMapper.getUserInfo(budget.getTaskUser());
|
|
|
+ if (userInfo.getOneMoney() == null){
|
|
|
+ throw new ServiceException("没有为任务人设置工资");
|
|
|
+ }
|
|
|
+ Double money = userInfo.getOneMoney();
|
|
|
+ //为固定计划,则获取最后一条任务日志
|
|
|
+ DepartmentPlanLog planLog = logMapper.getNewestPlanLog(PlanId);
|
|
|
+ Integer realWorkDays = 0;
|
|
|
+ //日志类型为暂停,和status=3则 直接用实际工作时间
|
|
|
+ if (planLog.getStatus() == 0){
|
|
|
+ //实际工作时间
|
|
|
+ realWorkDays = planLog.getRealWorkDays();
|
|
|
+ }else {
|
|
|
+ //日志类型为开启,和status=2则 计算计划结束时间到中途开启时间 + 实际工作时间
|
|
|
+ if (planLog.getOpenPlanStartTime() == null){
|
|
|
+ //中途没暂停,开启过任务
|
|
|
+ if (planLog.getRealPlanStartTime().until(practicalFinishTime, ChronoUnit.DAYS) > 35) {
|
|
|
+ throw new ServiceException("固定计划完成周期超过一个月,请联系管理员");
|
|
|
+ }else {
|
|
|
+ realWorkDays = CommonUtil.getWorkDays(planLog.getRealPlanStartTime(), practicalFinishTime);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //中途暂停,开启过任务
|
|
|
+ //获取上次暂停时实际工作日
|
|
|
+ Integer days = planLog.getRealWorkDays();
|
|
|
+ //计算这次开启后到任务完成之间的工作日
|
|
|
+ if (planLog.getOpenPlanStartTime().until(practicalFinishTime, ChronoUnit.DAYS) > 35) {
|
|
|
+ throw new ServiceException("固定计划完成周期超过一个月,请联系管理员");
|
|
|
+ }else {
|
|
|
+ int day = CommonUtil.getWorkDays(planLog.getOpenPlanStartTime(), practicalFinishTime);
|
|
|
+ realWorkDays = days + day;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //设置status=4,taskAPP=1,实际工资,实际工资天数,实际完成时间,如果计划处于暂停中,那么实际完成时间就是暂停时间
|
|
|
+ }
|
|
|
+ budget.setPracticalTaskDays(new BigDecimal(realWorkDays));
|
|
|
+ //实际人工支出
|
|
|
+ budget.setActualTotalMoney(new BigDecimal(realWorkDays).multiply(new BigDecimal(money)));
|
|
|
+ this.updateById(budget);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 统计一行的几个总金额
|
|
|
*/
|