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-system/src/main/java/com/ruoyi/system/domain/UserPolicy.java                   |    3 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java |   38 +++++++++++++++++-
 ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java                          |    2 
 ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java       |   41 ++++++++++++++++----
 ruoyi-admin/src/main/java/com/ruoyi/im/task/MedicalInsuranceTask.java                |    2 
 ruoyi-admin/src/main/java/com/ruoyi/imenum/PaymentMode.java                          |   28 ++++++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/domain/PaymentRecord.java                |    3 +
 7 files changed, 103 insertions(+), 14 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java b/ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java
index 30859d4..bc0dc43 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java
@@ -404,7 +404,7 @@
             long count = userPolicyService.count(new LambdaQueryWrapper<>(UserPolicy.class)
                     .eq(UserPolicy::getUserId, userAccount.getId())
                     .eq(UserPolicy::getProductId,f.getId())
-                    .eq(UserPolicy::getPayStatus,2)
+                    .and(a->a.ne(UserPolicy::getPayStatus,2).or().ne(UserPolicy::getPayStatus,1))
                     .ne(UserPolicy::getApprovalStatus,2)
             );
             if(count > 0){
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 7ecf00c..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
@@ -13,6 +13,7 @@
 import com.ruoyi.im.service.UserPolicyService;
 import com.ruoyi.im.util.PayService;
 import com.ruoyi.im.util.ValidatorUtil;
+import com.ruoyi.imenum.PaymentMode;
 import com.ruoyi.system.domain.*;
 import com.ruoyi.system.domain.dto.UserPolicyDto;
 import com.ruoyi.system.mapper.UserPolicyMapper;
@@ -75,7 +76,7 @@
                 .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){
@@ -85,7 +86,7 @@
         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(),
@@ -128,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,"获取支付通道失败");
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败",0);
                     return Result.error("未授权访问支付系统");
                 case 403:
-                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败");
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败",0);
                     return Result.error("禁止访问支付系统");
                 case 404:
-                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败");
+                    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,"获取支付通道失败");
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败",0);
                     return Result.error("当前支付不可用,请更换其他支付方式!");
                 default:
-                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败");
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败",0);
                     // 其他错误码
                     String message = (String) parse.get("message");
                     if (message != null && !message.isEmpty()) {
@@ -155,6 +164,9 @@
                     }
             }
         }else{
+            if(userAccount.getBalance().compareTo(insuranceProduct.getPremium()) < 0){
+                return Result.error("余额不足!");
+            }
             userAccount.setBalance(userAccount.getBalance().subtract(insuranceProduct.getPremium()));
 
             userAccountService.updateById(userAccount);
@@ -183,6 +195,7 @@
             userPolicy.setCreatedAt(new Date());
             userPolicy.setUpdatedAt(new Date());
             userPolicy.setApprovalStatus(0);
+            userPolicy.setModePayment(3);
             userPolicy.setIsLifelong(insuranceProduct.getTerm() == 0 ? 0 : 1);
 
             save(userPolicy);
@@ -200,12 +213,15 @@
             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) {
+
+    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())
         );
@@ -216,9 +232,16 @@
         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.setOrderId(userPolicyId);
+
         paymentRecord.setPayOrdeNo(orderNo);
