This commit is contained in:
77
2024-03-25 20:52:18 +08:00
parent 8a89c53258
commit b8085e0416
16 changed files with 210 additions and 77 deletions

View File

@@ -0,0 +1,85 @@
package com.ruoyi.xq.controller.app;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.PageModel;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.xq.domain.UserExtend;
import com.ruoyi.xq.domain.WxTransOrder;
import com.ruoyi.xq.dto.app.account.AccountDetailVo;
import com.ruoyi.xq.dto.app.account.AccountInfoVO;
import com.ruoyi.xq.dto.app.pay.OrderCreateVo;
import com.ruoyi.xq.dto.app.wxtrans.GenWxTransOrderReq;
import com.ruoyi.xq.dto.app.wxtrans.WxTransPriceAppVo;
import com.ruoyi.xq.enums.common.SystemConfigEnum;
import com.ruoyi.xq.manager.SystemConfigManager;
import com.ruoyi.xq.service.AccountChangeLogService;
import com.ruoyi.xq.service.UserExtendService;
import com.ruoyi.xq.service.WxTransOrderService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
@RestController
@RequestMapping("/api/account")
@Tag(name = "账户管理")
public class AccountAppController {
@Autowired
private UserExtendService userExtendService;
@Autowired
private AccountChangeLogService accountChangeLogService;
@Autowired
private WxTransOrderService wxTransOrderService;
@Autowired
private SystemConfigManager systemConfigManager;
@GetMapping("/info")
@Operation(summary = "当前用户信息的账户余额情况")
@Log(title = "当前用户信息的账户余额情况", businessType = BusinessType.OTHER, isSaveDb = false)
public R<AccountInfoVO> accountInfo(){
UserExtend userExtend = userExtendService.getByUserId(LoginHelper.getUserId());
AccountInfoVO accountInfoVO = new AccountInfoVO();
accountInfoVO.setUserId(userExtend.getUserId());
accountInfoVO.setIncomeCoin(userExtend.getIncomeCoin());
accountInfoVO.setWxTransNum(userExtend.getWxTransNum());
return R.ok(accountInfoVO);
}
@GetMapping("/detail/page")
@Operation(summary = "查询账户明细")
@Log(title = "查询账户明细", businessType = BusinessType.OTHER, isSaveDb = false)
public R<PageModel<AccountDetailVo>> detail(PageQuery pageQuery){
Page<AccountDetailVo> page = accountChangeLogService.pageApp(pageQuery,LoginHelper.getUserId());
return R.ok(PageModel.build(page));
}
@GetMapping("/wxTrans/price")
@Operation(summary = "获取微信交换单价")
@Log(title = "获取微信交换单价", businessType = BusinessType.OTHER, isSaveDb = false)
public R<WxTransPriceAppVo> getPrice(){
WxTransPriceAppVo vo = new WxTransPriceAppVo();
BigDecimal price = systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.WX_TRANS_PRICE);
vo.setPrice(price);
return R.ok(vo);
}
@PostMapping("/wxTrans/order/create")
@Operation(summary = "生成微信交换订单")
@Log(title = "生成微信交换订单", businessType = BusinessType.OTHER, isSaveDb = false)
public R<OrderCreateVo> createVipOrder(@RequestBody GenWxTransOrderReq req){
Long userId = LoginHelper.getUserId();
WxTransOrder vipOrder = wxTransOrderService.createVipOrder(userId, req.getWxTransNum());
OrderCreateVo result = new OrderCreateVo();
result.setPrice(vipOrder.getWxPrice());
result.setOrderNo(vipOrder.getOrderNo());
result.setOrderName(vipOrder.getOrderName());
return R.ok(result);
}
}

View File

@@ -1,13 +0,0 @@
package com.ruoyi.xq.controller.app;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/invite")
@Tag(name = "邀请推广接口")
public class InviteAppController {
}

View File

@@ -3,11 +3,8 @@ package com.ruoyi.xq.controller.app;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.xq.domain.UserExtend;
import com.ruoyi.xq.dto.app.common.IdsReq;
import com.ruoyi.xq.dto.app.user.*;
import com.ruoyi.xq.dto.app.user.vo.AccountInfoVO;
import com.ruoyi.xq.dto.app.user.vo.CurrentUserFullInfoVo;
import com.ruoyi.xq.dto.app.user.vo.CurrentUserInfoVo;
import com.ruoyi.xq.dto.app.user.vo.UserAuthInfoVo;
@@ -39,17 +36,6 @@ public class UserAppController {
return R.ok(vo);
}
@GetMapping("/user/account/info")
@Operation(summary = "当前用户信息的账户余额情况")
@Log(title = "当前用户信息的账户余额情况", businessType = BusinessType.OTHER, isSaveDb = false)
public R<AccountInfoVO> accountInfo(){
UserExtend userExtend = userExtendService.getByUserId(LoginHelper.getUserId());
AccountInfoVO accountInfoVO = new AccountInfoVO();
accountInfoVO.setUserId(userExtend.getUserId());
accountInfoVO.setIncomeCoin(userExtend.getIncomeCoin());
accountInfoVO.setWxTransNum(userExtend.getWxTransNum());
return R.ok(accountInfoVO);
}
@GetMapping("/user/query/fullInfo")
@Operation(summary = "当前用户的详细信息")

