Jelajahi Sumber

学生详情信息
流程流转记录打印时添加发起节点
流程进度条

大数据与最优化研究所 1 tahun lalu
induk
melakukan
2cf4c4a5c0

+ 2 - 2
src/main/java/com/xjrsoft/module/workflow/listener/ExecutionDelegate.java

@@ -1437,7 +1437,7 @@ public class ExecutionDelegate implements ExecutionListener {
         startOperateRecord.setSchemaId(workflowSchema.getId());
         startOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
         startOperateRecord.setRecordTime(LocalDateTime.now());
-        startOperateRecord.setUsageScenario(2);
+        startOperateRecord.setUsageScenario(1);
         startOperateRecord.setOperateInfo(message);
 
         xjrWorkflowOperateRecordService.save(startOperateRecord);
@@ -1475,7 +1475,7 @@ public class ExecutionDelegate implements ExecutionListener {
         startOperateRecord.setSchemaId(workflowSchema.getId());
         startOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
         startOperateRecord.setRecordTime(LocalDateTime.now());
-        startOperateRecord.setUsageScenario(2);
+        startOperateRecord.setUsageScenario(1);
         startOperateRecord.setOperateInfo(message);
 
         xjrWorkflowOperateRecordService.save(startOperateRecord);

+ 34 - 3
src/main/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImpl.java

@@ -40,6 +40,7 @@ import com.xjrsoft.module.magicapi.vo.MagicApiInfoVo;
 import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.entity.UserRoleRelation;
 import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.student.entity.BaseStudentAssessmentCategory;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.entity.Stamp;
 import com.xjrsoft.module.system.service.IFileService;
@@ -3175,9 +3176,19 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                         .leftJoin(WorkflowSchema.class, WorkflowSchema::getId, WorkflowCirculated::getSchemaId));
 
         String[] taskIds = page.getRecords().stream().map(CirculatedTaskPageVo::getTaskId).toArray(String[]::new);
+        List<String> processIds = page.getRecords().stream()
+                .map(CirculatedTaskPageVo::getProcessId) // 使用map方法将对象映射为属性
+                .collect(Collectors.toList());
         List<Task> list = taskService.createTaskQuery().taskIdIn(taskIds).list();
+        QueryWrapper<WorkflowExtra> workflowExtraQueryWrapper = new QueryWrapper<>();
+        workflowExtraQueryWrapper
+                .select("t.process_id as process_id, MAX(t.current_progress) as current_progress")
+                .in("t.process_id", processIds)
+                .groupBy("t.process_id");
+        List<WorkflowExtra> workflowExtraList = xjrWorkflowExtraMapper.selectList(workflowExtraQueryWrapper);
         for (CirculatedTaskPageVo record : page.getRecords()) {
             Optional<Task> thisTask = list.stream().filter(x -> x.getId().equals(record.getTaskId())).findFirst();
+            Optional<WorkflowExtra> thisWorkflowExtra = workflowExtraList.stream().filter(x -> x.getProcessId().equals(record.getProcessId())).findFirst();
             if (thisTask.isPresent()) {
                 if (thisTask.get().isSuspended()) {
                     record.setStatus(2);
@@ -3188,8 +3199,8 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                 record.setStatus(1);
             }
 
+            thisWorkflowExtra.ifPresent(workflowExtra -> record.setCurrentProgress(workflowExtra.getCurrentProgress()));
         }
-
         return ConventPage.getPageOutput(page);
     }
 
@@ -4480,17 +4491,37 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
 
                 addProcessRecord(task, schemaId, message, record);
 
+                deleteAutoAgreePrepareNodeInRecord(task, schemaId, "【" + approveName + "】准备审批");
                 // 如果还有用户任务  则递归调用
                 invokeAutoAgree(processInstanceId, schemaId, workflowSchemaConfig, list);
             } else {
                 String message = "【" + approveName + "】【自动同意】 审批, 审批意见为:“【" + allOpinions + "】”,由【" + task.getName() + "】流转到 结束节点";
 
                 addProcessRecord(task, schemaId, message, record);
+                deleteAutoAgreePrepareNodeInRecord(task, schemaId, "【" + approveName + "】准备审批");
             }
         }
 
     }
 
