From 2c7b7986f347961adec433e378a1f82434c7150e Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Sat, 11 Oct 2025 03:13:07 +0800
Subject: [PATCH] 1

---
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/PaymentRecordMapper.java            |   10 +
 ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java                              |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/UserKyc.java                        |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/UserPolicy.java                     |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java   |   51 +++++++
 ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java                            |    4 
 ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java         |   61 ++++++++--
 ruoyi-admin/src/main/java/com/ruoyi/im/task/MedicalInsuranceTask.java                  |   52 ++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/PaymentRecordServiceImpl.java |   14 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java      |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/PaymentRecordService.java          |    8 +
 ruoyi-system/src/main/java/com/ruoyi/system/domain/PaymentRecord.java                  |  130 +++++++++++++++++++++
 12 files changed, 324 insertions(+), 16 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
index 8b94057..7124381 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -5,6 +5,7 @@
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * 启动程序
@@ -12,6 +13,7 @@
  * @author ruoyi
  */
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@EnableScheduling
 public class RuoYiApplication
 {
     public static void main(String[] args)
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 4fc9535..30859d4 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java
@@ -21,6 +21,7 @@
 import com.ruoyi.system.domain.vo.UserAccountUpdateVo;
 import com.ruoyi.system.service.GroupWelcomeConfigService;
 import com.ruoyi.system.service.IpBlacklistService;
+import com.ruoyi.system.service.PaymentRecordService;
 import com.ruoyi.system.service.UserAccountService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -74,6 +75,8 @@
 
     @Autowired
     InsuranceFeatureService insuranceFeatureService;
+
+
 
     @Value("${file.upload-dir}")
     private String uploadDir;
@@ -401,6 +404,7 @@
             long count = userPolicyService.count(new LambdaQueryWrapper<>(UserPolicy.class)
                     .eq(UserPolicy::getUserId, userAccount.getId())
                     .eq(UserPolicy::getProductId,f.getId())
+                    .eq(UserPolicy::getPayStatus,2)
                     .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 af6a01e..ac35340 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,14 @@
 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.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 +42,10 @@
     UserAccountService userAccountService;
     @Autowired
     private PayService payService;
+    @Autowired
+    private PaymentRecordService paymentRecordService;
+    @Autowired
+    private UserKycService userKycService;
 
 
     @Override
@@ -75,7 +79,7 @@
 
         );
         if(count > 0){
-            return Result.error("你已申购此保险,请勿重复申购");
+            return Result.error("请勿重复提交,如未支付请3-5分钟重新提交申请");
         }
         InsuranceProduct insuranceProduct = insuranceProductService.getById(dto.getProductId());
         if(ObjectUtil.isEmpty(insuranceProduct)){
@@ -112,10 +116,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());
@@ -127,21 +131,22 @@
                     userPolicy.setIsLifelong(insuranceProduct.getTerm() == 0 ? 0 : 1);
 
                     save(userPolicy);
+                    extracted(userAccount, userPolicy.getId(), orderNo,PaymentRecord.PaymentStatus.PENDING.getCode(),userPolicy.getProductId(),userPolicy.getProductName());
                     return Result.success(payUrl);
-
                 case 401:
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败");
                     return Result.error("未授权访问支付系统");
-
                 case 403:
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败");
                     return Result.error("禁止访问支付系统");
-
                 case 404:
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败");
                     return Result.error("支付接口不存在");
-
                 case 0014: // 注意:0014可能是字符串,需要根据实际情况处理
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败");
                     return Result.error("当前支付不可用,请更换其他支付方式!");
-
                 default:
+                    extracted(userAccount, null, orderNo,PaymentRecord.PaymentStatus.FAILED.getCode(),null,"获取支付通道失败");
                     // 其他错误码
                     String message = (String) parse.get("message");
                     if (message != null && !message.isEmpty()) {
@@ -170,7 +175,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());
@@ -182,10 +187,42 @@
             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());
+            paymentRecordService.save(paymentRecord);
             return Result.success();
         }
     }
 
