From bb3852ff7618bc93439e222e2211aa9f02b7656a Mon Sep 17 00:00:00 2001 From: 77 <77@77.com> Date: Sun, 21 Apr 2024 01:31:10 +0800 Subject: [PATCH] init --- .../controller/app/WithdrawAppController.java | 20 ++++++- .../com/ruoyi/xq/domain/UserWithdraw.java | 12 +++++ .../xq/dto/app/account/UpdateAliReq.java | 20 +++++++ .../ruoyi/xq/dto/app/account/WithdrawReq.java | 20 +++++++ .../dto/app/withdraw/WithdrawListAppVo.java | 13 +++++ .../xq/enums/account/WithdrawTypeEnum.java | 21 ++++++++ .../main/java/com/ruoyi/xq/lock/LockKey.java | 5 ++ .../ruoyi/xq/service/UserBankCardService.java | 4 ++ .../ruoyi/xq/service/UserWithdrawService.java | 3 +- .../service/impl/UserBankCardServiceImpl.java | 53 +++++++++++++++++++ .../service/impl/UserWithdrawServiceImpl.java | 32 ++++++++--- 11 files changed, 192 insertions(+), 11 deletions(-) create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/UpdateAliReq.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WithdrawReq.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WithdrawTypeEnum.java diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/WithdrawAppController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/WithdrawAppController.java index 75e7c7e..4da1a28 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/WithdrawAppController.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/WithdrawAppController.java @@ -10,11 +10,15 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.BeanConvertUtil; +import com.ruoyi.xq.domain.UserBankCard; import com.ruoyi.xq.domain.WithdrawSetting; +import com.ruoyi.xq.dto.app.account.UpdateAliReq; +import com.ruoyi.xq.dto.app.account.WithdrawReq; import com.ruoyi.xq.dto.app.common.IdReq; import com.ruoyi.xq.dto.app.setting.WithdrawSettingVo; import com.ruoyi.xq.dto.app.withdraw.WithdrawListAppVo; import com.ruoyi.xq.dto.app.withdraw.WithdrawListPageQuery; +import com.ruoyi.xq.service.UserBankCardService; import com.ruoyi.xq.service.UserWithdrawService; import com.ruoyi.xq.service.WithdrawSettingService; import io.swagger.v3.oas.annotations.Operation; @@ -33,6 +37,8 @@ public class WithdrawAppController { private WithdrawSettingService withdrawSettingService; @Autowired private UserWithdrawService userWithdrawService; + @Autowired + private UserBankCardService userBankCardService; @GetMapping("/setting") @Operation(summary = "获取提现配置") @@ -45,11 +51,21 @@ public class WithdrawAppController { return R.ok(result); } + @PostMapping("/ali/card") + @Operation(summary = "修改支付宝信息") + @Log(title = "修改支付宝信息", businessType = BusinessType.OTHER, isSaveDb = false) + public R updateAliCard(@RequestBody UpdateAliReq req){ + req.setUserId(LoginHelper.getUserId()); + userBankCardService.updateAli(req); + return R.ok(); + } + @PostMapping("/save") @Operation(summary = "申请提现") @Log(title = "申请提现", businessType = BusinessType.OTHER, isSaveDb = false) - public R save(@RequestBody IdReq req){ - userWithdrawService.saveWithdraw(LoginHelper.getUserId(),req.getId()); + public R save(@RequestBody WithdrawReq req){ + req.setUserId(LoginHelper.getUserId()); + userWithdrawService.saveWithdraw(req); return R.ok(); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/UserWithdraw.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/UserWithdraw.java index b2f227b..76c4e09 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/UserWithdraw.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/UserWithdraw.java @@ -2,6 +2,7 @@ package com.ruoyi.xq.domain; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; @@ -33,6 +34,17 @@ public class UserWithdraw implements Serializable { * 用户号 */ private String usercode; + + @Schema(description = "提现方式 1-支付宝 2-微信") + private Integer withdrawType; + /** + * 提现账户/openId + */ + private String card; + /** + * 提现名称/微信名称 + */ + private String name; /** * 跟踪ID */ diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/UpdateAliReq.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/UpdateAliReq.java new file mode 100644 index 0000000..405ec19 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/UpdateAliReq.java @@ -0,0 +1,20 @@ +package com.ruoyi.xq.dto.app.account; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class UpdateAliReq { + + private Long userId; + /** + * 支付宝-姓名 + */ + @Schema(description = "支付宝-姓名") + private String aliName; + /** + * 支付宝-账号 + */ + @Schema(description = "支付宝-账户") + private String aliCard; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WithdrawReq.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WithdrawReq.java new file mode 100644 index 0000000..b87df59 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/account/WithdrawReq.java @@ -0,0 +1,20 @@ +package com.ruoyi.xq.dto.app.account; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class WithdrawReq { + @Schema(hidden = true) + private Long userId; + @Schema(description = "提现ID") + private Long id; + @Schema(description = "提现方式 1-支付宝 2-微信") + private Integer withdrawType; + @Schema(description = "支付宝-姓名") + private String aliName; + @Schema(description = "支付宝-账户") + private String aliCard; + @Schema(description = "微信-openId") + private String openId; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/withdraw/WithdrawListAppVo.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/withdraw/WithdrawListAppVo.java index 4327fe2..9ab9d01 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/withdraw/WithdrawListAppVo.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/app/withdraw/WithdrawListAppVo.java @@ -31,6 +31,19 @@ public class WithdrawListAppVo { */ @Schema(description = "提现金额") private BigDecimal withdrawMoney; + @Schema(description = "提现方式 1-支付宝 2-微信") + private Integer withdrawType; + /** + * 提现账户/openId + */ + @Schema(description = "提现账户/openId") + private String card; + /** + * 提现名称/微信名称 + */ + @Schema(description = "提现名称/微信名称") + private String name; + /** * 1-待审核 2-审核成功 3-审核失败 */ diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WithdrawTypeEnum.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WithdrawTypeEnum.java new file mode 100644 index 0000000..adf8f0e --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/account/WithdrawTypeEnum.java @@ -0,0 +1,21 @@ +package com.ruoyi.xq.enums.account; + +import lombok.Getter; + +/** + * + * @author duet + */ +@Getter +public enum WithdrawTypeEnum { + ALI(1,"支付宝"), + WX(2,"微信"), + ; + private final Integer code; + private final String text; + + WithdrawTypeEnum(Integer code, String text) { + this.code = code; + this.text = text; + } +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/lock/LockKey.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/lock/LockKey.java index 2e4ba26..ff08f4b 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/lock/LockKey.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/lock/LockKey.java @@ -14,6 +14,7 @@ public class LockKey { public static final String LOCK_VIDEO_SETTLE_REDIS = RedisHttpConstant.REDIS_P + "lock:videoSettle:%s"; public static final String LOCK_ONLINE_LOGIN_NOTICE_REDIS = RedisHttpConstant.REDIS_P + "lockHand:loginFansNotice:%s"; public static final String LOCK_USER_INFO_AUDIT_REDIS = RedisHttpConstant.REDIS_P + "lock:userInfoAudit:%s"; + public static final String LOCK_USER_BANK_CARD_REDIS = RedisHttpConstant.REDIS_P + "lock:userBankCard:%s"; public static final String LOCK_USER_VISITOR_ADD_REDIS = RedisHttpConstant.REDIS_P + "lock:userVisitorAdd:%s-%s"; public static String getRegisterLockKey(String mobile){ @@ -55,4 +56,8 @@ public class LockKey { public static String getUserInfoAuditLock(Long userId) { return String.format(LOCK_USER_INFO_AUDIT_REDIS,userId); } + + public static String getUserBankCard(Long userId) { + return String.format(LOCK_USER_BANK_CARD_REDIS,userId); + } } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserBankCardService.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserBankCardService.java index 201528a..6498268 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserBankCardService.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserBankCardService.java @@ -2,6 +2,7 @@ package com.ruoyi.xq.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.xq.domain.UserBankCard; +import com.ruoyi.xq.dto.app.account.UpdateAliReq; /** * 用户银行卡Service接口 @@ -11,4 +12,7 @@ import com.ruoyi.xq.domain.UserBankCard; */ public interface UserBankCardService extends IService { + void updateAli(UpdateAliReq req); + + UserBankCard getByUserId(Long userId); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserWithdrawService.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserWithdrawService.java index 370f961..50b4842 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserWithdrawService.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserWithdrawService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.xq.domain.UserWithdraw; import com.ruoyi.xq.dto.admin.withdraw.UserWithdrawAdminVo; +import com.ruoyi.xq.dto.app.account.WithdrawReq; import com.ruoyi.xq.dto.app.withdraw.WithdrawListAppVo; import com.ruoyi.xq.dto.app.withdraw.WithdrawListPageQuery; @@ -16,7 +17,7 @@ import com.ruoyi.xq.dto.app.withdraw.WithdrawListPageQuery; */ public interface UserWithdrawService extends IService { - void saveWithdraw(Long userId, Long withdrawSettingId); + void saveWithdraw(WithdrawReq req); Page pageApp(PageQuery pageQuery, WithdrawListPageQuery query); diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserBankCardServiceImpl.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserBankCardServiceImpl.java index a2a557e..d7caaef 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserBankCardServiceImpl.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserBankCardServiceImpl.java @@ -1,10 +1,18 @@ package com.ruoyi.xq.service.impl; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.xq.domain.UserBankCard; +import com.ruoyi.xq.dto.app.account.UpdateAliReq; +import com.ruoyi.xq.dto.common.user.MinUser; +import com.ruoyi.xq.lock.LockKey; import com.ruoyi.xq.mapper.UserBankCardMapper; import com.ruoyi.xq.service.UserBankCardService; +import com.ruoyi.xq.service.UserService; import lombok.RequiredArgsConstructor; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -16,5 +24,50 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor @Service public class UserBankCardServiceImpl extends ServiceImpl implements UserBankCardService { + @Autowired + private RedissonClient redissonClient; + @Autowired + private UserService userService; + @Override + public void updateAli(UpdateAliReq req) { + checkData(req.getUserId()); + this.update(Wrappers.lambdaUpdate(UserBankCard.class) + .set(UserBankCard::getAliCard,req.getAliCard()) + .set(UserBankCard::getAliName, req.getAliName()) + .eq(UserBankCard::getUserId, req.getUserId())); + } + private void checkData(Long userId){ + UserBankCard one = this.getByUserId(userId); + if(one != null){ + return; + } + String key = LockKey.getUserBankCard(userId); + RLock lock = redissonClient.getLock(key); + try { + lock.lock(); + one = this.getByUserId(userId); + if(one != null){ + return; + } + MinUser minUser = userService.getMinUserById(userId); + UserBankCard card = new UserBankCard(); + card.setUserId(userId); + card.setUsercode(minUser.getUsercode()); + this.save(card); + }finally { + try { + lock.unlock(); + }catch (Exception e){ + // + } + } + } + + + + @Override + public UserBankCard getByUserId(Long userId){ + return this.getOne(Wrappers.lambdaQuery(UserBankCard.class).eq(UserBankCard::getUserId, userId).last("limit 1")); + } } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserWithdrawServiceImpl.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserWithdrawServiceImpl.java index 8d4f522..d796c9f 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserWithdrawServiceImpl.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserWithdrawServiceImpl.java @@ -7,20 +7,20 @@ import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.xq.domain.*; import com.ruoyi.xq.dto.admin.withdraw.UserWithdrawAdminVo; +import com.ruoyi.xq.dto.app.account.WithdrawReq; import com.ruoyi.xq.dto.app.withdraw.WithdrawListAppVo; import com.ruoyi.xq.dto.app.withdraw.WithdrawListPageQuery; +import com.ruoyi.xq.enums.account.WithdrawTypeEnum; import com.ruoyi.xq.enums.common.AuditEnum; import com.ruoyi.xq.enums.common.OrderTypeEnum; import com.ruoyi.xq.enums.common.TraceIdEnum; import com.ruoyi.xq.manager.OrderNoUtil; import com.ruoyi.xq.manager.TraceIdManager; import com.ruoyi.xq.mapper.UserWithdrawMapper; -import com.ruoyi.xq.service.UserExtendService; -import com.ruoyi.xq.service.UserService; -import com.ruoyi.xq.service.UserWithdrawService; -import com.ruoyi.xq.service.WithdrawSettingService; +import com.ruoyi.xq.service.*; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -45,17 +45,30 @@ public class UserWithdrawServiceImpl extends ServiceImpl