加入支付宝回调接口逻辑,会员关系树和会员账户流水 mapper累
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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小于zero;flag = 0,表示IntegrationAmount等于zero;flag = 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小于zero;flag = 0,表示IntegrationAmount等于zero;flag = 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);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user