+    private void extracted(UserAccount userAccount, Integer userPolicyId, String orderNo,Integer payCode,Integer productId,String productName) {
+        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);
+        paymentRecord.setProductId(productId);
+        paymentRecord.setOrderId(userPolicyId);
+        paymentRecord.setPayOrdeNo(orderNo);
+        paymentRecordService.save(paymentRecord);
+    }
+
     private final Random random = new Random();
     /**
      * 生成随机订单号 (格式: 时间戳 + 6位随机数)
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 9908212..bbaf9d4 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
@@ -3,19 +3,25 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.im.service.MedicalInsuranceAccountService;
 import com.ruoyi.im.service.UserPolicyService;
+import com.ruoyi.im.service.impl.UserPolicyServiceImpl;
 import com.ruoyi.system.domain.MedicalInsuranceAccount;
+import com.ruoyi.system.domain.PaymentRecord;
 import com.ruoyi.system.domain.UserPolicy;
+import com.ruoyi.system.service.PaymentRecordService;
 import io.swagger.models.auth.In;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDate;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
+import java.util.stream.Collectors;
 
 /**
  * @program: ruoyiim
@@ -23,6 +29,7 @@
  * @create: 2025-09-21 14:21
  **/
 @Component
+@Slf4j
 public class MedicalInsuranceTask {
 
     @Autowired
@@ -34,6 +41,10 @@
 
     @Autowired
     MedicalInsuranceAccountService medicalInsuranceAccountService;
+
+    @Autowired
+    PaymentRecordService paymentRecordService;
+
 
     /**
      * 定时筛选用户保单状态
@@ -78,4 +89,45 @@
     public boolean isExpired(LocalDate endDate) {
         return LocalDate.now().isAfter(endDate);
     }
+
+
+
+    /**
+     * 定时清除未支付保单
+     */
+    @Scheduled(cron = "0 */1 * * * ?")
+    public void executeWithFixedDelay() {
+        try {
+            log.info("定时清除未支付保单定时任务开始执行,时间:{}", System.currentTimeMillis());
+            doBusiness();
+            log.info("定时清除未支付保单定时任务执行完成");
+        } catch (Exception e) {
+            log.error("定时清除未支付保单定时任务执行异常", e);
+        }
+    }
+
+    private void doBusiness() {
+        // 计算5分钟前的时间
+        Date fiveMinutesAgo = new Date(System.currentTimeMillis() - 5 * 60 * 1000);
+        log.info("查询条件:创建时间早于 {} 的未支付订单", fiveMinutesAgo);
+
+        // 查询所有创建时间超过5分钟且状态为待支付的订单
+        List<UserPolicy> list = userPolicyService.list(new LambdaQueryWrapper<UserPolicy>()
+                .eq(UserPolicy::getPayStatus, 1) // payStatus = 1 (待支付)
+                .lt(UserPolicy::getCreatedAt, fiveMinutesAgo) // 创建时间早于5分钟前
+                .orderByAsc(UserPolicy::getCreatedAt)
+        );
+
+        // 提取orderId列表
+        List<Integer> ids = list.stream()
+                .map(UserPolicy::getId) // 提取orderId字段
+                .collect(Collectors.toList());
+
+        List<PaymentRecord> records = paymentRecordService.list(new LambdaQueryWrapper<PaymentRecord>()
+                .in(PaymentRecord::getOrderId, ids)
+        );
+
+        userPolicyService.removeByIds(list);
+        userPolicyService.removeByIds(records);
+    }
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java
index 82ba300..4c35f6b 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java
@@ -170,7 +170,9 @@
         }
         if (StringUtils.isNotEmpty(userAccount.getNickname())) {
             userKyc.setNickName(userAccount.getNickname());
+            userKyc.setPhone(userAccount.getAccount());
         }
+
         return Result.success(userKyc);
     }
 }
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 4b1485e..2d398ab 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
@@ -20,8 +20,10 @@
 import com.ruoyi.system.domain.dto.PayCallbackDTO;
 import com.ruoyi.system.domain.dto.UserPolicyDto;
 import com.ruoyi.im.service.UserPolicyService;
+import com.ruoyi.system.service.PaymentRecordService;
 import com.ruoyi.system.service.UserAccountService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.catalina.User;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.transaction.annotation.Transactional;
@@ -62,8 +64,9 @@
 
     @Autowired
     InsuranceProductService insuranceProductService;
+
     @Autowired
-    private PayService payService;
+    PaymentRecordService paymentRecordService;
 
     @Value("${pay.key}")
     private String key;
