Procházet zdrojové kódy

项目计划预算所有接口

qianxb před 2 roky
rodič
revize
26c9ffd69d

+ 4 - 6
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentPlanLog.java

@@ -100,20 +100,18 @@ public class DepartmentPlanLog extends BaseEntity {
 
 
     @ApiModelProperty(value = "项目原计划起止工时")
-    private BigDecimal planDays;
+    private Integer planDays;
 
     @ApiModelProperty(value = "上一次计划截至暂停阶段,起止工时(天)")
-    private BigDecimal realWorkDays;
+    private Integer realWorkDays;
 
     @ApiModelProperty(value = "计划执行顺序")
     private Integer sort;
 
     @ApiModelProperty(value = "中途暂停之后开启计划起止工时(天)")
-    private BigDecimal openPlanStartEndDays;
+    private Integer openPlanStartEndDays;
 
     @ApiModelProperty(value = "上一次计划工时(天)")
-    private BigDecimal lastOpenPlanStartEndDays;
+    private Integer lastOpenPlanStartEndDays;
 
-    @ApiModelProperty(value = "0不显示提示,1显示提示")
-    private Integer isShowTips;
 }

+ 18 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/DepartmentPlanLogVO.java

@@ -0,0 +1,18 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.control.entity.DepartmentPlanLog;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/7/12 18:25
+ **/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class DepartmentPlanLogVO extends DepartmentPlanLog {
+    @ApiModelProperty(value = "超时提示")
+    private Integer isShowTips;
+}

+ 2 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO.java

@@ -50,6 +50,7 @@ public class ProjectCostBudgetVO extends ProjectCostBudget {
     @ApiModelProperty(value = "计划建设单位")
     private Map<Integer,List<ProjectCostBudgetVO2>> constructUnit;
 
-
+    @ApiModelProperty(value = "任务类型值")
+    private String planTaskTypeValue;
 
 }

+ 0 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java

