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-system/src/main/java/com/ruoyi/system/domain/SystemConfiguration.java                       |   14 ++
 ruoyi-admin/src/main/java/com/ruoyi/im/util/PayService.java                                       |    7 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java              |   25 ++-
 ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java                                       |   12 +
 ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java                    |  217 +++++++++++++++++++-----------
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/group/ImGroupController.java                   |   15 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/MedicalInsuranceAccountController.java |   59 ++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/domain/out/CollectionRecordOut.java                   |   28 ++++
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java                      |    1 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SystemConfigurationMapper.java                 |   10 +
 ruoyi-admin/src/main/resources/application.yml                                                    |    2 
 11 files changed, 286 insertions(+), 104 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 eaf433a..ebd454d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java
@@ -19,6 +19,7 @@
 import com.ruoyi.system.domain.out.UserOut;
 import com.ruoyi.system.domain.out.UserTeamAndPositionOut;
 import com.ruoyi.system.domain.vo.UserAccountUpdateVo;
+import com.ruoyi.system.mapper.SystemConfigurationMapper;
 import com.ruoyi.system.service.GroupWelcomeConfigService;
 import com.ruoyi.system.service.IpBlacklistService;
 import com.ruoyi.system.service.PaymentRecordService;
@@ -76,13 +77,12 @@
     @Autowired
     InsuranceFeatureService insuranceFeatureService;
 
-
+    @Autowired
+    private SystemConfigurationMapper systemConfigurationMapper;
 
     @Value("${file.upload-dir}")
     private String uploadDir;
 
-    @Value("${file.upload-prefix}")
-    private String prefix;
 
 
 
