1
zj
2025-09-22 ee09665193c0e91997a9eb880aefbaa5c7342b24
1
7 files modified
113 ■■■■ changed files
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java 35 ●●●● patch | view | raw | blame | history
ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsuranceProductController.java 20 ●●●● patch | view | raw | blame | history
ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java 2 ●●● patch | view | raw | blame | history
ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java 40 ●●●●● patch | view | raw | blame | history
ruoyi-admin/src/main/resources/application-druid.yml 6 ●●●● patch | view | raw | blame | history
ruoyi-system/src/main/java/com/ruoyi/system/domain/UserPolicy.java 8 ●●●● patch | view | raw | blame | history
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java 2 ●●● patch | view | raw | blame | history
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());
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());
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);
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")
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:
                # 从数据源开关/默认关闭
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;
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;