ruoyi-admin/src/main/java/com/ruoyi/im/config/AppAuthConfig.java
@@ -5,7 +5,7 @@ /** * 应用认证配置 */ DEFAULT_CONFIG("d3aa2010cbfcd1f5021367928b60987c", "42647c75bde9"); DEFAULT_CONFIG("cd693c66bb6992a7cc2b13379e981d48", "720c0b98f7a3"); private final String appKey; private final String appSecret; ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/MedicalInsuranceAccountServiceImpl.java
@@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.interceptor.TransactionAspectSupport; import javax.xml.crypto.Data; import java.math.BigDecimal; @@ -50,7 +51,7 @@ } // 检查账户状态 if (!"ACTIVE".equals(account.getAccountStatus())) { if (!"ACTIVE".equals(account.getAccountStatus().name())) { return Result.error("保单已失效"); } @@ -108,6 +109,7 @@ return Result.success("领取成功"); }catch (Exception e){ e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); log.error("领取保险金出错:"+e.getMessage()); }finally { accountLock.unlock(); @@ -126,7 +128,7 @@ return Result.success(false); } // 检查账户状态 if (!"ACTIVE".equals(account.getAccountStatus())) { if (!"ACTIVE".equals(account.getAccountStatus().name())) { return Result.success(false); } // 检查账户有效期 ruoyi-admin/src/main/java/com/ruoyi/im/service/impl/UserPolicyServiceImpl.java
@@ -36,6 +36,10 @@ if(ObjectUtil.isEmpty(userAccount)){ return Result.error("请重新登录,未查询到你的信息!"); } if(userAccount.getKycStatus() == 0){ return Result.error("请先实名认证"); } // 验证手机号 boolean isPhoneValid = ValidatorUtil.isValidPhone(dto.getPhone()); if(!isPhoneValid){ ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsurancePositionController.java
@@ -26,18 +26,19 @@ * 新增保险职位 */ @PostMapping("/add") public AjaxResult add(@Valid @RequestBody InsurancePositionDto dto) { public AjaxResult add(InsurancePositionDto dto) { try { InsurancePosition insurancePosition = new InsurancePosition(); insurancePosition.setPosition(dto.getPosition()); insurancePosition.setNumberPeople(dto.getNumberPeople()); insurancePosition.setRank(dto.getRank()); insurancePosition.setSalary(dto.getSalary()); insurancePosition.setCreatedAt(new Date()); insurancePosition.setUpdatedAt(new Date()); service.save(insurancePosition); return AjaxResult.success("添加成功"); }catch (Exception e){ e.getMessage(); e.printStackTrace(); return AjaxResult.error("添加失败!"); } } @@ -45,13 +46,13 @@ /** * 删除产品 * 删除保险职位 */ @DeleteMapping("/{id}") public AjaxResult delete(@PathVariable Integer id) { @GetMapping("/delete") public AjaxResult delete(@RequestParam(value = "id") Integer id) { InsurancePosition position = service.getById(id); if (position == null) { return AjaxResult.error("产品不存在"); return AjaxResult.error("职位不存在"); } boolean success = service.removeById(id); @@ -59,7 +60,7 @@ } /** * 产品信息列表 * 职位列表 */ @GetMapping("/list") public TableDataInfo list() { @@ -72,10 +73,10 @@ } /** * 新增保险职位 * 修改保险职位 */ @PostMapping("/update") public AjaxResult update(@Valid @RequestBody InsurancePositionDto dto) { public AjaxResult update(InsurancePositionDto dto) { try { InsurancePosition position = service.getById(dto.getId()); if(position == null){ @@ -84,11 +85,12 @@ position.setPosition(dto.getPosition()); position.setNumberPeople(dto.getNumberPeople()); position.setRank(dto.getRank()); position.setSalary(dto.getSalary()); position.setUpdatedAt(new Date()); service.updateById(position); return AjaxResult.success("修改成功"); }catch (Exception e){ e.getMessage(); e.printStackTrace(); return AjaxResult.error("修改失败!"); } } 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(@Valid @RequestBody InsuranceProductUpdateDTO dto) { public AjaxResult update(InsuranceProductUpdateDTO dto) { // 1. 查询产品是否存在 InsuranceProduct insuranceProduct = insuranceProductService.getById(dto.getId()); if (insuranceProduct == null) { @@ -52,7 +52,6 @@ // 2. 更新产品基本信息 insuranceProduct.setProductName(dto.getProductName()); insuranceProduct.setProductCode(dto.getProductCode()); insuranceProduct.setDescription(dto.getDescription()); insuranceProduct.setCoverageAmount(dto.getCoverageAmount()); insuranceProduct.setPremium(dto.getPremium()); @@ -118,7 +117,7 @@ deleteByProductId(insuranceProduct.getId()); } return AjaxResult.success("保存成功!"); return AjaxResult.success("修改成功!"); } public void deleteByProductId(Integer productId) { @@ -140,24 +139,26 @@ * 产品信息列表 */ @GetMapping("/list") public TableDataInfo list(InsuranceProductUpdateDTO dto) { public TableDataInfo list(@RequestParam(value = "productName",required = false) String productName, @RequestParam(value = "productCode",required = false) String productCode, @RequestParam(value = "status",required = false) String status) { startPage(); LambdaQueryWrapper<InsuranceProduct> wrapper = new LambdaQueryWrapper<>(); // 产品名称模糊查询 if (StringUtils.isNotBlank(dto.getProductName())) { wrapper.like(InsuranceProduct::getProductName, dto.getProductName()); if (StringUtils.isNotBlank(productName)) { wrapper.like(InsuranceProduct::getProductName, productName); } // 产品代码模糊查询 if (StringUtils.isNotBlank(dto.getProductCode())) { wrapper.like(InsuranceProduct::getProductCode, dto.getProductCode()); if (StringUtils.isNotBlank(productCode)) { wrapper.like(InsuranceProduct::getProductCode, productCode); } // 产品状态精确查询 if (dto.getStatus() != null) { wrapper.eq(InsuranceProduct::getStatus, dto.getStatus()); if (StringUtils.isNotBlank(status)) { wrapper.eq(InsuranceProduct::getStatus, status); } // 按创建时间倒序排列 @@ -172,7 +173,7 @@ */ @PostMapping("/create") @Transactional(rollbackFor = Exception.class) public AjaxResult create(@Valid @RequestBody InsuranceProductUpdateDTO dto) { public AjaxResult create(InsuranceProductUpdateDTO dto) { // 1. 检查产品代码是否已存在 long count = insuranceProductService.count(new LambdaQueryWrapper<InsuranceProduct>().eq(InsuranceProduct::getProductCode, dto.getProductCode())); if (count > 0) { @@ -254,8 +255,8 @@ /** * 删除产品 */ @DeleteMapping("/{id}") public AjaxResult delete(@PathVariable Integer id) { @GetMapping("/delete") public AjaxResult delete(@RequestParam(value = "id") Integer id) { InsuranceProduct product = insuranceProductService.getById(id); if (product == null) { return AjaxResult.error("产品不存在"); ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/MedicalInsuranceAccountController.java
@@ -23,24 +23,24 @@ * 领取保险金 */ @GetMapping("/getInsuranceBenefit") public Result getInsuranceBenefit(@RequestParam(value = "id") Integer id) { public Result getInsuranceBenefit(@RequestParam(value = "userId") Integer userId) { try { return medicalInsuranceAccountService.getInsuranceBenefit(id); return medicalInsuranceAccountService.getInsuranceBenefit(userId); }catch (Exception e){ e.getMessage(); e.printStackTrace(); return Result.error("购买失败!"); } } /** * 领取保险金 * 查询领取状态 */ @GetMapping("/getReceiveStatus") public Result getReceiveStatus(@RequestParam(value = "userId") Integer userId) { try { return medicalInsuranceAccountService.getReceiveStatus(userId); }catch (Exception e){ e.getMessage(); e.printStackTrace(); return Result.error("购买失败!"); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserKycController.java
@@ -1,11 +1,15 @@ 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.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.InsurancePosition; import com.ruoyi.system.domain.UserAccount; import com.ruoyi.system.domain.UserKyc; import com.ruoyi.system.domain.UserPolicy; @@ -14,14 +18,17 @@ import com.ruoyi.system.mapper.UserKycMapper; import com.ruoyi.system.service.UserAccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.Date; import java.util.List; @RestController @RequestMapping("/kyc") public class UserKycController { public class UserKycController extends BaseController { @Autowired UserKycService userKycService; @@ -30,10 +37,11 @@ UserAccountService userAccountService; /** * 保险购买申请 * 实名认证申请 */ @PostMapping("/kycApply") public Result kycApply(@Valid @RequestBody UserKycDto dto) { @Transactional public Result kycApply(UserKycDto dto) { try { UserAccount userAccount = userAccountService.getById(dto.getUserId()); if(ObjectUtil.isEmpty(userAccount)){ @@ -41,23 +49,31 @@ } UserKyc userKyc = new UserKyc(); userKyc.setUserId(userAccount.getId()); userKyc.setAccount(userAccount.getAccount()); userKyc.setState(0); userKyc.setHeadPortraitImg(dto.getHeadPortraitImg()); userKyc.setNationalEmblemImg(dto.getNationalEmblemImg()); userKyc.setHandImg(dto.getHandImg()); userKycService.save(userKyc); userAccount.setKycStatus(0); userAccountService.updateById(userAccount); return Result.success("提交成功,请等待审核!"); }catch (Exception e){ e.getMessage(); return Result.error("购买失败"); e.printStackTrace(); // 手动设置回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 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) { @GetMapping("/examine") @Transactional 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)){ @@ -72,11 +88,32 @@ userKyc.setState(approvalStatus); userKyc.setMessage(message); userKyc.setUpdatedAt(new Date()); UserAccount userAccount = userAccountService.getById(userKyc.getUserId()); userAccount.setKycStatus(approvalStatus); userAccountService.updateById(userAccount); return AjaxResult.success("审批成功"); }catch (Exception e){ e.getMessage(); e.printStackTrace(); // 手动设置回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("审批失败!"); } } /** * 什么认证列表 */ @GetMapping("/list") public TableDataInfo list(@RequestParam(value = "account",required = false) String account) { startPage(); LambdaQueryWrapper<UserKyc> wrapper = new LambdaQueryWrapper<>(); if(StringUtils.isNotEmpty(account)){ wrapper.eq(UserKyc::getAccount,account); } // 按创建时间倒序排列 wrapper.orderByDesc(UserKyc::getCreatedAt); List<UserKyc> list = userKycService.list(wrapper); return getDataTable(list); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/UserPolicyController.java
@@ -13,6 +13,7 @@ import com.ruoyi.im.service.UserPolicyService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -37,11 +38,11 @@ * 保险购买申请 */ @PostMapping("/purchaseApplication") public Result purchaseApplication(@Valid @RequestBody UserPolicyDto dto) { public Result purchaseApplication(UserPolicyDto dto) { try { return userPolicyService.purchaseApplication(dto); }catch (Exception e){ e.getMessage(); e.printStackTrace(); return Result.error("购买失败"); } } @@ -55,17 +56,19 @@ List<UserPolicy> list = userPolicyService.list(new LambdaQueryWrapper<UserPolicy>().eq(UserPolicy::getUserId, id)); return Result.success(list); }catch (Exception e){ e.getMessage(); return Result.error("购买失败"); e.printStackTrace(); return Result.error("查询失败"); } } /** * 保单审批 */ @PostMapping("/examine") @GetMapping("/examine") @Transactional public AjaxResult examine(@RequestParam(value = "id") Integer id, @RequestParam(value = "approvalStatus") Integer approvalStatus, @RequestParam(value = "message",required = false) String message) { 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)){ @@ -106,7 +109,9 @@ medicalInsuranceAccountService.save(medicalInsuranceAccount); return AjaxResult.success("审批成功"); }catch (Exception e){ e.getMessage(); e.printStackTrace(); // 手动设置回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("审批失败!"); } } ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,9 +6,9 @@ druid: # 主库数据源 master: url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 123456 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-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -119,6 +119,11 @@ .antMatchers("/im/user/**").permitAll() .antMatchers("/im/group/**").permitAll() .antMatchers("/system/basic/**").permitAll() .antMatchers("/product/**").permitAll() .antMatchers("/insurancePosition/**").permitAll() .antMatchers("/MedicalInsuranceAccount/**").permitAll() .antMatchers("/kyc/**").permitAll() .antMatchers("/userPolicy/**").permitAll() // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated(); }) ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceProduct.java
@@ -1,6 +1,7 @@ package com.ruoyi.system.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @@ -60,6 +61,7 @@ private String obligationDisclose; // 产品特色 @TableField(exist = false) private List<InsuranceFeature> productFeature; // 投保须知 ruoyi-system/src/main/java/com/ruoyi/system/domain/UserAccount.java
@@ -85,4 +85,7 @@ private Date updateTime; private Boolean deleted = true; //实名状态:0 认证中 1 已认证 2 未实名 private Integer kycStatus = 2; } ruoyi-system/src/main/java/com/ruoyi/system/domain/UserKyc.java
@@ -19,6 +19,9 @@ // 系统生成的用户ID private Integer userId; //用户账号 private String account; //头像图片 private String headPortraitImg; ruoyi-system/src/main/java/com/ruoyi/system/domain/UserPolicy.java
@@ -80,7 +80,7 @@ //驳回信息 private String message; // 性别枚举 // 性别枚举 M:男 F:女 OTHER:其他 public enum Gender { M, F, OTHER } ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java
@@ -31,7 +31,7 @@ // 保险期限 private Integer term; // 产品状态 // 产品状态产品状态(ACTIVE 上架,INACTIVE 下架) private String status; // 医院数量 @@ -45,9 +45,6 @@ // 告知义务 private String obligationDisclose; // 产品特色 private String productFeature; // 投保须知 private String liabilityExemption; ruoyi-system/src/main/java/com/ruoyi/system/domain/out/UserKycOut.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.system.domain.out; import lombok.Data; import javax.validation.constraints.NotEmpty; @Data public class UserKycOut { private Integer id; // 用户id private Integer userId; //用户账号 private String account; //头像图片 private String headPortraitImg; //国徽图片 private String nationalEmblemImg; //手持照片 private String handImg; }