Explorar o código

修改任务文件相关接口

zhouyy hai 6 meses
pai
achega
32accbf179
Modificáronse 18 ficheiros con 717 adicións e 350 borrados
  1. 39 13
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  2. 113 91
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskFilesController.java
  3. 45 51
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java
  4. 8 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskFiles.java
  5. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/bo/QueryTaskChargePage.java
  6. 26 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/TaskFileChargePageVO.java
  7. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskCommentMapper.java
  8. 10 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskFilesMapper.java
  9. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java
  10. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskFilesService.java
  11. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskService.java
  12. 15 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  13. 123 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskFilesServiceImpl.java
  14. 140 117
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java
  15. 44 52
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  16. 7 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskCommentMapper.xml
  17. 34 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskFilesMapper.xml
  18. 98 11
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml

+ 39 - 13
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -12,6 +12,7 @@ import com.management.platform.mapper.*;
 import com.management.platform.service.*;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.poi.hssf.usermodel.*;
 import org.assertj.core.util.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -111,23 +112,21 @@ public class TaskController {
     @Value(value = "${upload.path}")
     private String path;
 
-    //用于控制线程锁
-    public static HashMap<String, CorpwxJobResult> corpwxJobCenter = new HashMap();
-    public static HashMap<String, Integer> corpddJobCenter = new HashMap();
-    @Autowired
-    private ProjectCategoryMapper projectCategoryMapper;
-
     @Resource
-    private TimeTypeMapper timeTypeMapper;
+    private TaskFilesMapper taskFilesMapper;
 
     @Resource
-    private DepartmentMapper departmentMapper;
-    @Autowired
-    private TaskFilesMapper taskFilesMapper;
+    private TimeTypeMapper timeTypeMapper;
 
     @Resource
     private WxCorpInfoMapper wxCorpInfoMapper;
 
+    //用于控制线程锁
+    public static HashMap<String, CorpwxJobResult> corpwxJobCenter = new HashMap();
+    public static HashMap<String, Integer> corpddJobCenter = new HashMap();
+    @Autowired
+    private ProjectCategoryMapper projectCategoryMapper;
+
     @PostMapping("/getTaskChargePage")
     public HttpRespMsg getTaskChargePage(
             QueryTaskChargePage queryBO, HttpServletRequest request) {
@@ -1367,14 +1366,41 @@ public class TaskController {
         List<Integer> collect = list.stream().map(l -> l.getId()).distinct().collect(Collectors.toList());
         collect.add(-1);
         List<TaskExecutor> taskExecutorList = taskExecutorMapper.selectList(new QueryWrapper<TaskExecutor>().in("task_id", collect));
-//        List<TaskFiles> taskFilesList = taskFilesMapper.selectList(new LambdaQueryWrapper<TaskFiles>().in(TaskFiles::getTaskId, collect));
+        List<TaskFiles> taskFilesList = taskFilesMapper.selectList(new LambdaQueryWrapper<TaskFiles>().in(TaskFiles::getTaskId, collect));
         List<Integer> pids = list.stream().map(Task::getProjectId).collect(Collectors.toList());
         pids.add(-1);
         List<Project> projectList = projectService.list(new QueryWrapper<Project>().in("id", pids));
-//        TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
+        TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
 //        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id",user.getCompanyId()));
 //        CompanyDingding dingding = companyDingdingService.getOne(new LambdaQueryWrapper<CompanyDingding>().eq(CompanyDingding::getCompanyId, user.getCompanyId()));
-//        if(1 == timeType.getTaskFileCharge()){
+        if(1 == timeType.getTaskFileCharge()){
+            //根据该任务下的文件所处的状态判断
+            for (Task task : list) {
+                List<TaskFiles> currentTaskFiles = taskFilesList.stream().filter(tmp -> tmp.getTaskId().equals(task.getId())).collect(Collectors.toList());
+                if(CollectionUtils.isNotEmpty(currentTaskFiles)){
+                    //是否存在驳回
+                    long rejectCount = currentTaskFiles.stream().filter(tmp -> {
+                                if (2 == tmp.getChargeOneStatus() || 2 == tmp.getChargeTwoStatus()) {
+                                    return true;
+                                } else {
+                                    return false;
+                                }
+                            }).count();
+                    //是否都是全部通过
+                    long allPassCount = currentTaskFiles.stream().filter(tmp -> 1 == tmp.getFinalChargeStatus()).count();
+                    if(rejectCount > 0 ){
+                        task.setFileChargeStatus(2);
+                    } else if (allPassCount == currentTaskFiles.size()) {
+                        task.setFileChargeStatus(3);
+                    }else {
+                        task.setFileChargeStatus(1);
+                    }
+
+                }
+
+            }
+
+        }
 //            List<String> userIds = new ArrayList<>();
 //            List<String> chargeOneIds = list.stream().filter(t-> org.apache.commons.lang3.StringUtils.isNotBlank(t.getChargeOneId()))
 //                    .map(Task::getChargeOneId).collect(Collectors.toList());

+ 113 - 91
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskFilesController.java

@@ -3,7 +3,6 @@ package com.management.platform.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
 import com.management.platform.service.CompanyDingdingService;
@@ -31,8 +30,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.IOException;
 import java.time.LocalDateTime;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -93,14 +92,12 @@ public class TaskFilesController {
         return taskFilesService.approveFile(taskFileIds,request);
     }
 
-//    @PostMapping("/rejectFile")
-//    public HttpRespMsg rejectFile(@RequestParam("taskFileId")Integer taskFileId
-//            ,@RequestParam("taskId")String taskId
-//            ,@RequestParam("projectId")String projectId
-//            ,@RequestParam(value = "reason",required = false)String reason
-//            ,HttpServletRequest request) {
-//        return taskFilesService.rejectFile(taskFileId,taskId,projectId,reason,request);
-//    }
+    @PostMapping("/rejectFile")
+    public HttpRespMsg rejectFile(@RequestParam("taskFileIds")String taskFileIds
+            ,@RequestParam(value = "reason",required = false)String reason
+            ,HttpServletRequest request) {
+        return taskFilesService.rejectFile(taskFileIds,reason,request);
+    }
 
     /**
      * 获取该项目下的所有有效的文件列表
@@ -208,7 +205,7 @@ public class TaskFilesController {
         User user = userMapper.selectById(request.getHeader("Token"));
         TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         Department department = departmentMapper.selectById(user.getDepartmentId());
-        Project project = projectMapper.selectById(taskId);
+        Project project = projectMapper.selectById(projectId);
         StringBuilder fileNames = new StringBuilder();
         for (MultipartFile file : files) {
             TaskFiles record = new TaskFiles();
@@ -407,53 +404,72 @@ public class TaskFilesController {
     @RequestMapping(value="getTaskFiles")
     public HttpRespMsg getTaskFiles(Integer taskId,HttpServletRequest request) {
         User user = userMapper.selectById(request.getHeader("Token"));
-        Task task = taskMapper.selectById(taskId);
+//        Task task = taskMapper.selectById(taskId);
         TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id",user.getCompanyId()));
         CompanyDingding dingding = companyDingdingService.getOne(new LambdaQueryWrapper<CompanyDingding>().eq(CompanyDingding::getCompanyId, user.getCompanyId()));
-        String fileChargeStatusText = "";
-        int fileChargeStatus = 0;
-        if(1 == timeType.getTaskFileCharge()){
-            if(org.apache.commons.lang3.StringUtils.isNotBlank(task.getChargeOneId())
-                    &&org.apache.commons.lang3.StringUtils.isNotBlank(task.getChargeTwoId())){
-                if(1 == task.getFinalChargeStatus()){
-                    fileChargeStatusText = "审核通过";
-                    fileChargeStatus = 1;
-                } else if (0 == task.getFinalChargeStatus()) {
-                    String name = "";
-                    String statusText = "";
-                    String userWxId = "";
-                    int finalStatus = 1==task.getChargeStage()?task.getChargeOneStatus():task.getChargeTwoStatus();
-                    String userId = 1==task.getChargeStage()?task.getChargeOneId():task.getChargeTwoId();
-                    User chargeUser = userMapper.selectById(userId);
-                    if(null != chargeUser){
-                        if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
-                            userWxId = chargeUser.getCorpwxRealUserid();
-                        }else if(dingding!=null&&dingding.getContactNeedTranslate()==1){
-                            userWxId = chargeUser.getDingdingUserid();
-                        }
-                        name = chargeUser.getName();
-                    }
-                    switch (finalStatus)
-                    {
-                        case 0:  statusText = "待审核";fileChargeStatus = 0;break;
-                        case 1:  statusText = "通过";break;
-                        case 2:  statusText = "驳回";fileChargeStatus = 2;break;
-                    }
-                    if(org.apache.commons.lang3.StringUtils.isBlank(userWxId)){
-                        fileChargeStatusText = statusText+"("+name+")";
-                    }else{
-                        fileChargeStatusText = statusText+"("+("$userName=" + userWxId + "$")+")";
-                    }
 
-                }
+        //审核通过的  或者是老文件 所有人都能看到
+        //审核不通过的需要判断 登录人 是否是 文件上传人/审核人一、二中的一个 ,能则可以看到
+        List<TaskFiles> list = taskFilesMapper.getTaskFiles(taskId,user.getId());
+
+        List<String> allIds = new ArrayList<>();
+        List<String> chargeOneIds = list.stream().filter(t -> org.apache.commons.lang3.StringUtils.isNotBlank(t.getChargeOneId()))
+                .map(TaskFiles::getChargeOneId).collect(Collectors.toList());
+        List<String> chargeTwoIds = list.stream().filter(t -> org.apache.commons.lang3.StringUtils.isNotBlank(t.getChargeTwoId()))
+                .map(TaskFiles::getChargeTwoId).collect(Collectors.toList());
+        allIds.addAll(chargeOneIds);
+        allIds.addAll(chargeTwoIds);
+        Map<String,User> userIdMap = new HashMap<>();
+        if(CollectionUtils.isNotEmpty(allIds)){
+            List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().in(User::getId, allIds));
+            if(CollectionUtils.isNotEmpty(users)){
+                userIdMap = users.stream().collect(Collectors.toMap(User::getId,t->t));
             }
         }
-        List<TaskFiles> list = taskFilesMapper.selectList(new LambdaQueryWrapper<TaskFiles>()
-                .eq(TaskFiles::getTaskId,taskId)
-        );
         if(CollectionUtils.isNotEmpty(list)){
             for (TaskFiles taskFiles : list) {
+                String fileChargeStatusText = "";
+                int fileChargeStatus = 0;
+                if(1 == timeType.getTaskFileCharge()){
+                    if(0 == taskFiles.getNeedFileCharge()){
+                        fileChargeStatusText = "无审核状态";
+                        fileChargeStatus = 3;
+                    }else{
+                        if(1 == taskFiles.getFinalChargeStatus()){
+                            fileChargeStatusText = "审核通过";
+                            fileChargeStatus = 1;
+                        } else if (0 == taskFiles.getFinalChargeStatus()) {
+                            String name = "";
+                            String statusText = "";
+                            String userWxId = "";
+                            int finalStatus = 1==taskFiles.getChargeStage()?taskFiles.getChargeOneStatus():taskFiles.getChargeTwoStatus();
+                            String userId = 1==taskFiles.getChargeStage()?taskFiles.getChargeOneId():taskFiles.getChargeTwoId();
+                            User chargeUser = userIdMap.get(userId);
+                            if(null != chargeUser){
+                                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                    userWxId = chargeUser.getCorpwxRealUserid();
+                                }else if(dingding!=null&&dingding.getContactNeedTranslate()==1){
+                                    userWxId = chargeUser.getDingdingUserid();
+                                }
+                                name = chargeUser.getName();
+                            }
+                            switch (finalStatus)
+                            {
+                                case 0:  statusText = "待审核";fileChargeStatus = 0;break;
+                                case 1:  statusText = "通过";break;
+                                case 2:  statusText = "驳回";fileChargeStatus = 2;break;
+                            }
+                            if(org.apache.commons.lang3.StringUtils.isBlank(userWxId)){
+                                fileChargeStatusText = statusText+"("+name+")";
+                            }else{
+                                fileChargeStatusText = statusText+"("+("$userName=" + userWxId + "$")+")";
+                            }
+
+                        }
+                    }
+
+                }
                 taskFiles.setFileChargeStatusText(fileChargeStatusText);
                 taskFiles.setFileChargeStatus(fileChargeStatus);
             }
@@ -464,47 +480,53 @@ public class TaskFilesController {
     }
 
 
-    public void resetTaskChargeStatus(Integer taskId){
-        Task task = taskMapper.selectById(taskId);
-        if(1 == task.getFinalChargeStatus()){
-            //重置阶段一、二的时间、状态、理由
-            //重置 文件审核阶段为 1 阶段一  最终审核状态为 0未通过
-            taskMapper.update(null,new LambdaUpdateWrapper<Task>()
-                    .set(Task::getFinalChargeStatus, 0)
-                    .set(Task::getChargeStage,1)
-                    .set(Task::getChargeOneStatus,0)
-                    .set(Task::getChargeTwoStatus,0)
-                    .set(Task::getChargeOneTime,null)
-                    .set(Task::getChargeTwoTime,null)
-                    .set(Task::getFileRejectReason,null)
-//                    .set(Task::getChargeOneReason,null)
-//                    .set(Task::getChargeTwoReason,null)
-                    .eq(Task::getId,task.getId())
-            );
-        } else if (0 == task.getFinalChargeStatus()) {
-            //判断当前阶段
-            if(1==task.getChargeStage()){
-                //重置阶段一的时间、状态、理由
-                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
-                        .set(Task::getChargeOneStatus,0)
-                        .set(Task::getChargeOneTime,null)
-                        .set(Task::getFileRejectReason,null)
-                        .eq(Task::getId,task.getId())
-                );
-            } else if (2 == task.getChargeStage()) {
-                //重置阶段二的时间、状态、理由
-                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
-                        .set(Task::getChargeStage,1)
-                        .set(Task::getChargeOneStatus,0)
-                        .set(Task::getChargeOneTime,null)
-                        .set(Task::getChargeTwoStatus,0)
-                        .set(Task::getChargeTwoTime,null)
-                        .set(Task::getFileRejectReason,null)
-                        .eq(Task::getId,task.getId())
-                );
-            }
-        }
+
+    @RequestMapping(value = "/getUnChargedFilesByTaskId")
+    public HttpRespMsg getUnChargedFilesByTaskId(Integer taskId,HttpServletRequest request){
+        return taskFilesService.getUnChargedFilesByTaskId(taskId,request);
     }
 
+//    public void resetTaskChargeStatus(Integer taskId){
+//        Task task = taskMapper.selectById(taskId);
+//        if(1 == task.getFinalChargeStatus()){
+//            //重置阶段一、二的时间、状态、理由
+//            //重置 文件审核阶段为 1 阶段一  最终审核状态为 0未通过
+//            taskMapper.update(null,new LambdaUpdateWrapper<Task>()
+//                    .set(Task::getFinalChargeStatus, 0)
+//                    .set(Task::getChargeStage,1)
+//                    .set(Task::getChargeOneStatus,0)
+//                    .set(Task::getChargeTwoStatus,0)
+//                    .set(Task::getChargeOneTime,null)
+//                    .set(Task::getChargeTwoTime,null)
+//                    .set(Task::getFileRejectReason,null)
+////                    .set(Task::getChargeOneReason,null)
+////                    .set(Task::getChargeTwoReason,null)
+//                    .eq(Task::getId,task.getId())
+//            );
+//        } else if (0 == task.getFinalChargeStatus()) {
+//            //判断当前阶段
+//            if(1==task.getChargeStage()){
+//                //重置阶段一的时间、状态、理由
+//                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
+//                        .set(Task::getChargeOneStatus,0)
+//                        .set(Task::getChargeOneTime,null)
+//                        .set(Task::getFileRejectReason,null)
+//                        .eq(Task::getId,task.getId())
+//                );
+//            } else if (2 == task.getChargeStage()) {
+//                //重置阶段二的时间、状态、理由
+//                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
+//                        .set(Task::getChargeStage,1)
+//                        .set(Task::getChargeOneStatus,0)
+//                        .set(Task::getChargeOneTime,null)
+//                        .set(Task::getChargeTwoStatus,0)
+//                        .set(Task::getChargeTwoTime,null)
+//                        .set(Task::getFileRejectReason,null)
+//                        .eq(Task::getId,task.getId())
+//                );
+//            }
+//        }
+//    }
+
 }
 

+ 45 - 51
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java

@@ -13,7 +13,6 @@ import org.springframework.format.annotation.DateTimeFormat;
 import java.io.Serializable;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -243,55 +242,47 @@ public class Task extends Model<Task> {
     @TableField("sap_task_code")
     private String sapTaskCode;
 
-    /**文件审核人一[部门负责人]id*/
-    @TableField("charge_one_id")
-    private String chargeOneId;
-
-
-    /**文件审核人一的审核状态 0待审核 1通过 2驳回*/
-    @TableField("charge_one_status")
-    private Integer chargeOneStatus;
-
-    /**文件审核人一的审核时间*/
-    @TableField("charge_one_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date chargeOneTime;
-
-//    /**文件审核人一的驳回原因*/
-//    @TableField("charge_one_reason")
-//    private String chargeOneReason;
-
-    /**文件审核人二[项目审核人]id*/
-    @TableField("charge_two_id")
-    private String chargeTwoId;
-
-
-    /**文件审核人二的审核状态 0待审核 1通过 2驳回*/
-    @TableField("charge_two_status")
-    private Integer chargeTwoStatus;
-
-    /**文件审核人二的审核时间*/
-    @TableField("charge_two_time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date chargeTwoTime;
-
-//    /**文件审核人二的驳回原因*/
-//    @TableField("charge_two_reason")
-//    private String chargeTwoReason;
-
-    /**文件审核阶段 1审核人一 2审核人二 3都审核通过*/
-    @TableField("charge_stage")
-    private Integer chargeStage;
-
-    /**文件最终审核状态  0未通过 1通过*/
-    @TableField("final_charge_status")
-    private Integer finalChargeStatus;
-
-    /**文件审核驳回原因*/
-    @TableField("file_reject_reason")
-    private String fileRejectReason;
+//    /**文件审核人一[部门负责人]id*/
+//    @TableField("charge_one_id")
+//    private String chargeOneId;
+//
+//
+//    /**文件审核人一的审核状态 0待审核 1通过 2驳回*/
+//    @TableField("charge_one_status")
+//    private Integer chargeOneStatus;
+//
+//    /**文件审核人一的审核时间*/
+//    @TableField("charge_one_time")
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+//    private Date chargeOneTime;
+//
+//    /**文件审核人二[项目审核人]id*/
+//    @TableField("charge_two_id")
+//    private String chargeTwoId;
+//
+//
+//    /**文件审核人二的审核状态 0待审核 1通过 2驳回*/
+//    @TableField("charge_two_status")
+//    private Integer chargeTwoStatus;
+//
+//    /**文件审核人二的审核时间*/
+//    @TableField("charge_two_time")
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+//    private Date chargeTwoTime;
+//
+//    /**文件审核阶段 1审核人一 2审核人二 3都审核通过*/
+//    @TableField("charge_stage")
+//    private Integer chargeStage;
+//
+//    /**文件最终审核状态  0未通过 1通过*/
+//    @TableField("final_charge_status")
+//    private Integer finalChargeStatus;
+//
+//    /**文件审核驳回原因*/
+//    @TableField("file_reject_reason")
+//    private String fileRejectReason;
 
     @TableField(exist = false)
     private String finalChargeStatusText;
@@ -301,7 +292,10 @@ public class Task extends Model<Task> {
     private List<User> userList;
 
     @TableField(exist = false)
-    /**0 待审核 1通过 2驳回*/
+    /**0 待审核 1通过 2驳回
+     * 2025-01-03 修改为
+     * 任务的外置状态显示 1审核中[待审核+(审核通过)] 2驳回[存在驳回文件]  3审核通过[全部审核通过]
+     * */
     private int fileChargeStatus;
     @Override
     protected Serializable pkVal() {

+ 8 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskFiles.java

@@ -78,7 +78,7 @@ public class TaskFiles extends Model<TaskFiles> {
     @TableField(exist = false)
     private String fileChargeStatusText;
 
-    /**0 待审核 1通过 2驳回*/
+    /**0 待审核 1通过 2驳回 3老文件无审核状态 前端用*/
     @TableField(exist = false)
     private Integer fileChargeStatus;
 
@@ -127,6 +127,13 @@ public class TaskFiles extends Model<TaskFiles> {
     private String fileRejectReason;
 
 
+    @TableField(exist = false)
+    private Integer companyId;
+
+    @TableField(exist = false)
+    private String taskName;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/bo/QueryTaskChargePage.java

@@ -11,4 +11,5 @@ public class QueryTaskChargePage {
     private Integer pageIndex = 1;
     private Integer pageSize;
     private String userId;
+    private Integer companyId;
 }

+ 26 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/TaskFileChargePageVO.java

@@ -0,0 +1,26 @@
+package com.management.platform.entity.vo;
+
+import com.management.platform.entity.TaskExecutor;
+import com.management.platform.entity.TaskFiles;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TaskFileChargePageVO {
+    private Integer taskId;
+    private String taskName;
+    private Integer projectId;
+    private String projectName;
+    private String executorId;//执行人id 多个
+    private List<TaskExecutor> executorList;
+    private Integer groupId;
+//    private String finalChargeId;
+//    private String finalChargeName;
+
+    /**任务的外置状态显示 1审核中[待审核+(审核通过)] 2驳回[存在驳回文件]  3审核通过[全部审核通过]*/
+//    private Integer taskChargeStatus;
+
+    private List<TaskFiles> childFiles;
+
+}

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskCommentMapper.java

@@ -2,6 +2,9 @@ package com.management.platform.mapper;
 
 import com.management.platform.entity.TaskComment;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface TaskCommentMapper extends BaseMapper<TaskComment> {
 
+    void insertBatch(@Param("commentList") List<TaskComment> commentList);
 }

+ 10 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskFilesMapper.java

@@ -2,6 +2,7 @@ package com.management.platform.mapper;
 
 import com.management.platform.entity.TaskFiles;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -15,5 +16,13 @@ import java.util.List;
  */
 public interface TaskFilesMapper extends BaseMapper<TaskFiles> {
 
-    List<Integer> getAllTaskIds();
+    List<Integer> getAllNeedChargeTaskIds();
+
+    List<TaskFiles> getTaskFiles(@Param("taskId") Integer taskId, @Param("userId") String userId);
+
+    List<TaskFiles> getAllNeedChargeTaskFiles();
+
+    List<TaskFiles> getUnChargedFilesByTaskId(@Param("taskId") Integer taskId, @Param("userId") String userId);
+
+    List<Integer> getTaskFilesByCreatorDeptId(@Param("departmentId") Integer departmentId);
 }

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java

@@ -7,6 +7,7 @@ import com.management.platform.entity.Task;
 import com.management.platform.entity.TimeTask;
 import com.management.platform.entity.bo.QueryTaskChargePage;
 import com.management.platform.entity.vo.TaskChargePageVO;
+import com.management.platform.entity.vo.TaskFileChargePageVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Update;
 
@@ -70,4 +71,8 @@ public interface TaskMapper extends BaseMapper<Task> {
     List<TaskChargePageVO> getTaskChargePage(@Param("queryBO") QueryTaskChargePage queryBO, @Param("deptIds") List<Integer> deptIds);
 
     int getTaskChargePageTotal(@Param("queryBO") QueryTaskChargePage queryBO, @Param("deptIds")List<Integer> branchDepartment);
+
+    List<TaskFileChargePageVO> getTaskFileChargePage(@Param("queryBO") QueryTaskChargePage queryBO, @Param("deptIds")List<Integer> branchDepartment);
+
+    int getTaskFileChargePageTotal(@Param("queryBO") QueryTaskChargePage queryBO, @Param("deptIds")List<Integer> branchDepartment);
 }

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskFilesService.java

@@ -17,4 +17,8 @@ import javax.servlet.http.HttpServletRequest;
 public interface TaskFilesService extends IService<TaskFiles> {
 
     HttpRespMsg approveFile(String taskFileIds,HttpServletRequest request);
+
+    HttpRespMsg rejectFile(String taskFileIds,String reason, HttpServletRequest request);
+
+    HttpRespMsg getUnChargedFilesByTaskId(Integer taskId, HttpServletRequest request);
 }

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskService.java

@@ -55,7 +55,7 @@ public interface TaskService extends IService<Task> {
 
     HttpRespMsg getTaskByUserId(String startDate, String endDate, String userId, Integer pageIndex, Integer pageSize);
 
-    HttpRespMsg auditFile(Integer taskId, String projectId, Integer auditStatus, String reason, HttpServletRequest request);
+//    HttpRespMsg auditFile(Integer taskId, String projectId, Integer auditStatus, String reason, HttpServletRequest request);
 
     HttpRespMsg getFileRejectReason(String taskId, HttpServletRequest request);
 

+ 15 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -1,8 +1,7 @@
 package com.management.platform.service.impl;
 
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.DepartmentMasterVO;
@@ -12,16 +11,15 @@ import com.management.platform.mapper.*;
 import com.management.platform.service.DepartmentService;
 import com.management.platform.service.ExcelExportService;
 import com.management.platform.service.WxCorpInfoService;
-import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.ListUtil;
 import com.management.platform.util.MessageUtils;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.*;
 import org.springframework.stereotype.Service;
-import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -82,6 +80,9 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
     private String corpId;
     @Value("${providerSecret}")
     private String providerSecret;
+    @Autowired
+    private TaskFilesMapper taskFilesMapper;
+
     //新增部门
     @Override
     public HttpRespMsg insertDepartment(String departmentName, Integer superiorId, String managerId, String reportAuditUserid,String otherManagerIds,  HttpServletRequest request) {
@@ -243,6 +244,15 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                         departmentOtherManagerMapper.delete(new QueryWrapper<DepartmentOtherManager>().eq("department_id",departmentId));
                     }
                 }
+
+                //修改任务文件审核人
+                List<Integer> taskFileIds = taskFilesMapper.getTaskFilesByCreatorDeptId(departmentId);
+                if(CollectionUtils.isNotEmpty(taskFileIds)){
+                    taskFilesMapper.update(null,new LambdaUpdateWrapper<TaskFiles>()
+                            .set(TaskFiles::getChargeOneId,managerId)
+                            .in(TaskFiles::getId,taskFileIds)
+                    );
+                }
             }
         } catch (NullPointerException e) {
             e.printStackTrace();

+ 123 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskFilesServiceImpl.java

@@ -1,22 +1,26 @@
 package com.management.platform.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.management.platform.entity.TaskFiles;
+import com.management.platform.entity.*;
+import com.management.platform.mapper.TaskCommentMapper;
 import com.management.platform.mapper.TaskFilesMapper;
+import com.management.platform.mapper.UserMapper;
 import com.management.platform.mapper.WxCorpInfoMapper;
+import com.management.platform.service.CompanyDingdingService;
 import com.management.platform.service.TaskFilesService;
+import com.management.platform.service.WxCorpInfoService;
 import com.management.platform.util.HttpRespMsg;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.time.LocalDateTime;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -36,10 +40,24 @@ public class TaskFilesServiceImpl extends ServiceImpl<TaskFilesMapper, TaskFiles
     @Resource
     private WxCorpInfoMapper wxCorpInfoMapper;
 
+    @Resource
+    private UserMapper userMapper;
+
+    @Resource
+    private WxCorpInfoService wxCorpInfoService;
+
+    @Resource
+    private TaskCommentMapper taskCommentMapper;
+
+    @Resource
+    private CompanyDingdingService companyDingdingService;
+
 
     @Override
+    @Transactional
     public HttpRespMsg approveFile(String taskFileIds,HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("Token"));
         String[] array = taskFileIds.split(",");
         if(0 != array.length){
             List<String> ids = Arrays.stream(array).collect(Collectors.toList());
@@ -51,6 +69,7 @@ public class TaskFilesServiceImpl extends ServiceImpl<TaskFilesMapper, TaskFiles
             //通过
             List<Integer> stageOneToUpdateList = new ArrayList<>();
             List<Integer> stageTwoToUpdateList = new ArrayList<>();
+            List<TaskComment> commentList = new ArrayList<>();
             for (TaskFiles taskFiles : taskFilesList) {
                 //判断所处阶段
                 if(1 == taskFiles.getChargeStage()){
@@ -58,6 +77,15 @@ public class TaskFilesServiceImpl extends ServiceImpl<TaskFilesMapper, TaskFiles
                 } else if (2 == taskFiles.getChargeStage()) {
                     stageTwoToUpdateList.add(taskFiles.getId());
                 }
+                String content = user.getName()+"审核通过了任务文件【"+taskFiles.getDocumentName()+"】";
+                TaskComment comment =  new TaskComment();
+                comment.setTaskId(taskFiles.getTaskId());
+                comment.setUserId(user.getId());
+                comment.setContent(content);
+                comment.setCreateTime(LocalDateTime.now());
+                comment.setUserColor(user.getColor());
+                comment.setUserName(user.getName());
+                commentList.add(comment);
             }
             if(CollectionUtils.isNotEmpty(stageOneToUpdateList)){
                 taskFilesMapper.update(null,new LambdaUpdateWrapper<TaskFiles>()
@@ -78,9 +106,99 @@ public class TaskFilesServiceImpl extends ServiceImpl<TaskFilesMapper, TaskFiles
                         .eq(TaskFiles::getId,stageTwoToUpdateList)
                 );
             }
+            if(CollectionUtils.isNotEmpty(commentList)){
+                taskCommentMapper.insertBatch(commentList);
+            }
+        }
+
+        return httpRespMsg;
+    }
+
+    @Override
+    @Transactional
+    public HttpRespMsg rejectFile(String taskFileIds,String reason, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("Token"));
+        String[] array = taskFileIds.split(",");
+        if(0 != array.length){
+            List<String> ids = Arrays.stream(array).collect(Collectors.toList());
+            WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
+            CompanyDingding dingding = companyDingdingService.getOne(new LambdaQueryWrapper<CompanyDingding>().eq(CompanyDingding::getCompanyId, user.getCompanyId()));
+            List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("company_id",user.getCompanyId()));
+            Map<String, User> companyUserMap = users.stream().collect(Collectors.toMap(User::getId, t -> t));
+
+            List<TaskFiles> taskFiles = taskFilesMapper.selectList(new LambdaQueryWrapper<TaskFiles>()
+                    .eq(TaskFiles::getNeedFileCharge,1)
+                    .eq(TaskFiles::getFinalChargeStatus,0)
+                    .in(TaskFiles::getId,ids)
+            );
+            List<Integer> stageOneToUpdateList = new ArrayList<>();
+            List<Integer> stageTwoToUpdateList = new ArrayList<>();
+            StringBuilder userNames = new StringBuilder();
+            Map<String,String> remindMap = new HashMap<>();
+            for (TaskFiles taskFile : taskFiles) {
+                if(1 == taskFile.getChargeStage()){
+                    //阶段一,更新阶段一状态
+                    stageOneToUpdateList.add(taskFile.getId());
+                } else if (2 == taskFile.getChargeStage()) {
+                    stageTwoToUpdateList.add(taskFile.getId());
+                }
+                User tmpUser = companyUserMap.get(taskFile.getCreatorId());
+                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                    userNames.append("$userName=").append(tmpUser.getCorpwxRealUserid()).append("$,");
+                }else if(dingding!=null&&dingding.getContactNeedTranslate()==1){
+                    userNames.append("$userName=").append(tmpUser.getDingdingUserid()).append("$,");
+                }else{
+                    userNames.append(tmpUser.getName()).append(",");
+                }
+                remindMap.put(tmpUser.getCorpwxUserid(),"任务文件【"+taskFile.getDocumentName()+"】因【"+reason+"】被驳回,请及时处理");
+            }
+            if(CollectionUtils.isNotEmpty(stageOneToUpdateList)){
+                //阶段一,更新阶段一状态
+                taskFilesMapper.update(null,new LambdaUpdateWrapper<TaskFiles>()
+                        .set(TaskFiles::getFileRejectReason,reason)
+                        .set(TaskFiles::getChargeOneTime,new Date())
+                        .set(TaskFiles::getChargeOneStatus,2)
+                        .in(TaskFiles::getId,stageOneToUpdateList)
+                );
+            }
+            if(CollectionUtils.isNotEmpty(stageTwoToUpdateList)){
+                taskFilesMapper.update(null,new LambdaUpdateWrapper<TaskFiles>()
+                        .set(TaskFiles::getFileRejectReason,reason)
+                        .set(TaskFiles::getChargeTwoTime,new Date())
+                        .set(TaskFiles::getChargeTwoStatus,2)
+                        .in(TaskFiles::getId,stageTwoToUpdateList)
+                );
+            }
+
+            String names = userNames.deleteCharAt(userNames.length() - 1).toString();
+            String content = user.getName()+"因【"+reason+"】驳回了【"+names+"】的任务文件";
+            TaskComment comment =  new TaskComment();
+            comment.setTaskId(taskFiles.get(0).getTaskId());
+            comment.setUserId(user.getId());
+            comment.setContent(content);
+            comment.setCreateTime(LocalDateTime.now());
+            comment.setUserColor(user.getColor());
+            comment.setUserName(user.getName());
+            taskCommentMapper.insert(comment);
+
+            for (Map.Entry<String, String> entry : remindMap.entrySet()) {
+                wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,entry.getKey(),entry.getValue(),null
+                        , WxCorpInfoServiceImpl.TEXT_CARD_MSG_TASK_FILE_REJECT);
+            }
 
         }
 
         return httpRespMsg;
     }
+
+    @Override
+    public HttpRespMsg getUnChargedFilesByTaskId(Integer taskId, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("Token"));
+        //状态为待审核、负责人为当前登录人
+        List<TaskFiles> taskFiles = taskFilesMapper.getUnChargedFilesByTaskId(taskId,user.getId());
+        httpRespMsg.setData(taskFiles);
+        return httpRespMsg;
+    }
 }

+ 140 - 117
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java

@@ -5,19 +5,17 @@ import com.aliyun.dingtalkcontact_1_0.models.SearchUserResponse;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.util.StringUtil;
 import com.management.platform.entity.*;
 import com.management.platform.entity.bo.QueryTaskChargePage;
-import com.management.platform.entity.vo.TaskChargePageVO;
+import com.management.platform.entity.vo.TaskFileChargePageVO;
 import com.management.platform.mapper.*;
 import com.management.platform.service.*;
 import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
 import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.ss.usermodel.CellType;
 import org.apache.poi.xssf.usermodel.XSSFCell;
@@ -36,7 +34,6 @@ import java.io.*;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -781,95 +778,95 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
         return msg;
     }
 