@@ -187,6 +187,10 @@
     public Result uploadFile(@RequestParam("file") MultipartFile file,@RequestParam("accountId") String accountId) {
         try {
 
+            SystemConfiguration systemConfiguration = systemConfigurationMapper.selectById(1);
+            if(ObjectUtil.isEmpty(systemConfiguration)){
+                return Result.error("文件上传失败!");
+            }
             // 1. 验证文件类型
             String contentType = file.getContentType();
             if (contentType == null ||
@@ -216,7 +220,7 @@
             setPermissions(filePath.toFile(), "rw-r--r--");
 
             // 5. 调用网易云信API更新头像
-            fileName = prefix+"/"+fileName;
+            fileName = systemConfiguration.getImgUrl()+"/"+fileName;
             UpdateUserBusinessDto dto = new UpdateUserBusinessDto();
             dto.setAvatar(fileName);
             Map<String, Object> result = imApiServcie.updateUserAvatar(accountId,dto);
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();
+            }
         }
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/util/PayService.java b/ruoyi-admin/src/main/java/com/ruoyi/im/util/PayService.java
index 28c5a52..e0d4097 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/im/util/PayService.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/util/PayService.java
@@ -30,13 +30,10 @@
     @Value("${pay.base-url}")
     private String baseUrl;
 
-    @Value("${pay.call-back-url}")
-    private String callBackUrl;
-
     /**
      * 创建支付订单 - 适配新支付系统(修正版)
      */
-    public String createOrder(BigDecimal amount, String orderNo,String payProductId) {
+    public String createOrder(BigDecimal amount, String orderNo,String payProductId,String callBackUrl) {
         try {
             Map<String, Object> params = new HashMap<>();
 
@@ -45,7 +42,7 @@
             params.put("channelCode", payProductId); // 通道码
             params.put("orderId", orderNo); // 订单号
             params.put("orderMoney", amount); // 金额(格式化金额)
-            params.put("callbackUrl", callBackUrl); // 回调地址
+            params.put("callbackUrl", callBackUrl+"/userPolicy/notify"); // 回调地址
 
             // 可选参数(根据业务需要添加)
             // params.put("returnUrl", returnUrl);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/group/ImGroupController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/group/ImGroupController.java
index d823fa6..4011139 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/group/ImGroupController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/group/ImGroupController.java
@@ -12,9 +12,11 @@
 import com.ruoyi.im.dto.UpdateUserBusinessDto;
 import com.ruoyi.im.service.NeteaseTeamService;
 import com.ruoyi.system.domain.NeteaseTeam;
+import com.ruoyi.system.domain.SystemConfiguration;
 import com.ruoyi.system.domain.UserAccount;
 import com.ruoyi.system.domain.vo.GroupVo;
 import com.ruoyi.system.domain.vo.UserAccountVo;
+import com.ruoyi.system.mapper.SystemConfigurationMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -44,11 +46,13 @@
     @Autowired
     NeteaseTeamService neteaseGroupService;
 
+
+    @Autowired
+    private SystemConfigurationMapper systemConfigurationMapper;
+
     @Value("${file.upload-dir}")
     private String uploadDir;
 
-    @Value("${file.upload-prefix}")
-    private String prefix;
 
     /**
      * 获取群组列表
@@ -124,6 +128,11 @@
     public Result uploadFile(@RequestParam("file") MultipartFile file) {
         try {
 
+            SystemConfiguration systemConfiguration = systemConfigurationMapper.selectById(1);
+            if(ObjectUtil.isEmpty(systemConfiguration)){
+                return Result.error("文件上传失败!");
+            }
+
             // 1. 验证文件类型
             String contentType = file.getContentType();
             if (contentType == null ||
@@ -153,7 +162,7 @@
             setPermissions(filePath.toFile(), "rw-r--r--");
 
             // 5. 调用网易云信API更新头像
-            fileName = prefix+"/"+fileName;
+            fileName = systemConfiguration.getImgUrl()+"/"+fileName;
             return Result.success("文件上传成功",fileName);
         } catch (IOException e) {
             return Result.error("文件上传失败");
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/MedicalInsuranceAccountController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/MedicalInsuranceAccountController.java
index 2164758..1671bcf 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/MedicalInsuranceAccountController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/MedicalInsuranceAccountController.java
@@ -1,16 +1,29 @@
 package com.ruoyi.web.controller.product;
 
 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.page.TableDataInfo;
 import com.ruoyi.im.comm.Result;
 import com.ruoyi.im.service.MedicalInsuranceAccountService;
+import com.ruoyi.system.domain.MedicalInsuranceAccount;
+import com.ruoyi.system.domain.MedicalInsuranceDailyClaim;
 import com.ruoyi.system.domain.UserPolicy;
+import com.ruoyi.system.domain.out.CollectionRecordOut;
+import com.ruoyi.system.mapper.MedicalInsuranceAccountMapper;
+import com.ruoyi.system.mapper.MedicalInsuranceDailyClaimMapper;
+import com.ruoyi.system.service.UserAccountService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.time.LocalDate;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReentrantLock;
 
 @RestController
 @RequestMapping("/MedicalInsuranceAccount")
@@ -18,6 +31,16 @@
 
     @Autowired
     MedicalInsuranceAccountService medicalInsuranceAccountService;
+
+    @Autowired
+    private MedicalInsuranceAccountMapper medicalInsuranceAccountMapper;
+
+    @Autowired
+    private MedicalInsuranceDailyClaimMapper medicalInsuranceDailyClaimMapper;
+
+    @Autowired
+    UserAccountService userAccountService;
+
 
     /**
      * 领取保险金
@@ -44,4 +67,40 @@
             return Result.error("获取失败!");
         }
     }
+
+
+    /**
+     * 领取记录
+     */
+    @GetMapping("/list")
+    public AjaxResult list(@RequestParam(value = "userId",required = true) String userId) {
+
+        MedicalInsuranceAccount medicalInsuranceAccount = medicalInsuranceAccountMapper.selectOne(new LambdaQueryWrapper<MedicalInsuranceAccount>()
+                .eq(MedicalInsuranceAccount::getUserId, userId)
+                .eq(MedicalInsuranceAccount::getAccountStatus, MedicalInsuranceAccount.AccountStatus.ACTIVE)
+        );
+        TableDataInfo rspData = new TableDataInfo();
+        if (medicalInsuranceAccount == null) {
+            return AjaxResult.error("用户医保账户未激活!");
+        }
+
+        // 检查今天是否已经领取
+        List<MedicalInsuranceDailyClaim> medicalInsuranceDailyClaims = medicalInsuranceDailyClaimMapper.selectList(new LambdaQueryWrapper<MedicalInsuranceDailyClaim>()
+                .eq(MedicalInsuranceDailyClaim::getUserId, userId)
+        );
+
+        CollectionRecordOut collectionRecordOut = new CollectionRecordOut();
+            List<CollectionRecordOut.RecordLog> recordLogList = new ArrayList<>();
+        collectionRecordOut.setNumber(medicalInsuranceDailyClaims.size());
+        collectionRecordOut.setMoney(medicalInsuranceAccount.getAlreadyReceived());
+        medicalInsuranceDailyClaims.forEach(f->{
+            CollectionRecordOut.RecordLog recordLog = new CollectionRecordOut.RecordLog();
+            recordLog.setReceiveTime(f.getClaimDate());
+            recordLog.setMoney(f.getClaimAmount());
+            recordLogList.add(recordLog);
+        });
+        collectionRecordOut.setRecords(recordLogList);
+        return AjaxResult.success(collectionRecordOut);
+    }
+
 }
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 a825d9f..8424adb 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
@@ -399,10 +399,16 @@
                 log.error("签名验证失败: {}", callbackDTO.getOrderId());
                 return "签名验证失败";
             }
-
+            PaymentRecord paymentRecord = paymentRecordService.getOne(new LambdaQueryWrapper<PaymentRecord>()
+                    .eq(PaymentRecord::getPayOrdeNo, callbackDTO.getOrderId())
+            );
+            if (paymentRecord == null) {
+                log.error("支付订单不存在: {}", paymentRecord.getPayOrdeNo());
+                return "支付订单不存在";
+            }
             // 2. 根据订单号查询保单
             UserPolicy userPolicy = userPolicyService.getOne(new LambdaQueryWrapper<UserPolicy>()
-                    .eq(UserPolicy::getOrderNo, callbackDTO.getOrderId()));
+                    .eq(UserPolicy::getId, paymentRecord.getOrderId()));
             if (userPolicy == null) {
                 log.error("订单不存在: {}", callbackDTO.getOrderId());
                 return "订单不存在";
@@ -561,17 +567,16 @@
         }
         if(byId.getPaymentStatus() == 2){
             return AjaxResult.error("订单已支付,禁止删除");
+        }else{
+            paymentRecordService.removeById(byId);
         }
         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);