@@ -179,7 +179,6 @@ public interface WbsTreeContractClient {
     @GetMapping(API_PREFIX + "/getNextPkeyIdByNodeType")
     Long getNextPkeyIdByNodeType(@RequestParam Long pkeyId, @RequestParam Integer nodeType);
 
-
     //获取 节点下表单
     @GetMapping(API_PREFIX + "/searchNodeAllTableInfo")
     List<AppWbsTreeContractVO> searchNodeAllTableInfo(@RequestParam String primaryKeyId, @RequestParam String type, @RequestParam String contractId, @RequestParam String projectId);

+ 2 - 1
blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentPlanLogController.java

@@ -11,6 +11,7 @@ import org.springblade.control.dto.AnnualBudgetDTO;
 import org.springblade.control.entity.DepartmentPlanLog;
 import org.springblade.control.service.IAnnualBudgetService;
 import org.springblade.control.service.IDepartmentPlanLogService;
+import org.springblade.control.vo.DepartmentPlanLogVO;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
@@ -95,7 +96,7 @@ public class DepartmentPlanLogController {
     @PostMapping("/updateOpenTime")
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "修改开启计划时间")
-    public R<DepartmentPlanLog> updateOpenTime(@RequestBody DepartmentPlanLog log) {
+    public R<DepartmentPlanLogVO> updateOpenTime(@RequestBody DepartmentPlanLog log) {
         return R.data(logService.updateOpenTime(log));
     }
 

+ 2 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -89,7 +89,8 @@
                (select di.dict_name from c_dict_info di where di.type = 1 and di.dict_value = pcb.budget_type and di.parent_id = 0) as budgetTypeValue,
                (select di.dict_name from c_dict_info di where di.type = 1 and di.dict_value = pcb.task_detail and di.parent_id =
                    (select di.id from c_dict_info di where di.type = 1 and di.dict_value = pcb.budget_type and di.parent_id = 0)) as taskDetailValue,
-               (select cpp.name from c_project_process cpp WHERE cpp.id = pcb.project_process) as projectProcessValue
+               (select cpp.name from c_project_process cpp WHERE cpp.id = pcb.project_process) as projectProcessValue,
+               (select di.dict_name from c_dict_info di where di.type = 2 and di.id = pcb.plan_task_type) as planTaskTypeValue
         from c_project_cost_budget pcb
         WHERE pcb.cost_type = #{type}
           and (pcb.plan_start_time BETWEEN #{startDate} AND #{endDate}

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetStatsMapper.xml

@@ -16,7 +16,7 @@
     <select id="page" resultType="org.springblade.control.vo.ProjectCostBudgetStatsVO">
         SELECT cbs.*,cpi.name as projectName,
 --                CASE cbs.status WHEN '0' THEN '未上报' WHEN '1' THEN '已上报' WHEN '2' THEN '已审批' ELSE '已驳回' END as statusValue
-        IF ((select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.project_id = cbs.project_id and pcb.approve = 0)=0,0,1) as 'approveStatus'
+        IF ((select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.project_id = cbs.project_id and pcb.approve = 0 and pcb.parent_id = 0)=0,0,1) as 'approveStatus'
         from c_project_cost_budget_stats cbs left join bladex.c_control_project_info cpi on cbs.project_id = cpi.id
         where cbs.is_deleted = 0
         <if test="queryValue != null and queryValue != ''">

+ 2 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/IDepartmentPlanLogService.java

@@ -3,6 +3,7 @@ package org.springblade.control.service;
 import org.springblade.control.entity.DepartmentMonthPlan;
 import org.springblade.control.entity.DepartmentPlanLog;
 import org.springblade.control.entity.DictInfo;
+import org.springblade.control.vo.DepartmentPlanLogVO;
 import org.springblade.control.vo.ProjectCostBudgetVO;
 import org.springblade.core.mp.base.BaseService;
 
@@ -26,5 +27,5 @@ public interface IDepartmentPlanLogService extends BaseService<DepartmentPlanLog
 
     void savePlanInOpen(DepartmentPlanLog log);
 
-    DepartmentPlanLog updateOpenTime(DepartmentPlanLog log);
+    DepartmentPlanLogVO updateOpenTime(DepartmentPlanLog log);
 }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java

@@ -140,7 +140,7 @@ public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMo
                     planLog.setPlanStartTime(budget.getPlanStartTime());
                     planLog.setPlanEndTime(budget.getPlanEndTime());
                     planLog.setRealPlanStartTime(LocalDate.now());
-                    planLog.setPlanDays(budget.getPlanDays());
+                    planLog.setPlanDays(budget.getPlanDays().intValue());
                     planLog.setSort(1);
                     logService.save(planLog);
                     //修改计划状态为进行中

+ 45 - 8
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentPlanLogImpl.java

@@ -6,8 +6,10 @@ import org.springblade.common.utils.CommonUtil;
 import org.springblade.control.entity.DepartmentPlanLog;
 import org.springblade.control.mapper.DepartmentPlanLogMapper;
 import org.springblade.control.service.*;;
+import org.springblade.control.vo.DepartmentPlanLogVO;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
@@ -49,15 +51,30 @@ public class DepartmentPlanLogImpl extends BaseServiceImpl<DepartmentPlanLogMapp
         //计算暂停日期和,中途开启计划的开始日期,之前的工作天数,如果是第一次暂停,则中途开启为null,则计算计划实际开始日期
         int days;
         if (log.getOpenPlanStartTime() != null){
-            days = CommonUtil.getWorkDays(log.getOpenPlanStartTime(),log.getPauseTime());
+            //如果在开启当天暂停,则工时为0
+            if (log.getOpenPlanStartTime().compareTo(log.getPauseTime()) == 0){
+                days = 0;
+            }else {
+                days = CommonUtil.getWorkDays(log.getOpenPlanStartTime(), log.getPauseTime());
+                if (days != 0){
+                    days -= 1;
+                }
+            }
         }else {
-            days = CommonUtil.getWorkDays(log.getRealPlanStartTime(),log.getPauseTime());
+            if (log.getRealPlanStartTime().compareTo(log.getPauseTime()) == 0){
+                days = 0;
+            }else {
+                days = CommonUtil.getWorkDays(log.getRealPlanStartTime(), log.getPauseTime());
+                if (days != 0){
+                    days -= 1;
+                }
+            }
         }
         //更新计划实际工作日期,如果是第一次暂停则默认为0+
         if (log.getRealWorkDays() == null){
-            log.setRealWorkDays(new BigDecimal("0"));
+            log.setRealWorkDays(0);
         }
-        log.setRealWorkDays(log.getRealWorkDays().add(new BigDecimal(days)));
+        log.setRealWorkDays(log.getRealWorkDays() + days);
         return log;
     }
 
@@ -70,6 +87,15 @@ public class DepartmentPlanLogImpl extends BaseServiceImpl<DepartmentPlanLogMapp
         if (log.getPauseTime() == null){
             throw new ServiceException("请输入暂停时间");
         }
+//        if (log.getOpenPlanStartTime() == null){
+//            if (log.getPauseTime().compareTo(log.getRealPlanStartTime()) == 0){
+//                throw new ServiceException("不能在计划开启当天暂停");
+//            }
+//        }else {
+//            if (log.getPauseTime().compareTo(log.getOpenPlanStartTime()) == 0){
+//                throw new ServiceException("不能在计划开启当天暂停");
+//            }
+//        }
         log.setId(null);
         log.setSort(log.getSort()+1);
         log.setStatus(0);
@@ -102,7 +128,7 @@ public class DepartmentPlanLogImpl extends BaseServiceImpl<DepartmentPlanLogMapp
         //设置中途暂停结束时间,则为暂停时间
         log.setPausePlanEndTime(LocalDate.now());
         //计算剩余工作量
-        BigDecimal days = log.getPlanDays().subtract(log.getRealWorkDays());
+        int days = log.getPlanDays() - log.getRealWorkDays();
         //如果剩余天数大于0,才设置默认值
 //        if (days.intValue() > 0) {
 //            //设置默认,开启计划开启时间为今天
@@ -140,10 +166,21 @@ public class DepartmentPlanLogImpl extends BaseServiceImpl<DepartmentPlanLogMapp
      * @return
      */
     @Override
-    public DepartmentPlanLog updateOpenTime(DepartmentPlanLog log) {
+    public DepartmentPlanLogVO updateOpenTime(DepartmentPlanLog log) {
+        DepartmentPlanLogVO vo = new DepartmentPlanLogVO();
+        //先判断日期是否超过35天
+        if (log.getOpenPlanStartTime().until(log.getOpenPlanEndTime(), ChronoUnit.DAYS) > 35) {
+            throw new ServiceException("请不要制定超过一个月的临时计划");
+        }
         //计算中途开启的工作日
         int planDays = CommonUtil.getWorkDays(log.getOpenPlanStartTime(), log.getOpenPlanEndTime());
-        log.setOpenPlanStartEndDays(new BigDecimal(planDays));
-        return log;
+        log.setOpenPlanStartEndDays(planDays);
+        BeanUtils.copyProperties(log,vo);
+        if ((planDays + vo.getRealWorkDays()) > vo.getPlanDays()) {
+            vo.setIsShowTips(1);
+        }else {
+            vo.setIsShowTips(0);
+        }
+        return vo;
     }
 }

+ 17 - 8
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -231,7 +231,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                     int j = 1;
                     for (PlanRelationReturned returned : returnedList) {
                         ContractReturnedInfo info = returnedMap.get(returned.getReturnedId()).get(0);
-                        str.append(j+"."+info.getReturnedCondition()+"");
+                        str.append(j+"."+info.getReturnedCondition()+"");
                     }
                     l.setReturnedValue(str.toString());
                 }
