| | |
| | | import com.ruoyi.im.util.UserPolicyUtils; |
| | | import com.ruoyi.system.domain.*; |
| | | import com.ruoyi.system.domain.dto.PayCallbackDTO; |
| | | import com.ruoyi.system.domain.dto.SubordinateInformationDto; |
| | | import com.ruoyi.system.domain.dto.UserPolicyDto; |
| | | import com.ruoyi.im.service.UserPolicyService; |
| | | import com.ruoyi.system.domain.out.UserTeamAndPositionOut; |
| | | import com.ruoyi.system.service.FundsLogService; |
| | | import com.ruoyi.system.service.PaymentRecordService; |
| | | import com.ruoyi.system.service.UserAccountService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | @Autowired |
| | | PaymentRecordService paymentRecordService; |
| | | |
| | | @Autowired |
| | | FundsLogService fundsLogService; |
| | | |
| | | @Value("${pay.key}") |
| | | private String key; |
| | | |
| | |
| | | */ |
| | | @PostMapping("/purchaseApplication") |
| | | public Result purchaseApplication(UserPolicyDto dto) { |
| | | // 生成锁的key:基于用户ID和产品ID,防止同一用户同时购买同一产品 |
| | | String lockKey = redisDistributedLock.generateLockKey(dto.getAccount(), dto.getProductId()); |
| | | synchronized (dto.getAccount()) { |
| | | // 生成锁的key:基于用户ID和产品ID,防止同一用户同时购买同一产品 |
| | | String lockKey = redisDistributedLock.generateLockKey(dto.getAccount(), dto.getProductId()); |
| | | |
| | | boolean lockAcquired = false; |
| | | try { |
| | | // 尝试获取分布式锁:等待10秒,锁过期30秒 |
| | | lockAcquired = redisDistributedLock.tryLock(lockKey, 30L, 10L); |
| | | boolean lockAcquired = false; |
| | | try { |
| | | // 尝试获取分布式锁:等待10秒,锁过期30秒 |
| | | lockAcquired = redisDistributedLock.tryLock(lockKey, 30L, 10L); |
| | | |
| | | if (!lockAcquired) { |
| | | return Result.error("操作过于频繁,请稍后重试"); |
| | | } |
| | | if (!lockAcquired) { |
| | | return Result.error("操作过于频繁,请稍后重试"); |
| | | } |
| | | |
| | | // 执行购买逻辑 |
| | | return userPolicyService.purchaseApplication(dto); |
| | | // 执行购买逻辑 |
| | | return userPolicyService.purchaseApplication(dto); |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return Result.error("购买失败"); |
| | | } finally { |
| | | // 释放锁 |
| | | if (lockAcquired) { |
| | | redisDistributedLock.releaseLock(lockKey); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return Result.error("购买失败"); |
| | | } finally { |
| | | // 释放锁 |
| | | if (lockAcquired) { |
| | | redisDistributedLock.releaseLock(lockKey); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 保险购买申请 |
| | | */ |
| | | @PostMapping("/updatePolicy") |
| | | public AjaxResult updatePolicy(UserPolicyDto dto) { |
| | | |
| | | UserPolicy userPolicy = userPolicyService.getById(dto.getId()); |
| | | if(ObjectUtil.isNotEmpty(userPolicy)){ |
| | | userPolicy.setPhone(dto.getPhone()); |
| | | userPolicy.setBirthDate(LocalDate.parse(dto.getBirthDate())); |
| | | userPolicyService.updateById(userPolicy); |
| | | return AjaxResult.success("更新成功"); |
| | | }else{ |
| | | return AjaxResult.error("保单不存在"); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 根据用户id查询保单 |
| | | */ |
| | | @GetMapping("/updateGender") |
| | | public AjaxResult updateGender(@RequestParam(value = "id") Integer id,@RequestParam(value = "gender") UserPolicy.Gender gender) { |
| | | try { |
| | | UserPolicy userPolicy = userPolicyService.getById(id); |
| | | if(ObjectUtil.isEmpty(userPolicy)){ |
| | | AjaxResult.error("保单不存在!"); |
| | | } |
| | | userPolicy.setGender(gender); |
| | | userPolicyService.updateById(userPolicy); |
| | | return AjaxResult.success("修改成功"); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | return AjaxResult.error("修改失败!"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 根据用户id查询保单 |
| | |
| | | |
| | | userAccount.setBalance(userAccount.getBalance().add(userPolicy.getPremium())); |
| | | userAccountService.updateById(userAccount); |
| | | fundsLogService.addLog(userAccount.getId(), userAccount.getAccount(), userPolicy.getPremium(), OperationType.REFUND); |
| | | |
| | | return AjaxResult.success("审批成功"); |
| | | } |
| | | |
| | |
| | | List<InsurancePosition> positions = insurancePositionService.list(); |
| | | positions.forEach(f->{ |
| | | if(activePolicies >= f.getNumberPeople()){ |
| | | superiorUser.setPosition(f.getPosition()); |
| | | superiorUser.setAgreedTime(LocalDate.now()); |
| | | if(!superiorUser.getPosition().equals(f.getPosition())){ |
| | | superiorUser.setPosition(f.getPosition()); |
| | | superiorUser.setAgreedTime(LocalDate.now()); |
| | | } |
| | | } |
| | | }); |
| | | userAccountService.updateById(superiorUser); |
| | |
| | | log.error("签名验证失败: {}", callbackDTO.getOrderId()); |
| | | return "签名验证失败"; |
| | | } |
| | | |
| | | PaymentRecord paymentRecord = paymentRecordService.getOne(new LambdaQueryWrapper<PaymentRecord>() |
| | | .eq(PaymentRecord::getPayOrdeNo, callbackDTO.getOrderId()) |
| | | ); |
| | | if (paymentRecord == null) { |
| | | log.error("支付订单不存在: {}", paymentRecord.getPayOrdeNo()); |
| | | return "支付订单不存在"; |
| | | } |
| | | // 2. 根据订单号查询保单 |
| | | UserPolicy userPolicy = userPolicyService.getOne(new LambdaQueryWrapper<UserPolicy>() |
| | | .eq(UserPolicy::getOrderNo, callbackDTO.getOrderId())); |
| | | .eq(UserPolicy::getId, paymentRecord.getOrderId())); |
| | | if (userPolicy == null) { |
| | | log.error("订单不存在: {}", callbackDTO.getOrderId()); |
| | | return "订单不存在"; |
| | |
| | | } |
| | | |
| | | userPolicy.setPayStatus(2); // 2-支付成功 |
| | | userPolicy.setPolicyStatus(UserPolicy.PolicyStatus.ACTIVE); |
| | | // userPolicy.setPolicyStatus(UserPolicy.PolicyStatus.ACTIVE); |
| | | userPolicy.setUpdatedAt(new Date()); |
| | | |
| | | boolean updateResult = userPolicyService.updateById(userPolicy); |
| | |
| | | } |
| | | if(byId.getPaymentStatus() == 2){ |
| | | return AjaxResult.error("订单已支付,禁止删除"); |
| | | }else{ |
| | | paymentRecordService.removeById(byId); |
| | | } |
| | | UserPolicy userPolicy = userPolicyService.getById(byId.getOrderId()); |
| | | if(ObjectUtil.isEmpty(userPolicy)){ |
| | | return AjaxResult.error("保单不存在!"); |
| | | } |
| | | if(userPolicy.getPayStatus() == 2){ |
| | | return AjaxResult.error("订单已支付,禁止删除"); |
| | | } |
| | | |
| | | paymentRecordService.removeById(byId); |
| | | userPolicyService.removeById(userPolicy); |
| | | if(ObjectUtil.isNotEmpty(userPolicy) && userPolicy.getPayStatus() == 2){ |
| | | return AjaxResult.error("订单已支付,禁止删除"); |
| | | }else{ |
| | | userPolicyService.removeById(userPolicy); |
| | | } |
| | | return AjaxResult.success("删除成功"); |
| | | } |
| | | |
| | | /** |
| | | * 保单列表 |
| | | */ |
| | | @GetMapping("/getFundsLogList") |
| | | public TableDataInfo getFundsLogList(@RequestParam(value = "account",required = false) String account,@RequestParam(value = "operationType",required = false) Integer operationType) { |
| | | startPage(); |
| | | |
| | | LambdaQueryWrapper<FundsLog> wrapper = new LambdaQueryWrapper<>(); |
| | | |
| | | if(StringUtils.isNotEmpty(account)){ |
| | | wrapper.eq(FundsLog::getAccount,account); |
| | | } |
| | | if (ObjectUtil.isNotEmpty(operationType)){ |
| | | wrapper.eq(FundsLog::getOperationType,operationType); |
| | | } |
| | | wrapper.orderByDesc(FundsLog::getCreateTime); |
| | | List<FundsLog> list = fundsLogService.list(wrapper); |
| | | return getDataTable(list); |
| | | } |
| | | } |