mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	Compare commits
	
		
			26 Commits
		
	
	
		
			aab87d322c
			...
			v5.4.0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					d22b2a10df | ||
| 
						 | 
					957a4d1fcd | ||
| 
						 | 
					49ef8378fe | ||
| 
						 | 
					cd531f1d39 | ||
| 
						 | 
					92f73a4a72 | ||
| 
						 | 
					a4e3f7ea5e | ||
| 
						 | 
					26b4561a71 | ||
| 
						 | 
					dbe276a33b | ||
| 
						 | 
					4ab4e1685c | ||
| 
						 | 
					57dd6831d3 | ||
| 
						 | 
					8aa60abb1f | ||
| 
						 | 
					7a9f51fc7a | ||
| 
						 | 
					159e30c982 | ||
| 
						 | 
					7334d91d6b | ||
| 
						 | 
					95c01301f6 | ||
| 
						 | 
					296466fa13 | ||
| 
						 | 
					3c8d864b5f | ||
| 
						 | 
					ea50a57602 | ||
| 
						 | 
					7e14b98676 | ||
| 
						 | 
					015b406001 | ||
| 
						 | 
					098d3347a0 | ||
| 
						 | 
					08d4493994 | ||
| 
						 | 
					367d739e2d | ||
| 
						 | 
					d6688a367d | ||
| 
						 | 
					0b331796e2 | ||
| 
						 | 
					456620b638 | 