-    @Override
-    @Transactional
-    public HttpRespMsg auditFile(Integer taskId, String projectId, Integer auditStatus, String reason, HttpServletRequest request) {
-        HttpRespMsg msg = new HttpRespMsg();
-        User user = userMapper.selectById(request.getHeader("Token"));
-        //获取该任务的文件审核阶段
-        Task task = taskMapper.selectById(taskId);
-        if(1 == auditStatus){
-            //通过
-            if(1 == task.getChargeStage()){
-                //阶段一,更新阶段一状态
-                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
-                        .set(Task::getChargeStage,2)
-                        .set(Task::getChargeOneStatus,1)
-                        .set(Task::getChargeOneTime,new Date())
-                        .eq(Task::getId,taskId)
-                );
-            } else if (2 == task.getChargeStage()) {
-                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
-                        .set(Task::getChargeStage,3)
-                        .set(Task::getFinalChargeStatus,1)
-                        .set(Task::getChargeTwoStatus,1)
-                        .set(Task::getChargeTwoTime,new Date())
-                        .eq(Task::getId,taskId)
-                );
-            }
-            //添加动态消息
-            String content = user.getName()+"审核通过了任务:"+task.getName();
-            TaskComment comment =  new TaskComment();
-            comment.setTaskId(taskId);
-            comment.setUserId(user.getId());
-            comment.setContent(content);
-            comment.setCreateTime(LocalDateTime.now());
-            comment.setUserColor(user.getColor());
-            comment.setUserName(user.getName());
-            taskCommentMapper.insert(comment);
-
-        } else if (2 == auditStatus) {
-            //驳回
-            WxCorpInfo info = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
-            if(1 == task.getChargeStage()){
-                //阶段一,更新阶段一状态
-                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
-                        .set(Task::getFileRejectReason,reason)
-                        .set(Task::getChargeOneTime,new Date())
-                        .set(Task::getChargeOneStatus,2)
-                        .eq(Task::getId,taskId)
-                );
-            } else if (2 == task.getChargeStage()) {
-                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
-                        .set(Task::getFileRejectReason,reason)
-                        .set(Task::getChargeTwoTime,new Date())
-                        .set(Task::getChargeTwoStatus,2)
-                        .eq(Task::getId,taskId)
-                );
-            }
-            List<TaskFiles> taskFiles = taskFilesMapper.selectList(new LambdaQueryWrapper<TaskFiles>()
-                    .eq(TaskFiles::getTaskId, task.getId())
-            );
-            List<String> creatorIds = taskFiles.stream().filter(t -> StringUtils.isNotBlank(t.getCreatorId()))
-                    .map(TaskFiles::getCreatorId).collect(Collectors.toList());
-            if(CollectionUtils.isNotEmpty(creatorIds)){
-                List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
-                        .eq(User::getIsActive, 1)
-                        .in(User::getId, creatorIds)
-                );
-                if(CollectionUtils.isNotEmpty(users)){
-                    List<String> wxCorpIds = users.stream().filter(t -> StringUtils.isNotBlank(t.getCorpwxUserid()))
-                            .map(User::getCorpwxUserid).collect(Collectors.toList());
-                    if(CollectionUtils.isNotEmpty(wxCorpIds)){
-                        String join = StringUtils.join(wxCorpIds, ",");
-                        wxCorpInfoService.sendWXCorpMsg(info,join,"任务:"+task.getName()+"的文件因【"+reason+"】被驳回,请及时处理",null
-                                , WxCorpInfoServiceImpl.TEXT_CARD_MSG_TASK_FILE_REJECT);
-                    }
-                }
-            }
-            String content = user.getName()+"审核驳回了任务:"+task.getName();
-            TaskComment comment =  new TaskComment();
-            comment.setTaskId(taskId);
-            comment.setUserId(user.getId());
-            comment.setContent(content);
-            comment.setCreateTime(LocalDateTime.now());
-            comment.setUserColor(user.getColor());
-            comment.setUserName(user.getName());
-            taskCommentMapper.insert(comment);
-        }
-
-        return msg;
-    }
+//    @Override
+//    @Transactional
+//    public HttpRespMsg auditFile(Integer taskId, String projectId, Integer auditStatus, String reason, HttpServletRequest request) {
+//        HttpRespMsg msg = new HttpRespMsg();
+//        User user = userMapper.selectById(request.getHeader("Token"));
+//        //获取该任务的文件审核阶段
+//        Task task = taskMapper.selectById(taskId);
+//        if(1 == auditStatus){
+//            //通过
+//            if(1 == task.getChargeStage()){
+//                //阶段一,更新阶段一状态
+//                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
+//                        .set(Task::getChargeStage,2)
+//                        .set(Task::getChargeOneStatus,1)
+//                        .set(Task::getChargeOneTime,new Date())
+//                        .eq(Task::getId,taskId)
+//                );
+//            } else if (2 == task.getChargeStage()) {
+//                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
+//                        .set(Task::getChargeStage,3)
+//                        .set(Task::getFinalChargeStatus,1)
+//                        .set(Task::getChargeTwoStatus,1)
+//                        .set(Task::getChargeTwoTime,new Date())
+//                        .eq(Task::getId,taskId)
+//                );
+//            }
+//            //添加动态消息
+//            String content = user.getName()+"审核通过了任务:"+task.getName();
+//            TaskComment comment =  new TaskComment();
+//            comment.setTaskId(taskId);
+//            comment.setUserId(user.getId());
+//            comment.setContent(content);
+//            comment.setCreateTime(LocalDateTime.now());
+//            comment.setUserColor(user.getColor());
+//            comment.setUserName(user.getName());
+//            taskCommentMapper.insert(comment);
+//
+//        } else if (2 == auditStatus) {
+//            //驳回
+//            WxCorpInfo info = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
+//            if(1 == task.getChargeStage()){
+//                //阶段一,更新阶段一状态
+//                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
+//                        .set(Task::getFileRejectReason,reason)
+//                        .set(Task::getChargeOneTime,new Date())
+//                        .set(Task::getChargeOneStatus,2)
+//                        .eq(Task::getId,taskId)
+//                );
+//            } else if (2 == task.getChargeStage()) {
+//                taskMapper.update(null,new LambdaUpdateWrapper<Task>()
+//                        .set(Task::getFileRejectReason,reason)
+//                        .set(Task::getChargeTwoTime,new Date())
+//                        .set(Task::getChargeTwoStatus,2)
+//                        .eq(Task::getId,taskId)
+//                );
+//            }
+//            List<TaskFiles> taskFiles = taskFilesMapper.selectList(new LambdaQueryWrapper<TaskFiles>()
+//                    .eq(TaskFiles::getTaskId, task.getId())
+//            );
+//            List<String> creatorIds = taskFiles.stream().filter(t -> StringUtils.isNotBlank(t.getCreatorId()))
+//                    .map(TaskFiles::getCreatorId).collect(Collectors.toList());
+//            if(CollectionUtils.isNotEmpty(creatorIds)){
+//                List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
+//                        .eq(User::getIsActive, 1)
+//                        .in(User::getId, creatorIds)
+//                );
+//                if(CollectionUtils.isNotEmpty(users)){
+//                    List<String> wxCorpIds = users.stream().filter(t -> StringUtils.isNotBlank(t.getCorpwxUserid()))
+//                            .map(User::getCorpwxUserid).collect(Collectors.toList());
+//                    if(CollectionUtils.isNotEmpty(wxCorpIds)){
+//                        String join = StringUtils.join(wxCorpIds, ",");
+//                        wxCorpInfoService.sendWXCorpMsg(info,join,"任务:"+task.getName()+"的文件因【"+reason+"】被驳回,请及时处理",null
+//                                , WxCorpInfoServiceImpl.TEXT_CARD_MSG_TASK_FILE_REJECT);
+//                    }
+//                }
+//            }
+//            String content = user.getName()+"审核驳回了任务:"+task.getName();
+//            TaskComment comment =  new TaskComment();
+//            comment.setTaskId(taskId);
+//            comment.setUserId(user.getId());
+//            comment.setContent(content);
+//            comment.setCreateTime(LocalDateTime.now());
+//            comment.setUserColor(user.getColor());
+//            comment.setUserName(user.getName());
+//            taskCommentMapper.insert(comment);
+//        }
+//
+//        return msg;
+//    }
 
     @Override
     public HttpRespMsg getFileRejectReason(String taskId, HttpServletRequest request) {
@@ -906,6 +903,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
         User user = userMapper.selectById(userId);
         Integer companyId = user.getCompanyId();
         queryBO.setUserId(userId);
+        queryBO.setCompanyId(companyId);
 
         queryBO.setPageIndex((queryBO.getPageIndex()-1)*queryBO.getPageSize());
 
@@ -915,41 +913,66 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
             branchDepartment= getBranchDepartment(queryBO.getDeptId(), departmentList);
         }
 
