From 84d42b6997ae87fa64b75ae085fce11d05a6ca5a Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Sun, 12 Oct 2025 02:17:49 +0800
Subject: [PATCH] 1

---
 ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java |   87 ++++++++++++++++++++++++++++++++++++-------
 1 files changed, 73 insertions(+), 14 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java
index af6a01e..7a406e4 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java
@@ -9,14 +9,15 @@
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.im.comm.Result;
 import com.ruoyi.im.service.InsuranceProductService;
+import com.ruoyi.im.service.UserKycService;
 import com.ruoyi.im.service.UserPolicyService;
 import com.ruoyi.im.util.PayService;
 import com.ruoyi.im.util.ValidatorUtil;
-import com.ruoyi.system.domain.InsuranceProduct;
-import com.ruoyi.system.domain.UserAccount;
-import com.ruoyi.system.domain.UserPolicy;
+import com.ruoyi.imenum.PaymentMode;
+import com.ruoyi.system.domain.*;
 import com.ruoyi.system.domain.dto.UserPolicyDto;
 import com.ruoyi.system.mapper.UserPolicyMapper;
+import com.ruoyi.system.service.PaymentRecordService;
 import com.ruoyi.system.service.UserAccountService;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +43,10 @@
     UserAccountService userAccountService;
     @Autowired
     private PayService payService;
+    @Autowired
+    private PaymentRecordService paymentRecordService;
+    @Autowired
+    private UserKycService userKycService;
 
 
     @Override
@@ -71,17 +76,17 @@
                 .eq(UserPolicy::getPolicyStatus, UserPolicy.PolicyStatus.PENDING)
                 .and(a-> a.eq(UserPolicy::getApprovalStatus, 0)
                 .or()
-                .eq(UserPolicy::getApprovalStatus, 1))
+                .eq(UserPolicy::getPayStatus, 1))
 
         );
         if(count > 0){
-            return Result.error("你已申购此保险,请勿重复申购");
+            return Result.error("请勿重复提交,如未支付请3-5分钟重新提交申请");
         }
         InsuranceProduct insuranceProduct = insuranceProductService.getById(dto.getProductId());
         if(ObjectUtil.isEmpty(insuranceProduct)){
             return Result.error("该产品停止购买或已下架!");
         }