@@ -306,7 +306,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                     vo2.setPlanStartTime(startDate);
                     vo2.setPlanEndTime(endDate);
                     //根据任务类型设置父计划的工作天数,固定任务1,临时任务2
-                    if (taskMap.get(vo2.getPlanTaskType()).get(0).getDictValue().intValue() == 1){
+                    if (taskMap.get(vo2.getPlanTaskType()).get(0).getDictValue().intValue() == 2){
                         vo2.setPlanDays(new BigDecimal(endDate.compareTo(startDate) + 1));
                     }else {
                         if (startDate.until(endDate,ChronoUnit.DAYS) > 35){
@@ -324,7 +324,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                     }
                     //如果计划已经完成,则不计算超预算
                     if (vo2.getTaskFinishedStatus() == null && vo2.getPlanDays() != null && vo2.getBudgetDays() != null){
-                        if (workDays.intValue() > vo2.getBudgetDays().intValue()) {
+                        if (workDays.intValue() > vo2.getBudgetDays().multiply(vo2.getStaffCount()).intValue()) {
                             vo2.setTaskFinishedStatus(1);
                             vo2.setOutMoneyTips("成本增加!该项计划完成时间超过当初测算时间工作时长("+(workDays.intValue() - vo2.getBudgetDays().intValue())+"天)");
                         }
@@ -482,9 +482,18 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             }
         }
         List<ProjectCostBudgetVO> departmentPlan = baseMapper.getDepartmentPlan(type, startDate, endDate);
+        List<DictInfo> allTaskInfo = budgetMapper.getAllTaskInfo();
+        Map<Long, List<DictInfo>> taskMap = new HashMap<>();
+        if (allTaskInfo != null && allTaskInfo.size() > 0) {
+            taskMap = allTaskInfo.parallelStream()
+                    .collect(Collectors.groupingBy(DictInfo::getId));
+        }else {
+            throw new ServiceException("请选择任务类型");
+        }
         if (departmentPlan != null && departmentPlan.size() > 0){
             for (ProjectCostBudgetVO vo : departmentPlan) {
-                if (vo.getStatus() == 1 || vo.getStatus() == 4){
+                //如果计划未开始,或者已完成,或者是固定计划,则不显示开启暂停
+                if (vo.getStatus() == 1 || vo.getStatus() == 4 || taskMap.get(vo.getPlanTaskType()).get(0).getDictValue() == 2){
                     vo.setStartOrStop(0);
                 }else if (vo.getStatus() == 2){
                     vo.setStartOrStop(1);
@@ -512,7 +521,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
     @Override
     public Integer getWorkDays(LocalDate startDate, LocalDate endDate,Long planTaskType) {
         DictInfo info = baseMapper.getTaskType(planTaskType);
-        if (info.getDictValue().intValue() == 1){
+        if (info.getDictValue().intValue() == 2){
             return new BigDecimal(startDate.until(endDate,ChronoUnit.DAYS)).intValue() + 1 ;
         }else {
             return CommonUtil.getWorkDays(startDate, endDate);
@@ -967,7 +976,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         vo2.setPlanTaskTypeValue(taskType.getDictName());
         int type = taskType.getDictValue().intValue();
         //根据任务类型设置父计划的工作天数,固定任务1,临时任务2
-        if (type == 1){
+        if (type == 2){
             vo2.setPlanDays(new BigDecimal(vo2.getPlanStartTime().until(vo2.getPlanEndTime(),ChronoUnit.DAYS) + 1));
         }else {
             if (vo2.getPlanStartTime().until(vo2.getPlanEndTime(),ChronoUnit.DAYS) > 35){
@@ -1042,7 +1051,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 if (l.getPlanDays() != null) {
                     workDays = workDays.add(l.getPlanDays());
                 }else {
-                    if (task.getDictValue().intValue() == 1) {
+                    if (task.getDictValue().intValue() == 2) {
                         l.setPlanDays(new BigDecimal(l.getPlanStartTime().until(l.getPlanEndTime(),ChronoUnit.DAYS) + 1));
                     } else {
                         if (l.getPlanStartTime().until(l.getPlanEndTime(), ChronoUnit.DAYS) > 35) {
@@ -1092,7 +1101,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             vo2.setPlanStartTime(startDate);
             vo2.setPlanEndTime(endDate);
             //根据任务类型设置父计划的工作天数,固定任务1,临时任务2
-            if (task.getDictValue().intValue() == 1){
+            if (task.getDictValue().intValue() == 2){
                 vo2.setPlanDays(new BigDecimal(startDate.until(endDate,ChronoUnit.DAYS)+ 1));
             }else {
                 if (startDate.until(endDate,ChronoUnit.DAYS) > 35){

+ 2 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -915,7 +915,8 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         if (projectCostBudgetStats != null) {
             List<ProjectCostBudget> projectCostBudgetList = projectCostBudgetService.getBaseMapper().selectList(Wrappers.<ProjectCostBudget>lambdaQuery()
                     .eq(ProjectCostBudget::getProjectId, projectCostBudgetStats.getProjectId())
-                    .eq(ProjectCostBudget::getApprove, 0));//未上报
+                    .eq(ProjectCostBudget::getApprove, 0)
+                    .eq(ProjectCostBudget::getParentId,0));//未上报
             if (projectCostBudgetList.size() > 0) {
                 //审批人(总经理)
                 List<String> auditUserIds = new LinkedList<>();