View File

@@ -45,7 +45,6 @@ public class WithdrawAppController {
return R.ok(result);
}
@PostMapping("/save")
@Operation(summary = "申请提现")
@Log(title = "申请提现", businessType = BusinessType.OTHER, isSaveDb = false)

View File

@@ -23,31 +23,5 @@ import java.math.BigDecimal;
@Tag(name = "微信交换接口")
public class WxTransAppController {
@Autowired
private WxTransOrderService wxTransOrderService;
@Autowired
private SystemConfigManager systemConfigManager;
@GetMapping("/get/price")
@Operation(summary = "获取微信交换单价")
@Log(title = "获取微信交换单价", businessType = BusinessType.OTHER, isSaveDb = false)
public R<WxTransPriceAppVo> getPrice(){
WxTransPriceAppVo vo = new WxTransPriceAppVo();
BigDecimal price = systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.WX_TRANS_PRICE);
vo.setPrice(price);
return R.ok(vo);
}
@PostMapping("/order/create")
@Operation(summary = "生成微信交换订单")
@Log(title = "生成微信交换订单", businessType = BusinessType.OTHER, isSaveDb = false)
public R<OrderCreateVo> createVipOrder(@RequestBody GenWxTransOrderReq req){
Long userId = LoginHelper.getUserId();
WxTransOrder vipOrder = wxTransOrderService.createVipOrder(userId, req.getWxTransNum());
OrderCreateVo result = new OrderCreateVo();
result.setPrice(vipOrder.getWxPrice());
result.setOrderNo(vipOrder.getOrderNo());
result.setOrderName(vipOrder.getOrderName());
return R.ok(result);
}
}

View File

@@ -0,0 +1,30 @@
package com.ruoyi.xq.dto.app.account;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
public class AccountDetailVo {
@Schema(description = "用户ID")
private Long userId;
@Schema(description = "用户编号")
private String usercode;
@Schema(description = "来源的用户ID")
private Long sourceUserId;
@Schema(description = "来源的用户昵称")
private String sourceNickname;
@Schema(description = "来源的头像")
private String sourceImg;
@Schema(description = "标题分类")
private String title;
@Schema(description = "内容")
private String content;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "金额")
private BigDecimal value;
}

View File

@@ -1,4 +1,4 @@
package com.ruoyi.xq.dto.app.user.vo;
package com.ruoyi.xq.dto.app.account;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

View File

@@ -31,26 +31,6 @@ public class WithdrawListAppVo {
*/
@Schema(description = "提现金额")
private BigDecimal withdrawMoney;
/**
* 真实提现金额
*/
@Schema(description = "真实提现金额")
private BigDecimal realWithdrawMoney;
/**
* 提现手续费金额
*/
@Schema(description = "提现手续费金额")
private BigDecimal withdrawFees;
/**
* 提现手续费
*/
@Schema(description = "提现手续费")
private BigDecimal withdrawFeesCate;
/**
* 是否打款
*/
@Schema(description = "是否打款")
private Integer pay;
/**
* 1-待审核 2-审核成功 3-审核失败
*/

View File

@@ -15,4 +15,5 @@ import org.apache.ibatis.annotations.Param;
public interface AccountChangeLogMapper extends BaseMapper<AccountChangeLog> {
Page<AccountChangeLogAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("bo") AccountChangeLogAdminVo bo);
}

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.xq.domain.UserExtend;
import com.ruoyi.xq.dto.admin.user.UserExtendAdminVo;
import com.ruoyi.xq.dto.app.account.AccountDetailVo;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
@@ -28,4 +29,5 @@ public interface UserExtendMapper extends BaseMapper<UserExtend> {
boolean incsConsumeTotal(@Param("userId") Long userId, @Param("consumeMonty") BigDecimal consumeMonty);
}

View File

@@ -8,6 +8,7 @@ import com.ruoyi.xq.domain.AccountChangeLog;
import com.ruoyi.xq.domain.User;
import com.ruoyi.xq.dto.admin.log.AccountChangeLogAdminVo;
import com.ruoyi.xq.dto.admin.user.req.UpdateIncomeCoinReq;
import com.ruoyi.xq.dto.app.account.AccountDetailVo;
import com.ruoyi.xq.enums.user.AccountChangeCodeEnum;
import java.math.BigDecimal;
@@ -27,4 +28,6 @@ public interface AccountChangeLogService extends IService<AccountChangeLog> {
void saveLogAdminOfSystem(User user, AccountChangeCodeEnum accountChangeCodeEnum, UpdateIncomeCoinReq bo, LoginUser loginUser);
Page<AccountChangeLogAdminVo> pageAdmin(PageQuery pageQuery, AccountChangeLogAdminVo bo);
Page<AccountDetailVo> pageApp(PageQuery pageQuery, Long userId);
}

View File

