From 11ffae1ecbe3d26863fd51262d7ffb043eb089da Mon Sep 17 00:00:00 2001
From: dd <gitluke@outlook.com>
Date: Mon, 27 Oct 2025 03:38:28 +0800
Subject: [PATCH] 1

---
 ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java |  217 ++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 136 insertions(+), 81 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 e3d864f..bddc2f0 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
@@ -16,6 +16,7 @@
 import com.ruoyi.imenum.PaymentMode;
 import com.ruoyi.system.domain.*;
 import com.ruoyi.system.domain.dto.UserPolicyDto;
+import com.ruoyi.system.mapper.SystemConfigurationMapper;
 import com.ruoyi.system.mapper.UserPolicyMapper;
 import com.ruoyi.system.service.FundsLogService;
 import com.ruoyi.system.service.GroupWelcomeConfigService;
@@ -53,6 +54,10 @@
     private GroupWelcomeConfigService groupWelcomeConfigService;
     @Autowired
     private FundsLogService fundsLogService;
+    @Autowired
+    private SystemConfigurationMapper systemConfigurationMapper;
+    @Autowired
+    private UserPolicyService userPolicyService;
 
 
     @Override
@@ -75,18 +80,21 @@
         if(!isPhoneValid){
             return Result.error("手机号格式不正确!");
         }
-
+        SystemConfiguration systemConfiguration = systemConfigurationMapper.selectById(1);
+        if(ObjectUtil.isEmpty(systemConfiguration)){
+            return Result.error("无可用支付方式!");
+        }
         long count = count(new LambdaQueryWrapper<UserPolicy>()
                 .eq(UserPolicy::getUserId, userAccount.getId())
                 .eq(UserPolicy::getProductId,dto.getProductId())
                 .eq(UserPolicy::getPolicyStatus, UserPolicy.PolicyStatus.PENDING)
-                .and(a-> a.eq(UserPolicy::getApprovalStatus, 0)
+                .and(a-> a.eq(UserPolicy::getApprovalStatus, 1)
                 .or()
-                .eq(UserPolicy::getPayStatus, 1))
+                .eq(UserPolicy::getPayStatus, 2))
 
         );
         if(count > 0){
-            return Result.error("请勿重复提交,如未支付请3-5分钟重新提交申请");
+            return Result.error("你已购此保险,请勿重复申请!");
         }
         InsuranceProduct insuranceProduct = insuranceProductService.getById(dto.getProductId());
         if(ObjectUtil.isEmpty(insuranceProduct)){
@@ -105,7 +113,8 @@
             String payOrder = payService.createOrder(
                     insuranceProduct.getPremium(),
                     orderNo,
-                    dto.getPayProductId()
+                    dto.getPayProductId(),
+                    systemConfiguration.getCallBackUrl()
             );
 
             Map<String, Object> parse = (Map<String, Object>) JSONUtils.parse(payOrder);
@@ -121,40 +130,53 @@
 
                     userAccountService.updateById(userAccount);
 
-                    UserPolicy userPolicy = new UserPolicy();
-                    userPolicy.setAccount(userAccount.getAccount());
-                    userPolicy.setProductName(insuranceProduct.getProductName());
-                    userPolicy.setUserId(userAccount.getId());
-                    userPolicy.setProductId(insuranceProduct.getId());
-                    userPolicy.setCoverageAmount(insuranceProduct.getCoverageAmount());
-                    userPolicy.setPremium(insuranceProduct.getPremium());
-                    userPolicy.setTerm(insuranceProduct.getTerm());
-                    userPolicy.setName(dto.getName());
-                    userPolicy.setGender(dto.getGender());
-                    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());
-                    userPolicy.setPolicyNumber(generatePolicyNumber());
-                    userPolicy.setPolicyStatus(UserPolicy.PolicyStatus.PENDING);
-                    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);
+                    UserPolicy one = getOne(new LambdaQueryWrapper<UserPolicy>()
+                            .eq(UserPolicy::getUserId, userAccount.getId())
+                            .eq(UserPolicy::getProductId, dto.getProductId())
+                            .eq(UserPolicy::getPolicyStatus, UserPolicy.PolicyStatus.PENDING)
+                            .eq(UserPolicy::getApprovalStatus, 0)
+                            .ne(UserPolicy::getPayStatus, 2)
+                    );
+                    PaymentMode payment = PaymentMode.getByCode(dto.getPayProductId());
+                    if(ObjectUtil.isEmpty(one)){
+                        UserPolicy userPolicy = new UserPolicy();
+                        userPolicy.setAccount(userAccount.getAccount());
+                        userPolicy.setProductName(insuranceProduct.getProductName());
+                        userPolicy.setUserId(userAccount.getId());
+                        userPolicy.setProductId(insuranceProduct.getId());
+                        userPolicy.setCoverageAmount(insuranceProduct.getCoverageAmount());
+                        userPolicy.setPremium(insuranceProduct.getPremium());
+                        userPolicy.setTerm(insuranceProduct.getTerm());
+                        userPolicy.setName(dto.getName());
+                        userPolicy.setGender(dto.getGender());
+                        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());
+                        userPolicy.setPolicyNumber(generatePolicyNumber());
+                        userPolicy.setPolicyStatus(UserPolicy.PolicyStatus.PENDING);
+                        userPolicy.setCreatedAt(new Date());
+                        userPolicy.setUpdatedAt(new Date());
+                        userPolicy.setApprovalStatus(0);
+                        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(),payment.getMode());
+                        return Result.success(payUrl);
+                    }else{
+                        extracted(userAccount, one.getId(), orderNo,PaymentRecord.PaymentStatus.PENDING.getCode(),one.getProductId(),one.getProductName(),payment.getMode());
+                        return Result.success(payUrl);
+                    }
                 case 401:
                     extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败",0);
                     return Result.error("未授权访问支付系统");
