Ver Fonte

优化审批操作

hubin há 1 ano atrás
pai
commit
54b2a539c4

+ 13 - 2
src/main/java/com/aizuda/boot/modules/flw/entity/FlwProcessApproval.java

@@ -1,6 +1,7 @@
 package com.aizuda.boot.modules.flw.entity;
 
 import com.aizuda.core.bean.BaseEntity;
+import com.aizuda.core.bean.SuperEntity;
 import com.aizuda.core.validation.Create;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -11,6 +12,8 @@ import jakarta.validation.constraints.Size;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 /**
  * 流程审批记录
  *
@@ -21,12 +24,20 @@ import lombok.Setter;
 @Setter
 @Schema(name = "FlwProcessApproval", description = "流程审批记录")
 @TableName("flw_process_approval")
-public class FlwProcessApproval extends BaseEntity {
+public class FlwProcessApproval extends SuperEntity {
 
 	@Schema(description = "租户ID")
-	@Size(max = 50)
 	private String tenantId;
 
+	@Schema(description = "创建ID")
+	private String createId;
+
+	@Schema(description = "创建人")
+	private String createBy;
+
+	@Schema(description = "创建时间")
+	private Date createTime;
+
 	@Schema(description = "流程实例ID")
 	@NotNull(groups = Create.class)
 	@PositiveOrZero

+ 1 - 1
src/main/java/com/aizuda/boot/modules/flw/entity/vo/TaskApprovalVO.java

@@ -34,7 +34,7 @@ public class TaskApprovalVO {
     private String formContent;
 
     @Schema(description = "表单权限配置")
-    private String formConfig;
+    private Object formConfig;
 
     @Schema(description = "流程审批记录列表")
     private List<FlwProcessApproval> processApprovals;

+ 3 - 3
src/main/java/com/aizuda/boot/modules/flw/service/IFlwProcessApprovalService.java

@@ -27,15 +27,15 @@ public interface IFlwProcessApprovalService extends IBaseService<FlwProcessAppro
     /**
      * 审批评论
      */
-    boolean comment(TaskApprovalDTO dto);
+    boolean comment(Long instanceId, TaskApprovalDTO dto);
 
     /**
      * 审批同意
      */
-    boolean consent(TaskApprovalDTO dto);
+    boolean consent(Long instanceId, TaskApprovalDTO dto);
 
     /**
      * 审批拒绝
      */
-    boolean rejection(TaskApprovalDTO dto);
+    boolean rejection(Long instanceId, TaskApprovalDTO dto);
 }

+ 14 - 6
src/main/java/com/aizuda/boot/modules/flw/service/impl/FlwProcessApprovalServiceImpl.java

@@ -33,18 +33,26 @@ public class FlwProcessApprovalServiceImpl extends BaseServiceImpl<FlwProcessApp
         return lambdaQuery().eq(FlwProcessApproval::getInstanceId, instanceId).list();
     }
 
+    private FlwProcessApproval getFlwProcessApproval(Long instanceId, Integer type, TaskApprovalDTO dto) {
+        FlwProcessApproval fpa = new FlwProcessApproval();
+        fpa.setInstanceId(instanceId);
+        fpa.setType(type);
+        fpa.setContent(dto.getContent());
+        return fpa;
+    }
+
     @Override
