Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

Lijingyang před 1 měsícem
rodič
revize
3ed974d050
39 změnil soubory, kde provedl 900 přidání a 314 odebrání
  1. 27 0
      ruoyi-auth/auth-Dockerfile
  2. 2 1
      ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlatformDataScopeInterceptor.java
  3. 3 0
      ruoyi-common/ruoyi-common-satoken/src/main/resources/common-satoken.yml
  4. 8 4
      ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/config/SecurityConfiguration.java
  5. 1 1
      ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java
  6. 26 0
      ruoyi-gateway/gateway-Dockerfile
  7. 1 1
      ruoyi-gateway/src/main/java/org/dromara/gateway/filter/WebCorsFilter.java
  8. 27 0
      ruoyi-modules/ruoyi-bill/Dockerfile
  9. 27 0
      ruoyi-modules/ruoyi-bill/bill-Dockerfile
  10. 27 0
      ruoyi-modules/ruoyi-customer/customer-Dockerfile
  11. 2 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/dubbo/RemoteCustomerServiceImpl.java
  12. 27 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerContactServiceImpl.java
  13. 30 3
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerInfoServiceImpl.java
  14. 28 0
      ruoyi-modules/ruoyi-external/external-Dockerfile
  15. 20 0
      ruoyi-modules/ruoyi-gen/gen-Dockerfile
  16. 30 0
      ruoyi-modules/ruoyi-job/job-Dockerfile
  17. 26 0
      ruoyi-modules/ruoyi-mall/Dockerfile
  18. 26 0
      ruoyi-modules/ruoyi-mall/mall-Dockerfile
  19. 27 0
      ruoyi-modules/ruoyi-order/order-Dockerfile
  20. 8 0
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/controller/pc/PcOrderController.java
  21. 25 0
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/vo/OrderCountVo.java
  22. 11 3
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/mapper/OrderMainMapper.java
  23. 4 7
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/IOrderMainService.java
  24. 12 6
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderMainServiceImpl.java
  25. 9 0
      ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMainMapper.xml
  26. 27 0
      ruoyi-modules/ruoyi-product/product-Dockerfile
  27. 14 22
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/pc/DiyProductController.java
  28. 1 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/PcProductBo.java
  29. 9 3
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseServiceImpl.java
  30. 27 0
      ruoyi-modules/ruoyi-resource/resource-Dockerfile
  31. 1 1
      ruoyi-modules/ruoyi-system/Dockerfile
  32. 38 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/pc/DiySystemController.java
  33. 21 4
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/pc/PcSysUserController.java
  34. 3 2
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java
  35. 27 0
      ruoyi-modules/ruoyi-workflow/Dockerfile.server
  36. 22 0
      ruoyi-visual/ruoyi-monitor/monitor-Dockerfile
  37. 61 0
      script/docker/build-images.sh
  38. 185 0
      script/docker/docker-compose-app.yml
  39. 30 254
      script/docker/docker-compose.yml

+ 27 - 0
ruoyi-auth/auth-Dockerfile

@@ -0,0 +1,27 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/auth/logs  \
+    /ruoyi/auth/temp  \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/auth
+
+ENV SERVER_PORT=9210 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-auth.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-auth \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

+ 2 - 1
ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlatformDataScopeInterceptor.java

@@ -101,7 +101,8 @@ public class PlatformDataScopeInterceptor implements Interceptor {
         "order_return_item",
         "customer_business_info",
         "mall_page_link",
-        "mall_page_category"
+        "mall_page_category",
+        "sys_user"
 
 
         // 注意:前缀匹配需特殊处理(如 qrtz_),见 isIgnoreTable 方法

+ 3 - 0
ruoyi-common/ruoyi-common-satoken/src/main/resources/common-satoken.yml

@@ -11,8 +11,11 @@ sa-token:
   is-read-cookie: true
   # token前缀
   token-prefix: "Bearer"
+  # cookie自动添加前缀
+  cookie-auto-fill-prefix: true
   cookie:
     domain: .xiaoluwebsite.xyz
+#    domain: .yoe365.com
     path: /
     secure: true
     httpOnly: false

+ 8 - 4
ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/config/SecurityConfiguration.java

@@ -39,11 +39,15 @@ public class SecurityConfiguration implements WebMvcConfigurer {
             .addInclude("/**")
             .addExclude("/actuator", "/actuator/**")
             .setAuth(obj -> {
-                if (SaManager.getConfig().getCheckSameToken()) {
-                    SaSameUtil.checkCurrentRequestToken();
-                }
+//                if (SaManager.getConfig().getCheckSameToken()) {
+//                    String token = SaSameUtil.getToken();
+//                    System.out.println("token: " + token);
+//                    SaSameUtil.checkCurrentRequestToken();
+//                }
             })
-            .setError(e -> SaResult.error("认证失败,无法访问系统资源").setCode(HttpStatus.UNAUTHORIZED));
+            .setError(e ->
+                SaResult.error("认证失败,无法访问系统资源").setCode(HttpStatus.UNAUTHORIZED)
+            );
     }
 
     /**

+ 1 - 1
ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java

@@ -72,7 +72,7 @@ public class GlobalExceptionHandler {
     @ExceptionHandler(SseException.class)
     public String handleNotLoginException(SseException e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
-        log.debug("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, e.getMessage());
+        log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, e.getMessage());
         return JsonUtils.toJsonString(R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源"));
     }
 

+ 26 - 0
ruoyi-gateway/gateway-Dockerfile

@@ -0,0 +1,26 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/gateway/logs  \
+    /ruoyi/gateway/temp  \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/gateway
+
+ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-gateway.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-gateway \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar

+ 1 - 1
ruoyi-gateway/src/main/java/org/dromara/gateway/filter/WebCorsFilter.java

@@ -27,7 +27,7 @@ public class WebCorsFilter implements WebFilter, Ordered {
      */
     private static final String ALLOWED_HEADERS =
         "X-Requested-With, Content-Language, Content-Type, " +
-        "Authorization, clientid, credential, X-XSRF-TOKEN, " +
+        "Authorization, clientid, credential, X-XSRF-TOKEN, X-Platform-Code," +
         "isToken, token, Admin-Token, App-Token, Encrypt-Key, isEncrypt";
 
     /**

+ 27 - 0
ruoyi-modules/ruoyi-bill/Dockerfile

@@ -0,0 +1,27 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/bill/logs \
+    /ruoyi/bill/temp \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/bill
+
+ENV SERVER_PORT=9318 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-bill.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-bill \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

+ 27 - 0
ruoyi-modules/ruoyi-bill/bill-Dockerfile

@@ -0,0 +1,27 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/bill/logs \
+    /ruoyi/bill/temp \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/bill
+
+ENV SERVER_PORT=9318 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-bill.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-bill \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

+ 27 - 0
ruoyi-modules/ruoyi-customer/customer-Dockerfile

@@ -0,0 +1,27 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/customer/logs \
+    /ruoyi/customer/temp \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/customer
+
+ENV SERVER_PORT=9212 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-customer.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-customer \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

+ 2 - 2
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/dubbo/RemoteCustomerServiceImpl.java

@@ -72,7 +72,7 @@ public class RemoteCustomerServiceImpl implements RemoteCustomerService {
     @Override
     public Long selectCustomerIdByUserId(Long userId) {
         CustomerContact one = customerContactService.getOne(Wrappers.lambdaQuery(CustomerContact.class)
-            .eq(CustomerContact::getId, userId)
+            .eq(CustomerContact::getUserId, userId)
             .last("limit 1")
         );
         if (one != null) {
@@ -82,7 +82,7 @@ public class RemoteCustomerServiceImpl implements RemoteCustomerService {
     }
 
     @Override
-    public CustomerInfoDTO addReceiver(String name , String email) {
+    public CustomerInfoDTO addReceiver(String name, String email) {
         CustomerInfo customerInfo = new CustomerInfo();
         customerInfo.setCustomerName(name);
         customerInfo.setEmail(email);

+ 27 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerContactServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.customer.service.impl;
 
+import cn.hutool.crypto.digest.BCrypt;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -10,11 +11,13 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.common.core.enums.IsDefault;
 import org.dromara.common.core.enums.SysPlatformYesNo;
+import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.redis.utils.SequenceUtils;
+import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.customer.domain.CustomerContact;
 import org.dromara.customer.domain.CustomerShippingAddress;
 import org.dromara.customer.domain.bo.CustomerContactBo;
@@ -26,6 +29,8 @@ import org.dromara.customer.mapper.CustomerContactMapper;
 import org.dromara.customer.mapper.CustomerInfoMapper;
 import org.dromara.customer.service.ICustomerContactService;
 import org.dromara.system.api.RemoteDeptService;
+import org.dromara.system.api.RemoteUserService;
+import org.dromara.system.api.domain.bo.RemoteUserBo;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -49,6 +54,9 @@ public class CustomerContactServiceImpl extends ServiceImpl<CustomerContactMappe
     @DubboReference
     private RemoteDeptService remoteDeptService;
 
+    @DubboReference
+    private RemoteUserService remoteUserService;
+
     private final CustomerContactMapper baseMapper;
 
     private final CustomerInfoMapper customerInfoMapper;
@@ -150,12 +158,31 @@ public class CustomerContactServiceImpl extends ServiceImpl<CustomerContactMappe
             }
         }
 
+        // 1. 准备创建系统用户的数据
+        RemoteUserBo remoteUserBo = new RemoteUserBo();
+        remoteUserBo.setNickName(bo.getContactName());
+        remoteUserBo.setDeptId(bo.getDeptId());
+        remoteUserBo.setUserName(bo.getPhone());// 用手机号做账号
+        String defaultPassword = "123456";
+        remoteUserBo.setPassword(BCrypt.hashpw(defaultPassword));
+        remoteUserBo.setUserSonType("3");
+        remoteUserBo.setTenantId(LoginHelper.getTenantId());
+
+        // 2. 调用远程服务创建用户
+        Long userId = remoteUserService.addUser(remoteUserBo);
+
+        if (userId == null) {
+            throw new ServiceException("创建系统用户失败:" + userId);
+        }
+
+
         // 2. 生成联系人编号
         String seqId = SequenceUtils.nextPaddedIdStr(CONTACT_NO_KEY, Duration.ofDays(3650), 3);
         String contactNo = customerNo + seqId;
 
         CustomerContact add = MapstructUtils.convert(bo, CustomerContact.class);
         add.setContactNo(contactNo);
+        add.setUserId(userId);
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {

+ 30 - 3
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerInfoServiceImpl.java

@@ -32,6 +32,7 @@ import org.dromara.customer.utils.qcc.domain.CompanyInfoResponse;
 import org.dromara.system.api.*;
 import org.dromara.system.api.domain.bo.RemoteUserBo;
 import org.dromara.system.api.domain.vo.RemoteDeptVo;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -944,15 +945,41 @@ public class CustomerInfoServiceImpl extends ServiceImpl<CustomerInfoMapper, Cus
         //构建客户信息实体
         CustomerInfo customerEntity = new CustomerInfo();
         customerEntity.setCustomerName(bo.getCustomerName());
-        customerEntity.setCustomerNo(SequenceUtils.nextPaddedIdStr(CUSTOMER_NO_KEY, Duration.ofDays(3650), 6));
         customerEntity.setBusinessCustomerName(companyInfo.getResult().getName());
         customerEntity.setShortName(companyInfo.getResult().getName());
         customerEntity.setInvoiceTop(companyInfo.getResult().getName());
         customerEntity.setStatus("0"); // 正常状态
         customerEntity.setDelFlag("0"); // 未删除
+        boolean insertSuccess = false;
+        int maxRetries = 3;
+
+// 1. 执行带重试的客户插入逻辑
+        for (int i = 0; i < maxRetries; i++) {
+            try {
+                // 生成编号 (注意:每次重试都要重新生成,避免使用冲突的号码)
+                String customerNo = SequenceUtils.nextPaddedIdStr(CUSTOMER_NO_KEY, Duration.ofDays(3650), 6);
+                customerEntity.setCustomerNo(customerNo);
+
+                // 执行插入
+                if (baseMapper.insert(customerEntity) > 0) {
+                    insertSuccess = true;
+                    break; // 【关键】插入成功,跳出循环,继续执行后续业务,而不是 return
+                } else {
+                    // 如果 insert 返回 0 (虽然通常主键冲突会抛异常,但以防万一)
+                    throw new ServiceException("客户信息新增失败 (影响行数为0)");
+                }
+            } catch (DuplicateKeyException e) {
+                if (i == maxRetries - 1) {
+                    log.error("客户编号生成冲突,重试 {} 次后仍失败", maxRetries, e);
+                    throw new ServiceException("客户编号生成冲突,请稍后重试");
+                }
+                log.warn("客户编号 {} 冲突,正在重试第 {} 次", customerEntity.getCustomerNo(), i + 1);
+                // 循环继续,下一次迭代会重新生成 customerNo
+            }
+        }
 
-        // 设置其他工商信息
-        if (baseMapper.insert(customerEntity) <= 0) {
+        if (!insertSuccess) {
+            // 理论上如果没抛异常且没成功,应该到这里,作为兜底
             throw new ServiceException("客户信息新增失败");
         }
 

+ 28 - 0
ruoyi-modules/ruoyi-external/external-Dockerfile

@@ -0,0 +1,28 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/external/logs \
+    /ruoyi/external/temp \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/external
+
+ENV SERVER_PORT=9618 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-external.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-external \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+
+

+ 20 - 0
ruoyi-modules/ruoyi-gen/gen-Dockerfile

@@ -0,0 +1,20 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/gen/logs
+
+WORKDIR /ruoyi/gen
+
+ENV SERVER_PORT=9202 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-gen.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} ${JAVA_OPTS} -jar app.jar

+ 30 - 0
ruoyi-modules/ruoyi-job/job-Dockerfile

@@ -0,0 +1,30 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/job/logs \
+    /ruoyi/job/temp \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/job
+
+ENV SERVER_PORT=9203 SNAIL_PORT=29203 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+# 暴露 snail job 客户端端口 用于定时任务调度中心通信
+EXPOSE ${SNAIL_PORT}
+
+ADD ./target/ruoyi-job.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           -Dsnail-job.port=${SNAIL_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-job \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

+ 26 - 0
ruoyi-modules/ruoyi-mall/Dockerfile

@@ -0,0 +1,26 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/mall/logs \
+    /ruoyi/mall/temp \
+    /ruoyi/skywalking/agent
+WORKDIR /ruoyi/mall
+
+ENV SERVER_PORT=9216 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-mall.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-mall \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

+ 26 - 0
ruoyi-modules/ruoyi-mall/mall-Dockerfile

@@ -0,0 +1,26 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/mall/logs \
+    /ruoyi/mall/temp \
+    /ruoyi/skywalking/agent
+WORKDIR /ruoyi/mall
+
+ENV SERVER_PORT=9216 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-mall.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-mall \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

+ 27 - 0
ruoyi-modules/ruoyi-order/order-Dockerfile

@@ -0,0 +1,27 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/order/logs \
+    /ruoyi/order/temp \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/order
+
+ENV SERVER_PORT=9213 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-order.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-order \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

+ 8 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/controller/pc/PcOrderController.java

@@ -19,6 +19,7 @@ import org.dromara.customer.api.domain.CustomerApiVo;
 import org.dromara.order.domain.OrderCustomerFlowLink;
 import org.dromara.order.domain.bo.*;
 import org.dromara.order.domain.dto.OrderPayDto;
+import org.dromara.order.domain.vo.OrderCountVo;
 import org.dromara.order.domain.vo.OrderMainVo;
 import org.dromara.order.domain.vo.OrderProductVo;
 import org.dromara.order.domain.vo.OrderStatusStats;
@@ -84,6 +85,13 @@ public class PcOrderController extends BaseController {
         return orderMainService.queryPageList(bo, pageQuery);
     }
 
+    @GetMapping("/countOrder")
+    public OrderCountVo countOrder() {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getLoginUser().getCustomerId();
+        return orderMainService.countOrderNum(customerId);
+    }
+
     /**
      * 查询当前企业的订单状态统计
      * 返回各状态订单数量

+ 25 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/vo/OrderCountVo.java

@@ -0,0 +1,25 @@
+package org.dromara.order.domain.vo;
+
+import lombok.Data;
+
+/**
+ * 订单统计 VO
+ */
+@Data
+public class OrderCountVo {
+
+    /**
+     * 待付款订单数量 (orderStatus = '0')
+     */
+    private Integer pendingPaymentCount;
+
+    /**
+     * 待发货订单数量 (orderStatus = '2')
+     */
+    private Integer pendingShipmentCount;
+
+    /**
+     * 待收货订单数量 (orderStatus = '4')
+     */
+    private Integer pendingReceiptCount;
+}

+ 11 - 3
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/mapper/OrderMainMapper.java

@@ -2,14 +2,13 @@ package org.dromara.order.mapper;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.order.domain.OrderMain;
+import org.dromara.order.domain.vo.OrderCountVo;
 import org.dromara.order.domain.vo.OrderEvaluationListVo;
 import org.dromara.order.domain.vo.OrderMainVo;
-import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.order.domain.vo.OrderStatusStats;
 
-import java.util.List;
-
 /**
  * 订单主信息Mapper接口
  *
@@ -20,6 +19,15 @@ public interface OrderMainMapper extends BaseMapperPlus<OrderMain, OrderMainVo>
 
     OrderStatusStats selectOrderStatusCounts();
 
+
+    /**
+     * 统计订单数量
+     *
+     * @param customerId 客户ID
+     * @return 订单统计VO
+     */
+    OrderCountVo countOrderNum(@Param("customerId") Long customerId);
+
     /**
      * 查询客户的所有已完成订单(主信息 + 评价状态)
      */

+ 4 - 7
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/IOrderMainService.java

@@ -1,18 +1,13 @@
 package org.dromara.order.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.common.core.exception.api.ZhongcheException;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
-import org.dromara.common.core.exception.api.ZhongcheException;
 import org.dromara.order.domain.OrderMain;
-import org.dromara.order.domain.OrderProduct;
 import org.dromara.order.domain.bo.OrderMainBo;
 import org.dromara.order.domain.bo.OrderProductBo;
-import org.dromara.order.domain.vo.OrderDeliverVo;
-import org.dromara.order.domain.vo.OrderMainVo;
-
-import org.dromara.order.domain.vo.OrderProductVo;
-import org.dromara.order.domain.vo.OrderStatusStats;
+import org.dromara.order.domain.vo.*;
 import org.dromara.order.utils.kd100.domain.TrackData;
 
 import java.util.Collection;
@@ -45,6 +40,8 @@ public interface IOrderMainService extends IService<OrderMain> {
      */
     TableDataInfo<OrderMainVo> queryPageList(OrderMainBo bo, PageQuery pageQuery);
 
+    OrderCountVo countOrderNum(Long customerId);
+
     /**
      * 查询符合条件的订单主信息列表
      *

+ 12 - 6
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderMainServiceImpl.java

@@ -22,13 +22,14 @@ import org.dromara.common.redis.utils.SequenceUtils;
 import org.dromara.customer.api.RemoteCustomerSalesService;
 import org.dromara.customer.api.RemoteCustomerService;
 import org.dromara.customer.api.domain.vo.RemoteCustomerSalesVo;
-import org.dromara.order.domain.OrderMain;
-import org.dromara.order.domain.OrderProduct;
 import org.dromara.external.api.zhongche.RemoteZhongChePullService;
 import org.dromara.external.api.zhongche.domain.bo.OrderConfirmBo;
 import org.dromara.external.api.zhongche.domain.bo.OrderRejectBo;
 import org.dromara.external.api.zhongche.domain.vo.GoodsUpdateVo;
-import org.dromara.order.domain.*;
+import org.dromara.order.domain.OrderDeliver;
+import org.dromara.order.domain.OrderMain;
+import org.dromara.order.domain.OrderMainCrrcExt;
+import org.dromara.order.domain.OrderProduct;
 import org.dromara.order.domain.bo.OrderMainBo;
 import org.dromara.order.domain.bo.OrderProductBo;
 import org.dromara.order.domain.dto.AssignmentStatsDto;
@@ -169,6 +170,11 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
         return TableDataInfo.build(result);
     }
 
+    @Override
+    public OrderCountVo countOrderNum(Long customerId) {
+        return baseMapper.countOrderNum(customerId);
+    }
+
     @Override
     public TableDataInfo<OrderProductVo> getCustomerOrderProductList(Set<Long> orderIdList) {
         // 1. 空值与空集合校验
@@ -677,7 +683,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
     @Override
     public TableDataInfo<OrderMainVo> queryZhongChePageList(OrderMainBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<OrderMain> lqw = buildQueryWrapper(bo);
-        lqw.eq(OrderMain::getDataSource,"zhongche");
+        lqw.eq(OrderMain::getDataSource, "zhongche");
         Page<OrderMainVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
         List<OrderMainVo> records = result.getRecords();
 
@@ -745,7 +751,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
             throw new ZhongcheException("中车订单扩展信息不存在");
         }
         String crrcOrderNo = ext.getCrrcOrderNo();
-        OrderConfirmBo bo = new OrderConfirmBo(crrcOrderNo,orderNo);
+        OrderConfirmBo bo = new OrderConfirmBo(crrcOrderNo, orderNo);
         GoodsUpdateVo goodsUpdateVo = zhongChePullService.mallOrderConfirm(bo);
         if (goodsUpdateVo.getResult() != 1) {
             throw new ZhongcheException("中车订单扩展信息不存在");
@@ -774,7 +780,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
             throw new ZhongcheException("中车订单扩展信息不存在");
         }
         String crrcOrderNo = ext.getCrrcOrderNo();
-        OrderRejectBo bo = new OrderRejectBo(crrcOrderNo,orderNo,reason);
+        OrderRejectBo bo = new OrderRejectBo(crrcOrderNo, orderNo, reason);
         GoodsUpdateVo goodsUpdateVo = zhongChePullService.mallOrderReject(bo);
         if (goodsUpdateVo.getResult() != 1) {
             throw new ZhongcheException("拒绝失败");

+ 9 - 0
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMainMapper.xml

@@ -35,4 +35,13 @@
 
         ORDER BY o.order_time DESC
     </select>
+
+    <select id="countOrderNum" resultType="org.dromara.order.domain.vo.OrderCountVo">
+        SELECT SUM(CASE WHEN order_status = '0' THEN 1 ELSE 0 END) AS pendingPaymentCount,
+               SUM(CASE WHEN order_status = '2' THEN 1 ELSE 0 END) AS pendingShipmentCount,
+               SUM(CASE WHEN order_status = '4' THEN 1 ELSE 0 END) AS pendingReceiptCount
+        FROM order_main
+        WHERE customer_id = #{customerId}
+          AND del_flag = '0'
+    </select>
 </mapper>

+ 27 - 0
ruoyi-modules/ruoyi-product/product-Dockerfile

@@ -0,0 +1,27 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/prouct/logs \
+    /ruoyi/prouct/temp \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/prouct
+
+ENV SERVER_PORT=9608 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-product.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-prouct \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

+ 14 - 22
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/pc/DiyProductController.java

@@ -5,15 +5,15 @@ import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
-import org.dromara.product.domain.bo.ProductBaseBo;
-import org.dromara.product.domain.bo.ProductBrandBo;
-import org.dromara.product.domain.bo.ProductCategoryBo;
+import org.dromara.product.domain.bo.*;
 import org.dromara.product.domain.vo.PcProductVo;
 import org.dromara.product.domain.vo.ProductBaseVo;
 import org.dromara.product.domain.vo.ProductBrandVo;
+import org.dromara.product.domain.vo.ServiceCaseVo;
 import org.dromara.product.service.IProductBaseService;
 import org.dromara.product.service.IProductBrandService;
 import org.dromara.product.service.IProductCategoryService;
+import org.dromara.product.service.IServiceCaseService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -35,10 +35,8 @@ public class DiyProductController {
 
     //商品
     private final IProductBaseService productBaseService;
-    //商品品牌
-    private final IProductBrandService productBrandService;
-    //商品分类
-    private final IProductCategoryService productCategoryService;
+    //项目案例
+    private final IServiceCaseService serviceCaseService;
 
     /**
      * 获取商品列表
@@ -47,24 +45,18 @@ public class DiyProductController {
      * @return
      */
     @GetMapping("/getDiyProductPage")
-    public TableDataInfo<ProductBaseVo> getDiyProductList(ProductBaseBo bo, PageQuery pageQuery){
-        return productBaseService.queryPageList(bo, pageQuery);
+    public TableDataInfo<PcProductVo> getDiyProductPage(PcProductBo bo, PageQuery pageQuery){
+        return productBaseService.getPcProductPage(bo, pageQuery);
     }
 
     /**
-     * 查询商品分类树
-     * */
-    @GetMapping("/getProductCategoryTree")
-    public R<List<Tree<Long>>> selectCategoryTreeList(ProductCategoryBo bo) {
-        return R.ok(productCategoryService.selectCategoryTreeList(bo));
-    }
-
-    /**
-    * 获取商品品牌列表
-    * */
-    @GetMapping("/getProductBrandPage")
-    public TableDataInfo<ProductBrandVo> getProductBrandPage(ProductBrandBo bo, PageQuery pageQuery) {
-        return productBrandService.queryPageList(bo, pageQuery);
+     * 获取项目案例列表
+     * @param bo
+     * @return
+     */
+    @GetMapping("/getServiceCaseList")
+    public TableDataInfo<ServiceCaseVo> getProjectCaseList(ServiceCaseBo bo, PageQuery pageQuery){
+        return serviceCaseService.queryPageList(bo, pageQuery);
     }
 
 }

+ 1 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/PcProductBo.java

@@ -10,6 +10,7 @@ import lombok.Data;
 @Data
 public class PcProductBo {
 
+    private String ids;
     /**
      * 搜索关键字
      * */

+ 9 - 3
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseServiceImpl.java

@@ -485,7 +485,8 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
      */
     private LambdaEsQueryWrapper<ProductBaseVo> buildEsQueryWrapperForPc(PcProductBo bo) {
         LambdaEsQueryWrapper<ProductBaseVo> wrapper = new LambdaEsQueryWrapper<ProductBaseVo>()
-            .eq(ProductBaseVo::getProductStatus, 1);
+//            .eq(ProductBaseVo::getProductStatus, 1)
+            ;
 
         if(ObjectUtil.isNotEmpty(bo.getProductNo())){
             wrapper.eq(ProductBaseVo::getProductNo, bo.getProductNo());
@@ -1433,9 +1434,12 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
     @Override
     public TableDataInfo<PcProductVo> getPcProductPage(PcProductBo bo, PageQuery pageQuery) {
         QueryWrapper<ProductBase> lqw = Wrappers.query(ProductBase.class);
+        if(ObjectUtil.isNotEmpty( bo.getIds())){
+            lqw.in("b.id", bo.getIds());
+        }
         lqw.ge(ObjectUtil.isNotEmpty(pageQuery.getFirstSeenId()) && pageQuery.getWay() == 0,"b.id", pageQuery.getFirstSeenId());
         lqw.gt(ObjectUtil.isNotEmpty(pageQuery.getLastSeenId()) && pageQuery.getWay() == 1,"b.id", pageQuery.getLastSeenId());
-        lqw.eq("b.product_status", 1);
+//        lqw.eq("b.product_status", 1);
         lqw.and(ObjectUtil.isNotEmpty(bo.getSearchKeyword())
             , (queryWrapper) -> queryWrapper.and(qw ->
                 qw.like("b.item_name", bo.getSearchKeyword())
@@ -1483,7 +1487,9 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
         // 使用ES分页查询
         try {
             LambdaEsQueryWrapper<ProductBaseVo> esQueryWrapper = buildEsQueryWrapperForPc(bo);
-
+            if(ObjectUtil.isNotEmpty(bo.getIds())){
+                esQueryWrapper.in(ProductBaseVo::getId, bo.getIds());
+            }
             // 添加额外的查询条件
             if (ObjectUtil.isNotEmpty(bo.getSearchKeyword())) {
                 esQueryWrapper.and(wrapper -> wrapper

+ 27 - 0
ruoyi-modules/ruoyi-resource/resource-Dockerfile

@@ -0,0 +1,27 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/resource/logs \
+    /ruoyi/resource/temp \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/resource
+
+ENV SERVER_PORT=9204 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-resource.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-resource \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

+ 1 - 1
ruoyi-modules/ruoyi-system/Dockerfile

@@ -11,7 +11,7 @@ RUN mkdir -p /ruoyi/system/logs \
 
 WORKDIR /ruoyi/system
 
-ENV SERVER_PORT=9201 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+ENV SERVER_PORT=9214 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
 
 EXPOSE ${SERVER_PORT}
 

+ 38 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/pc/DiySystemController.java

@@ -1,10 +1,21 @@
 package org.dromara.system.controller.pc;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.system.domain.PlatformConfig;
+import org.dromara.system.domain.bo.SysAnnouncementBo;
+import org.dromara.system.domain.vo.SysAnnouncementVo;
+import org.dromara.system.service.IPlatformConfigService;
+import org.dromara.system.service.ISysAnnouncementService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * diy系统运营相关接口
  * @author
@@ -15,4 +26,31 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RequestMapping("/diySystem")
 public class DiySystemController {
+
+    private final ISysAnnouncementService sysAnnouncementService;
+
+    private final IPlatformConfigService platformConfigService;
+
+
+    /**
+     * 获取公告列表
+     * @param sysAnnouncementBo
+     * @return
+     */
+    @RequestMapping("/getAnnouncementPage")
+    public TableDataInfo<SysAnnouncementVo> getAnnouncementList(SysAnnouncementBo sysAnnouncementBo, PageQuery pageQuery) {
+        return sysAnnouncementService.queryPageList(sysAnnouncementBo, pageQuery);
+    }
+
+    /**
+    * 获取是否使用diy
+    * */
+    @RequestMapping("/getIsUseDiy")
+    public R<List<PlatformConfig>> getIsUseDiy() {
+        List<PlatformConfig> list = platformConfigService.list(Wrappers.<PlatformConfig>lambdaQuery()
+            .in(PlatformConfig::getConfigKey, "platormDiy","industrialDiy","fuliDiy")
+        );
+        return R.ok(list);
+    }
+
 }

+ 21 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/pc/PcSysUserController.java

@@ -5,17 +5,16 @@ import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.constant.GlobalConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.common.web.core.BaseController;
 import org.dromara.system.domain.bo.ChangeUserPwdBo;
 import org.dromara.system.domain.bo.SysUserBo;
+import org.dromara.system.domain.vo.SysUserVo;
 import org.dromara.system.service.ISysUserService;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 @Validated
 @RequiredArgsConstructor
@@ -26,6 +25,24 @@ public class PcSysUserController extends BaseController {
     private final ISysUserService sysUserService;
 
 
+    /**
+     * 根据手机号查询用户(用于注册前校验)
+     */
+    @GetMapping("/selectByPhone/{phonenumber}")
+    public R<SysUserVo> selectUserByPhonenumber(@PathVariable String phonenumber) {
+        if (StringUtils.isEmpty(phonenumber)) {
+            return R.fail("手机号不能为空");
+        }
+
+        SysUserVo user = sysUserService.selectUserByPhonenumber(phonenumber);
+        if (user != null) {
+            // 可选:返回用户信息,前端可提示“该手机号已注册”
+            return R.fail("该手机号已注册");
+        } else {
+            return R.ok(null);
+        }
+    }
+
     /**
      * 重置密码
      */

+ 3 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

@@ -69,6 +69,7 @@ public class RemoteUserServiceImpl implements RemoteUserService {
      */
     @Override
     public LoginUser getUserInfo(String username, String tenantId) throws UserException {
+        SysUserVo sysUser1 = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, username));
         return TenantHelper.dynamic(tenantId, () -> {
             SysUserVo sysUser = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, username));
             if (ObjectUtil.isNull(sysUser)) {
@@ -487,7 +488,7 @@ public class RemoteUserServiceImpl implements RemoteUserService {
         boolean exist = userMapper.exists(new LambdaQueryWrapper<SysUser>()
             .eq(SysUser::getUserName, sysUserBo.getUserName()));
         if (exist) {
-            throw new ServiceException("账号已经存在:"+ username);
+            throw new ServiceException("账号已经存在:" + username);
         }
         userService.insertUser(sysUserBo);
         return sysUserBo.getUserId();
@@ -509,7 +510,7 @@ public class RemoteUserServiceImpl implements RemoteUserService {
 
         );
         if (exist) {
-            throw new RuntimeException("账号已经存在:"+ username);
+            throw new RuntimeException("账号已经存在:" + username);
         }
         userService.updateUser(sysUserBo);
         return sysUserBo.getUserId();

+ 27 - 0
ruoyi-modules/ruoyi-workflow/Dockerfile.server

@@ -0,0 +1,27 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/workflow/logs \
+    /ruoyi/workflow/temp \
+    /ruoyi/skywalking/agent
+
+WORKDIR /ruoyi/workflow
+
+ENV SERVER_PORT=9205 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE ${SERVER_PORT}
+
+ADD ./target/ruoyi-workflow.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
+           #-Dskywalking.agent.service_name=ruoyi-system \
+           #-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar
+

+ 22 - 0
ruoyi-visual/ruoyi-monitor/monitor-Dockerfile

@@ -0,0 +1,22 @@
+# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
+#FROM findepi/graalvm:java17-native
+
+LABEL maintainer="Lion Li"
+
+RUN mkdir -p /ruoyi/monitor/logs
+
+WORKDIR /ruoyi/monitor
+
+ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+
+EXPOSE 9100
+
+ADD ./target/ruoyi-monitor.jar ./app.jar
+
+SHELL ["/bin/bash", "-c"]
+
+ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom \
+           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
+           -jar app.jar

+ 61 - 0
script/docker/build-images.sh

@@ -0,0 +1,61 @@
+#!/bin/bash
+# 批量构建所有服务的 Docker 镜像
+# 使用说明:
+#   1. 将所有 jar 包上传至服务器 /docker/jar 目录
+#   2. 在项目根目录执行:bash build-images.sh
+#   3. 如需指定版本号:bash build-images.sh 2.4.1
+
+VERSION=${1:-2.4.1}
+
+echo "======================================================"
+echo "  开始构建所有服务镜像,版本号:${VERSION}"
+echo "======================================================"
+
+# 构建函数
+build_image() {
+  local service=$1       # 服务名,如 ruoyi-gateway
+  local dockerfile=$2    # Dockerfile 路径,相对于项目根目录
+  local image="ruoyi/${service}:${VERSION}"
+
+  echo ""
+  echo "------------------------------------------------------"
+  echo "  构建镜像:${image}"
+  echo "  Dockerfile:${dockerfile}"
+  echo "------------------------------------------------------"
+  docker build -f "${dockerfile}" -t "${image}" .
+  if [ $? -eq 0 ]; then
+    echo "  [成功] ${image}"
+  else
+    echo "  [失败] ${image} 构建失败,请检查日志"
+    exit 1
+  fi
+}
+
+# ===================== 网关 =====================
+build_image "ruoyi-gateway"         "/docker/jar/gateway-Dockerfile"
+
+# ===================== 认证 =====================
+build_image "ruoyi-auth"            "/docker/jar/auth-Dockerfile"
+
+# ===================== 业务模块 =====================
+build_image "ruoyi-system"          "/docker/jar/system-Dockerfile"
+build_image "ruoyi-job"             "/docker/jar/job-Dockerfile"
+build_image "ruoyi-resource"        "/docker/jar/resource-Dockerfile"
+build_image "ruoyi-product"         "/docker/jar/product-Dockerfile"
+build_image "ruoyi-external"        "/docker/jar/external-Dockerfile"
+build_image "ruoyi-order"           "/docker/jar/order-Dockerfile"
+build_image "ruoyi-customer"        "/docker/jar/customer-Dockerfile"
+build_image "ruoyi-bill"            "/docker/jar/bill-Dockerfile"
+build_image "ruoyi-mall"            "/docker/jar/mall-Dockerfile"
+
+# ===================== 可视化组件 =====================
+build_image "ruoyi-monitor"         "/docker/jar/monitor-Dockerfile"
+build_image "ruoyi-snailjob-server" "/docker/jar/snailjob-Dockerfile"
+
+echo ""
+echo "======================================================"
+echo "  所有镜像构建完成!共 13 个服务"
+echo "======================================================"
+echo ""
+echo "镜像列表:"
+docker images | grep "ruoyi/" | grep "${VERSION}"

+ 185 - 0
script/docker/docker-compose-app.yml

@@ -0,0 +1,185 @@
+services:
+  ruoyi-monitor:
+    image: ruoyi/ruoyi-monitor:2.4.1
+    container_name: ruoyi-monitor
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9100:9100"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-monitor/logs/:/ruoyi/monitor/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-snailjob-server:
+    image: ruoyi/ruoyi-snailjob-server:2.4.1
+    container_name: ruoyi-snailjob-server
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "8800:8800"
+      - "17888:17888"
+    volumes:
+      - /home/docker/snailjob/logs/:/ruoyi/snailjob/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-gateway:
+    image: ruoyi/ruoyi-gateway:2.4.1
+    container_name: ruoyi-gateway
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "8080:8080"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-gateway/logs/:/ruoyi/gateway/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-auth:
+    image: ruoyi/ruoyi-auth:2.4.1
+    container_name: ruoyi-auth
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9210:9210"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-auth/logs/:/ruoyi/auth/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-system:
+    image: ruoyi/ruoyi-system:2.4.1
+    container_name: ruoyi-system
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9214:9214"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-system/logs/:/ruoyi/system/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-job:
+    image: ruoyi/ruoyi-job:2.4.1
+    container_name: ruoyi-job
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+      SERVER_PORT: 9203
+      SNAIL_PORT: 29203
+    ports:
+      - "9203:9203"
+      - "29203:29203"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-job/logs/:/ruoyi/job/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-resource:
+    image: ruoyi/ruoyi-resource:2.4.1
+    container_name: ruoyi-resource
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9204:9204"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-resource/logs/:/ruoyi/resource/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-product:
+    image: ruoyi/ruoyi-product:2.4.1
+    container_name: ruoyi-product
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9608:9608"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-product/logs/:/ruoyi/product/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-external:
+    image: ruoyi/ruoyi-external:2.4.1
+    container_name: ruoyi-external
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9618:9618"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-external/logs/:/ruoyi/external/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-order:
+    image: ruoyi/ruoyi-order:2.4.1
+    container_name: ruoyi-order
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9213:9213"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-order/logs/:/ruoyi/order/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-customer:
+    image: ruoyi/ruoyi-customer:2.4.1
+    container_name: ruoyi-customer
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9212:9212"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-customer/logs/:/ruoyi/customer/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-bill:
+    image: ruoyi/ruoyi-bill:2.4.1
+    container_name: ruoyi-bill
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9318:9318"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-bill/logs/:/ruoyi/bill/logs
+    privileged: true
+    network_mode: "host"
+
+  ruoyi-mall:
+    image: ruoyi/ruoyi-mall:2.4.1
+    container_name: ruoyi-mall
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9216:9216"
+    volumes:
+      # 日志目录
+      - /home/docker/ruoyi-mall/logs/:/ruoyi/mall/logs
+    privileged: true
+    network_mode: "host"

+ 30 - 254
script/docker/docker-compose.yml

@@ -1,31 +1,4 @@
 services:
-  mysql:
-    image: mysql:8.0.42
-    container_name: mysql
-    environment:
-      # 时区上海
-      TZ: Asia/Shanghai
-      # root 密码
-      MYSQL_ROOT_PASSWORD: root
-      # 初始化数据库
-      MYSQL_DATABASE: ry-cloud
-    ports:
-      - "3306:3306"
-    volumes:
-      # 数据挂载
-      - /home/docker/mysql/data/:/var/lib/mysql/
-      # 配置挂载
-      - /home/docker/mysql/conf/:/etc/mysql/conf.d/
-    command:
-      # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
-      --default-authentication-plugin=mysql_native_password
-      --character-set-server=utf8mb4
-      --collation-server=utf8mb4_general_ci
-      --explicit_defaults_for_timestamp=true
-      --lower_case_table_names=1
-    privileged: true
-    network_mode: "host"
-
   nacos:
     image: ruoyi/ruoyi-nacos:2.4.1
     container_name: nacos
@@ -302,7 +275,36 @@ services:
       - /home/docker/skywalking/agent/:/ruoyi/skywalking/agent
     privileged: true
     network_mode: "host"
-
+  ruoyi-bill:
+    image: ruoyi/ruoyi-bill:2.4.1
+    container_name: ruoyi-bill
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9318:9318"
+    volumes:
+      # 配置文件
+      - /home/docker/ruoyi-bill/logs/:/ruoyi/bill/logs
+      # skywalking 探针
+      - /home/docker/skywalking/agent/:/ruoyi/skywalking/agent
+    privileged: true
+    network_mode: "host"
+  ruoyi-mall:
+    image: ruoyi/ruoyi-mall:2.4.1
+    container_name: ruoyi-mall
+    environment:
+      # 时区上海
+      TZ: Asia/Shanghai
+    ports:
+      - "9216:9216"
+    volumes:
+      # 配置文件
+      - /home/docker/ruoyi-mall/logs/:/ruoyi/mall/logs
+      # skywalking 探针
+      - /home/docker/skywalking/agent/:/ruoyi/skywalking/agent
+    privileged: true
+    network_mode: "host"
   ruoyi-job:
     image: ruoyi/ruoyi-job:2.4.1
     container_name: ruoyi-job
@@ -357,229 +359,3 @@ services:
 #################################################################################################
 #################################### 以下为扩展根据需求搭建 #########################################
 #################################################################################################
-
-  elasticsearch:
-    image: elasticsearch:7.17.6
-    container_name: elasticsearch
-    ports:
-      - "9200:9200"
-      - "9300:9300"
-    environment:
-      # 设置集群名称
-      cluster.name: elasticsearch
-      # 以单一节点模式启动
-      discovery.type: single-node
-      ES_JAVA_OPTS: "-Xms512m -Xmx1024m"
-    volumes:
-      - /home/docker/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins
-      - /home/docker/elk/elasticsearch/data:/usr/share/elasticsearch/data
-      - /home/docker/elk/elasticsearch/logs:/usr/share/elasticsearch/logs
-    network_mode: "host"
-
-  kibana:
-    image: kibana:7.17.6
-    container_name: kibana
-    ports:
-      - "5601:5601"
-    depends_on:
-      # kibana在elasticsearch启动之后再启动
-      - elasticsearch
-    environment:
-      #设置系统语言文中文
-      I18N_LOCALE: zh-CN
-      # 访问域名
-      # SERVER_PUBLICBASEURL: https://kibana.cloud.com
-    volumes:
-      - /home/docker/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
-    network_mode: "host"
-
-  logstash:
-    image: logstash:7.17.6
-    container_name: logstash
-    ports:
-      - "4560:4560"
-    volumes:
-      - /home/docker/elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
-      - /home/docker/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
-    depends_on:
-      - elasticsearch
-    network_mode: "host"
-
-  rmqnamesrv:
-    image: apache/rocketmq:5.2.0
-    container_name: rmqnamesrv
-    ports:
-      - "9876:9876"
-    environment:
-      JAVA_OPT: -server -Xms512m -Xmx512m
-    command: sh mqnamesrv
-    volumes:
-      - /home/docker/rocketmq/namesrv/logs:/home/rocketmq/logs/rocketmqlogs
-    network_mode: "host"
-
-  rmqbroker1:
-    image: apache/rocketmq:5.2.0
-    container_name: rmqbroker1
-    ports:
-      - "10911:10911"
-      - "10909:10909"
-      - "10912:10912"
-    environment:
-      JAVA_OPT: -server -Xms512M -Xmx512M
-      NAMESRV_ADDR: 127.0.0.1:9876
-    # --enable-proxy 开启broker与proxy共用模式 生产部署建议将proxy单独部署
-    command: sh mqbroker --enable-proxy -c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf
-    depends_on:
-      - rmqnamesrv
-    volumes:
-      - /home/docker/rocketmq/broker1/conf/broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf
-      - /home/docker/rocketmq/broker1/logs:/home/rocketmq/logs/rocketmqlogs
-      - /home/docker/rocketmq/broker1/store:/home/rocketmq/store
-    privileged: true
-    network_mode: "host"
-
-  rmqconsole:
-    image: apacherocketmq/rocketmq-dashboard:latest
-    container_name: rmqconsole
-    ports:
-      - "19876:19876"
-    environment:
-      JAVA_OPTS: -Dserver.port=19876 -Drocketmq.namesrv.addr=127.0.0.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false
-    depends_on:
-      - rmqnamesrv
-    network_mode: "host"
-
-  rabbitmq:
-    container_name: rabbitmq
-    build:
-      context: ./rabbitmq
-    environment:
-      RABBITMQ_DEFAULT_USER: ruoyi
-      RABBITMQ_DEFAULT_PASS: ruoyi123
-    ports:
-      - "15672:15672" # 管理界面端口
-      - "5672:5672"   # api 端口
-    volumes:
-      - /home/docker/rabbitmq/log:/var/log/rabbitmq
-      - /home/docker/rabbitmq/data:/var/lib/rabbitmq
-    network_mode: "host"
-
-  zookeeper:
-    image: 'bitnami/zookeeper:3.8.0'
-    container_name: zookeeper
-    ports:
-      - "2181:2181"
-    environment:
-      TZ: Asia/Shanghai
-      ALLOW_ANONYMOUS_LOGIN: "yes"
-      ZOO_SERVER_ID: 1
-      ZOO_PORT_NUMBER: 2181
-      # 自带的控制台 一般用不上可自行开启
-      ZOO_ENABLE_ADMIN_SERVER: "no"
-      # 自带控制台的端口
-      ZOO_ADMIN_SERVER_PORT_NUMBER: 8080
-    network_mode: "host"
-
-  kafka:
-    image: 'bitnami/kafka:3.6.2'
-    container_name: kafka
-    ports:
-      - "9092:9092"
-    environment:
-      TZ: Asia/Shanghai
-      # 更多变量 查看文档 https://github.com/bitnami/bitnami-docker-kafka/blob/master/README.md
-      KAFKA_BROKER_ID: 1
-      # 监听端口
-      KAFKA_CFG_LISTENERS: PLAINTEXT://:9092
-      # 实际访问ip 本地用 127 内网用 192 外网用 外网ip
-      KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://192.168.31.165:9092
-      KAFKA_CFG_ZOOKEEPER_CONNECT: 127.0.0.1:2181
-      ALLOW_PLAINTEXT_LISTENER: "yes"
-    volumes:
-      - /home/docker/kafka/data:/bitnami/kafka/data
-    depends_on:
-      - zookeeper
-    network_mode: "host"
-
-  kafka-manager:
-    image: sheepkiller/kafka-manager:latest
-    container_name: kafka-manager
-    ports:
-      - "19092:19092"
-    environment:
-      ZK_HOSTS: 127.0.0.1:2181
-      APPLICATION_SECRET: letmein
-      KAFKA_MANAGER_USERNAME: ruoyi
-      KAFKA_MANAGER_PASSWORD: ruoyi123
-      KM_ARGS: -Dhttp.port=19092
-    depends_on:
-      - kafka
-    network_mode: "host"
-
-  sky-oap:
-    image: apache/skywalking-oap-server:9.7.0
-    container_name: sky-oap
-    ports:
-      - "11800:11800"
-      - "12800:12800"
-    environment:
-      JAVA_OPTS: -Xms1G -Xmx2G
-      #记录数据的有效期,单位天
-      SW_CORE_RECORD_DATA_TTL: 7
-      #分析指标数据的有效期,单位天
-      SW_CORE_METRICS_DATA_TTL: 7
-      SW_STORAGE: elasticsearch
-      SW_STORAGE_ES_CLUSTER_NODES: 127.0.0.1:9200
-      TZ: Asia/Shanghai
-    network_mode: "host"
-
-  sky-ui:
-    image: apache/skywalking-ui:9.7.0
-    container_name: sky-ui
-    ports:
-      - "18080:18080"
-    environment:
-      SW_SERVER_PORT: 18080
-      SW_OAP_ADDRESS: http://127.0.0.1:12800
-      TZ: Asia/Shanghai
-    depends_on:
-      - sky-oap
-    network_mode: "host"
-
-  prometheus:
-    image: prom/prometheus:v2.40.1
-    container_name: prometheus
-    ports:
-      - "9090:9090"
-    volumes:
-      - /home/docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
-    network_mode: "host"
-
-  grafana:
-    image: grafana/grafana:9.2.4
-    container_name: grafana
-    environment:
-      TZ: Asia/Shanghai
-      # 服务地址 用于指定外网ip或域名
-      GF_SERVER_ROOT_URL: ""
-      # admin 管理员密码
-      GF_SECURITY_ADMIN_PASSWORD: 123456
-    ports:
-      - "3000:3000"
-    volumes:
-      - /home/docker/grafana/grafana.ini:/etc/grafana/grafana.ini
-      - /home/docker/grafana:/var/lib/grafana
-    network_mode: "host"
-
-  shardingproxy:
-    image: apache/shardingsphere-proxy:5.4.0
-    container_name: shardingsphere-proxy
-    command: server /data
-    ports:
-      - "3307:3307"
-    volumes:
-      - /home/docker/shardingproxy/conf:/opt/shardingsphere-proxy/conf
-      - /home/docker/shardingproxy/ext-lib:/opt/shardingsphere-proxy/ext-lib
-    environment:
-      - JVM_OPTS="-Djava.awt.headless=true"
-    network_mode: "host"