加入支付宝回调接口逻辑,会员关系树和会员账户流水 mapper累

This commit is contained in:
2024-10-31 16:50:46 +08:00
parent 41d75efeb6
commit a3a4af4c70
13 changed files with 2034 additions and 84 deletions

View File

@@ -2,6 +2,8 @@ package com.buy507.mall.portal.controller;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -166,13 +168,13 @@ public class OmsPortalOrderController {
/**
* 支付宝支付成功回调方法
* @param request
* @param response
* 支付宝支付回调方法
* @param params
*/
@ApiOperation("支付宝支付回调")
@RequestMapping("/alipay/callback")
public void alipayCallback(HttpServletRequest request, HttpServletResponse response) throws Exception {
portalOrderService.wxPayCallback(request, response);
public void alipayCallback(@RequestParam Map<String, String> params) {
portalOrderService.alipayCallback(params);
}
}

View File

@@ -89,7 +89,7 @@ public interface OmsPortalOrderService {
CommonResult<Map<String, String>> wxPrePay(Long orderId);
/**
* 支付宝预支付
* 支付宝跳转
* @param orderId
* @return
*/
@@ -101,5 +101,10 @@ public interface OmsPortalOrderService {
* @param response
*/
void wxPayCallback(HttpServletRequest request, HttpServletResponse response) throws Exception;
/**
* 支付宝支付成功回调方法
* @param request
* @param response
*/
void alipayCallback(Map<String, String> params);
}

View File

@@ -6,16 +6,18 @@ import java.math.BigDecimal;
import java.net.URI;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.ExecutorService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayConfig;
import com.alipay.api.internal.util.AlipaySignature;
import com.buy507.mall.model.*;
import com.buy507.mall.portal.domain.*;
import com.buy507.mall.portal.service.*;
import org.slf4j.Logger;
@@ -46,23 +48,6 @@ import com.buy507.mall.mapper.PmsProductMapper;
import com.buy507.mall.mapper.PmsSkuStockMapper;
import com.buy507.mall.mapper.UmsMemberMapper;
import com.buy507.mall.mapper.UmsMemberReceiveAddressMapper;
import com.buy507.mall.model.DmsMemberTradeRecord;
import com.buy507.mall.model.DmsOfflinePaymentRecord;
import com.buy507.mall.model.DmsSellerBankAccount;
import com.buy507.mall.model.ItemType;
import com.buy507.mall.model.OmsCartItem;
import com.buy507.mall.model.OmsCartItemExample;
import com.buy507.mall.model.OmsExpressCompany;
import com.buy507.mall.model.OmsOrder;
import com.buy507.mall.model.OmsOrderExample;
import com.buy507.mall.model.OmsOrderItem;
import com.buy507.mall.model.OmsOrderItemExample;
import com.buy507.mall.model.OmsOrderOperateHistory;
import com.buy507.mall.model.OmsOrderSetting;
import com.buy507.mall.model.PmsProduct;
import com.buy507.mall.model.PmsSkuStock;
import com.buy507.mall.model.UmsMember;
import com.buy507.mall.model.UmsMemberReceiveAddress;
import com.buy507.mall.portal.component.CancelOrderSender;
import com.buy507.mall.portal.component.DistributeSender;
import com.buy507.mall.portal.component.RedisLock;
@@ -1267,7 +1252,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
long time = System.currentTimeMillis() + RedisLock.TIMEOUT;
if(redisLock.lock(String.valueOf(member.getId()), String.valueOf(time))) {
member = memberMapper.selectByPrimaryKey(member.getId());
member.setFreeze(member.getFreeze().subtract(order.getIntegrationAmount())); //修改冻结金额
member.setFreeze(member.getFreeze().add(order.getIntegrationAmount())); //修改冻结金额,增加冻结资金
memberMapper.updateByPrimaryKey(member);
redisLock.unlock(String.valueOf(member.getId()), String.valueOf(time));
break;
@@ -1521,50 +1506,51 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
OmsOrder order = list.get(0);
//订单状态0->待付款1->待发货2->已发货3->已完成4->已关闭5->无效订单
if(order != null && order.getStatus() == 0) {
Date date = new Date();
//提货方式0->自提1->物流
if(order.getDeliveryType() == 0) {
order.setStatus(2); //已发货
} else {
order.setStatus(1); //待发货
}
//支付方式0->未支付1->支付宝2->微信3->线下支付
order.setPayType(2); //微信
order.setModifyTime(date);
order.setPaymentTime(date);
orderMapper.updateByPrimaryKey(order);
BigDecimal zero = new BigDecimal(0);
int flag = order.getIntegrationAmount().compareTo(zero);
UmsMember member = memberMapper.selectByPrimaryKey(order.getMemberId());
//flag = -1,表示IntegrationAmount小于zeroflag = 0,表示IntegrationAmount等于zeroflag = 1,表示IntegrationAmount大于zero
if(flag == 1) {
//写入会员交易记录表
DmsMemberTradeRecord tradeRecord = new DmsMemberTradeRecord();
tradeRecord.setMemberId(member.getId());
tradeRecord.setItemType(ItemType.IntegralShopping); //积分购物
tradeRecord.setNote("积分抵扣");
tradeRecord.setTitle("积分抵扣");
tradeRecord.setValue(order.getIntegrationAmount());
tradeRecord.setType(1); //收支类型0->收入1->支出
tradeRecord.setCreateTime(date);
memberTradeRecordMapper.insert(tradeRecord);
while(true) {
long time = System.currentTimeMillis() + RedisLock.TIMEOUT;
if(redisLock.lock(String.valueOf(member.getId()), String.valueOf(time))) {
member = memberMapper.selectByPrimaryKey(member.getId());
member.setFreeze(member.getFreeze().subtract(order.getIntegrationAmount())); //修改冻结值
memberMapper.updateByPrimaryKey(member);
redisLock.unlock(String.valueOf(member.getId()), String.valueOf(time));
break;
}
}
}
Date date = new Date();
//提货方式0->自提1->物流
if(order.getDeliveryType() == 0) {
order.setStatus(2); //已发货
} else {
order.setStatus(1); //待发货
}
//支付方式0->未支付1->支付宝2->微信3->线下支付
order.setPayType(2); //微信
order.setModifyTime(date);
order.setPaymentTime(date);
orderMapper.updateByPrimaryKey(order);
BigDecimal zero = new BigDecimal(0);
int flag = order.getIntegrationAmount().compareTo(zero);
UmsMember member = memberMapper.selectByPrimaryKey(order.getMemberId());
//flag = -1,表示IntegrationAmount小于zeroflag = 0,表示IntegrationAmount等于zeroflag = 1,表示IntegrationAmount大于zero
if(flag == 1) {
//写入会员交易记录表
DmsMemberTradeRecord tradeRecord = new DmsMemberTradeRecord();
tradeRecord.setMemberId(member.getId());
tradeRecord.setItemType(ItemType.IntegralShopping); //积分购物
tradeRecord.setNote("积分抵扣");
tradeRecord.setTitle("积分抵扣");
tradeRecord.setValue(order.getIntegrationAmount());
tradeRecord.setType(1); //收支类型0->收入1->支出
tradeRecord.setCreateTime(date);
memberTradeRecordMapper.insert(tradeRecord);
while(true) {
long time = System.currentTimeMillis() + RedisLock.TIMEOUT;
if(redisLock.lock(String.valueOf(member.getId()), String.valueOf(time))) {
member = memberMapper.selectByPrimaryKey(member.getId());
member.setFreeze(member.getFreeze().subtract(order.getIntegrationAmount())); //修改冻结值
memberMapper.updateByPrimaryKey(member);
redisLock.unlock(String.valueOf(member.getId()), String.valueOf(time));
break;
}
}
}
//修改商品库存信息需要加锁,影响前台响应,所以用线程来处理
executorService.execute(new Runnable() {
@@ -1644,4 +1630,98 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
}
@Value("${alipay.alipayPublicKey}")
private String alipayPublicKey;
@Value("${alipay.charset}")
private String charset;
@Value("${alipay.signType}")
private String signType;
@Value("${becomeVipAmount}")
private String becomeVipAmount;
@Override
public void alipayCallback(Map<String, String> params) {
LOGGER.info("============开始处理支付宝的支付异步通知 接收到参数 {}", JSONUtil.toJsonStr(params));
// 验证签名
boolean verifyResult;
try {
verifyResult = AlipaySignature.rsaCheckV1(params, alipayPublicKey, charset, signType);
if (verifyResult) {
// 签名验证通过
String tradeStatus = params.get("trade_status");
String outTradeNo = params.get("out_trade_no");
if ("TRADE_SUCCESS".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus)) {
// 处理支付成功的业务逻辑
OmsOrderExample example = new OmsOrderExample();
example.createCriteria().andOrderSnEqualTo(outTradeNo);
List<OmsOrder> list = orderMapper.selectByExample(example);
if(list != null && list.size() > 0) {
OmsOrder order = list.get(0);
//订单状态0->待付款1->待发货2->已发货3->已完成4->已关闭5->无效订单
if (order != null && order.getStatus() == 0) {
// 更新订单状态
this.updateOderAndMemberInfo(order);
}
}
}
}
} catch (AlipayApiException e) {
e.printStackTrace();
}
}
private void updateOderAndMemberInfo(OmsOrder order) {
Date date = new Date();
//提货方式0->自提1->物流
if(order.getDeliveryType() == 0) {
order.setStatus(2); //已发货
} else {
order.setStatus(1); //待发货
}
//支付方式0->未支付1->支付宝2->微信3->线下支付
order.setPayType(1);
order.setModifyTime(date);
order.setPaymentTime(date);
orderMapper.updateByPrimaryKey(order);
//新增用户位普通用户订单支付成功后满一定金额成为vip普通会员
UmsMember member = memberMapper.selectByPrimaryKey(order.getMemberId());
//普通用户
if(member.getMemberLevel().equals(MemberLevel.Member) ){
/**
* 当前订单金额 大于等于 vip门槛金额
*/
if(order.getPayAmount().compareTo(new BigDecimal(becomeVipAmount)) >= 0 ){
member.setMemberLevel(MemberLevel.Consumer);
memberMapper.updateByPrimaryKey(member);
}
// else {
// /**
// * 订单统计累计
// */
// OmsOrderExample example = new OmsOrderExample();
// example.createCriteria().andMemberIdEqualTo(order.getMemberId()).andStatusEqualTo(3);
// List<OmsOrder> list = orderMapper.selectByExample(example);
// if(list != null && !list.isEmpty()){
// BigDecimal totalAmount = list.stream().map(OmsOrder::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
// totalAmount = totalAmount.add(order.getPayAmount());
// if(totalAmount.compareTo(vipAmount) >= 0 ){
// member.setMemberLevel(MemberLevel.Partner);
// memberMapper.updateByPrimaryKey(member);
// }
// }
// }
}
}
}