1
zj
2025-10-12 84d42b6997ae87fa64b75ae085fce11d05a6ca5a
1
6 files modified
1 files added
117 ■■■■ changed files
ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java 2 ●●● patch | view | raw | blame | history
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java 41 ●●●● patch | view | raw | blame | history
ruoyi-admin/src/main/java/com/ruoyi/im/task/MedicalInsuranceTask.java 2 ●●● patch | view | raw | blame | history
ruoyi-admin/src/main/java/com/ruoyi/imenum/PaymentMode.java 28 ●●●●● patch | view | raw | blame | history
ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java 38 ●●●●● patch | view | raw | blame | history
ruoyi-system/src/main/java/com/ruoyi/system/domain/PaymentRecord.java 3 ●●●●● patch | view | raw | blame | history
ruoyi-system/src/main/java/com/ruoyi/system/domain/UserPolicy.java 3 ●●●●● patch | view | raw | blame | history
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){
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);
    }
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);
        }
    }
}
ruoyi-admin/src/main/java/com/ruoyi/imenum/PaymentMode.java
New file
@@ -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;
    }
}
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("删除成功");
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/domain/PaymentRecord.java
@@ -55,6 +55,9 @@
     */
    private String payOrdeNo;
    //支付方式  1 支付宝 2微信  3余额
    private Integer modePayment;
    /**
     * 新增时间
     */
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