-        List<TaskChargePageVO> taskChargePage = taskMapper.getTaskChargePage(queryBO, branchDepartment);
-        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id",user.getCompanyId()));
-        CompanyDingding dingding = companyDingdingService.getOne(new LambdaQueryWrapper<CompanyDingding>().eq(CompanyDingding::getCompanyId, user.getCompanyId()));
-        List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("company_id",user.getCompanyId()));
-        Map<String, User> companyUserMap = users.stream().collect(Collectors.toMap(User::getId, t -> t));
+        //文件处于审核阶段,且该阶段审核人为当前登录人
+//        List<TaskChargePageVO> taskChargePage = taskMapper.getTaskChargePage(queryBO, branchDepartment);
+
+        List<TaskFileChargePageVO> taskFileChargePageList = taskMapper.getTaskFileChargePage(queryBO,branchDepartment);
 
-        if(CollectionUtils.isNotEmpty(taskChargePage)){
-            List<Integer> collect = taskChargePage.stream()
-                    .map(TaskChargePageVO::getTaskId).distinct().collect(Collectors.toList());
+//        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id",user.getCompanyId()));
+//        CompanyDingding dingding = companyDingdingService.getOne(new LambdaQueryWrapper<CompanyDingding>().eq(CompanyDingding::getCompanyId, user.getCompanyId()));
+//        List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("company_id",user.getCompanyId()));
+//        Map<String, User> companyUserMap = users.stream().collect(Collectors.toMap(User::getId, t -> t));
+
+        if(CollectionUtils.isNotEmpty(taskFileChargePageList)){
+            List<Integer> collect = taskFileChargePageList.stream()
+                    .map(TaskFileChargePageVO::getTaskId).distinct().collect(Collectors.toList());
 
             List<TaskExecutor> taskExecutorList = taskExecutorMapper.selectList(new QueryWrapper<TaskExecutor>().in("task_id", collect));
 
-            taskChargePage.forEach(t->{
+            taskFileChargePageList.forEach(t->{
                 List<TaskExecutor> executorList = taskExecutorList.stream()
                         .filter(te -> te.getTaskId().equals(t.getTaskId())&&te.getExecutorId()!=null).collect(Collectors.toList());
                 t.setExecutorList(executorList);
-                String userWxId = "";
-                User tmpUser = companyUserMap.get(t.getFinalChargeId());
-                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
-                    userWxId = tmpUser.getCorpwxRealUserid();
-                }else if(dingding!=null&&dingding.getContactNeedTranslate()==1){
-                    userWxId = tmpUser.getDingdingUserid();
-                }
-                if(StringUtils.isNotBlank(userWxId)){
-                    t.setFinalChargeName("$userName=" + userWxId + "$");
-                }
-                int finalStatus = 1==t.getChargeStage()?t.getChargeOneStatus():t.getChargeTwoStatus();
-                t.setFileChargeStatus(finalStatus);
+//                String userWxId = "";
+//                User tmpUser = companyUserMap.get(t.getFinalChargeId());
+//                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+//                    userWxId = tmpUser.getCorpwxRealUserid();
+//                }else if(dingding!=null&&dingding.getContactNeedTranslate()==1){
+//                    userWxId = tmpUser.getDingdingUserid();
+//                }
+//                if(StringUtils.isNotBlank(userWxId)){
+//                    t.setFinalChargeName("$userName=" + userWxId + "$");
+//                }else{
+//                    t.setFinalChargeName(tmpUser.getName());
+//                }
+//                List<TaskFiles> childFiles = t.getChildFiles();
+//                //是否存在驳回
+//                long rejectCount = childFiles.stream().filter(tmp -> {
+//                    if (2 == tmp.getChargeOneStatus() || 2 == tmp.getChargeTwoStatus()) {
+//                        return true;
+//                    } else {
+//                        return false;
+//                    }
+//                }).count();
+//                //是否都是全部通过
+//                long allPassCount = childFiles.stream().filter(tmp -> 1 == tmp.getFinalChargeStatus()).count();
+//                if(rejectCount > 0 ){
+//                    t.setTaskChargeStatus(2);
+//                } else if (allPassCount == childFiles.size()) {
+//                    t.setTaskChargeStatus(3);
+//                }else {
+//                    t.setTaskChargeStatus(1);
+//                }
+
+//                int finalStatus = 1==t.getChargeStage()?t.getChargeOneStatus():t.getChargeTwoStatus();
+//                t.setFileChargeStatus(finalStatus);
             });
         }
 
-
-        int total = taskMapper.getTaskChargePageTotal(queryBO,branchDepartment);
+//        int total = taskMapper.getTaskChargePageTotal(queryBO,branchDepartment);
+        int total = taskMapper.getTaskFileChargePageTotal(queryBO,branchDepartment);
         Map<String, Object> map = new HashMap<>();
-        map.put("records", taskChargePage);
+        map.put("records", taskFileChargePageList);
         map.put("total", total);
         msg.data = map;
         return msg;

+ 44 - 52
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -2316,10 +2316,12 @@ public class TimingTask {
         }
     }
 
-    @Scheduled(cron = "0 30 9 ? * *")
+    @Scheduled(cron = "0 30 09 ? * *")
     public void remindTaskFile(){
-        List<Integer> taskIds =  taskFilesMapper.getAllTaskIds();
-        if(CollectionUtils.isNotEmpty(taskIds)){
+//        List<Integer> taskIds =  taskFilesMapper.getAllNeedChargeTaskIds();
+        List<TaskFiles> taskFiles = taskFilesMapper.getAllNeedChargeTaskFiles();
+        if(CollectionUtils.isNotEmpty(taskFiles)){
+            Map<Integer, List<TaskFiles>> companyTaskFileMap = taskFiles.stream().collect(Collectors.groupingBy(TaskFiles::getCompanyId));
             List<WxCorpInfo> wxCorpInfos = wxCorpInfoMapper.selectList(new LambdaQueryWrapper<WxCorpInfo>()
                     .eq(WxCorpInfo::getSaasSyncContact,1)
             );
@@ -2333,60 +2335,50 @@ public class TimingTask {
             if(CollectionUtils.isNotEmpty(timeTypes)){
                 companyTimeTypeMap = timeTypes.stream().collect(Collectors.toMap(TimeType::getCompanyId,t->t));
             }
-
-            List<Task> tasks = taskMapper.selectList(new LambdaQueryWrapper<Task>()
-                    .eq(Task::getTaskStatus, 0)
-                    .eq(Task::getFinalChargeStatus,0)
-                    .isNotNull(Task::getChargeOneId)
-                    .ne(Task::getChargeStage,3)
-                    .in(Task::getId, taskIds)
-            );
-            if(CollectionUtils.isNotEmpty(tasks)){
-                Map<Integer, List<Task>> companyTaskMap = tasks.stream().collect(Collectors.groupingBy(Task::getCompanyId));
-                for (Map.Entry<Integer, List<Task>> entry : companyTaskMap.entrySet()) {
-                    if(0 == companyTimeTypeMap.get(entry.getKey()).getTaskFileCharge()){
-                        continue;
-                    }
-                    WxCorpInfo wxCorpInfo = companyWXCorpMap.get(entry.getKey());
-                    List<Task> companyTasks = entry.getValue();
-                    List<String> userIds = new ArrayList<>();
-                    List<String> chargeOneIds = companyTasks.stream().map(Task::getChargeOneId).collect(Collectors.toList());
-                    List<String> chargeTwoIds = companyTasks.stream().filter(t -> org.apache.commons.lang3.StringUtils.isNotBlank(t.getChargeTwoId()))
-                            .map(Task::getChargeTwoId).collect(Collectors.toList());
-                    userIds.addAll(chargeOneIds);
-                    userIds.addAll(chargeTwoIds);
-                    Map<String, String> userIdCorpWxMap = new HashMap<>();
-                    if(CollectionUtils.isNotEmpty(userIds)){
-                        userIds = userIds.stream().distinct().collect(Collectors.toList());
-                        List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
-                                .select(User::getId,User::getCorpwxUserid)
-                                .in(User::getId, userIds)
-                        );
-                        userIdCorpWxMap = users.stream().filter(t-> org.apache.commons.lang3.StringUtils.isNotBlank(t.getCorpwxUserid()))
-                                .collect(Collectors.toMap(User::getId, User::getCorpwxUserid));
-                    }
-                    if(null != wxCorpInfo){
-                        for (Task companyTask : companyTasks) {
-                            if(1==companyTask.getChargeStage()){
-                                //阶段一的审核人提示
-                                String corpWxId = userIdCorpWxMap.get(companyTask.getChargeOneId());
-                                if(org.apache.commons.lang3.StringUtils.isNotBlank(corpWxId)){
-                                    wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,corpWxId,"任务:"+companyTask.getName()+"的文件需审核,请及时处理",null
-                                            , WxCorpInfoServiceImpl.TEXT_CARD_MSG_TASK_FILE_UPDATE);
-                                }
-                            } else if (2 == companyTask.getChargeStage()) {
-                                //阶段二的审核人提示
-                                String corpWxId = userIdCorpWxMap.get(companyTask.getChargeTwoId());
-                                if(org.apache.commons.lang3.StringUtils.isNotBlank(corpWxId)){
-                                    wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,corpWxId,"任务:"+companyTask.getName()+"的文件需审核,请及时处理",null
-                                            , WxCorpInfoServiceImpl.TEXT_CARD_MSG_TASK_FILE_UPDATE);
-                                }
+            for (Map.Entry<Integer, List<TaskFiles>> entry : companyTaskFileMap.entrySet()) {
+                if(0 == companyTimeTypeMap.get(entry.getKey()).getTaskFileCharge()){
+                    continue;
+                }
+                List<TaskFiles> companyTaskFiles = entry.getValue();
+                WxCorpInfo wxCorpInfo = companyWXCorpMap.get(entry.getKey());
+                List<String> userIds = new ArrayList<>();
+                List<String> chargeOneIds = companyTaskFiles.stream().filter(t -> org.apache.commons.lang3.StringUtils.isNotBlank(t.getChargeOneId()))
+                        .map(TaskFiles::getChargeOneId).collect(Collectors.toList());
+                List<String> chargeTwoIds = companyTaskFiles.stream().filter(t -> org.apache.commons.lang3.StringUtils.isNotBlank(t.getChargeTwoId()))
+                        .map(TaskFiles::getChargeTwoId).collect(Collectors.toList());
+                userIds.addAll(chargeOneIds);
+                userIds.addAll(chargeTwoIds);
+                Map<String, String> userIdCorpWxMap = new HashMap<>();
+                if(CollectionUtils.isNotEmpty(userIds)){
+                    userIds = userIds.stream().distinct().collect(Collectors.toList());
+                    List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
+                            .select(User::getId,User::getCorpwxUserid)
+                            .in(User::getId, userIds)
+                    );
+                    userIdCorpWxMap = users.stream().filter(t-> org.apache.commons.lang3.StringUtils.isNotBlank(t.getCorpwxUserid()))
+                            .collect(Collectors.toMap(User::getId, User::getCorpwxUserid));
+                }
+                if(null != wxCorpInfo){
+                    for (TaskFiles companyTaskFile : companyTaskFiles) {
+                        if(1==companyTaskFile.getChargeStage()){
+                            //阶段一的审核人提示
+                            String corpWxId = userIdCorpWxMap.get(companyTaskFile.getChargeOneId());
+                            if(org.apache.commons.lang3.StringUtils.isNotBlank(corpWxId)){
+                                wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,corpWxId,"任务:"+companyTaskFile.getTaskName()+"的文件需审核,请及时处理",null
+                                        , WxCorpInfoServiceImpl.TEXT_CARD_MSG_TASK_FILE_UPDATE);
+                            }
+                        } else if (2 == companyTaskFile.getChargeStage()) {
+                            //阶段二的审核人提示
+                            String corpWxId = userIdCorpWxMap.get(companyTaskFile.getChargeTwoId());
+                            if(org.apache.commons.lang3.StringUtils.isNotBlank(corpWxId)){
+                                wxCorpInfoService.sendWXCorpMsg(wxCorpInfo,corpWxId,"任务:"+companyTaskFile.getTaskName()+"的文件需审核,请及时处理",null
+                                        , WxCorpInfoServiceImpl.TEXT_CARD_MSG_TASK_FILE_UPDATE);
                             }
                         }
-
                     }
                 }
             }
+
         }
     }
 }

+ 7 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskCommentMapper.xml

@@ -18,5 +18,12 @@
     <sql id="Base_Column_List">
         id, task_id, user_id, user_name, content, create_time, user_color, type
     </sql>
+    <insert id="insertBatch">
+        insert into task_comment(task_id, user_id, user_name, content, create_time, user_color)
+        VALUES
+            <foreach collection="commentList" item="comment" separator=",">
+            (#{comment.taskId},#{comment.userId},#{comment.userName},#{comment.content},#{comment.createTime},#{comment.userColor})
+            </foreach>
+    </insert>
 
 </mapper>

+ 34 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskFilesMapper.xml

@@ -22,11 +22,43 @@
     <sql id="Base_Column_List">
         id, task_id, project_id, document_name, server_name, url, indate, size, document_type, creator_id, creator_name, document_id
     </sql>
-    <select id="getAllTaskIds" resultType="java.lang.Integer">
+    <select id="getAllNeedChargeTaskIds" resultType="java.lang.Integer">
         select task_id
         from task_files
-        where task_id is not null
+        where task_id is not null and need_file_charge = 1 and final_charge_status = 0
         group by task_id
     </select>
+    <select id="getTaskFiles" resultType="com.management.platform.entity.TaskFiles">
+        select *
+        from task_files
+        where task_id = #{taskId}
+          and (
+            charge_one_id = #{userId} or charge_two_id = #{userId} or creator_id = #{userId}
+                or need_file_charge = 0
+                or final_charge_status = 1
+            )
+        ORDER BY indate desc
+    </select>
+    <select id="getAllNeedChargeTaskFiles" resultType="com.management.platform.entity.TaskFiles">
+        select task_files.*,task.company_id,task.name as taskName
+        from task_files
+                 left join task on task_files.task_id = task.id
+        where task_files.task_id is not null and task_files.need_file_charge = 1 and task_files.final_charge_status = 0
+    </select>
+    <select id="getUnChargedFilesByTaskId" resultType="com.management.platform.entity.TaskFiles">
+        select *
+        from task_files
+        where task_id = #{taskId} and need_file_charge = 1 and final_charge_status = 0
+          and case charge_stage
+                  when 1 then charge_one_id = #{userId} and charge_one_status = 0
+                  when 2 then charge_two_id = #{userId} and charge_two_status = 0
+            end
+    </select>
+    <select id="getTaskFilesByCreatorDeptId" resultType="com.management.platform.entity.TaskFiles">
+        select tf.id
+        from task_files tf
+                 left join user on tf.creator_id = user.id
+        where user.department_id = #{departmentId}
+    </select>
 
 </mapper>

+ 98 - 11
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml

@@ -97,15 +97,15 @@
         <result column="stages_name" property="stagesName" />
         <result column="department_name" property="departmentName" />
 
-        <result column="charge_one_id" property="chargeOneId" />
-        <result column="charge_one_status" property="chargeOneStatus" />
-        <result column="charge_one_time" property="chargeOneTime" />
-        <result column="charge_two_id" property="chargeTwoId" />
-        <result column="charge_two_status" property="chargeTwoStatus" />
-        <result column="charge_two_time" property="chargeTwoTime" />
-        <result column="charge_stage" property="chargeStage" />
-        <result column="final_charge_status" property="finalChargeStatus" />
-        <result column="reject_reason" property="rejectReason"></result>
+<!--        <result column="charge_one_id" property="chargeOneId" />-->
+<!--        <result column="charge_one_status" property="chargeOneStatus" />-->
+<!--        <result column="charge_one_time" property="chargeOneTime" />-->
+<!--        <result column="charge_two_id" property="chargeTwoId" />-->
+<!--        <result column="charge_two_status" property="chargeTwoStatus" />-->
+<!--        <result column="charge_two_time" property="chargeTwoTime" />-->
+<!--        <result column="charge_stage" property="chargeStage" />-->
+<!--        <result column="final_charge_status" property="finalChargeStatus" />-->
+<!--        <result column="file_reject_reason" property="fileRejectReason"></result>-->
     </resultMap>
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
@@ -236,7 +236,7 @@
     <select id="getTaskWithProjectName" resultMap="RichResultMap">
         SELECT task.id, task.project_id, task.name, task.executor_name, task.start_date, task.`end_date`,task.create_date, task.`creater_id`, task.`creater_name`, task.group_id,
         task.plan_hours, task.task_type, task.task_level, task.task_status, task.`finish_date`, project.`project_name`, stages.stages_name,department.department_name
-        ,task.charge_one_id,task.charge_one_status,task.charge_two_id,task.charge_two_status,task.charge_stage,task.final_charge_status
+        <!-- ,task.charge_one_id,task.charge_one_status,task.charge_two_id,task.charge_two_status,task.charge_stage,task.final_charge_status -->
         FROM task LEFT JOIN project ON project.id = task.`project_id`
         left join stages on stages.id = task.stages_id
         left join department on department.department_id=project.dept_id
@@ -374,7 +374,7 @@
     <select id="getTaskWithProjectNameWithCharge" resultMap="RichResultMap">
         SELECT task.id, task.project_id, task.name, task.executor_name, task.start_date, task.`end_date`,task.create_date, task.`creater_id`, task.`creater_name`, task.group_id,
         task.plan_hours, task.task_type, task.task_level, task.task_status, task.`finish_date`, project.`project_name`, stages.stages_name,department.department_name
-        ,task.charge_one_id,task.charge_one_status,task.charge_two_id,task.charge_two_status,task.charge_stage,task.final_charge_status
+        <!-- ,task.charge_one_id,task.charge_one_status,task.charge_two_id,task.charge_two_status,task.charge_stage,task.final_charge_status-->
         FROM task LEFT JOIN project ON project.id = task.`project_id`
         left join stages on stages.id = task.stages_id
         left join department on department.department_id=project.dept_id
@@ -574,4 +574,91 @@
         group by tmp1.task_id
             )tmpAll
     </select>
+
+    <resultMap id="taskFileChargeMap" type="com.management.platform.entity.vo.TaskFileChargePageVO">
+        <result property="taskId" column="task_id"></result>
+        <result property="taskName" column="taskName"></result>
+        <result property="groupId" column="group_id"></result>
+        <result property="executorId" column="executor_id"></result>
+        <result property="projectId" column="projectId"></result>
+        <result property="projectName" column="project_name"></result>
+        <collection property="childFiles" ofType="com.management.platform.entity.TaskFiles">
+            <result property="id" column="id"></result>
+            <result property="documentName" column="document_name"></result>
+            <result property="creatorId" column="creator_id"></result>
+            <result property="creatorName" column="creator_name"></result>
+            <result property="chargeOneId" column="charge_one_id"></result>
+            <result property="chargeOneStatus" column="charge_one_status"></result>
+            <result property="chargeOneTime" column="charge_one_time"></result>
+            <result property="chargeTwoId" column="charge_two_id"></result>
+            <result property="chargeTwoStatus" column="charge_two_status"></result>
+            <result property="chargeTwoTime" column="charge_two_time"></result>
+            <result property="chargeStage" column="charge_stage"></result>
+            <result property="finalChargeStatus" column="final_charge_status"></result>
+            <result property="fileRejectReason" column="file_reject_reason"></result>
+            <result property="needFileCharge" column="need_file_charge"></result>
+        </collection>
+    </resultMap>
+
+    <select id="getTaskFileChargePage" resultMap="taskFileChargeMap">
+        select tf.task_id,task.name as taskName,task.group_id,task.executor_id
+        ,p.id as projectId,p.project_name
+        from task_files tf
+        left join task on tf.task_id = task.id
+        left join project p on task.project_id = p.id
+        <where>
+            tf.need_file_charge = 1
+            and tf.final_charge_status = 0
+            and task.task_status = 0
+            and task.company_id = #{queryBO.companyId}
+            and case tf.charge_stage
+            when 1 then tf.charge_one_id = #{queryBO.userId} and tf.charge_one_status = 0
+            when 2 then tf.charge_two_id = #{queryBO.userId} and tf.charge_two_status = 0
+            end
+            <if test="queryBO.taskName != null and queryBO.taskName != ''">
+                and task.name like concat('%',#{queryBO.taskName},'%')
+            </if>
+            <if test="deptIds!=null and deptIds.size()>0">
+                and p.dept_id in
+                <foreach collection="deptIds" open="(" close=")" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        group by tf.task_id
+        ORDER BY tf.task_id desc
+        <if test="queryBO.pageIndex != null and queryBO.pageSize != null">
+            limit #{queryBO.pageIndex}, #{queryBO.pageSize}
+        </if>
+    </select>
+    <select id="getTaskFileChargePageTotal" resultType="java.lang.Integer">
+        select count(*)
+        from
+            (
+                select tf.task_id
+                from task_files tf
+                         left join task on tf.task_id = task.id
+                         left join project p on task.project_id = p.id
+                <where>
+                    tf.need_file_charge = 1
+                    and tf.final_charge_status = 0
+                    and task.task_status = 0
+                    and task.company_id = #{queryBO.companyId}
+                    and case tf.charge_stage
+                    when 1 then tf.charge_one_id = #{queryBO.userId} and tf.charge_one_status = 0
+                    when 2 then tf.charge_two_id = #{queryBO.userId} and tf.charge_two_status = 0
+                    end
+                    <if test="queryBO.taskName != null and queryBO.taskName != ''">
+                        and task.name like concat('%',#{queryBO.taskName},'%')
+                    </if>
+                    <if test="deptIds!=null and deptIds.size()>0">
+                        and p.dept_id in
+                        <foreach collection="deptIds" open="(" close=")" separator="," item="item">
+                            #{item}
+                        </foreach>
+                    </if>
+                </where>
+                group by tf.task_id
+            )tmp1
+    </select>
 </mapper>