-    public boolean comment(TaskApprovalDTO dto) {
-        return false;
+    public boolean comment(Long instanceId, TaskApprovalDTO dto) {
+        return super.save(getFlwProcessApproval(instanceId, 0, dto));
     }
 
     @Override
-    public boolean consent(TaskApprovalDTO dto) {
-        return false;
+    public boolean consent(Long instanceId, TaskApprovalDTO dto) {
+        return super.save(getFlwProcessApproval(instanceId, 2, dto));
     }
 
     @Override
-    public boolean rejection(TaskApprovalDTO dto) {
-        return false;
+    public boolean rejection(Long instanceId, TaskApprovalDTO dto) {
+        return super.save(getFlwProcessApproval(instanceId, 3, dto));
     }
 }

+ 20 - 13
src/main/java/com/aizuda/boot/modules/flw/service/impl/ProcessTaskServiceImpl.java

@@ -1,5 +1,6 @@
 package com.aizuda.boot.modules.flw.service.impl;
 
+import com.aizuda.boot.modules.flw.FlowHelper;
 import com.aizuda.boot.modules.flw.entity.FlwProcessForm;
 import com.aizuda.boot.modules.flw.entity.dto.*;
 import com.aizuda.boot.modules.flw.entity.vo.*;
@@ -42,8 +43,6 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
     @Resource
     private FlowlongMapper flowlongMapper;
     @Resource
-    private FlwTaskMapper flwTaskMapper;
-    @Resource
     private FlwExtInstanceMapper extInstanceMapper;
     @Resource
     private FlowLongEngine flowLongEngine;
@@ -84,10 +83,7 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
 
     @Override
     public TaskApprovalVO approvalInfo(Long taskId) {
-        FlwTask flwTask = flwTaskMapper.selectById(taskId);
-        if (null != flwTask) {
-            return null;
-        }
+        FlwTask flwTask = this.getFlwTask(taskId);
         TaskApprovalVO vo = new TaskApprovalVO();
         vo.setTaskId(taskId);
         vo.setCreateId(flwTask.getCreateId());
@@ -106,7 +102,7 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
         if (null != extendConfig) {
             Object formConfig = extendConfig.get("formConfig");
             if (null != formConfig) {
-                vo.setFormConfig((String) formConfig);
+                vo.setFormConfig(formConfig);
             }
         }
         vo.setProcessApprovals(flwProcessApprovalService.listByInstanceId(flwTask.getInstanceId()));
@@ -207,22 +203,33 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
         return voList;
     }
 
+    private FlwTask getFlwTask(Long taskId) {
+        FlwTask flwTask = flowLongEngine.queryService().getTask(taskId);
+        ApiAssert.isEmpty(flwTask, "指定ID任务已执行完成");
+        return flwTask;
+    }
+
     @Override
     public boolean approvalComment(TaskApprovalDTO dto) {
         ApiAssert.isEmpty(dto.getContent(), "评论不能为空");
-
-        return flwProcessApprovalService.comment(dto);
+        FlwTask flwTask = this.getFlwTask(dto.getTaskId());
+        return flwProcessApprovalService.comment(flwTask.getInstanceId(), dto);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public boolean approvalConsent(TaskApprovalDTO dto) {
-
-        return flwProcessApprovalService.consent(dto);
+        FlwTask flwTask = this.getFlwTask(dto.getTaskId());
+        ApiAssert.fail(!flowLongEngine.executeTask(dto.getTaskId(), FlowHelper.getFlowCreator()), "执行任务审批失败");
+        return flwProcessApprovalService.consent(flwTask.getInstanceId(), dto);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public boolean approvalRejection(TaskApprovalDTO dto) {
-
-        return flwProcessApprovalService.rejection(dto);
+        FlwTask flwTask = this.getFlwTask(dto.getTaskId());
+        TaskService taskService = flowLongEngine.taskService();
+        ApiAssert.fail(taskService.rejectTask(flwTask, FlowHelper.getFlowCreator()).isEmpty(), "执行驳回任务失败");
+        return flwProcessApprovalService.rejection(flwTask.getInstanceId(), dto);
     }
 }

+ 6 - 1
src/main/resources/mapper/FlowlongMapper.xml

@@ -24,6 +24,7 @@
         <if test="dto.processName != null">
             AND p.process_name LIKE CONCAT(CONCAT('%',#{dto.processName}),'%')
         </if>
+        ORDER BY i.create_time DESC
     </select>
 
     <select id="selectPagePendingApproval" resultType="com.aizuda.boot.modules.flw.entity.vo.PendingApprovalTaskVO">
@@ -34,6 +35,7 @@
         <if test="dto.processName != null">
             AND p.process_name LIKE CONCAT(CONCAT('%',#{dto.processName}),'%')
         </if>
+        ORDER BY i.create_time DESC
     </select>
 
     <select id="selectPageMyApplication" resultType="com.aizuda.boot.modules.flw.entity.vo.ProcessTaskVO">
@@ -43,15 +45,17 @@
         <if test="dto.processName != null">
             AND p.process_name LIKE CONCAT(CONCAT('%',#{dto.processName}),'%')
         </if>
+        ORDER BY i.create_time DESC
     </select>
 
     <select id="selectPageMyReceived" resultType="com.aizuda.boot.modules.flw.entity.vo.ProcessTaskVO">
         SELECT i.process_id,p.process_name,i.current_node,i.id AS instance_id,i.instance_state,i.create_id,i.create_by,i.create_time,i.expire_time,i.end_time,i.duration
         FROM flw_his_instance i LEFT JOIN flw_process p ON i.process_id=p.id JOIN flw_his_task t ON i.id=t.instance_id JOIN flw_his_task_actor a ON t.id=a.task_id
-        WHERE t.task_type=4 AND a.actor_id=#{dto.createId}
+        WHERE t.task_type=2 AND a.actor_id=#{dto.createId}
         <if test="dto.processName != null">
             AND p.process_name LIKE CONCAT(CONCAT('%',#{dto.processName}),'%')
         </if>
+        ORDER BY i.create_time DESC
     </select>
 
     <select id="selectPageApproved" resultType="com.aizuda.boot.modules.flw.entity.vo.ProcessTaskVO">
@@ -61,6 +65,7 @@
         <if test="dto.processName != null">
             AND p.process_name LIKE CONCAT(CONCAT('%',#{dto.processName}),'%')
         </if>
+        ORDER BY i.create_time DESC
     </select>
 
     <select id="selectListHisTaskByInstanceId" resultType="com.aizuda.boot.modules.flw.entity.vo.FlwHisTaskVO">