浏览代码

行政收文流程id固化规则节点
获取当前行政收文流程下一节点落实人列表
获取当前行政收文流程下一节点审核人列表

大数据与最优化研究所 5 月之前
父节点
当前提交
a34e21df3c

+ 3 - 19
src/main/java/com/xjrsoft/module/liteflow/node/ODRTaskIdPersistNode.java

@@ -3,6 +3,7 @@ package com.xjrsoft.module.liteflow.node;
 import cn.hutool.core.convert.Convert;
 import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
 import com.xjrsoft.module.hikvision.util.FaceImportUtil;
+import com.xjrsoft.module.oa.service.IOfficialDocumentReceivedService;
 import com.xjrsoft.module.personnel.entity.TeacherFaceProcess;
 import com.xjrsoft.module.personnel.service.ITeacherFaceProcessService;
 import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
@@ -19,13 +20,7 @@ import java.util.Map;
 public class ODRTaskIdPersistNode extends NodeComponent {
 
     @Autowired
-    private ITeacherFaceProcessService teacherFaceProcessService;
-
-    @Autowired
-    private HikvisionDataMapper hikvisionDataMapper;
-
-    @Autowired
-    private FaceImportMapper faceImportMapper;
+    private IOfficialDocumentReceivedService officialDocumentReceivedService;
 
     @Override
     public void process() throws Exception {
@@ -34,18 +29,7 @@ public class ODRTaskIdPersistNode extends NodeComponent {
         Object value = util.getFormDatKey(params, "id");
         Long formId = Convert.toLong(value);
         if (formId != null) {
-
-            String fileUrl = faceImportMapper.GetTeacherHikvisionImgById(formId);
-
-            // 数据处理
-            TeacherFaceProcess dataObj = teacherFaceProcessService.getById(formId);
-            dataObj.setStatus(1);
-            dataObj.setExamStatus(1);
-            String reslut = FaceImportUtil.ImportTeacherFace(hikvisionDataMapper.getTeacherHikvisionId(dataObj.getUserId()), fileUrl);
-            dataObj.setHikvisionResult(reslut);
-            teacherFaceProcessService.updateById(dataObj);
-
-            teacherFaceProcessService.clearHistory(dataObj);
+            officialDocumentReceivedService.taskIdPersist(formId);
         }
     }
 }

+ 19 - 0
src/main/java/com/xjrsoft/module/oa/controller/OfficialDocumentReceivedController.java

@@ -19,6 +19,7 @@ import com.xjrsoft.module.oa.entity.OfficialDocumentReceived;
 import com.xjrsoft.module.oa.entity.OfficialDocumentReceivedHandle;
 import com.xjrsoft.module.oa.service.IOfficialDocumentReceivedHandleService;
 import com.xjrsoft.module.oa.service.IOfficialDocumentReceivedService;
+import com.xjrsoft.module.oa.vo.NextReviewerListVo;
 import com.xjrsoft.module.oa.vo.OfficialDocumentReceivedPageVo;
 import com.xjrsoft.module.oa.vo.OfficialDocumentReceivedVo;
 import com.xjrsoft.module.organization.entity.User;
@@ -171,4 +172,22 @@ public class OfficialDocumentReceivedController {
         return RT.ok(maxReceivedNumber);
     }
 
+
+    @GetMapping(value = "/nextReviewerList")
+    @ApiOperation(value = "获取当前行政收文流程下一节点审核人列表")
+    @SaCheckPermission("officialdocumentpost:detail")
+    @XjrLog(value = "获取当前行政收文流程下一节点审核人列表", saveResponseData = true)
+    public RT<List<NextReviewerListVo>> nextReviewerList(@RequestParam String taskId) {
+        List<NextReviewerListVo> result = officialDocumentReceivedService.nextReviewerList(taskId);
+        return RT.ok(result);
+    }
+
+    @GetMapping(value = "/nextExecutorList")
+    @ApiOperation(value = "获取当前行政收文流程下一节点落实人列表")
+    @SaCheckPermission("officialdocumentpost:detail")
+    @XjrLog(value = "获取当前行政收文流程下一节点落实人列表", saveResponseData = true)
+    public RT<List<NextReviewerListVo>> nextExecutorList(@RequestParam String taskId) {
+        List<NextReviewerListVo> result = officialDocumentReceivedService.nextExecutorList(taskId);
+        return RT.ok(result);
+    }
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/oa/entity/OfficialDocumentReceived.java

@@ -144,4 +144,7 @@ public class OfficialDocumentReceived implements Serializable {
 
     @ApiModelProperty("部门审核人主键id")
     private Long deptReviewerId;
+
+    @ApiModelProperty("部门落实人主键id")
+    private Long deptExecutorId;
 }

+ 15 - 0
src/main/java/com/xjrsoft/module/oa/service/IOfficialDocumentReceivedService.java

@@ -2,6 +2,9 @@ package com.xjrsoft.module.oa.service;
 
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.oa.entity.OfficialDocumentReceived;
+import com.xjrsoft.module.oa.vo.NextReviewerListVo;
+
+import java.util.List;
 
 /**
  * @title: 公文收文
@@ -28,4 +31,16 @@ public interface IOfficialDocumentReceivedService extends MPJBaseService<Officia
      * @return
      */
     void taskIdPersist(Long id);
+
+    /**
+     * 获取当前行政收文流程下一节点审核人列表
+     * @param taskId
+     */
+    List<NextReviewerListVo> nextReviewerList(String taskId);
+
+    /**
+     * 获取当前行政收文流程下一节点落实人列表
+     * @param taskId
+     */
+    List<NextReviewerListVo> nextExecutorList(String taskId);
 }