+    /**
+     * 删除发起节点自动审批的准备审批记录
+     * @param task
+     * @param schemaId
+     * @param message
+     */
+    private void deleteAutoAgreePrepareNodeInRecord(Task task, Long schemaId, String message){
+        IXjrWorkflowOperateRecordService xjrWorkflowOperateRecordService = SpringUtil.getBean(IXjrWorkflowOperateRecordService.class);
+
+        QueryWrapper<XjrWorkflowOperateRecord> wrapper = new QueryWrapper<XjrWorkflowOperateRecord>()
+                .eq("node_id", task.getId())
+                .eq("process_id", task.getProcessInstanceId())
+                .eq("schema_id", schemaId)
+                .eq("operate_info", message);
+
+        xjrWorkflowOperateRecordService.remove(wrapper);
+    }
+
 
     /**
      * 判断是否由需要指定审批人 老版
@@ -4847,7 +4878,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
         xjrWorkflowOperateRecord.setSchemaId(workflowSchema.getId());
         xjrWorkflowOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
         xjrWorkflowOperateRecord.setRecordTime(LocalDateTime.now());
-        xjrWorkflowOperateRecord.setUsageScenario(2);
+        xjrWorkflowOperateRecord.setUsageScenario(1);
         xjrWorkflowOperateRecord.setOperateInfo("【" + user.getName() + "】 创建流程");
 
         xjrWorkflowOperateRecordMapper.insert(xjrWorkflowOperateRecord);
@@ -5469,7 +5500,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                     setComment(p.getComment());
                     setStartTime(p.getStartTime());
                     setCirculateMessage(p.getCirculateMessage());
-                    setNodeName("准备审批");
+                    setNodeName(p.getNodeName());
                     setApproveResult("准备审批");
                     Pattern pattern = Pattern.compile("【(.*?)】");
                     Matcher matcher = pattern.matcher(p.getComment());

+ 2 - 2
src/main/resources/mapper/student/BaseStudentSchoolRollMapper.xml

@@ -8,7 +8,7 @@
         t2.name AS student_name,
         t1.student_id,
         t2.mobile AS phone,
-        t2.mobile AS teacher_phone,t5.name as teacher_name,
+        t5.mobile AS teacher_phone,t5.name as teacher_name,
         t4.name AS class_name,
         t6.mobile AS guardian_phone
         FROM base_student t1
@@ -42,7 +42,7 @@
         </if>
     </select>
     <select id="getInfoById" resultType="com.xjrsoft.module.student.vo.BaseStudentInfoDetailVo">
-        SELECT t2.id,t2.name AS student_name,t1.student_id,CONCAT(t5.name, ' ', t5.mobile) AS teacher_name, t5.mobile AS teacher_phone,t4.name AS class_name,
+        SELECT t2.id,t2.name AS student_name,t1.student_id,t5.name AS teacher_name, t5.mobile AS teacher_phone,t4.name AS class_name,
         (SELECT mobile FROM base_student_family_member WHERE delete_mark = 0 AND user_id = t2.id AND is_guardian = 1) AS guardian_phone,
         t8.name AS archives_status,t7.name AS stduy_status,t9.name AS roll_modality,t2.birth_date, t2.gender,t2.avatar,
         t6.name AS nation,t10.name AS major_set_name,t3.archives_status as archivesStatusCode,t3.stduy_status as stduyStatusCode,t3.roll_modality as rollModalityCode

+ 18 - 3
src/main/resources/mapper/workflow/WorkflowExtraMapper.xml

@@ -4,11 +4,26 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.xjrsoft.module.workflow.mapper.XjrWorkflowExtraMapper">
     <select id="myApproveRecord" parameterType="com.xjrsoft.module.workflow.dto.MyExaminePageDto" resultType="com.xjrsoft.module.workflow.vo.PendingTaskVo">
-        SELECT id, serial_number, process_name, task_id, task_name, task_key, current_progress, schema_id, schema_name, process_id,
-        start_user_id, start_user_name, start_time, end_time, launch_time, approve_user_ids FROM xjr_workflow_extra
+        SELECT t.id,
+        t.serial_number,
+        t.process_name,
+        t.task_id,
+        t.task_name,
+        t.task_key,
+        (select MAX(t1.current_progress) FROM xjr_workflow_extra t1 where t1.process_id = t.process_id) as current_progress,
+        t.schema_id,
+        t.schema_name,
+        t.process_id,
+        t.start_user_id,
+        t.start_user_name,
+        t.start_time,
+        t.end_time,
+        t.launch_time,
+        t.approve_user_ids
+        FROM xjr_workflow_extra t
         WHERE 1 = 1
         <if test="dto.taskIds != null and dto.taskIds.size() > 0">
-            and task_id in
+            and t.task_id in
             <foreach item="taskId" index="index" collection="dto.taskIds" open="(" close=")" separator=",">
                 #{taskId}
             </foreach>