ソースを参照

chore: 部署方式改为deploy.sh+application.yml生产配置

alphah 1 日 前
コミット
b575b73f0e

+ 9 - 26
docs/ops.md

@@ -30,37 +30,20 @@ docker run -d --name java-backend \
   xjz/java-backend:1.0.0
 ```
 
-### 更新部署(重启 JAR)
+### 更新部署
 
-```bash
-# 1. 本地构建 JAR
-cd /home/payments/code/payment-platform/java
-mvn package -DskipTests -q
-
-# 2. 复制到容器
-docker cp target/payment-platform-1.0.0.jar java-backend:/app.jar
+用项目根目录的 `deploy.sh` 一键完成:构建 JAR → 打包镜像 → 启动容器 → 验证。
 
-# 3. 停止旧容器,删除并重建
-docker stop java-backend && docker rm java-backend
+```bash
+# 本地 → 服务器
+scp D:\project2\payment-platform\java\target\payment-platform-1.0.0.jar root@服务器IP:/opt/payment/app.jar
+scp D:\project2\payment-platform\deploy.sh root@服务器IP:/tmp/
 
-# 4. 重新启动(使用首次启动的 docker run 命令)
-docker run -d --name java-backend \
-  -p 8001:8001 \
-  --network payment-platform_app-tier \
-  -e TZ=Asia/Shanghai \
-  -e SPRING_PROFILES_ACTIVE=prod \
-  -e JAVA_OPTS="-Xms256m -Xmx512m" \
-  -e SPRING_DATASOURCE_DRUID_URL="jdbc:postgresql://postgres:5432/payment_platform_java?currentSchema=public" \
-  -e SPRING_DATASOURCE_DRUID_USERNAME=admin \
-  -e SPRING_DATASOURCE_DRUID_PASSWORD='xjz#123321' \
-  -e SPRING_DATA_REDIS_HOST=redis \
-  -e SPRING_DATA_REDIS_PORT=6379 \
-  -e SPRING_DATA_REDIS_DATABASE=0 \
-  -e SPRING_DATA_REDIS_PASSWORD='123456#zjz' \
-  xjz/java-backend:1.0.0
+# 服务器上执行
+bash /tmp/deploy.sh
 ```
 
-> **注意:** 不要用 `docker restart`,容器缓存可能导致 JAR 不更新。必须 `stop` + `rm` + `run`
+> deploy.sh 流程:COPY JAR → build 新镜像 → stop/rm 旧容器 → run 新容器 → 等 30s → 验证 trade/precreate 端点。
 
 ### 验证部署
 

+ 1 - 0
java/src/main/java/com/payment/platform/PaymentApplication.java

@@ -10,5 +10,6 @@ public class PaymentApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(PaymentApplication.class, args);
+        System.out.println("企业码后端启动成功");
     }
 }

+ 1 - 1
java/src/main/java/com/payment/platform/module/payment/employee/enums/EmployeeEnums.java

