Explorar o código

Merge remote-tracking branch 'origin/master' into master

yangyj %!s(int64=2) %!d(string=hai) anos
pai
achega
8ddc26c98f
Modificáronse 22 ficheiros con 242 adicións e 34 borrados
  1. 1 1
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 2 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentPlanLog.java
  3. 1 0
      blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetController.java
  4. 2 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/DepartmentMonthPlanController.java
  5. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentMonthPlanMapper.java
  6. 4 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentPlanLogMapper.java
  7. 5 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/DepartmentPlanLogMapper.xml
  8. 3 3
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/EmployeeTaskInfoMapper.xml
  9. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/PlanInformMapper.java
  10. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/PlanInformMapper.xml
  11. 1 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  12. 1 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.java
  13. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml
  14. 2 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/IDepartmentMonthPlanService.java
  15. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IPlanInformService.java
  16. 3 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java
  17. 3 3
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java
  18. 39 9
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentPlanLogImpl.java
  19. 27 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/PlanInformServiceImpl.java
  20. 101 3
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  21. 5 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java
  22. 29 12
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

+ 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;

+ 1 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/AnnualBudgetController.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springblade.control.dto.AnnualBudgetDTO;
 import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.entity.AnnualBudget;

+ 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>

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/PlanInformMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.control.entity.AnnualBudgetDisburse;
 import org.springblade.control.entity.PlanInform;
+import org.springblade.system.user.entity.User;
 
 import java.util.List;
 
@@ -16,4 +17,6 @@ public interface PlanInformMapper extends BaseMapper<PlanInform> {
 
 
     List<PlanInform> getUserInform(@Param("userId") Long userId);
+
+    User getUserById(@Param("id") Long taskUser);
 }

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

@@ -8,4 +8,7 @@
         order by inform_date desc
         limit 5
     </select>
+    <select id="getUserById" resultType="org.springblade.system.user.entity.User">
+        SELECT id,name FROM blade_user WHERE id = #{id}
+    </select>
 </mapper>

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

@@ -46,6 +46,7 @@
         <if test="budget.unitType != null and budget.unitType != ''">
             and pcb.unit_type = #{budget.unitType}
         </if>
+        ORDER BY pcb.sort
     </select>
     <select id="getBudgetTotalByProjectId" resultType="org.springblade.control.entity.ProjectCostBudgetStats">
         select

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

@@ -57,4 +57,5 @@ public interface ProjectInfoMapper extends BaseMapper<ControlProjectInfo> {
     //返回指定项目,指定费用分类对应的进程
     List<ProjectReimburseVO> getProjectReimburse3(@Param("projectId") Long projectId,@Param("costType") Integer costType);
 
+    String getProjectNameByBudgetId(@Param("id") Long id);
 }

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

@@ -128,5 +128,8 @@
         WHERE fri.is_deleted = 0 and fri.status = 2
             and #{year} = DATE_FORMAT(fri.fr_date ,'%Y')
     </select>