+        if(ObjectUtil.isNotEmpty(userPolicy)  && userPolicy.getPayStatus() == 2){
+            return AjaxResult.error("订单已支付,禁止删除");
+        }else{
+            userPolicyService.removeById(userPolicy);
+        }
         return AjaxResult.success("删除成功");
     }
 
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 611b4d7..3c4ed51 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -159,4 +159,4 @@
   key: "2917adc37fd61cbfebc06e22bc91c824"
   channelCode: "0000"
   base-url: "https://xm53mksf233fd.top/agency/apis/pay/get"
-  call-back-url: "https://index-hou-duan68.abc.zkdmu.com/userPolicy/notify"
+  call-back-url: "https://index-hou-duan68.abc.zkdmu.com"
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
index 3ab5a65..c97df92 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -125,6 +125,7 @@
                     .antMatchers("/kyc/**").permitAll()
                     .antMatchers("/userPolicy/**").permitAll()
                     .antMatchers("/system/home/**").permitAll()
+                    .antMatchers("/MedicalInsuranceAccount/list").permitAll()
                     // 除上面外的所有请求全部需要鉴权认证
                     .anyRequest().authenticated();
             })
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SystemConfiguration.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SystemConfiguration.java
new file mode 100644
index 0000000..c0326f1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SystemConfiguration.java
@@ -0,0 +1,14 @@
+package com.ruoyi.system.domain;
+
+import lombok.Data;
+
+@Data
+public class SystemConfiguration {
+
+    private Integer id;
+
+    private String imgUrl;
+
+    private String callBackUrl;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/out/CollectionRecordOut.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/out/CollectionRecordOut.java
new file mode 100644
index 0000000..f2a4364
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/out/CollectionRecordOut.java
@@ -0,0 +1,28 @@
+package com.ruoyi.system.domain.out;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class CollectionRecordOut {
+
+    //已领取次数
+    private Integer number;
+    //已领取金额
+    private BigDecimal money;
+    //领取记录列表
+    private List<RecordLog> records;
+
+
+    @Data
+    public static class RecordLog{
+        //领取日期
+        private LocalDate receiveTime;
+        //领取金额
+        private BigDecimal money;
+    }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SystemConfigurationMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SystemConfigurationMapper.java
new file mode 100644
index 0000000..4969033
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SystemConfigurationMapper.java
@@ -0,0 +1,10 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.PaymentRecord;
+import com.ruoyi.system.domain.SystemConfiguration;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SystemConfigurationMapper extends BaseMapper<SystemConfiguration> {
+}

--
Gitblit v1.9.3