@@ -8,6 +8,7 @@ import com.ruoyi.xq.domain.UserExtend;
import com.ruoyi.xq.dto.admin.user.UserExtendAdminVo;
import com.ruoyi.xq.dto.admin.user.req.UpdateIncomeCoinReq;
import com.ruoyi.xq.dto.admin.user.req.UpdateWxTransNumReq;
import com.ruoyi.xq.dto.app.account.AccountDetailVo;
import com.ruoyi.xq.enums.user.AccountChangeCodeEnum;
import java.math.BigDecimal;
@@ -38,5 +39,4 @@ public interface UserExtendService extends IService<UserExtend> {
UserExtend getByUserId(Long id);
}

View File

@@ -1,5 +1,8 @@
package com.ruoyi.xq.service.impl;
import cn.hutool.core.util.PageUtil;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.PageQuery;
@@ -8,17 +11,20 @@ import com.ruoyi.xq.domain.AccountChangeLog;
import com.ruoyi.xq.domain.User;
import com.ruoyi.xq.dto.admin.log.AccountChangeLogAdminVo;
import com.ruoyi.xq.dto.admin.user.req.UpdateIncomeCoinReq;
import com.ruoyi.xq.dto.app.account.AccountDetailVo;
import com.ruoyi.xq.dto.common.user.MinUser;
import com.ruoyi.xq.enums.user.AccountCateEnum;
import com.ruoyi.xq.enums.user.AccountChangeCodeEnum;
import com.ruoyi.xq.mapper.AccountChangeLogMapper;
import com.ruoyi.xq.service.AccountChangeLogService;
import com.ruoyi.xq.service.UserService;
import com.ruoyi.xq.util.PageConvert;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
@@ -124,5 +130,59 @@ public class AccountChangeLogServiceImpl extends ServiceImpl<AccountChangeLogMap
return result;
}
@Override
public Page<AccountDetailVo> pageApp(PageQuery pageQuery, Long userId) {
Page<AccountChangeLog> page = this.page(pageQuery.build(),
Wrappers.lambdaQuery(AccountChangeLog.class).eq(AccountChangeLog::getUserId, userId).orderByDesc(AccountChangeLog::getCreateTime));
List<AccountChangeLog> records = page.getRecords();
if(CollectionUtils.isEmpty(records)){
return PageConvert.convertEmpty(page);
}
List<Long> userIds = new ArrayList<>();
for (AccountChangeLog record : records) {
if(record.getTarUserId() != null){
userIds.add(record.getTarUserId());
}
}
List<User> usersList = userService.listByIds(userIds);
Map<Long, User> userMap = usersList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
List<AccountDetailVo> vos = new ArrayList<>();
for (AccountChangeLog record : records) {
AccountDetailVo vo = new AccountDetailVo();
vo.setUserId(record.getUserId());
vo.setUsercode(record.getUsercode());
vo.setCreateTime(record.getCreateTime());
vo.setValue(record.getChangeValue());
User user = userMap.get(record.getTarUserId());
if(user != null){
vo.setSourceUserId(user.getId());
vo.setSourceNickname(user.getNickname());
vo.setSourceImg(user.getAvatar());
}
AccountChangeCodeEnum accountChangeCodeEnum = AccountChangeCodeEnum.getByCode(record.getChangeType());
if(accountChangeCodeEnum != null){
AccountCateEnum cate = accountChangeCodeEnum.getCate();
vo.setTitle(cate.getText());
switch (cate){
case SYSTEM_TRANS:
double price = record.getChangeValue().doubleValue();
String content = String.format("系统调整手动%s收益: %s", price > 0 ? "新增" : "减少", price);
vo.setContent(content);
break;
case WITHDRAW:
vo.setContent(accountChangeCodeEnum.getText());
break;
case AWARD_INVITE:
vo.setContent(accountChangeCodeEnum.getText());
break;
default:
break;
}
}
vos.add(vo);
}
return PageConvert.convert(page,vos);
}
}

View File

@@ -14,6 +14,7 @@ import com.ruoyi.xq.domain.WxTransOrder;
import com.ruoyi.xq.dto.admin.user.UserExtendAdminVo;
import com.ruoyi.xq.dto.admin.user.req.UpdateIncomeCoinReq;
import com.ruoyi.xq.dto.admin.user.req.UpdateWxTransNumReq;
import com.ruoyi.xq.dto.app.account.AccountDetailVo;
import com.ruoyi.xq.enums.common.OrderTypeEnum;
import com.ruoyi.xq.enums.common.SystemConfigEnum;
import com.ruoyi.xq.enums.consumer.ConsumerTypeEnum;

View File

@@ -0,0 +1,26 @@
package com.ruoyi.xq.util;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;
import java.util.List;
@Data
public class PageConvert {
public static <T,R> Page<T> convertEmpty(Page<R> page){
Page<T> result = new Page<>();
result.setTotal(page.getTotal());
result.setCurrent(page.getCurrent());
result.setSize(page.getSize());
return result;
}
public static <T,R> Page<T> convert(Page<R> page, List<T> record){
Page<T> result = new Page<>();
result.setTotal(page.getTotal());
result.setRecords(record);
result.setCurrent(page.getCurrent());
result.setSize(page.getSize());
return result;
}
}