1
This commit is contained in:
parent
975050e5d6
commit
d9958a0c53
@ -62,6 +62,25 @@ public class MemberPointsController extends BaseController {
|
||||
return success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 积分提现
|
||||
*
|
||||
* @param memberPoints {@link MemberPoints}
|
||||
* @return com.ruoyi.common.core.domain.AjaxResult
|
||||
* @author PQZ
|
||||
* @date 17:14 2025/4/28
|
||||
**/
|
||||
@Log(title = "积分提现", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/payout")
|
||||
public AjaxResult payout(@RequestBody MemberPoints memberPoints) {
|
||||
try {
|
||||
memberPointsService.payout(memberPoints);
|
||||
}catch (Exception e) {
|
||||
return error(e.getMessage());
|
||||
}
|
||||
return success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改博主积分变动明细
|
||||
*/
|
||||
|
@ -47,6 +47,10 @@ public class MemberPoints extends DlBaseEntity
|
||||
/** 积分 */
|
||||
@Excel(name = "积分")
|
||||
private double points;
|
||||
/** 订单编号 */
|
||||
private String orderNo;
|
||||
/** 状态(有效/无效)*/
|
||||
private String status;
|
||||
|
||||
/** 剩余 */
|
||||
@Excel(name = "剩余")
|
||||
|
@ -83,6 +83,6 @@ public interface IMemberCardService extends IService<MemberCard> {
|
||||
* @param userType 身份类型
|
||||
* @return java.lang.String
|
||||
**/
|
||||
String getUserCardEndDate(Long userId,String userType);
|
||||
MemberCard getUserCardEndDate(Long userId,String userType);
|
||||
|
||||
}
|
||||
|
@ -44,4 +44,21 @@ public interface IMemberPointsService extends IService<MemberPoints> {
|
||||
* @date 16:11 2025/3/31
|
||||
**/
|
||||
double getBloggerBalance(Long userId);
|
||||
|
||||
/**
|
||||
* 积分提现
|
||||
* @author PQZ
|
||||
* @date 17:14 2025/4/28
|
||||
* @param memberPoints {@link MemberPoints}
|
||||
**/
|
||||
void payout(MemberPoints memberPoints) throws Exception;
|
||||
|
||||
/**
|
||||
* 支付成功回调
|
||||
* @author PQZ
|
||||
* @date 17:29 2025/4/28
|
||||
* @param orderNo 订单编号
|
||||
* @type type 回调状态(success:成功,其他为失败)
|
||||
**/
|
||||
void payoutCallback(String orderNo,String type);
|
||||
}
|
||||
|
@ -330,12 +330,13 @@ public class MemberCardServiceImpl extends ServiceImpl<MemberCardMapper, MemberC
|
||||
* @date 14:10 2025/4/25
|
||||
**/
|
||||
@Override
|
||||
public String getUserCardEndDate(Long userId, String userType) {
|
||||
public MemberCard getUserCardEndDate(Long userId, String userType) {
|
||||
List<MemberCard> memberCardList = memberCardMapper.selectMemberCardList(userId,userType,DateUtil.formatDateTime(new Date()));
|
||||
if(memberCardList.isEmpty()){
|
||||
return null;
|
||||
}
|
||||
return DateUtil.formatDate(memberCardList.get(0).getEndDate());
|
||||
// return DateUtil.formatDate(memberCardList.get(0).getEndDate());
|
||||
return memberCardList.get(0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -8,6 +8,7 @@ import com.ruoyi.base.domain.BaseCategory;
|
||||
import com.ruoyi.base.service.IBaseCategoryService;
|
||||
import com.ruoyi.common.config.DlRightsConfig;
|
||||
import com.ruoyi.common.core.domain.DlBaseEntity;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.member.domain.MemberPoints;
|
||||
import com.ruoyi.member.mapper.MemberPointsMapper;
|
||||
import com.ruoyi.member.service.IMemberPointsService;
|
||||
@ -16,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* 博主积分变动明细Service业务层处理
|
||||
@ -64,6 +66,7 @@ public class MemberPointsServiceImpl extends ServiceImpl<MemberPointsMapper, Mem
|
||||
LambdaQueryWrapper<MemberPoints> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag,0)
|
||||
.eq(MemberPoints::getUserId,memberPoints.getUserId())
|
||||
.eq(MemberPoints::getStatus,"01")
|
||||
.orderByDesc(DlBaseEntity::getCreateTime);
|
||||
List<MemberPoints> list = list(lambdaQueryWrapper);
|
||||
//如果没有记录则为初始新增
|
||||
@ -96,6 +99,7 @@ public class MemberPointsServiceImpl extends ServiceImpl<MemberPointsMapper, Mem
|
||||
LambdaQueryWrapper<MemberPoints> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper
|
||||
.eq(MemberPoints::getUserId,userId)
|
||||
.eq(MemberPoints::getStatus,"01")
|
||||
.eq(DlBaseEntity::getDelFlag,0)
|
||||
.orderByDesc(DlBaseEntity::getCreateTime);
|
||||
List<MemberPoints> list = list(lambdaQueryWrapper);
|
||||
@ -105,4 +109,100 @@ public class MemberPointsServiceImpl extends ServiceImpl<MemberPointsMapper, Mem
|
||||
return list.get(0).getBalance();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 积分提现
|
||||
*
|
||||
* @param memberPoints {@link MemberPoints}
|
||||
* @author PQZ
|
||||
* @date 17:14 2025/4/28
|
||||
**/
|
||||
@Override
|
||||
public void payout(MemberPoints memberPoints) throws Exception {
|
||||
if (memberPoints.getPoints()<= 0){
|
||||
throw new Exception("无效提现额度");
|
||||
}
|
||||
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
List<MemberPoints> wayList = getOnWayOrder(userId);
|
||||
if (!wayList.isEmpty()){
|
||||
throw new Exception("存在未处理完成的提现订单");
|
||||
}
|
||||
|
||||
double nowBalance = getBloggerBalance(userId);
|
||||
if (memberPoints.getPoints()>nowBalance){
|
||||
throw new Exception("当前用户积分余额为"+nowBalance+"您已超出提现额度");
|
||||
}
|
||||
|
||||
if (memberPoints.getPoints()> 200){
|
||||
throw new Exception("单次最高提现200元");
|
||||
}
|
||||
memberPoints.setOrderNo(generateOrderId());
|
||||
memberPoints.setStatus("02");
|
||||
memberPoints.setUserId(userId);
|
||||
memberPoints.setTitle("积分提现-"+memberPoints.getPoints());
|
||||
memberPoints.setType("2");
|
||||
save(memberPoints);
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付成功回调
|
||||
*
|
||||
* @param orderNo 订单编号
|
||||
* @author PQZ
|
||||
* @date 17:29 2025/4/28
|
||||
**/
|
||||
@Override
|
||||
public void payoutCallback(String orderNo,String type) {
|
||||
/*防重复处理*/
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
double nowBalance = getBloggerBalance(userId);
|
||||
//通过订单编号查询积分记录
|
||||
LambdaQueryWrapper<MemberPoints> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper
|
||||
.eq(MemberPoints::getOrderNo,orderNo)
|
||||
.eq(DlBaseEntity::getDelFlag,0)
|
||||
.eq(MemberPoints::getStatus,"02");
|
||||
List<MemberPoints> memberPoints = list(lambdaQueryWrapper);
|
||||
/*区分微信调用成功和失败*/
|
||||
if (!memberPoints.isEmpty()) {
|
||||
MemberPoints points = memberPoints.get(0);
|
||||
if ("success".equals(type)) {
|
||||
points.setBalance(nowBalance - points.getPoints());
|
||||
points.setStatus("01");
|
||||
updateById(points);
|
||||
} else {
|
||||
removeById(points);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询当前登录用户状态为未体现成功的记录
|
||||
* @author PQZ
|
||||
* @date 17:52 2025/4/28
|
||||
* @param userId 用户id
|
||||
* @return java.util.List<com.ruoyi.member.domain.MemberPoints>
|
||||
**/
|
||||
private List<MemberPoints> getOnWayOrder(Long userId){
|
||||
LambdaQueryWrapper<MemberPoints> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper
|
||||
.eq(MemberPoints::getUserId,userId)
|
||||
.eq(MemberPoints::getStatus,"02")
|
||||
.eq(DlBaseEntity::getDelFlag,0)
|
||||
.orderByDesc(DlBaseEntity::getCreateTime);
|
||||
return list(lambdaQueryWrapper);
|
||||
}
|
||||
|
||||
|
||||
private String generateOrderId() {
|
||||
// 获取当前时间戳(以秒为单位)
|
||||
long timestamp = System.currentTimeMillis() / 1000;
|
||||
// 生成3位随机数
|
||||
Random random = new Random();
|
||||
// 生成范围在100到999之间的随机数
|
||||
int randomNum = random.nextInt(900) + 100;
|
||||
// 组合成订单编号
|
||||
return "JFTX-" + timestamp + String.format("%03d", randomNum);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@ -19,6 +20,7 @@ import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.constant.DictConstants;
|
||||
import com.ruoyi.framework.web.service.TokenService;
|
||||
import com.ruoyi.member.domain.MemberCard;
|
||||
import com.ruoyi.member.domain.MemberUser;
|
||||
import com.ruoyi.member.mapper.MemberUserMapper;
|
||||
import com.ruoyi.member.service.*;
|
||||
@ -141,7 +143,11 @@ public class MemberUserServiceImpl extends ServiceImpl<MemberUserMapper, MemberU
|
||||
//博主,通告主基本信息
|
||||
MemberUserVO result = memberUserMapper.queryByUserId(userId, userType);
|
||||
//查是否开通的会员以及会员到期的时间
|
||||
result.setMemberEndDate(memberCardService.getUserCardEndDate(userId,userType));
|
||||
MemberCard card = memberCardService.getUserCardEndDate(userId,userType);
|
||||
if (null != card) {
|
||||
result.setMemberEndDate(DateUtil.formatDate(card.getEndDate()));
|
||||
result.setCardName(card.getCardName());
|
||||
}
|
||||
if ("02".equals(userType)) {
|
||||
//积分
|
||||
result.setPointsBalance(pointsService.getBloggerBalance(userId));
|
||||
|
@ -48,4 +48,7 @@ public class MemberUserVO extends MemberUser {
|
||||
String identityName;
|
||||
/**会员到期日期*/
|
||||
String memberEndDate;
|
||||
/**会员名称*/
|
||||
String cardName;
|
||||
|
||||
}
|
||||
|
@ -6,8 +6,8 @@ spring:
|
||||
druid:
|
||||
# 主库数据源
|
||||
master:
|
||||
url: jdbc:mysql://124.222.105.7:3306/dl_notice?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
# url: jdbc:mysql://82.156.161.160:3306/dl_notice?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
# url: jdbc:mysql://124.222.105.7:3306/dl_notice?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
url: jdbc:mysql://82.156.161.160:3306/dl_notice?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
username: dl_notice
|
||||
password: 123456
|
||||
# 从库数据源
|
||||
|
@ -27,6 +27,7 @@
|
||||
<select id="queryListPage" parameterType="MemberPoints" resultMap="MemberPointsResult">
|
||||
<include refid="selectMemberPointsVo"/>
|
||||
<where>
|
||||
del_flag = 0 and status = '01'
|
||||
<if test="userId != null"> and user_id = #{userId}</if>
|
||||
</where>
|
||||
order by create_time desc
|
||||
|
Loading…
Reference in New Issue
Block a user