+    <select id="getProjectNameByBudgetId" resultType="java.lang.String">
+        select cpi.name  from c_control_project_info cpi WHERE id = (SELECT pcb.project_id from c_project_cost_budget pcb WHERE pcb.id = #{id})
+    </select>
 
 </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 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IPlanInformService.java

@@ -18,4 +18,7 @@ public interface IPlanInformService extends BaseService<PlanInform> {
     //任务完成,传入任务名称.任务人和审批人
     void taskFinishedInform(String taskName,Long taskUser,String appUser,Integer status);
     void taskFinishedInform2(String taskName,String taskUser,String appUser,Integer status);
+
+    //任务转移审批通过,通知
+    void taskChangedInform(Long taskUser,Long changedUser,String appUserName,String planDesc);
 }

+ 3 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -92,6 +92,9 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     //任务审批完成闭环时,计算当前任务的实际用时和人工成本,传入任务id和任务实际完成时间
     void taskFinishedStats(Long PlanId,LocalDate practicalFinishTime);
 
+    //任务转移审批通过时,计算上一个任务人工作量,并清空workDate
+    void taskChangeStats(Long PlanId,Long taskUser);
+
     //获取所有项目截至当年的维护支出
     BigDecimal getAllMaintainCost(int year);
 

+ 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());
     }
 
     /**

+ 39 - 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,47 @@ 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 {
+                    throw new ServiceException("任务日期错误,请联系管理员");
+                }
+            }
+        }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);
     }

+ 27 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/PlanInformServiceImpl.java

@@ -21,6 +21,7 @@ import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.system.user.entity.User;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -99,4 +100,30 @@ public class PlanInformServiceImpl extends BaseServiceImpl<PlanInformMapper, Pla
         this.saveBatch(list);
     }
 
+    /**
+     * 任务转移审批通过,通知
+     * @param taskUser
+     * @param changedUser
+     */
+    @Override
+    public void taskChangedInform(Long taskUser, Long changedUser, String appUserName,String planDesc) {
+        List<PlanInform> list = new ArrayList<>();
+        //获取任务人
+        User u1 = baseMapper.getUserById(taskUser);
+        //通知任务人
+        PlanInform inform1 = new PlanInform();
+        inform1.setInformDetails("《任务转移》" + "已被" + "【" + appUserName + "】" + "审批通过");
+        inform1.setInformUser(taskUser);
+        inform1.setInformDate(LocalDateTime.now());
+        list.add(inform1);
+        //获取转移人
+        PlanInform inform2 = new PlanInform();
+        inform2.setInformDetails("【" + u1.getName() + "】" + "向您转移了任务" + "《" + planDesc + "》");
+        inform2.setInformUser(changedUser);
+        inform2.setInformDate(LocalDateTime.now());
+        list.add(inform2);
+        //通知转移人
+        this.saveBatch(list);
+    }
+
 }

+ 101 - 3
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());
@@ -1425,7 +1426,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         int taskType = dictInfo.getDictValue().intValue();
         //计划为临时计划,则不计算金额直接闭环
         if (taskType == 2){
-            //为临时任务设置任务实际实际,方便统计
+            //为临时任务设置任务实际天数,方便统计
             budget.setPracticalTaskDays(new BigDecimal(1 + budget.getPracticalFinishTime().until(budget.getRealPlanStartTime(), ChronoUnit.DAYS)));
             this.updateById(budget);
         }else {
@@ -1437,6 +1438,48 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             Double money = userInfo.getOneMoney();
             //为固定计划,则获取最后一条任务日志
             DepartmentPlanLog planLog = logMapper.getNewestPlanLog(PlanId);
+            //为员工任务信息表插入实际工作时间
+            String workDate = planLog.getWorkDate();
+            StringBuilder str = new StringBuilder();
+            List<LocalDate> workDaysList = new ArrayList<>();
+            //如果最后一条任务操作是暂停,则直接使用工作日集合
+            if (StringUtils.isNotBlank(workDate)){
+                String[] days = workDate.split(",");
+                if (days != null && days.length > 0){
+                    for (String day : days) {
+                        workDaysList.add(LocalDate.parse(day));
+                    }
+                }
+            }
+            //如果最后一条任务操作是开启,则+最后开启时间与提交日期之间的工作日
+            if (planLog.getStatus() == 1){
+                List<LocalDate> list = dateInfoMapper.getWorkDaysList(planLog.getOpenPlanStartTime(), practicalFinishTime);
+                if (list != null && list.size() > 0){
+                    workDaysList.addAll(list);
+                }
+            }
+            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,12 +1523,67 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             }else {
                 budget.setIsTwoMonth(0);
             }
-            //如果跨月,则计算开始月人工成本和结束月人工成本
-            //
+
             baseMapper.updateByBudgetId(budget);
         }
     }
 
