|
@@ -0,0 +1,200 @@
|
|
|
|
|
+package com.jzg.organization.service.impl;
|
|
|
|
|
+
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
+import com.jzg.commons.core.base.BaseController;
|
|
|
|
|
+import com.jzg.commons.core.base.StateResult;
|
|
|
|
|
+import com.jzg.commons.core.page.HttpResult;
|
|
|
|
|
+import com.jzg.commons.entity.dto.AmountAuditEditParam;
|
|
|
|
|
+import com.jzg.commons.entity.dto.AmountAuditParam;
|
|
|
|
|
+import com.jzg.commons.entity.dto.AmountAuditRejectParam;
|
|
|
|
|
+import com.jzg.commons.entity.po.InsFeeOrders;
|
|
|
|
|
+import com.jzg.commons.entity.po.SysAmountAuditing;
|
|
|
|
|
+import com.jzg.commons.entity.po.SysUserAccount;
|
|
|
|
|
+import com.jzg.commons.entity.vo.AmountAuditVo;
|
|
|
|
|
+import com.jzg.commons.util.AssertionUtils;
|
|
|
|
|
+import com.jzg.commons.util.StringUtils;
|
|
|
|
|
+import com.jzg.organization.mapper.SysAmountAuditingMapper;
|
|
|
|
|
+import com.jzg.organization.service.SysAmountAuditingService;
|
|
|
|
|
+import com.jzg.organization.service.SysUserAccountService;
|
|
|
|
|
+import com.jzg.organization.state.AuditState;
|
|
|
|
|
+import com.jzg.organization.state.listener.AuditStateListener;
|
|
|
|
|
+import org.redisson.api.RBucket;
|
|
|
|
|
+import org.redisson.api.RedissonClient;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.util.Objects;
|
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+* @author dongxin
|
|
|
|
|
+* @description 针对表【sys_amount_auditing(提现申请表)】的数据库操作Service实现
|
|
|
|
|
+* @createDate 2025-07-11 11:05:25
|
|
|
|
|
+*/
|
|
|
|
|
+@Service
|
|
|
|
|
+public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingMapper, SysAmountAuditing>
|
|
|
|
|
+ implements SysAmountAuditingService {
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private BaseController baseController;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private RedissonClient redissonClient;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ AuditStateListener auditStateListener;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ SysUserAccountService userAccountService;
|
|
|
|
|
+
|
|
|
|
|
+ private static final String AMOUNT_LOCK_PREFIX = "amountLock:";
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Page<AmountAuditVo> queryPage(AmountAuditParam param) {
|
|
|
|
|
+ Page<AmountAuditVo> page = baseMapper.queryPage(param.getPage(), param);
|
|
|
|
|
+ return page;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void auditReceive(String id) {
|
|
|
|
|
+ SysAmountAuditing audit = this.getById(id);
|
|
|
|
|
+ if(audit.getAuditingStatus() > 0){
|
|
|
|
|
+ if(audit.getAuditingStatus() == 1){
|
|
|
|
|
+ AssertionUtils.isFail(true, "提现已付款请刷新列表");
|
|
|
|
|
+ }else{
|
|
|
|
|
+ AssertionUtils.isFail(true, "提现已驳回请刷新列表");
|
|
|
|
|
+ }
|
|
|
|
|
+ // 未审核
|
|
|
|
|
+ }else{
|
|
|
|
|
+ String userName = baseController.getUserName();
|
|
|
|
|
+ if(StringUtils.isNotBlank(audit.getReceiveUser())){
|
|
|
|
|
+ if(userName.equals(audit.getReceiveUser())){
|
|
|
|
|
+ // redis 锁定按钮
|
|
|
|
|
+ RBucket<Object> bucket = redissonClient.getBucket(AMOUNT_LOCK_PREFIX + id);
|
|
|
|
|
+ bucket.set(1, 10, TimeUnit.MINUTES);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ AssertionUtils.isFail(true, "提现申请已被" + audit.getReceiveUser() + "领取!");
|
|
|
|
|
+ }
|
|
|
|
|
+ }else{
|
|
|
|
|
+ LambdaQueryWrapper<SysAmountAuditing> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ wrapper.like(SysAmountAuditing::getReceiveUser, userName);
|
|
|
|
|
+ long count = this.count(wrapper);
|
|
|
|
|
+ if(count >= 10){
|
|
|
|
|
+ AssertionUtils.isFail(true, "超出10次领取限制,请先审核后再领取订单!");
|
|
|
|
|
+ }else{
|
|
|
|
|
+ // 领取订单
|
|
|
|
|
+ audit.setReceiveUser(userName);
|
|
|
|
|
+ audit.setReceiveTime(LocalDateTime.now());
|
|
|
|
|
+ this.updateById(audit);
|
|
|
|
|
+
|
|
|
|
|
+ // redis 锁定按钮
|
|
|
|
|
+ RBucket<Object> bucket = redissonClient.getBucket(AMOUNT_LOCK_PREFIX + id);
|
|
|
|
|
+ bucket.set(1, 10, TimeUnit.MINUTES);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void auditCancel(String id) {
|
|
|
|
|
+ SysAmountAuditing audit = this.getById(id);
|
|
|
|
|
+ if(audit.getAuditingStatus() > 0){
|
|
|
|
|
+ AssertionUtils.isFail(true, "提现申请已完成付款!");
|
|
|
|
|
+ }
|
|
|
|
|
+ String userName = baseController.getUserName();
|
|
|
|
|
+ if (userName.equals(audit.getReceiveUser())) {
|
|
|
|
|
+ AssertionUtils.isFail(true, "已放弃提现申请付款任务!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ LambdaUpdateWrapper<SysAmountAuditing> wrapper = new LambdaUpdateWrapper<>();
|
|
|
|
|
+ wrapper.set(SysAmountAuditing::getReceiveUser,null);
|
|
|
|
|
+ wrapper.set(SysAmountAuditing::getReceiveTime,null);
|
|
|
|
|
+ wrapper.eq(SysAmountAuditing::getId,id);
|
|
|
|
|
+ this.update(wrapper);
|
|
|
|
|
+
|
|
|
|
|
+ // 清空锁定缓存
|
|
|
|
|
+ RBucket<Object> bucket = redissonClient.getBucket(AMOUNT_LOCK_PREFIX + id);
|
|
|
|
|
+ if(bucket.isExists()){
|
|
|
|
|
+ bucket.delete();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void verifyAmount(AmountAuditEditParam param) {
|
|
|
|
|
+ SysAmountAuditing audit = this.getById(param.getId());
|
|
|
|
|
+ if(audit.getAuditingStatus() > 0){
|
|
|
|
|
+ if(audit.getAuditingStatus() == 1){
|
|
|
|
|
+ AssertionUtils.isFail(true, "提现已付款请刷新列表");
|
|
|
|
|
+ }else{
|
|
|
|
|
+ AssertionUtils.isFail(true, "提现已驳回请刷新列表");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if(StringUtils.isBlank(audit.getReceiveUser())){
|
|
|
|
|
+ AssertionUtils.isFail(true, "请领取提现申请后再进行付款,返回待付款提现申请列表!");
|
|
|
|
|
+ }
|
|
|
|
|
+ String userName = baseController.getUserName();
|
|
|
|
|
+ if (!userName.equals(audit.getReceiveUser())) {
|
|
|
|
|
+ AssertionUtils.isFail(true, "申请已被"+audit.getReceiveUser()+"领取返回待付款提现申请列表!");
|
|
|
|
|
+ }
|
|
|
|
|
+ if(StringUtils.isNotBlank(audit.getReceiveUser())){
|
|
|
|
|
+ if(userName.equals(audit.getReceiveUser())){
|
|
|
|
|
+ StateResult stateFailResult = auditStateListener.statusChange(AuditState.AuditStateEnum.SUCCESS_AUDIT,audit.getAuditingStatus()+"");
|
|
|
|
|
+ audit.setAuditingStatus(stateFailResult.getCurrentState());
|
|
|
|
|
+ audit.setPicId(param.getPicId());
|
|
|
|
|
+ audit.setVoucherId(param.getVoucherId());
|
|
|
|
|
+ audit.setAccountId(param.getAccountId());
|
|
|
|
|
+ this.updateById(audit);
|
|
|
|
|
+ // 更新用户账户
|
|
|
|
|
+ SysUserAccount userAccount = userAccountService.queryByUserId(audit.getUserId());
|
|
|
|
|
+ AssertionUtils.isFail(Objects.isNull(userAccount), "用户账户数据异常!");
|
|
|
|
|
+ AssertionUtils.isFail(audit.getAmount().compareTo(userAccount.getSumAmountUnpaid()) > 0, "提现金额大于账户余额!");
|
|
|
|
|
+ userAccount.setSumAmountPaid(audit.getAmount());
|
|
|
|
|
+ userAccount.setSumAmountUnpaid(userAccount.getSumAmountUnpaid().add(audit.getAmount()));
|
|
|
|
|
+ userAccountService.saveOrUpdate(userAccount);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ AssertionUtils.isFail(true, "提现申请已被" + audit.getReceiveUser() + "领取!");
|
|
|
|
|
+ }
|
|
|
|
|
+ }else{
|
|
|
|
|
+ AssertionUtils.isFail(true, "提现申请未领取");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void rejectAmount(AmountAuditRejectParam param) {
|
|
|
|
|
+ SysAmountAuditing audit = this.getById(param.getId());
|
|
|
|
|
+ if(audit.getAuditingStatus() > 0){
|
|
|
|
|
+ if(audit.getAuditingStatus() == 1){
|
|
|
|
|
+ AssertionUtils.isFail(true, "提现已付款请刷新列表");
|
|
|
|
|
+ }else{
|
|
|
|
|
+ AssertionUtils.isFail(true, "提现已驳回请刷新列表");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if(StringUtils.isBlank(audit.getReceiveUser())){
|
|
|
|
|
+ AssertionUtils.isFail(true, "请领取任务后再进行审核关闭弹窗,刷新列表");
|
|
|
|
|
+ }
|
|
|
|
|
+ String userName = baseController.getUserName();
|
|
|
|
|
+ if (!userName.equals(audit.getReceiveUser())) {
|
|
|
|
|
+ AssertionUtils.isFail(true, "申请已被"+audit.getReceiveUser()+"领取返回待付款提现申请列表!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ StateResult stateFailResult = auditStateListener.statusChange(AuditState.AuditStateEnum.FAIL_AUDIT,audit.getAuditingStatus()+"");
|
|
|
|
|
+ audit.setAuditingStatus(stateFailResult.getCurrentState());
|
|
|
|
|
+ audit.setRejectReason(param.getRejectReason());
|
|
|
|
|
+ this.updateById(audit);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean isLock(String id) {
|
|
|
|
|
+ RBucket<Object> bucket = redissonClient.getBucket(AMOUNT_LOCK_PREFIX + id);
|
|
|
|
|
+ return bucket.isExists();
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|