From 1ff642981afabeea08cdf2ffc6607dafd6979b97 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 19 Sep 2025 02:53:26 +0800
Subject: [PATCH] 1
---
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/MedicalInsuranceAccountServiceImpl.java | 159 ++++++
ruoyi-system/src/main/java/com/ruoyi/system/domain/InsurancePosition.java | 31 +
ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsuranceProductController.java | 23
ruoyi-admin/src/main/java/com/ruoyi/im/service/MedicalInsuranceAccountService.java | 6
ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/MedicalInsuranceAccountController.java | 47 ++
ruoyi-admin/src/main/java/com/ruoyi/im/service/MedicalInsuranceDailyClaimService.java | 9
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserPolicyDto.java | 37 +
ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java | 82 +++
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsuranceFeatureServiceImpl.java | 11
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserKycServiceImpl.java | 14
ruoyi-system/src/main/java/com/ruoyi/system/mapper/MedicalInsuranceDailyClaimMapper.java | 17
ruoyi-system/src/main/java/com/ruoyi/system/domain/UserKyc.java | 42 +
ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsurancePositionController.java | 95 ++++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java | 140 ++++++
ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java | 6
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/RealNameAuthServviceImpl.java | 6
ruoyi-admin/src/main/java/com/ruoyi/im/service/InsuranceFeatureService.java | 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/InsurancePositiontMapper.java | 10
ruoyi-system/src/main/java/com/ruoyi/system/mapper/MedicalInsuranceAccountMapper.java | 5
ruoyi-system/src/main/java/com/ruoyi/system/domain/MedicalInsuranceDailyClaim.java | 32 +
ruoyi-system/src/main/java/com/ruoyi/system/domain/MedicalInsuranceAccount.java | 27
ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceProduct.java | 11
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/MedicalInsuranceDailyClaimServiceImpl.java | 11
ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountLock.java | 18
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsurancePositionDto.java | 19
ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserKycMapper.java | 8
ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceFeature.java | 5
ruoyi-system/src/main/java/com/ruoyi/system/domain/RealNameAuth.java | 6
/dev/null | 14
ruoyi-admin/src/main/java/com/ruoyi/im/service/RealNameAuthService.java | 2
ruoyi-admin/src/main/java/com/ruoyi/im/service/UserKycService.java | 8
ruoyi-system/src/main/java/com/ruoyi/system/domain/UserPolicy.java | 20
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsuranceProductServiceImpl.java | 11
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsurancePositionServiceImpl.java | 14
ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java | 105 ++++
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserKycDto.java | 29 +
ruoyi-admin/src/main/java/com/ruoyi/im/util/ValidatorUtil.java | 216 +++++++++
ruoyi-admin/src/main/java/com/ruoyi/im/service/InsuranceProductService.java | 2
ruoyi-admin/src/main/java/com/ruoyi/im/service/UserPolicyService.java | 11
ruoyi-admin/src/main/java/com/ruoyi/im/service/InsurancePositionService.java | 8
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java | 4
41 files changed, 1,263 insertions(+), 60 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 40eb0b2..b9c5693 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/ImApiController.java
@@ -12,6 +12,7 @@
import com.ruoyi.im.service.ImApiServcie;
import com.ruoyi.im.dto.RegisterDto;
import com.ruoyi.im.util.SymmetricCryptoUtil;
+import com.ruoyi.im.util.ValidatorUtil;
import com.ruoyi.system.domain.GroupWelcomeConfig;
import com.ruoyi.system.domain.IpBlacklist;
import com.ruoyi.system.domain.UserAccount;
@@ -71,6 +72,11 @@
@PostMapping("/register")
public Result register(@Validated RegisterDto dto){
try {
+ // 验证手机号
+ boolean isPhoneValid = ValidatorUtil.isValidPhone(dto.getAccount());
+ if(!isPhoneValid){
+ return Result.error("手机号格式不正确");
+ }
return imApiServcie.register(dto);
} catch (RuntimeException e) {
// 从异常消息中解析Result对象
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/InsuranceFeatureService.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/InsuranceFeatureService.java
similarity index 87%
rename from ruoyi-system/src/main/java/com/ruoyi/system/service/InsuranceFeatureService.java
rename to ruoyi-admin/src/main/java/com/ruoyi/im/service/InsuranceFeatureService.java
index 5925452..d1f3f4b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/InsuranceFeatureService.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/InsuranceFeatureService.java
@@ -1,4 +1,4 @@
-package com.ruoyi.system.service;
+package com.ruoyi.im.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.domain.GroupWelcomeConfig;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/InsurancePositionService.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/InsurancePositionService.java
new file mode 100644
index 0000000..ad39f5a
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/InsurancePositionService.java
@@ -0,0 +1,8 @@
+package com.ruoyi.im.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.domain.InsuranceFeature;
+import com.ruoyi.system.domain.InsurancePosition;
+
+public interface InsurancePositionService extends IService<InsurancePosition> {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/InsuranceProductService.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/InsuranceProductService.java
similarity index 87%
rename from ruoyi-system/src/main/java/com/ruoyi/system/service/InsuranceProductService.java
rename to ruoyi-admin/src/main/java/com/ruoyi/im/service/InsuranceProductService.java
index 93c83f0..723120e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/InsuranceProductService.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/InsuranceProductService.java
@@ -1,4 +1,4 @@
-package com.ruoyi.system.service;
+package com.ruoyi.im.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.domain.InsuranceFeature;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/MedicalInsuranceAccountService.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/MedicalInsuranceAccountService.java
similarity index 63%
rename from ruoyi-system/src/main/java/com/ruoyi/system/service/MedicalInsuranceAccountService.java
rename to ruoyi-admin/src/main/java/com/ruoyi/im/service/MedicalInsuranceAccountService.java
index f6b7c37..f6bfb40 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/MedicalInsuranceAccountService.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/MedicalInsuranceAccountService.java
@@ -1,8 +1,12 @@
-package com.ruoyi.system.service;
+package com.ruoyi.im.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.im.comm.Result;
import com.ruoyi.system.domain.InsuranceProduct;
import com.ruoyi.system.domain.MedicalInsuranceAccount;
public interface MedicalInsuranceAccountService extends IService<MedicalInsuranceAccount> {
+ Result getInsuranceBenefit(Integer id);
+
+ Result getReceiveStatus(Integer userId);
}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/MedicalInsuranceDailyClaimService.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/MedicalInsuranceDailyClaimService.java
new file mode 100644
index 0000000..65cb6ff
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/MedicalInsuranceDailyClaimService.java
@@ -0,0 +1,9 @@
+package com.ruoyi.im.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.domain.MedicalInsuranceDailyClaim;
+import com.ruoyi.system.domain.UserAccount;
+import org.springframework.stereotype.Service;
+
+public interface MedicalInsuranceDailyClaimService extends IService<MedicalInsuranceDailyClaim> {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/RealNameAuthService.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/RealNameAuthService.java
similarity index 87%
rename from ruoyi-system/src/main/java/com/ruoyi/system/service/RealNameAuthService.java
rename to ruoyi-admin/src/main/java/com/ruoyi/im/service/RealNameAuthService.java
index 9cba7c5..3da0661 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/RealNameAuthService.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/RealNameAuthService.java
@@ -1,4 +1,4 @@
-package com.ruoyi.system.service;
+package com.ruoyi.im.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.domain.MedicalInsuranceAccount;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/UserKycService.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/UserKycService.java
new file mode 100644
index 0000000..f475350
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/UserKycService.java
@@ -0,0 +1,8 @@
+package com.ruoyi.im.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.domain.UserKyc;
+import com.ruoyi.system.domain.UserPolicy;
+
+public interface UserKycService extends IService<UserKyc> {
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/UserPolicyService.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/UserPolicyService.java
new file mode 100644
index 0000000..2784e56
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/UserPolicyService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.im.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.im.comm.Result;
+import com.ruoyi.system.domain.RealNameAuth;
+import com.ruoyi.system.domain.UserPolicy;
+import com.ruoyi.system.domain.dto.UserPolicyDto;
+
+public interface UserPolicyService extends IService<UserPolicy> {
+ Result purchaseApplication(UserPolicyDto dto);
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsuranceFeatureServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsuranceFeatureServiceImpl.java
new file mode 100644
index 0000000..895c130
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsuranceFeatureServiceImpl.java
@@ -0,0 +1,11 @@
+package com.ruoyi.im.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.im.service.InsuranceFeatureService;
+import com.ruoyi.system.domain.InsuranceFeature;
+import com.ruoyi.system.mapper.InsuranceFeatureMapper;
+import org.springframework.stereotype.Service;
+
+@Service
+public class InsuranceFeatureServiceImpl extends ServiceImpl<InsuranceFeatureMapper, InsuranceFeature> implements InsuranceFeatureService {
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsurancePositionServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsurancePositionServiceImpl.java
new file mode 100644
index 0000000..8faa16c
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsurancePositionServiceImpl.java
@@ -0,0 +1,14 @@
+package com.ruoyi.im.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.im.service.InsurancePositionService;
+import com.ruoyi.im.service.InsuranceProductService;
+import com.ruoyi.system.domain.InsurancePosition;
+import com.ruoyi.system.domain.InsuranceProduct;
+import com.ruoyi.system.mapper.InsurancePositiontMapper;
+import com.ruoyi.system.mapper.InsuranceProductMapper;
+import org.springframework.stereotype.Service;
+
+@Service
+public class InsurancePositionServiceImpl extends ServiceImpl<InsurancePositiontMapper, InsurancePosition> implements InsurancePositionService {
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsuranceProductServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsuranceProductServiceImpl.java
new file mode 100644
index 0000000..d9ae0a5
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/InsuranceProductServiceImpl.java
@@ -0,0 +1,11 @@
+package com.ruoyi.im.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.im.service.InsuranceProductService;
+import com.ruoyi.system.domain.InsuranceProduct;
+import com.ruoyi.system.mapper.InsuranceProductMapper;
+import org.springframework.stereotype.Service;
+
+@Service
+public class InsuranceProductServiceImpl extends ServiceImpl<InsuranceProductMapper, InsuranceProduct> implements InsuranceProductService {
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/MedicalInsuranceAccountServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/MedicalInsuranceAccountServiceImpl.java
new file mode 100644
index 0000000..575ec0e
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/MedicalInsuranceAccountServiceImpl.java
@@ -0,0 +1,159 @@
+package com.ruoyi.im.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.mapper.MedicalInsuranceAccountMapper;
+import com.ruoyi.system.mapper.MedicalInsuranceDailyClaimMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import javax.xml.crypto.Data;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReentrantLock;
+
+@Service
+public class MedicalInsuranceAccountServiceImpl extends ServiceImpl<MedicalInsuranceAccountMapper, MedicalInsuranceAccount> implements MedicalInsuranceAccountService {
+
+ @Autowired
+ private MedicalInsuranceAccountMapper medicalInsuranceAccountMapper;
+
+ @Autowired
+ private MedicalInsuranceDailyClaimMapper medicalInsuranceDailyClaimMapper;
+
+ // 使用本地锁避免数据库锁竞争
+ private final ConcurrentHashMap<Integer, ReentrantLock> accountLocks = new ConcurrentHashMap<>();
+
+ @Override
+ public Result getInsuranceBenefit(Integer userId) {
+ synchronized (userId) {
+ // 获取账户本地锁
+ ReentrantLock accountLock = accountLocks.computeIfAbsent(userId, k -> new ReentrantLock());
+ accountLock.lock();
+
+ try {
+ MedicalInsuranceAccount account = medicalInsuranceAccountMapper.selectOne(new LambdaQueryWrapper<MedicalInsuranceAccount>()
+ .eq(MedicalInsuranceAccount::getUserId, userId)
+ .eq(MedicalInsuranceAccount::getAccountStatus, MedicalInsuranceAccount.AccountStatus.ACTIVE)
+ );
+ if (account == null) {
+ return Result.error("医保账户不存在");
+ }
+
+ // 检查账户状态
+ if (!"ACTIVE".equals(account.getAccountStatus())) {
+ return Result.error("保单已失效");
+ }
+
+ // 检查账户有效期
+ LocalDate now = LocalDate.now();
+ if (now.isBefore(account.getEffectiveDate()) ||
+ now.isAfter(account.getExpiryDate())) {
+ return Result.error("已过保单日期");
+ }
+ // 检查今天是否已经领取
+ LocalDate today = LocalDate.now();
+ Long todayCount = medicalInsuranceDailyClaimMapper.selectCount(new LambdaQueryWrapper<MedicalInsuranceDailyClaim>()
+ .eq(MedicalInsuranceDailyClaim::getUserId, userId)
+ .eq(MedicalInsuranceDailyClaim::getAccountId, account.getId())
+ .eq(MedicalInsuranceDailyClaim::getClaimDate, today)
+ );
+ if (todayCount > 0) {
+ return Result.error("今日已领取过金额");
+ }
+
+ if (account.getTotalQuota().compareTo(account.getAlreadyReceived()) == 0) {
+ return Result.error("你的保险额度已领取完!");
+ }
+
+ // 计算剩余天数
+ long remainingDays = ChronoUnit.DAYS.between(now, account.getExpiryDate()) + 1;
+
+ // 计算每日金额
+ BigDecimal dailyAmount = calculateDailyAmount(
+ account.getTotalQuota(), (int) remainingDays);
+
+ // 如果账户余额不足,则领取剩余全部金额
+ if (account.getAmountClaimed().compareTo(dailyAmount) < 0) {
+ dailyAmount = account.getAmountClaimed();
+ }
+
+ // 更新待领金额
+ account.setAmountClaimed(account.getAmountClaimed().subtract(dailyAmount));
+
+ // 更新已领取金额
+ BigDecimal currentAmountReceived = account.getAlreadyReceived() != null ?
+ account.getAlreadyReceived(): BigDecimal.ZERO;
+ account.setAlreadyReceived(currentAmountReceived.add(dailyAmount));
+
+ medicalInsuranceAccountMapper.updateById(account);
+
+ // 创建领取记录
+ MedicalInsuranceDailyClaim claim = new MedicalInsuranceDailyClaim();
+ claim.setAccountId(account.getId());
+ claim.setUserId(userId);
+ claim.setClaimDate(today);
+ claim.setClaimAmount(dailyAmount);
+ claim.setCreatedAt(new Date());
+ medicalInsuranceDailyClaimMapper.insert(claim);
+ return Result.success("领取成功");
+ }catch (Exception e){
+ e.printStackTrace();
+ log.error("领取保险金出错:"+e.getMessage());
+ }finally {
+ accountLock.unlock();
+ }
+ }
+ return Result.error("领取失败!");
+ }
+
+ @Override
+ public Result getReceiveStatus(Integer userId) {
+ MedicalInsuranceAccount account = medicalInsuranceAccountMapper.selectOne(new LambdaQueryWrapper<MedicalInsuranceAccount>()
+ .eq(MedicalInsuranceAccount::getUserId, userId)
+ .eq(MedicalInsuranceAccount::getAccountStatus, MedicalInsuranceAccount.AccountStatus.ACTIVE)
+ );
+ if (account == null) {
+ return Result.success(false);
+ }
+ // 检查账户状态
+ if (!"ACTIVE".equals(account.getAccountStatus())) {
+ return Result.success(false);
+ }
+ // 检查账户有效期
+ LocalDate now = LocalDate.now();
+ if (now.isBefore(account.getEffectiveDate()) ||
+ now.isAfter(account.getExpiryDate())) {
+ return Result.success(false);
+ }
+ // 检查今天是否已经领取
+ LocalDate today = LocalDate.now();
+ Long todayCount = medicalInsuranceDailyClaimMapper.selectCount(new LambdaQueryWrapper<MedicalInsuranceDailyClaim>()
+ .eq(MedicalInsuranceDailyClaim::getUserId, userId)
+ .eq(MedicalInsuranceDailyClaim::getAccountId, account.getId())
+ .eq(MedicalInsuranceDailyClaim::getClaimDate, today)
+ );
+ if (todayCount > 0) {
+ return Result.success(false);
+ }
+ return Result.success(true);
+ }
+
+
+ private BigDecimal calculateDailyAmount(BigDecimal totalAmount, int totalDays) {
+ if (totalDays <= 0) {
+ return BigDecimal.ZERO;
+ }
+ // 使用四舍五入到分位
+ return totalAmount.divide(new BigDecimal(totalDays), 2, BigDecimal.ROUND_DOWN);
+ }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/MedicalInsuranceDailyClaimServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/MedicalInsuranceDailyClaimServiceImpl.java
new file mode 100644
index 0000000..ac3a246
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/MedicalInsuranceDailyClaimServiceImpl.java
@@ -0,0 +1,11 @@
+package com.ruoyi.im.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.domain.MedicalInsuranceDailyClaim;
+import com.ruoyi.im.service.MedicalInsuranceDailyClaimService;
+import com.ruoyi.system.mapper.MedicalInsuranceDailyClaimMapper;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MedicalInsuranceDailyClaimServiceImpl extends ServiceImpl<MedicalInsuranceDailyClaimMapper, MedicalInsuranceDailyClaim> implements MedicalInsuranceDailyClaimService {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RealNameAuthServviceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/RealNameAuthServviceImpl.java
similarity index 62%
rename from ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RealNameAuthServviceImpl.java
rename to ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/RealNameAuthServviceImpl.java
index c2e5f30..3af0714 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RealNameAuthServviceImpl.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/RealNameAuthServviceImpl.java
@@ -1,11 +1,9 @@
-package com.ruoyi.system.service.impl;
+package com.ruoyi.im.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.system.domain.MedicalInsuranceAccount;
+import com.ruoyi.im.service.RealNameAuthService;
import com.ruoyi.system.domain.RealNameAuth;
-import com.ruoyi.system.mapper.MedicalInsuranceAccountMapper;
import com.ruoyi.system.mapper.RealNameAuthMapper;
-import com.ruoyi.system.service.RealNameAuthService;
import org.springframework.stereotype.Service;
@Service
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserKycServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserKycServiceImpl.java
new file mode 100644
index 0000000..cdb9e86
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserKycServiceImpl.java
@@ -0,0 +1,14 @@
+package com.ruoyi.im.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.im.service.RealNameAuthService;
+import com.ruoyi.im.service.UserKycService;
+import com.ruoyi.system.domain.RealNameAuth;
+import com.ruoyi.system.domain.UserKyc;
+import com.ruoyi.system.mapper.RealNameAuthMapper;
+import com.ruoyi.system.mapper.UserKycMapper;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserKycServiceImpl extends ServiceImpl<UserKycMapper, UserKyc> implements UserKycService {
+}
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
new file mode 100644
index 0000000..10c667e
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java
@@ -0,0 +1,105 @@
+package com.ruoyi.im.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.im.comm.Result;
+import com.ruoyi.im.service.InsuranceProductService;
+import com.ruoyi.im.service.UserPolicyService;
+import com.ruoyi.im.util.ValidatorUtil;
+import com.ruoyi.system.domain.InsuranceProduct;
+import com.ruoyi.system.domain.UserAccount;
+import com.ruoyi.system.domain.UserPolicy;
+import com.ruoyi.system.domain.dto.UserPolicyDto;
+import com.ruoyi.system.mapper.UserPolicyMapper;
+import com.ruoyi.system.service.UserAccountService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.Random;
+import java.util.concurrent.atomic.AtomicLong;
+
+@Service
+public class UserPolicyServiceImpl extends ServiceImpl<UserPolicyMapper, UserPolicy> implements UserPolicyService {
+
+ @Autowired
+ InsuranceProductService insuranceProductService;
+ @Autowired
+ UserAccountService userAccountService;
+
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Result purchaseApplication(UserPolicyDto dto) {
+ UserAccount userAccount = userAccountService.getById(dto.getUserId());
+ if(ObjectUtil.isEmpty(userAccount)){
+ return Result.error("请重新登录,未查询到你的信息!");
+ }
+ // 验证手机号
+ boolean isPhoneValid = ValidatorUtil.isValidPhone(dto.getPhone());
+ if(!isPhoneValid){
+ return Result.error("手机号格式不正确!");
+ }
+ // 验证身份证
+ boolean isIdCardValid = ValidatorUtil.isValidIdCard(dto.getIdCard());
+ if(!isIdCardValid){
+ return Result.error("身份证格式不正确!");
+ }
+ InsuranceProduct insuranceProduct = insuranceProductService.getById(dto.getProductId());
+ if(ObjectUtil.isEmpty(insuranceProduct)){
+ return Result.error("该产品停止购买或已下架!");
+ }
+ UserPolicy userPolicy = new UserPolicy();
+ 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.setBirthDate(dto.getBirthDate());
+ 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.setIsLifelong(insuranceProduct.getTerm() == 0 ? 0 : 1);
+
+ save(userPolicy);
+ return Result.success("购买成功,注意查看资料审核状态!");
+ }
+
+ // 使用原子长整型确保线程安全
+ private static final AtomicLong lastTimestamp = new AtomicLong(0);
+ private static final Random random = new Random();
+ private static final String PREFIX = "POL";
+
+ /**
+ * 基于时间毫秒生成唯一保单号
+ * 格式: POL + 时间戳 + 随机数
+ * 示例: POL16973512345671234
+ */
+ public static String generatePolicyNumber() {
+ long currentTimestamp = System.currentTimeMillis();
+ long lastTime = lastTimestamp.get();
+
+ // 如果时间戳相同,增加序列号
+ if (currentTimestamp == lastTime) {
+ // 等待下一毫秒
+ while (currentTimestamp <= lastTime) {
+ currentTimestamp = System.currentTimeMillis();
+ }
+ }
+ lastTimestamp.set(currentTimestamp);
+
+ // 生成4位随机数
+ int randomNum = random.nextInt(10000);
+ String randomStr = String.format("%04d", randomNum);
+
+ return PREFIX + currentTimestamp + randomStr;
+ }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/util/ValidatorUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/im/util/ValidatorUtil.java
new file mode 100644
index 0000000..8bd4378
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/util/ValidatorUtil.java
@@ -0,0 +1,216 @@
+package com.ruoyi.im.util;
+
+import java.util.regex.Pattern;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ValidatorUtil {
+
+ // 手机号正则表达式(匹配中国大陆手机号)
+ private static final String PHONE_REGEX = "^1[3-9]\\d{9}$";
+
+ // 身份证号正则表达式(18位)
+ private static final String ID_CARD_REGEX = "^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
+
+ // 省份代码映射
+ private static final Map<String, String> PROVINCE_CODES = new HashMap<>();
+
+ static {
+ // 初始化省份代码
+ PROVINCE_CODES.put("11", "北京");
+ PROVINCE_CODES.put("12", "天津");
+ PROVINCE_CODES.put("13", "河北");
+ PROVINCE_CODES.put("14", "山西");
+ PROVINCE_CODES.put("15", "内蒙古");
+ PROVINCE_CODES.put("21", "辽宁");
+ PROVINCE_CODES.put("22", "吉林");
+ PROVINCE_CODES.put("23", "黑龙江");
+ PROVINCE_CODES.put("31", "上海");
+ PROVINCE_CODES.put("32", "江苏");
+ PROVINCE_CODES.put("33", "浙江");
+ PROVINCE_CODES.put("34", "安徽");
+ PROVINCE_CODES.put("35", "福建");
+ PROVINCE_CODES.put("36", "江西");
+ PROVINCE_CODES.put("37", "山东");
+ PROVINCE_CODES.put("41", "河南");
+ PROVINCE_CODES.put("42", "湖北");
+ PROVINCE_CODES.put("43", "湖南");
+ PROVINCE_CODES.put("44", "广东");
+ PROVINCE_CODES.put("45", "广西");
+ PROVINCE_CODES.put("46", "海南");
+ PROVINCE_CODES.put("50", "重庆");
+ PROVINCE_CODES.put("51", "四川");
+ PROVINCE_CODES.put("52", "贵州");
+ PROVINCE_CODES.put("53", "云南");
+ PROVINCE_CODES.put("54", "西藏");
+ PROVINCE_CODES.put("61", "陕西");
+ PROVINCE_CODES.put("62", "甘肃");
+ PROVINCE_CODES.put("63", "青海");
+ PROVINCE_CODES.put("64", "宁夏");
+ PROVINCE_CODES.put("65", "新疆");
+ PROVINCE_CODES.put("71", "台湾");
+ PROVINCE_CODES.put("81", "香港");
+ PROVINCE_CODES.put("82", "澳门");
+ }
+
+ // 身份证校验码权重
+ private static final int[] ID_CARD_WEIGHT = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
+
+ // 身份证校验码对应值
+ private static final char[] ID_CARD_CHECK_CODE = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
+
+ /**
+ * 验证手机号格式
+ * @param phone 手机号码
+ * @return 是否有效
+ */
+ public static boolean isValidPhone(String phone) {
+ if (phone == null || phone.trim().isEmpty()) {
+ return false;
+ }
+
+ // 移除可能的分隔符(如空格、短横线等)
+ String cleanedPhone = phone.replaceAll("[\\s-]+", "");
+
+ return Pattern.matches(PHONE_REGEX, cleanedPhone);
+ }
+
+ /**
+ * 验证身份证号格式
+ * @param idCard 身份证号码
+ * @return 是否有效
+ */
+ public static boolean isValidIdCard(String idCard) {
+ if (idCard == null || idCard.trim().isEmpty()) {
+ return false;
+ }
+
+ // 转换为大写以便统一处理
+ String cleanedIdCard = idCard.trim().toUpperCase();
+
+ // 基本格式校验
+ if (!Pattern.matches(ID_CARD_REGEX, cleanedIdCard)) {
+ return false;
+ }
+
+ // 校验省份代码
+ String provinceCode = cleanedIdCard.substring(0, 2);
+ if (!PROVINCE_CODES.containsKey(provinceCode)) {
+ return false;
+ }
+
+ // 校验生日日期
+ if (!isValidBirthday(cleanedIdCard.substring(6, 14))) {
+ return false;
+ }
+
+ // 校验校验码
+ return isValidCheckCode(cleanedIdCard);
+ }
+
+ /**
+ * 验证身份证中的生日日期是否有效
+ * @param birthdayStr 生日字符串(YYYYMMDD格式)
+ * @return 是否有效
+ */
+ private static boolean isValidBirthday(String birthdayStr) {
+ try {
+ int year = Integer.parseInt(birthdayStr.substring(0, 4));
+ int month = Integer.parseInt(birthdayStr.substring(4, 6));
+ int day = Integer.parseInt(birthdayStr.substring(6, 8));
+
+ // 检查年份范围(假设身份证持有者年龄在0-150岁之间)
+ int currentYear = Calendar.getInstance().get(Calendar.YEAR);
+ if (year < currentYear - 150 || year > currentYear) {
+ return false;
+ }
+
+ // 检查月份
+ if (month < 1 || month > 12) {
+ return false;
+ }
+
+ // 检查日期
+ if (day < 1 || day > 31) {
+ return false;
+ }
+
+ // 检查特定月份的天数
+ if ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30) {
+ return false;
+ }
+
+ // 检查闰年二月
+ if (month == 2) {
+ boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
+ if (isLeapYear && day > 29) {
+ return false;
+ }
+ if (!isLeapYear && day > 28) {
+ return false;
+ }
+ }
+
+ return true;
+ } catch (NumberFormatException e) {
+ return false;
+ }
+ }
+
+ /**
+ * 验证身份证校验码
+ * @param idCard 身份证号码
+ * @return 校验码是否正确
+ */
+ private static boolean isValidCheckCode(String idCard) {
+ try {
+ int sum = 0;
+ for (int i = 0; i < 17; i++) {
+ int digit = Character.getNumericValue(idCard.charAt(i));
+ sum += digit * ID_CARD_WEIGHT[i];
+ }
+
+ int mod = sum % 11;
+ char checkCode = ID_CARD_CHECK_CODE[mod];
+
+ return checkCode == idCard.charAt(17);
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ /**
+ * 测试方法
+ */
+ public static void main(String[] args) {
+ // 测试手机号验证
+ String[] testPhones = {
+ "13800138000",
+ "12345678901",
+ "1861234567",
+ "19612345678",
+ " 138-0013-8000 ",
+ "123abc45678"
+ };
+
+ System.out.println("手机号验证测试:");
+ for (String phone : testPhones) {
+ System.out.println(phone + " : " + isValidPhone(phone));
+ }
+
+ System.out.println("\n身份证验证测试:");
+ // 测试身份证验证
+ String[] testIdCards = {
+ "11010519491231002X", // 有效身份证
+ "123456789012345678", // 无效身份证
+ "110105194902300021", // 无效日期(非闰年2月30日)
+ "110105194913310022", // 无效月份
+ "999999200001010000" // 无效省份代码
+ };
+
+ for (String idCard : testIdCards) {
+ System.out.println(idCard + " : " + isValidIdCard(idCard));
+ }
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsurancePositionController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsurancePositionController.java
new file mode 100644
index 0000000..08440bb
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsurancePositionController.java
@@ -0,0 +1,95 @@
+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.service.impl.InsurancePositionServiceImpl;
+import com.ruoyi.system.domain.InsurancePosition;
+import com.ruoyi.system.domain.dto.InsurancePositionDto;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@RequestMapping("/insurancePosition")
+public class InsurancePositionController extends BaseController {
+
+ @Autowired
+ InsurancePositionServiceImpl service;
+
+ /**
+ * 新增保险职位
+ */
+ @PostMapping("/add")
+ public AjaxResult add(@Valid @RequestBody InsurancePositionDto dto) {
+ try {
+ InsurancePosition insurancePosition = new InsurancePosition();
+ insurancePosition.setPosition(dto.getPosition());
+ insurancePosition.setNumberPeople(dto.getNumberPeople());
+ insurancePosition.setRank(dto.getRank());
+ insurancePosition.setCreatedAt(new Date());
+ insurancePosition.setUpdatedAt(new Date());
+ service.save(insurancePosition);
+ return AjaxResult.success("添加成功");
+ }catch (Exception e){
+ e.getMessage();
+ return AjaxResult.error("添加失败!");
+ }
+ }
+
+
+
+ /**
+ * 删除产品
+ */
+ @DeleteMapping("/{id}")
+ public AjaxResult delete(@PathVariable Integer id) {
+ InsurancePosition position = service.getById(id);
+ if (position == null) {
+ return AjaxResult.error("产品不存在");
+ }
+
+ boolean success = service.removeById(id);
+ return success ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+ }
+
+ /**
+ * 产品信息列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list() {
+ startPage();
+ LambdaQueryWrapper<InsurancePosition> wrapper = new LambdaQueryWrapper<>();
+ // 按创建时间倒序排列
+ wrapper.orderByDesc(InsurancePosition::getCreatedAt);
+ List<InsurancePosition> list = service.list(wrapper);
+ return getDataTable(list);
+ }
+
+ /**
+ * 新增保险职位
+ */
+ @PostMapping("/update")
+ public AjaxResult update(@Valid @RequestBody InsurancePositionDto dto) {
+ try {
+ InsurancePosition position = service.getById(dto.getId());
+ if(position == null){
+ return AjaxResult.error("数据不存在!");
+ }
+ position.setPosition(dto.getPosition());
+ position.setNumberPeople(dto.getNumberPeople());
+ position.setRank(dto.getRank());
+ position.setUpdatedAt(new Date());
+ service.updateById(position);
+ return AjaxResult.success("修改成功");
+ }catch (Exception e){
+ e.getMessage();
+ return AjaxResult.error("修改失败!");
+ }
+ }
+}
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 dc8f09d..7912fae 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
@@ -1,24 +1,21 @@
package com.ruoyi.web.controller.product;
-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.page.TableDataInfo;
-import com.ruoyi.im.util.ConverterUtil;
-import com.ruoyi.system.domain.GroupWelcomeConfig;
import com.ruoyi.system.domain.InsuranceFeature;
import com.ruoyi.system.domain.InsuranceProduct;
-import com.ruoyi.system.domain.IpBlacklist;
import com.ruoyi.system.domain.dto.InsuranceProductUpdateDTO;
-import com.ruoyi.system.service.InsuranceFeatureService;
-import com.ruoyi.system.service.InsuranceProductService;
+import com.ruoyi.im.service.InsuranceFeatureService;
+import com.ruoyi.im.service.InsuranceProductService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
+import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
@@ -76,7 +73,6 @@
insuranceProduct.setGuaranteeExplanation(dto.getGuaranteeExplanation());
insuranceProduct.setInsureAge(dto.getInsureAge());
insuranceProduct.setObligationDisclose(dto.getObligationDisclose());
- insuranceProduct.setProductFeature(dto.getProductFeature());
insuranceProduct.setLiabilityExemption(dto.getLiabilityExemption());
insuranceProduct.setImg1(dto.getImg1());
insuranceProduct.setImg2(dto.getImg2());
@@ -101,8 +97,8 @@
insuranceFeature.setProductId(insuranceProduct.getId());
insuranceFeature.setTitle(f.getTitle());
insuranceFeature.setDetail(f.getDetail());
- insuranceFeature.setCreatedAt(LocalDateTime.now());
- insuranceFeature.setUpdatedAt(LocalDateTime.now());
+ insuranceFeature.setCreatedAt(new Date());
+ insuranceFeature.setUpdatedAt(new Date());
return insuranceFeature;
})
.collect(Collectors.toList());
@@ -209,14 +205,13 @@
product.setGuaranteeExplanation(dto.getGuaranteeExplanation());
product.setInsureAge(dto.getInsureAge());
product.setObligationDisclose(dto.getObligationDisclose());
- product.setProductFeature(dto.getProductFeature());
product.setLiabilityExemption(dto.getLiabilityExemption());
product.setImg1(dto.getImg1());
product.setImg2(dto.getImg2());
// 设置创建时间和更新时间
- product.setCreatedAt(LocalDateTime.now());
- product.setUpdatedAt(LocalDateTime.now());
+ product.setCreatedAt(new Date());
+ product.setUpdatedAt(new Date());
// 3. 保存产品信息
boolean productSuccess = insuranceProductService.save(product);
@@ -235,8 +230,8 @@
insuranceFeature.setProductId(product.getId());
insuranceFeature.setTitle(f.getTitle());
insuranceFeature.setDetail(f.getDetail());
- insuranceFeature.setCreatedAt(LocalDateTime.now());
- insuranceFeature.setUpdatedAt(LocalDateTime.now());
+ insuranceFeature.setCreatedAt(new Date());
+ insuranceFeature.setUpdatedAt(new Date());
return insuranceFeature;
})
.collect(Collectors.toList());
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
new file mode 100644
index 0000000..617a077
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/MedicalInsuranceAccountController.java
@@ -0,0 +1,47 @@
+package com.ruoyi.web.controller.product;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.im.comm.Result;
+import com.ruoyi.im.service.MedicalInsuranceAccountService;
+import com.ruoyi.system.domain.UserPolicy;
+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.util.List;
+
+@RestController
+@RequestMapping("/MedicalInsuranceAccount")
+public class MedicalInsuranceAccountController {
+
+ @Autowired
+ MedicalInsuranceAccountService medicalInsuranceAccountService;
+
+ /**
+ * 领取保险金
+ */
+ @GetMapping("/getInsuranceBenefit")
+ public Result getInsuranceBenefit(@RequestParam(value = "id") Integer id) {
+ try {
+ return medicalInsuranceAccountService.getInsuranceBenefit(id);
+ }catch (Exception e){
+ e.getMessage();
+ return Result.error("购买失败!");
+ }
+ }
+
+ /**
+ * 领取保险金
+ */
+ @GetMapping("/getReceiveStatus")
+ public Result getReceiveStatus(@RequestParam(value = "userId") Integer userId) {
+ try {
+ return medicalInsuranceAccountService.getReceiveStatus(userId);
+ }catch (Exception e){
+ e.getMessage();
+ return Result.error("购买失败!");
+ }
+ }
+}
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
new file mode 100644
index 0000000..ac14b1c
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java
@@ -0,0 +1,82 @@
+package com.ruoyi.web.controller.product;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.im.comm.Result;
+import com.ruoyi.im.service.UserKycService;
+import com.ruoyi.im.service.impl.UserKycServiceImpl;
+import com.ruoyi.system.domain.UserAccount;
+import com.ruoyi.system.domain.UserKyc;
+import com.ruoyi.system.domain.UserPolicy;
+import com.ruoyi.system.domain.dto.UserKycDto;
+import com.ruoyi.system.domain.dto.UserPolicyDto;
+import com.ruoyi.system.mapper.UserKycMapper;
+import com.ruoyi.system.service.UserAccountService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Date;
+
+@RestController
+@RequestMapping("/kyc")
+public class UserKycController {
+
+ @Autowired
+ UserKycService userKycService;
+
+ @Autowired
+ UserAccountService userAccountService;
+
+ /**
+ * 保险购买申请
+ */
+ @PostMapping("/kycApply")
+ public Result kycApply(@Valid @RequestBody UserKycDto dto) {
+ try {
+ UserAccount userAccount = userAccountService.getById(dto.getUserId());
+ if(ObjectUtil.isEmpty(userAccount)){
+ return Result.error("请重新登录,未查询到你的信息!");
+ }
+ UserKyc userKyc = new UserKyc();
+ userKyc.setUserId(userAccount.getId());
+ userKyc.setState(0);
+ userKyc.setHeadPortraitImg(dto.getHeadPortraitImg());
+ userKyc.setNationalEmblemImg(dto.getNationalEmblemImg());
+ userKyc.setHandImg(dto.getHandImg());
+ userKycService.save(userKyc);
+ return Result.success("提交成功,请等待审核!");
+ }catch (Exception e){
+ e.getMessage();
+ return Result.error("购买失败");
+ }
+ }
+
+ /**
+ * 实名认证审批
+ */
+ @PostMapping("/examine")
+ public AjaxResult examine(@RequestParam(value = "id") Integer id, @RequestParam(value = "approvalStatus") Integer approvalStatus, @RequestParam(value = "message",required = false) String message) {
+ try {
+ UserKyc userKyc = userKycService.getById(id);
+ if(ObjectUtil.isEmpty(userKyc)){
+ return AjaxResult.error("实名认证数据不存在");
+ }
+ if(userKyc.getState() != 0){
+ return AjaxResult.error("订单已审批!");
+ }
+ if(approvalStatus == 2 && StringUtils.isEmpty(message)){
+ return AjaxResult.error("驳回理由不能为空!");
+ }
+ userKyc.setState(approvalStatus);
+ userKyc.setMessage(message);
+ userKyc.setUpdatedAt(new Date());
+ return AjaxResult.success("审批成功");
+ }catch (Exception e){
+ e.getMessage();
+ return AjaxResult.error("审批失败!");
+ }
+ }
+
+}
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
new file mode 100644
index 0000000..299b4bb
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java
@@ -0,0 +1,140 @@
+package com.ruoyi.web.controller.product;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.im.comm.Result;
+import com.ruoyi.im.service.MedicalInsuranceAccountService;
+import com.ruoyi.system.domain.MedicalInsuranceAccount;
+import com.ruoyi.system.domain.UserPolicy;
+import com.ruoyi.system.domain.dto.UserPolicyDto;
+import com.ruoyi.im.service.UserPolicyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@RequestMapping("/userPolicy")
+public class UserPolicyController {
+
+ @Autowired
+ UserPolicyService userPolicyService;
+
+ @Autowired
+ MedicalInsuranceAccountService medicalInsuranceAccountService;
+
+ /**
+ * 保险购买申请
+ */
+ @PostMapping("/purchaseApplication")
+ public Result purchaseApplication(@Valid @RequestBody UserPolicyDto dto) {
+ try {
+ return userPolicyService.purchaseApplication(dto);
+ }catch (Exception e){
+ e.getMessage();
+ return Result.error("购买失败");
+ }
+ }
+
+ /**
+ * 根据用户id查询保单
+ */
+ @GetMapping("/getPolicyById")
+ public Result getPolicyById(@RequestParam(value = "id") Integer id) {
+ try {
+ List<UserPolicy> list = userPolicyService.list(new LambdaQueryWrapper<UserPolicy>().eq(UserPolicy::getUserId, id));
+ return Result.success(list);
+ }catch (Exception e){
+ e.getMessage();
+ return Result.error("购买失败");
+ }
+ }
+
+ /**
+ * 保单审批
+ */
+ @PostMapping("/examine")
+ @Transactional
+ public AjaxResult examine(@RequestParam(value = "id") Integer id, @RequestParam(value = "approvalStatus") Integer approvalStatus, @RequestParam(value = "message",required = false) String message) {
+ try {
+ UserPolicy userPolicy = userPolicyService.getById(id);
+ if(ObjectUtil.isEmpty(userPolicy)){
+ return AjaxResult.error("订单不存在");
+ }
+ if(userPolicy.getApprovalStatus() != 0){
+ return AjaxResult.error("订单已审批!");
+ }
+ if(approvalStatus == 2 && StringUtils.isEmpty(message)){
+ return AjaxResult.error("驳回理由不能为空!");
+ }
+
+ //计算到期时间
+ LocalDate expirationTime = calculateInsuranceEndDate(LocalDate.now(), userPolicy.getTerm());
+
+ userPolicy.setApprovalStatus(approvalStatus);
+ userPolicy.setMessage(message);
+ userPolicy.setStartDate(LocalDate.now());
+ userPolicy.setEndDate(expirationTime);
+ userPolicy.setPolicyStatus(UserPolicy.PolicyStatus.ACTIVE);
+ userPolicy.setUpdatedAt(new Date());
+ userPolicyService.updateById(userPolicy);
+
+ MedicalInsuranceAccount medicalInsuranceAccount = new MedicalInsuranceAccount();
+ medicalInsuranceAccount.setUserId(userPolicy.getUserId());
+ medicalInsuranceAccount.setPolicyId(userPolicy.getId());
+ medicalInsuranceAccount.setProductId(userPolicy.getProductId());
+ medicalInsuranceAccount.setTotalQuota(userPolicy.getCoverageAmount());
+ medicalInsuranceAccount.setRemainingBalance(BigDecimal.ZERO);
+ medicalInsuranceAccount.setAmountClaimed(userPolicy.getCoverageAmount());
+ medicalInsuranceAccount.setAlreadyReceived(BigDecimal.ZERO);
+ medicalInsuranceAccount.setAmountAlreadyUsed(BigDecimal.ZERO);
+ medicalInsuranceAccount.setEffectiveDate(userPolicy.getStartDate());
+ medicalInsuranceAccount.setExpiryDate(userPolicy.getEndDate());
+ medicalInsuranceAccount.setAccountStatus(MedicalInsuranceAccount.AccountStatus.ACTIVE);
+ medicalInsuranceAccount.setCreatedAt(new Date());
+ medicalInsuranceAccount.setUpdatedAt(new Date());
+ medicalInsuranceAccountService.save(medicalInsuranceAccount);
+ return AjaxResult.success("审批成功");
+ }catch (Exception e){
+ e.getMessage();
+ return AjaxResult.error("审批失败!");
+ }
+ }
+
+ /**
+ * 计算保险到期日
+ * @param startDate 保险开始日期
+ * @param termYears 保险年限
+ * @return 保险到期日期
+ */
+ public static LocalDate calculateInsuranceEndDate(LocalDate startDate, int termYears) {
+ return calculateDateAfterYears(startDate, termYears);
+ }
+
+ /**
+ * 根据基准日期和年限推算日期
+ */
+ public static LocalDate calculateDateAfterYears(LocalDate baseDate, int years) {
+ validateBaseDate(baseDate);
+ return baseDate.plusYears(years);
+ }
+
+ /**
+ * 验证基准日期
+ */
+ private static void validateBaseDate(LocalDate baseDate) {
+ if (baseDate == null) {
+ throw new IllegalArgumentException("基准日期不能为null");
+ }
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountLock.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountLock.java
new file mode 100644
index 0000000..81cdd28
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountLock.java
@@ -0,0 +1,18 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+import java.time.LocalDateTime;
+
+@Data
+public class AccountLock {
+ @TableId(type = IdType.AUTO)
+ private Long accountId; // 账户ID
+
+ private Integer lockVersion = 0; // 锁版本号
+
+ private LocalDateTime lockedAt; // 锁定时间
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceFeature.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceFeature.java
index 4f3be85..0abdc63 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceFeature.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceFeature.java
@@ -5,6 +5,7 @@
import lombok.Data;
import java.time.LocalDateTime;
+import java.util.Date;
/**
* 保险产品特色实体类
@@ -25,8 +26,8 @@
private String detail;
// 创建时间
- private LocalDateTime createdAt;
+ private Date createdAt;
// 更新时间
- private LocalDateTime updatedAt;
+ private Date updatedAt;
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsurancePosition.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsurancePosition.java
new file mode 100644
index 0000000..d4740a8
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsurancePosition.java
@@ -0,0 +1,31 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 保险职位
+ */
+@Data
+public class InsurancePosition {
+
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+ //职位
+ private String position;
+ //人数
+ private Integer numberPeople;
+ //级别
+ private String rank;
+ //工资
+ private BigDecimal salary;
+ //创建时间
+ private Date createdAt;
+ //更新时间
+ private Date updatedAt;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceProduct.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceProduct.java
index 922d668..4029566 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceProduct.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceProduct.java
@@ -5,7 +5,10 @@
import lombok.Data;
import java.math.BigDecimal;
+import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
/**
* 保险产品实体类
@@ -33,16 +36,16 @@
private BigDecimal premium;
// 保险期限(如:1年/终身)
- private String term;
+ private Integer term;
// 产品状态
private ProductStatus status;
// 创建时间
- private LocalDateTime createdAt;
+ private Date createdAt;
// 更新时间
- private LocalDateTime updatedAt;
+ private Date updatedAt;
// 医院数量
private Integer hospitalNumber;
@@ -57,7 +60,7 @@
private String obligationDisclose;
// 产品特色
- private String productFeature;
+ private List<InsuranceFeature> productFeature;
// 投保须知
private String liabilityExemption;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/MedicalInsuranceAccount.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/MedicalInsuranceAccount.java
index 9c5ac3e..806c063 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/MedicalInsuranceAccount.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/MedicalInsuranceAccount.java
@@ -7,6 +7,7 @@
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.util.Date;
/**
* 医疗保险账户实体类
@@ -19,22 +20,28 @@
private Integer id;
// 用户ID
- private String userId;
+ private Integer userId;
// 保单ID
- private Long policyId;
+ private Integer policyId;
// 保险产品ID
private Integer productId;
- // 账户余额
- private BigDecimal accountBalance;
+ // 保险总额度
+ private BigDecimal totalQuota;
- // 年度限额
- private BigDecimal annualLimit;
+ // 账户余额(用户申请使用才扣)
+ private BigDecimal remainingBalance ;
- // 已使用金额
- private BigDecimal usedAmount;
+ //待领金额
+ private BigDecimal amountClaimed;
+
+ //已领取金额
+ private BigDecimal alreadyReceived;
+
+ // 已使用金额(用户申请使用才增加)
+ private BigDecimal amountAlreadyUsed;
// 账户生效日期
private LocalDate effectiveDate;
@@ -46,10 +53,10 @@
private AccountStatus accountStatus;
// 创建时间
- private LocalDateTime createdAt;
+ private Date createdAt;
// 更新时间
- private LocalDateTime updatedAt;
+ private Date updatedAt;
// 账户状态枚举
public enum AccountStatus {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/MedicalInsuranceDailyClaim.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/MedicalInsuranceDailyClaim.java
new file mode 100644
index 0000000..9655dc7
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/MedicalInsuranceDailyClaim.java
@@ -0,0 +1,32 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/*
+ 保险领取记录
+ */
+@Data
+public class MedicalInsuranceDailyClaim {
+
+ @TableId(type = IdType.AUTO)
+ private Integer id; // 主键ID
+
+ private Integer accountId; // 医疗保险账户ID
+
+ private Integer userId; // 用户ID
+
+ private LocalDate claimDate; // 领取日期
+
+ private BigDecimal claimAmount; // 领取金额
+
+ private Date createdAt; // 创建时间
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/RealNameAuth.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/RealNameAuth.java
index 3bbcb41..7febb48 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/RealNameAuth.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/RealNameAuth.java
@@ -5,6 +5,7 @@
import lombok.Data;
import java.time.LocalDateTime;
+import java.util.Date;
/**
* 用户实名认证信息实体类
@@ -32,7 +33,10 @@
private AuthStatus authStatus;
// 提交时间
- private LocalDateTime createdAt;
+ private Date createdAt;
+
+ // 更新时间
+ private Date updatedAt;
// 认证状态枚举
public enum AuthStatus {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserKyc.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserKyc.java
new file mode 100644
index 0000000..ca7f7db
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/UserKyc.java
@@ -0,0 +1,42 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 实名认证
+ */
+@Data
+public class UserKyc {
+
+ // 唯一ID
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+
+ // 系统生成的用户ID
+ private Integer userId;
+
+ //头像图片
+ private String headPortraitImg;
+
+ //头像图片
+ private String nationalEmblemImg;
+
+ //手持
+ private String handImg;
+
+ //审批状态 0:待审批 1:通过 2:驳回
+ private Integer state;
+
+ //驳回信息
+ private String message;
+
+ // 创建时间
+ private Date createdAt;
+
+ // 更新时间
+ private Date updatedAt;
+}
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 86c8d76..daaf380 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
@@ -8,6 +8,7 @@
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.util.Date;
/**
* 用户保单实体类
@@ -20,7 +21,7 @@
private Integer id;
// 系统生成的用户ID
- private String userId;
+ private Integer userId;
// 保险产品ID
private Integer productId;
@@ -32,7 +33,7 @@
private BigDecimal premium;
// 保险期限(如:1年/终身)
- private String term;
+ private Integer term;
// 姓名
private String name;
@@ -41,7 +42,7 @@
private Gender gender;
// 出生日期
- private LocalDate birthDate;
+ private Date birthDate;
// 职业
private String occupation;
@@ -64,11 +65,20 @@
// 保险结束日期
private LocalDate endDate;
+ // 是否终身保险 0:是 1:否
+ private Integer isLifelong ;
+
// 创建时间
- private LocalDateTime createdAt;
+ private Date createdAt;
// 更新时间
- private LocalDateTime updatedAt;
+ private Date updatedAt;
+
+ //审批状态 0:待审批 1:通过 2:驳回
+ private Integer approvalStatus;
+
+ //驳回信息
+ private String message;
// 性别枚举
public enum Gender {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsurancePositionDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsurancePositionDto.java
new file mode 100644
index 0000000..aa621f3
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsurancePositionDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.system.domain.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class InsurancePositionDto {
+
+ private Integer id;
+ //职位
+ private String position;
+ //人数
+ private Integer numberPeople;
+ //级别
+ private String rank;
+ //工资
+ private BigDecimal salary;
+}
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 65a7fbd..9771e10 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
@@ -29,7 +29,7 @@
private BigDecimal premium;
// 保险期限
- private String term;
+ private Integer term;
// 产品状态
private String status;
@@ -53,7 +53,7 @@
private String liabilityExemption;
//产品特色
- List<InsuranceFeatureDto> featureDtoList;
+ private List<InsuranceFeatureDto> featureDtoList;
// 图片1
private String img1;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserKycDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserKycDto.java
new file mode 100644
index 0000000..37d4de9
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserKycDto.java
@@ -0,0 +1,29 @@
+package com.ruoyi.system.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.Date;
+
+@Data
+public class UserKycDto {
+
+ // 系统生成的用户ID
+ @NotEmpty(message = "用户id不能为空")
+ private Integer userId;
+
+ //头像图片
+ @NotEmpty(message = "头像图片不能为空")
+ private String headPortraitImg;
+
+ //国徽图片
+ @NotEmpty(message = "国徽图片不能为空")
+ private String nationalEmblemImg;
+
+ //手持照片
+ @NotEmpty(message = "手持照片不能为空")
+ private String handImg;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserPolicyDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserPolicyDto.java
new file mode 100644
index 0000000..e1ced17
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/UserPolicyDto.java
@@ -0,0 +1,37 @@
+package com.ruoyi.system.domain.dto;
+
+import com.ruoyi.system.domain.UserPolicy;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Date;
+
+@Data
+public class UserPolicyDto {
+
+ // 系统生成的用户ID
+ private String userId;
+
+ // 保险产品ID
+ private Integer productId;
+
+ // 姓名
+ private String name;
+
+ // 性别
+ private UserPolicy.Gender gender;
+
+ // 出生日期
+ private Date birthDate;
+
+ // 职业
+ private String occupation;
+
+ // 身份证号码
+ private String idCard;
+
+ // 手机号码
+ private String phone;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/InsurancePositiontMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/InsurancePositiontMapper.java
new file mode 100644
index 0000000..1457b8a
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/InsurancePositiontMapper.java
@@ -0,0 +1,10 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.InsurancePosition;
+import com.ruoyi.system.domain.InsuranceProduct;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface InsurancePositiontMapper extends BaseMapper<InsurancePosition> {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MedicalInsuranceAccountMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MedicalInsuranceAccountMapper.java
index 8a5f2b7..bc78bff 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MedicalInsuranceAccountMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MedicalInsuranceAccountMapper.java
@@ -4,6 +4,11 @@
import com.ruoyi.system.domain.InsuranceProduct;
import com.ruoyi.system.domain.MedicalInsuranceAccount;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
@Mapper
public interface MedicalInsuranceAccountMapper extends BaseMapper<MedicalInsuranceAccount> {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MedicalInsuranceDailyClaimMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MedicalInsuranceDailyClaimMapper.java
new file mode 100644
index 0000000..81eba76
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MedicalInsuranceDailyClaimMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.MedicalInsuranceAccount;
+import com.ruoyi.system.domain.MedicalInsuranceDailyClaim;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Mapper
+public interface MedicalInsuranceDailyClaimMapper extends BaseMapper<MedicalInsuranceDailyClaim> {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserKycMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserKycMapper.java
new file mode 100644
index 0000000..8fa60ca
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserKycMapper.java
@@ -0,0 +1,8 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.IpBlacklist;
+import com.ruoyi.system.domain.UserKyc;
+
+public interface UserKycMapper extends BaseMapper<UserKyc> {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/UserPolicyService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/UserPolicyService.java
deleted file mode 100644
index 27ba729..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/UserPolicyService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.ruoyi.system.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.system.domain.RealNameAuth;
-import com.ruoyi.system.domain.UserPolicy;
-
-public interface UserPolicyService extends IService<UserPolicy> {
-}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InsuranceFeatureServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InsuranceFeatureServiceImpl.java
deleted file mode 100644
index 4fe780c..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InsuranceFeatureServiceImpl.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ruoyi.system.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.system.domain.GroupWelcomeConfig;
-import com.ruoyi.system.domain.InsuranceFeature;
-import com.ruoyi.system.mapper.GroupWelcomeConfigMapper;
-import com.ruoyi.system.mapper.InsuranceFeatureMapper;
-import com.ruoyi.system.service.GroupWelcomeConfigService;
-import com.ruoyi.system.service.InsuranceFeatureService;
-import org.springframework.stereotype.Service;
-
-@Service
-public class InsuranceFeatureServiceImpl extends ServiceImpl<InsuranceFeatureMapper, InsuranceFeature> implements InsuranceFeatureService {
-}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InsuranceProductServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InsuranceProductServiceImpl.java
deleted file mode 100644
index 3a02ab6..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InsuranceProductServiceImpl.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ruoyi.system.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.system.domain.InsuranceFeature;
-import com.ruoyi.system.domain.InsuranceProduct;
-import com.ruoyi.system.mapper.InsuranceFeatureMapper;
-import com.ruoyi.system.mapper.InsuranceProductMapper;
-import com.ruoyi.system.service.InsuranceFeatureService;
-import com.ruoyi.system.service.InsuranceProductService;
-import org.springframework.stereotype.Service;
-
-@Service
-public class InsuranceProductServiceImpl extends ServiceImpl<InsuranceProductMapper, InsuranceProduct> implements InsuranceProductService {
-}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MedicalInsuranceAccountServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MedicalInsuranceAccountServiceImpl.java
deleted file mode 100644
index 1936bc6..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MedicalInsuranceAccountServiceImpl.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ruoyi.system.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.system.domain.InsuranceProduct;
-import com.ruoyi.system.domain.MedicalInsuranceAccount;
-import com.ruoyi.system.mapper.InsuranceProductMapper;
-import com.ruoyi.system.mapper.MedicalInsuranceAccountMapper;
-import com.ruoyi.system.service.InsuranceProductService;
-import com.ruoyi.system.service.MedicalInsuranceAccountService;
-import org.springframework.stereotype.Service;
-
-@Service
-public class MedicalInsuranceAccountServiceImpl extends ServiceImpl<MedicalInsuranceAccountMapper, MedicalInsuranceAccount> implements MedicalInsuranceAccountService {
-}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserPolicyServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserPolicyServiceImpl.java
deleted file mode 100644
index 8666117..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserPolicyServiceImpl.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ruoyi.system.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.system.domain.RealNameAuth;
-import com.ruoyi.system.domain.UserPolicy;
-import com.ruoyi.system.mapper.RealNameAuthMapper;
-import com.ruoyi.system.mapper.UserPolicyMapper;
-import com.ruoyi.system.service.RealNameAuthService;
-import com.ruoyi.system.service.UserPolicyService;
-import org.springframework.stereotype.Service;
-
-@Service
-public class UserPolicyServiceImpl extends ServiceImpl<UserPolicyMapper, UserPolicy> implements UserPolicyService {
-}
--
Gitblit v1.9.3