+    /**
+     * 任务转移审批通过时,计算上一个任务人工作量,并清空workDate
+     * @param PlanId
+     */
+    @Override
+    public void taskChangeStats(Long PlanId,Long taskUser) {
+        ProjectCostBudget budget = this.getById(PlanId);
+        //如果为临时任务,则直接跳过
+        DictInfo dictInfo = baseMapper.getTaskType(budget.getPlanTaskType());
+        int taskType = dictInfo.getDictValue().intValue();
+        //计划为固定计划时,则插入工作量,清空workDate
+        if (taskType == 1){
+            //获取任务人工资
+            User userInfo = baseMapper.getUserInfo(taskUser);
+            if (userInfo.getOneMoney() == null){
+                throw new ServiceException("没有为任务人设置工资");
+            }
+            Double money = userInfo.getOneMoney();
+            DepartmentPlanLog planLog = logMapper.getNewestPlanLog(PlanId);
+            //为员工任务信息表插入实际工作时间
+            String workDate = planLog.getWorkDate();
+            List<LocalDate> workDaysList = new ArrayList<>();
+            //直接使用工作日集合
+            if (StringUtils.isNotBlank(workDate)){
+                String[] days = workDate.split(",");
+                if (days != null && days.length > 0){
+                    for (String day : days) {
+                        workDaysList.add(LocalDate.parse(day));
+                    }
+                    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);
+                    planLog.setWorkDate("");
+                    logMapper.updateById(planLog);
+                }
+            }
+        }
+    }
+
     /**
      * 根据年份获取所有项目的维护支出
      * @return

+ 5 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -52,6 +52,11 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
 
     private final JdbcTemplate jdbcTemplate;
 
+
+    public String getProjectNameByBudgetId(Long id){
+        return baseMapper.getProjectNameByBudgetId(id);
+    }
+
     /**
      * 自定义分页
      *

+ 29 - 12
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -723,9 +723,13 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             }
             vos.add(vo);
         }
-
-        vos.sort(Comparator.comparing(TaskPlanInfoVO::getEndTime).reversed());
-        vosPage.setRecords(vos);
+        if (vos.size() > 0) {
+            List<TaskPlanInfoVO> collect = vos.stream()
+                    .filter(vo -> vo.getEndTime() != null)
+                    .sorted(Comparator.comparing(TaskPlanInfoVO::getEndTime).reversed())
+                    .collect(Collectors.toList());
+            vosPage.setRecords(collect);
+        }
         return vosPage;
     }
 
@@ -886,6 +890,10 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                         planInformService.taskFinishedInform2("计划任务完成", taskProcessInfo.getAuditUserIds(), SecureUtil.getNickName(), taskProcessInfo.getStatus());
 
                     } else if (dto.getUpdateType().equals("2")) {
+                        //如果任务正在进行中,则提示要先暂停才能转移
+                        if (planTaskInfo.getStatus() != 3){
+                            throw new ServiceException("请先暂停任务,再转移");
+                        }
                         //任务转移
                         TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
                         taskProcessInfo.setId(SnowFlakeUtil.getId());
@@ -999,7 +1007,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             if (projectCostBudgetList.size() > 0) {
                 //审批人(总经理)
                 List<String> auditUserIds = new LinkedList<>();
-                List<Dept> query = jdbcTemplate.query("select id from blade_dept where dept_name = '总经理' and tenant_id = " + SecureUtil.getUser().getTenantId() + " and dept_type = 3", new BeanPropertyRowMapper<>(Dept.class));
+                List<Dept> query = jdbcTemplate.query("select id from blade_dept where dept_name = '总经理' and tenant_id = " + SecureUtil.getUser().getTenantId() + " and dept_type = 3 and is_deleted = 0", new BeanPropertyRowMapper<>(Dept.class));
                 if (query.size() == 1) {
                     Dept dept = query.get(0);
                     List<User> users = jdbcTemplate.query("select id from blade_user where post_id like '%" + dept.getId() + "%' and role_id like '%" + dept.getId() + "%' and tenant_id = " + SecureUtil.getUser().getTenantId() + " and is_deleted = 0", new BeanPropertyRowMapper<>(User.class));
@@ -1077,6 +1085,8 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
 
                             //删除当前计划任务与日志关系信息(如果任务转移,那么就不属于该用户了,就应该在新用户写日志时,与新用户绑定)
                             jdbcTemplate.execute("delete from c_log_history_task_record where task_id = " + dataId);
+
+
                         }
 
                     } else if (taskStatus == 3) { //驳回审批
@@ -1186,18 +1196,24 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         switch (businessDataType) {
             case 1:
                 //计划任务
-                TaskProcessInfo taskProcessInfo1 = jdbcTemplate.query("select status from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
+                TaskProcessInfo taskProcessInfo1 = jdbcTemplate.query("select report_user_id,task_name,status from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
                 ProjectCostBudget projectCostBudget = jdbcTemplate.query("select plan_task_desc,task_user,id from c_project_cost_budget where id = " + dataId, new BeanPropertyRowMapper<>(ProjectCostBudget.class)).stream().findAny().orElse(null);
                 if (taskProcessInfo1 != null && projectCostBudget != null) {
                     //获取任务完成时间
                     TaskPlanUpdateStatusInfo taskPlanUpdateStatusInfo = jdbcTemplate.query("select completion_time from c_task_plan_update_status_info where update_type = 1 and approve_task_id = " + approveTaskId + " and plan_task_id = " + dataId, new BeanPropertyRowMapper<>(TaskPlanUpdateStatusInfo.class)).stream().findAny().orElse(null);
-                    if (taskPlanUpdateStatusInfo != null && taskProcessInfo1.getStatus().equals(2)) { //已完成的任务才推送
-                        //修改任务实际完成时间、金额
-                        LocalDate localDate = taskPlanUpdateStatusInfo.getCompletionTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
-                        projectCostBudgetService.taskFinishedStats(projectCostBudget.getId(), localDate);
+                    if (taskProcessInfo1.getTaskName().contains("完成任务")){
+                        if (taskPlanUpdateStatusInfo != null && taskProcessInfo1.getStatus().equals(2)) { //已完成的任务才推送
+                            //修改任务实际完成时间、金额
+                            LocalDate localDate = taskPlanUpdateStatusInfo.getCompletionTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+                            projectCostBudgetService.taskFinishedStats(projectCostBudget.getId(), localDate);
+                        }
+                        //日志操作信息
+                        planInformService.taskFinishedInform(projectCostBudget.getPlanTaskDesc(), projectCostBudget.getTaskUser(), SecureUtil.getUserName(), taskProcessInfo1.getStatus());
+                    }else if (taskProcessInfo1.getTaskName().contains("转移任务")){
+                        projectCostBudgetService.taskChangeStats(Long.parseLong(dataId),taskProcessInfo1.getReportUserId());
+                        //日志操作信息
+                        planInformService.taskChangedInform(taskPlanUpdateStatusInfo.getStartTransferObject(),taskPlanUpdateStatusInfo.getTransferObject(), SecureUtil.getUserName(),projectCostBudget.getPlanTaskDesc());
                     }
-                    //日志操作信息
-                    planInformService.taskFinishedInform(projectCostBudget.getPlanTaskDesc(), projectCostBudget.getTaskUser(), SecureUtil.getUserName(), taskProcessInfo1.getStatus());
                 }
 
                 break;
@@ -1303,8 +1319,9 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             case 10:
                 TaskProcessInfo taskProcessInfo10 = jdbcTemplate.query("select status,report_user_id from c_task_process_info where id = " + approveTaskId, new BeanPropertyRowMapper<>(TaskProcessInfo.class)).stream().findAny().orElse(null);
                 if (taskProcessInfo10 != null && taskProcessInfo10.getStatus().equals(2)) {
+                    String name = projectInfoServiceImpl.getProjectNameByBudgetId(Long.parseLong(dataId));
                     //日志操作信息
-                    planInformService.taskFinishedInform("成本测算申请", taskProcessInfo10.getReportUserId(), SecureUtil.getNickName(), taskProcessInfo10.getStatus());
+                    planInformService.taskFinishedInform(name +"-成本测算申请", taskProcessInfo10.getReportUserId(), SecureUtil.getNickName(), 4);
                 }
                 break;
         }