1
zj
2025-09-22 ee09665193c0e91997a9eb880aefbaa5c7342b24
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java
@@ -3,6 +3,7 @@
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.im.comm.Result;
import com.ruoyi.im.service.InsuranceProductService;
import com.ruoyi.im.service.UserPolicyService;
@@ -17,6 +18,10 @@
import org.springframework.stereotype.Service;
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;
@@ -32,14 +37,17 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result purchaseApplication(UserPolicyDto dto) {
    public Result purchaseApplication(UserPolicyDto dto) throws ParseException {
        UserAccount userAccount = userAccountService.getOne(new LambdaQueryWrapper<UserAccount>()
                .eq(UserAccount::getAccount,dto.getAccount()));
        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("实名认证审核中,请耐心等等");
        }
        // 验证手机号
@@ -47,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());
@@ -64,7 +85,11 @@
        userPolicy.setTerm(insuranceProduct.getTerm());
        userPolicy.setName(dto.getName());
        userPolicy.setGender(dto.getGender());
        userPolicy.setBirthDate(dto.getBirthDate());
        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());