-        if(userAccount.getBalance().compareTo(insuranceProduct.getPremium()) < 0){
+        if(!dto.getPayProductId().equals("0")){
             String orderNo = generateOrderNo();
             String payOrder = payService.createOrder(
                     insuranceProduct.getPremium(),
@@ -112,10 +117,10 @@
                     userPolicy.setTerm(insuranceProduct.getTerm());
                     userPolicy.setName(dto.getName());
                     userPolicy.setGender(dto.getGender());
-                    userPolicy.setPayStatus(0);
+                    userPolicy.setPayStatus(1);
                     userPolicy.setOrderNo(orderNo);
                     userPolicy.setBirthDate(LocalDate.parse(dto.getBirthDate()));
-
+                    userPolicy.setNumberDays(insuranceProduct.getNumberDays());
                     userPolicy.setOccupation(dto.getOccupation());
                     userPolicy.setIdCard(dto.getIdCard());
                     userPolicy.setPhone(dto.getPhone());
@@ -124,24 +129,32 @@
                     userPolicy.setCreatedAt(new Date());
                     userPolicy.setUpdatedAt(new Date());
                     userPolicy.setApprovalStatus(0);
+                    PaymentMode payment = PaymentMode.getByCode(dto.getPayProductId());
+                    if (payment != null) {
+                        userPolicy.setModePayment(payment.getMode());
+                    } else {
+                        // 处理未知支付方式
+                        userPolicy.setModePayment(0);
+                    }
                     userPolicy.setIsLifelong(insuranceProduct.getTerm() == 0 ? 0 : 1);
 
                     save(userPolicy);
+                    extracted(userAccount, userPolicy.getId(), orderNo,PaymentRecord.PaymentStatus.PENDING.getCode(),userPolicy.getProductId(),userPolicy.getProductName(),userPolicy.getModePayment());
                     return Result.success(payUrl);
-
                 case 401:
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败",0);
                     return Result.error("未授权访问支付系统");
-
                 case 403:
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败",0);
                     return Result.error("禁止访问支付系统");
-
                 case 404:
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败",0);
                     return Result.error("支付接口不存在");
-
                 case 0014: // 注意:0014可能是字符串,需要根据实际情况处理
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败",0);
                     return Result.error("当前支付不可用,请更换其他支付方式!");
-
                 default:
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败",0);
                     // 其他错误码
                     String message = (String) parse.get("message");
                     if (message != null && !message.isEmpty()) {
@@ -151,6 +164,9 @@
                     }
             }
         }else{
+            if(userAccount.getBalance().compareTo(insuranceProduct.getPremium()) < 0){
+                return Result.error("余额不足!");
+            }
             userAccount.setBalance(userAccount.getBalance().subtract(insuranceProduct.getPremium()));
 
             userAccountService.updateById(userAccount);
@@ -170,7 +186,7 @@
             userPolicy.setPayStatus(2);
             userPolicy.setOrderNo(orderNo);
             userPolicy.setBirthDate(LocalDate.parse(dto.getBirthDate()));
-
+            userPolicy.setNumberDays(insuranceProduct.getNumberDays());
             userPolicy.setOccupation(dto.getOccupation());
             userPolicy.setIdCard(dto.getIdCard());
             userPolicy.setPhone(dto.getPhone());
@@ -179,13 +195,56 @@
             userPolicy.setCreatedAt(new Date());
             userPolicy.setUpdatedAt(new Date());
             userPolicy.setApprovalStatus(0);
+            userPolicy.setModePayment(3);
             userPolicy.setIsLifelong(insuranceProduct.getTerm() == 0 ? 0 : 1);
 
             save(userPolicy);
+
+            UserKyc userKyc = userKycService.getOne(new LambdaQueryWrapper<UserKyc>()
+                    .eq(UserKyc::getAccount, userAccount.getAccount())
+            );
+            PaymentRecord paymentRecord = new PaymentRecord();
+            paymentRecord.setUserId(userAccount.getId());
+            paymentRecord.setPaymentStatus(PaymentRecord.PaymentStatus.PAID.getCode());
+            paymentRecord.setProductId(userPolicy.getProductId());
+            paymentRecord.setOrderId(userPolicy.getId());
+            paymentRecord.setPayOrdeNo(orderNo);
+            paymentRecord.setAccount(userAccount.getAccount());
+            paymentRecord.setName(userKyc.getName());
+            paymentRecord.setInvitationCode(userAccount.getInvitationCode());
+            paymentRecord.setProductName(insuranceProduct.getProductName());
+            paymentRecord.setModePayment(3);
+            paymentRecordService.save(paymentRecord);
             return Result.success();
         }
     }
 
+
+    private void extracted(UserAccount userAccount, Integer userPolicyId,
+                           String orderNo,Integer payCode,Integer productId,String productName,Integer modePayment) {
+        UserKyc userKyc = userKycService.getOne(new LambdaQueryWrapper<UserKyc>()
+                .eq(UserKyc::getAccount, userAccount.getAccount())
+        );
+        PaymentRecord paymentRecord = new PaymentRecord();
+        paymentRecord.setUserId(userAccount.getId());
+        paymentRecord.setAccount(userAccount.getAccount());
+        paymentRecord.setName(userKyc.getName());
+        paymentRecord.setInvitationCode(userAccount.getInvitationCode());
+        paymentRecord.setProductName(productName);
+        paymentRecord.setPaymentStatus(payCode);
+        if(userPolicyId != null){
+            paymentRecord.setOrderId(userPolicyId);
+        }
+        if(userPolicyId != null){
+            paymentRecord.setOrderId(userPolicyId);
+        }
+        paymentRecord.setProductId(productId);
+
+        paymentRecord.setPayOrdeNo(orderNo);
+        paymentRecord.setModePayment(modePayment);
+        paymentRecordService.save(paymentRecord);
+    }
+
     private final Random random = new Random();
     /**
      * 生成随机订单号 (格式: 时间戳 + 6位随机数)

--
Gitblit v1.9.3