+ 146 - 0
src/main/java/com/xjrsoft/module/oa/service/impl/OfficialDocumentReceivedServiceImpl.java

@@ -4,24 +4,38 @@ import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.module.oa.entity.OfficialDocumentReceived;
 import com.xjrsoft.module.oa.mapper.OfficialDocumentReceivedMapper;
 import com.xjrsoft.module.oa.service.IOfficialDocumentReceivedService;
 import com.xjrsoft.module.oa.utils.PostNumberUtil;
+import com.xjrsoft.module.oa.vo.NextReviewerListVo;
 import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
+import com.xjrsoft.module.organization.entity.Department;
+import com.xjrsoft.module.organization.entity.Post;
 import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.entity.UserPostRelation;
+import com.xjrsoft.module.organization.mapper.PostMapper;
 import com.xjrsoft.module.organization.mapper.UserMapper;
 import com.xjrsoft.module.organization.service.IWeChatService;
 import com.xjrsoft.module.teacher.entity.WfTeacherleave;
+import com.xjrsoft.module.teacher.entity.XjrUser;
+import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
 import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
+import com.xjrsoft.module.workflow.entity.WorkflowRecord;
 import com.xjrsoft.module.workflow.service.IWorkflowFormRelationService;
+import com.xjrsoft.module.workflow.service.IWorkflowRecordService;
 import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @title: 公文收文
@@ -38,6 +52,9 @@ public class OfficialDocumentReceivedServiceImpl extends MPJBaseServiceImpl<Offi
     private final UserMapper userMapper;
 
     private final IWorkflowFormRelationService workflowFormRelationService;
+    private final IWorkflowRecordService workflowRecordService;
+    private final PostMapper postMapper;
+    private final XjrUserMapper xjrUserMapper;
 
     @Override
     public String getMaxReceivedNumber() {
@@ -96,6 +113,135 @@ public class OfficialDocumentReceivedServiceImpl extends MPJBaseServiceImpl<Offi
             OfficialDocumentReceived update = new OfficialDocumentReceived();
             update.setId(id);
             update.setTaskId(workflowFormRelation.getProcessId());
+            officialDocumentReceivedMapper.updateById(update);
         }
     }
