From ee09665193c0e91997a9eb880aefbaa5c7342b24 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Mon, 22 Sep 2025 02:12:26 +0800
Subject: [PATCH] 1

---
 ruoyi-system/src/main/java/com/ruoyi/system/domain/UserPolicy.java                         |    8 +++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java       |   40 +++++++++++++++++++
 ruoyi-admin/src/main/resources/application-druid.yml                                       |    6 +-
 ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java             |   35 ++++++++++++++---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsuranceProductController.java |   20 +++++++---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java          |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java      |    2 
 7 files changed, 94 insertions(+), 19 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 18b9678..ddc3209 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
@@ -19,6 +19,9 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.text.ParseException;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.Random;
 import java.util.concurrent.atomic.AtomicLong;
@@ -40,8 +43,11 @@
         if(ObjectUtil.isEmpty(userAccount)){
             return Result.error("请重新登录,未查询到你的信息!");
         }
-        if(userAccount.getKycStatus() == 0){
+
+        if(userAccount.getKycStatus() == 2){
             return Result.error("请先实名认证");
+        }else if(userAccount.getKycStatus() == 0){
+            return Result.error("实名认证审核中,请耐心等等");
         }
 
         // 验证手机号
@@ -49,16 +55,29 @@
         if(!isPhoneValid){
             return Result.error("手机号格式不正确!");
         }
-        // 验证身份证
-        boolean isIdCardValid = ValidatorUtil.isValidIdCard(dto.getIdCard());
-        if(!isIdCardValid){
-            return Result.error("身份证格式不正确!");
+//        // 验证身份证
+//        boolean isIdCardValid = ValidatorUtil.isValidIdCard(dto.getIdCard());
+//        if(!isIdCardValid){
+//            return Result.error("身份证格式不正确!");
+//        }
+        long count = count(new LambdaQueryWrapper<UserPolicy>()
+                .eq(UserPolicy::getUserId, userAccount.getId())
+                .eq(UserPolicy::getPolicyStatus, UserPolicy.PolicyStatus.ACTIVE)
+                .or()
+                .eq(UserPolicy::getApprovalStatus, 0)
+                .or()
+                .eq(UserPolicy::getApprovalStatus, 1)
+        );
+        if(count > 0){
+            return Result.error("你已申购此保险,请勿重复申购");
         }
         InsuranceProduct insuranceProduct = insuranceProductService.getById(dto.getProductId());
         if(ObjectUtil.isEmpty(insuranceProduct)){
             return Result.error("该产品停止购买或已下架!");
         }
         UserPolicy userPolicy = new UserPolicy();
+        userPolicy.setAccount(userAccount.getAccount());
+        userPolicy.setProductName(insuranceProduct.getProductName());
         userPolicy.setUserId(userAccount.getId());
         userPolicy.setProductId(insuranceProduct.getId());
         userPolicy.setCoverageAmount(insuranceProduct.getCoverageAmount());
@@ -66,7 +85,11 @@
         userPolicy.setTerm(insuranceProduct.getTerm());
         userPolicy.setName(dto.getName());
         userPolicy.setGender(dto.getGender());
-        userPolicy.setBirthDate(DateUtils.parseDate(dto.getBirthDate(),"yyyy-MM-dd HH:mm:ss"));
+
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime dateTime = LocalDateTime.parse(dto.getBirthDate(), formatter);
+        userPolicy.setBirthDate(dateTime.toLocalDate());
+
         userPolicy.setOccupation(dto.getOccupation());
         userPolicy.setIdCard(dto.getIdCard());
         userPolicy.setPhone(dto.getPhone());
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsuranceProductController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsuranceProductController.java
index 2c9b1c8..1f838bf 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsuranceProductController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsuranceProductController.java
@@ -43,7 +43,7 @@
      */
     @PostMapping("/update")
     @Transactional(rollbackFor = Exception.class)
-    public AjaxResult update(InsuranceProductUpdateDTO dto) {
+    public AjaxResult update(@RequestBody InsuranceProductUpdateDTO dto) {
         // 1. 查询产品是否存在
         InsuranceProduct insuranceProduct = insuranceProductService.getById(dto.getId());
         if (insuranceProduct == null) {
@@ -84,13 +84,13 @@
         }
 
         // 4. 处理产品特色
-        if (dto.getFeatureDtoList() != null && !dto.getFeatureDtoList().isEmpty()) {
+        if (dto.getProductFeature() != null && !dto.getProductFeature().isEmpty()) {
             try {
                 // 先删除该产品原有的所有特色
                 deleteByProductId(insuranceProduct.getId());
 
                 // 转换DTO为实体并设置产品ID
-                List<InsuranceFeature> features = dto.getFeatureDtoList().stream()
+                List<InsuranceFeature> features = dto.getProductFeature().stream()
                         .map(f -> {
                             InsuranceFeature insuranceFeature = new InsuranceFeature();
                             insuranceFeature.setProductId(insuranceProduct.getId());
@@ -132,6 +132,9 @@
     @GetMapping("/get")
     public AjaxResult get(@RequestParam(value = "id") Integer id) {
         InsuranceProduct insuranceProduct = insuranceProductService.getById(id);
+        List<InsuranceFeature> features = insuranceFeatureService.list(new LambdaQueryWrapper<InsuranceFeature>()
+                .eq(InsuranceFeature::getProductId, insuranceProduct.getId()));
+        insuranceProduct.setProductFeature(features);
         return AjaxResult.success(insuranceProduct);
     }
 
@@ -165,6 +168,11 @@
         wrapper.orderByDesc(InsuranceProduct::getCreatedAt);
 
         List<InsuranceProduct> list = insuranceProductService.list(wrapper);
+        list.forEach(f->{
+            List<InsuranceFeature> features = insuranceFeatureService.list(new LambdaQueryWrapper<InsuranceFeature>()
+                    .eq(InsuranceFeature::getProductId, f.getId()));
+            f.setProductFeature(features);
+        });
         return getDataTable(list);
     }
 
@@ -173,7 +181,7 @@
      */
     @PostMapping("/create")
     @Transactional(rollbackFor = Exception.class)
-    public AjaxResult create(InsuranceProductUpdateDTO dto) {
+    public AjaxResult create(@RequestBody InsuranceProductUpdateDTO dto) {
         // 1. 检查产品代码是否已存在
         long count = insuranceProductService.count(new LambdaQueryWrapper<InsuranceProduct>().eq(InsuranceProduct::getProductCode, dto.getProductCode()));
         if (count > 0) {
@@ -222,10 +230,10 @@
         }
 
         // 4. 处理产品特色
-        if (dto.getFeatureDtoList() != null && !dto.getFeatureDtoList().isEmpty()) {
+        if (dto.getProductFeature() != null && !dto.getProductFeature().isEmpty()) {
             try {
                 // 转换DTO为实体并设置产品ID
-                List<InsuranceFeature> features = dto.getFeatureDtoList().stream()
+                List<InsuranceFeature> features = dto.getProductFeature().stream()
                         .map(f -> {
                             InsuranceFeature insuranceFeature = new InsuranceFeature();
                             insuranceFeature.setProductId(product.getId());
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 3bc0d78..df1efdc 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
@@ -90,7 +90,7 @@
             userKyc.setState(approvalStatus);
             userKyc.setMessage(message);
             userKyc.setUpdatedAt(new Date());
-
+            userKycService.updateById(userKyc);
             UserAccount userAccount = userAccountService.getById(userKyc.getUserId());
             userAccount.setKycStatus(approvalStatus);
             userAccountService.updateById(userAccount);
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 bcdc83c..a128a55 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
@@ -1,12 +1,16 @@
 package com.ruoyi.web.controller.product;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.im.comm.Result;
 import com.ruoyi.im.service.MedicalInsuranceAccountService;
+import com.ruoyi.system.domain.InsuranceProduct;
 import com.ruoyi.system.domain.MedicalInsuranceAccount;
 import com.ruoyi.system.domain.UserAccount;
 import com.ruoyi.system.domain.UserPolicy;
@@ -28,7 +32,7 @@
 
 @RestController
 @RequestMapping("/userPolicy")
-public class UserPolicyController {
+public class UserPolicyController extends BaseController {
 
     @Autowired
     UserPolicyService userPolicyService;
@@ -69,6 +73,40 @@
     }
 
     /**
+     * 保单列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(@RequestParam(value = "account",required = false) String account,
+                              @RequestParam(value = "approvalStatus",required = false) Integer approvalStatus,
+                              @RequestParam(value = "productName",required = false) String productName) {
+        startPage();
+
+        LambdaQueryWrapper<UserPolicy> wrapper = new LambdaQueryWrapper<>();
+
+        // 产品名称模糊查询
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(account)) {
+            wrapper.like(UserPolicy::getUserId, account);
+        }
+
+        // 产品代码模糊查询
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(productName)) {
+            wrapper.like(UserPolicy::getProductName, productName);
+        }
+
+        // 产品状态精确查询
+        if (approvalStatus != null) {
+            wrapper.eq(UserPolicy::getApprovalStatus, approvalStatus);
+        }
+
+        // 按创建时间倒序排列
+        wrapper.orderByDesc(UserPolicy::getCreatedAt);
+
+        List<UserPolicy> list = userPolicyService.list(wrapper);
+        return getDataTable(list);
+    }
+
+
+    /**
      * 保单审批
      */
     @GetMapping("/examine")
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 1b00ade..1fb4c8a 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,9 +6,9 @@
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://127.0.0.12:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-                username: root
-                password: ad8214f321db6415
+                url: jdbc:mysql://156.240.108.70:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                username: ruoyi
+                password: M6MhYJi6zACSR7nf
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭
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 c47ecdb..898c50e 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
@@ -23,8 +23,14 @@
     // 系统生成的用户ID
     private Integer userId;
 
+    // 账号(唯一)
+    private String account;
+
     // 保险产品ID
     private Integer productId;
+
+    // 产品名称
+    private String productName;
 
     // 保额
     private BigDecimal coverageAmount;
@@ -42,7 +48,7 @@
     private Gender gender;
 
     // 出生日期
-    private Date birthDate;
+    private LocalDate birthDate;
 
     // 职业
     private String occupation;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java
index 448943a..155e6c7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java
@@ -50,7 +50,7 @@
     private String liabilityExemption;
 
     //产品特色
-    private List<InsuranceFeatureDto> featureDtoList;
+    private List<InsuranceFeatureDto> productFeature;
 
     // 图片1
     private String img1;

--
Gitblit v1.9.3