Przeglądaj źródła

开启,暂停任务,计算每一天工作日

qianxb 2 lat temu
rodzic
commit
b78bd27aff

+ 1 - 1
blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java

@@ -46,7 +46,7 @@ public interface LauncherConstant {
     /**
      * nacos dev 地址 172.31.222.127   192.168.0.109     127.0.0.1
      */
-    String NACOS_DEV_ADDR = "192.168.0.109:8848";
+    String NACOS_DEV_ADDR = "127.0.0.1:8848";
 
     /**
      * nacos prod 地址

+ 2 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentPlanLog.java

@@ -98,6 +98,8 @@ public class DepartmentPlanLog extends BaseEntity {
     @ApiModelProperty(value = "中途暂停计划-结束时间")
     private LocalDate pausePlanEndTime;
 
+    @ApiModelProperty(value = "实际工作日集合")
+    private String workDate;
 
     @ApiModelProperty(value = "项目原计划起止工时")
     private Integer planDays;

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

@@ -1,5 +1,6 @@
 package org.springblade.control.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -42,7 +43,7 @@ public class DepartmentMonthPlanController {
     @GetMapping("/getPage")
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "部门月计划分页")
-    public R<List<DepartmentMonthPlanVO>> getPage(DepartmentMonthPlanDTO dto, Query query) {
+    public R<IPage<DepartmentMonthPlanVO>> getPage(DepartmentMonthPlanDTO dto, Query query) {
         return R.data(planService.getPage(dto,query));
     }
 

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

@@ -27,7 +27,7 @@ public interface DepartmentMonthPlanMapper extends BaseMapper<DepartmentMonthPla
 
     String getDepartmentName(@Param("deptId") Long deptId);
 
-    List<DepartmentMonthPlanVO> getPage(IPage page, @Param("dto") DepartmentMonthPlanDTO dto, @Param("userId") Long userId);
+    IPage<DepartmentMonthPlanVO> getPage(IPage page, @Param("dto") DepartmentMonthPlanDTO dto, @Param("userId") Long userId);
 
     List<BladeUser> getDepartmentUserDict(@Param("type") Integer departmentType);
 

+ 4 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentPlanLogMapper.java

@@ -5,6 +5,8 @@ import org.apache.ibatis.annotations.Param;
 import org.springblade.control.entity.AnnualBudgetDisburse;
 import org.springblade.control.entity.DepartmentPlanLog;
 
+import java.util.List;
+
 /**
  * @Param
  * @Author wangwl
@@ -13,4 +15,6 @@ import org.springblade.control.entity.DepartmentPlanLog;
 public interface DepartmentPlanLogMapper extends BaseMapper<DepartmentPlanLog> {
 
     DepartmentPlanLog getNewestPlanLog(@Param("id") Long id);
+
+    List<DepartmentPlanLog> getAllLog(@Param("id") Long id);
 }

+ 5 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentPlanLogMapper.xml

@@ -9,4 +9,9 @@
         order by sort desc
         limit 1
     </select>
+    <select id="getAllLog" resultType="org.springblade.control.entity.DepartmentPlanLog">
+        select * from c_department_plan_log
+        where plan_id = #{id}
+        order by sort desc
+    </select>
 </mapper>

+ 3 - 3
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EmployeeTaskInfoMapper.xml

@@ -5,11 +5,11 @@
 
     <delete id="deleteByBudgetId">
         delete from c_employee_task_info
-        where budget_id = #{id}
+        where budget_id = #{id} and work_type = 0
     </delete>
     <delete id="deleteByBudgetParentId">
         delete from c_employee_task_info
-        where budget_parent_id = #{parentId}
+        where budget_parent_id = #{parentId} and work_type = 0
         <if test="ids != null and ids.size > 0">
             and budget_id not in
             <foreach collection="ids" item="id" open="(" close=")" separator=",">
@@ -19,6 +19,6 @@
     </delete>
     <delete id="deleteByBudgetIdAndParentId">
         delete from c_employee_task_info
-        where budget_id = #{id} or budget_parent_id = #{id}
+        where (budget_id = #{id} or budget_parent_id = #{id}) and work_type = 0
     </delete>
 </mapper>

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

@@ -1,5 +1,6 @@
 package org.springblade.control.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.control.dto.ControlContractInfoDTO;
 import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.dto.DepartmentMonthPlanDTO;
@@ -23,7 +24,7 @@ import java.util.List;
  **/
 public interface IDepartmentMonthPlanService extends BaseService<DepartmentMonthPlan> {
 
-    List<DepartmentMonthPlanVO> getPage(DepartmentMonthPlanDTO dto, Query query) ;
+    IPage<DepartmentMonthPlanVO> getPage(DepartmentMonthPlanDTO dto, Query query) ;
 
     List<ProjectCostBudgetVO> addDepartmentPlan(DepartmentMonthPlan plan);
 

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

@@ -51,10 +51,10 @@ public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMo
      * 部门月计划分页
      */
     @Override
-    public List<DepartmentMonthPlanVO> getPage(DepartmentMonthPlanDTO dto, Query query) {
-        IPage page = new Page(query.getCurrent(), query.getSize());
+    public IPage<DepartmentMonthPlanVO> getPage(DepartmentMonthPlanDTO dto, Query query) {
+        IPage<DepartmentMonthPlanVO> page = new Page(query.getCurrent(), query.getSize());
         BladeUser user = AuthUtil.getUser();
-        return baseMapper.getPage(page,dto,user.getUserId());
+        return baseMapper.getPage(page,dto, user.getUserId());
     }
 
     /**

+ 37 - 9
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentPlanLogImpl.java

@@ -2,6 +2,7 @@ package org.springblade.control.service.impl;
 
 
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.control.entity.DepartmentPlanLog;
 import org.springblade.control.mapper.DepartmentPlanLogMapper;
@@ -90,18 +91,45 @@ 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);
+        //每次暂停的时候,都去保存之前所有的工作日
+        String workDate = log.getWorkDate();
+        StringBuilder str = new StringBuilder();
+        LocalDate start;
+        if (log.getOpenPlanStartTime() != null){
+            //不是第一次暂停
+            start = log.getOpenPlanStartTime();
+            //如果开始时间和暂停时间是同一天,就不修改
+            if (!start.equals(log.getPauseTime())) {
+                List<LocalDate> list = dateInfoMapper.getWorkDaysList(start, log.getPauseTime().minusDays(1));
+                //如果说日期为空,则直接存入
+                if (StringUtils.isNotBlank(workDate)){
+                    str.append(workDate);
+                }
+                if (list != null && list.size() > 0) {
+                    for (LocalDate localDate : list) {
+                        str.append(localDate.toString() + ",");
+                    }
+                    log.setWorkDate(str.toString());
+                }
+            }
+        }else {
+            //第一次暂停,直接使用日期
+            start = log.getRealPlanStartTime();
+            //如果开始时间和暂停时间是同一天,就不修改
+            if (!start.equals(log.getPauseTime())) {
+                List<LocalDate> list = dateInfoMapper.getWorkDaysList(start, log.getPauseTime().minusDays(1));
+                for (LocalDate localDate : list) {
+                    str.append(localDate.toString() + ",");
+                }
+                //如果有长度,去除最后一个逗号
+                if (str.length() > 0){
+                    log.setWorkDate(str.toString());
+                }
+            }
+        }
         this.save(log);
         budgetService.updateStatus(log.getPlanId(),3);
     }

+ 39 - 2
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -1410,6 +1410,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
      * @param practicalFinishTime  实际完成时间
      */
     @Override
+    @Transactional
     public void taskFinishedStats(Long PlanId, LocalDate practicalFinishTime) {
         System.out.println("计划实际结束时间"+practicalFinishTime);
         System.out.println("今天"+ LocalDateTime.now());
@@ -1437,6 +1438,43 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             Double money = userInfo.getOneMoney();
             //为固定计划,则获取最后一条任务日志
             DepartmentPlanLog planLog = logMapper.getNewestPlanLog(PlanId);
+
+            //为员工任务信息表插入实际工作时间
+            //获取计划日期中的工作日
+            List<LocalDate> workDaysList = new ArrayList<>();
+            if (planLog.getSort() == 1){
+                workDaysList.addAll(dateInfoMapper.getWorkDaysList(budget.getRealPlanStartTime(), budget.getPracticalFinishTime()));
+            }else if (planLog.getSort() == 2){
+                workDaysList.addAll(dateInfoMapper.getWorkDaysList(budget.getRealPlanStartTime(), planLog.getPauseTime()));
+            }else {
+                //获取所有的计划日志,计算真实工作时间
+                List<DepartmentPlanLog> logList = logMapper.getAllLog(PlanId);
+                for (DepartmentPlanLog log : logList) {
+
+                }
+            }
+            List<EmployeeTaskInfo> infoList = new ArrayList<>();
+            for (LocalDate today : workDaysList) {
+                //保存预算到任务计划表
+                EmployeeTaskInfo employeeTaskInfo = new EmployeeTaskInfo();
+                employeeTaskInfo.setBudgetId(budget.getId());
+                employeeTaskInfo.setProjectId(budget.getProjectId());
+                employeeTaskInfo.setBudgetParentId(budget.getParentId());
+                employeeTaskInfo.setUnitType(budget.getUnitType());
+                employeeTaskInfo.setDeptId(budget.getDeptId());
+                employeeTaskInfo.setCostType(budget.getCostType());
+                employeeTaskInfo.setTaskDetail(budget.getTaskDetail());
+                employeeTaskInfo.setProjectProcess(budget.getProjectProcess());
+                employeeTaskInfo.setBudgetType(budget.getBudgetType());
+                employeeTaskInfo.setOneDay(today);
+                employeeTaskInfo.setWorkType(1);
+                employeeTaskInfo.setPostType(budget.getPostType());
+                employeeTaskInfo.setEmployeeSalary(new BigDecimal(money));
+                infoList.add(employeeTaskInfo);
+            }
+            employeeTaskInfoService.saveBatch(infoList);
+
+
             Integer realWorkDays = 0;
             //日志类型为暂停,和status=3则 直接用实际工作时间
             if (planLog.getStatus() == 0){
@@ -1480,8 +1518,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             }else {
                 budget.setIsTwoMonth(0);
             }
-            //如果跨月,则计算开始月人工成本和结束月人工成本
-            //
+
             baseMapper.updateByBudgetId(budget);
         }
     }