+
+    /**
+     * 获取当前行政收文流程下一节点审核人列表
+     * @param taskId
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public List<NextReviewerListVo> nextReviewerList(String taskId) {
+        // 根据流程Id获取分管领导审核节点的审核人
+        LambdaQueryWrapper<WorkflowRecord> workflowRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        workflowRecordLambdaQueryWrapper
+                .eq(WorkflowRecord::getNodeType, "用户任务")
+                .eq(WorkflowRecord::getNodeName, "分管领导意见")
+                .ne(WorkflowRecord::getCreateUserId, 0)
+                .orderByDesc(WorkflowRecord::getRecordTime)
+                .last("limit 1")
+        ;
+        WorkflowRecord workflowRecord = workflowRecordService.getOne(workflowRecordLambdaQueryWrapper);
+
+        if(ObjectUtils.isEmpty(workflowRecord)){
+            return new ArrayList<>();
+        }
+
+        // 根据当前分管领导获取其负责的部门
+        MPJLambdaWrapper<Post> postMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        postMPJLambdaWrapper
+                .select(Post::getId)
+                .innerJoin(UserPostRelation.class, UserPostRelation::getPostId, Post::getId)
+                .eq(UserPostRelation::getUserId, workflowRecord.getCreateUserId())
+                ;
+        List<Post> posts = postMapper.selectJoinList(Post.class, postMPJLambdaWrapper);
+        List<Long> postIds = posts.stream()
+                .map(Post::getId)
+                .collect(Collectors.toList());
+
+        if(CollectionUtils.isEmpty(postIds)){
+            return new ArrayList<>();
+        }
+
+        // 根据部门获取部门管理人员
+        MPJLambdaWrapper<XjrUser> xjrUserMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        xjrUserMPJLambdaWrapper
+                .selectAs(XjrUser::getId, NextReviewerListVo::getValue)
+                .selectAs(XjrUser::getName, NextReviewerListVo::getLabel)
+                .selectAs(Department::getName, NextReviewerListVo::getDeptName)
+                .innerJoin(UserPostRelation.class, UserPostRelation::getUserId, XjrUser::getId)
+                .innerJoin(Post.class, Post::getId, UserPostRelation::getPostId)
+                .leftJoin(Department.class, Department::getId, Post::getDeptId)
+                .in(Post::getParentId, postIds)
+                .and(wrapper ->
+                        wrapper
+                        .like(Post::getName, "主任")
+                        .or()
+                        .like(Post::getName, "书记")
+                )
+        ;
+        List<NextReviewerListVo> voList = xjrUserMapper.selectJoinList(NextReviewerListVo.class, xjrUserMPJLambdaWrapper);
+
+        for (NextReviewerListVo vo : voList){
+            if(ObjectUtils.isNotEmpty(vo.getDeptName())){
+                vo.setLabel(vo.getLabel() + "(" + vo.getDeptName() + ")");
+            }
+        }
+
+        return voList;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public List<NextReviewerListVo> nextExecutorList(String taskId) {
+        // 根据流程Id获取部门主任意见审核节点的审核人
+        LambdaQueryWrapper<WorkflowRecord> workflowRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        workflowRecordLambdaQueryWrapper
+                .eq(WorkflowRecord::getNodeType, "用户任务")
+                .eq(WorkflowRecord::getNodeName, "部门主任意见")
+                .ne(WorkflowRecord::getCreateUserId, 0)
+                .orderByDesc(WorkflowRecord::getRecordTime)
+                .last("limit 1")
+        ;
+        WorkflowRecord workflowRecord = workflowRecordService.getOne(workflowRecordLambdaQueryWrapper);
+
+        if(ObjectUtils.isEmpty(workflowRecord)){
+            return new ArrayList<>();
+        }
+
+        // 根据当前主任获取其负责的部门
+        MPJLambdaWrapper<Post> postMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        postMPJLambdaWrapper
+                .select(Post::getId)
+                .innerJoin(UserPostRelation.class, UserPostRelation::getPostId, Post::getId)
+                .eq(UserPostRelation::getUserId, workflowRecord.getCreateUserId())
+        ;
+        List<Post> posts = postMapper.selectJoinList(Post.class, postMPJLambdaWrapper);
+        List<Long> postIds = posts.stream()
+                .map(Post::getId)
+                .collect(Collectors.toList());
+
+        if(CollectionUtils.isEmpty(postIds)){
+            return new ArrayList<>();
+        }
+
+        // 根据部门获取部门管理人员
+        MPJLambdaWrapper<XjrUser> xjrUserMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        xjrUserMPJLambdaWrapper
+                .selectAs(XjrUser::getId, NextReviewerListVo::getValue)
+                .selectAs(XjrUser::getName, NextReviewerListVo::getLabel)
+                .selectAs(Department::getName, NextReviewerListVo::getDeptName)
+                .innerJoin(UserPostRelation.class, UserPostRelation::getUserId, XjrUser::getId)
+                .innerJoin(Post.class, Post::getId, UserPostRelation::getPostId)
+                .leftJoin(Department.class, Department::getId, Post::getDeptId)
+                .in(Post::getParentId, postIds)
+                .and(wrapper ->
+                        wrapper
+                                .like(Post::getName, "副主任")
+                                .or()
+                                .like(Post::getName, "副书记")
+                )
+        ;
+        List<NextReviewerListVo> voList = xjrUserMapper.selectJoinList(NextReviewerListVo.class, xjrUserMPJLambdaWrapper);
+
+        for (NextReviewerListVo vo : voList){
+            if(ObjectUtils.isNotEmpty(vo.getDeptName())){
+                vo.setLabel(vo.getLabel() + "(" + vo.getDeptName() + ")");
+            }
+        }
+
+        return voList;
+    }
 }

+ 16 - 0
src/main/java/com/xjrsoft/module/oa/vo/NextReviewerListVo.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.oa.vo;
+
+import lombok.Data;
+
+/**
+ * @description:获取当前行政收文流程下一节点审核人列表
+ * @author: phoenix
+ * @create: 2024/1/10 17:31
+ * @Version 1.0
+ */
+@Data
+public class NextReviewerListVo {
+    private Long value;
+    private String label;
+    private String deptName;
+}