@@ -2,7 +2,7 @@
 | 
			
		||||
  <configuration default="false" name="ruoyi-monitor-admin" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
 | 
			
		||||
    <deployment type="dockerfile">
 | 
			
		||||
      <settings>
 | 
			
		||||
        <option name="imageTag" value="ruoyi/ruoyi-monitor-admin:5.3.1" />
 | 
			
		||||
        <option name="imageTag" value="ruoyi/ruoyi-monitor-admin:5.4.0" />
 | 
			
		||||
        <option name="buildOnly" value="true" />
 | 
			
		||||
        <option name="sourceFilePath" value="ruoyi-extend/ruoyi-monitor-admin/Dockerfile" />
 | 
			
		||||
      </settings>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
  <configuration default="false" name="ruoyi-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
 | 
			
		||||
    <deployment type="dockerfile">
 | 
			
		||||
      <settings>
 | 
			
		||||
        <option name="imageTag" value="ruoyi/ruoyi-server:5.3.1" />
 | 
			
		||||
        <option name="imageTag" value="ruoyi/ruoyi-server:5.4.0" />
 | 
			
		||||
        <option name="buildOnly" value="true" />
 | 
			
		||||
        <option name="sourceFilePath" value="ruoyi-admin/Dockerfile" />
 | 
			
		||||
      </settings>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
  <configuration default="false" name="ruoyi-snailjob-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
 | 
			
		||||
    <deployment type="dockerfile">
 | 
			
		||||
      <settings>
 | 
			
		||||
        <option name="imageTag" value="ruoyi/ruoyi-snailjob-server:5.3.1" />
 | 
			
		||||
        <option name="imageTag" value="ruoyi/ruoyi-snailjob-server:5.4.0" />
 | 
			
		||||
        <option name="buildOnly" value="true" />
 | 
			
		||||
        <option name="sourceFilePath" value="ruoyi-extend/ruoyi-snailjob-server/Dockerfile" />
 | 
			
		||||
      </settings>
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
[](https://gitee.com/dromara/RuoYi-Vue-Plus/blob/5.X/LICENSE)
 | 
			
		||||
[](https://www.jetbrains.com/?from=RuoYi-Vue-Plus)
 | 
			
		||||
<br>
 | 
			
		||||
[](https://gitee.com/dromara/RuoYi-Vue-Plus)
 | 
			
		||||
[](https://gitee.com/dromara/RuoYi-Vue-Plus)
 | 
			
		||||
[]()
 | 
			
		||||
[]()
 | 
			
		||||
[]()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								pom.xml
									
									
									
									
									
								
							@@ -13,7 +13,7 @@
 | 
			
		||||
    <description>Dromara RuoYi-Vue-Plus多租户管理系统</description>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <revision>5.3.1</revision>
 | 
			
		||||
        <revision>5.4.0</revision>
 | 
			
		||||
        <spring-boot.version>3.4.6</spring-boot.version>
 | 
			
		||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
			
		||||
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 | 
			
		||||
@@ -49,7 +49,7 @@
 | 
			
		||||
        <!-- 面向运行时的D-ORM依赖 -->
 | 
			
		||||
        <anyline.version>8.7.2-20250101</anyline.version>
 | 
			
		||||
        <!-- 工作流配置 -->
 | 
			
		||||
        <warm-flow.version>1.7.3-m1</warm-flow.version>
 | 
			
		||||
        <warm-flow.version>1.7.3</warm-flow.version>
 | 
			
		||||
 | 
			
		||||
        <!-- 插件版本 -->
 | 
			
		||||
        <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
    </description>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <revision>5.3.1</revision>
 | 
			
		||||
        <revision>5.4.0</revision>
 | 
			
		||||
    </properties>
 | 
			
		||||
 | 
			
		||||
    <dependencyManagement>
 | 
			
		||||
 
 | 
			
		||||
@@ -6,12 +6,12 @@ import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 流程创建任务监听
 | 
			
		||||
 * 流程任务监听
 | 
			
		||||
 *
 | 
			
		||||
 * @author may
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class ProcessCreateTaskEvent implements Serializable {
 | 
			
		||||
public class ProcessTaskEvent implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
@@ -4,10 +4,11 @@ import cn.dev33.satoken.stp.StpInterface;
 | 
			
		||||
import cn.hutool.core.util.ObjectUtil;
 | 
			
		||||
import org.dromara.common.core.domain.model.LoginUser;
 | 
			
		||||
import org.dromara.common.core.enums.UserType;
 | 
			
		||||
import org.dromara.common.core.exception.ServiceException;
 | 
			
		||||
import org.dromara.common.core.service.PermissionService;
 | 
			
		||||
import org.dromara.common.core.utils.SpringUtils;
 | 
			
		||||
import org.dromara.common.core.utils.StringUtils;
 | 
			
		||||
import org.dromara.common.satoken.utils.LoginHelper;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
@@ -19,9 +20,6 @@ import java.util.List;
 | 
			
		||||
 */
 | 
			
		||||
public class SaPermissionImpl implements StpInterface {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private PermissionService permissionService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取菜单权限列表
 | 
			
		||||
     */
 | 
			
		||||
@@ -29,8 +27,13 @@ public class SaPermissionImpl implements StpInterface {
 | 
			
		||||
    public List<String> getPermissionList(Object loginId, String loginType) {
 | 
			
		||||
        LoginUser loginUser = LoginHelper.getLoginUser();
 | 
			
		||||
        if (ObjectUtil.isNull(loginUser) || !loginUser.getLoginId().equals(loginId)) {
 | 
			
		||||
            PermissionService permissionService = getPermissionService();
 | 
			
		||||
            if (ObjectUtil.isNotNull(permissionService)) {
 | 
			
		||||
                List<String> list = StringUtils.splitList(loginId.toString(), ":");
 | 
			
		||||
                return new ArrayList<>(permissionService.getMenuPermission(Long.parseLong(list.get(1))));
 | 
			
		||||
            } else {
 | 
			
		||||
                throw new ServiceException("PermissionService 实现类不存在");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        UserType userType = UserType.getUserType(loginUser.getUserType());
 | 
			
		||||
        if (userType == UserType.APP_USER) {
 | 
			
		||||
@@ -47,8 +50,13 @@ public class SaPermissionImpl implements StpInterface {
 | 
			
		||||
    public List<String> getRoleList(Object loginId, String loginType) {
 | 
			
		||||
        LoginUser loginUser = LoginHelper.getLoginUser();
 | 
			
		||||
        if (ObjectUtil.isNull(loginUser) || !loginUser.getLoginId().equals(loginId)) {
 | 
			
		||||
            PermissionService permissionService = getPermissionService();
 | 
			
		||||
            if (ObjectUtil.isNotNull(permissionService)) {
 | 
			
		||||
                List<String> list = StringUtils.splitList(loginId.toString(), ":");
 | 
			
		||||
                return new ArrayList<>(permissionService.getRolePermission(Long.parseLong(list.get(1))));
 | 
			
		||||
            } else {
 | 
			
		||||
                throw new ServiceException("PermissionService 实现类不存在");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        UserType userType = UserType.getUserType(loginUser.getUserType());
 | 
			
		||||
        if (userType == UserType.APP_USER) {
 | 
			
		||||
@@ -57,4 +65,13 @@ public class SaPermissionImpl implements StpInterface {
 | 
			
		||||
        // SYS_USER 默认返回权限
 | 
			
		||||
        return new ArrayList<>(loginUser.getRolePermission());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private PermissionService getPermissionService() {
 | 
			
		||||
        try {
 | 
			
		||||
            return SpringUtils.getBean(PermissionService.class);
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -79,6 +79,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
 | 
			
		||||
            .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
 | 
			
		||||
            .in(StringUtils.isNotBlank(user.getUserIds()), "u.user_id", StringUtils.splitTo(user.getUserIds(), Convert::toLong))
 | 
			
		||||
            .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
 | 
			
		||||
            .like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName())
 | 
			
		||||
            .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
 | 
			
		||||
            .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
 | 
			
		||||
            .between(params.get("beginTime") != null && params.get("endTime") != null,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
package org.dromara.workflow.handler;
 | 
			
		||||
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.dromara.common.core.domain.event.ProcessCreateTaskEvent;
 | 
			
		||||
import org.dromara.common.core.domain.event.ProcessTaskEvent;
 | 
			
		||||
import org.dromara.common.core.domain.event.ProcessDeleteEvent;
 | 
			
		||||
import org.dromara.common.core.domain.event.ProcessEvent;
 | 
			
		||||
import org.dromara.common.core.utils.SpringUtils;
 | 
			
		||||
@@ -56,20 +56,20 @@ public class FlowProcessEventHandler {
 | 
			
		||||
     * @param instance   实例数据
 | 
			
		||||
     * @param taskId     任务id
 | 
			
		||||
     */
 | 
			
		||||
    public void processCreateTaskHandler(String flowCode, Instance instance, Long taskId) {
 | 
			
		||||
    public void processTaskHandler(String flowCode, Instance instance, Long taskId) {
 | 
			
		||||
        String tenantId = TenantHelper.getTenantId();
 | 
			
		||||
        log.info("【流程任务事件发布】租户ID: {}, 流程编码: {}, 业务ID: {}, 节点类型: {}, 节点编码: {}, 节点名称: {}, 任务ID: {}",
 | 
			
		||||
            tenantId, flowCode, instance.getBusinessId(), instance.getNodeType(), instance.getNodeCode(), instance.getNodeName(), taskId);
 | 
			
		||||
        ProcessCreateTaskEvent processCreateTaskEvent = new ProcessCreateTaskEvent();
 | 
			
		||||
        processCreateTaskEvent.setTenantId(tenantId);
 | 
			
		||||
        processCreateTaskEvent.setFlowCode(flowCode);
 | 
			
		||||
        processCreateTaskEvent.setBusinessId(instance.getBusinessId());
 | 
			
		||||
        processCreateTaskEvent.setNodeType(instance.getNodeType());
 | 
			
		||||
        processCreateTaskEvent.setNodeCode(instance.getNodeCode());
 | 
			
		||||
        processCreateTaskEvent.setNodeName(instance.getNodeName());
 | 
			
		||||
        processCreateTaskEvent.setTaskId(taskId);
 | 
			
		||||
        processCreateTaskEvent.setStatus(instance.getFlowStatus());
 | 
			
		||||
        SpringUtils.context().publishEvent(processCreateTaskEvent);
 | 
			
		||||
        ProcessTaskEvent processTaskEvent = new ProcessTaskEvent();
 | 
			
		||||
        processTaskEvent.setTenantId(tenantId);
 | 
			
		||||
        processTaskEvent.setFlowCode(flowCode);
 | 
			
		||||
        processTaskEvent.setBusinessId(instance.getBusinessId());
 | 
			
		||||
        processTaskEvent.setNodeType(instance.getNodeType());
 | 
			
		||||
        processTaskEvent.setNodeCode(instance.getNodeCode());
 | 
			
		||||
        processTaskEvent.setNodeName(instance.getNodeName());
 | 
			
		||||
        processTaskEvent.setTaskId(taskId);
 | 
			
		||||
        processTaskEvent.setStatus(instance.getFlowStatus());
 | 
			
		||||
        SpringUtils.context().publishEvent(processTaskEvent);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -54,13 +54,7 @@ public class WorkflowGlobalListener implements GlobalListener {
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void create(ListenerVariable listenerVariable) {
 | 
			
		||||
        Instance instance = listenerVariable.getInstance();
 | 
			
		||||
        Definition definition = listenerVariable.getDefinition();
 | 
			
		||||
        Task task = listenerVariable.getTask();
 | 
			
		||||
        if (task != null) {
 | 
			
		||||
            // 判断流程状态(发布审批中事件)
 | 
			
		||||
            flowProcessEventHandler.processCreateTaskHandler(definition.getFlowCode(), instance, task.getId());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -98,13 +92,6 @@ public class WorkflowGlobalListener implements GlobalListener {
 | 
			
		||||
                flowTask.setPermissionList(List.of(instance.getCreateBy()));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //申请人提交事件
 | 
			
		||||
        Boolean submit = MapUtil.getBool(variable, FlowConstant.SUBMIT);
 | 
			
		||||
        if (submit != null && submit) {
 | 
			
		||||
            flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, instance.getFlowStatus(), variable, true);
 | 
			
		||||
        }
 | 
			
		||||
        variable.remove(FlowConstant.SUBMIT);
 | 
			
		||||
        flowParams.variable(variable);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -116,8 +103,10 @@ public class WorkflowGlobalListener implements GlobalListener {
 | 
			
		||||
    public void finish(ListenerVariable listenerVariable) {
 | 
			
		||||
        Instance instance = listenerVariable.getInstance();
 | 
			
		||||
        Definition definition = listenerVariable.getDefinition();
 | 
			
		||||
        Task task = listenerVariable.getTask();
 | 
			
		||||
        Map<String, Object> params = new HashMap<>();
 | 
			
		||||
        FlowParams flowParams = listenerVariable.getFlowParams();
 | 
			
		||||
        Map<String, Object> variable = new HashMap<>();
 | 
			
		||||
        if (ObjectUtil.isNotNull(flowParams)) {
 | 
			
		||||
            // 历史任务扩展(通常为附件)
 | 
			
		||||
            params.put("hisTaskExt", flowParams.getHisTaskExt());
 | 
			
		||||
@@ -125,21 +114,29 @@ public class WorkflowGlobalListener implements GlobalListener {
 | 
			
		||||
            params.put("handler", flowParams.getHandler());
 | 
			
		||||
            // 办理意见
 | 
			
		||||
            params.put("message", flowParams.getMessage());
 | 
			
		||||
            variable = flowParams.getVariable();
 | 
			
		||||
        }
 | 
			
		||||
        //申请人提交事件
 | 
			
		||||
        Boolean submit = MapUtil.getBool(variable, FlowConstant.SUBMIT);
 | 
			
		||||
        if (submit != null && submit) {
 | 
			
		||||
            flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, instance.getFlowStatus(), variable, true);
 | 
			
		||||
        } else {
 | 
			
		||||
            // 判断流程状态(发布:撤销,退回,作废,终止,已完成事件)
 | 
			
		||||
            String status = determineFlowStatus(instance);
 | 
			
		||||
            if (StringUtils.isNotBlank(status)) {
 | 
			
		||||
                flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, status, params, false);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        //发布任务事件
 | 
			
		||||
        if (task != null) {
 | 
			
		||||
            flowProcessEventHandler.processTaskHandler(definition.getFlowCode(), instance, task.getId());
 | 
			
		||||
        }
 | 
			
		||||
        if (ObjectUtil.isNull(flowParams)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        Map<String, Object> variable = flowParams.getVariable();
 | 
			
		||||
        // 只有办理或者退回的时候才执行消息通知和抄送
 | 
			
		||||
        if (TaskStatusEnum.PASS.getStatus().equals(flowParams.getHisStatus())
 | 
			
		||||
            || TaskStatusEnum.BACK.getStatus().equals(flowParams.getHisStatus())) {
 | 
			
		||||
            Task task = listenerVariable.getTask();
 | 
			
		||||
            if (variable != null) {
 | 
			
		||||
                if (variable.containsKey(FlowConstant.FLOW_COPY_LIST)) {
 | 
			
		||||
                    List<FlowCopyBo> flowCopyList = (List<FlowCopyBo>) variable.get(FlowConstant.FLOW_COPY_LIST);
 | 
			
		||||
@@ -158,6 +155,7 @@ public class WorkflowGlobalListener implements GlobalListener {
 | 
			
		||||
                variableMap.remove(FlowConstant.FLOW_COPY_LIST);
 | 
			
		||||
                variableMap.remove(FlowConstant.MESSAGE_TYPE);
 | 
			
		||||
                variableMap.remove(FlowConstant.MESSAGE_NOTICE);
 | 
			
		||||
                variableMap.remove(FlowConstant.SUBMIT);
 | 
			
		||||
                instance.setVariable(FlowEngine.jsonConvert.objToStr(variableMap));
 | 
			
		||||
                insService.updateById(instance);
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 | 
			
		||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
			
		||||
import lombok.RequiredArgsConstructor;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.dromara.common.core.domain.event.ProcessCreateTaskEvent;
 | 
			
		||||
import org.dromara.common.core.domain.event.ProcessTaskEvent;
 | 
			
		||||
import org.dromara.common.core.domain.event.ProcessDeleteEvent;
 | 
			
		||||
import org.dromara.common.core.domain.event.ProcessEvent;
 | 
			
		||||
import org.dromara.common.core.enums.BusinessStatusEnum;
 | 
			
		||||
@@ -165,17 +165,17 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 执行任务创建监听
 | 
			
		||||
     * 示例:也可通过  @EventListener(condition = "#processCreateTaskEvent.flowCode=='leave1'")进行判断
 | 
			
		||||
     * 示例:也可通过  @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断
 | 
			
		||||
     * 在方法中判断流程节点key
 | 
			
		||||
     * if ("xxx".equals(processCreateTaskEvent.getNodeCode())) {
 | 
			
		||||
     * if ("xxx".equals(processTaskEvent.getNodeCode())) {
 | 
			
		||||
     * //执行业务逻辑
 | 
			
		||||
     * }
 | 
			
		||||
     *
 | 
			
		||||
     * @param processCreateTaskEvent 参数
 | 
			
		||||
     * @param processTaskEvent 参数
 | 
			
		||||
     */
 | 
			
		||||
    @EventListener(condition = "#processCreateTaskEvent.flowCode.startsWith('leave')")
 | 
			
		||||
    public void processCreateTaskHandler(ProcessCreateTaskEvent processCreateTaskEvent) {
 | 
			
		||||
        log.info("当前任务创建了{}", processCreateTaskEvent.toString());
 | 
			
		||||
    @EventListener(condition = "#processTaskEvent.flowCode.startsWith('leave')")
 | 
			
		||||
    public void processTaskHandler(ProcessTaskEvent processTaskEvent) {
 | 
			
		||||
        log.info("当前任务创建了{}", processTaskEvent.toString());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -65,7 +65,8 @@ services:
 | 
			
		||||
    network_mode: "host"
 | 
			
		||||
 | 
			
		||||
  minio:
 | 
			
		||||
    image: minio/minio:RELEASE.2025-05-24T17-08-30Z
 | 
			
		||||
    # minio 最后一个未阉割版本 不能再进行升级 在往上的版本功能被阉割
 | 
			
		||||
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
 | 
			
		||||
    container_name: minio
 | 
			
		||||
    ports:
 | 
			
		||||
      # api 端口
 | 
			
		||||
@@ -98,7 +99,7 @@ services:
 | 
			
		||||
    network_mode: "host"
 | 
			
		||||
 | 
			
		||||
  ruoyi-server1:
 | 
			
		||||
    image: ruoyi/ruoyi-server:5.3.1
 | 
			
		||||
    image: ruoyi/ruoyi-server:5.4.0
 | 
			
		||||
    container_name: ruoyi-server1
 | 
			
		||||
    environment:
 | 
			
		||||
      # 时区上海
 | 
			
		||||
@@ -114,7 +115,7 @@ services:
 | 
			
		||||
    network_mode: "host"
 | 
			
		||||
 | 
			
		||||
  ruoyi-server2:
 | 
			
		||||
    image: ruoyi/ruoyi-server:5.3.1
 | 
			
		||||
    image: ruoyi/ruoyi-server:5.4.0
 | 
			
		||||
    container_name: ruoyi-server2
 | 
			
		||||
    environment:
 | 
			
		||||
      # 时区上海
 | 
			
		||||
@@ -130,7 +131,7 @@ services:
 | 
			
		||||
    network_mode: "host"
 | 
			
		||||
 | 
			
		||||
  ruoyi-monitor-admin:
 | 
			
		||||
    image: ruoyi/ruoyi-monitor-admin:5.3.1
 | 
			
		||||
    image: ruoyi/ruoyi-monitor-admin:5.4.0
 | 
			
		||||
    container_name: ruoyi-monitor-admin
 | 
			
		||||
    environment:
 | 
			
		||||
      # 时区上海
 | 
			
		||||
@@ -142,7 +143,7 @@ services:
 | 
			
		||||
    network_mode: "host"
 | 
			
		||||
 | 
			
		||||
  ruoyi-snailjob-server:
 | 
			
		||||
    image: ruoyi/ruoyi-snailjob-server:5.3.1
 | 
			
		||||
    image: ruoyi/ruoyi-snailjob-server:5.4.0
 | 
			
		||||
    container_name: ruoyi-snailjob-server
 | 
			
		||||
    environment:
 | 
			
		||||
      # 时区上海
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user