@@ -7,7 +7,7 @@ public final class EmployeeEnums {
     @Getter
     public enum EmployeeStatus {
         EMPLOYEE_CREATE("EMPLOYEE_CREATE"),
-        EMPLOYEE_ACTIVATED("EMPLOYEE_ACTIVATED"),
+        EMPLOYEE_ACTIVATED("ACTIVATED"),
         EMPLOYEE_UNSIGN("EMPLOYEE_UNSIGN");
 
         private final String value;

+ 21 - 3
java/src/main/java/com/payment/platform/module/payment/facetoface/service/FacetofaceService.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.util.StrUtil;
 import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
 import com.alipay.api.FileItem;
 import com.alipay.api.domain.*;
 import com.alipay.api.request.*;
@@ -387,7 +388,12 @@ public class FacetofaceService {
      * 生成当面付收款二维码 — 调用 alipay.trade.precreate
      */
     public F2fTradeVO precreateTrade(F2fTradePrecreateDTO dto) {
+        log.info("[收款] 开始生成收款码: enterprise_id={}, amount={}", dto.getEnterpriseId(), dto.getTotalAmount());
+
         FacetofaceOrderEntity order = getSuccessOrder(dto.getEnterpriseId());
+        log.info("[收款] 找到成功订单: order_id={}, merchant_pid={}, auth_token_len={}",
+                order.getId(), order.getMerchantPid(),
+                order.getAppAuthToken() != null ? order.getAppAuthToken().length() : 0);
 
         String outTradeNo = "F2F" + System.currentTimeMillis() + String.format("%04d", (int) (Math.random() * 10000));
         try {
@@ -398,17 +404,28 @@ public class FacetofaceService {
 
             AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
             request.setBizModel(model);
-            request.setNotifyUrl(alipayClientFactory.getPaymentConfig().getNotifyUrl());
+            String notifyUrl = alipayClientFactory.getPaymentConfig().getNotifyUrl();
+            request.setNotifyUrl(notifyUrl);
             request.putOtherTextParam("app_auth_token", order.getAppAuthToken());
 
-            AlipayTradePrecreateResponse response = alipayClientFactory.getClient(dto.getEnterpriseId(), ServiceProviderBizType.FACETOFACE_NOTIFY.getValue()).execute(request);
+            log.info("[收款] precreate 请求参数: out_trade_no={}, total_amount={}, subject={}, notify_url={}, app_auth_token={}...",
+                    outTradeNo, dto.getTotalAmount(), model.getSubject(), notifyUrl,
+                    order.getAppAuthToken() != null ? order.getAppAuthToken().substring(0, Math.min(10, order.getAppAuthToken().length())) : "null");
+
+            AlipayClient client = alipayClientFactory.getClient(dto.getEnterpriseId(), ServiceProviderBizType.FACETOFACE_NOTIFY.getValue());
+            log.info("[收款] AlipayClient: {}", client != null ? "OK" : "NULL");
+
+            AlipayTradePrecreateResponse response = client.execute(request);
+
+            log.info("[收款] precreate 响应: code={}, msg={}, sub_code={}, sub_msg={}",
+                    response.getCode(), response.getMsg(), response.getSubCode(), response.getSubMsg());
 
             if (!response.isSuccess()) {
                 throw new BusinessException(400, "生成收款码失败: " +
                         (response.getSubMsg() != null ? response.getSubMsg() : response.getMsg()));
             }
 
-            log.info("当面付收款码生成成功: out_trade_no={}, qr_code={}", outTradeNo, response.getQrCode());
+            log.info("[收款] 收款码生成成功: out_trade_no={}, qr_code={}", outTradeNo, response.getQrCode());
 
             F2fTradeVO vo = new F2fTradeVO();
             vo.setOutTradeNo(outTradeNo);
@@ -416,6 +433,7 @@ public class FacetofaceService {
             return vo;
 
         } catch (AlipayApiException ex) {
+            log.error("[收款] AlipayApiException: {}", ex.getMessage(), ex);
             throw new BusinessException(400, "生成收款码失败: " + ex.getMessage());
         }
     }

+ 1 - 1
java/src/main/java/com/payment/platform/module/payment/notification/enums/NotificationEnums.java

@@ -29,7 +29,7 @@ public final class NotificationEnums {
     @Getter
     public enum EmployeeAction {
         EMPLOYEE_ADD("EMPLOYEE_ADD"),
-        EMPLOYEE_ACTIVATE("EMPLOYEE_ACTIVATED"),
+        EMPLOYEE_ACTIVATE("ACTIVATED"),
         EMPLOYEE_UPDATE("EMPLOYEE_UPDATE"),
         EMPLOYEE_DEPARTMENT_CHANGE("EMPLOYEE_DEPARTMENT_CHANGE"),
         EMPLOYEE_ROLE_CHANGE("EMPLOYEE_ROLE_CHANGE"),

+ 1 - 1
java/src/main/resources/application.yml

@@ -30,7 +30,7 @@ spring:
 
   data:
     redis:
-      host: localhost
+      host: redis
       port: 6379
       database: 1
       password: '123456#xjz'