@@ -158,6 +161,30 @@
 
 
     /**
+     * 保单列表
+     */
+    @GetMapping("/PaymentRecordList")
+    public TableDataInfo PaymentRecordList(@RequestParam(value = "payOrdeNo",required = false)  String payOrdeNo,
+                                           @RequestParam(value = "paymentStatus",required = false)  Integer paymentStatus) {
+        startPage();
+
+        LambdaQueryWrapper<PaymentRecord> wrapper = new LambdaQueryWrapper<>();
+
+        // 产品名称模糊查询
+        if (StringUtils.isNotEmpty(payOrdeNo)) {
+            wrapper.eq(PaymentRecord::getPayOrdeNo, payOrdeNo);
+        }
+        if (paymentStatus != null) {
+            wrapper.eq(PaymentRecord::getPaymentStatus, paymentStatus);
+        }
+        // 按创建时间倒序排列
+        wrapper.orderByDesc(PaymentRecord::getCreateTime);
+
+        List<PaymentRecord> list = paymentRecordService.list(wrapper);
+        return getDataTable(list);
+    }
+
+    /**
      * 保单审批
      */
     @GetMapping("/examine")
@@ -192,12 +219,15 @@
             }
 
             //计算到期时间
-            LocalDate expirationTime = calculateInsuranceEndDate(LocalDate.now(), userPolicy.getNumberDays());
+            LocalDate expirationTime = calculateInsuranceEndDate(LocalDate.now(), userPolicy.getTerm());
+            //保险金领取到期时间
+            LocalDate insuranceBenefitExpiryDate = calculateInsuranceEndDateToDay(LocalDate.now(), userPolicy.getNumberDays());
 
             userPolicy.setApprovalStatus(approvalStatus);
             userPolicy.setMessage(message);
             userPolicy.setStartDate(LocalDate.now());
             userPolicy.setEndDate(expirationTime);
+            userPolicy.setInsuranceBenefitExpiryDate(insuranceBenefitExpiryDate);
             userPolicy.setPolicyStatus(UserPolicy.PolicyStatus.ACTIVE);
             userPolicy.setUpdatedAt(new Date());
             userPolicyService.updateById(userPolicy);
@@ -217,6 +247,7 @@
             medicalInsuranceAccount.setAlreadyReceived(BigDecimal.ZERO);
             medicalInsuranceAccount.setAmountAlreadyUsed(BigDecimal.ZERO);
             medicalInsuranceAccount.setEffectiveDate(userPolicy.getStartDate());
+            medicalInsuranceAccount.setInsuranceBenefitExpiryDate(userPolicy.getInsuranceBenefitExpiryDate());
             medicalInsuranceAccount.setExpiryDate(userPolicy.getEndDate());
             medicalInsuranceAccount.setAccountStatus(MedicalInsuranceAccount.AccountStatus.ACTIVE);
             medicalInsuranceAccount.setCreatedAt(new Date());
@@ -427,7 +458,13 @@
         userPolicy.setUpdatedAt(new Date());
 
         boolean updateResult = userPolicyService.updateById(userPolicy);