+        paymentRecord.setModePayment(modePayment);
         paymentRecordService.save(paymentRecord);
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/task/MedicalInsuranceTask.java b/ruoyi-admin/src/main/java/com/ruoyi/im/task/MedicalInsuranceTask.java
index 851e29e..13f487b 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/im/task/MedicalInsuranceTask.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/task/MedicalInsuranceTask.java
@@ -131,7 +131,7 @@
             userPolicyService.removeByIds(records);
         }
         if(!CollectionUtils.isEmpty(list)){
-            userPolicyService.removeByIds(list);
+            paymentRecordService.removeByIds(list);
         }
     }
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/imenum/PaymentMode.java b/ruoyi-admin/src/main/java/com/ruoyi/imenum/PaymentMode.java
new file mode 100644
index 0000000..ba2892f
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/imenum/PaymentMode.java
@@ -0,0 +1,28 @@
+package com.ruoyi.imenum;
+
+// 定义支付方式枚举
+public enum PaymentMode {
+    ALIPAY("0006", 1),
+    WECHAT("0007", 2);
+
+    private final String code;
+    private final int mode;
+
+    PaymentMode(String code, int mode) {
+        this.code = code;
+        this.mode = mode;
+    }
+
+    public static PaymentMode getByCode(String code) {
+        for (PaymentMode payment : values()) {
+            if (payment.code.equals(code)) {
+                return payment;
+            }
+        }
+        return null;
+    }
+
+    public int getMode() {
+        return mode;
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java
index 2d398ab..c7e9d4a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java
@@ -115,6 +115,7 @@
             List<UserPolicy> list = userPolicyService.list(new LambdaQueryWrapper<UserPolicy>()
                     .eq(UserPolicy::getUserId, userAccount.getId())
                     .eq(UserPolicy::getPayStatus,2)
+                    .eq(UserPolicy::getApprovalStatus,1)
             );
             return Result.success(list);
         }catch (Exception e){
@@ -161,15 +162,19 @@
 
 
     /**
-     * 保单列表
+     * 支付记录列表
      */
     @GetMapping("/PaymentRecordList")
-    public TableDataInfo PaymentRecordList(@RequestParam(value = "payOrdeNo",required = false)  String payOrdeNo,
+    public TableDataInfo PaymentRecordList( @RequestParam(value = "account",required = false)  String account,
+            @RequestParam(value = "payOrdeNo",required = false)  String payOrdeNo,
                                            @RequestParam(value = "paymentStatus",required = false)  Integer paymentStatus) {
         startPage();
 
         LambdaQueryWrapper<PaymentRecord> wrapper = new LambdaQueryWrapper<>();
 
+        if (StringUtils.isNotEmpty(account)) {
+            wrapper.eq(PaymentRecord::getAccount, account);
+        }
         // 产品名称模糊查询
         if (StringUtils.isNotEmpty(payOrdeNo)) {
             wrapper.eq(PaymentRecord::getPayOrdeNo, payOrdeNo);
@@ -226,7 +231,7 @@
             userPolicy.setApprovalStatus(approvalStatus);
             userPolicy.setMessage(message);
             userPolicy.setStartDate(LocalDate.now());
-            userPolicy.setEndDate(expirationTime);
+            userPolicy.setEndDate(expirationTime.minusDays(1));
             userPolicy.setInsuranceBenefitExpiryDate(insuranceBenefitExpiryDate);
             userPolicy.setPolicyStatus(UserPolicy.PolicyStatus.ACTIVE);
             userPolicy.setUpdatedAt(new Date());
@@ -514,4 +519,31 @@
             throw new RuntimeException("MD5加密失败", e);
         }
     }
+
+    /**
+     * 保单列表
+     */
+    @GetMapping("/deleteRecordById")
+    public AjaxResult PaymentRecordList(@RequestParam(value = "id",required = false)  Integer id) {
+        // 查询所有创建时间超过5分钟且状态为待支付的订单
+        PaymentRecord byId = paymentRecordService.getById(id);
+        if(ObjectUtil.isEmpty(byId)){
+            return AjaxResult.error("订单不存在!");
+        }
+        if(byId.getPaymentStatus() == 2){
+            return AjaxResult.error("订单已支付,禁止删除");
+        }
+        UserPolicy userPolicy = userPolicyService.getById(byId.getOrderId());
+        if(ObjectUtil.isEmpty(userPolicy)){
+            return AjaxResult.error("保单不存在!");
+        }
+        if(userPolicy.getPayStatus() == 2){
+            return AjaxResult.error("订单已支付,禁止删除");
+        }
+
+        paymentRecordService.removeById(byId);
+        userPolicyService.removeById(userPolicy);
+        return AjaxResult.success("删除成功");
+    }
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/PaymentRecord.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/PaymentRecord.java
index efcbc20..35e9351 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/PaymentRecord.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/PaymentRecord.java
@@ -55,6 +55,9 @@
      */
     private String payOrdeNo;
 
+    //支付方式  1 支付宝 2微信  3余额
+    private Integer modePayment;
+
     /**
      * 新增时间
      */
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserPolicy.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserPolicy.java
index 31bfc00..c8debd5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserPolicy.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserPolicy.java
@@ -100,6 +100,9 @@
     //支付失败原因
     private String payMsg;
 
+    //支付方式  1 支付宝 2微信  3余额
+    private Integer modePayment;
+
     // 性别枚举 M:男  F:女  OTHER:其他
     public enum Gender {
         M, F, OTHER

--
Gitblit v1.9.3