微信支付会员充值

dev
caolin 2023-08-20 17:05:40 +08:00
parent aeae6d9d8e
commit 8ab9529030
4 changed files with 90 additions and 2 deletions

View File

@ -13,6 +13,7 @@ import com.wechat.pay.java.core.notification.NotificationParser;
import com.wechat.pay.java.core.notification.RequestParam; import com.wechat.pay.java.core.notification.RequestParam;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest; import org.springframework.http.HttpRequest;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@ -36,6 +37,7 @@ import javax.annotation.Resource;
@Api(tags = "支付回调") @Api(tags = "支付回调")
@Controller @Controller
@RequestMapping("/payNoticeLog") @RequestMapping("/payNoticeLog")
@Slf4j
public class PayNoticeLogController { public class PayNoticeLogController {
@Resource @Resource
private WechatPayConfig wechatPayConfig; private WechatPayConfig wechatPayConfig;
@ -62,6 +64,7 @@ public class PayNoticeLogController {
@RequestHeader("Wechatpay-Timestamp") String timstamp, @RequestHeader("Wechatpay-Timestamp") String timstamp,
@RequestHeader("Wechatpay-Nonce") String nonce, @RequestHeader("Wechatpay-Nonce") String nonce,
@RequestBody String requestBody){ @RequestBody String requestBody){
log.info("支付回调信息==============》{}",requestBody);
NotificationConfig config = new RSAAutoCertificateConfig.Builder() NotificationConfig config = new RSAAutoCertificateConfig.Builder()
.merchantId(wechatPayConfig.getMchId()) .merchantId(wechatPayConfig.getMchId())
.privateKeyFromPath(wechatPayConfig.getPrivateKeyPath()) .privateKeyFromPath(wechatPayConfig.getPrivateKeyPath())
@ -94,6 +97,7 @@ public class PayNoticeLogController {
//1.订单详情表里修改数据 //1.订单详情表里修改数据
payInfoService.payNotice(Long.parseLong(outTradeNo),Boolean.FALSE); payInfoService.payNotice(Long.parseLong(outTradeNo),Boolean.FALSE);
//2.冲会员 //2.冲会员
userMemberService.purchaseMember(Long.parseLong(outTradeNo));
}else{ }else{
//还是各种业务逻辑 //还是各种业务逻辑

View File

@ -13,4 +13,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface ITdSysUserMemberService extends IService<TdSysUserMember> { public interface ITdSysUserMemberService extends IService<TdSysUserMember> {
/**
*
* @param payId
* @return
*/
Boolean purchaseMember(Long payId);
} }

View File

@ -77,13 +77,15 @@ public class OrderPayInfoServiceImpl extends ServiceImpl<OrderPayInfoMapper, Ord
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean payNotice(Long payId, Boolean payResult) { public Boolean payNotice(Long payId, Boolean payResult) {
log.info("支付回调信息===============> payId{} , payResult{}",payId,payResult);
OrderPayInfo orderPayInfo = this.getById(payId); OrderPayInfo orderPayInfo = this.getById(payId);
if (Objects.isNull(orderPayInfo)){ if (Objects.isNull(orderPayInfo)){
throw new BusinessException("订单信息不存在"); throw new BusinessException("订单信息不存在");
} }
orderPayInfo.setPayStatus(payResult?PayStatus.SUCCESS.getValue() : PayStatus.FAIL.getValue())
.setUpdateTime(LocalDateTime.now());
this.updateById(orderPayInfo);
return Boolean.TRUE; return Boolean.TRUE;
} }
} }

View File

@ -1,10 +1,25 @@
package com.jwl.driver.server.service.impl; package com.jwl.driver.server.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jwl.driver.server.entity.OrderPayInfo;
import com.jwl.driver.server.entity.TdMember;
import com.jwl.driver.server.entity.TdSysUserMember; import com.jwl.driver.server.entity.TdSysUserMember;
import com.jwl.driver.server.exception.BusinessException;
import com.jwl.driver.server.mapper.TdSysUserMemberMapper; import com.jwl.driver.server.mapper.TdSysUserMemberMapper;
import com.jwl.driver.server.service.IOrderPayInfoService;
import com.jwl.driver.server.service.ITdMemberService;
import com.jwl.driver.server.service.ITdSysUserMemberService; import com.jwl.driver.server.service.ITdSysUserMemberService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jwl.driver.server.service.ITdSysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Objects;
/** /**
* <p> * <p>
@ -17,4 +32,65 @@ import org.springframework.stereotype.Service;
@Service @Service
public class TdSysUserMemberServiceImpl extends ServiceImpl<TdSysUserMemberMapper, TdSysUserMember> implements ITdSysUserMemberService { public class TdSysUserMemberServiceImpl extends ServiceImpl<TdSysUserMemberMapper, TdSysUserMember> implements ITdSysUserMemberService {
@Autowired
private IOrderPayInfoService payInfoService;
@Autowired
private ITdMemberService memberService;
@Autowired
private ITdSysUserMemberService userMemberService;
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean purchaseMember(Long payId) {
final LocalDateTime nowTime = LocalDateTime.now();
OrderPayInfo payInfo = payInfoService.getById(payId);
if (Objects.isNull(payInfo)){
throw new BusinessException("订单信息不存在");
}
final Long userId = payInfo.getUserId();
final Integer memberId = payInfo.getMemberId();
// 查询会员 不管有效无效
TdMember member = memberService.getById(memberId);
if (Objects.isNull(member)){
throw new BusinessException("购买的会员不存在");
}
//查看该用户是否存在有效会员
LambdaQueryWrapper<TdSysUserMember> cond = new LambdaQueryWrapper<TdSysUserMember>()
.eq(TdSysUserMember::getUserId,userId)
.eq(TdSysUserMember::getMemberId,memberId)
.gt(TdSysUserMember::getEndDate, nowTime);
TdSysUserMember userMember = this.getOne(cond);
//如果用户没购买该会员 或者该会员已过期就新建一个会员
if (Objects.isNull(userMember)){
userMember = new TdSysUserMember()
.setMemberId(memberId)
.setUserId(userId)
.setCreateTime(nowTime)
.setUpdateTime(nowTime)
.setStartDate(LocalDateTime.of(LocalDate.now(), LocalTime.MIN))
.setEndDate(LocalDateTime.of(LocalDate.now(), LocalTime.MIN).minusSeconds(1));
boolean save = this.save(userMember);
if (!save){
throw new BusinessException("充值会员失败");
}
}
LocalDateTime endTime = userMember.getEndDate();
if (StrUtil.equals(member.getUnit(),"1")){
endTime = endTime.plusDays(member.getDuration());
}else if (StrUtil.equals(member.getUnit(),"2")){
endTime = endTime.plusMonths(member.getDuration());
} else if (StrUtil.equals(member.getUnit(),"3")) {
endTime = endTime.plusYears(member.getDuration());
}
userMember.setEndDate(endTime);
boolean update = this.update(userMember, cond);
if (!update){
throw new BusinessException("会员充值失败");
}
return Boolean.TRUE;
}
} }