-
+        PaymentRecord paymentRecord = paymentRecordService.getOne(new LambdaQueryWrapper<PaymentRecord>()
+                .eq(PaymentRecord::getPayOrdeNo, callbackDTO.getOrderId())
+        );
+        if(ObjectUtil.isNotEmpty(paymentRecord)){
+            paymentRecord.setPaymentStatus(PaymentRecord.PaymentStatus.PAID.getCode());
+            paymentRecordService.updateById(paymentRecord);
+        }
         if (updateResult) {
             log.info("支付成功处理完成: {}", callbackDTO.getOrderId());
             return true;
@@ -443,7 +480,13 @@
         userPolicy.setUpdatedAt(new Date());
 
         boolean updateResult = userPolicyService.updateById(userPolicy);
-
+        PaymentRecord paymentRecord = paymentRecordService.getOne(new LambdaQueryWrapper<PaymentRecord>()
+                .eq(PaymentRecord::getPayOrdeNo, callbackDTO.getOrderId())
+        );
+        if(ObjectUtil.isNotEmpty(paymentRecord)){
+            paymentRecord.setPaymentStatus(PaymentRecord.PaymentStatus.EXPIRED.getCode());
+            paymentRecordService.updateById(paymentRecord);
+        }
         if (updateResult) {
             log.info("支付超时处理完成: {}", callbackDTO.getOrderId());
             return true;
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
new file mode 100644
index 0000000..efcbc20
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/PaymentRecord.java
@@ -0,0 +1,130 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+/**
+ * 支付记录实体类
+ */
+@Data
+public class PaymentRecord {
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 用户ID
+     */
+    private Integer userId;
+
+    // 邀请码
+    private String invitationCode;
+
+    // 姓名
+    private String name;
+
+    // 账号(唯一)
+    private String account;
+
+    // 产品名称
+    private String productName;
+
+    /**
+     * 产品ID
+     */
+    private Integer productId;
+
+    /**
+     * 订单ID
+     */
+    private Integer orderId;
+
+    /**
+     * 支付状态
+     */
+    private Integer paymentStatus;
+
+    /**
+     * 支付订单号
+     */
+    private String payOrdeNo;
+
+    /**
+     * 新增时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     * 修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 支付状态枚举
+     */
+    public enum PaymentStatus {
+        FAILED(0, "拉取失败"),
+        PENDING(1, "待支付"),
+        PAID(2, "已支付"),
+        EXPIRED(3, "超时/过期");
+
+        private final Integer code;
+        private final String description;
+
+        PaymentStatus(Integer code, String description) {
+            this.code = code;
+            this.description = description;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+
+        public String getDescription() {
+            return description;
+        }
+
+        public static PaymentStatus getByCode(Integer code) {
+            for (PaymentStatus status : values()) {
+                if (status.getCode().equals(code)) {
+                    return status;
+                }
+            }
+            return null;
+        }
+
+        public static String getDescriptionByCode(Integer code) {
+            PaymentStatus status = getByCode(code);
+            return status != null ? status.getDescription() : "未知状态";
+        }
+    }
+
+    /**
+     * 获取支付状态描述
+     */
+    public String getPaymentStatusDesc() {
+        return PaymentStatus.getDescriptionByCode(this.paymentStatus);
+    }
+
+    /**
+     * 判断是否已支付
+     */
+    public boolean isPaid() {
+        return PaymentStatus.PAID.getCode().equals(this.paymentStatus);
+    }
+
+    /**
+     * 判断是否待支付
+     */
+    public boolean isPending() {
+        return PaymentStatus.PENDING.getCode().equals(this.paymentStatus);
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserKyc.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserKyc.java
index 7fceffb..603981e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserKyc.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserKyc.java
@@ -54,4 +54,8 @@
     //昵称
     @TableField(exist = false)
     private String nickName;
+
+    //手机
+    @TableField(exist = false)
+    private String phone;
 }
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 91d6675..31bfc00 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
@@ -74,6 +74,8 @@
     // 保险结束日期
     private LocalDate endDate;
 
+    // 领取失效日期
+    private LocalDate insuranceBenefitExpiryDate;
     // 是否终身保险 0:是  1:否
     private Integer isLifelong ;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/PaymentRecordMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/PaymentRecordMapper.java
new file mode 100644
index 0000000..330422c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/PaymentRecordMapper.java
@@ -0,0 +1,10 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.InsuranceProduct;
+import com.ruoyi.system.domain.PaymentRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PaymentRecordMapper extends BaseMapper<PaymentRecord> {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/PaymentRecordService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/PaymentRecordService.java
new file mode 100644
index 0000000..f1a93bf
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/PaymentRecordService.java
@@ -0,0 +1,8 @@
+package com.ruoyi.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.domain.PaymentRecord;
+import com.ruoyi.system.domain.UserAccount;
+
+public interface PaymentRecordService extends IService<PaymentRecord> {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/PaymentRecordServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/PaymentRecordServiceImpl.java
new file mode 100644
index 0000000..5ac9512
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/PaymentRecordServiceImpl.java
@@ -0,0 +1,14 @@
+package com.ruoyi.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.domain.IpBlacklist;
+import com.ruoyi.system.domain.PaymentRecord;
+import com.ruoyi.system.mapper.IpBlacklistMapper;
+import com.ruoyi.system.mapper.PaymentRecordMapper;
+import com.ruoyi.system.service.IpBlacklistService;
+import com.ruoyi.system.service.PaymentRecordService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PaymentRecordServiceImpl extends ServiceImpl<PaymentRecordMapper, PaymentRecord> implements PaymentRecordService {
+}

--
Gitblit v1.9.3