@@ -187,52 +209,85 @@
 
             String orderNo = generateOrderNo();
 
-            UserPolicy userPolicy = new UserPolicy();
-            userPolicy.setAccount(userAccount.getAccount());
-            userPolicy.setProductName(insuranceProduct.getProductName());
-            userPolicy.setUserId(userAccount.getId());
-            userPolicy.setProductId(insuranceProduct.getId());
-            userPolicy.setCoverageAmount(insuranceProduct.getCoverageAmount());
-            userPolicy.setPremium(insuranceProduct.getPremium());
-            userPolicy.setTerm(insuranceProduct.getTerm());
-            userPolicy.setName(dto.getName());
-            userPolicy.setGender(dto.getGender());
-            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());
-            userPolicy.setPolicyNumber(generatePolicyNumber());
-            userPolicy.setPolicyStatus(UserPolicy.PolicyStatus.PENDING);
-            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())
+            UserPolicy one = getOne(new LambdaQueryWrapper<UserPolicy>()
+                    .eq(UserPolicy::getUserId, userAccount.getId())
+                    .eq(UserPolicy::getProductId, dto.getProductId())
+                    .eq(UserPolicy::getPolicyStatus, UserPolicy.PolicyStatus.PENDING)
+                    .eq(UserPolicy::getApprovalStatus, 0)
+                    .ne(UserPolicy::getPayStatus, 2)
             );
-            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);
+            if(ObjectUtil.isEmpty(one)){
+                UserPolicy userPolicy = new UserPolicy();
+                userPolicy.setAccount(userAccount.getAccount());
+                userPolicy.setProductName(insuranceProduct.getProductName());
+                userPolicy.setUserId(userAccount.getId());
+                userPolicy.setProductId(insuranceProduct.getId());
+                userPolicy.setCoverageAmount(insuranceProduct.getCoverageAmount());
+                userPolicy.setPremium(insuranceProduct.getPremium());
+                userPolicy.setTerm(insuranceProduct.getTerm());
+                userPolicy.setName(dto.getName());
+                userPolicy.setGender(dto.getGender());
+                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());
+                userPolicy.setPolicyNumber(generatePolicyNumber());
+                userPolicy.setPolicyStatus(UserPolicy.PolicyStatus.PENDING);
+                userPolicy.setCreatedAt(new Date());
+                userPolicy.setUpdatedAt(new Date());
+                userPolicy.setApprovalStatus(0);
+                userPolicy.setModePayment(3);
+                userPolicy.setIsLifelong(insuranceProduct.getTerm() == 0 ? 0 : 1);
 
-            fundsLogService.addLog(userAccount.getId(), userAccount.getAccount(), insuranceProduct.getPremium(), OperationType.USER_ORDER);
-            // 生成资金日志
-            return Result.success();
+                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);
+
+                fundsLogService.addLog(userAccount.getId(), userAccount.getAccount(), insuranceProduct.getPremium(), OperationType.USER_ORDER);
+                // 生成资金日志
+                return Result.success();
+            }else{
+                one.setApprovalStatus(1);
+                updateById(one);
+
+                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(one.getProductId());
+                paymentRecord.setOrderId(one.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);
+
+                fundsLogService.addLog(userAccount.getId(), userAccount.getAccount(), insuranceProduct.getPremium(), OperationType.USER_ORDER);
+                // 生成资金日志
+                return Result.success();
+            }
         }
     }
 

--
Gitblit v1.9.3